)]}'
{"version": 3, "sources": ["/base/static/src/js/res_config_settings.js", "/web/static/src/core/assets.js", "/web/static/src/core/browser/browser.js", "/web/static/src/core/browser/cookie_service.js", "/web/static/src/core/browser/feature_detection.js", "/web/static/src/core/browser/router_service.js", "/web/static/src/core/browser/title_service.js", "/web/static/src/core/checkbox/checkbox.js", "/web/static/src/core/commands/command_category.js", "/web/static/src/core/commands/command_hook.js", "/web/static/src/core/commands/command_palette.js", "/web/static/src/core/commands/command_palette_dialog.js", "/web/static/src/core/commands/command_service.js", "/web/static/src/core/commands/default_providers.js", "/web/static/src/core/confirmation_dialog/confirmation_dialog.js", "/web/static/src/core/context.js", "/web/static/src/core/datepicker/datepicker.js", "/web/static/src/core/debug/debug_context.js", "/web/static/src/core/debug/debug_menu.js", "/web/static/src/core/debug/debug_menu_basic.js", "/web/static/src/core/debug/debug_menu_items.js", "/web/static/src/core/debug/debug_providers.js", "/web/static/src/core/debug/debug_utils.js", "/web/static/src/core/debug/profiling/profiling_item.js", "/web/static/src/core/debug/profiling/profiling_service.js", "/web/static/src/core/dialog/dialog.js", "/web/static/src/core/dialog/dialog_container.js", "/web/static/src/core/dialog/dialog_service.js", "/web/static/src/core/domain.js", "/web/static/src/core/dropdown/dropdown.js", "/web/static/src/core/dropdown/dropdown_item.js", "/web/static/src/core/dropdown/dropdown_navigation_hook.js", "/web/static/src/core/effects/effect_container.js", "/web/static/src/core/effects/effect_service.js", "/web/static/src/core/effects/rainbow_man.js", "/web/static/src/core/errors/error_dialogs.js", "/web/static/src/core/errors/error_handlers.js", "/web/static/src/core/errors/error_service.js", "/web/static/src/core/errors/error_utils.js", "/web/static/src/core/file_input/file_input.js", "/web/static/src/core/hotkeys/hotkey_hook.js", "/web/static/src/core/hotkeys/hotkey_service.js", "/web/static/src/core/l10n/dates.js", "/web/static/src/core/l10n/localization.js", "/web/static/src/core/l10n/localization_service.js", "/web/static/src/core/l10n/translation.js", "/web/static/src/core/main_components_container.js", "/web/static/src/core/network/download.js", "/web/static/src/core/network/http_service.js", "/web/static/src/core/network/rpc_service.js", "/web/static/src/core/notifications/notification.js", "/web/static/src/core/notifications/notification_container.js", "/web/static/src/core/notifications/notification_service.js", "/web/static/src/core/orm_service.js", "/web/static/src/core/popover/popover.js", "/web/static/src/core/popover/popover_container.js", "/web/static/src/core/popover/popover_hook.js", "/web/static/src/core/popover/popover_service.js", "/web/static/src/core/position/position_hook.js", "/web/static/src/core/py_js/py.js", "/web/static/src/core/py_js/py_builtin.js", "/web/static/src/core/py_js/py_date.js", "/web/static/src/core/py_js/py_interpreter.js", "/web/static/src/core/py_js/py_parser.js", "/web/static/src/core/py_js/py_tokenizer.js", "/web/static/src/core/py_js/py_utils.js", "/web/static/src/core/registry.js", "/web/static/src/core/scroller_service.js", "/web/static/src/core/tooltip/tooltip.js", "/web/static/src/core/tooltip/tooltip_hook.js", "/web/static/src/core/ui/block_ui.js", "/web/static/src/core/ui/ui_service.js", "/web/static/src/core/user_service.js", "/web/static/src/core/utils/arrays.js", "/web/static/src/core/utils/components.js", "/web/static/src/core/utils/concurrency.js", "/web/static/src/core/utils/functions.js", "/web/static/src/core/utils/hooks.js", "/web/static/src/core/utils/numbers.js", "/web/static/src/core/utils/objects.js", "/web/static/src/core/utils/patch.js", "/web/static/src/core/utils/scrolling.js", "/web/static/src/core/utils/search.js", "/web/static/src/core/utils/strings.js", "/web/static/src/core/utils/timing.js", "/web/static/src/core/utils/ui.js", "/web/static/src/core/utils/urls.js", "/web/static/src/core/utils/xml.js", "/web/static/src/fields/fields.js", "/web/static/src/fields/formatters.js", "/web/static/src/fields/parsers.js", "/web/static/src/search/comparison_menu/comparison_menu.js", "/web/static/src/search/control_panel/control_panel.js", "/web/static/src/search/favorite_menu/custom_favorite_item.js", "/web/static/src/search/favorite_menu/favorite_menu.js", "/web/static/src/search/filter_menu/custom_filter_item.js", "/web/static/src/search/filter_menu/filter_menu.js", "/web/static/src/search/group_by_menu/custom_group_by_item.js", "/web/static/src/search/group_by_menu/group_by_menu.js", "/web/static/src/search/search_arch_parser.js", "/web/static/src/search/search_bar/search_bar.js", "/web/static/src/search/search_dropdown_item/search_dropdown_item.js", "/web/static/src/search/search_model.js", "/web/static/src/search/search_panel/search_panel.js", "/web/static/src/search/utils/dates.js", "/web/static/src/search/utils/group_by.js", "/web/static/src/search/utils/misc.js", "/web/static/src/search/with_search/with_search.js", "/web/static/src/views/debug_items.js", "/web/static/src/views/graph/colors.js", "/web/static/src/views/graph/graph_arch_parser.js", "/web/static/src/views/graph/graph_model.js", "/web/static/src/views/graph/graph_renderer.js", "/web/static/src/views/graph/graph_view.js", "/web/static/src/views/helpers/model.js", "/web/static/src/views/helpers/sample_server.js", "/web/static/src/views/helpers/standard_view_props.js", "/web/static/src/views/helpers/utils.js", "/web/static/src/views/helpers/view_hook.js", "/web/static/src/views/layout.js", "/web/static/src/views/onboarding_banner.js", "/web/static/src/views/pivot/pivot_arch_parser.js", "/web/static/src/views/pivot/pivot_group_by_menu.js", "/web/static/src/views/pivot/pivot_model.js", "/web/static/src/views/pivot/pivot_renderer.js", "/web/static/src/views/pivot/pivot_view.js", "/web/static/src/views/view.js", "/web/static/src/views/view_service.js", "/web/static/src/webclient/actions/action_container.js", "/web/static/src/webclient/actions/action_dialog.js", "/web/static/src/webclient/actions/action_hook.js", "/web/static/src/webclient/actions/action_service.js", "/web/static/src/webclient/actions/client_actions.js", "/web/static/src/webclient/actions/debug_items.js", "/web/static/src/webclient/clickbot/clickbot_loader.js", "/web/static/src/webclient/company_service.js", "/web/static/src/webclient/debug_items.js", "/web/static/src/webclient/loading_indicator/loading_indicator.js", "/web/static/src/webclient/menus/menu_helpers.js", "/web/static/src/webclient/menus/menu_providers.js", "/web/static/src/webclient/menus/menu_service.js", "/web/static/src/webclient/navbar/navbar.js", "/web/static/src/webclient/switch_company_menu/switch_company_menu.js", "/web/static/src/webclient/user_menu/user_menu.js", "/web/static/src/webclient/user_menu/user_menu_items.js", "/web/static/src/webclient/webclient.js", "/web/static/src/env.js", "/web/static/lib/jquery.scrollTo/jquery.scrollTo.js", "/web/static/lib/luxon/luxon.js", "/web/static/lib/py.js/lib/py.js", "/web/static/lib/py.js/lib/py_extras.js", "/web/static/lib/jquery.ba-bbq/jquery.ba-bbq.js", "/web/static/src/legacy/action_adapters.js", "/web/static/src/legacy/debug_manager.js", "/web/static/src/legacy/legacy_service_provider.js", "/web/static/src/legacy/legacy_client_actions.js", "/web/static/src/legacy/legacy_dialog.js", "/web/static/src/legacy/legacy_views.js", "/web/static/src/legacy/legacy_promise_error_handler.js", "/web/static/src/legacy/legacy_rpc_error_handler.js", "/web/static/src/legacy/root_widget.js", "/web/static/src/legacy/systray_menu.js", "/web/static/src/legacy/systray_menu_item.js", "/web/static/src/legacy/backend_utils.js", "/web/static/src/legacy/utils.js", "/web/static/src/legacy/web_client.js", "/web/static/src/legacy/js/_deprecated/basic_fields.js", "/web/static/src/legacy/js/_deprecated/crash_manager_warning_dialog.js", "/web/static/src/legacy/js/_deprecated/data.js", "/web/static/src/legacy/js/chrome/abstract_action.js", "/web/static/src/legacy/js/chrome/action_mixin.js", "/web/static/src/legacy/js/components/action_menus.js", "/web/static/src/legacy/js/components/custom_checkbox.js", "/web/static/src/legacy/js/components/custom_file_input.js", "/web/static/src/legacy/js/components/datepicker.js", "/web/static/src/legacy/js/components/dropdown_menu.js", "/web/static/src/legacy/js/components/dropdown_menu_item.js", "/web/static/src/legacy/js/components/pager.js", "/web/static/src/legacy/js/control_panel/comparison_menu.js", "/web/static/src/legacy/js/control_panel/control_panel.js", "/web/static/src/legacy/js/control_panel/control_panel_model_extension.js", "/web/static/src/legacy/js/control_panel/control_panel_x2many.js", "/web/static/src/legacy/js/control_panel/custom_favorite_item.js", "/web/static/src/legacy/js/control_panel/custom_filter_item.js", "/web/static/src/legacy/js/control_panel/custom_group_by_item.js", "/web/static/src/legacy/js/control_panel/favorite_menu.js", "/web/static/src/legacy/js/control_panel/filter_menu.js", "/web/static/src/legacy/js/control_panel/groupby_menu.js", "/web/static/src/legacy/js/control_panel/search_bar.js", "/web/static/src/legacy/js/control_panel/search_utils.js", "/web/static/src/legacy/js/core/domain.js", "/web/static/src/legacy/js/core/mvc.js", "/web/static/src/legacy/js/core/py_utils.js", "/web/static/src/legacy/js/core/context.js", "/web/static/src/legacy/js/core/data_comparison_utils.js", "/web/static/src/legacy/js/core/misc.js", "/web/static/src/legacy/js/core/profiling_qweb_view.js", "/web/static/src/legacy/js/fields/abstract_field.js", "/web/static/src/legacy/js/fields/abstract_field_owl.js", "/web/static/src/legacy/js/fields/basic_fields.js", "/web/static/src/legacy/js/fields/basic_fields_owl.js", "/web/static/src/legacy/js/fields/field_registry.js", "/web/static/src/legacy/js/fields/field_registry_owl.js", "/web/static/src/legacy/js/fields/field_utils.js", "/web/static/src/legacy/js/fields/field_wrapper.js", "/web/static/src/legacy/js/fields/relational_fields.js", "/web/static/src/legacy/js/fields/signature.js", "/web/static/src/legacy/js/fields/special_fields.js", "/web_enterprise/static/src/legacy/js/apps.js", "/web/static/src/legacy/js/report/utils.js", "/web/static/src/legacy/js/report/client_action.js", "/web/static/src/legacy/js/services/data_manager.js", "/web/static/src/legacy/js/services/report_service.js", "/web/static/src/legacy/js/services/session.js", "/web/static/src/legacy/js/tools/tools.js", "/web/static/src/legacy/js/views/abstract_controller.js", "/web/static/src/legacy/js/views/abstract_model.js", "/web/static/src/legacy/js/views/abstract_renderer.js", "/web/static/src/legacy/js/views/abstract_renderer_owl.js", "/web/static/src/legacy/js/views/abstract_view.js", "/web/static/src/legacy/js/views/action_model.js", "/web/static/src/legacy/js/views/basic/basic_controller.js", "/web/static/src/legacy/js/views/basic/basic_model.js", "/web/static/src/legacy/js/views/basic/basic_renderer.js", "/web/static/src/legacy/js/views/basic/basic_view.js", "/web/static/src/legacy/js/views/basic/widget_registry.js", "/web/static/src/legacy/js/views/basic/widget_registry_owl.js", "/web/static/src/legacy/js/views/basic/widget_wrapper.js", "/web/static/src/legacy/js/views/calendar/calendar_controller.js", "/web/static/src/legacy/js/views/calendar/calendar_model.js", "/web/static/src/legacy/js/views/calendar/calendar_popover.js", "/web/static/src/legacy/js/views/calendar/calendar_quick_create.js", "/web/static/src/legacy/js/views/calendar/calendar_renderer.js", "/web/static/src/legacy/js/views/calendar/calendar_view.js", "/web/static/src/legacy/js/views/field_manager_mixin.js", "/web/static/src/legacy/js/views/file_upload_mixin.js", "/web/static/src/legacy/js/views/file_upload_progress_bar.js", "/web/static/src/legacy/js/views/file_upload_progress_card.js", "/web/static/src/legacy/js/views/form/form_controller.js", "/web/static/src/legacy/js/views/form/form_renderer.js", "/web/static/src/legacy/js/views/form/form_view.js", "/web/static/src/legacy/js/views/kanban/kanban_column.js", "/web/static/src/legacy/js/views/kanban/kanban_column_progressbar.js", "/web/static/src/legacy/js/views/kanban/kanban_column_quick_create.js", "/web/static/src/legacy/js/views/kanban/kanban_controller.js", "/web/static/src/legacy/js/views/kanban/kanban_examples_registry.js", "/web/static/src/legacy/js/views/kanban/kanban_model.js", "/web/static/src/legacy/js/views/kanban/kanban_record.js", "/web/static/src/legacy/js/views/kanban/kanban_record_quick_create.js", "/web/static/src/legacy/js/views/kanban/kanban_renderer.js", "/web/static/src/legacy/js/views/kanban/kanban_view.js", "/web/static/src/legacy/js/views/kanban/quick_create_form_view.js", "/web/static/src/legacy/js/views/list/list_confirm_dialog.js", "/web/static/src/legacy/js/views/list/list_controller.js", "/web/static/src/legacy/js/views/list/list_editable_renderer.js", "/web/static/src/legacy/js/views/list/list_model.js", "/web/static/src/legacy/js/views/list/list_renderer.js", "/web/static/src/legacy/js/views/list/list_view.js", "/web/static/src/legacy/js/views/qweb/qweb_view.js", "/web/static/src/legacy/js/views/renderer_wrapper.js", "/web/static/src/legacy/js/views/sample_server.js", "/web/static/src/legacy/js/views/search_panel.js", "/web/static/src/legacy/js/views/search_panel_model_extension.js", "/web/static/src/legacy/js/views/select_create_controllers_registry.js", "/web/static/src/legacy/js/views/signature_dialog.js", "/web/static/src/legacy/js/views/standalone_field_manager_mixin.js", "/web/static/src/legacy/js/views/view_dialogs.js", "/web/static/src/legacy/js/views/view_registry.js", "/web/static/src/legacy/js/views/view_utils.js", "/web/static/src/legacy/js/widgets/change_password.js", "/web/static/src/legacy/js/widgets/data_export.js", "/web/static/src/legacy/js/widgets/date_picker.js", "/web/static/src/legacy/js/widgets/domain_selector_dialog.js", "/web/static/src/legacy/js/widgets/domain_selector.js", "/web/static/src/legacy/js/widgets/iframe_widget.js", "/web/static/src/legacy/js/widgets/model_field_selector.js", "/web/static/src/legacy/js/widgets/pie_chart.js", "/web/static/src/legacy/js/widgets/ribbon.js", "/web/static/src/legacy/js/widgets/week_days.js", "/web/static/src/legacy/js/widgets/signature.js", "/web/static/src/legacy/js/widgets/attach_document.js", "/web/static/src/legacy/js/apps.js", "/web/static/src/legacy/js/env.js", "/web/static/src/legacy/js/model.js", "/web/static/src/legacy/js/owl_compatibility.js", "/base_setup/static/src/js/res_config_dev_tool.js", "/base_setup/static/src/js/res_config_edition.js", "/base_setup/static/src/js/res_config_invite_users.js", "/bus/static/src/js/crosstab_bus.js", "/bus/static/src/js/longpolling_bus.js", "/bus/static/src/js/services/assets_watchdog_service.js", "/bus/static/src/js/services/bus_service.js", "/web_tour/static/src/debug/debug_manager.js", "/web_tour/static/src/debug/tour_dialog_component.js", "/web_tour/static/src/services/tour_service.js", "/mail/static/src/js/activity.js", "/mail/static/src/js/basic_view.js", "/mail/static/src/js/core/translation.js", "/mail/static/src/js/custom_filter_item.js", "/mail/static/src/js/document_viewer.js", "/mail/static/src/js/emojis.js", "/mail/static/src/js/emojis_mixin.js", "/mail/static/src/js/field_char.js", "/mail/static/src/js/field_char_emojis.js", "/mail/static/src/js/field_emojis_common.js", "/mail/static/src/js/field_text_emojis.js", "/mail/static/src/js/m2x_avatar_user.js", "/mail/static/src/js/many2many_tags_email.js", "/mail/static/src/js/systray/systray_activity_menu.js", "/mail/static/src/js/tools/debug_manager.js", "/mail/static/src/js/tours/mail.js", "/mail/static/src/js/utils.js", "/mail/static/src/js/views/activity/activity_cell.js", "/mail/static/src/js/views/activity/activity_controller.js", "/mail/static/src/js/views/activity/activity_model.js", "/mail/static/src/js/views/activity/activity_record.js", "/mail/static/src/js/views/activity/activity_renderer.js", "/mail/static/src/js/views/activity/activity_view.js", "/mail/static/src/utils/deferred/deferred.js", "/mail/static/src/utils/media_monitoring/media_monitoring.js", "/mail/static/src/utils/throttle/throttle.js", "/mail/static/src/utils/timer/timer.js", "/mail/static/src/utils/messaging_component.js", "/mail/static/src/utils/utils.js", "/mail/static/src/component_hooks/use_component_to_model/use_component_to_model.js", "/mail/static/src/component_hooks/use_drag_visible_dropzone/use_drag_visible_dropzone.js", "/mail/static/src/component_hooks/use_models/use_models.js", "/mail/static/src/component_hooks/use_ref_to_model/use_ref_to_model.js", "/mail/static/src/component_hooks/use_refs/use_refs.js", "/mail/static/src/component_hooks/use_rendered_values/use_rendered_values.js", "/mail/static/src/component_hooks/use_should_update_based_on_props/use_should_update_based_on_props.js", "/mail/static/src/component_hooks/use_update/use_update.js", "/mail/static/src/component_hooks/use_update_to_model/use_update_to_model.js", "/mail/static/src/components/activity/activity.js", "/mail/static/src/components/activity_box/activity_box.js", "/mail/static/src/components/activity_mark_done_popover/activity_mark_done_popover.js", "/mail/static/src/components/attachment_box/attachment_box.js", "/mail/static/src/components/attachment_card/attachment_card.js", "/mail/static/src/components/attachment_delete_confirm_dialog/attachment_delete_confirm_dialog.js", "/mail/static/src/components/attachment_image/attachment_image.js", "/mail/static/src/components/attachment_list/attachment_list.js", "/mail/static/src/components/attachment_viewer/attachment_viewer.js", "/mail/static/src/components/autocomplete_input/autocomplete_input.js", "/mail/static/src/components/channel_invitation_form/channel_invitation_form.js", "/mail/static/src/components/channel_member_list/channel_member_list.js", "/mail/static/src/components/chat_window/chat_window.js", "/mail/static/src/components/chat_window_header/chat_window_header.js", "/mail/static/src/components/chat_window_hidden_menu/chat_window_hidden_menu.js", "/mail/static/src/components/chat_window_manager/chat_window_manager.js", "/mail/static/src/components/chatter/chatter.js", "/mail/static/src/components/chatter_container/chatter_container.js", "/mail/static/src/components/chatter_topbar/chatter_topbar.js", "/mail/static/src/components/composer/composer.js", "/mail/static/src/components/composer_suggested_recipient/composer_suggested_recipient.js", "/mail/static/src/components/composer_suggested_recipient_list/composer_suggested_recipient_list.js", "/mail/static/src/components/composer_suggestion/composer_suggestion.js", "/mail/static/src/components/composer_suggestion_list/composer_suggestion_list.js", "/mail/static/src/components/composer_text_input/composer_text_input.js", "/mail/static/src/components/delete_message_confirm_dialog/delete_message_confirm_dialog.js", "/mail/static/src/components/dialog/dialog.js", "/mail/static/src/components/dialog_manager/dialog_manager.js", "/mail/static/src/components/discuss/discuss.js", "/mail/static/src/components/discuss_mobile_mailbox_selection/discuss_mobile_mailbox_selection.js", "/mail/static/src/components/discuss_public_view/discuss_public_view.js", "/mail/static/src/components/discuss_sidebar/discuss_sidebar.js", "/mail/static/src/components/discuss_sidebar_category/discuss_sidebar_category.js", "/mail/static/src/components/discuss_sidebar_category_item/discuss_sidebar_category_item.js", "/mail/static/src/components/discuss_sidebar_mailbox/discuss_sidebar_mailbox.js", "/mail/static/src/components/drop_zone/drop_zone.js", "/mail/static/src/components/editable_text/editable_text.js", "/mail/static/src/components/emojis_popover/emojis_popover.js", "/mail/static/src/components/file_uploader/file_uploader.js", "/mail/static/src/components/follow_button/follow_button.js", "/mail/static/src/components/follower/follower.js", "/mail/static/src/components/follower_list_menu/follower_list_menu.js", "/mail/static/src/components/follower_subtype/follower_subtype.js", "/mail/static/src/components/follower_subtype_list/follower_subtype_list.js", "/mail/static/src/components/mail_template/mail_template.js", "/mail/static/src/components/media_preview/media_preview.js", "/mail/static/src/components/message/message.js", "/mail/static/src/components/message_action_list/message_action_list.js", "/mail/static/src/components/message_author_prefix/message_author_prefix.js", "/mail/static/src/components/message_in_reply_to_view/message_in_reply_to_view.js", "/mail/static/src/components/message_list/message_list.js", "/mail/static/src/components/message_reaction_group/message_reaction_group.js", "/mail/static/src/components/message_seen_indicator/message_seen_indicator.js", "/mail/static/src/components/messaging_menu/messaging_menu.js", "/mail/static/src/components/mobile_messaging_navbar/mobile_messaging_navbar.js", "/mail/static/src/components/notification_alert/notification_alert.js", "/mail/static/src/components/notification_group/notification_group.js", "/mail/static/src/components/notification_list/notification_list.js", "/mail/static/src/components/notification_popover/notification_popover.js", "/mail/static/src/components/notification_request/notification_request.js", "/mail/static/src/components/partner_im_status_icon/partner_im_status_icon.js", "/mail/static/src/components/popover_view/popover_view.js", "/mail/static/src/components/rtc_activity_notice/rtc_activity_notice.js", "/mail/static/src/components/rtc_call_participant_card/rtc_call_participant_card.js", "/mail/static/src/components/rtc_call_viewer/rtc_call_viewer.js", "/mail/static/src/components/rtc_configuration_menu/rtc_configuration_menu.js", "/mail/static/src/components/rtc_controller/rtc_controller.js", "/mail/static/src/components/rtc_invitation_card/rtc_invitation_card.js", "/mail/static/src/components/rtc_invitations/rtc_invitations.js", "/mail/static/src/components/rtc_layout_menu/rtc_layout_menu.js", "/mail/static/src/components/rtc_option_list/rtc_option_list.js", "/mail/static/src/components/rtc_video/rtc_video.js", "/mail/static/src/components/thread_icon/thread_icon.js", "/mail/static/src/components/thread_needaction_preview/thread_needaction_preview.js", "/mail/static/src/components/thread_preview/thread_preview.js", "/mail/static/src/components/thread_textual_typing_status/thread_textual_typing_status.js", "/mail/static/src/components/thread_typing_icon/thread_typing_icon.js", "/mail/static/src/components/thread_view/thread_view.js", "/mail/static/src/components/thread_view_topbar/thread_view_topbar.js", "/mail/static/src/components/welcome_view/welcome_view.js", "/mail/static/src/model/model_core.js", "/mail/static/src/model/model_errors.js", "/mail/static/src/model/model_field.js", "/mail/static/src/model/model_field_command.js", "/mail/static/src/model/model_field_relation_set.js", "/mail/static/src/model/model_listener.js", "/mail/static/src/model/model_manager.js", "/mail/static/src/model/model_onchange.js", "/mail/static/src/model/model_utils.js", "/mail/static/src/models/activity/activity.js", "/mail/static/src/models/activity_type/activity_type.js", "/mail/static/src/models/attachment/attachment.js", "/mail/static/src/models/attachment_card/attachment_card.js", "/mail/static/src/models/attachment_image/attachment_image.js", "/mail/static/src/models/attachment_list/attachment_list.js", "/mail/static/src/models/attachment_viewer/attachment_viewer.js", "/mail/static/src/models/canned_response/canned_response.js", "/mail/static/src/models/channel_command/channel_command.js", "/mail/static/src/models/channel_invitation_form/channel_invitation_form.js", "/mail/static/src/models/chat_window/chat_window.js", "/mail/static/src/models/chat_window_manager/chat_window_manager.js", "/mail/static/src/models/chatter/chatter.js", "/mail/static/src/models/composer/composer.js", "/mail/static/src/models/composer_view/composer_view.js", "/mail/static/src/models/country/country.js", "/mail/static/src/models/device/device.js", "/mail/static/src/models/dialog/dialog.js", "/mail/static/src/models/dialog_manager/dialog_manager.js", "/mail/static/src/models/discuss/discuss.js", "/mail/static/src/models/discuss_public_view/discuss_public_view.js", "/mail/static/src/models/discuss_sidebar_category/discuss_sidebar_category.js", "/mail/static/src/models/discuss_sidebar_category_item/discuss_sidebar_category_item.js", "/mail/static/src/models/follower/follower.js", "/mail/static/src/models/follower_subtype/follower_subtype.js", "/mail/static/src/models/follower_subtype_list/follower_subtype_list.js", "/mail/static/src/models/guest/guest.js", "/mail/static/src/models/locale/locale.js", "/mail/static/src/models/mail_template/mail_template.js", "/mail/static/src/models/media_preview/media_preview.js", "/mail/static/src/models/message/message.js", "/mail/static/src/models/message_action_list/message_action_list.js", "/mail/static/src/models/message_in_reply_to_view/message_in_reply_to_view.js", "/mail/static/src/models/message_reaction_group/message_reaction_group.js", "/mail/static/src/models/message_seen_indicator/message_seen_indicator.js", "/mail/static/src/models/message_view/message_view.js", "/mail/static/src/models/messaging/messaging.js", "/mail/static/src/models/messaging_initializer/messaging_initializer.js", "/mail/static/src/models/messaging_menu/messaging_menu.js", "/mail/static/src/models/messaging_notification_handler/messaging_notification_handler.js", "/mail/static/src/models/model/model.js", "/mail/static/src/models/notification/notification.js", "/mail/static/src/models/notification_group/notification_group.js", "/mail/static/src/models/notification_group_manager/notification_group_manager.js", "/mail/static/src/models/partner/partner.js", "/mail/static/src/models/popover_view/popover_view.js", "/mail/static/src/models/rtc/rtc.js", "/mail/static/src/models/rtc_call_participant_card/rtc_call_participant_card.js", "/mail/static/src/models/rtc_call_viewer/rtc_call_viewer.js", "/mail/static/src/models/rtc_configuration_menu/rtc_configuration_menu.js", "/mail/static/src/models/rtc_controller/rtc_controller.js", "/mail/static/src/models/rtc_layout_menu/rtc_layout_menu.js", "/mail/static/src/models/rtc_option_list/rtc_option_list.js", "/mail/static/src/models/rtc_peer_notification/rtc_peer_notification.js", "/mail/static/src/models/rtc_session/rtc_session.js", "/mail/static/src/models/sound_effect/sound_effect.js", "/mail/static/src/models/sound_effects/sound_effects.js", "/mail/static/src/models/suggested_recipient_info/suggested_recipient_info.js", "/mail/static/src/models/thread/thread.js", "/mail/static/src/models/thread_cache/thread_cache.js", "/mail/static/src/models/thread_partner_seen_info/thread_partner_seen_info.js", "/mail/static/src/models/thread_view/thread_view.js", "/mail/static/src/models/thread_view/thread_viewer.js", "/mail/static/src/models/thread_view_topbar/thread_view_topbar.js", "/mail/static/src/models/user/user.js", "/mail/static/src/models/user_setting/user_setting.js", "/mail/static/src/models/volume_setting/volume_setting.js", "/mail/static/src/models/welcome_view/welcome_view.js", "/mail/static/src/services/chat_window_service/chat_window_service.js", "/mail/static/src/services/dialog_service/dialog_service.js", "/mail/static/src/services/messaging/messaging.js", "/mail/static/src/services/systray_service/systray_service.js", "/mail/static/src/webclient/commands/command_category.js", "/mail/static/src/webclient/commands/mail_providers.js", "/mail/static/src/widgets/discuss/discuss.js", "/mail/static/src/widgets/form_renderer/form_renderer.js", "/mail/static/src/widgets/notification_alert/notification_alert.js", "/product/static/src/js/product_pricelist_report.js", "/web_editor/static/src/js/wysiwyg/linkDialogCommand.js", "/web_editor/static/src/js/wysiwyg/dialog.js", "/web_editor/static/src/js/frontend/loader.js", "/web_editor/static/src/js/backend/QWebPlugin.js", "/web_editor/static/src/js/backend/command_category.js", "/web_editor/static/src/js/backend/convert_inline.js", "/web_editor/static/src/js/backend/field_html.js", "/resource/static/src/js/section_fields_backend.js", "/account/static/src/js/account_payment_field.js", "/account/static/src/js/account_resequence_field.js", "/account/static/src/js/grouped_view_widget.js", "/account/static/src/js/mail_activity.js", "/account/static/src/js/tax_totals.js", "/account/static/src/js/section_and_note_fields_backend.js", "/account/static/src/js/tours/account.js", "/account/static/src/js/bills_upload.js", "/account/static/src/js/account_selection.js", "/utm/static/src/js/utm_campaign_kanban_examples.js", "/sale/static/src/js/sale.js", "/sale/static/src/js/tours/sale.js", "/sale/static/src/js/product_configurator_widget.js", "/sale/static/src/js/sale_order_view.js", "/sale/static/src/js/product_discount_widget.js", "/barcodes/static/src/js/barcode_events.js", "/barcodes/static/src/js/barcode_field.js", "/barcodes/static/src/js/barcode_form_view.js", "/barcodes/static/src/js/barcode_parser.js", "/stock/static/src/js/inventory_report_list_controller.js", "/stock/static/src/js/inventory_report_list_view.js", "/stock/static/src/js/inventory_singleton_list_renderer.js", "/stock/static/src/js/inventory_singleton_list_controller.js", "/stock/static/src/js/inventory_singleton_list_view.js", "/stock/static/src/js/report_stock_forecasted.js", "/stock/static/src/js/report_stock_reception.js", "/stock/static/src/js/lazy_column_list.js", "/stock/static/src/js/stock_orderpoint_list_controller.js", "/stock/static/src/js/stock_orderpoint_list_model.js", "/stock/static/src/js/stock_orderpoint_list_view.js", "/stock/static/src/js/stock_traceability_report_backend.js", "/stock/static/src/js/stock_traceability_report_widgets.js", "/stock/static/src/js/popover_widget.js", "/stock/static/src/js/forecast_widget.js", "/stock/static/src/js/counted_quantity_widget.js", "/stock/static/src/js/basic_model.js", "/stock/static/src/js/stock_rescheduling_popover.js", "/sale_stock/static/src/js/qty_at_date_widget.js", "/hotel_room_dashboard_view/static/src/js/widgets.js", "/hotel_room_dashboard_view/static/src/js/dashboard_hotel.js", "/hotel_room_dashboard_view/static/src/js/fullcalender.js", "/hotel_room_dashboard_view/static/src/js/schedular.js", "/calendar/static/src/models/activity/activity.js", "/calendar/static/src/components/activity/activity.js", "/calendar/static/src/js/base_calendar.js", "/calendar/static/src/js/calendar_renderer.js", "/calendar/static/src/js/calendar_controller.js", "/calendar/static/src/js/calendar_model.js", "/calendar/static/src/js/calendar_view.js", "/calendar/static/src/js/systray_activity_menu.js", "/calendar/static/src/js/services/calendar_notification_service.js", "/web_kanban_gauge/static/src/js/kanban_gauge.js", "/crm/static/src/js/crm_form.js", "/crm/static/src/js/crm_kanban.js", "/crm/static/src/js/forecast/fill_temporal_service.js", "/crm/static/src/js/forecast/forecast_controllers.js", "/crm/static/src/js/forecast/forecast_kanban_column_quick_create.js", "/crm/static/src/js/forecast/forecast_model_extension.js", "/crm/static/src/js/forecast/forecast_models.js", "/crm/static/src/js/forecast/forecast_renderers.js", "/crm/static/src/js/forecast/forecast_search_model.js", "/crm/static/src/js/forecast/forecast_views.js", "/crm/static/src/js/systray_activity_menu.js", "/crm/static/src/js/tours/crm.js", "/website/static/src/js/backend/button.js", "/website/static/src/js/backend/dashboard.js", "/website/static/src/js/backend/res_config_settings.js", "/website/static/src/js/backend/view_hierarchy.js", "/website/static/src/js/widget_iframe.js", "/website/static/src/js/theme_preview_kanban.js", "/website/static/src/js/theme_preview_form.js", "/web_enterprise/static/src/search/control_panel/control_panel.js", "/web_enterprise/static/src/search/search_panel/search_panel.js", "/web_enterprise/static/src/webclient/barcode/barcode_scanner.js", "/web_enterprise/static/src/webclient/burger_menu/burger_menu.js", "/web_enterprise/static/src/webclient/burger_menu/mobile_switch_company_menu/mobile_switch_company_menu.js", "/web_enterprise/static/src/webclient/burger_menu/user_menu/user_menu.js", "/web_enterprise/static/src/webclient/home_menu/enterprise_service.js", "/web_enterprise/static/src/webclient/home_menu/expiration_panel.js", "/web_enterprise/static/src/webclient/home_menu/home_menu.js", "/web_enterprise/static/src/webclient/home_menu/home_menu_service.js", "/web_enterprise/static/src/webclient/navbar/navbar.js", "/web_enterprise/static/src/webclient/switch_company_menu.js", "/web_enterprise/static/src/webclient/user_menu.js", "/web_enterprise/static/src/webclient/webclient.js", "/web_enterprise/static/src/views/pivot/pivot_renderer.js", "/web_enterprise/static/src/legacy/js/control_panel.js", "/web_enterprise/static/src/legacy/js/core/dialog.js", "/web_enterprise/static/src/legacy/js/res_config_settings.js", "/web_enterprise/static/src/legacy/js/search_panel_mobile.js", "/web_enterprise/static/src/legacy/js/views/barcode_fields.js", "/web_enterprise/static/src/legacy/js/views/basic/basic_renderer.js", "/web_enterprise/static/src/legacy/js/views/calendar/calendar_controller.js", "/web_enterprise/static/src/legacy/js/views/calendar/calendar_renderer.js", "/web_enterprise/static/src/legacy/js/views/form_renderer.js", "/web_enterprise/static/src/legacy/js/views/form_view.js", "/web_enterprise/static/src/legacy/js/views/kanban/kanban_column.js", "/web_enterprise/static/src/legacy/js/views/kanban/kanban_column_quick_create.js", "/web_enterprise/static/src/legacy/js/views/kanban/kanban_renderer_mobile.js", "/web_enterprise/static/src/legacy/js/views/kanban/kanban_tabs_mobile_mixin.js", "/web_enterprise/static/src/legacy/js/views/kanban/kanban_view.js", "/web_enterprise/static/src/legacy/js/views/list/list_controller.js", "/web_enterprise/static/src/legacy/js/views/list/list_renderer_desktop.js", "/web_enterprise/static/src/legacy/js/views/list/list_renderer_mobile.js", "/web_enterprise/static/src/legacy/js/views/relational_fields.js", "/web_enterprise/static/src/legacy/js/views/upgrade_fields.js", "/web_enterprise/static/src/legacy/js/views/view_dialogs.js", "/web_enterprise/static/src/legacy/js/widgets/promote_studio_dialog.js", "/web_enterprise/static/src/legacy/legacy_service_provider.js", "/web_mobile/static/src/js/core/dialog.js", "/web_mobile/static/src/js/core/mixins.js", "/web_mobile/static/src/js/core/network/download.js", "/web_mobile/static/src/js/core/session.js", "/web_mobile/static/src/js/crash_manager.js", "/web_mobile/static/src/js/datepicker.js", "/web_mobile/static/src/js/mobile_service.js", "/web_mobile/static/src/js/services/core.js", "/web_mobile/static/src/js/user_menu_items.js", "/web_mobile/static/src/js/user_preferences_form_view.js", "/mail_enterprise/static/src/components/chat_window/chat_window.js", "/mail_enterprise/static/src/components/chatter_container/chatter_container.js", "/mail_enterprise/static/src/components/dialog/dialog.js", "/mail_enterprise/static/src/components/messaging_menu/messaging_menu.js", "/mail_enterprise/static/src/models/chatter/chatter.js", "/mail_enterprise/static/src/js/attachment_viewer.js", "/mail_enterprise/static/src/widgets/form_renderer/form_renderer.js", "/account_accountant/static/src/js/move_line_list_view.js", "/account_accountant/static/src/js/tours/account_accountant.js", "/account_accountant/static/src/js/reconciliation/reconciliation_action.js", "/account_accountant/static/src/js/reconciliation/reconciliation_model.js", "/account_accountant/static/src/js/reconciliation/reconciliation_renderer.js", "/account_accountant/static/src/js/reconciliation/reconciliation_rainbowman_component.js", "/purchase/static/src/js/purchase_dashboard.js", "/purchase/static/src/js/purchase_toaster_button.js", "/purchase/static/src/js/tours/purchase.js", "/point_of_sale/static/src/js/tours/point_of_sale.js", "/point_of_sale/static/src/js/debug_manager.js", "/point_of_sale/static/src/js/web_overrides/pos_config_form.js", "/project/static/src/burndown_chart/burndown_chart_renderer.js", "/project/static/src/burndown_chart/burndown_chart_view.js", "/project/static/src/project_control_panel/project_control_panel.js", "/project/static/src/js/project_activity.js", "/project/static/src/js/project_control_panel.js", "/project/static/src/js/project_form.js", "/project/static/src/js/project_graph_view.js", "/project/static/src/js/project_kanban.js", "/project/static/src/js/project_list.js", "/project/static/src/js/project_pivot_view.js", "/project/static/src/js/project_rating_graph_view.js", "/project/static/src/js/project_rating_pivot_view.js", "/project/static/src/js/project_task_kanban_examples.js", "/project/static/src/js/tours/project.js", "/project/static/src/js/project_calendar.js", "/project/static/src/js/right_panel/project_right_panel.js", "/project/static/src/js/right_panel/project_right_panel_mixin.js", "/project/static/src/js/right_panel/project_utils.js", "/project/static/src/js/update/project_update_view_kanban.js", "/project/static/src/js/update/project_update_view_list.js", "/project/static/src/js/widgets/html_with_action_widget.js", "/project/static/src/js/widgets/project_name_with_subtask_count_widget.js", "/project/static/src/js/widgets/status_with_color_widget.js", "/website_sale/static/src/js/website_sale_video_field_preview.js", "/website_sale/static/src/js/website_sale_backend.js", "/website_sale/static/src/js/tours/website_sale_shop_backend.js", "/mrp/static/src/js/mrp.js", "/mrp/static/src/js/mrp_bom_report.js", "/mrp/static/src/js/mrp_workorder_popover.js", "/mrp/static/src/js/mrp_documents_controller_mixin.js", "/mrp/static/src/js/mrp_documents_document_viewer.js", "/mrp/static/src/js/mrp_documents_kanban_controller.js", "/mrp/static/src/js/mrp_documents_kanban_record.js", "/mrp/static/src/js/mrp_documents_kanban_renderer.js", "/mrp/static/src/js/mrp_document_kanban_view.js", "/mrp/static/src/js/mrp_should_consume.js", "/mrp/static/src/js/mrp_field_one2many_with_copy.js", "/web_map/static/src/js/map_controller.js", "/web_map/static/src/js/map_model.js", "/web_map/static/src/js/map_renderer.js", "/web_map/static/src/js/map_view.js", "/web_gantt/static/src/js/gantt_controller.js", "/web_gantt/static/src/js/gantt_model.js", "/web_gantt/static/src/js/gantt_renderer.js", "/web_gantt/static/src/js/gantt_row.js", "/web_gantt/static/src/js/gantt_view.js", "/project_enterprise/static/src/js/connector/connector.js", "/project_enterprise/static/src/js/connector/connector_container.js", "/project_enterprise/static/src/js/connector/connector_utils.js", "/project_enterprise/static/src/js/project_map.js", "/project_enterprise/static/src/js/right_panel/project_right_panel_mixin.js", "/project_enterprise/static/src/js/task_gantt_connector/task_gantt_connector_controller.js", "/project_enterprise/static/src/js/task_gantt_connector/task_gantt_connector_model.js", "/project_enterprise/static/src/js/task_gantt_connector/task_gantt_connector_renderer.js", "/project_enterprise/static/src/js/task_gantt_connector/task_gantt_connector_row.js", "/project_enterprise/static/src/js/task_gantt_connector/task_gantt_connector_view.js", "/project_enterprise/static/src/js/task_gantt_controller.js", "/project_enterprise/static/src/js/task_gantt_model.js", "/project_enterprise/static/src/js/task_gantt_renderer.js", "/project_enterprise/static/src/js/task_gantt_row.js", "/project_enterprise/static/src/js/task_gantt_utils.js", "/project_enterprise/static/src/js/task_gantt_view.js", "/project_enterprise/static/src/project_control_panel/project_control_panel.js", "/web_grid/static/src/js/grid_component_registry.js", "/web_grid/static/src/js/grid_components.js", "/web_grid/static/src/js/grid_controller.js", "/web_grid/static/src/js/grid_model.js", "/web_grid/static/src/js/grid_renderer.js", "/web_grid/static/src/js/grid_view.js", "/hr/static/src/js/chat_mixin.js", "/hr/static/src/js/hr_employee.js", "/hr/static/src/js/language.js", "/hr/static/src/js/m2x_avatar_employee.js", "/hr/static/src/js/standalone_m2o_avatar_employee.js", "/hr/static/src/js/user_menu.js", "/hr/static/src/models/employee/employee.js", "/hr/static/src/models/messaging/messaging.js", "/hr/static/src/models/partner/partner.js", "/hr/static/src/models/user/user.js", "/hr_timesheet/static/src/js/task_with_hours.js", "/hr_timesheet/static/src/js/timesheet_uom.js", "/hr_timesheet/static/src/js/timesheet_factor.js", "/hr_timesheet/static/src/js/timesheet_config_form_view.js", "/hr_timesheet/static/src/js/qr_code_action.js", "/hr_timesheet/static/src/js/timesheet_graph_view.js", "/hr_timesheet/static/src/js/timesheet_graph_model.js", "/timer/static/src/js/timer.js", "/timer/static/src/js/timer_mixin.js", "/timer/static/src/js/timer_toggle_button.js", "/timesheet_grid/static/src/js/timesheet_uom.js", "/timesheet_grid/static/src/js/timesheet_uom_timer.js", "/timesheet_grid/static/src/js/timesheet_config_mixin.js", "/timesheet_grid/static/src/js/timesheet_gantt/task_progress_gantt_view.js", "/timesheet_grid/static/src/js/timesheet_grid/timesheet_grid_model.js", "/timesheet_grid/static/src/js/timesheet_grid/timesheet_grid_controller.js", "/timesheet_grid/static/src/js/timesheet_grid/timesheet_grid_renderer.js", "/timesheet_grid/static/src/js/timesheet_grid/timesheet_grid_view.js", "/timesheet_grid/static/src/js/timesheet_grid/timesheet_timer_grid_model.js", "/timesheet_grid/static/src/js/timesheet_grid/timesheet_timer_grid_controller.js", "/timesheet_grid/static/src/js/timesheet_grid/timesheet_timer_grid_renderer.js", "/timesheet_grid/static/src/js/timesheet_grid/timesheet_timer_grid_view.js", "/timesheet_grid/static/src/js/timesheet_grid/timer_m2o.js", "/timesheet_grid/static/src/js/timesheet_grid/timer_header_component.js", "/timesheet_grid/static/src/js/timesheet_grid/timer_start_component.js", "/timesheet_grid/static/src/js/timesheet_kanban/timesheet_kanban_view.js", "/timesheet_grid/static/src/js/timesheet_list/timesheet_list_view.js", "/timesheet_grid/static/src/js/timesheet_pivot/timesheet_pivot_view.js", "/timesheet_grid/static/src/js/tours/timesheet_grid.js", "/timesheet_grid/static/src/js/widgets/timesheets_m2o_avatar_employee.js", "/base_automation/static/src/js/base_automation_error_dialog.js", "/iap/static/src/js/iap_buy_more_credits.js", "/iap/static/src/js/insufficient_credit_error_handler.js", "/sms/static/src/js/fields_phone_widget.js", "/sms/static/src/js/fields_sms_widget.js", "/sms/static/src/components/notification_group/notification_group.js", "/sms/static/src/models/message/message.js", "/sms/static/src/models/notification_group/notification_group.js", "/web_studio/static/src/systray_item/systray_item.js", "/web_studio/static/src/studio_service.js", "/web_studio/static/src/utils.js", "/web_studio/static/src/tours/web_studio.js", "/web_studio/static/src/legacy/js/approval_component.js", "/web_studio/static/src/legacy/js/bus.js", "/web_studio/static/src/legacy/js/views/renderers/form_renderer.js", "/web_studio/static/src/legacy/js/views/renderers/list_renderer_eager.js", "/web_studio/static/src/legacy/js/views/controllers/form_controller.js", "/web_studio/static/src/legacy/studio_legacy_service.js", "/web_studio/static/src/home_menu/home_menu.js", "/sale_timesheet/static/src/js/so_line_one2many.js", "/hotel_dashboard/static/src/js/dashboard.js", "/hotel_dashboard/static/src/js/lib/d3.min.js", "/account_reports/static/src/js/mail_activity.js", "/account_reports/static/src/js/account_reports.js", "/account_reports/static/src/js/action_manager_account_report_dl.js", "/account_followup/static/src/js/followup_form_view.js", "/account_followup/static/src/js/followup_form_model.js", "/account_followup/static/src/js/followup_form_renderer.js", "/account_followup/static/src/js/followup_form_controller.js", "/account_asset/static/src/js/account_asset.js", "/account_asset/static/src/js/account_asset_reversed_widget.js", "/web_dashboard/static/src/dashboard_arch_parser.js", "/web_dashboard/static/src/dashboard_compiler/compile_helpers.js", "/web_dashboard/static/src/dashboard_compiler/dashboard_compiler.js", "/web_dashboard/static/src/dashboard_model.js", "/web_dashboard/static/src/dashboard_statistic/dashboard_statistic.js", "/web_dashboard/static/src/dashboard_view.js", "/web_dashboard/static/src/view_widget.js", "/web_dashboard/static/src/view_wrapper/view_wrapper.js", "/website_sale_dashboard/static/src/js/website_sale_dashboard_view.js", "/purchase_stock/static/src/js/tours/purchase_stock.js", "/account_bank_statement_import/static/src/js/account_bank_statement_import.js", "/base_import/static/lib/javascript-state-machine/state-machine.js", "/base_import/static/src/import_records/import_records.js", "/base_import/static/src/legacy/js/import_action.js", "/base_import/static/src/legacy/js/import_menu.js", "/account_bank_statement_import_csv/static/src/js/import_bank_stmt.js", "/account_invoice_extract/static/src/js/invoice_extract_box.js", "/account_invoice_extract/static/src/js/invoice_extract_box_layer.js", "/account_invoice_extract/static/src/js/invoice_extract_field.js", "/account_invoice_extract/static/src/js/invoice_extract_field_button.js", "/account_invoice_extract/static/src/js/invoice_extract_fields.js", "/account_invoice_extract/static/src/js/invoice_extract_form_renderer.js", "/account_invoice_extract/static/src/js/invoice_extract_form_view.js", "/account_online_synchronization/static/src/js/odoo_fin_connector.js", "/barcodes_mobile/static/src/js/barcode_events.js", "/barcodes_mobile/static/src/js/barcode_mobile_mixin.js", "/web_cohort/static/src/cohort_arch_parser.js", "/web_cohort/static/src/cohort_model.js", "/web_cohort/static/src/cohort_renderer.js", "/web_cohort/static/src/cohort_view.js", "/web_cohort/static/src/cohort_view_sample_server.js", "/crm_enterprise/static/src/js/systray_activity_menu.js", "/crm_iap_mine/static/src/js/leads_tree_generate_leads.js", "/crm_iap_mine/static/src/js/tours/crm_iap_lead.js", "/hotel_dashboard_hk/static/src/js/pos_dashboard.js", "/hr_gantt/static/src/js/hr_gantt_renderer.js", "/hr_gantt/static/src/js/hr_gantt_row.js", "/hr_gantt/static/src/js/hr_gantt_view.js", "/hr_mobile/static/src/js/language_mobile.js", "/hr_org_chart/static/src/js/hr_org_chart.js", "/mail_bot/static/src/models/messaging_initializer/messaging_initializer.js", "/mail_mobile/static/src/js/mobile_device_register.js", "/partner_autocomplete/static/src/js/partner_autocomplete_core.js", "/partner_autocomplete/static/src/js/partner_autocomplete_fieldchar.js", "/partner_autocomplete/static/src/js/partner_autocomplete_many2one.js", "/partner_autocomplete/static/src/js/web_company_autocomplete.js", "/sale_account_accountant/static/src/js/account_reconciliation.js", "/sale_timesheet_enterprise/static/src/js/right_panel/project_right_panel_mixin.js", "/snailmail/static/src/components/message/message.js", "/snailmail/static/src/components/notification_group/notification_group.js", "/snailmail/static/src/components/snailmail_error_dialog/snailmail_error_dialog.js", "/snailmail/static/src/components/snailmail_notification_popover/snailmail_notification_popover.js", "/snailmail/static/src/models/message/message.js", "/snailmail/static/src/models/messaging/messaging.js", "/snailmail/static/src/models/notification_group/notification_group.js", "/snailmail_account/static/src/js/snailmail_account_notification_manager.js", "/snailmail_account_followup/static/src/js/followup_form_controller.js", "/snailmail_account_followup/static/src/js/followup_form_model.js", "/stock_enterprise/static/src/js/report_grid_controller.js", "/stock_enterprise/static/src/js/report_grid_view.js"], "mappings": "AAAA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxdA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC3PA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC5EA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC3DA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACjDA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACpNA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACtCA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC5BA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACZA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACvBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACrRA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACnCA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACzLA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACjGA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC7DA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC7BA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC/UA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC1FA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACvDA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AChBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACnFA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACnCA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACdA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AChCA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC7GA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AClDA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACtCA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACpEA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACzRA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC3UA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC3EA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AClRA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACxBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACrGA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACzDA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACrLA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AChOA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACzIA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACrGA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACvFA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC1BA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC3XA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AChWA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC9BA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACjGA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC7DA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACtCA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AClhBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC3CA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACrIA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACxEA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACzBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACzEA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACvOA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC9BA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC/EA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC9CA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACjEA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACxQA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACtCA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC7DA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC/3BA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AChXA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AClYA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC9TA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC/HA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AChJA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC9DA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACXA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACxHA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACpFA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AClJA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACrEA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC5JA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACnBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC3KA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACtBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC1QA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACtBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACvBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC5IA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACnGA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC7DA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACvSA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACvGA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACjBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACxDA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC5CA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACnHA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC9UA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC5JA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AClCA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACtHA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACpGA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACrEA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACrUA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACxCA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACnBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC1EA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC1WA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC/cA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACbA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC/iEA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC9MA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC9aA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC9DA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AClBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC5GA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACjGA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACnDA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AClFA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACzhBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACxnBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACpLA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACvIA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC7sBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACpCA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AClGA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACpIA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AChCA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACpDA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC5EA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC3DA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AChmDA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACrJA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC5MA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC9TA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACrHA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC9BA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC1EA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AClGA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC93CA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC5CA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACpMA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACvBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACvFA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACxFA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC9DA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC/DA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AClEA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACvFA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC7MA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACnDA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACxDA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACpHA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC5HA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACtKA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3LA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvmQA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACz8CA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC79BA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACl2CA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC/XA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC1QA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC/BA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC9EA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACvBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACvLA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACtCA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC/CA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACRA;;;;;;AAAA;AACA;AACA;AACA;ACHA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACxDA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC9QA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC3TA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrCA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjLA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC9BA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACp1BA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC7LA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3OA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChNA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1DA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxFA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChRA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjMA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtGA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjOA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrCA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9NA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC/nDA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxCA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5JA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5RA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvCA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzFA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7DA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5EA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9eA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACriBA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClbA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1PA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACljBA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrDA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3IA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxOA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AClQA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnrBA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3sBA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrpIA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChKA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzGA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1BA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3wBA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1KA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClxHA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1KA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3QA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACXA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1BA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5HA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvOA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnCA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACXA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACjlBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC3RA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACtNA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACrEA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACxbA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC1OA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACh9BA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzuKA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACz7BA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC/dA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrCA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxBA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxBA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxiBA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzzBA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5QA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjIA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvkCA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxNA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACpKA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACvOA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACzEA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACjDA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3vBA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC/0CA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzMA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjaA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5SA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzPA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5hBA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxBA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACriBA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzyBA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3TA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3pBA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxJA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3HA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC/GA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC9jCA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACj2DA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACrLA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACl+CA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACtIA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC/MA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACbA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC5sBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACzNA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC7xBA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5DA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACtHA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC5DA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACjeA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvCA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC/GA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1DA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClrBA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtWA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrEA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC/+BA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjEA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChnBA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzGA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChDA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7FA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjGA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChJA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3KA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACdA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzfA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxjBA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjDA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1BA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9KA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5ZA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9QA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACpFA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5JA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACjDA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACzCA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC7FA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACxwBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACjEA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC5BA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACpBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC/ZA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACvJA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACxFA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACvDA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AChBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACvIA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AChBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC3UA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACpIA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACtMA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACrCA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC3DA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACnNA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACrDA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AC5HA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACzHA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC7DA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC/MA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACrDA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AChBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC3LA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC3XA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AClKA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC1EA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC9LA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACvDA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AChGA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACvCA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACzDA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AChBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC/BA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC3EA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACvCA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACzBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACpLA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC7BA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AChHA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACxFA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AClCA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC/EA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AClCA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACzBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACtlBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AClKA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACzCA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACzBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACzRA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AChJA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC9HA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACdA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACrFA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACpHA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACtCA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC1VA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACpJA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC1DA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC9HA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACjCA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACtaA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACvCA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC1GA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC1CA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC1MA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC1EA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACtBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC3EA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC5BA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC5BA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC7BA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACvIA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACtFA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACvEA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC5LA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACnFA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AChEA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC/HA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACvDA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACrDA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC7DA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC9BA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACxkBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AChCA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACxCA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACrBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACvaA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACrBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACrHA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC9MA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACjDA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACnCA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AClFA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC/LA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACvEA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACrEA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACtDA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC5CA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACtCA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC1DA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC1IA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC3EA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC/BA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AChEA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACdA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACtCA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACtCA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC5FA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC7BA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACzGA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AClGA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC7BA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC/BA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC1IA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACvEA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AChCA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACvIA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACfA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACz2BA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC9LA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC3MA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC7EA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC56CA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC5BA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACxBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC5UA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC3BA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACldA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC5GA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC7KA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACtJA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AChGA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC3GA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC5JA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC5RA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACliBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC/ZA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC5cA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACjOA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACvhCA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC7CA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACtFA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC1DA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACxBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC1dA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACpHA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACzWA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACzUA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC1LA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACvEA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC/BA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACrEA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACjDA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACxEA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACtNA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACj2BA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AChPA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC1FA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACxIA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC/QA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACtNA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC9aA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC/UA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC7GA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACvxBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACvUA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACpEA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC7JA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC5DA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACvgBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACnHA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC30CA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACtNA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC9cA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC7HA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC5HA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACxEA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AClGA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC/CA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC9cA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC/EA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AChDA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC1FA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACppFA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC3cA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACrCA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AChkBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC3KA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC5vBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC3NA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC/WA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACpEA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AClPA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACtEA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACtEA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AClCA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC3BA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACPA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACpEA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC/IA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACzLA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACzCA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7TA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACzDA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpFA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClFA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACtOA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACNA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACnwCA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxlBA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3FA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjKA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChCA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxCA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrEA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC5JA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1GA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9FA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzJA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChFA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClCA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzEA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7HA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpRA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzDA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrCA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5SA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvFA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChfA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzRA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7DA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnBA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClCA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtGA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpBA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7WA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC1MA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC7MA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxEA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1CA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrBA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3GA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnIA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtFA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1FA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACpCA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChBA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvCA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClJA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzkBA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3yCA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChmMA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3gGA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC/DA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACnCA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACrFA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC3IA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC1FA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC/HA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACrBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACrDA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC7GA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxIA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACzHA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACjDA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC9TA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACnCA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AChDA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC7GA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC1KA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC/BA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC3GA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACpFA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACvDA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC1FA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpHA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACltBA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjFA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtQA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5BA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC/DA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1JA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACzGA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC5FA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC7QA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC7FA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;;;;ACLA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACVA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACvBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACzTA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC7dA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AChFA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACjDA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACfA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACbA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AClCA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC3BA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChJA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3EA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9HA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9GA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzHA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClHA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxCA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChVA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpFA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxCA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtBA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtBA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtXA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzEA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjBA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpEA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7EA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpJA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7HA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvCA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnEA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChGA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACfA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChHA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClJA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AClBA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7EA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACdA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvGA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC1BA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9JA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACvCA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACnCA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACdA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AClCA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACnCA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACjBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACxIA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC7SA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtSA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClGA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7cA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACj1DA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC96BA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACPA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxRA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1CA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnIA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9BA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACrBA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvCA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC9CA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACbA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACpDA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACbA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACnDA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC9IA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACZA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACzWA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACjJA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACZA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AClCA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AClCA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACrHA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzHA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AChCA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACvFA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACvEA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC3IA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC1BA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC1BA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC1CA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC/BA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACvCA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7BA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC/HA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACRA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACxQA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACxPA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AChDA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC7HA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACfA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AClCA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC/CA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACxBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACjBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC5EA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC3EA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC/IA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACphBA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACldA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvFA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjhBA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7oBA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC/cA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnnCA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChLA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC3XA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACzaA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC/HA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACbA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACtCA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC1JA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC1DA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACjwBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACVA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC9BA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACvEA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACjJA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACzIA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC3BA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACtBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACnBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACRA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnBA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtPA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1VA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnaA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzaA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC/JA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpCA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3IA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACzBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACtEA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC3DA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AChBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACjMA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACjCA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC5DA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AChBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AChDA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9LA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpBA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1EA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACZA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACvCA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC/DA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5HA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC/EA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChGA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzPA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpDA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AChCA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzIA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzDA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7EA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnCA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpMA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3DA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9VA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClCA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpKA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClQA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1DA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxCA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxCA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACxDA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7CA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACzIA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC7DA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3EA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACtDA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnGA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACrLA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACtBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC9BA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC3DA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AChCA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC/UA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACvGA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC3NA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9MA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5CA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvFA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1BA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpFA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACfA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AClBA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC/CA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxmBA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnu/1BA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC/BA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7mCA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACnBA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7BA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChTA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzUA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5cA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChCA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrDA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACxEA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACjSA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC/OA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACvTA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACtLA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC5TA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC5DA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACpCA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AChBA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjDA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnBA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3JA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AChDA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrwCA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC/DA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7EA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC3LA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACrJA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACzOA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC3FA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC/IA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACvaA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACvBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC5EA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjCA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzCA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC7FA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACnHA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC1BA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACzJA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACjGA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACxBA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5EA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1CA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnWA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACdA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7DA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACNA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzMA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AClCA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7CA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvXA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrVA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7IA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACnBA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzFA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AChBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC3EA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACtBA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AChGA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACnEA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AClEA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACnCA;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC3DA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChCA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3EA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxBA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7CA;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA", "sourcesContent": ["odoo.define('base.settings', function (require) {\n\"use strict\";\n\nvar BasicModel = require('web.BasicModel');\nvar core = require('web.core');\nvar FormView = require('web.FormView');\nvar FormController = require('web.FormController');\nvar FormRenderer = require('web.FormRenderer');\nvar view_registry = require('web.view_registry');\nconst Dialog = require('web.Dialog');\n\nvar QWeb = core.qweb;\nvar _t = core._t;\n\nvar BaseSettingRenderer = FormRenderer.extend({\n    events: _.extend({}, FormRenderer.prototype.events, {\n        'click .tab': '_onSettingTabClick',\n        'keyup .searchInput': '_onKeyUpSearch',\n    }),\n\n    init: function () {\n        this._super.apply(this, arguments);\n        this.activeView = false;\n        this.activeTab = false;\n    },\n\n    /**\n     * @override\n     * overridden to show a message, informing user that there are changes\n     */\n    confirmChange: function () {\n        var self = this;\n        return this._super.apply(this, arguments).then(function () {\n            if (!self.$(\".o_dirty_warning\").length) {\n                self.$('.o_statusbar_buttons')\n                    .append($('<span/>', {text: _t(\"Unsaved changes\"), class: 'text-muted ml-2 o_dirty_warning'}))\n            }\n        });\n    },\n    /**\n     * @override\n     */\n    on_attach_callback: function () {\n        this._super.apply(this, arguments);\n        // set default focus on searchInput\n        this.searchInput.focus();\n    },\n\n    /**\n     * @override\n     */\n    displayTranslationAlert: function () {\n        // Translation alerts are disabled for res.config.settings:\n        // those are designed to warn user to translate field he just changed, but\n        // * in res.config.settings almost all fields marked as changed (because\n        //   it's not a usual record and all values are set via default_get)\n        // * page is reloaded after saving, so those alerts would be visible\n        //   only for short time after clicking Save\n    },\n    /**\n     * initialize modules list.\n     * remove module that restricted in groups\n     * data contains\n     *  {\n     *     key: moduel key\n     *     string: moduel string\n     *     imgurl: icon url\n     *  }\n     *\n     * @private\n     */\n    _initModules: function () {\n        var self = this;\n        this.modules = [];\n        _.each(this.$('.app_settings_block'), function (settingView, index) {\n            var group = !$(settingView).hasClass('o_invisible_modifier');\n            var isNotApp = $(settingView).hasClass('o_not_app');\n            if(group && !isNotApp) {\n                var data = $(settingView).data();\n                data.string = $(settingView).attr('string') || data.string;\n                self.modules.push({\n                    key: data.key,\n                    string: data.string,\n                    imgurl: self._getAppIconUrl(data.key),\n                });\n            } else {\n                $(settingView).remove();\n            }\n        });\n    },\n    /**\n     * initialize searchtext variable\n     * initialize jQuery search input element\n     *\n     * @private\n     */\n    _initSearch: function () {\n        this.searchInput = this.$('.searchInput');\n        if (this.searchText) {\n            this.searchInput.val(this.searchText);\n            this._onKeyUpSearch();\n        } else {\n            this.searchText = \"\";\n        }\n    },\n    /**\n     * find current app index in modules\n     *\n     */\n    _currentAppIndex: function () {\n        var self = this;\n        var index = _.findIndex(this.modules, function (module) {\n            return module.key === self.activeSettingTab;\n        });\n        return index;\n    },\n    /**\n     *\n     * @private\n     * @param {string} module\n     * @returns {string} icon url\n     */\n    _getAppIconUrl: function (module) {\n        return module === \"general_settings\" ? \"/base/static/description/settings.png\" : \"/\"+module+\"/static/description/icon.png\";\n    },\n    /**\n     *\n     * @private\n     * @param {string} imgurl\n     * @param {string} string(moduel name)\n     * @returns {object}\n     */\n    _getSearchHeader: function (imgurl, string) {\n        return $(QWeb.render('BaseSetting.SearchHeader', {\n            imgurl: imgurl,\n            string: string\n        }));\n    },\n    /**\n     * move to selected setting\n     *\n     * @private\n     * @param {int} index\n     */\n    _moveToTab: function (index) {\n        this.currentIndex = !index || index === -1 ? 0 : (index === this.modules.length ? index - 1 : index);\n        if (this.currentIndex !== -1) {\n            if (this.activeView) {\n                this.activeView.addClass(\"o_hidden\");\n            }\n            if (this.activeTab) {\n                this.activeTab.removeClass(\"selected\");\n            }\n            var view = this.modules[this.currentIndex].settingView;\n            var tab = this.$(\".tab[data-key='\" + this.modules[this.currentIndex].key + \"']\");\n            view.removeClass(\"o_hidden\");\n            this.activeView = view;\n            this.activeTab = tab;\n            tab.addClass(\"selected\");\n        }\n    },\n\n    _onSettingTabClick: function (event) {\n        this.searchInput.focus();\n        if (this.searchText.length > 0) {\n            this.searchInput.val('');\n            this.searchText = \"\";\n            this._searchSetting();\n        }\n        var settingKey = this.$(event.currentTarget).data('key');\n        this._moveToTab(_.findIndex(this.modules, function (m) {\n            return m.key === settingKey;\n        }));\n    },\n\n    _onKeyUpSearch: function (event) {\n        this.searchText = this.searchInput.val();\n        this.activeTab.removeClass('selected');\n        this._searchSetting();\n    },\n    /**\n     * reset setting view\n     *\n     * @private\n     */\n    _resetSearch: function () {\n        this.searchInput.val(\"\");\n        _.each(this.modules, function (module) {\n            module.settingView.addClass('o_hidden');\n            module.settingView.find('.o_setting_box').removeClass('o_hidden');\n            module.settingView.find('h2').removeClass('o_hidden');\n            module.settingView.find('.settingSearchHeader').addClass('o_hidden');\n            module.settingView.find('.o_settings_container').addClass('mt16').removeClass('mb-0');\n        });\n        this.activeTab.removeClass('o_hidden').addClass('selected');\n        this.activeView.removeClass('o_hidden');\n    },\n\n    _render: function () {\n        var self = this;\n        return this._super.apply(this, arguments).then(function() {\n            self._initModules();\n            self._renderLeftPanel();\n            self._initSearch();\n        });\n    },\n\n    _renderLeftPanel: function () {\n        var self = this;\n        _.each(this.modules, function (module) {\n            module.settingView = self.$('.app_settings_block[data-key=\"' + module.key + '\"]');\n            module.settingView.addClass(\"o_hidden\");\n            module.settingView.prepend(self._getSearchHeader(module.imgurl, module.string));\n        });\n        this._renderTabs();\n        this._moveToTab(this.currentIndex || this._currentAppIndex());\n    },\n\n    _renderTabs: function () {\n        var tabs = $(QWeb.render('BaseSetting.Tabs', {tabItems : this.modules}));\n        tabs.appendTo(this.$(\".settings_tab\"));\n    },\n    /**\n     * search setting in DOM\n     *\n     * @private\n     */\n    _searchSetting: function () {\n        var self = this;\n        this.count = 0;\n        _.each(this.modules, function (module) {\n            self.inVisibleCount = 0;\n            module.settingView.find('.o_setting_box').addClass('o_hidden');\n            module.settingView.find('h2').addClass('o_hidden');\n            module.settingView.find('.settingSearchHeader').addClass('o_hidden');\n            module.settingView.find('.o_settings_container').removeClass('mt16').addClass('mb-0');\n\n            const upperCasedSearchText = self.searchText.toUpperCase();\n            const [matches, others] = _.partition(module.settingView.find(\".o_form_label\"),\n                (e) => e.textContent.toUpperCase().includes(upperCasedSearchText));\n            if (matches.length) {\n                for (let result of matches) {\n                    const settingBox = $(result).closest('.o_setting_box');\n                    if (!settingBox.hasClass('o_invisible_modifier')) {\n                        settingBox.removeClass('o_hidden');\n                        self._wordHighlighter(result, upperCasedSearchText);\n                    } else {\n                        self.inVisibleCount++;\n                    }\n                }\n                if (self.inVisibleCount !== matches.length) {\n                    module.settingView.find('.settingSearchHeader').removeClass('o_hidden');\n                    module.settingView.removeClass('o_hidden');\n                }\n            } else {\n                ++self.count;\n            }\n            others.filter(e => e.firstElementChild).forEach(e => self._removeHighlight(e));\n        });\n        this.count === _.size(this.modules) ? this.$('.notFound').removeClass('o_hidden') : this.$('.notFound').addClass('o_hidden');\n        if (this.searchText.length === 0) {\n            this._resetSearch();\n        }\n    },\n\n    /**\n     * highlight search word\n     *\n     * @private\n     * @param {HTMLElement} node\n     * @param {string} upperCasedSearchText\n     */\n    _wordHighlighter: function (node, upperCasedSearchText) {\n        const text = node.textContent;\n        const startIndex = text.toUpperCase().indexOf(upperCasedSearchText);\n        const endIndex = startIndex + upperCasedSearchText.length;\n        $(node).empty().append(\n            document.createTextNode(text.substring(0, startIndex)),\n            $('<span class=\"highlighter\">').text(text.substring(startIndex, endIndex)),\n            document.createTextNode(text.substring(endIndex))\n        );\n    },\n\n    /**\n     * @param {HTMLElement} node\n     * @private\n     */\n    _removeHighlight: function(node) {\n        node.textContent = node.textContent;\n    },\n});\n\nvar BaseSettingController = FormController.extend({\n    custom_events: _.extend({}, FormController.prototype.custom_events, {\n        button_clicked: '_onButtonClicked',\n    }),\n    init: function () {\n        this._super.apply(this, arguments);\n        this.disableAutofocus = true;\n        this.renderer.activeSettingTab = this.initialState.context.module;\n        // discardingDef is used to ensure that we don't ask twice the user if\n        // he wants to discard changes, when 'canBeDiscarded' is called several\n        // times \"in parallel\"\n        this.discardingDef = null;\n    },\n    /**\n     * Settings view should always be in edit mode, so we have to override\n     * default behaviour\n     *\n     * @override\n     */\n    willRestore: function () {\n        this.mode = 'edit';\n    },\n    /**\n     * @override\n     * @returns {Promise}\n     */\n    canBeRemoved: function () {\n        return this.discardChanges(undefined, {\n            noAbandon: true,\n            readonlyIfRealDiscard: true,\n        });\n    },\n    /**\n     * @override\n     * @param {string} recordId\n     * @returns {Promise}\n     */\n    canBeDiscarded: function (recordId) {\n        if (this.discardingDef) {\n            return this.discardingDef;\n        }\n        if (!this.isDirty(recordId)) {\n            return Promise.resolve(false);\n        }\n        const message = _t('Would you like to save your changes?');\n        this.discardingDef = new Promise((resolve, reject) => {\n            const reset = () => {\n                // enable buttons if user first save which fails because of required field missed\n                // and then cancel confirmation dialog\n                this._enableButtons();\n                this.discardingDef = null;\n            };\n            const cancel = () => {\n                reject();\n                reset();\n            };\n            const dialog = Dialog.confirm(this, message, {\n                title: _t('Unsaved changes'),\n                buttons: [{\n                    text: _t('Save'),\n                    classes: 'btn-primary',\n                    click: async () => {\n                        this._disableButtons();\n                        try {\n                            // _onButtonClicked always saves the record even if\n                            // it's discarded. Here we need to save before\n                            // triggering the changes on the server.\n                            await this.saveRecord(recordId, {\n                                stayInEdit: true,\n                            });\n                            const record = this.model.get(recordId);\n                            this.trigger_up('execute_action', {\n                                action_data: {\n                                    context: record.getContext({\n                                        additionalContext: {},\n                                    }),\n                                    name: \"execute\",\n                                    type: \"object\",\n                                },\n                                env: {\n                                    context: record.getContext(),\n                                    currentID: record.data.id,\n                                    model: record.model,\n                                    resIDs: record.res_ids,\n                                },\n                                on_success() {\n                                    resolve(false);\n                                    dialog.close();\n                                },\n                                on_fail() {\n                                    cancel();\n                                    dialog.close();\n                                },\n                            });\n                        } catch (e) {\n                            cancel();\n                            dialog.close();\n                        }\n                    },\n                }, {\n                    text: _t('Discard'),\n                    close: true,\n                    click: () => {\n                        resolve(true);\n                        reset();\n                    },\n                }, {\n                    text: _t('Stay Here'),\n                    close: true,\n                    click: cancel,\n                }],\n            });\n            dialog.on('closed', this.discardingDef, cancel);\n        });\n        return this.discardingDef;\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     */\n    _onButtonClicked: function (ev) {\n        var self = this;\n        if (ev.data.attrs.name !== 'execute' && ev.data.attrs.name !== 'cancel') {\n            var recordID = ev.data.recordID;\n            var _super = this._super;\n            var args = arguments;\n            this._discardChanges(recordID, { noAbandon: true }).then(function () {\n                _super.apply(self, args);\n            });\n        } else {\n            this._super.apply(this, arguments);\n        }\n    },\n    /**\n     * @override\n     * @private\n     */\n    _onBeforeUnload: function () {\n        // We should not save when leaving Odoo in the settings\n    },\n\n});\n\nconst BaseSettingsModel = BasicModel.extend({\n    save(recordID, options) {\n        const savePoint = options && options.savePoint;\n        return this._super.apply(this, arguments).then(result => {\n            if (!savePoint && this.localData[recordID].model === 'res.config.settings') {\n                // we remove here the res_id, because the record should still be\n                // considered new.  We want the web client to always perform a\n                // onchange to fetch the settings anew.\n                delete this.localData[recordID].res_id;\n            }\n            return result;\n        });\n    },\n});\n\nvar BaseSettingView = FormView.extend({\n    jsLibs: [],\n\n    config: _.extend({}, FormView.prototype.config, {\n        Model: BaseSettingsModel,\n        Renderer: BaseSettingRenderer,\n        Controller: BaseSettingController,\n    }),\n});\n\nview_registry.add('base_settings', BaseSettingView);\n\nreturn {\n    Model: BaseSettingsModel,\n    Renderer: BaseSettingRenderer,\n    Controller: BaseSettingController,\n};\n});\n", "/** @odoo-module **/\n\nconst { useEnv, onWillStart } = owl.hooks;\nimport { memoize } from \"./utils/functions\";\nimport { browser } from \"./browser/browser\";\n\nclass AssetsLoadingError extends Error {}\n\n//------------------------------------------------------------------------------\n// Types\n//------------------------------------------------------------------------------\n\n/**\n * An object describing a bundle to load\n * @typedef {Object} Bundle\n * @property {boolean} [templates] whether to load the qweb templates\n * @property {boolean} [js] whether to load the js from the bundle. Currently\n *      not implemented.\n * @property {boolean} [css] whether to load the css from the bundle. Currently\n *      not implemented.\n */\n\n/**\n * An object describing a bundle to load. The keys are bundle names.\n * @typedef {Object<string, Bundle>} Bundles\n */\n\n/**\n * An object describing a loaded bundle\n * @typedef {Object} LoadedBundle\n * @property {XMLDocument} templates an XML document containing the owl\n *      templates defined in that bundle\n */\n\n/**\n * An object describing a loaded bundle. The keys are bundle names.\n * @typedef {Object<string, LoadedBundle>} LoadedBundles\n */\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Loads the given url inside a script tag.\n *\n * @param {string} url the url of the script\n * @returns {Promise} resolved when the script has been loaded\n */\nconst loadJS = memoize(function loadJS(url) {\n    if (document.querySelector(`script[src=\"${url}\"]`)) {\n        // Already in the DOM and wasn't loaded through this function\n        // Unfortunately there is no way to check whether a script has loaded\n        // or not (which may not be the case for async/defer scripts)\n        // so we assume it is.\n        return Promise.resolve();\n    }\n    const scriptEl = document.createElement(\"script\");\n    scriptEl.type = \"text/javascript\";\n    scriptEl.src = url;\n    document.head.appendChild(scriptEl);\n    return new Promise((resolve, reject) => {\n        scriptEl.addEventListener(\"load\", resolve);\n        scriptEl.addEventListener(\"error\", () => {\n            reject(new AssetsLoadingError(`The loading of ${url} failed`));\n        });\n    });\n});\n/**\n * Loads the given url as a stylesheet.\n *\n * @param {string} url the url of the stylesheet\n * @returns {Promise} resolved when the stylesheet has been loaded\n */\nconst loadCSS = memoize(function loadCSS(url) {\n    if (document.querySelector(`link[href=\"${url}\"]`)) {\n        // Already in the DOM and wasn't loaded through this function\n        // Unfortunately there is no way to check whether a link has loaded\n        // or not (which may not be the case for async/defer stylesheets)\n        // so we assume it is.\n        return Promise.resolve();\n    }\n    const linkEl = document.createElement(\"link\");\n    linkEl.type = \"text/css\";\n    linkEl.rel = \"stylesheet\";\n    linkEl.href = url;\n    document.head.appendChild(linkEl);\n    return new Promise(function (resolve, reject) {\n        linkEl.addEventListener(\"load\", resolve);\n        linkEl.addEventListener(\"error\", () => {\n            reject(new AssetsLoadingError(`The loading of ${url} failed`));\n        });\n    });\n});\n/**\n * Loads the qweb templates from a given bundle name.\n *\n * @param {string} name the name of the bundle as declared in the manifest.\n * @returns {Promise<XMLDocument>} A Promise of an XML document containing the\n *      owl templates.\n */\nexport const loadBundleTemplates = memoize(async function loadBundleTemplates(name) {\n    // TODO: quid of the \"unique\" in the URL? We can\"t have one cache_hash\n    // for each and every bundle I\"m guessing.\n    const bundleURL = `/web/webclient/qweb/${Date.now()}?bundle=${name}`;\n    const templates = await (await browser.fetch(bundleURL)).text();\n    return processTemplates(templates);\n});\n\nconst bundlesCache = {};\n/**\n * Loads a bundle.\n *\n * @param {string} name the name of the bundle to load\n * @param {Bundle} options parts of the bundle to load (see Bundle typedef)\n * @returns {Promise<LoadedBundle>}\n */\nasync function loadBundle(name, options) {\n    const { templates } = options;\n    if (!bundlesCache[name]) {\n        bundlesCache[name] = { name };\n    }\n    if (templates && !bundlesCache[name].templates) {\n        bundlesCache[name].templates = loadBundleTemplates(name);\n    }\n    // TODO: if (\"js/css\") {...} to support lazy loading js/css from bundles\n\n    // Wait only for the requested keys\n    const entries = await Promise.all(\n        Object.keys(options).map(async (key) => [key, await bundlesCache[name][key]])\n    );\n    return Object.fromEntries(entries);\n}\n\n//------------------------------------------------------------------------------\n// Exports\n//------------------------------------------------------------------------------\n\n/**\n * Process the qweb templates to obtain only the owl templates. This function\n * does NOT register the templates into Owl.\n *\n * @param {string} templates An xml string describing templates\n * @returns {XMLDocument} An xml document containing only the owl templates\n */\nexport function processTemplates(templates) {\n    const doc = new DOMParser().parseFromString(templates, \"text/xml\");\n    // as we currently have two qweb engines (owl and legacy), owl templates are\n    // flagged with attribute `owl=\"1\"`. The following lines removes the \"owl\"\n    // attribute from the templates, so that it doesn't appear in the DOM. We\n    // also remove the non-owl templates, as those shouldn't be loaded in the\n    // owl environment's QWeb, and will be loaded separately.\n    for (const template of [...doc.querySelector(\"templates\").children]) {\n        if (template.hasAttribute(\"owl\")) {\n            template.removeAttribute(\"owl\");\n        } else {\n            template.remove();\n        }\n    }\n    return doc;\n}\n/**\n * Renders a public asset template and loads the libraries defined inside of it.\n * Only loads js and css, template declarations will be ignored. Only loads\n * scripts and styles that are defined in script src and link href, ignores\n * inline scripts and styles.\n *\n * @deprecated\n * @param {string} xmlid The xmlid of the template that defines the public asset\n * @param {ORM} orm An ORM object capable of calling methods on models\n * @returns {Promise} Resolved when the contents of the asset is loaded\n */\nexport const loadPublicAsset = memoize(async function loadPublicAsset(xmlid, orm) {\n    const xml = await orm.call(\"ir.ui.view\", \"render_public_asset\", [xmlid]);\n    const doc = new DOMParser().parseFromString(`<xml>${xml}</xml>`, \"text/xml\");\n    return loadAssets({\n        cssLibs: [...doc.querySelectorAll(\"link[href]\")].map((node) => node.getAttribute(\"href\")),\n        jsLibs: [...doc.querySelectorAll(\"script[src]\")].map((node) => node.getAttribute(\"src\")),\n    });\n});\n/**\n * Loads the given assets. Currently, when passing bundles, only the templates\n * key is supported, as loading a bundle's JS/CSS asynchronously requires some\n * groundwork.\n *\n * @param {Object} assets\n * @param {Bundles} [assets.bundles] an object describing the bundles to load.\n *      The keys are bundle names, and the values describe whether to load the\n *      templates, js and/or css from that bundle.\n * @param {string[]} [assets.jsLibs] urls of the javascript libraries to load\n * @param {string[]} [assets.cssLibs] urls of the css libraries to load\n * @returns {Promise<{[bundles: LoadedBundle[]]}>} An object describing the loaded\n *      assets. The js and css libs are loaded globally and will be loaded when\n *      this promise is resolved, the owl xml templates will be loaded in the\n *      `templates` key of each LoadedBundle object.\n */\nexport async function loadAssets(assets) {\n    const proms = [];\n    const loadedAssets = {};\n    if (\"bundles\" in assets) {\n        const bundles = Object.entries(assets.bundles);\n        const bundlesProm = Promise.all(\n            bundles.map(async ([name, options]) => [name, await loadBundle(name, options)])\n        ).then((loadedBundles) => {\n            loadedAssets.bundles = Object.fromEntries(loadedBundles);\n        });\n        proms.push(bundlesProm);\n    }\n    if (\"jsLibs\" in assets) {\n        proms.push(Promise.all(assets.jsLibs.map(loadJS)));\n    }\n    if (\"cssLibs\" in assets) {\n        proms.push(Promise.all(assets.cssLibs.map(loadCSS)));\n    }\n    await Promise.all(proms);\n    return loadedAssets;\n}\n/**\n * Loads the given assets, and adds the loaded owl templates into the current\n * environment's qweb instance.\n *\n * @param {Object} assets\n * @param {Bundles} [assets.bundles] the bundles to load. See above typedef for\n *      details.\n * @param {string[]} [assets.jsLibs] urls of the javascript libraries to load\n * @param {string[]} [assets.cssLibs] urls of the css libraries to load\n */\nexport function useAssets(assets) {\n    const env = useEnv();\n    onWillStart(async () => {\n        const loadedAssets = await loadAssets(assets);\n        // TODO: { js, css } = loadedAssets when we support lazy loading js/css from bundles\n        const { bundles } = loadedAssets;\n        if (bundles) {\n            const templateDocs = Object.values(bundles).map(({ templates }) => templates);\n            // Some templates might already be defined by another bundle, but need\n            // to be included in the current bundle for primary inherits to work.\n            // We don't want to add those again. We also have to add them to qweb\n            // one bundle at a time in case multiple bundles were specified that\n            // include the same template (e.g. for inheritance)\n            for (const xmlDoc of templateDocs) {\n                for (const template of [...xmlDoc.querySelector(\"templates\").children]) {\n                    if (template.getAttribute(\"t-name\") in env.qweb.templates) {\n                        template.remove();\n                    }\n                }\n                env.qweb.addTemplates(xmlDoc);\n            }\n        }\n    });\n}\n", "/** @odoo-module **/\n\n/**\n * Browser\n *\n * This file exports an object containing common browser API. It may not look\n * incredibly useful, but it is very convenient when one needs to test code using\n * these methods. With this indirection, it is possible to patch the browser\n * object for a test.\n */\n\nlet sessionStorage = window.sessionStorage;\nlet localStorage = owl.browser.localStorage;\ntry {\n    // Safari crashes in Private Browsing\n    localStorage.setItem(\"__localStorage__\", \"true\");\n    localStorage.removeItem(\"__localStorage__\");\n} catch (e) {\n    localStorage = makeRAMLocalStorage();\n    sessionStorage = makeRAMLocalStorage();\n}\n\nexport const browser = Object.assign({}, owl.browser, {\n    addEventListener: window.addEventListener.bind(window),\n    removeEventListener: window.removeEventListener.bind(window),\n    requestAnimationFrame: window.requestAnimationFrame.bind(window),\n    cancelAnimationFrame: window.cancelAnimationFrame.bind(window),\n    console: window.console,\n    history: window.history,\n    navigator: navigator,\n    open: window.open.bind(window),\n    XMLHttpRequest: window.XMLHttpRequest,\n    localStorage,\n    sessionStorage,\n});\n\nObject.defineProperty(browser, \"location\", {\n    set(val) {\n        window.location = val;\n    },\n    get() {\n        return window.location;\n    },\n    configurable: true,\n});\n\n// -----------------------------------------------------------------------------\n// memory localStorage\n// -----------------------------------------------------------------------------\n\n/**\n * @returns {typeof window[\"localStorage\"]}\n */\nexport function makeRAMLocalStorage() {\n    let store = {};\n    return {\n        setItem(key, value) {\n            store[key] = value;\n        },\n        getItem(key) {\n            return store[key];\n        },\n        clear() {\n            store = {};\n        },\n        removeItem(key) {\n            delete store[key];\n        },\n        get length() {\n            return Object.keys(store).length;\n        },\n        key() {\n            return \"\";\n        },\n    };\n}\n", "/** @odoo-module **/\n\nimport { registry } from \"../registry\";\n\n/**\n * Service to make use of document.cookie\n * https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies\n * As recommended, storage should not be done by the cookie\n * but with localStorage/sessionStorage\n */\n\nconst COOKIE_TTL = 24 * 60 * 60 * 365;\n\nfunction parseCookieString(str) {\n    const cookie = {};\n    const parts = str.split(\"; \");\n    for (let part of parts) {\n        const [key, value] = part.split(\"=\");\n        cookie[key] = value || \"\";\n    }\n    return cookie;\n}\n\nfunction cookieToString(key, value, ttl = COOKIE_TTL) {\n    let fullCookie = [];\n    if (value !== undefined) {\n        fullCookie.push(`${key}=${value}`);\n    }\n    fullCookie = fullCookie.concat([\"path=/\", `max-age=${ttl}`]);\n    return fullCookie.join(\";\");\n}\n\nfunction makeCookieService() {\n    function getCurrent() {\n        return parseCookieString(document.cookie);\n    }\n    let cookie = getCurrent();\n    function setCookie(key, value, ttl) {\n        document.cookie = cookieToString(key, value, ttl);\n        cookie = getCurrent();\n    }\n    return {\n        get current() {\n            return cookie;\n        },\n        setCookie,\n        deleteCookie(key) {\n            setCookie(key, \"kill\", 0);\n        },\n    };\n}\n\nexport const cookieService = {\n    start() {\n        return makeCookieService();\n    },\n};\n\nregistry.category(\"services\").add(\"cookie\", cookieService);\n", "/** @odoo-module **/\n\nimport { browser } from \"./browser\";\n\n// -----------------------------------------------------------------------------\n// Feature detection\n// -----------------------------------------------------------------------------\n\n/**\n * true if the browser is based on Chromium (Google Chrome, Opera, Edge)\n *\n * @returns {boolean}\n */\nexport function isBrowserChrome() {\n    return browser.navigator.userAgent.includes(\"Chrome\");\n}\n\nexport function isAndroid() {\n    return /Android/i.test(browser.navigator.userAgent);\n}\n\nexport function isIOS() {\n    return /(iPad|iPhone|iPod)/i.test(browser.navigator.userAgent) ||\n        (browser.navigator.platform === 'MacIntel' && maxTouchPoints() > 1);\n}\n\nexport function isOtherMobileOS() {\n    return /(webOS|BlackBerry|Windows Phone)/i.test(browser.navigator.userAgent);\n}\n\nexport function isMacOS() {\n    return Boolean(browser.navigator.userAgent.match(/Mac/i));\n}\n\nexport function isMobileOS() {\n    return isAndroid() || isIOS() || isOtherMobileOS();\n}\n\nexport function isIosApp() {\n    return /OdooMobile \\(iOS\\)/i.test(browser.navigator.userAgent);\n}\n\nexport function hasTouch() {\n    return \"ontouchstart\" in window || \"onmsgesturechange\" in window;\n}\n\nexport function maxTouchPoints() {\n    return browser.navigator.maxTouchPoints || 1;\n}\n", "/** @odoo-module **/\n\nimport { registry } from \"../registry\";\nimport { shallowEqual } from \"../utils/objects\";\nimport { objectToUrlEncodedString } from \"../utils/urls\";\nimport { browser } from \"./browser\";\n\n/**\n * Casts the given string to a number if possible.\n *\n * @param {string} value\n * @returns {string|number}\n */\nfunction cast(value) {\n    return !value || isNaN(value) ? value : Number(value);\n}\n\n/**\n * @typedef {{ [key: string]: string }} Query\n * @typedef {{ [key: string]: any }} Route\n */\n\nfunction parseString(str) {\n    const parts = str.split(\"&\");\n    const result = {};\n    for (let part of parts) {\n        const [key, value] = part.split(\"=\");\n        const decoded = decodeURIComponent(value || \"\");\n        result[key] = cast(decoded);\n    }\n    return result;\n}\n\n/**\n * For each push request (replaceState or pushState), filterout keys that have been locked before\n * overrides locked keys that are explicitly re-locked or unlocked\n * registers keys in \"hash\" in \"lockedKeys\" according to the \"lock\" Boolean\n *\n * @param {Set<string>} lockedKeys A set containing all keys that were locked\n * @param {Query} hash An Object representing the pushed url hash\n * @param {Query} currentHash The current hash compare against\n * @param  {Object} [options={}] Whether to lock all hash keys in \"hash\" to prevent them from being changed afterwards\n * @param  {Boolean} [options.lock] Whether to lock all hash keys in \"hash\" to prevent them from being changed afterwards\n * @return {Query} The resulting \"hash\" where previous locking has been applied\n */\nfunction applyLocking(lockedKeys, hash, currentHash, options = {}) {\n    const newHash = {};\n    for (const key in hash) {\n        if (\"lock\" in options) {\n            options.lock ? lockedKeys.add(key) : lockedKeys.delete(key);\n        } else if (lockedKeys.has(key)) {\n            // forbid implicit override of key\n            continue;\n        }\n        newHash[key] = hash[key];\n    }\n    for (const key in currentHash) {\n        if (lockedKeys.has(key) && !(key in newHash)) {\n            newHash[key] = currentHash[key];\n        }\n    }\n    return newHash;\n}\n\nfunction computeNewRoute(hash, replace, currentRoute) {\n    if (!replace) {\n        hash = Object.assign({}, currentRoute.hash, hash);\n    }\n    hash = sanitizeHash(hash);\n    if (!shallowEqual(currentRoute.hash, hash)) {\n        return Object.assign({}, currentRoute, { hash });\n    }\n    return false;\n}\n\nfunction sanitizeHash(hash) {\n    return Object.fromEntries(\n        Object.entries(hash)\n            .filter(([, v]) => v !== undefined)\n            .map(([k, v]) => [k, cast(v)])\n    );\n}\n\n/**\n * @param {string} hash\n * @returns {any}\n */\nexport function parseHash(hash) {\n    return hash && hash !== \"#\" ? parseString(hash.slice(1)) : {};\n}\n\n/**\n * @param {string} search\n * @returns {any}\n */\nexport function parseSearchQuery(search) {\n    return search ? parseString(search.slice(1)) : {};\n}\n\n/**\n * @param {{ [key: string]: any }} route\n * @returns\n */\nexport function routeToUrl(route) {\n    const search = objectToUrlEncodedString(route.search);\n    const hash = objectToUrlEncodedString(route.hash);\n    return route.pathname + (search ? \"?\" + search : \"\") + (hash ? \"#\" + hash : \"\");\n}\n\nasync function redirect(env, url, wait = false) {\n    if (wait) {\n        await new Promise((resolve) => {\n            const waitForServer = (delay) => {\n                browser.setTimeout(async () => {\n                    env.services\n                        .rpc(\"/web/webclient/version_info\", {})\n                        .then(resolve)\n                        .catch(() => waitForServer(250));\n                }, delay);\n            };\n            waitForServer(1000);\n        });\n    }\n    browser.location.assign(url);\n}\n\nfunction getRoute(urlObj) {\n    const { pathname, search, hash } = urlObj;\n    const searchQuery = parseSearchQuery(search);\n    const hashQuery = parseHash(hash);\n    return { pathname, search: searchQuery, hash: hashQuery };\n}\n\nfunction makeRouter(env) {\n    const bus = env.bus;\n    const lockedKeys = new Set();\n    let current = getRoute(browser.location);\n    let pushTimeout;\n    browser.addEventListener(\"hashchange\", (ev) => {\n        browser.clearTimeout(pushTimeout);\n        const loc = new URL(ev.newURL);\n        current = getRoute(loc);\n        bus.trigger(\"ROUTE_CHANGE\");\n    });\n\n    /**\n     * @param {string} mode\n     * @returns {(hash: string, options: any) => any}\n     */\n    function makeDebouncedPush(mode) {\n        let allPushArgs = [];\n        function doPush() {\n            // Aggregates push/replace state arguments\n            const replace = allPushArgs.some(([, options]) => options && options.replace);\n            const newHash = allPushArgs.reduce((finalHash, [hash, options]) => {\n                hash = applyLocking(lockedKeys, hash, current.hash, options);\n                if (finalHash) {\n                    hash = applyLocking(lockedKeys, hash, finalHash, options);\n                }\n                return Object.assign(finalHash || {}, hash);\n            }, null);\n            // Calculates new route based on aggregated hash and options\n            const newRoute = computeNewRoute(newHash, replace, current);\n            if (!newRoute) {\n                return;\n            }\n            // If the route changed: pushes or replaces browser state\n            const url = browser.location.origin + routeToUrl(newRoute);\n            if (mode === \"push\") {\n                browser.history.pushState({}, \"\", url);\n            } else {\n                browser.history.replaceState({}, \"\", url);\n            }\n            current = getRoute(browser.location);\n        }\n        return function pushOrReplaceState(hash, options) {\n            allPushArgs.push([hash, options]);\n            browser.clearTimeout(pushTimeout);\n            pushTimeout = browser.setTimeout(() => {\n                doPush();\n                pushTimeout = null;\n                allPushArgs = [];\n            });\n        };\n    }\n\n    return {\n        get current() {\n            return current;\n        },\n        pushState: makeDebouncedPush(\"push\"),\n        replaceState: makeDebouncedPush(\"replace\"),\n        redirect: (url, wait) => redirect(env, url, wait),\n        cancelPushes: () => browser.clearTimeout(pushTimeout),\n    };\n}\n\nexport const routerService = {\n    start(env) {\n        return makeRouter(env);\n    },\n};\n\nexport function objectToQuery(obj) {\n    const query = {};\n    Object.entries(obj).forEach(([k, v]) => {\n        query[k] = v ? String(v) : v;\n    });\n    return query;\n}\n\nregistry.category(\"services\").add(\"router\", routerService);\n", "/** @odoo-module **/\n\nimport { registry } from \"../registry\";\n\nexport const titleService = {\n    start() {\n        const titleParts = {};\n\n        function getParts() {\n            return Object.assign({}, titleParts);\n        }\n\n        function setParts(parts) {\n            for (const key in parts) {\n                const val = parts[key];\n                if (!val) {\n                    delete titleParts[key];\n                } else {\n                    titleParts[key] = val;\n                }\n            }\n            document.title = Object.values(titleParts).join(\" - \");\n        }\n\n        return {\n            /**\n             * @returns {string}\n             */\n            get current() {\n                return document.title;\n            },\n            getParts,\n            setParts,\n        };\n    },\n};\n\nregistry.category(\"services\").add(\"title\", titleService);\n", "/** @odoo-module **/\n\nconst { Component, QWeb } = owl;\n\n/**\n * Custom checkbox\n *\n * <CheckBox\n *    value=\"boolean\"\n *    disabled=\"boolean\"\n *    t-on-change=\"_onValueChange\"\n *    >\n *    Change the label text\n *  </CheckBox>\n *\n * @extends Component\n */\n\nexport class CheckBox extends Component {\n    setup() {\n        this.id = `checkbox-comp-${CheckBox.nextId++}`;\n    }\n}\n\nCheckBox.template = \"web.CheckBox\";\nCheckBox.nextId = 1;\n\nQWeb.registerComponent(\"CheckBox\", CheckBox);\n", "/** @odoo-module **/\n\nimport { registry } from \"@web/core/registry\";\n\nconst commandCategoryRegistry = registry.category(\"command_categories\");\ncommandCategoryRegistry\n    .add(\"app\", {}, { sequence: 10 })\n    .add(\"smart_action\", {}, { sequence: 15 })\n    .add(\"actions\", {}, { sequence: 30 })\n    .add(\"navbar\", {}, { sequence: 40 })\n    .add(\"default\", {}, { sequence: 100 })\n    .add(\"debug\", {}, { sequence: 110 });\n", "/** @odoo-module **/\n\nimport { useEffect, useService } from \"@web/core/utils/hooks\";\n\n/**\n * @typedef {import(\"./command_service\").CommandOptions} CommandOptions\n */\n\n/**\n * This hook will subscribe/unsubscribe the given subscription\n * when the caller component will mount/unmount.\n *\n * @param {string} name\n * @param {()=>(void | CommandPaletteConfig)} action\n * @param {CommandOptions} [options]\n */\nexport function useCommand(name, action, options = {}) {\n    const commandService = useService(\"command\");\n    useEffect(\n        () => commandService.add(name, action, options),\n        () => []\n    );\n}\n", "/** @odoo-module **/\n\nimport { useAutofocus, useService } from \"@web/core/utils/hooks\";\nimport { useHotkey } from \"@web/core/hotkeys/hotkey_hook\";\nimport { KeepLast } from \"@web/core/utils/concurrency\";\nimport { scrollTo } from \"@web/core/utils/scrolling\";\nimport { fuzzyLookup } from \"@web/core/utils/search\";\nimport { debounce } from \"@web/core/utils/timing\";\nimport { _lt } from \"@web/core/l10n/translation\";\n\nconst { Component, hooks } = owl;\nconst { useState } = hooks;\n\nconst DEFAULT_PLACEHOLDER = _lt(\"Search...\");\nconst DEFAULT_EMPTY_MESSAGE = _lt(\"No results found\");\nconst FUZZY_NAMESPACES = [\"default\"];\n\n/**\n * @typedef {import(\"./command_service\").Command} Command\n */\n\n/**\n * @typedef {Command & {\n *  Component?: owl.Component;\n *  props?: object;\n * }} CommandItem\n */\n\n/**\n * @typedef {{\n *  namespace?: string;\n *  provide: ()=>CommandItem[];\n * }} Provider\n */\n\n/**\n * @typedef {{\n *  categoriesByNamespace?: {[namespace]: string[]};\n *  namespace?: string;\n *  emptyMessageByNamespace?: {[namespace]: string};\n *  footerTemplate?: string;\n *  placeholder?: string;\n *  providers: Provider[];\n * }} CommandPaletteConfig\n */\n\n/**\n * Util used to filter commands that are within category.\n * Note: for the default category, also get all commands having invalid category.\n *\n * @param {string} categoryName the category key\n * @param {string[]} categories\n * @returns an array filter predicate\n */\nfunction commandsWithinCategory(categoryName, categories) {\n    return (cmd) => {\n        const inCurrentCategory = categoryName === cmd.category;\n        const fallbackCategory = categoryName === \"default\" && !categories.includes(cmd.category);\n        return inCurrentCategory || fallbackCategory;\n    };\n}\n\nexport class DefaultCommandItem extends Component {}\nDefaultCommandItem.template = \"web.DefaultCommandItem\";\n\nexport class CommandPalette extends Component {\n    setup() {\n        this.keyId = 1;\n        this.keepLast = new KeepLast();\n        this._sessionId = CommandPalette.lastSessionId++;\n        this.DefaultCommandItem = DefaultCommandItem;\n        this.activeElement = useService(\"ui\").activeElement;\n        const onDebouncedSearchInput = debounce.apply(this, [this.onSearchInput, 200]);\n        this.onDebouncedSearchInput = (...args) => {\n            this.inputPromise = onDebouncedSearchInput.apply(this, args).catch(() => {\n                this.inputPromise = null;\n            });\n        };\n\n        useAutofocus();\n\n        useHotkey(\"Enter\", () => this.executeSelectedCommand(), { bypassEditableProtection: true });\n        useHotkey(\"ArrowUp\", () => this.selectCommandAndScrollTo(\"PREV\"), {\n            bypassEditableProtection: true,\n            allowRepeat: true,\n        });\n        useHotkey(\"ArrowDown\", () => this.selectCommandAndScrollTo(\"NEXT\"), {\n            bypassEditableProtection: true,\n            allowRepeat: true,\n        });\n\n        /**\n         * @type {{ commands: CommandItem[],\n         *          emptyMessage: string,\n         *          footerTemplate: string,\n         *          placeholder: string,\n         *          searchValue: string,\n         *          selectedCommand: CommandItem }}\n         */\n        this.state = useState({\n            commands: [],\n        });\n\n        this.setCommandPaletteConfig(this.props.config);\n    }\n\n    get commandsByCategory() {\n        const categories = [];\n        for (const category of this.categoryKeys) {\n            const commands = this.state.commands.filter(\n                commandsWithinCategory(category, this.categoryKeys)\n            );\n            if (commands.length) {\n                categories.push({\n                    commands,\n                    keyId: category,\n                });\n            }\n        }\n        return categories;\n    }\n\n    /**\n     * Apply the new config to the command pallet\n     * @param {CommandPaletteConfig} config\n     */\n    setCommandPaletteConfig(config) {\n        const result = { default: [] };\n        for (const provider of config.providers) {\n            const namespace = provider.namespace || \"default\";\n            if (namespace in result) {\n                result[namespace].push(provider);\n            } else {\n                result[namespace] = [provider];\n            }\n        }\n        this.categoriesByNamespace = config.categoriesByNamespace;\n        this.emptyMessageByNamespace = config.emptyMessageByNamespace || {};\n        this.providersByNamespace = result;\n\n        this.state.footerTemplate = config.footerTemplate;\n\n        this.state.placeholder = config.placeholder || DEFAULT_PLACEHOLDER.toString();\n\n        const namespace = config.namespace || \"default\";\n        this.setCommands(namespace, {\n            activeElement: this.activeElement,\n            searchValue: \"\",\n            sessionId: this._sessionId,\n        });\n        this.state.searchValue = namespace === \"default\" ? \"\" : namespace;\n    }\n\n    /**\n     * Modifies the commands to be displayed according to the namespace and the options.\n     * Selects the first command in the new list.\n     * @param {string} namespace\n     * @param {object} options\n     */\n    async setCommands(namespace, options = {}) {\n        this.categoryKeys = [\"default\"];\n        const proms = this.providersByNamespace[namespace].map((provider) => {\n            const { provide } = provider;\n            const result = provide(this.env, options);\n            return result;\n        });\n        let commands = (await this.keepLast.add(Promise.all(proms))).flat();\n        if (options.searchValue && FUZZY_NAMESPACES.includes(namespace)) {\n            commands = fuzzyLookup(options.searchValue, commands, (c) => c.name);\n        } else {\n            // we have to sort the commands by category to avoid navigation issues with the arrows\n            if (this.categoriesByNamespace && this.categoriesByNamespace[namespace]) {\n                let commandsSorted = [];\n                this.categoryKeys = this.categoriesByNamespace[namespace];\n                if (!this.categoryKeys.includes(\"default\")) {\n                    this.categoryKeys.push(\"default\");\n                }\n                for (const category of this.categoryKeys) {\n                    commandsSorted = commandsSorted.concat(\n                        commands.filter(commandsWithinCategory(category, this.categoryKeys))\n                    );\n                }\n                commands = commandsSorted;\n            }\n        }\n\n        this.state.commands = commands.map((command) => ({\n            ...command,\n            keyId: this.keyId++,\n        }));\n        this.selectCommand(this.state.commands.length ? 0 : -1);\n        this.mouseSelectionActive = false;\n        this.state.emptyMessage =\n            this.emptyMessageByNamespace[namespace] || DEFAULT_EMPTY_MESSAGE.toString();\n    }\n\n    selectCommand(index) {\n        if (index === -1 || index >= this.state.commands.length) {\n            this.state.selectedCommand = null;\n            return;\n        }\n        this.state.selectedCommand = this.state.commands[index];\n    }\n\n    selectCommandAndScrollTo(type) {\n        // In case the mouse is on the palette command, it avoids the selection\n        // of a command caused by a scroll.\n        this.mouseSelectionActive = false;\n        const index = this.state.commands.indexOf(this.state.selectedCommand);\n        if (index === -1) {\n            return;\n        }\n        let nextIndex;\n        if (type === \"NEXT\") {\n            nextIndex = index < this.state.commands.length - 1 ? index + 1 : 0;\n        } else if (type === \"PREV\") {\n            nextIndex = index > 0 ? index - 1 : this.state.commands.length - 1;\n        }\n        this.selectCommand(nextIndex);\n\n        const listbox = this.el.querySelector(\".o_command_palette_listbox\");\n        const command = listbox.querySelector(`#o_command_${nextIndex}`);\n        scrollTo(command, { scrollable: listbox });\n    }\n\n    onCommandClicked(index) {\n        this.selectCommand(index);\n        this.executeSelectedCommand();\n    }\n\n    /**\n     * Execute the action related to the order.\n     * If this action returns a config, then we will use it in the command palette,\n     * otherwise we close the command palette.\n     * @param {CommandItem} command\n     */\n    async executeCommand(command) {\n        const config = await command.action();\n        if (config) {\n            this.setCommandPaletteConfig(config);\n        } else {\n            this.props.closeMe();\n        }\n    }\n\n    async executeSelectedCommand() {\n        await this.inputPromise;\n        if (this.state.selectedCommand) {\n            this.executeCommand(this.state.selectedCommand);\n        }\n    }\n\n    onCommandMouseEnter(index) {\n        if (this.mouseSelectionActive) {\n            this.selectCommand(index);\n        } else {\n            this.mouseSelectionActive = true;\n        }\n    }\n\n    async onSearchInput(ev) {\n        this.state.searchValue = ev.target.value;\n        let searchValue = this.state.searchValue;\n        let namespace = \"default\";\n        if (searchValue.length && searchValue[0] in this.providersByNamespace) {\n            namespace = searchValue[0];\n            searchValue = searchValue.slice(1);\n        }\n        await this.setCommands(namespace, {\n            searchValue,\n            activeElement: this.activeElement,\n            sessionId: this._sessionId,\n        });\n    }\n}\nCommandPalette.lastSessionId = 0;\nCommandPalette.template = \"web.CommandPalette\";\n", "/** @odoo-module **/\n\nimport { Dialog } from \"@web/core/dialog/dialog\";\nimport { CommandPalette } from \"./command_palette\";\n\nconst { hooks } = owl;\nconst { useExternalListener } = hooks;\n\n/**\n * @typedef {import(\"./command_service\").Command} Command\n */\n\nexport class CommandPaletteDialog extends Dialog {\n    setup() {\n        super.setup();\n        useExternalListener(window, \"mousedown\", this.onWindowMouseDown);\n    }\n\n    /**\n     * Used to close ourself on outside click.\n     */\n    onWindowMouseDown(ev) {\n        const element = ev.target.parentElement;\n        const gotClickedInside = this.modalRef.el.contains(element);\n        if (!gotClickedInside) {\n            this.close();\n        }\n    }\n}\nCommandPaletteDialog.renderHeader = false;\nCommandPaletteDialog.renderFooter = false;\nCommandPaletteDialog.size = \"modal-md\";\nCommandPaletteDialog.contentClass = \"o_command_palette\";\nCommandPaletteDialog.bodyTemplate = \"web.CommandPaletteDialogBody\";\nCommandPaletteDialog.components = Object.assign({}, Dialog.components, { CommandPalette });\n", "/** @odoo-module **/\n\nimport { registry } from \"@web/core/registry\";\nimport { CommandPaletteDialog } from \"./command_palette_dialog\";\n\nconst { xml } = owl.tags;\n\n/**\n * @typedef {import(\"./command_palette\").CommandPaletteConfig} CommandPaletteConfig\n */\n\n/**\n * @typedef {{\n *  name: string;\n *  action: ()=>(void | CommandPaletteConfig);\n *  category?: string;\n * }} Command\n */\n\n/**\n * @typedef {{\n *  activeElement?: HTMLElement;\n *  category?: string;\n *  global?: boolean;\n *  hotkey?: string;\n * }} CommandOptions\n */\n\n/**\n * @typedef {Command & CommandOptions & {\n *  removeHotkey?: ()=>void;\n * }} CommandRegistration\n */\n\nconst commandCategoryRegistry = registry.category(\"command_categories\");\nconst commandEmptyMessageRegistry = registry.category(\"command_empty_list\");\nconst commandProviderRegistry = registry.category(\"command_provider\");\n\nconst footerTemplate = xml`\n<span>\n    <span class='o_promote'>TIP</span> \u2014 search for <span class='o_promote'>@</span>users, <span class='o_promote'>#</span>channels, and <span class='o_promote'>/</span>menus\n</span>\n`;\n\nexport const commandService = {\n    dependencies: [\"dialog\", \"hotkey\", \"ui\"],\n    start(env, { dialog, hotkey: hotkeyService, ui }) {\n        /** @type {Map<CommandRegistration>} */\n        const registeredCommands = new Map();\n        let nextToken = 0;\n        let isPaletteOpened = false;\n\n        hotkeyService.add(\"control+k\", openMainPalette, {\n            bypassEditableProtection: true,\n            global: true,\n        });\n\n        function openMainPalette() {\n            const categoriesByNamespace = {};\n            commandCategoryRegistry.getEntries().forEach(([category, el]) => {\n                const namespace = el.namespace ? el.namespace : \"default\";\n                if (namespace in categoriesByNamespace) {\n                    categoriesByNamespace[namespace].push(category);\n                } else {\n                    categoriesByNamespace[namespace] = [category];\n                }\n            });\n\n            const emptyMessageByNamespace = {};\n            commandEmptyMessageRegistry.getEntries().forEach(([key, message]) => {\n                emptyMessageByNamespace[key] = message.toString();\n            });\n\n            const config = {\n                categoriesByNamespace,\n                emptyMessageByNamespace,\n                footerTemplate,\n                placeholder: env._t(\"Search for a command...\"),\n                providers: commandProviderRegistry.getAll(),\n            };\n            return openPalette(config);\n        }\n\n        /**\n         * @param {CommandPaletteConfig} config\n         * @returns config if the command palette is already open\n         */\n        function openPalette(config) {\n            if (isPaletteOpened) {\n                return config;\n            }\n\n            // Open Command Palette dialog\n            isPaletteOpened = true;\n            dialog.add(\n                CommandPaletteDialog,\n                {\n                    config,\n                },\n                {\n                    onClose: () => {\n                        isPaletteOpened = false;\n                    },\n                }\n            );\n        }\n\n        /**\n         * @param {Command} command\n         * @param {CommandOptions} options\n         * @returns {number} token\n         */\n        function registerCommand(command, options) {\n            if (!command.name || !command.action || typeof command.action !== \"function\") {\n                throw new Error(\"A Command must have a name and an action function.\");\n            }\n\n            const registration = Object.assign({}, command, options);\n\n            if (registration.hotkey) {\n                registration.removeHotkey = hotkeyService.add(\n                    registration.hotkey,\n                    registration.action,\n                    {\n                        activeElement: registration.activeElement,\n                        global: registration.global,\n                    }\n                );\n            }\n\n            const token = nextToken++;\n            registeredCommands.set(token, registration);\n            if (!options.activeElement) {\n                // Due to the way elements are mounted in the DOM by Owl (bottom-to-top),\n                // we need to wait the next micro task tick to set the context activate\n                // element of the subscription.\n                Promise.resolve().then(() => {\n                    registration.activeElement = ui.activeElement;\n                });\n            }\n\n            return token;\n        }\n\n        /**\n         * Unsubscribes the token corresponding subscription.\n         *\n         * @param {number} token\n         */\n        function unregisterCommand(token) {\n            const cmd = registeredCommands.get(token);\n            if (cmd && cmd.removeHotkey) {\n                cmd.removeHotkey();\n            }\n            registeredCommands.delete(token);\n        }\n\n        return {\n            /**\n             * @param {string} name\n             * @param {()=>(void | CommandPaletteConfig)} action\n             * @param {CommandOptions} [options]\n             * @returns {() => void}\n             */\n            add(name, action, options = {}) {\n                const token = registerCommand({ name, action }, options);\n                return () => {\n                    unregisterCommand(token);\n                };\n            },\n            /**\n             * @param {HTMLElement} activeElement\n             * @returns {Command[]}\n             */\n            getCommands(activeElement) {\n                return [...registeredCommands.values()].filter(\n                    (command) => command.activeElement === activeElement || command.global\n                );\n            },\n            openPalette,\n        };\n    },\n};\n\nregistry.category(\"services\").add(\"command\", commandService);\n", "/** @odoo-module **/\n\nimport { isMacOS } from \"@web/core/browser/feature_detection\";\nimport { useHotkey } from \"@web/core/hotkeys/hotkey_hook\";\nimport { _lt } from \"@web/core/l10n/translation\";\nimport { registry } from \"@web/core/registry\";\nimport { capitalize } from \"@web/core/utils/strings\";\nimport { getVisibleElements } from \"@web/core/utils/ui\";\nimport { DefaultCommandItem } from \"./command_palette\";\n\nconst { Component } = owl;\n\nexport class HotkeyCommandItem extends Component {\n    setup() {\n        useHotkey(this.props.hotkey, () => {\n            this.trigger(\"execute-command\");\n        });\n    }\n\n    getKeysToPress(command) {\n        const { hotkey } = command;\n        let result = hotkey.split(\"+\");\n        if (isMacOS()) {\n            result = result\n                .map((x) => x.replace(\"control\", \"command\"))\n                .map((x) => x.replace(\"alt\", \"control\"));\n        }\n        return result.map((key) => key.toUpperCase());\n    }\n}\nHotkeyCommandItem.template = \"web.HotkeyCommandItem\";\nconst commandEmptyMessageRegistry = registry.category(\"command_empty_list\");\ncommandEmptyMessageRegistry.add(\"default\", _lt(\"No commands found\"));\n\nconst commandCategoryRegistry = registry.category(\"command_categories\");\n\nconst commandProviderRegistry = registry.category(\"command_provider\");\ncommandProviderRegistry.add(\"command\", {\n    provide: (env, options = {}) => {\n        const commands = env.services.command.getCommands(options.activeElement).map((cmd) => {\n            cmd.category = commandCategoryRegistry.contains(cmd.category)\n                ? cmd.category\n                : \"default\";\n            return cmd;\n        });\n\n        return commands.map((command) => ({\n            Component: command.hotkey ? HotkeyCommandItem : DefaultCommandItem,\n            action: command.action,\n            category: command.category,\n            name: command.name,\n            props: {\n                hotkey: command.hotkey,\n                hotkeyOptions: command.hotkeyOptions,\n            },\n        }));\n    },\n});\n\ncommandProviderRegistry.add(\"data-hotkeys\", {\n    provide: (env, options = {}) => {\n        const commands = [];\n        const overlayModifier = registry.category(\"services\").get(\"hotkey\").overlayModifier;\n        // Also retrieve all hotkeyables elements\n        for (const el of getVisibleElements(\n            options.activeElement,\n            \"[data-hotkey]:not(:disabled)\"\n        )) {\n            const closest = el.closest(\"[data-command-category]\");\n            const category = closest ? closest.dataset.commandCategory : \"default\";\n\n            const description =\n                el.title ||\n                el.dataset.originalTitle || // LEGACY: bootstrap moves title to data-original-title\n                el.dataset.tooltip ||\n                el.placeholder ||\n                (el.innerText &&\n                    `${el.innerText.slice(0, 50)}${el.innerText.length > 50 ? \"...\" : \"\"}`) ||\n                env._t(\"no description provided\");\n\n            commands.push({\n                Component: HotkeyCommandItem,\n                action: () => {\n                    // AAB: not sure it is enough, we might need to trigger all events that occur when you actually click\n                    el.focus();\n                    el.click();\n                },\n                category,\n                name: capitalize(description.trim().toLowerCase()),\n                props: {\n                    hotkey: `${overlayModifier}+${el.dataset.hotkey}`,\n                },\n            });\n        }\n        return commands;\n    },\n});\n", "/** @odoo-module */\n\nimport { Dialog } from \"../dialog/dialog\";\nimport { _lt } from \"../l10n/translation\";\n\nexport class ConfirmationDialog extends Dialog {\n    setup() {\n        super.setup();\n        this.title = this.props.title;\n    }\n    _cancel() {\n        if (this.props.cancel) {\n            this.props.cancel();\n        }\n        this.close();\n    }\n\n    _confirm() {\n        if (this.props.confirm) {\n            this.props.confirm();\n        }\n        this.close();\n    }\n}\nConfirmationDialog.props = {\n    title: {\n        validate: (m) => {\n            return (\n                typeof m === \"string\" || (typeof m === \"object\" && typeof m.toString === \"function\")\n            );\n        },\n    },\n    body: String,\n    confirm: { type: Function, optional: true },\n    cancel: { type: Function, optional: true },\n    close: Function,\n};\nConfirmationDialog.defaultProps = {\n    title: _lt(\"Confirmation\"),\n};\n\nConfirmationDialog.bodyTemplate = \"web.ConfirmationDialogBody\";\nConfirmationDialog.footerTemplate = \"web.ConfirmationDialogFooter\";\nConfirmationDialog.size = \"modal-md\";\n\nexport class AlertDialog extends ConfirmationDialog {\n    setup() {\n        super.setup();\n        if (\"contentClass\" in this.props) {\n            this.contentClass = this.props.contentClass;\n        }\n    }\n}\nAlertDialog.size = \"modal-sm\";\nAlertDialog.props = Object.assign(Object.create(ConfirmationDialog.props), {\n    contentClass: { type: String, optional: true },\n});\n\nAlertDialog.defaultProps = {\n    title: _lt(\"Alert\"),\n};\n", "/** @odoo-module **/\n\nimport { evaluateExpr } from \"./py_js/py\";\n\n/**\n * @typedef {{[key: string]: any}} Context\n * @typedef {Context | string | undefined} ContextDescription\n */\n\n/**\n * Create an evaluated context from an arbitrary list of context representations.\n * The evaluated context in construction is used along the way to evaluate further parts.\n *\n * @param {ContextDescription[]} contexts\n * @param {Context} [initialEvaluationContext] optional evaluation context to start from.\n * @returns {Context}\n */\nexport function makeContext(contexts, initialEvaluationContext) {\n    const evaluationContext = Object.assign({}, initialEvaluationContext);\n    const context = {};\n    for (let ctx of contexts) {\n        if (ctx !== \"\") {\n            ctx = typeof ctx === \"string\" ? evaluateExpr(ctx, evaluationContext) : ctx;\n            Object.assign(context, ctx);\n            Object.assign(evaluationContext, context); // is this behavior really wanted ?\n        }\n    }\n    return context;\n}\n", "/** @odoo-module **/\n\nimport { localization } from \"@web/core/l10n/localization\";\nimport { registry } from \"@web/core/registry\";\nimport { useAutofocus } from \"@web/core/utils/hooks\";\nimport { isIOS } from \"@web/core/browser/feature_detection\";\n\nconst { Component, hooks } = owl;\nconst { DateTime } = luxon;\nconst { useExternalListener, useRef, useState } = hooks;\n\nconst formatters = registry.category(\"formatters\");\nconst parsers = registry.category(\"parsers\");\n\nlet datePickerId = 0;\n\n/**\n * @param {DateTime} date\n * @returns {moment}\n */\nconst luxonDateToMomentDate = (date) => {\n    return window.moment(String(date));\n};\n\n/**\n * @param {string} format\n * @returns {string}\n */\nconst luxonFormatToMomentFormat = (format) => {\n    return format.replace(/[dy]/g, (x) => x.toUpperCase());\n};\n\n/**\n * @param {string} format\n * @returns {boolean}\n */\nconst isValidStaticFormat = (format) => {\n    try {\n        return /^[\\d\\s\\/.,:-]+$/.test(DateTime.local().toFormat(format));\n    } catch (_err) {\n        return false;\n    }\n};\n\n/**\n * Date picker\n *\n * This component exposes the API of the tempusdominus datepicker library.\n * As such, its template is a simple input that will open the TD datepicker\n * when clicked on. The component will also synchronize any user-input value\n * with the library widget and vice-versa.\n *\n * Note that all props given to this component will be passed as arguments to\n * instantiate the picker widget. Also any luxon date is automatically\n * stringified since tempusdominus only works with moment objects.\n * @extends Component\n */\nexport class DatePicker extends Component {\n    setup() {\n        this.inputRef = useRef(\"input\");\n        this.state = useState({ warning: false });\n\n        this.datePickerId = `o_datepicker_${datePickerId++}`;\n        // Manually keep track of the \"open\" state to write the date in the\n        // static format just before bootstrap parses it.\n        this.datePickerShown = false;\n\n        this.initFormat();\n        this.setDate(this.props);\n        this.setFormat(this.props);\n\n        useAutofocus();\n        useExternalListener(window, \"scroll\", this.onWindowScroll);\n    }\n\n    mounted() {\n        this.bootstrapDateTimePicker(this.props);\n        this.updateInput();\n\n        window.$(this.el).on(\"show.datetimepicker\", () => {\n            this.datePickerShown = true;\n            this.inputRef.el.select();\n        });\n        window.$(this.el).on(\"hide.datetimepicker\", () => {\n            this.datePickerShown = false;\n            this.onDateChange({ useStatic: true });\n        });\n        window.$(this.el).on(\"error.datetimepicker\", () => false);\n    }\n\n    willUpdateProps(nextProps) {\n        const pickerParams = {};\n        let shouldUpdateInput = false;\n        for (const prop in nextProps) {\n            const prev = this.props[prop];\n            const next = nextProps[prop];\n            if ((prev instanceof DateTime && !prev.equals(next)) || prev !== next) {\n                pickerParams[prop] = nextProps[prop];\n                if (prop === \"date\") {\n                    this.setDate(nextProps);\n                    shouldUpdateInput = true;\n                } else if (prop === \"format\") {\n                    this.setFormat(nextProps);\n                    shouldUpdateInput = true;\n                }\n            }\n        }\n        if (shouldUpdateInput) {\n            this.updateInput();\n        }\n        this.bootstrapDateTimePicker(pickerParams);\n    }\n\n    willUnmount() {\n        window.$(this.el).off(); // Removes all jQuery events\n\n        this.bootstrapDateTimePicker(\"destroy\");\n    }\n\n    //---------------------------------------------------------------------\n    // Protected\n    //---------------------------------------------------------------------\n\n    getOptions(useStatic = false) {\n        return {\n            format: !useStatic || isValidStaticFormat(this.format) ? this.format : this.staticFormat,\n            locale: this.date.locale,\n            timezone: this.isLocal,\n        };\n    }\n\n    /**\n     * Initialises formatting and parsing parameters\n     */\n    initFormat() {\n        this.defaultFormat = localization.dateFormat;\n        this.staticFormat = \"yyyy/MM/dd\";\n        this.formatValue = formatters.get(\"date\");\n        this.parseValue = parsers.get(\"date\");\n        this.isLocal = false;\n    }\n\n    /**\n     * Sets the current date value. If a locale is provided, the given date\n     * will first be set in that locale.\n     * @param {Object} params\n     * @param {DateTime} params.date\n     * @param {string} [params.locale]\n     */\n    setDate({ date, locale }) {\n        this.date = locale ? date.setLocale(locale) : date;\n    }\n\n    /**\n     * Sets the current format.\n     * @param {Object} params\n     * @param {string} [params.format]\n     */\n    setFormat({ format }) {\n        // Fallback to default localization format in `@web/core/l10n/dates.js`.\n        this.format = format || this.defaultFormat;\n    }\n\n    /**\n     * Updates the input element with the current formatted date value.\n     * @param {Object} [params={}]\n     * @param {boolean} [params.useStatic]\n     */\n    updateInput({ useStatic } = {}) {\n        try {\n            this.inputRef.el.value = this.formatValue(this.date, this.getOptions(useStatic));\n        } catch (_err) {\n            // Ignore\n        }\n    }\n\n    //---------------------------------------------------------------------\n    // Bootstrap datepicker\n    //---------------------------------------------------------------------\n\n    /**\n     * Handles bootstrap datetimepicker calls.\n     * @param {string | Object} commandOrParams\n     */\n    bootstrapDateTimePicker(commandOrParams) {\n        if (typeof commandOrParams === \"object\") {\n            const format = isValidStaticFormat(this.format) ? this.format : this.staticFormat;\n            const params = { ...commandOrParams, format: luxonFormatToMomentFormat(format) };\n            if (!params.locale && commandOrParams.date) {\n                params.locale = commandOrParams.date.locale;\n            }\n            for (const prop in params) {\n                if (params[prop] instanceof DateTime) {\n                    const luxonDate = params[prop];\n                    const momentDate = luxonDateToMomentDate(luxonDate);\n                    params[prop] = momentDate;\n                }\n            }\n            commandOrParams = params;\n        }\n        return window.$(this.el).datetimepicker(commandOrParams);\n    }\n\n    //---------------------------------------------------------------------\n    // Handlers\n    //---------------------------------------------------------------------\n\n    onInputClick() {\n        if (!this.datePickerShown) {\n            this.updateInput({ useStatic: true });\n        }\n        this.bootstrapDateTimePicker(\"toggle\");\n    }\n\n    /**\n     * Called either when the input value has changed or when the boostrap\n     * datepicker is closed. The actual \"datetime-changed\" emitted by the\n     * component is only triggered if the date value has changed.\n     * @param {Object} [params={}]\n     * @param {boolean} [params.useStatic]\n     */\n    onDateChange({ useStatic } = {}) {\n        let date;\n        try {\n            date = this.parseValue(this.inputRef.el.value, this.getOptions(useStatic));\n        } catch (_err) {\n            // Reset to default (= given) date.\n        }\n        if (!date || date.equals(this.date)) {\n            this.updateInput();\n        } else {\n            this.state.warning = date > DateTime.local();\n            this.trigger(\"datetime-changed\", { date });\n        }\n    }\n\n    /**\n     * @param {Event} ev\n     */\n    onWindowScroll(ev) {\n        if (!isIOS() && ev.target !== this.inputRef.el) {\n            this.bootstrapDateTimePicker(\"hide\");\n        }\n    }\n}\n\nDatePicker.defaultProps = {\n    calendarWeeks: true,\n    icons: {\n        clear: \"fa fa-delete\",\n        close: \"fa fa-check primary\",\n        date: \"fa fa-calendar\",\n        down: \"fa fa-chevron-down\",\n        next: \"fa fa-chevron-right\",\n        previous: \"fa fa-chevron-left\",\n        time: \"fa fa-clock-o\",\n        today: \"fa fa-calendar-check-o\",\n        up: \"fa fa-chevron-up\",\n    },\n    maxDate: DateTime.fromObject({ year: 9999, month: 12, day: 31 }),\n    minDate: DateTime.fromObject({ year: 1000 }),\n    useCurrent: false,\n    widgetParent: \"body\",\n};\nDatePicker.props = {\n    // Components props\n    date: DateTime,\n    warn_future: { type: Boolean, optional: true },\n    // Bootstrap datepicker options\n    buttons: {\n        type: Object,\n        shape: {\n            showClear: Boolean,\n            showClose: Boolean,\n            showToday: Boolean,\n        },\n        optional: true,\n    },\n    calendarWeeks: Boolean,\n    format: { type: String, optional: true },\n    icons: {\n        type: Object,\n        shape: {\n            clear: String,\n            close: String,\n            date: String,\n            down: String,\n            next: String,\n            previous: String,\n            time: String,\n            today: String,\n            up: String,\n        },\n    },\n    keyBinds: { validate: (kb) => typeof kb === \"object\" || kb === null, optional: true },\n    locale: { type: String, optional: true },\n    maxDate: DateTime,\n    minDate: DateTime,\n    readonly: { type: Boolean, optional: true },\n    useCurrent: Boolean,\n    widgetParent: String,\n};\nDatePicker.template = \"web.DatePicker\";\n\n/**\n * Date/time picker\n *\n * Similar to the DatePicker component, adding the handling of more specific\n * time values: hour-minute-second.\n *\n * Once again, refer to the tempusdominus documentation for implementation\n * details.\n * @extends DatePicker\n */\nexport class DateTimePicker extends DatePicker {\n    /**\n     * @override\n     */\n    initFormat() {\n        this.defaultFormat = localization.dateTimeFormat;\n        this.staticFormat = \"yyyy/MM/dd HH:mm:ss\";\n        this.formatValue = formatters.get(\"datetime\");\n        this.parseValue = parsers.get(\"datetime\");\n        this.isLocal = true;\n    }\n}\n\nDateTimePicker.defaultProps = {\n    ...DatePicker.defaultProps,\n    buttons: {\n        showClear: false,\n        showClose: true,\n        showToday: false,\n    },\n};\n", "/** @odoo-module **/\n\nimport { registry } from \"../registry\";\nimport { memoize } from \"../utils/functions\";\nimport { useEffect } from \"@web/core/utils/hooks\";\n\nconst { useEnv, useSubEnv } = owl.hooks;\nconst debugRegistry = registry.category(\"debug\");\n\nconst getAccessRights = memoize(async function getAccessRights(orm) {\n    const rightsToCheck = {\n        \"ir.ui.view\": \"write\",\n        \"ir.rule\": \"read\",\n        \"ir.model.access\": \"read\",\n    };\n    const proms = Object.entries(rightsToCheck).map(([model, operation]) => {\n        return orm.call(model, \"check_access_rights\", [], {\n            operation,\n            raise_exception: false,\n        });\n    });\n    const [canEditView, canSeeRecordRules, canSeeModelAccess] = await Promise.all(proms);\n    const accessRights = { canEditView, canSeeRecordRules, canSeeModelAccess };\n    return accessRights;\n});\n\nclass DebugContext {\n    constructor(env, defaultCategories) {\n        this.orm = env.services.orm;\n        this.categories = new Map(defaultCategories.map((cat) => [cat, [{}]]));\n    }\n\n    activateCategory(category, context) {\n        const contexts = this.categories.get(category) || new Set();\n        contexts.add(context);\n        this.categories.set(category, contexts);\n\n        return () => {\n            contexts.delete(context);\n            if (contexts.size === 0) {\n                this.categories.delete(category);\n            }\n        };\n    }\n\n    async getItems(env) {\n        const accessRights = await getAccessRights(this.orm);\n        return [...this.categories.entries()]\n            .flatMap(([category, contexts]) => {\n                return debugRegistry\n                    .category(category)\n                    .getAll()\n                    .map((factory) => factory(Object.assign({ env, accessRights }, ...contexts)));\n            })\n            .filter(Boolean)\n            .sort((x, y) => {\n                const xSeq = x.sequence || 1000;\n                const ySeq = y.sequence || 1000;\n                return xSeq - ySeq;\n            });\n    }\n}\n\nconst debugContextSymbol = Symbol(\"debugContext\");\nexport function createDebugContext(env, { categories = [] } = {}) {\n    return { [debugContextSymbol]: new DebugContext(env, categories) };\n}\n\nexport function useOwnDebugContext({ categories = [] } = {}) {\n    useSubEnv(createDebugContext(useEnv(), { categories }));\n}\n\nexport function useEnvDebugContext() {\n    const debugContext = useEnv()[debugContextSymbol];\n    if (!debugContext) {\n        throw new Error(\"There is no debug context available in the current environment.\");\n    }\n    return debugContext;\n}\n\nexport function useDebugCategory(category, context = {}) {\n    const env = useEnv();\n    if (env.debug) {\n        const debugContext = useEnvDebugContext();\n        useEffect(\n            () => debugContext.activateCategory(category, context),\n            () => []\n        );\n    }\n}\n", "/** @odoo-module **/\n\nimport { DebugMenuBasic } from \"@web/core/debug/debug_menu_basic\";\nimport { useCommand } from \"@web/core/commands/command_hook\";\nimport { useService } from \"@web/core/utils/hooks\";\nimport { useEnvDebugContext } from \"./debug_context\";\n\nexport class DebugMenu extends DebugMenuBasic {\n    setup() {\n        super.setup();\n        const debugContext = useEnvDebugContext();\n        this.command = useService(\"command\");\n        useCommand(\n            this.env._t(\"Debug tools...\"),\n            async () => {\n                const items = await debugContext.getItems(this.env);\n                let index = 0;\n                const defaultCategories = items\n                    .filter((item) => item.type === \"separator\")\n                    .map(() => (index += 1));\n                const provider = {\n                    async provide() {\n                        const categories = [...defaultCategories];\n                        let category = categories.shift();\n                        const result = [];\n                        items.forEach((item) => {\n                            if (item.type === \"item\") {\n                                result.push({\n                                    name: item.description.toString(),\n                                    action: item.callback,\n                                    category,\n                                });\n                            } else if (item.type === \"separator\") {\n                                category = categories.shift();\n                            }\n                        });\n                        return result;\n                    },\n                };\n                const commandPaletteConfig = {\n                    categoriesByNamespace: {\n                        default: defaultCategories,\n                    },\n                    emptyMessageByNamespace: { default: this.env._t(\"No commands found\") },\n                    placeholder: this.env._t(\"Choose a debug command...\"),\n                    providers: [provider],\n                };\n                return this.command.openPalette(commandPaletteConfig);\n            },\n            {\n                category: \"debug\",\n            }\n        );\n    }\n}\n", "/** @odoo-module **/\n\nimport { useEnvDebugContext } from \"./debug_context\";\n\nconst { Component } = owl;\n\nexport class DebugMenuBasic extends Component {\n    setup() {\n        const debugContext = useEnvDebugContext();\n        // Needs to be bound to this for use in template\n        this.getElements = async () => {\n            this.elements = await debugContext.getItems(this.env);\n        };\n    }\n}\nDebugMenuBasic.template = \"web.DebugMenu\";\n", "/** @odoo-module **/\n\nimport { browser } from \"@web/core/browser/browser\";\nimport { routeToUrl } from \"@web/core/browser/router_service\";\nimport { registry } from \"@web/core/registry\";\n\nfunction activateAssetsDebugging({ env }) {\n    return {\n        type: \"item\",\n        description: env._t(\"Activate Assets Debugging\"),\n        callback: () => {\n            browser.location.search = \"?debug=assets\";\n        },\n        sequence: 410,\n    };\n}\n\nfunction activateTestsAssetsDebugging({ env }) {\n    return {\n        type: \"item\",\n        description: env._t(\"Activate Tests Assets Debugging\"),\n        callback: () => {\n            browser.location.search = \"?debug=assets,tests\";\n        },\n        sequence: 420,\n    };\n}\n\nexport function regenerateAssets({ env }) {\n    return {\n        type: \"item\",\n        description: env._t(\"Regenerate Assets Bundles\"),\n        callback: async () => {\n            const domain = [\n                \"&\",\n                [\"res_model\", \"=\", \"ir.ui.view\"],\n                \"|\",\n                [\"name\", \"=like\", \"%.assets_%.css\"],\n                [\"name\", \"=like\", \"%.assets_%.js\"],\n            ];\n            const ids = await env.services.orm.search(\"ir.attachment\", domain);\n            await env.services.orm.unlink(\"ir.attachment\", ids);\n            browser.location.reload();\n        },\n        sequence: 430,\n    };\n}\n\nfunction becomeSuperuser({ env }) {\n    const becomeSuperuserURL = browser.location.origin + \"/web/become\";\n    return {\n        type: \"item\",\n        description: env._t(\"Become Superuser\"),\n        hide: !env.services.user.isAdmin,\n        href: becomeSuperuserURL,\n        callback: () => {\n            browser.open(becomeSuperuserURL, \"_self\");\n        },\n        sequence: 440,\n    };\n}\n\nfunction leaveDebugMode({ env }) {\n    return {\n        type: \"item\",\n        description: env._t(\"Leave the Developer Tools\"),\n        callback: () => {\n            const route = env.services.router.current;\n            route.search.debug = \"\";\n            browser.location.href = browser.location.origin + routeToUrl(route);\n        },\n        sequence: 450,\n    };\n}\n\nregistry\n    .category(\"debug\")\n    .category(\"default\")\n    .add(\"activateAssetsDebugging\", activateAssetsDebugging)\n    .add(\"regenerateAssets\", regenerateAssets)\n    .add(\"becomeSuperuser\", becomeSuperuser)\n    .add(\"leaveDebugMode\", leaveDebugMode)\n    .add(\"activateTestsAssetsDebugging\", activateTestsAssetsDebugging);\n", "/** @odoo-module */\n\nimport { registry } from \"../registry\";\nimport { browser } from \"../browser/browser\";\nimport { routeToUrl } from \"../browser/router_service\";\n\nconst commandProviderRegistry = registry.category(\"command_provider\");\n\ncommandProviderRegistry.add(\"debug\", {\n    provide: (env, options) => {\n        const result = [];\n        if (env.debug) {\n            result.push({\n                action() {\n                    const route = env.services.router.current;\n                    route.search.debug = \"\";\n                    browser.location.href = browser.location.origin + routeToUrl(route);\n                },\n                category: \"debug\",\n                name: env._t(\"Deactivate debug mode\"),\n            });\n        } else {\n            if (options.searchValue.toLowerCase() === \"debug\") {\n                result.push({\n                    action() {\n                        browser.location.search = \"?debug=assets\";\n                    },\n                    category: \"debug\",\n                    name: env._t(\"Activate debug mode\"),\n                });\n            }\n        }\n        return result;\n    },\n});\n", "/** @odoo-module **/\n\nexport function editModelDebug(env, title, model, id) {\n    return env.services.action.doAction({\n        res_model: model,\n        res_id: id,\n        name: title,\n        type: \"ir.actions.act_window\",\n        views: [[false, \"form\"]],\n        view_mode: \"form\",\n        target: \"new\",\n        flags: { action_buttons: true, headless: true },\n    });\n}\n", "/** @odoo-module **/\n\nimport { DropdownItem } from \"@web/core/dropdown/dropdown_item\";\nimport { useBus, useService } from \"@web/core/utils/hooks\";\n\nconst { Component } = owl;\n\nexport class ProfilingItem extends Component {\n    setup() {\n        this.profiling = useService(\"profiling\");\n        useBus(this.props.bus, \"UPDATE\", this.render);\n    }\n\n    changeParam(param, ev) {\n        this.profiling.setParam(param, ev.target.value);\n    }\n    toggleParam(param, ev) {\n        const value = this.profiling.state.params.execution_context_qweb;\n        this.profiling.setParam(param, !value);\n    }\n    openProfiles() {\n        if (this.env.services.action) {\n            // using doAction in the backend to preserve breadcrumbs and stuff\n            this.env.services.action.doAction(\"base.action_menu_ir_profile\");\n        } else {\n            // No action service means we are in the frontend.\n            window.location = \"/web/#action=base.action_menu_ir_profile\";\n        }\n    }\n}\nProfilingItem.components = { DropdownItem };\nProfilingItem.template = \"web.DebugMenu.ProfilingItem\";\n", "/** @odoo-module **/\n\nimport { registry } from \"@web/core/registry\";\nimport { ProfilingItem } from \"./profiling_item\";\nimport { session } from \"@web/session\";\n\nconst { core } = owl;\n\nconst profilingService = {\n    dependencies: [\"orm\"],\n    start(env, { orm }) {\n        const state = {\n            session: session.profile_session || false,\n            collectors: session.profile_collectors || [\"sql\", \"traces_async\"],\n            params: session.profile_params || {},\n            get isEnabled() {\n                return Boolean(state.session);\n            },\n        };\n        const bus = new core.EventBus();\n\n        let recordingIcon = null;\n        function updateDebugIcon() {\n            const debugItem = document.querySelector(\".o_main_navbar .o_debug_manager .fa-bug\");\n            if (state.isEnabled) {\n                recordingIcon = document.createElement(\"span\");\n                recordingIcon.classList.add(\"o_recording\", \"text-danger\", \"fa\", \"fa-circle\");\n                debugItem.appendChild(recordingIcon);\n            } else if (recordingIcon) {\n                debugItem.removeChild(recordingIcon);\n                recordingIcon = null;\n            }\n        }\n\n        if (env.debug) {\n            env.bus.on(\"WEB_CLIENT_READY\", null, updateDebugIcon);\n        }\n\n        async function setProfiling(params) {\n            const kwargs = Object.assign(\n                {\n                    collectors: state.collectors,\n                    params: state.params,\n                    profile: state.isEnabled,\n                },\n                params\n            );\n            const resp = await orm.call(\"ir.profile\", \"set_profiling\", [], kwargs);\n            if (resp.type) {  // most likely an \"ir.actions.act_window\"\n                env.services.action.doAction(resp);\n            } else {\n                state.session = resp.session;\n                state.collectors = resp.collectors;\n                state.params = resp.params;\n                bus.trigger(\"UPDATE\");\n                updateDebugIcon();\n            }\n        }\n\n        function profilingSeparator() {\n            return {\n                type: \"separator\",\n                sequence: 500,\n            };\n        }\n\n        function profilingItem() {\n            return {\n                type: \"component\",\n                Component: ProfilingItem,\n                props: { bus },\n                sequence: 510,\n            };\n        }\n\n        registry\n            .category(\"debug\")\n            .category(\"default\")\n            .add(\"profilingSeparator\", profilingSeparator)\n            .add(\"profilingItem\", profilingItem);\n\n        return {\n            state,\n            async toggleProfiling() {\n                await setProfiling({ profile: !state.isEnabled });\n            },\n            async toggleCollector(collector) {\n                let nextCollectors = state.collectors.slice();\n                const index = nextCollectors.indexOf(collector);\n                if (index >= 0) {\n                    nextCollectors.splice(index, 1);\n                } else {\n                    nextCollectors.push(collector);\n                }\n                await setProfiling({ collectors: nextCollectors });\n            },\n            async setParam(key, value) {\n                const nextParams = Object.assign({}, state.params);\n                nextParams[key] = value;\n                await setProfiling({ params: nextParams });\n            },\n            isCollectorEnabled(collector) {\n                return state.collectors.includes(collector);\n            },\n        };\n    },\n};\n\nregistry.category(\"services\").add(\"profiling\", profilingService);\n", "/** @odoo-module **/\n\nimport { useHotkey } from \"@web/core/hotkeys/hotkey_hook\";\nimport { useActiveElement } from \"../ui/ui_service\";\n\nconst { Component, hooks } = owl;\nconst { useRef, useSubEnv } = hooks;\n\nexport class Dialog extends Component {\n    setup() {\n        if (this.constructor === Dialog) {\n            throw new Error(\n                \"Dialog should not be used by itself. Please use the dialog service with a Dialog subclass.\"\n            );\n        }\n        this.modalRef = useRef(\"modal\");\n        useActiveElement(\"modal\");\n        useHotkey(\"escape\", () => {\n            this.close();\n        });\n        useSubEnv({ inDialog: true });\n        this.close = this.close.bind(this);\n        this.contentClass = this.constructor.contentClass;\n        this.fullscreen = this.constructor.fullscreen;\n        this.renderFooter = this.constructor.renderFooter;\n        this.renderHeader = this.constructor.renderHeader;\n        this.size = this.constructor.size;\n        this.technical = this.constructor.technical;\n        this.title = this.constructor.title;\n    }\n\n    /**\n     * Send an event signaling that the dialog should be closed.\n     * @private\n     */\n    close() {\n        this.props.close();\n    }\n}\n\nDialog.template = \"web.Dialog\";\nDialog.contentClass = null;\nDialog.fullscreen = false;\nDialog.renderFooter = true;\nDialog.renderHeader = true;\nDialog.size = \"modal-lg\";\nDialog.technical = true;\nDialog.title = \"Odoo\";\nDialog.bodyTemplate = owl.tags.xml`<div/>`;\nDialog.footerTemplate = \"web.DialogFooterDefault\";\n", "/** @odoo-module **/\n\nimport { ErrorHandler, NotUpdatable } from \"../utils/components\";\n\nconst { Component, tags } = owl;\n\nexport class DialogContainer extends Component {\n    setup() {\n        this.props.bus.on(\"UPDATE\", this, this.render);\n    }\n\n    close(id) {\n        if (this.props.dialogs[id]) {\n            this.props.dialogs[id].props.close();\n        }\n    }\n\n    handleError(error, dialogId) {\n        this.close(dialogId);\n        Promise.resolve().then(() => {\n            throw error;\n        });\n    }\n}\nDialogContainer.components = { ErrorHandler, NotUpdatable };\nDialogContainer.template = tags.xml`\n    <div class=\"o_dialog_container\" t-att-class=\"{'modal-open': Object.keys(props.dialogs).length > 0}\">\n      <t t-foreach=\"Object.values(props.dialogs)\" t-as=\"dialog\" t-key=\"dialog.id\">\n        <NotUpdatable>\n            <ErrorHandler onError=\"(error) => handleError(error, dialog.id)\">\n                <t t-component=\"dialog.class\" t-props=\"dialog.props\"\n                    t-on-dialog-closed=\"dialog.props.close()\" \n                    t-att-class=\"{o_inactive_modal: !dialog_last}\"/>\n            </ErrorHandler>\n        </NotUpdatable>\n      </t>\n    </div>\n    `;\n", "/** @odoo-module **/\n\nimport { registry } from \"../registry\";\nimport { Dialog } from \"./dialog\";\nimport { DialogContainer } from \"./dialog_container\";\n\nconst { core } = owl;\nconst { EventBus } = core;\n\n/**\n *  @typedef {{\n *      onClose?(): void;\n *  }} DialogServiceInterfaceAddOptions\n */\n/**\n *  @typedef {{\n *      add(\n *          Component: any,\n *          props: {},\n *          options?: DialogServiceInterfaceAddOptions\n *      ): () => void;\n *  }} DialogServiceInterface\n */\n\nexport const dialogService = {\n    /** @returns {DialogServiceInterface} */\n    start() {\n        const dialogs = {};\n        const bus = new EventBus();\n        let dialogId = 0;\n\n        registry.category(\"main_components\").add(\"DialogContainer\", {\n            Component: DialogContainer,\n            props: { bus, dialogs },\n        });\n\n        function add(dialogClass, props, options = {}) {\n            if (!(dialogClass.prototype instanceof Dialog)) {\n                throw new Error(`${dialogClass.name} must be a subclass of Dialog`);\n            }\n\n            const id = ++dialogId;\n            function close() {\n                if (dialogs[id]) {\n                    delete dialogs[id];\n                    if (options.onClose) {\n                        options.onClose();\n                    }\n                    bus.trigger(\"UPDATE\");\n                }\n            }\n\n            const dialog = {\n                id,\n                class: dialogClass,\n                props: { ...props, close },\n            };\n            dialogs[id] = dialog;\n            bus.trigger(\"UPDATE\");\n\n            return close;\n        }\n\n        return { add };\n    },\n};\n\nregistry.category(\"services\").add(\"dialog\", dialogService);\n", "/** @odoo-module **/\n\nimport { evaluate, formatAST, parseExpr } from \"./py_js/py\";\nimport { toPyValue } from \"./py_js/py_utils\";\n\n/**\n * @typedef {import(\"./py_js/py_parser\").AST} AST\n * @typedef {[string, string, any]} Condition\n * @typedef {(\"&\" | \"|\" | \"!\" | Condition)[]} DomainListRepr\n * @typedef {DomainListRepr | string | Domain} DomainRepr\n */\n\nclass InvalidDomainError extends Error {}\n\n/**\n * Javascript representation of an Odoo domain\n */\nexport class Domain {\n    /**\n     * Combine various domains together with a given operator\n     * @param {DomainRepr[]} domains\n     * @param {\"AND\" | \"OR\"} operator\n     * @returns {Domain}\n     */\n    static combine(domains, operator) {\n        if (domains.length === 0) {\n            return new Domain([]);\n        }\n        const domain1 = domains[0] instanceof Domain ? domains[0] : new Domain(domains[0]);\n        if (domains.length === 1) {\n            return domain1;\n        }\n        const domain2 = Domain.combine(domains.slice(1), operator);\n        const result = new Domain([]);\n        const astValues1 = domain1.ast.value;\n        const astValues2 = domain2.ast.value;\n        const op = operator === \"AND\" ? \"&\" : \"|\";\n        const combinedAST = { type: 4 /* List */, value: astValues1.concat(astValues2) };\n        result.ast = normalizeDomainAST(combinedAST, op);\n        return result;\n    }\n\n    /**\n     * Combine various domains together with `AND` operator\n     * @param {DomainRepr} domains\n     * @returns {Domain}\n     */\n    static and(domains) {\n        return Domain.combine(domains, \"AND\");\n    }\n\n    /**\n     * Combine various domains together with `OR` operator\n     * @param {DomainRepr} domains\n     * @returns {Domain}\n     */\n    static or(domains) {\n        return Domain.combine(domains, \"OR\");\n    }\n\n    /**\n     * Return the negation of the domain\n     * @returns {Domain}\n     */\n    static not(domain) {\n        const result = new Domain(domain);\n        result.ast.value.unshift({ type: 1, value: \"!\" });\n        return result;\n    }\n\n    /**\n     * @param {DomainRepr} [descr]\n     */\n    constructor(descr = []) {\n        if (descr instanceof Domain) {\n            /** @type {AST} */\n            return new Domain(descr.toString());\n        } else {\n            const rawAST = typeof descr === \"string\" ? parseExpr(descr) : toAST(descr);\n            this.ast = normalizeDomainAST(rawAST);\n        }\n    }\n\n    /**\n     * Check if the set of records represented by a domain contains a record\n     *\n     * @param {Object} record\n     * @returns {boolean}\n     */\n    contains(record) {\n        const expr = evaluate(this.ast, record);\n        return matchDomain(record, expr);\n    }\n\n    /**\n     * @returns {string}\n     */\n    toString() {\n        return formatAST(this.ast);\n    }\n\n    /**\n     * @param {Object} context\n     * @returns {DomainListRepr}\n     */\n    toList(context) {\n        return evaluate(this.ast, context);\n    }\n}\n\nconst TRUE_LEAF = [1, \"=\", 1];\nconst FALSE_LEAF = [0, \"=\", 1];\nconst TRUE_DOMAIN = new Domain([TRUE_LEAF]);\nconst FALSE_DOMAIN = new Domain([FALSE_LEAF]);\n\nDomain.TRUE = TRUE_DOMAIN;\nDomain.FALSE = FALSE_DOMAIN;\n\n// -----------------------------------------------------------------------------\n// Helpers\n// -----------------------------------------------------------------------------\n\n/**\n * @param {DomainListRepr} domain\n * @returns {AST}\n */\nfunction toAST(domain) {\n    const elems = domain.map((elem) => {\n        switch (elem) {\n            case \"!\":\n            case \"&\":\n            case \"|\":\n                return { type: 1 /* String */, value: elem };\n            default:\n                return {\n                    type: 10 /* Tuple */,\n                    value: elem.map(toPyValue),\n                };\n        }\n    });\n    return { type: 4 /* List */, value: elems };\n}\n\n/**\n * Normalizes a domain\n *\n * @param {AST} domain\n * @param {'&' | '|'} [op]\n * @returns {AST}\n */\n\nfunction normalizeDomainAST(domain, op = \"&\") {\n    if (domain.type !== 4 /* List */) {\n        throw new InvalidDomainError(\"Invalid domain AST\");\n    }\n    if (domain.value.length === 0) {\n        return domain;\n    }\n    let expected = 1;\n    for (let child of domain.value) {\n        if (child.type === 1 /* String */ && (child.value === \"&\" || child.value === \"|\")) {\n            expected++;\n        } else if (child.type !== 1 /* String */ || child.value !== \"!\") {\n            expected--;\n        }\n    }\n    let values = domain.value.slice();\n    while (expected < 0) {\n        expected++;\n        values.unshift({ type: 1 /* String */, value: op });\n    }\n    if (expected > 0) {\n        throw new InvalidDomainError(\n            `invalid domain ${formatAST(domain)} (missing ${expected} segment(s))`\n        );\n    }\n    return { type: 4 /* List */, value: values };\n}\n\n/**\n * @param {Object} record\n * @param {Condition | boolean} condition\n * @returns {boolean}\n */\nfunction matchCondition(record, condition) {\n    if (typeof condition === \"boolean\") {\n        return condition;\n    }\n    const [field, operator, value] = condition;\n    const fieldValue = typeof field === \"number\" ? field : record[field];\n    switch (operator) {\n        case \"=?\":\n            if ([false, null].includes(value)) {\n                return true;\n            }\n        // eslint-disable-next-line no-fallthrough\n        case \"=\":\n        case \"==\":\n            return fieldValue === value;\n        case \"!=\":\n        case \"<>\":\n            return fieldValue !== value;\n        case \"<\":\n            return fieldValue < value;\n        case \"<=\":\n            return fieldValue <= value;\n        case \">\":\n            return fieldValue > value;\n        case \">=\":\n            return fieldValue >= value;\n        case \"in\": {\n            const val = Array.isArray(value) ? value : [value];\n            const fieldVal = Array.isArray(fieldValue) ? fieldValue : [fieldValue];\n            return fieldVal.some((fv) => val.includes(fv));\n        }\n        case \"not in\": {\n            const val = Array.isArray(value) ? value : [value];\n            const fieldVal = Array.isArray(fieldValue) ? fieldValue : [fieldValue];\n            return !fieldVal.some((fv) => val.includes(fv));\n        }\n        case \"like\":\n            if (fieldValue === false) {\n                return false;\n            }\n            return fieldValue.indexOf(value) >= 0;\n        case \"=like\":\n            if (fieldValue === false) {\n                return false;\n            }\n            return new RegExp(value.replace(/%/g, \".*\")).test(fieldValue);\n        case \"ilike\":\n            if (fieldValue === false) {\n                return false;\n            }\n            return fieldValue.toLowerCase().indexOf(value.toLowerCase()) >= 0;\n        case \"=ilike\":\n            if (fieldValue === false) {\n                return false;\n            }\n            return new RegExp(value.replace(/%/g, \".*\"), \"i\").test(fieldValue);\n    }\n    throw new InvalidDomainError(\"could not match domain\");\n}\n\n/**\n * @param {Object} record\n * @returns {Object}\n */\nfunction makeOperators(record) {\n    const match = matchCondition.bind(null, record);\n    return {\n        \"!\": (x) => !match(x),\n        \"&\": (a, b) => match(a) && match(b),\n        \"|\": (a, b) => match(a) || match(b),\n    };\n}\n\n/**\n *\n * @param {Object} record\n * @param {DomainListRepr} domain\n * @returns {boolean}\n */\nfunction matchDomain(record, domain) {\n    if (domain.length === 0) {\n        return true;\n    }\n    const operators = makeOperators(record);\n    const reversedDomain = Array.from(domain).reverse();\n    const condStack = [];\n    for (const item of reversedDomain) {\n        if (item in operators) {\n            const operator = operators[item];\n            const operands = condStack.splice(-operator.length);\n            condStack.push(operator(...operands));\n        } else {\n            condStack.push(item);\n        }\n    }\n    return matchCondition(record, condStack.pop());\n}\n", "/** @odoo-module **/\n\nimport { useBus, useEffect, useService } from \"@web/core/utils/hooks\";\nimport { usePosition } from \"../position/position_hook\";\nimport { useDropdownNavigation } from \"./dropdown_navigation_hook\";\nimport { ParentClosingMode } from \"./dropdown_item\";\nimport { localization } from \"../l10n/localization\";\n\nconst { Component, core, hooks, useState, QWeb } = owl;\nconst { EventBus } = core;\nconst { onWillStart, useExternalListener, useRef, useSubEnv } = hooks;\n\nconst DIRECTION_CARET_CLASS = {\n    bottom: \"dropdown\",\n    top: \"dropup\",\n    left: \"dropleft\",\n    right: \"dropright\",\n};\n\n/**\n * @typedef DropdownState\n * @property {boolean} open\n * @property {boolean} groupIsOpen\n */\n\n/**\n * @typedef DropdownStateChangedPayload\n * @property {Dropdown} emitter\n * @property {DropdownState} newState\n */\n\n/**\n * @extends Component\n */\nexport class Dropdown extends Component {\n    setup() {\n        this.state = useState({\n            open: this.props.startOpen,\n            groupIsOpen: this.props.startOpen,\n        });\n\n        // Set up beforeOpen ---------------------------------------------------\n        onWillStart(() => {\n            if (this.state.open && this.props.beforeOpen) {\n                return this.props.beforeOpen();\n            }\n        });\n\n        // Set up dynamic open/close behaviours --------------------------------\n        if (!this.props.manualOnly) {\n            // Close on outside click listener\n            useExternalListener(window, \"click\", this.onWindowClicked);\n            // Listen to all dropdowns state changes\n            useBus(Dropdown.bus, \"state-changed\", this.onDropdownStateChanged);\n        }\n\n        // Set up UI active element related behavior ---------------------------\n        this.ui = useService(\"ui\");\n        useEffect(\n            () => {\n                Promise.resolve().then(() => {\n                    this.myActiveEl = this.ui.activeElement;\n                });\n            },\n            () => []\n        );\n\n        // Set up nested dropdowns ---------------------------------------------\n        this.hasParentDropdown = this.env.inDropdown;\n        useSubEnv({ inDropdown: true });\n\n        // Set up key navigation -----------------------------------------------\n        useDropdownNavigation();\n\n        // Set up toggler and positioning --------------------------------------\n        /** @type {string} **/\n        let position =\n            this.props.position || (this.hasParentDropdown ? \"right-start\" : \"bottom-start\");\n        let [direction, variant = \"middle\"] = position.split(\"-\");\n        if (localization.direction === \"rtl\") {\n            if ([\"bottom\", \"top\"].includes(direction)) {\n                variant = variant === \"start\" ? \"end\" : \"start\";\n            } else {\n                direction = direction === \"left\" ? \"right\" : \"left\";\n            }\n            position = [direction, variant].join(\"-\");\n        }\n        const positioningOptions = {\n            popper: \"menuRef\",\n            position,\n        };\n        this.directionCaretClass = DIRECTION_CARET_CLASS[direction];\n        this.togglerRef = useRef(\"togglerRef\");\n        if (this.props.toggler === \"parent\") {\n            // Add parent click listener to handle toggling\n            useEffect(\n                () => {\n                    const onClick = (ev) => {\n                        if (this.el.contains(ev.target)) {\n                            // ignore clicks inside the dropdown\n                            return;\n                        }\n                        this.toggle();\n                    };\n                    if (this.el.parentElement.tabIndex === -1) {\n                        // If the parent is not focusable, make it focusable programmatically.\n                        // This code may look weird, but an element with a negative tabIndex is\n                        // focusable programmatically ONLY if its tabIndex is explicitly set.\n                        this.el.parentElement.tabIndex = -1;\n                    }\n                    this.el.parentElement.addEventListener(\"click\", onClick);\n                    return () => {\n                        this.el.parentElement.removeEventListener(\"click\", onClick);\n                    };\n                },\n                () => []\n            );\n\n            useEffect(\n                (open) => {\n                    this.el.parentElement.ariaExpanded = open ? \"true\" : \"false\";\n                },\n                () => [this.state.open]\n            );\n\n            // Position menu relatively to parent element\n            usePosition(() => this.el.parentElement, positioningOptions);\n        } else {\n            // Position menu relatively to inner toggler\n            const togglerRef = useRef(\"togglerRef\");\n            usePosition(() => togglerRef.el, positioningOptions);\n        }\n    }\n\n    // -------------------------------------------------------------------------\n    // Private\n    // -------------------------------------------------------------------------\n\n    /**\n     * Changes the dropdown state and notifies over the Dropdown bus.\n     *\n     * All state changes must trigger on the bus, except when reacting to\n     * another dropdown state change.\n     *\n     * @see onDropdownStateChanged()\n     *\n     * @param {Partial<DropdownState>} stateSlice\n     */\n    async changeStateAndNotify(stateSlice) {\n        if (stateSlice.open && this.props.beforeOpen) {\n            await this.props.beforeOpen();\n        }\n        // Update the state\n        Object.assign(this.state, stateSlice);\n        // Notify over the bus\n        /** @type DropdownStateChangedPayload */\n        const stateChangedPayload = {\n            emitter: this,\n            newState: { ...this.state },\n        };\n        Dropdown.bus.trigger(\"state-changed\", stateChangedPayload);\n    }\n\n    /**\n     * Closes the dropdown.\n     *\n     * @returns {Promise<void>}\n     */\n    close() {\n        return this.changeStateAndNotify({ open: false, groupIsOpen: false });\n    }\n\n    /**\n     * Opens the dropdown.\n     *\n     * @returns {Promise<void>}\n     */\n    open() {\n        return this.changeStateAndNotify({ open: true, groupIsOpen: true });\n    }\n\n    /**\n     * Toggles the dropdown open state.\n     *\n     * @returns {Promise<void>}\n     */\n    toggle() {\n        const toggled = !this.state.open;\n        return this.changeStateAndNotify({ open: toggled, groupIsOpen: toggled });\n    }\n\n    // -------------------------------------------------------------------------\n    // Handlers\n    // -------------------------------------------------------------------------\n\n    /**\n     * Checks if should close on dropdown item selection.\n     *\n     * @param {CustomEvent<import(\"./dropdown_item\").DropdownItemSelectedEventDetail>} ev\n     */\n    onItemSelected(ev) {\n        // Handle parent closing request\n        const { dropdownClosingRequest } = ev.detail;\n        const closeAll = dropdownClosingRequest.mode === ParentClosingMode.AllParents;\n        const closeSelf =\n            dropdownClosingRequest.isFresh &&\n            dropdownClosingRequest.mode === ParentClosingMode.ClosestParent;\n        if (!this.props.manualOnly && (closeAll || closeSelf)) {\n            this.close();\n        }\n        // Mark closing request as started\n        ev.detail.dropdownClosingRequest.isFresh = false;\n    }\n\n    /**\n     * Dropdowns react to each other state changes through this method.\n     *\n     * All state changes must trigger on the bus, except when reacting to\n     * another dropdown state change.\n     *\n     * @see changeStateAndNotify()\n     *\n     * @param {DropdownStateChangedPayload} args\n     */\n    onDropdownStateChanged(args) {\n        if (this.el.contains(args.emitter.el)) {\n            // Do not listen to events emitted by self or children\n            return;\n        }\n\n        // Emitted by direct siblings ?\n        if (args.emitter.el.parentElement === this.el.parentElement) {\n            // Sync the group status\n            this.state.groupIsOpen = args.newState.groupIsOpen;\n\n            // Another dropdown is now open ? Close myself without notifying siblings.\n            if (this.state.open && args.newState.open) {\n                this.state.open = false;\n            }\n        } else {\n            // Another dropdown is now open ? Close myself and notify the world (i.e. siblings).\n            if (this.state.open && args.newState.open) {\n                this.close();\n            }\n        }\n    }\n\n    /**\n     * Toggles the dropdown on its toggler click.\n     */\n    onTogglerClick() {\n        this.toggle();\n    }\n\n    /**\n     * Opens the dropdown the mouse enters its toggler.\n     * NB: only if its siblings dropdown group is opened and if not a sub dropdown.\n     */\n    onTogglerMouseEnter() {\n        if (this.state.groupIsOpen && !this.state.open) {\n            this.togglerRef.el.focus();\n            this.open();\n        }\n    }\n\n    /**\n     * Used to close ourself on outside click.\n     *\n     * @param {MouseEvent} ev\n     */\n    onWindowClicked(ev) {\n        // Return if already closed\n        if (!this.state.open) {\n            return;\n        }\n        // Return if it's a different ui active element\n        if (this.ui.activeElement !== this.myActiveEl) {\n            return;\n        }\n        // Close if we clicked outside the dropdown, or outside the parent\n        // element if it is the toggler\n        const rootEl = this.props.toggler === \"parent\" ? this.el.parentElement : this.el;\n        const gotClickedInside = rootEl.contains(ev.target);\n        if (!gotClickedInside) {\n            this.close();\n        }\n    }\n}\nDropdown.bus = new EventBus();\nDropdown.props = {\n    toggler: {\n        type: String,\n        optional: true,\n        validate: (prop) => [\"parent\"].includes(prop),\n    },\n    startOpen: {\n        type: Boolean,\n        optional: true,\n    },\n    manualOnly: {\n        type: Boolean,\n        optional: true,\n    },\n    menuClass: {\n        type: String,\n        optional: true,\n    },\n    beforeOpen: {\n        type: Function,\n        optional: true,\n    },\n    togglerClass: {\n        type: String,\n        optional: true,\n    },\n    hotkey: {\n        type: String,\n        optional: true,\n    },\n    title: {\n        type: String,\n        optional: true,\n    },\n    position: {\n        type: String,\n        optional: true,\n    },\n};\nDropdown.template = \"web.Dropdown\";\n\nQWeb.registerComponent(\"Dropdown\", Dropdown);\n", "/** @odoo-module **/\n\nconst { Component, QWeb } = owl;\n\n/**\n * @enum {string}\n */\nexport const ParentClosingMode = {\n    None: \"none\",\n    ClosestParent: \"closest\",\n    AllParents: \"all\",\n};\n\n/**\n * @typedef DropdownItemSelectedEventDetail\n * @property {*} payload\n * @property {Object} dropdownClosingRequest\n * @property {boolean} dropdownClosingRequest.isFresh\n * @property {ParentClosingMode} dropdownClosingRequest.mode\n *\n * @typedef {CustomEvent<DropdownItemSelectedEventDetail>} DropdownItemSelectedEvent\n */\n\n/**\n * @extends Component\n */\nexport class DropdownItem extends Component {\n    /**\n     * Triggers a custom DropdownItemSelectedEvent\n     * @param {MouseEvent} ev\n     */\n    onClick(ev) {\n        if (this.props.href){\n            ev.preventDefault();\n        }\n\n        /** @type DropdownItemSelectedEventDetail */\n        const detail = {\n            payload: this.props.payload,\n            dropdownClosingRequest: {\n                isFresh: true,\n                mode: this.props.parentClosingMode,\n            },\n        };\n        this.trigger(\"dropdown-item-selected\", detail);\n    }\n}\nDropdownItem.template = \"web.DropdownItem\";\nDropdownItem.props = {\n    payload: {\n        type: Object,\n        optional: true,\n    },\n    parentClosingMode: {\n        type: ParentClosingMode,\n        optional: true,\n    },\n    hotkey: {\n        type: String,\n        optional: true,\n    },\n    href: {\n        type: String,\n        optional: true,\n    },\n    title: {\n        type: String,\n        optional: true,\n    },\n};\nDropdownItem.defaultProps = {\n    parentClosingMode: ParentClosingMode.AllParents,\n};\n\nQWeb.registerComponent(\"DropdownItem\", DropdownItem);\n", "/** @odoo-module */\n\nimport { useEffect, useService } from \"@web/core/utils/hooks\";\nimport { browser } from \"../browser/browser\";\nimport { localization } from \"@web/core/l10n/localization\";\nimport { scrollTo } from \"../utils/scrolling\";\n\n/**\n * @typedef {{\n *  el: HTMLElement,\n *  isActive: boolean,\n *  makeOnlyActive: ()=>void,\n *  navTarget: HTMLElement,\n *  isSubDropdown: boolean,\n *  isSubDropdownOpen: boolean,\n *  closeSubDropdown: ()=>void,\n *  openSubDropdown: (immediate?:boolean)=>void,\n * }} MenuElement\n */\n\nconst { hooks } = owl;\nconst { useComponent, useRef } = hooks;\n\nconst ACTIVE_MENU_ELEMENT_CLASS = \"focus\";\nconst MENU_ELEMENTS_SELECTORS = [\":scope > .dropdown-item\", \":scope > .dropdown\"];\nconst NEXT_ACTIVE_INDEX_FNS = {\n    FIRST: () => 0,\n    LAST: (list) => list.length - 1,\n    NEXT: (list, prevActiveIndex) => (prevActiveIndex + 1) % list.length,\n    PREV: (list, prevActiveIndex) => (prevActiveIndex <= 0 ? list.length : prevActiveIndex) - 1,\n};\n\nexport function useDropdownNavigation() {\n    /** @type {import(\"./dropdown\").Dropdown} */\n    const comp = useComponent();\n\n    // As this navigation hook relies on clicking \".dropdown-toggle\" elements,\n    // it is incompatible with a toggler=\"parent\" strategy for subdropdowns.\n    if (comp.hasParentDropdown && comp.props.toggler === \"parent\") {\n        throw new Error(\"A nested Dropdown must use its standard toggler\");\n    }\n\n    // Needed to avoid unwanted mouseclick behavior on a subdropdown toggler.\n    const originalOnTogglerClick = comp.onTogglerClick.bind(comp);\n    comp.onTogglerClick = (ev) => {\n        if (comp.hasParentDropdown && !ev.__fromDropdownNavigation) {\n            return;\n        }\n        originalOnTogglerClick();\n    };\n\n    // Needed to avoid unwanted mouseenter behavior on a subdropdown toggler.\n    const originalOnTogglerMouseEnter = comp.onTogglerMouseEnter.bind(comp);\n    comp.onTogglerMouseEnter = () => {\n        if (comp.hasParentDropdown) {\n            return;\n        }\n        originalOnTogglerMouseEnter();\n    };\n\n    // Needed to avoid unwanted selection when the mouse pointer is not in use\n    // but still somewhere in the middle of the dropdown menu list.\n    let mouseSelectionActive = true;\n\n    // Set up menu elements logic ----------------------------------------------\n    const menuRef = useRef(\"menuRef\");\n    /** @type {MenuElement[]} */\n    let menuElements = [];\n    useEffect(() => {\n        if (!comp.state.open) {\n            return;\n        }\n        // Prepare MenuElements\n        const addedListeners = [];\n        /** @type {NodeListOf<HTMLElement>} */\n        const queryResult = menuRef.el.querySelectorAll(MENU_ELEMENTS_SELECTORS.join());\n        for (const el of queryResult) {\n            const isSubDropdown = el.classList.contains(\"dropdown\");\n            const isSubDropdownOpen = () => el.classList.contains(\"show\");\n            const navTarget = isSubDropdown ? el.querySelector(\":scope > .dropdown-toggle\") : el;\n            let subDropdownTimeout;\n            const closeSubDropdown = () => {\n                browser.clearTimeout(subDropdownTimeout);\n                subDropdownTimeout = browser.setTimeout(() => {\n                    if (isSubDropdownOpen()) {\n                        const ev = new MouseEvent(\"click\", { bubbles: false });\n                        ev.__fromDropdownNavigation = true;\n                        navTarget.dispatchEvent(ev);\n                    }\n                }, 200);\n            };\n            const openSubDropdown = (immediate = false) => {\n                browser.clearTimeout(subDropdownTimeout);\n                subDropdownTimeout = browser.setTimeout(\n                    () => {\n                        if (!isSubDropdownOpen()) {\n                            const ev = new MouseEvent(\"click\", { bubbles: false });\n                            ev.__fromDropdownNavigation = true;\n                            navTarget.dispatchEvent(ev);\n                        }\n                    },\n                    immediate ? 0 : 200\n                );\n            };\n            const makeOnlyActive = () => {\n                // Make all others inactive\n                for (const menuElement of menuElements) {\n                    if (menuElement.el === el) {\n                        continue;\n                    }\n                    menuElement.navTarget.classList.remove(ACTIVE_MENU_ELEMENT_CLASS);\n                    if (menuElement.isSubDropdown) {\n                        menuElement.closeSubDropdown();\n                    }\n                }\n                // Make myself active\n                navTarget.classList.add(ACTIVE_MENU_ELEMENT_CLASS);\n                navTarget.focus();\n            };\n\n            /** @type {MenuElement} */\n            const menuElement = {\n                el,\n                get isActive() {\n                    return navTarget.classList.contains(ACTIVE_MENU_ELEMENT_CLASS);\n                },\n                makeOnlyActive,\n                navTarget,\n                get isSubDropdownOpen() {\n                    return isSubDropdownOpen();\n                },\n                isSubDropdown,\n                closeSubDropdown,\n                openSubDropdown,\n            };\n            menuElements.push(menuElement);\n\n            // Set up selection listeners\n            const elementListeners = {\n                mouseenter: () => {\n                    if (!mouseSelectionActive) {\n                        mouseSelectionActive = true;\n                    } else {\n                        makeOnlyActive();\n                        if (isSubDropdown) {\n                            openSubDropdown();\n                        }\n                    }\n                },\n            };\n            for (const [eventType, listener] of Object.entries(elementListeners)) {\n                navTarget.addEventListener(eventType, listener);\n            }\n            addedListeners.push([navTarget, elementListeners]);\n        }\n        return () => {\n            menuElements = [];\n            mouseSelectionActive = true;\n\n            // Clear mouse selection listeners\n            for (const [navTarget, listeners] of addedListeners) {\n                for (const [eventType, listener] of Object.entries(listeners)) {\n                    navTarget.removeEventListener(eventType, listener);\n                }\n            }\n        };\n    });\n\n    // Set up active menu element helpers --------------------------------------\n    /**\n     * @returns {MenuElement|undefined}\n     */\n    const getActiveMenuElement = () => {\n        return menuElements.find((menuElement) => menuElement.isActive);\n    };\n\n    /**\n     * @param {MenuElement|keyof NEXT_ACTIVE_INDEX_FNS} menuElement\n     */\n    const setActiveMenuElement = (menuElement) => {\n        if (menuElements.length) {\n            if (typeof menuElement === \"string\") {\n                const prevIndex = menuElements.indexOf(getActiveMenuElement());\n                const nextIndex = NEXT_ACTIVE_INDEX_FNS[menuElement](menuElements, prevIndex);\n                menuElement = menuElements[nextIndex];\n            }\n            menuElement.makeOnlyActive();\n            scrollTo(menuElement.el, { scrollable: menuElement.el.parentElement });\n        }\n    };\n\n    // Set up nested dropdowns - active first menu element behavior ------------\n    useEffect(\n        (open) => {\n            // If we just opened and we are a subdropdown, make active our first menu element.\n            if (open && comp.hasParentDropdown) {\n                setActiveMenuElement(\"FIRST\");\n            }\n        },\n        () => [comp.state.open]\n    );\n\n    // Set up keyboard navigation ----------------------------------------------\n    const hotkeyService = useService(\"hotkey\");\n    const closeAndRefocus = () => {\n        const toFocus =\n            comp.props.toggler === \"parent\"\n                ? comp.el.parentElement\n                : comp.el.querySelector(\":scope > .dropdown-toggle\");\n        comp.close().then(() => {\n            toFocus.focus();\n        });\n    };\n    const closeSubDropdown = comp.hasParentDropdown ? closeAndRefocus : () => {};\n    const openSubDropdown = () => {\n        const menuElement = getActiveMenuElement();\n        // Active menu element is a sub dropdown\n        if (menuElement && menuElement.isSubDropdown) {\n            menuElement.openSubDropdown(true);\n        }\n    };\n    const selectActiveMenuElement = () => {\n        const menuElement = getActiveMenuElement();\n        if (menuElement) {\n            if (menuElement.isSubDropdown) {\n                menuElement.openSubDropdown(true);\n            } else {\n                menuElement.navTarget.click();\n            }\n        }\n    };\n    let hotkeyRemoves = [];\n    const hotkeyCallbacks = {\n        home: () => setActiveMenuElement(\"FIRST\"),\n        end: () => setActiveMenuElement(\"LAST\"),\n        tab: () => setActiveMenuElement(\"NEXT\"),\n        \"shift+tab\": () => setActiveMenuElement(\"PREV\"),\n        arrowdown: () => setActiveMenuElement(\"NEXT\"),\n        arrowup: () => setActiveMenuElement(\"PREV\"),\n        arrowleft: localization.direction === \"rtl\" ? openSubDropdown : closeSubDropdown,\n        arrowright: localization.direction === \"rtl\" ? closeSubDropdown : openSubDropdown,\n        enter: selectActiveMenuElement,\n        escape: closeAndRefocus,\n    };\n    useEffect(\n        (open) => {\n            if (!open) {\n                return;\n            }\n            // Subscribe keynav\n            for (const [hotkey, callback] of Object.entries(hotkeyCallbacks)) {\n                const callbackWrapper = () => {\n                    const hasOpenedSubDropdown = menuElements.some((m) => m.isSubDropdownOpen);\n                    // Leave priority to last opened sub dropdown\n                    if (!hasOpenedSubDropdown) {\n                        mouseSelectionActive = false;\n                        callback.call(comp);\n                    }\n                };\n                hotkeyRemoves.push(\n                    hotkeyService.add(hotkey, callbackWrapper, { allowRepeat: true })\n                );\n            }\n            return () => {\n                // Unsubscribe keynav\n                for (const removeHotkey of hotkeyRemoves) {\n                    removeHotkey();\n                }\n                hotkeyRemoves = [];\n            };\n        },\n        () => [comp.state.open]\n    );\n}\n", "/** @odoo-module **/\n\nconst { Component, tags } = owl;\n\nexport class EffectContainer extends Component {\n    setup() {\n        this.effect = null;\n        this.props.bus.on(\"UPDATE\", this, (effect) => {\n            this.effect = effect;\n            this.render();\n        });\n    }\n    removeEffect() {\n        this.effect = null;\n        this.render();\n    }\n}\n\nEffectContainer.template = tags.xml`\n  <div class=\"o_effects_manager\">\n    <t t-if=\"effect\">\n        <t t-component=\"effect.Component\" t-props=\"effect.props\" t-key=\"effect.id\" close=\"() => removeEffect()\"/>\n    </t>\n  </div>`;\n", "/** @odoo-module **/\n\nimport { registry } from \"../registry\";\nimport { EffectContainer } from \"./effect_container\";\nimport { RainbowMan } from \"./rainbow_man\";\n\nconst { EventBus } = owl.core;\n\nconst effectRegistry = registry.category(\"effects\");\n\n// -----------------------------------------------------------------------------\n// RainbowMan effect\n// -----------------------------------------------------------------------------\n\n/**\n * Handles effect of type \"rainbow_man\". If the effects aren't disabled, returns\n * the RainbowMan component to instantiate and its props. If the effects are\n * disabled, displays the message in a notification.\n *\n * @param {Object} env\n * @param {Object} [params={}]\n * @param {string} [params.message=\"Well Done\"]\n *    The message in the notice the rainbowman holds or the content of the notification if effects are disabled\n *    Can be a simple a string\n *    Can be a string representation of html (prefer component if you want interactions in the DOM)\n * @param {boolean} [params.img_url=\"/web/static/img/smile.svg\"]\n *    The url of the image to display inside the rainbow\n * @param {boolean} [params.messageIsHtml]\n *    Set to true if the message encodes html, s.t. it will be correctly inserted into the DOM.\n * @param {\"slow\"|\"medium\"|\"fast\"|\"no\"} [params.fadeout=\"medium\"]\n *    Delay for rainbowman to disappear\n *    'fast' will make rainbowman dissapear quickly\n *    'medium' and 'slow' will wait little longer before disappearing (can be used when options.message is longer)\n *    'no' will keep rainbowman on screen until user clicks anywhere outside rainbowman\n * @param {owl.Component} [params.Component=RainbowMan]\n *    Component class to instantiate (if effects aren't disabled)\n * @param {Object} [params.props]\n *    If params.Component is given, its props can be passed with this argument\n */\nfunction rainbowMan(env, params = {}) {\n    let message = params.message;\n    if (message instanceof jQuery) {\n        console.log(\n            \"Providing a jQuery element to an effect is deprecated. Note that all event handlers will be lost.\"\n        );\n        message = message.html();\n    } else if (message instanceof Element) {\n        console.log(\n            \"Providing an HTML element to an effect is deprecated. Note that all event handlers will be lost.\"\n        );\n        message = message.outerHTML;\n    } else if (!message) {\n        message = env._t(\"well Done!\");\n    }\n    if (env.services.user.showEffect) {\n        return {\n            Component: params.Component || RainbowMan,\n            props: {\n                imgUrl: params.img_url || \"/web/static/img/smile.svg\",\n                fadeout: params.fadeout,\n                message,\n                messageIsHtml: params.messageIsHtml || false,\n                ...params.props,\n            },\n        };\n    }\n    env.services.notification.add(message);\n}\neffectRegistry.add(\"rainbow_man\", rainbowMan);\n\n// -----------------------------------------------------------------------------\n// Effect service\n// -----------------------------------------------------------------------------\n\nexport const effectService = {\n    start(env) {\n        const bus = new EventBus();\n        registry.category(\"main_components\").add(\"EffectContainer\", {\n            Component: EffectContainer,\n            props: { bus },\n        });\n        let effectId = 0;\n\n        /**\n         * @param {Object} params various params depending on the type of effect\n         * @param {string} [params.type=\"rainbow_man\"] the effect to display\n         */\n        function add(params) {\n            const type = params.type || \"rainbow_man\";\n            const effect = effectRegistry.get(type);\n            const { Component, props } = effect(env, params) || {};\n            if (Component) {\n                bus.trigger(\"UPDATE\", { Component, props, id: effectId++ });\n            }\n        }\n\n        return { add };\n    },\n};\n\nregistry.category(\"services\").add(\"effect\", effectService);\n", "/** @odoo-module **/\n\nimport { browser } from \"@web/core/browser/browser\";\nimport { useEffect } from \"@web/core/utils/hooks\";\n\nconst { Component, hooks } = owl;\n\n/**\n * The RainbowMan widget is the widget displayed by default as a 'fun/rewarding'\n * effect in some cases.  For example, when the user marked a large deal as won,\n * or when he cleared its inbox.\n *\n * This widget is mostly a picture and a message with a rainbow animation around\n * If you want to display a RainbowMan, you probably do not want to do it by\n * importing this file.  The usual way to do that would be to use the effect\n * service (by triggering the 'show_effect' event)\n */\nexport class RainbowMan extends Component {\n    /**\n     * @override\n     * @constructor\n     * @param {Object} [options]\n     * @param {string} [options.message] Message to be displayed on rainbowman card\n     * @param {string} [options.fadeout='medium'] Delay for rainbowman to disappear. 'fast' will make rainbowman dissapear quickly, 'medium' and 'slow' will wait little longer before disappearing (can be used when options.message is longer), 'no' will keep rainbowman on screen until user clicks anywhere outside rainbowman\n     * @param {string} [options.img_url] URL of the image to be displayed\n     */\n    setup() {\n        hooks.useExternalListener(document.body, \"click\", this.closeRainbowMan);\n        const fadeout = \"fadeout\" in this.props ? this.props.fadeout : \"medium\";\n        const delay = fadeout ? RainbowMan.rainbowFadeouts[fadeout] : false;\n        this.delay = typeof delay === \"number\" ? delay : false;\n        if (this.delay !== false) {\n            useEffect(\n                () => {\n                    const timeout = browser.setTimeout(() => {\n                        this.el.classList.add(\"o_reward_fading\");\n                    }, this.delay);\n                    return () => browser.clearTimeout(timeout);\n                },\n                () => []\n            );\n        }\n    }\n\n    onAnimationEnd(ev) {\n        if (this.delay !== false && ev.animationName === \"reward-fading-reverse\") {\n            ev.stopPropagation();\n            this.closeRainbowMan();\n        }\n    }\n\n    closeRainbowMan() {\n        this.props.close();\n    }\n}\nRainbowMan.template = \"web.RainbowMan\";\nRainbowMan.rainbowFadeouts = { slow: 4500, medium: 3500, fast: 2000, no: false };\n", "/** @odoo-module **/\n\nimport { browser } from \"../browser/browser\";\nimport { Dialog } from \"../dialog/dialog\";\nimport { _lt } from \"../l10n/translation\";\nimport { registry } from \"../registry\";\nimport { useService } from \"@web/core/utils/hooks\";\nimport { capitalize } from \"../utils/strings\";\n\nconst { hooks } = owl;\nconst { useState } = hooks;\n\nexport const odooExceptionTitleMap = new Map(\n    Object.entries({\n        \"odoo.addons.base.models.ir_mail_server.MailDeliveryException\": _lt(\n            \"MailDeliveryException\"\n        ),\n        \"odoo.exceptions.AccessDenied\": _lt(\"Access Denied\"),\n        \"odoo.exceptions.MissingError\": _lt(\"Missing Record\"),\n        \"odoo.exceptions.UserError\": _lt(\"User Error\"),\n        \"odoo.exceptions.ValidationError\": _lt(\"Validation Error\"),\n        \"odoo.exceptions.AccessError\": _lt(\"Access Error\"),\n        \"odoo.exceptions.Warning\": _lt(\"Warning\"),\n    })\n);\n\n// -----------------------------------------------------------------------------\n// Generic Error Dialog\n// -----------------------------------------------------------------------------\nexport class ErrorDialog extends Dialog {\n    setup() {\n        super.setup();\n        this.state = useState({\n            showTraceback: false,\n        });\n    }\n    onClickClipboard() {\n        browser.navigator.clipboard.writeText(\n            `${this.props.name}\\n${this.props.message}\\n${this.props.traceback}`\n        );\n    }\n}\nErrorDialog.contentClass = \"o_dialog_error\";\nErrorDialog.bodyTemplate = \"web.ErrorDialogBody\";\nErrorDialog.title = _lt(\"Odoo Error\");\n\n// -----------------------------------------------------------------------------\n// Client Error Dialog\n// -----------------------------------------------------------------------------\nexport class ClientErrorDialog extends ErrorDialog {}\nClientErrorDialog.title = _lt(\"Odoo Client Error\");\n\n// -----------------------------------------------------------------------------\n// Network Error Dialog\n// -----------------------------------------------------------------------------\nexport class NetworkErrorDialog extends ErrorDialog {}\nNetworkErrorDialog.title = _lt(\"Odoo Network Error\");\n\n// -----------------------------------------------------------------------------\n// RPC Error Dialog\n// -----------------------------------------------------------------------------\nexport class RPCErrorDialog extends ErrorDialog {\n    setup() {\n        super.setup();\n        this.inferTitle();\n        this.traceback = this.props.traceback;\n        if (this.props.data && this.props.data.debug) {\n            this.traceback = `${this.props.data.debug}`;\n        }\n    }\n    inferTitle() {\n        // If the server provides an exception name that we have in a registry.\n        if (this.props.exceptionName && odooExceptionTitleMap.has(this.props.exceptionName)) {\n            this.title = odooExceptionTitleMap.get(this.props.exceptionName).toString();\n            return;\n        }\n        // Fall back to a name based on the error type.\n        if (!this.props.type) return;\n        switch (this.props.type) {\n            case \"server\":\n                this.title = this.env._t(\"Odoo Server Error\");\n                break;\n            case \"script\":\n                this.title = this.env._t(\"Odoo Client Error\");\n                break;\n            case \"network\":\n                this.title = this.env._t(\"Odoo Network Error\");\n                break;\n        }\n    }\n\n    onClickClipboard() {\n        browser.navigator.clipboard.writeText(\n            `${this.props.name}\\n${this.props.message}\\n${this.traceback}`\n        );\n    }\n}\n\n// -----------------------------------------------------------------------------\n// Warning Dialog\n// -----------------------------------------------------------------------------\nexport class WarningDialog extends Dialog {\n    setup() {\n        super.setup();\n        this.title = this.env._t(\"Odoo Warning\");\n        this.inferTitle();\n        const { data, message } = this.props;\n        if (data && data.arguments && data.arguments.length > 0) {\n            this.message = data.arguments[0];\n        } else {\n            this.message = message;\n        }\n    }\n    inferTitle() {\n        if (this.props.exceptionName && odooExceptionTitleMap.has(this.props.exceptionName)) {\n            this.title = odooExceptionTitleMap.get(this.props.exceptionName).toString();\n        }\n    }\n}\nWarningDialog.bodyTemplate = \"web.WarningDialogBody\";\n\n// -----------------------------------------------------------------------------\n// Redirect Warning Dialog\n// -----------------------------------------------------------------------------\nexport class RedirectWarningDialog extends Dialog {\n    setup() {\n        super.setup();\n        this.actionService = useService(\"action\");\n        const { data, subType } = this.props;\n        const [message, actionId, buttonText, additional_context] = data.arguments;\n        this.title = capitalize(subType) || this.env._t(\"Odoo Warning\");\n        this.message = message;\n        this.actionId = actionId;\n        this.buttonText = buttonText;\n        this.additionalContext = additional_context;\n    }\n    async onClick() {\n        const options = {};\n        if (this.additionalContext) {\n            options.additionalContext = this.additionalContext;\n        }\n        await this.actionService.doAction(this.actionId, options);\n        this.close();\n    }\n    onCancel() {\n        this.close();\n    }\n}\nRedirectWarningDialog.bodyTemplate = \"web.RedirectWarningDialogBody\";\nRedirectWarningDialog.footerTemplate = \"web.RedirectWarningDialogFooter\";\n\n// -----------------------------------------------------------------------------\n// Error 504 Dialog\n// -----------------------------------------------------------------------------\nexport class Error504Dialog extends Dialog {}\nError504Dialog.bodyTemplate = \"web.Error504DialogBody\";\nError504Dialog.title = _lt(\"Request timeout\");\n\n// -----------------------------------------------------------------------------\n// Expired Session Error Dialog\n// -----------------------------------------------------------------------------\nexport class SessionExpiredDialog extends Dialog {\n    onClick() {\n        browser.location.reload();\n    }\n}\nSessionExpiredDialog.bodyTemplate = \"web.SessionExpiredDialogBody\";\nSessionExpiredDialog.footerTemplate = \"web.SessionExpiredDialogFooter\";\nSessionExpiredDialog.title = _lt(\"Odoo Session Expired\");\n\nregistry\n    .category(\"error_dialogs\")\n    .add(\"odoo.exceptions.AccessDenied\", WarningDialog)\n    .add(\"odoo.exceptions.AccessError\", WarningDialog)\n    .add(\"odoo.exceptions.MissingError\", WarningDialog)\n    .add(\"odoo.exceptions.UserError\", WarningDialog)\n    .add(\"odoo.exceptions.ValidationError\", WarningDialog)\n    .add(\"odoo.exceptions.RedirectWarning\", RedirectWarningDialog)\n    .add(\"odoo.http.SessionExpiredException\", SessionExpiredDialog)\n    .add(\"werkzeug.exceptions.Forbidden\", SessionExpiredDialog)\n    .add(\"504\", Error504Dialog);\n", "/** @odoo-module **/\n\nimport { browser } from \"../browser/browser\";\nimport { isIOS } from \"../browser/feature_detection\";\nimport { session } from \"../../session\";\nimport { ConnectionLostError, RPCError } from \"../network/rpc_service\";\nimport { registry } from \"../registry\";\nimport {\n    ClientErrorDialog,\n    ErrorDialog,\n    NetworkErrorDialog,\n    RPCErrorDialog,\n} from \"./error_dialogs\";\nimport { UncaughtClientError, UncaughtCorsError, UncaughtPromiseError } from \"./error_service\";\n\n/**\n * @typedef {import(\"../../env\").OdooEnv} OdooEnv\n * @typedef {import(\"./error_service\").UncaughtError} UncaughError\n */\n\nconst errorHandlerRegistry = registry.category(\"error_handlers\");\nconst errorDialogRegistry = registry.category(\"error_dialogs\");\nconst errorNotificationRegistry = registry.category(\"error_notifications\");\n\n// -----------------------------------------------------------------------------\n// CORS errors\n// -----------------------------------------------------------------------------\n\n/**\n * @param {OdooEnv} env\n * @param {UncaughError} error\n * @returns {boolean}\n */\nfunction corsErrorHandler(env, error) {\n    if (error instanceof UncaughtCorsError) {\n        // In Safari 16.4+ (as of Jun 14th 2023), an error occurs\n        // when going back and forward through the browser when the\n        // cache is enabled. A feedback has been reported but in the\n        // meantime, hide any script error in these versions.\n        if (isIOS() && session.is_frontend && odoo.debug !== \"assets\") {\n            return true;\n        }\n        env.services.dialog.add(NetworkErrorDialog, {\n            traceback: error.traceback,\n            message: error.message,\n            name: error.name,\n        });\n        return true;\n    }\n}\nerrorHandlerRegistry.add(\"corsErrorHandler\", corsErrorHandler, { sequence: 95 });\n\n// -----------------------------------------------------------------------------\n// Client errors\n// -----------------------------------------------------------------------------\n\n/**\n * @param {OdooEnv} env\n * @param {UncaughError} error\n * @returns {boolean}\n */\nfunction clientErrorHandler(env, error) {\n    if (error instanceof UncaughtClientError) {\n        env.services.dialog.add(ClientErrorDialog, {\n            traceback: error.traceback,\n            message: error.message,\n            name: error.name,\n        });\n        return true;\n    }\n}\nerrorHandlerRegistry.add(\"clientErrorHandler\", clientErrorHandler, { sequence: 96 });\n\n// -----------------------------------------------------------------------------\n// RPC errors\n// -----------------------------------------------------------------------------\n\n/**\n * @param {OdooEnv} env\n * @param {UncaughError} error\n * @param {Error} originalError\n * @returns {boolean}\n */\nexport function rpcErrorHandler(env, error, originalError) {\n    if (!(error instanceof UncaughtPromiseError)) {\n        return false;\n    }\n    if (originalError instanceof RPCError) {\n        // When an error comes from the server, it can have an exeption name.\n        // (or any string truly). It is used as key in the error dialog from\n        // server registry to know which dialog component to use.\n        // It's how a backend dev can easily map its error to another component.\n        // Note that for a client side exception, we don't use this registry\n        // as we can directly assign a value to `component`.\n        // error is here a RPCError\n        error.unhandledRejectionEvent.preventDefault();\n        const exceptionName = originalError.exceptionName;\n        let ErrorComponent = originalError.Component;\n        if (!ErrorComponent && exceptionName) {\n            if (errorNotificationRegistry.contains(exceptionName)) {\n                const notif = errorNotificationRegistry.get(exceptionName);\n                env.services.notification.add(notif.message || originalError.data.message, notif);\n                return true;\n            }\n            if (errorDialogRegistry.contains(exceptionName)) {\n                ErrorComponent = errorDialogRegistry.get(exceptionName);\n            }\n        }\n        if (!ErrorComponent && originalError.data.context) {\n            const exceptionClass = originalError.data.context.exception_class;\n            if (errorDialogRegistry.contains(exceptionClass)) {\n                ErrorComponent = errorDialogRegistry.get(exceptionClass);\n            }\n        }\n\n        env.services.dialog.add(ErrorComponent || RPCErrorDialog, {\n            traceback: error.traceback,\n            message: originalError.message,\n            name: originalError.name,\n            exceptionName: originalError.exceptionName,\n            data: originalError.data,\n            subType: originalError.subType,\n            code: originalError.code,\n            type: originalError.type,\n        });\n        return true;\n    }\n}\nerrorHandlerRegistry.add(\"rpcErrorHandler\", rpcErrorHandler, { sequence: 97 });\n\n// -----------------------------------------------------------------------------\n// Lost connection errors\n// -----------------------------------------------------------------------------\n\nlet connectionLostNotifRemove = null;\n/**\n * @param {OdooEnv} env\n * @param {UncaughError} error\n * @param {Error} originalError\n * @returns {boolean}\n */\nexport function lostConnectionHandler(env, error, originalError) {\n    if (!(error instanceof UncaughtPromiseError)) {\n        return false;\n    }\n    if (originalError instanceof ConnectionLostError) {\n        if (connectionLostNotifRemove) {\n            // notification already displayed (can occur if there were several\n            // concurrent rpcs when the connection was lost)\n            return true;\n        }\n        connectionLostNotifRemove = env.services.notification.add(\n            env._t(\"Connection lost. Trying to reconnect...\"),\n            { sticky: true }\n        );\n        let delay = 2000;\n        browser.setTimeout(function checkConnection() {\n            env.services\n                .rpc(\"/web/webclient/version_info\", {})\n                .then(function () {\n                    if (connectionLostNotifRemove) {\n                        connectionLostNotifRemove();\n                        connectionLostNotifRemove = null;\n                    }\n                    env.services.notification.add(\n                        env._t(\"Connection restored. You are back online.\"),\n                        {\n                            type: \"info\",\n                        }\n                    );\n                })\n                .catch(() => {\n                    // exponential backoff, with some jitter\n                    delay = delay * 1.5 + 500 * Math.random();\n                    browser.setTimeout(checkConnection, delay);\n                });\n        }, delay);\n        return true;\n    }\n}\nerrorHandlerRegistry.add(\"lostConnectionHandler\", lostConnectionHandler, { sequence: 98 });\n\n// -----------------------------------------------------------------------------\n// Empty rejection errors\n// -----------------------------------------------------------------------------\n\n/**\n * @param {OdooEnv} env\n * @param {UncaughError} error\n * @returns {boolean}\n */\nfunction emptyRejectionErrorHandler(env, error) {\n    if (!(error instanceof UncaughtPromiseError)) {\n        return false;\n    }\n    env.services.dialog.add(ClientErrorDialog, {\n        traceback: error.traceback,\n        message: error.message,\n        name: error.name,\n    });\n    return true;\n}\nerrorHandlerRegistry.add(\"emptyRejectionErrorHandler\", emptyRejectionErrorHandler, {\n    sequence: 99,\n});\n\n// -----------------------------------------------------------------------------\n// Default handler\n// -----------------------------------------------------------------------------\n\n/**\n * @param {OdooEnv} env\n * @param {UncaughError} error\n * @returns {boolean}\n */\nfunction defaultHandler(env, error) {\n    env.services.dialog.add(ErrorDialog, {\n        traceback: error.traceback,\n        message: error.message,\n        name: error.name,\n    });\n    return true;\n}\nerrorHandlerRegistry.add(\"defaultHandler\", defaultHandler, { sequence: 100 });\n", "/** @odoo-module **/\n\nimport { browser } from \"../browser/browser\";\nimport { _lt } from \"../l10n/translation\";\nimport { registry } from \"../registry\";\nimport { annotateTraceback, formatTraceback, getErrorTechnicalName } from \"./error_utils\";\n\n/**\n * Uncaught Errors have 4 properties:\n * - name: technical name of the error (UncaughtError, ...)\n * - message: short user visible description of the issue (\"Uncaught Cors Error\")\n * - traceback: long description, possibly technical of the issue (such as a traceback)\n * - originalError: the error that was actually being caught. Note that it is not\n *      necessarily an error (for ex, if some code does throw \"boom\")\n */\nexport class UncaughtError extends Error {\n    constructor(message) {\n        super(message);\n        this.name = getErrorTechnicalName(this);\n        this.traceback = null;\n    }\n}\n\nexport class UncaughtClientError extends UncaughtError {\n    constructor(message = _lt(\"Uncaught Javascript Error\")) {\n        super(message);\n    }\n}\n\nexport class UncaughtPromiseError extends UncaughtError {\n    constructor(message = _lt(\"Uncaught Promise\")) {\n        super(message);\n        this.unhandledRejectionEvent = null;\n    }\n}\n\nexport class UncaughtCorsError extends UncaughtError {\n    constructor(message = _lt(\"Uncaught CORS Error\")) {\n        super(message);\n    }\n}\n\n/**\n * @param {UncaughtError} uncaughtError\n * @param {Error} originalError\n * @returns {string}\n */\nfunction combineErrorNames(uncaughtError, originalError) {\n    const originalErrorName = getErrorTechnicalName(originalError);\n    const uncaughtErrorName = getErrorTechnicalName(uncaughtError);\n    if (originalErrorName === Error.name) {\n        return uncaughtErrorName;\n    } else {\n        return `${uncaughtErrorName} > ${originalErrorName}`;\n    }\n}\n\n/**\n * @param {import(\"../../env\").OdooEnv} env\n * @param {UncaughtError} uncaughtError\n * @param {Error} originalError\n * @returns {Promise<void>}\n */\nasync function completeUncaughtError(env, uncaughtError, originalError) {\n    uncaughtError.name = combineErrorNames(uncaughtError, originalError);\n    if (env.debug.includes(\"assets\")) {\n        uncaughtError.traceback = await annotateTraceback(originalError);\n    } else {\n        uncaughtError.traceback = formatTraceback(originalError);\n    }\n    if (originalError.message) {\n        uncaughtError.message = `${uncaughtError.message} > ${originalError.message}`;\n    }\n}\n\nexport const errorService = {\n    start(env) {\n        function handleError(error, originalError, retry = true) {\n            const services = env.services;\n            if (!services.dialog || !services.notification || !services.rpc) {\n                // here, the environment is not ready to provide feedback to the user.\n                // We simply wait 1 sec and try again, just in case the application can\n                // recover.\n                if (retry) {\n                    browser.setTimeout(() => {\n                        handleError(error, originalError, false);\n                    }, 1000);\n                }\n                return;\n            }\n            for (let handler of registry.category(\"error_handlers\").getAll()) {\n                if (handler(env, error, originalError)) {\n                    break;\n                }\n            }\n        }\n\n        browser.addEventListener(\"error\", async (ev) => {\n            const { colno, error: originalError, filename, lineno, message } = ev;\n            const errorsToIgnore = [\n                // Ignore some unnecessary \"ResizeObserver loop limit exceeded\" error in Firefox.\n                \"ResizeObserver loop completed with undelivered notifications.\",\n                // ignore Chrome video internal error: https://crbug.com/809574\n                \"ResizeObserver loop limit exceeded\"\n            ]\n            if (!originalError && errorsToIgnore.includes(message)) {\n                return;\n            }\n            let uncaughtError;\n            if (!filename && !lineno && !colno) {\n                uncaughtError = new UncaughtCorsError();\n                uncaughtError.traceback = env._t(\n                    `Unknown CORS error\\n\\n` +\n                        `An unknown CORS error occured.\\n` +\n                        `The error probably originates from a JavaScript file served from a different origin.\\n` +\n                        `(Opening your browser console might give you a hint on the error.)`\n                );\n            } else {\n                uncaughtError = new UncaughtClientError();\n                await completeUncaughtError(env, uncaughtError, originalError);\n            }\n            handleError(uncaughtError, originalError);\n        });\n\n        browser.addEventListener(\"unhandledrejection\", async (ev) => {\n            const originalError = ev.reason;\n            const uncaughtError = new UncaughtPromiseError();\n            uncaughtError.unhandledRejectionEvent = ev;\n            if (originalError instanceof Error) {\n                await completeUncaughtError(env, uncaughtError, originalError);\n            }\n            handleError(uncaughtError, originalError);\n        });\n    },\n};\n\nregistry.category(\"services\").add(\"error\", errorService, { sequence: 1 });\n", "/** @odoo-module **/\n\nimport { loadAssets } from \"../assets\";\nimport { isBrowserChrome } from \"../browser/feature_detection\";\n\n/**\n * @param {Error} error\n * @returns {string}\n */\nexport function getErrorTechnicalName(error) {\n    return error.name !== Error.name ? error.name : error.constructor.name;\n}\n\n/**\n * Format the traceback of an error. Basically, we just add the error message\n * in the traceback if necessary (Chrome already does it by default, but not\n * other browser.)\n *\n * @param {Error} error\n * @returns {string}\n */\nexport function formatTraceback(error) {\n    let traceback = error.stack;\n    const errorName = getErrorTechnicalName(error);\n    if (!isBrowserChrome()) {\n        // transforms the stack into a chromium stack\n        // Chromium stack example:\n        // Error: Mock: Can't write value\n        //     _onOpenFormView@http://localhost:8069/web/content/425-baf33f1/web.assets.js:1064:30\n        //     ...\n        traceback = `${errorName}: ${error.message}\\n${error.stack}`.replace(/\\n/g, \"\\n    \");\n    } else if (error.stack) {\n        // Chromium stack starts with the error's name but the name is \"Error\" by default\n        // so we replace it to have the error type name\n        traceback = error.stack.replace(/^[^:]*/g, errorName);\n    }\n    return traceback;\n}\n\n/**\n * Returns an annotated traceback from an error. This is asynchronous because\n * it needs to fetch the sourcemaps for each script involved in the error,\n * then compute the correct file/line numbers and add the information to the\n * correct line.\n *\n * @param {Error} error\n * @returns {Promise<string>}\n */\nexport async function annotateTraceback(error) {\n    const traceback = formatTraceback(error);\n    try {\n        await loadAssets({\n            jsLibs: [\"/web/static/lib/stacktracejs/stacktrace.js\"],\n        });\n    } catch (e) {\n        return traceback;\n    }\n    // In Firefox, the error stack generated by anonymous code (example: invalid\n    // code in a template) is not compatible with the stacktrace lib. This code\n    // corrects the stack to make it compatible with the lib stacktrace.\n    if (error.stack) {\n        const regex = / line (\\d*) > (Function):(\\d*)/gm;\n        const subst = `:$1`;\n        error.stack = error.stack.replace(regex, subst);\n    }\n    // eslint-disable-next-line no-undef\n    let frames;\n    try {\n        frames = await StackTrace.fromError(error);\n    } catch (e) {\n        // This can crash if the originalError has no stack/stacktrace property\n        console.warn(\"The following error could not be annotated:\", error, e);\n        return traceback;\n    }\n    const lines = traceback.split(\"\\n\");\n    if (lines[lines.length - 1].trim() === \"\") {\n        // firefox traceback have an empty line at the end\n        lines.splice(-1);\n    }\n\n    // Chrome stacks contains some lines with (index 0) which apparently\n    // corresponds to some native functions (at least Promise.all). We need to\n    // ignore them because they will not correspond to a stackframe.\n    const skips = lines.filter((l) => l.includes(\"(index 0\")).length;\n    const offset = lines.length - frames.length - skips;\n    let lineIndex = offset;\n    let frameIndex = 0;\n    while (frameIndex < frames.length) {\n        const line = lines[lineIndex];\n        if (line.includes(\"(index 0)\")) {\n            lineIndex++;\n            continue;\n        }\n        const frame = frames[frameIndex];\n        const info = ` (${frame.fileName}:${frame.lineNumber})`;\n        lines[lineIndex] = line + info;\n        lineIndex++;\n        frameIndex++;\n    }\n    return lines.join(\"\\n\");\n}\n", "/** @odoo-module **/\n\nimport { useService } from \"@web/core/utils/hooks\";\n\nconst { Component, hooks, QWeb } = owl;\nconst { useRef } = hooks;\n\n/**\n * Custom file input\n *\n * Component representing a customized input of type file. It takes a sub-template\n * in its default t-slot and uses it as the trigger to open the file upload\n * prompt.\n * @extends Component\n *\n * Props:\n * @param {string} [props.accepted_file_extensions='*'] Comma-separated\n *      list of authorized file extensions (default to all).\n * @param {string} [props.action='/web/binary/upload'] Route called when\n *      a file is uploaded in the input.\n * @param {string} [props.id]\n * @param {string} [props.model]\n * @param {string} [props.multi_upload=false] Whether the input should allow\n *      to upload multiple files at once.\n */\nexport class FileInput extends Component {\n    setup() {\n        this.http = useService(\"http\");\n        this.fileInputRef = useRef(\"file-input\");\n    }\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Upload an attachment to the given action with the given parameters:\n     * - ufile: list of files contained in the file input\n     * - csrf_token: CSRF token provided by the odoo global object\n     * - model: a specific model which will be given when creating the attachment\n     * - id: the id of the model target instance\n     * @private\n     */\n    async onFileInputChange() {\n        const { action, model, id } = this.props;\n        const params = {\n            csrf_token: odoo.csrf_token,\n            ufile: [...this.fileInputRef.el.files],\n        };\n        if (model) {\n            params.model = model;\n        }\n        if (id) {\n            params.id = id;\n        }\n        const fileData = await this.http.post(action, params, \"text\");\n        const parsedFileData = JSON.parse(fileData);\n        if (parsedFileData.error) {\n            throw new Error(parsedFileData.error);\n        }\n        this.trigger(\"uploaded\", { files: parsedFileData });\n    }\n\n    /**\n     * Redirect clicks from the trigger element to the input.\n     * @private\n     */\n    onTriggerClicked() {\n        this.fileInputRef.el.click();\n    }\n}\n\nFileInput.defaultProps = {\n    accepted_file_extensions: \"*\",\n    action: \"/web/binary/upload\",\n    multi_upload: false,\n};\nFileInput.props = {\n    accepted_file_extensions: { type: String, optional: 1 },\n    action: { type: String, optional: 1 },\n    id: { type: Number, optional: 1 },\n    model: { type: String, optional: 1 },\n    multi_upload: { type: Boolean, optional: 1 },\n};\nFileInput.template = \"web.FileInput\";\n\nQWeb.registerComponent(\"FileInput\", FileInput);\n", "/** @odoo-module **/\n\nimport { useEffect, useService } from \"@web/core/utils/hooks\";\n\n/**\n * This hook will register/unregister the given registration\n * when the caller component will mount/unmount.\n *\n * @param {string} hotkey\n * @param {()=>void} callback\n * @param {Object} options additional options\n * @param {boolean} [options.allowRepeat=false]\n *  allow registration to perform multiple times when hotkey is held down\n * @param {boolean} [options.bypassEditableProtection=false]\n *  if true the hotkey service will call this registration\n *  even if an editable element is focused\n * @param {boolean} [options.global=false]\n *  allow registration to perform no matter the UI active element\n */\nexport function useHotkey(hotkey, callback, options = {}) {\n    const hotkeyService = useService(\"hotkey\");\n    useEffect(\n        () => hotkeyService.add(hotkey, callback, options),\n        () => []\n    );\n}\n", "/** @odoo-module **/\n\nimport { isMacOS } from \"../browser/feature_detection\";\nimport { registry } from \"../registry\";\nimport { browser } from \"../browser/browser\";\nimport { getVisibleElements } from \"../utils/ui\";\n\nconst ALPHANUM_KEYS = \"abcdefghijklmnopqrstuvwxyz0123456789\".split(\"\");\nconst NAV_KEYS = [\n    \"arrowleft\",\n    \"arrowright\",\n    \"arrowup\",\n    \"arrowdown\",\n    \"pageup\",\n    \"pagedown\",\n    \"home\",\n    \"end\",\n    \"backspace\",\n    \"enter\",\n    \"tab\",\n    \"delete\",\n];\nconst MODIFIERS = new Set([\"alt\", \"control\", \"shift\"]);\nconst AUTHORIZED_KEYS = new Set([...ALPHANUM_KEYS, ...NAV_KEYS, \"escape\"]);\n\nexport const hotkeyService = {\n    dependencies: [\"ui\"],\n    // Be aware that all odoo hotkeys are designed with this modifier in mind,\n    // so changing the overlay modifier may conflict with some shortcuts.\n    overlayModifier: \"alt\",\n    start(env, { ui }) {\n        const registrations = new Map();\n        let nextToken = 0;\n        let overlaysVisible = false;\n\n        addListeners(browser);\n\n        function addListeners(target) {\n            target.addEventListener(\"keydown\", onKeydown);\n            target.addEventListener(\"keyup\", removeHotkeyOverlays);\n            target.addEventListener(\"blur\", removeHotkeyOverlays);\n            target.addEventListener(\"click\", removeHotkeyOverlays);\n        }\n\n        /**\n         * Handler for keydown events.\n         * Verifies if the keyboard event can be dispatched or not.\n         * Rules sequence to forbid dispatching :\n         * - UI is blocked\n         * - the pressed key is not whitelisted\n         *\n         * @param {KeyboardEvent} event\n         */\n        function onKeydown(event) {\n            if (!event.key) {\n                // Chrome may trigger incomplete keydown events under certain circumstances.\n                // E.g. when using browser built-in autocomplete on an input.\n                // See https://stackoverflow.com/questions/59534586/google-chrome-fires-keydown-event-when-form-autocomplete\n                return;\n            }\n\n            if (event.code && event.code.indexOf(\"Numpad\") === 0 && /^\\d$/.test(event.key)) {\n                // Ignore all number keys from the Keypad because of a certain input method\n                // of (advance-)ASCII characters on Windows OS: ALT+[numerical code from keypad]\n                // See https://support.microsoft.com/en-us/office/insert-ascii-or-unicode-latin-based-symbols-and-characters-d13f58d3-7bcb-44a7-a4d5-972ee12e50e0#bm1\n                return;\n            }\n\n            const hotkey = getActiveHotkey(event);\n\n            // Do not dispatch if UI is blocked\n            if (ui.isBlocked) {\n                return;\n            }\n\n            // Replace all [accesskey] attrs by [data-hotkey] on all elements.\n            // This is needed to take over on the default accesskey behavior\n            // and also to avoid any conflict with it.\n            const elementsWithAccessKey = document.querySelectorAll(\"[accesskey]\");\n            for (const el of elementsWithAccessKey) {\n                if (el instanceof HTMLElement) {\n                    el.dataset.hotkey = el.accessKey;\n                    el.removeAttribute(\"accesskey\");\n                }\n            }\n\n            // Special case: open hotkey overlays\n            if (hotkey === hotkeyService.overlayModifier) {\n                addHotkeyOverlays();\n                event.preventDefault();\n                return;\n            }\n\n            // Is the pressed key NOT whitelisted ?\n            const singleKey = hotkey.split(\"+\").pop();\n            if (!AUTHORIZED_KEYS.has(singleKey)) {\n                return;\n            }\n\n            // Protect any editable target that does not explicitly accept hotkeys\n            // NB: except for ESC, which is always allowed as hotkey in editables.\n            const targetIsEditable =\n                event.target instanceof HTMLElement &&\n                (/input|textarea/i.test(event.target.tagName) || event.target.isContentEditable);\n            const shouldProtectEditable =\n                targetIsEditable && !event.target.dataset.allowHotkeys && singleKey !== \"escape\";\n\n            // Finally, prepare and dispatch.\n            const infos = {\n                hotkey,\n                shouldProtectEditable,\n                _originalEvent: event,\n            };\n            dispatch(infos);\n            removeHotkeyOverlays(event);\n        }\n\n        /**\n         * Dispatches an hotkey to first matching registration.\n         * Registrations are iterated in following order:\n         * - priority to all registrations done through the hotkeyService.add()\n         *   method (NB: in descending order of insertion = newer first)\n         * - then all registrations done through the DOM [data-hotkey] attribute\n         *\n         * @param {{\n         *  hotkey: string,\n         *  shouldProtectEditable: boolean,\n         *  _originalEvent: KeyboardEvent\n         * }} infos\n         */\n        function dispatch(infos) {\n            let dispatched = false;\n            const { hotkey, shouldProtectEditable, _originalEvent: event } = infos;\n            const activeElement = ui.activeElement;\n\n            // Dispatch actual hotkey to all matching registrations\n            for (const reg of Array.from(registrations.values()).reverse()) {\n                if (!reg.global && reg.activeElement !== activeElement) {\n                    continue;\n                }\n\n                if (reg.hotkey !== hotkey) {\n                    continue;\n                }\n\n                if (!reg.allowRepeat && event.repeat) {\n                    continue;\n                }\n\n                if (!reg.bypassEditableProtection && shouldProtectEditable) {\n                    continue;\n                }\n\n                reg.callback();\n                dispatched = true;\n                break;\n            }\n            const overlayModParts = hotkeyService.overlayModifier.split(\"+\");\n            if (\n                !dispatched &&\n                !event.repeat &&\n                overlayModParts.every((el) => hotkey.includes(el))\n            ) {\n                // Click on all elements having a data-hotkey attribute matching the actual hotkey without the overlayModifier.\n                const cleanHotkey = hotkey\n                    .split(\"+\")\n                    .filter((key) => !overlayModParts.includes(key))\n                    .join(\"+\");\n                const elems = getVisibleElements(\n                    ui.activeElement,\n                    `[data-hotkey='${cleanHotkey}' i]`\n                );\n                for (const el of elems) {\n                    // AAB: not sure it is enough, we might need to trigger all events that occur when you actually click\n                    el.focus();\n                    el.click();\n                    dispatched = true;\n                    break;\n                }\n            }\n\n            // Only if event has been handheld.\n            if (dispatched) {\n                // Purpose: prevent browser defaults\n                event.preventDefault();\n                // Purpose: stop other window keydown listeners (e.g. home menu)\n                event.stopImmediatePropagation();\n            }\n        }\n\n        /**\n         * Add the hotkey overlays respecting the ui active element.\n         */\n        function addHotkeyOverlays() {\n            if (overlaysVisible) {\n                return;\n            }\n            for (const el of getVisibleElements(ui.activeElement, \"[data-hotkey]:not(:disabled)\")) {\n                const hotkey = el.dataset.hotkey;\n                const overlay = document.createElement(\"div\");\n                overlay.className = \"o_web_hotkey_overlay\";\n                overlay.appendChild(document.createTextNode(hotkey.toUpperCase()));\n\n                let overlayParent;\n                if (el.tagName.toUpperCase() === \"INPUT\") {\n                    // special case for the search input that has an access key\n                    // defined. We cannot set the overlay on the input itself,\n                    // only on its parent.\n                    overlayParent = el.parentElement;\n                } else {\n                    overlayParent = el;\n                }\n\n                if (overlayParent.style.position !== \"absolute\") {\n                    overlayParent.style.position = \"relative\";\n                }\n                overlayParent.appendChild(overlay);\n            }\n            overlaysVisible = true;\n        }\n\n        /**\n         * Remove all the hotkey overlays.\n         */\n        function removeHotkeyOverlays(event) {\n            if (!overlaysVisible) {\n                return;\n            }\n            for (const overlay of document.querySelectorAll(\".o_web_hotkey_overlay\")) {\n                overlay.remove();\n            }\n            overlaysVisible = false;\n            event.preventDefault();\n        }\n\n        /**\n         * Get the actual hotkey being pressed.\n         *\n         * @param {KeyboardEvent} ev\n         * @returns {string} the active hotkey, in lowercase\n         */\n        function getActiveHotkey(ev) {\n            const hotkey = [];\n\n            // ------- Modifiers -------\n            // Modifiers are pushed in ascending order to the hotkey.\n            if (isMacOS() ? ev.ctrlKey : ev.altKey) {\n                hotkey.push(\"alt\");\n            }\n            if (isMacOS() ? ev.metaKey : ev.ctrlKey) {\n                hotkey.push(\"control\");\n            }\n            if (ev.shiftKey) {\n                hotkey.push(\"shift\");\n            }\n\n            // ------- Key -------\n            let key = ev.key.toLowerCase();\n            // Identify if the user has tapped on the number keys above the text keys.\n            if (ev.code && ev.code.indexOf(\"Digit\") === 0) {\n                key = ev.code.slice(-1);\n            }\n            // Prefer physical keys for non-latin keyboard layout.\n            if (!AUTHORIZED_KEYS.has(key) && ev.code && ev.code.indexOf(\"Key\") === 0) {\n                key = ev.code.slice(-1).toLowerCase();\n            }\n            // Make sure we do not duplicate a modifier key\n            if (!MODIFIERS.has(key)) {\n                hotkey.push(key);\n            }\n            return hotkey.join(\"+\");\n        }\n\n        /**\n         * Registers a new hotkey.\n         *\n         * @param {string} hotkey\n         * @param {()=>void} callback\n         * @param {Object} options additional options\n         * @param {boolean} [options.allowRepeat=false]\n         *  allow registration to perform multiple times when hotkey is held down\n         * @param {boolean} [options.bypassEditableProtection=false]\n         *  if true the hotkey service will call this registration\n         *  even if an editable element is focused\n         * @param {boolean} [options.global=false]\n         *  allow registration to perform no matter the UI active element\n         * @returns {number} registration token\n         */\n        function registerHotkey(hotkey, callback, options = {}) {\n            // Validate some informations\n            if (!hotkey || hotkey.length === 0) {\n                throw new Error(\"You must specify an hotkey when registering a registration.\");\n            }\n\n            if (!callback || typeof callback !== \"function\") {\n                throw new Error(\n                    \"You must specify a callback function when registering a registration.\"\n                );\n            }\n\n            /**\n             * An hotkey must comply to these rules:\n             *  - all parts are whitelisted\n             *  - single key part comes last\n             *  - each part is separated by the dash character: \"+\"\n             */\n            const keys = hotkey\n                .toLowerCase()\n                .split(\"+\")\n                .filter((k) => !MODIFIERS.has(k));\n            if (keys.some((k) => !AUTHORIZED_KEYS.has(k))) {\n                throw new Error(\n                    `You are trying to subscribe for an hotkey ('${hotkey}')\n            that contains parts not whitelisted: ${keys.join(\", \")}`\n                );\n            } else if (keys.length > 1) {\n                throw new Error(\n                    `You are trying to subscribe for an hotkey ('${hotkey}')\n            that contains more than one single key part: ${keys.join(\"+\")}`\n                );\n            }\n\n            // Add registration\n            const token = nextToken++;\n            const registration = {\n                hotkey: hotkey.toLowerCase(),\n                callback,\n                activeElement: null,\n                allowRepeat: options && options.allowRepeat,\n                bypassEditableProtection: options && options.bypassEditableProtection,\n                global: options && options.global,\n            };\n            registrations.set(token, registration);\n\n            // Due to the way elements are mounted in the DOM by Owl (bottom-to-top),\n            // we need to wait the next micro task tick to set the context owner of the registration.\n            Promise.resolve().then(() => {\n                registration.activeElement = ui.activeElement;\n            });\n\n            return token;\n        }\n\n        /**\n         * Unsubscribes the token corresponding registration.\n         *\n         * @param {number} token\n         */\n        function unregisterHotkey(token) {\n            registrations.delete(token);\n        }\n\n        return {\n            /**\n             * @param {string} hotkey\n             * @param {() => void} callback\n             * @param {Object} options\n             * @param {boolean} [options.allowRepeat=false]\n             * @param {boolean} [options.bypassEditableProtection=false]\n             * @param {boolean} [options.global=false]\n             * @returns {() => void}\n             */\n            add(hotkey, callback, options = {}) {\n                const token = registerHotkey(hotkey, callback, options);\n                return () => {\n                    unregisterHotkey(token);\n                };\n            },\n            /**\n             * @param {HTMLIFrameElement} iframe\n             */\n            registerIframe(iframe) {\n                addListeners(iframe.contentWindow);\n            },\n        };\n    },\n};\n\nregistry.category(\"services\").add(\"hotkey\", hotkeyService);\n", "/** @odoo-module **/\n\nimport { localization } from \"@web/core/l10n/localization\";\nimport { _t } from \"@web/core/l10n/translation\";\nimport { memoize } from \"@web/core/utils/functions\";\nimport { sprintf } from \"@web/core/utils/strings\";\n\nconst { DateTime, Settings } = luxon;\n\nconst SERVER_DATE_FORMAT = \"yyyy-MM-dd\";\nconst SERVER_TIME_FORMAT = \"HH:mm:ss\";\n\n// -----------------------------------------------------------------------------\n// Helpers\n// -----------------------------------------------------------------------------\n\nconst alphaRegex = /[a-zA-Z]/g;\nconst nonAlphaRegex = /[^a-zA-Z]/g;\nconst nonDigitsRegex = /[^0-9]/g;\n\nconst normalizeFormatTable = {\n    // Python strftime to luxon.js conversion table\n    // See odoo/addons/base/views/res_lang_views.xml\n    // for details about supported directives\n    a: \"ccc\",\n    A: \"cccc\",\n    b: \"MMM\",\n    B: \"MMMM\",\n    d: \"dd\",\n    H: \"HH\",\n    I: \"hh\",\n    j: \"o\",\n    m: \"MM\",\n    M: \"mm\",\n    p: \"a\",\n    S: \"ss\",\n    W: \"WW\",\n    w: \"c\",\n    y: \"yy\",\n    Y: \"yyyy\",\n    c: \"ccc MMM d HH:mm:ss yyyy\",\n    x: \"MM/dd/yy\",\n    X: \"HH:mm:ss\",\n};\n\nconst smartDateUnits = {\n    d: \"days\",\n    m: \"months\",\n    w: \"weeks\",\n    y: \"years\",\n};\nconst smartDateRegex = new RegExp(`^([+-])(\\\\d+)([${Object.keys(smartDateUnits).join(\"\")}]?)$`);\n\n/**\n * Smart date inputs are shortcuts to write dates quicker.\n * These shortcuts should respect the format ^[+-]\\d+[dmwy]?$\n *\n * e.g.\n *   \"+1d\" or \"+1\" will return now + 1 day\n *   \"-2w\" will return now - 2 weeks\n *   \"+3m\" will return now + 3 months\n *   \"-4y\" will return now + 4 years\n *\n * @param {string} value\n * @returns {DateTime|false} Luxon datetime object (in the UTC timezone)\n */\nfunction parseSmartDateInput(value) {\n    const match = smartDateRegex.exec(value);\n    if (match) {\n        let date = DateTime.utc();\n        const offset = parseInt(match[2], 10);\n        const unit = smartDateUnits[match[3] || \"d\"];\n        if (match[1] === \"+\") {\n            date = date.plus({ [unit]: offset });\n        } else {\n            date = date.minus({ [unit]: offset });\n        }\n        return date;\n    }\n    return false;\n}\n\n/**\n * Enforces some restrictions to a Luxon DateTime object.\n * Returns it if within those restrictions.\n * Returns false otherwise.\n *\n * @param {DateTime | false} date\n * @returns {DateTime | false}\n */\nfunction constrain(dt) {\n    let valid = dt !== false;\n    valid = valid && dt.isValid;\n    valid = valid && dt.year >= 1000;\n    valid = valid && dt.year < 10000;\n    return valid ? dt : false;\n}\n\n/**\n * Removes any duplicated alphabetic characters in a given string.\n * Example: \"aa-bb-CCcc-ddD xxxx-Yy-ZZ\" -> \"a-b-Cc-dD x-Yy-Z\"\n *\n * @param {string} str\n * @returns {string}\n */\nconst stripAlphaDupes = memoize(function stripAlphaDupes(str) {\n    return str.replace(alphaRegex, (letter, index, str) => {\n        return letter === str[index - 1] ? \"\" : letter;\n    });\n});\n\n/**\n * Convert Python strftime to escaped luxon.js format.\n *\n * @param {string} value original format\n * @returns {string} valid Luxon format\n */\nexport const strftimeToLuxonFormat = memoize(function strftimeToLuxonFormat(value) {\n    const output = [];\n    let inToken = false;\n    for (let index = 0; index < value.length; ++index) {\n        let character = value[index];\n        if (character === \"%\" && !inToken) {\n            inToken = true;\n            continue;\n        }\n        if (character.match(alphaRegex)) {\n            if (inToken && normalizeFormatTable[character] !== undefined) {\n                character = normalizeFormatTable[character];\n            } else {\n                character = \"'\" + character + \"'\";  // luxon escape\n            }\n        }\n        output.push(character);\n        inToken = false;\n    }\n    return output.join(\"\");\n});\n\n// -----------------------------------------------------------------------------\n// Formatting\n// -----------------------------------------------------------------------------\n\n/**\n * Formats a DateTime object to a date string\n *\n * `options.timezone` is defaulted to false on dates since we assume they\n * shouldn't be affected by timezones like datetimes.\n *\n * @see formatDateTime\n * @returns {string}\n */\nexport function formatDate(value, options = {}) {\n    value = value.setZone(\"utc\", { keepLocalTime: true });\n    return formatDateTime(value, {\n        timezone: false, // Timezone should never alter a 'date' value.\n        ...options,\n        format: options.format || localization.dateFormat,\n    });\n}\n\n/**\n * Formats a DateTime object to a datetime string\n *\n * @param {DateTime | false} value\n * @param {Object} options\n * @param {string} [options.format]\n *  Provided format used to format the input DateTime object.\n *\n *  Default=the session localization format.\n *\n * @param {boolean} [options.timezone]\n *  - True = input will be set in local time before being formatted.\n *  - False = input will be set in UTC time before being formatted.\n *\n *  Default=false.\n *\n * @param {string} [options.numberingSystem]\n *  Provided numbering system used to parse the input value.\n *\n * Default=the default numbering system assigned to luxon\n * @see localization_service.js\n *\n * @returns {string}\n */\nexport function formatDateTime(value, options = {}) {\n    if (value === false) {\n        return \"\";\n    }\n    const format = options.format || localization.dateTimeFormat;\n    const numberingSystem = options.numberingSystem || Settings.defaultNumberingSystem;\n    const zone = options.timezone ? \"local\" : \"utc\";\n    value = value.setZone(zone, { keepLocaltime: options.timezone });\n    return value.toFormat(format, { numberingSystem });\n}\n\n// -----------------------------------------------------------------------------\n// Parsing\n// -----------------------------------------------------------------------------\n\n/**\n * Parses a string value to a Luxon DateTime object.\n *\n * `options.timezone` is defaulted to false on dates since we assume they\n * shouldn't be affected by timezones like datetimes.\n *\n * @see parseDateTime (Note: since we're only interested by the date itself, the\n *  returned value will always be set at the start of the day)\n * @returns {DateTime | false} Luxon DateTime object\n */\nexport function parseDate(value, options = {}) {\n    return parseDateTime(value, { timezone: false, ...options }).startOf(\"day\");\n}\n\n/**\n * Parses a string value to a Luxon DateTime object.\n *\n * @param {string} value value to parse.\n *  - Value can take the form of a smart date:\n *    e.g. \"+3w\" for three weeks from now.\n *    (`options.format` and `options.timezone` are ignored in this case)\n *\n *  - If value cannot be parsed within the provided format,\n *    ISO8601 and SQL formats are then tried.\n *\n * @param {object} options\n * @param {string} [options.format]\n *  Provided format used to parse the input value.\n *\n *  Default=the session localization format\n *\n * @param {boolean} [options.timezone]\n *  - True = input value is considered being in localtime.\n *  - False = input value is considered being in utc time, and the returned\n *            value will have the UTC zone.\n *\n *  NB: ISO strings containing timezone information\n *      will have priority over this option.\n *\n *  Default=false.\n *\n * @param {string} [options.locale]\n *  Provided locale used to parse the input value.\n *\n * Default=the session localization locale\n *\n * @param {string} [options.numberingSystem]\n *  Provided numbering system used to parse the input value.\n *\n * Default=the default numbering system assigned to luxon\n * @see localization_service.js\n *\n * @returns {DateTime | false} Luxon DateTime object\n */\nexport function parseDateTime(value, options = {}) {\n    if (!value) {\n        return false;\n    }\n\n    const valueDigitsOnly = value.replace(nonDigitsRegex, \"\");\n    const parseOpts = {\n        setZone: true,\n        zone: options.timezone ? \"local\" : \"utc\",\n        locale: options.locale,\n        numberingSystem: options.numberingSystem || Settings.defaultNumberingSystem,\n    };\n\n    let result = constrain(parseSmartDateInput(value));\n\n    if (!result) {\n        const fmt = options.format || localization.dateTimeFormat;\n        const fmtWoZero = stripAlphaDupes(fmt);\n\n        // Luxon is not permissive regarding delimiting characters in the format.\n        // So if the value to parse has less characters than the format, we would\n        // try to parse without the delimiting characters.\n        const woSeps = {\n            val: valueDigitsOnly,\n            fmt: fmt.replace(nonAlphaRegex, \"\").slice(0, valueDigitsOnly.length),\n        };\n\n        result =\n            constrain(DateTime.fromFormat(value, fmt, parseOpts)) ||\n            constrain(DateTime.fromFormat(value, fmtWoZero, parseOpts)) ||\n            constrain(DateTime.fromFormat(woSeps.val, woSeps.fmt, parseOpts));\n    }\n\n    if (!result) {\n        if (valueDigitsOnly.length > 4) {\n            // Also try some fallback formats, but only if value counts more than\n            // four digit characters as this could get misinterpreted as the time of\n            // the actual date.\n            result =\n                constrain(DateTime.fromISO(value, parseOpts)) || // ISO8601\n                constrain(DateTime.fromSQL(value, parseOpts)); // last try: SQL\n        }\n    }\n\n    if (!result) {\n        throw new Error(sprintf(_t(\"'%s' is not a correct date or datetime\"), value));\n    }\n\n    return options.timezone ? result : result.toUTC();\n}\n\n/**\n * Returns a date object parsed from the given serialized string.\n * @param {string} value\n * @returns {DateTime | false}\n */\nexport const deserializeDate = (value) => {\n    return parseDate(value, {\n        format: SERVER_DATE_FORMAT,\n        numberingSystem: \"latn\",\n    });\n};\n\n/**\n * Returns a datetime object parsed from the given serialized string.\n * @param {string} value\n * @returns {DateTime | false}\n */\nexport const deserializeDateTime = (value) => {\n    return parseDateTime(value, {\n        format: `${SERVER_DATE_FORMAT} ${SERVER_TIME_FORMAT}`,\n        numberingSystem: \"latn\",\n    });\n};\n\n/**\n * Returns a serialized string representing the given date.\n * @param {DateTime} value\n * @returns {string}\n */\nexport const serializeDate = (value) => {\n    return formatDate(value, {\n        format: SERVER_DATE_FORMAT,\n        numberingSystem: \"latn\",\n    });\n};\n\n/**\n * Returns a serialized string representing the given datetime.\n * @param {DateTime} value\n * @returns {string}\n */\nexport const serializeDateTime = (value) => {\n    return formatDateTime(value, {\n        format: `${SERVER_DATE_FORMAT} ${SERVER_TIME_FORMAT}`,\n        numberingSystem: \"latn\",\n    });\n};\n", "/** @odoo-module **/\n\n/**\n * @type {any}\n */\nconst notReadyError = new Error(\n    \"Localization parameters not ready yet. Maybe add 'localization' to your dependencies?\"\n);\n\n/**\n * This is the main object holding user specific data about the localization. Its basically\n * the JS counterpart of the \"res.lang\" model.\n * It is useful to directly access those data anywhere, even outside Components.\n *\n * Important Note: its data are actually loaded by the localization_service,\n * so a code like the following would not work:\n *   import { localization } from \"@web/core/l10n/localization\";\n *   const dateFormat = localization.dateFormat; // dateFormat isn't set yet\n */\nexport const localization = {\n    dateFormat: notReadyError,\n    dateTimeFormat: notReadyError,\n    timeFormat: notReadyError,\n    decimalPoint: notReadyError,\n    direction: notReadyError,\n    grouping: notReadyError,\n    multiLang: notReadyError,\n    thousandsSep: notReadyError,\n    weekStart: notReadyError,\n};\n", "/** @odoo-module **/\n\nimport { session } from \"@web/session\";\nimport { browser } from \"../browser/browser\";\nimport { registry } from \"../registry\";\nimport { strftimeToLuxonFormat } from \"./dates\";\nimport { localization } from \"./localization\";\nimport { translatedTerms, _t } from \"./translation\";\n\nconst { Settings } = luxon;\n\n/** @type {[RegExp, string][]} */\nconst NUMBERING_SYSTEMS = [\n    [/^ar-(sa|sy|001)$/i, \"arab\"],\n    [/^bn/i, \"beng\"],\n    [/^bo/i, \"tibt\"],\n    // [/^fa/i, \"Farsi (Persian)\"], // No numberingSystem found in Intl\n    // [/^(hi|mr|ne)/i, \"Hindi\"], // No numberingSystem found in Intl\n    // [/^my/i, \"Burmese\"], // No numberingSystem found in Intl\n    [/^pa-in/i, \"guru\"],\n    [/^ta/i, \"tamldec\"],\n    [/.*/i, \"latn\"],\n];\n\nexport const localizationService = {\n    dependencies: [\"user\"],\n    start: async (env, { user }) => {\n        // add \"data-toolip\" to the list of translatable attributes in owl templates\n        owl.config.translatableAttributes.push(\"data-tooltip\");\n\n        const cacheHashes = session.cache_hashes || {};\n        const translationsHash = cacheHashes.translations || new Date().getTime().toString();\n        const lang = user.lang || null;\n        const translationURL = session.translationURL || \"/web/webclient/translations\";\n        let url = `${translationURL}/${translationsHash}`;\n        if (lang) {\n            url += `?lang=${lang}`;\n        }\n\n        const response = await browser.fetch(url);\n        if (!response.ok) {\n            throw new Error(\"Error while fetching translations\");\n        }\n\n        const {\n            lang_parameters: userLocalization,\n            modules: modules,\n            multi_lang: multiLang,\n        } = await response.json();\n\n        // FIXME We flatten the result of the python route.\n        // Eventually, we want a new python route to return directly the good result.\n        let terms = {};\n        for (const addon of Object.keys(modules)) {\n            for (const message of modules[addon].messages) {\n                terms[message.id] = message.string;\n            }\n        }\n\n        Object.setPrototypeOf(translatedTerms, terms);\n        env._t = _t;\n        env.qweb.translateFn = _t;\n\n        if (lang) {\n            // Setup lang inside luxon. The locale codes received from the server contain \"_\",\n            // whereas the Intl codes use \"-\" (Unicode BCP 47). There's only one exception, which\n            // is locale \"sr@latin\", for which we manually fallback to the \"sr-Latn-RS\" locale.\n            const locale = lang === \"sr@latin\" ? \"sr-Latn-RS\" : lang.replace(/_/g, \"-\");\n            Settings.defaultLocale = locale;\n            for (const [re, numberingSystem] of NUMBERING_SYSTEMS) {\n                if (re.test(locale)) {\n                    Settings.defaultNumberingSystem = numberingSystem;\n                    break;\n                }\n            }\n        }\n\n        const dateFormat = strftimeToLuxonFormat(userLocalization.date_format);\n        const timeFormat = strftimeToLuxonFormat(userLocalization.time_format);\n        const dateTimeFormat = `${dateFormat} ${timeFormat}`;\n        const grouping = JSON.parse(userLocalization.grouping);\n\n        Object.assign(localization, {\n            dateFormat,\n            timeFormat,\n            dateTimeFormat,\n            decimalPoint: userLocalization.decimal_point,\n            direction: userLocalization.direction,\n            grouping,\n            multiLang,\n            thousandsSep: userLocalization.thousands_sep,\n            weekStart: userLocalization.week_start,\n        });\n    },\n};\n\nregistry.category(\"services\").add(\"localization\", localizationService);\n", "/** @odoo-module **/\n\nexport const translatedTerms = {};\n\n/**\n * Translate a term, or return the term if no translation can be found.\n *\n * Note that it translates eagerly, which means that if the translations have\n * not been loaded yet, it will return the untranslated term. If it cannot be\n * guaranteed that translations are ready, one should use the _lt function\n * instead (see below)\n *\n * @param {string} term\n * @returns {string}\n */\nexport function _t(term) {\n    return translatedTerms[term] || term;\n}\n\nclass LazyTranslatedString extends String {\n    valueOf() {\n        const str = super.valueOf();\n        return _t(str);\n    }\n    toString() {\n        return this.valueOf();\n    }\n}\n\n/**\n * Lazy translation function, only performs the translation when actually\n * printed (e.g. inserted into a template).\n * Useful when defining translatable strings in code evaluated before the\n * translations are loaded, as class attributes or at the top-level of\n * an Odoo Web module\n *\n * @param {string} term\n * @returns {LazyTranslatedString}\n */\nexport function _lt(term) {\n    return new LazyTranslatedString(term);\n}\n\n/*\n * Setup jQuery timeago:\n * Strings in timeago are \"composed\" with prefixes, words and suffixes. This\n * makes their detection by our translating system impossible. Use all literal\n * strings we're using with a translation mark here so the extractor can do its\n * job.\n */\n_lt(\"less than a minute ago\");\n_lt(\"about a minute ago\");\n_lt(\"%d minutes ago\");\n_lt(\"about an hour ago\");\n_lt(\"%d hours ago\");\n_lt(\"a day ago\");\n_lt(\"%d days ago\");\n_lt(\"about a month ago\");\n_lt(\"%d months ago\");\n_lt(\"about a year ago\");\n_lt(\"%d years ago\");\n", "/** @odoo-module */\nimport { registry } from \"./registry\";\nimport { NotUpdatable, ErrorHandler } from \"./utils/components\";\n\nconst { Component, tags } = owl;\n\nexport class MainComponentsContainer extends Component {\n    setup() {\n        this.Components = registry.category(\"main_components\").getEntries();\n    }\n\n    handleComponentError(error, C) {\n        // remove the faulty component and rerender without it\n        this.Components.splice(this.Components.indexOf(C), 1);\n        this.render();\n        /**\n         * we rethrow the error to notify the user something bad happened.\n         * We do it after a tick to make sure owl can properly finish its\n         * rendering\n         */\n        Promise.resolve().then(() => {\n            throw error;\n        });\n    }\n}\n\nMainComponentsContainer.template = tags.xml`\n<div>\n    <t t-foreach=\"Components\" t-as=\"C\" t-key=\"C[0]\">\n        <NotUpdatable>\n            <ErrorHandler onError=\"error => handleComponentError(error, C)\">\n                <t t-component=\"C[1].Component\" t-props=\"C[1].props\"/>\n            </ErrorHandler>\n        </NotUpdatable>\n    </t>\n</div>\n`;\nMainComponentsContainer.components = { NotUpdatable, ErrorHandler };\n", "/** @odoo-module **/\n\nimport { _lt } from \"../l10n/translation\";\nimport { makeErrorFromResponse } from \"@web/core/network/rpc_service\";\nimport { ConnectionLostError } from \"@web/core/network/rpc_service\";\nimport { browser } from \"@web/core/browser/browser\";\n\n// -----------------------------------------------------------------------------\n// Content Disposition Library\n// -----------------------------------------------------------------------------\n\n/*\n(The MIT License)\nCopyright (c) 2014-2017 Douglas Christopher Wilson\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\n/**\n * Stripped down to only parsing/decoding.\n * Slightly changed for export and lint compliance\n */\n\n/**\n * RegExp to match percent encoding escape.\n * @private\n */\nconst HEX_ESCAPE_REPLACE_REGEXP = /%([0-9A-Fa-f]{2})/g;\n\n/**\n * RegExp to match non-latin1 characters.\n * @private\n */\nconst NON_LATIN1_REGEXP = /[^\\x20-\\x7e\\xa0-\\xff]/g;\n\n/**\n * RegExp to match quoted-pair in RFC 2616\n *\n * quoted-pair = \"\\\" CHAR\n * CHAR        = <any US-ASCII character (octets 0 - 127)>\n * @private\n */\nconst QESC_REGEXP = /\\\\([\\u0000-\\u007f])/g;\n\n/**\n * RegExp for various RFC 2616 grammar\n *\n * parameter     = token \"=\" ( token | quoted-string )\n * token         = 1*<any CHAR except CTLs or separators>\n * separators    = \"(\" | \")\" | \"<\" | \">\" | \"@\"\n *               | \",\" | \";\" | \":\" | \"\\\" | <\">\n *               | \"/\" | \"[\" | \"]\" | \"?\" | \"=\"\n *               | \"{\" | \"}\" | SP | HT\n * quoted-string = ( <\"> *(qdtext | quoted-pair ) <\"> )\n * qdtext        = <any TEXT except <\">>\n * quoted-pair   = \"\\\" CHAR\n * CHAR          = <any US-ASCII character (octets 0 - 127)>\n * TEXT          = <any OCTET except CTLs, but including LWS>\n * LWS           = [CRLF] 1*( SP | HT )\n * CRLF          = CR LF\n * CR            = <US-ASCII CR, carriage return (13)>\n * LF            = <US-ASCII LF, linefeed (10)>\n * SP            = <US-ASCII SP, space (32)>\n * HT            = <US-ASCII HT, horizontal-tab (9)>\n * CTL           = <any US-ASCII control character (octets 0 - 31) and DEL (127)>\n * OCTET         = <any 8-bit sequence of data>\n * @private\n */\nconst PARAM_REGEXP = /;[\\x09\\x20]*([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\\x09\\x20]*=[\\x09\\x20]*(\"(?:[\\x20!\\x23-\\x5b\\x5d-\\x7e\\x80-\\xff]|\\\\[\\x20-\\x7e])*\"|[!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\\x09\\x20]*/g;\n\n/**\n * RegExp for various RFC 5987 grammar\n *\n * ext-value     = charset  \"'\" [ language ] \"'\" value-chars\n * charset       = \"UTF-8\" / \"ISO-8859-1\" / mime-charset\n * mime-charset  = 1*mime-charsetc\n * mime-charsetc = ALPHA / DIGIT\n *               / \"!\" / \"#\" / \"$\" / \"%\" / \"&\"\n *               / \"+\" / \"-\" / \"^\" / \"_\" / \"`\"\n *               / \"{\" / \"}\" / \"~\"\n * language      = ( 2*3ALPHA [ extlang ] )\n *               / 4ALPHA\n *               / 5*8ALPHA\n * extlang       = *3( \"-\" 3ALPHA )\n * value-chars   = *( pct-encoded / attr-char )\n * pct-encoded   = \"%\" HEXDIG HEXDIG\n * attr-char     = ALPHA / DIGIT\n *               / \"!\" / \"#\" / \"$\" / \"&\" / \"+\" / \"-\" / \".\"\n *               / \"^\" / \"_\" / \"`\" / \"|\" / \"~\"\n * @private\n */\nconst EXT_VALUE_REGEXP = /^([A-Za-z0-9!#$%&+\\-^_`{}~]+)'(?:[A-Za-z]{2,3}(?:-[A-Za-z]{3}){0,3}|[A-Za-z]{4,8}|)'((?:%[0-9A-Fa-f]{2}|[A-Za-z0-9!#$&+.^_`|~-])+)$/;\n\n/**\n * RegExp for various RFC 6266 grammar\n *\n * disposition-type = \"inline\" | \"attachment\" | disp-ext-type\n * disp-ext-type    = token\n * disposition-parm = filename-parm | disp-ext-parm\n * filename-parm    = \"filename\" \"=\" value\n *                  | \"filename*\" \"=\" ext-value\n * disp-ext-parm    = token \"=\" value\n *                  | ext-token \"=\" ext-value\n * ext-token        = <the characters in token, followed by \"*\">\n * @private\n */\nconst DISPOSITION_TYPE_REGEXP = /^([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\\x09\\x20]*(?:$|;)/;\n\n/**\n * Decode a RFC 6987 field value (gracefully).\n *\n * @param {string} str\n * @return {string}\n * @private\n */\nfunction decodefield(str) {\n    const match = EXT_VALUE_REGEXP.exec(str);\n\n    if (!match) {\n        throw new TypeError(\"invalid extended field value\");\n    }\n\n    const charset = match[1].toLowerCase();\n    const encoded = match[2];\n\n    switch (charset) {\n        case \"iso-8859-1\":\n            return encoded\n                .replace(HEX_ESCAPE_REPLACE_REGEXP, pdecode)\n                .replace(NON_LATIN1_REGEXP, \"?\");\n        case \"utf-8\":\n            return decodeURIComponent(encoded);\n        default:\n            throw new TypeError(\"unsupported charset in extended field\");\n    }\n}\n\n/**\n * Parse Content-Disposition header string.\n *\n * @param {string} string\n * @return {ContentDisposition}\n * @public\n */\nfunction parse(string) {\n    if (!string || typeof string !== \"string\") {\n        throw new TypeError(\"argument string is required\");\n    }\n\n    let match = DISPOSITION_TYPE_REGEXP.exec(string);\n\n    if (!match) {\n        throw new TypeError(\"invalid type format\");\n    }\n\n    // normalize type\n    let index = match[0].length;\n    const type = match[1].toLowerCase();\n\n    let key;\n    const names = [];\n    const params = {};\n    let value;\n\n    // calculate index to start at\n    index = PARAM_REGEXP.lastIndex = match[0].substr(-1) === \";\" ? index - 1 : index;\n\n    // match parameters\n    while ((match = PARAM_REGEXP.exec(string))) {\n        if (match.index !== index) {\n            throw new TypeError(\"invalid parameter format\");\n        }\n\n        index += match[0].length;\n        key = match[1].toLowerCase();\n        value = match[2];\n\n        if (names.indexOf(key) !== -1) {\n            throw new TypeError(\"invalid duplicate parameter\");\n        }\n\n        names.push(key);\n\n        if (key.indexOf(\"*\") + 1 === key.length) {\n            // decode extended value\n            key = key.slice(0, -1);\n            value = decodefield(value);\n\n            // overwrite existing value\n            params[key] = value;\n            continue;\n        }\n\n        if (typeof params[key] === \"string\") {\n            continue;\n        }\n\n        if (value[0] === '\"') {\n            // remove quotes and escapes\n            value = value.substr(1, value.length - 2).replace(QESC_REGEXP, \"$1\");\n        }\n\n        params[key] = value;\n    }\n\n    if (index !== -1 && index !== string.length) {\n        throw new TypeError(\"invalid parameter format\");\n    }\n\n    return new ContentDisposition(type, params);\n}\n\n/**\n * Percent decode a single character.\n *\n * @param {string} str\n * @param {string} hex\n * @return {string}\n * @private\n */\nfunction pdecode(str, hex) {\n    return String.fromCharCode(parseInt(hex, 16));\n}\n\n/**\n * Class for parsed Content-Disposition header for v8 optimization\n *\n * @public\n * @param {string} type\n * @param {object} parameters\n * @constructor\n */\nfunction ContentDisposition(type, parameters) {\n    this.type = type;\n    this.parameters = parameters;\n}\n\n// -----------------------------------------------------------------------------\n// download.js library\n// -----------------------------------------------------------------------------\n\n/*\nMIT License\nCopyright (c) 2016 dandavis\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n */\n\n/**\n * download.js v4.2, by dandavis; 2008-2018. [MIT] see http://danml.com/download.html for tests/usage\n * v1 landed a FF+Chrome compat way of downloading strings to local un-named files, upgraded to use a hidden frame and optional mime\n * v2 added named files via a[download], msSaveBlob, IE (10+) support, and window.URL support for larger+faster saves than dataURLs\n * v3 added dataURL and Blob Input, bind-toggle arity, and legacy dataURL fallback was improved with force-download mime and base64 support. 3.1 improved safari handling.\n * v4 adds AMD/UMD, commonJS, and plain browser support\n * v4.1 adds url download capability via solo URL argument (same domain/CORS only)\n * v4.2 adds semantic variable names, long (over 2MB) dataURL support, and hidden by default temp anchors\n *\n * Slightly modified for export and lint compliance\n *\n * @param {Blob | File | String} data\n * @param {String} [filename]\n * @param {String} [mimetype]\n */\nfunction _download(data, filename, mimetype) {\n    let self = window, // this script is only for browsers anyway...\n        defaultMime = \"application/octet-stream\", // this default mime also triggers iframe downloads\n        mimeType = mimetype || defaultMime,\n        payload = data,\n        url = !filename && !mimetype && payload,\n        anchor = document.createElement(\"a\"),\n        toString = function (a) {\n            return String(a);\n        },\n        myBlob = self.Blob || self.MozBlob || self.WebKitBlob || toString,\n        fileName = filename || \"download\",\n        blob,\n        reader;\n    myBlob = myBlob.call ? myBlob.bind(self) : Blob;\n\n    if (String(this) === \"true\") {\n        //reverse arguments, allowing download.bind(true, \"text/xml\", \"export.xml\") to act as a callback\n        payload = [payload, mimeType];\n        mimeType = payload[0];\n        payload = payload[1];\n    }\n\n    if (url && url.length < 2048) {\n        // if no filename and no mime, assume a url was passed as the only argument\n        fileName = url.split(\"/\").pop().split(\"?\")[0];\n        anchor.href = url; // assign href prop to temp anchor\n        if (anchor.href.indexOf(url) !== -1) {\n            // if the browser determines that it's a potentially valid url path:\n            let ajax = new XMLHttpRequest();\n            ajax.open(\"GET\", url, true);\n            ajax.responseType = \"blob\";\n            ajax.onload = function (e) {\n                _download(e.target.response, fileName, defaultMime);\n            };\n            setTimeout(() => {\n                ajax.send();\n            }, 0); // allows setting custom ajax headers using the return:\n            return ajax;\n        }\n    }\n\n    //go ahead and download dataURLs right away\n    if (/^data:[\\w+\\-]+\\/[\\w+\\-]+[,;]/.test(payload)) {\n        if (payload.length > 1024 * 1024 * 1.999 && myBlob !== toString) {\n            payload = dataUrlToBlob(payload);\n            mimeType = payload.type || defaultMime;\n        } else {\n            return navigator.msSaveBlob // IE10 can't do a[download], only Blobs:\n                ? navigator.msSaveBlob(dataUrlToBlob(payload), fileName)\n                : saver(payload); // everyone else can save dataURLs un-processed\n        }\n    }\n\n    blob = payload instanceof myBlob ? payload : new myBlob([payload], { type: mimeType });\n\n    function dataUrlToBlob(strUrl) {\n        let parts = strUrl.split(/[:;,]/),\n            type = parts[1],\n            decoder = parts[2] === \"base64\" ? atob : decodeURIComponent,\n            binData = decoder(parts.pop()),\n            mx = binData.length,\n            i = 0,\n            uiArr = new Uint8Array(mx);\n\n        for (i; i < mx; ++i) {\n            uiArr[i] = binData.charCodeAt(i);\n        }\n\n        return new myBlob([uiArr], { type });\n    }\n\n    function saver(url, winMode) {\n        if (\"download\" in anchor) {\n            //html5 A[download]\n            anchor.href = url;\n            anchor.setAttribute(\"download\", fileName);\n            anchor.className = \"download-js-link\";\n            anchor.innerText = _lt(\"downloading...\");\n            anchor.style.display = \"none\";\n            document.body.appendChild(anchor);\n            setTimeout(() => {\n                anchor.click();\n                document.body.removeChild(anchor);\n                if (winMode === true) {\n                    setTimeout(() => {\n                        self.URL.revokeObjectURL(anchor.href);\n                    }, 250);\n                }\n            }, 66);\n            return true;\n        }\n\n        // handle non-a[download] safari as best we can:\n        if (/(Version)\\/(\\d+)\\.(\\d+)(?:\\.(\\d+))?.*Safari\\//.test(navigator.userAgent)) {\n            url = url.replace(/^data:([\\w\\/\\-+]+)/, defaultMime);\n            if (!window.open(url)) {\n                // popup blocked, offer direct download:\n                if (\n                    confirm(\n                        \"Displaying New Document\\n\\nUse Save As... to download, then click back to return to this page.\"\n                    )\n                ) {\n                    location.href = url;\n                }\n            }\n            return true;\n        }\n\n        //do iframe dataURL download (old ch+FF):\n        let f = document.createElement(\"iframe\");\n        document.body.appendChild(f);\n\n        if (!winMode) {\n            // force a mime that will download:\n            url = `data:${url.replace(/^data:([\\w\\/\\-+]+)/, defaultMime)}`;\n        }\n        f.src = url;\n        setTimeout(() => {\n            document.body.removeChild(f);\n        }, 333);\n    }\n\n    if (navigator.msSaveBlob) {\n        // IE10+ : (has Blob, but not a[download] or URL)\n        return navigator.msSaveBlob(blob, fileName);\n    }\n\n    if (self.URL) {\n        // simple fast and modern way using Blob and URL:\n        saver(self.URL.createObjectURL(blob), true);\n    } else {\n        // handle non-Blob()+non-URL browsers:\n        if (typeof blob === \"string\" || blob.constructor === toString) {\n            try {\n                return saver(`data:${mimeType};base64,${self.btoa(blob)}`);\n            } catch (y) {\n                return saver(`data:${mimeType},${encodeURIComponent(blob)}`);\n            }\n        }\n\n        // Blob but not URL support:\n        reader = new FileReader();\n        reader.onload = function () {\n            saver(this.result);\n        };\n        reader.readAsDataURL(blob);\n    }\n    return true;\n}\n\n// -----------------------------------------------------------------------------\n// Exported download function\n// -----------------------------------------------------------------------------\n\n/**\n * Download a file\n *\n * Note: the actual implementation is certainly unconventional, but sadly\n * necessary to be able to test code using the download function\n *\n * @param {*} options\n * @returns {Promise<any>}\n */\nexport function download(options) {\n    return download._download(options);\n}\n\ndownload._download = (options) => {\n    return new Promise((resolve, reject) => {\n        const xhr = new browser.XMLHttpRequest();\n        let data;\n        if (Object.prototype.hasOwnProperty.call(options, \"form\")) {\n            xhr.open(options.form.method, options.form.action);\n            data = new FormData(options.form);\n        } else {\n            xhr.open(\"POST\", options.url);\n            data = new FormData();\n            Object.entries(options.data).forEach((entry) => {\n                const [key, value] = entry;\n                data.append(key, value);\n            });\n        }\n        data.append(\"token\", \"dummy-because-api-expects-one\");\n        if (odoo.csrf_token) {\n            data.append(\"csrf_token\", odoo.csrf_token);\n        }\n        // IE11 wants this after xhr.open or it throws\n        xhr.responseType = \"blob\";\n        xhr.onload = () => {\n            const mimetype = xhr.response.type;\n            // In Odoo, the default mimetype, including for JSON errors is text/html (ref: http.py:Root.get_response )\n            // in that case, we have to assume the file is not valid, hence that there was an error\n            if (xhr.status === 200 && mimetype !== \"text/html\") {\n                // replace because apparently we send some C-D headers with a trailing \";\"\n                const header = (xhr.getResponseHeader(\"Content-Disposition\") || \"\").replace(\n                    /;$/,\n                    \"\"\n                );\n                const filename = header ? parse(header).parameters.filename : null;\n                _download(xhr.response, filename, mimetype);\n                return resolve(filename);\n\n            } else if (xhr.status === 502) { // If Odoo is behind another server (nginx)\n                reject(new ConnectionLostError());\n            } else {\n                const decoder = new FileReader();\n                decoder.onload = () => {\n                    const contents = decoder.result;\n                    const doc = new DOMParser().parseFromString(contents, \"text/html\");\n                    const nodes =\n                        doc.body.children.length === 0 ? doc.body.childNodes : doc.body.children;\n\n                    let error;\n                    try { // a Serialized python Error\n                        const node = nodes[1] || nodes[0];\n                        error = JSON.parse(node.textContent);\n                    } catch (e) {\n                        error = {\n                            message: \"Arbitrary Uncaught Python Exception\",\n                            data: {\n                                debug: `${xhr.status}` + `\\n` +\n                                   `${nodes.length > 0 ? nodes[0].textContent : \"\"}\n                                    ${nodes.length > 1 ? nodes[1].textContent : \"\"}`\n                            },\n\n                        };\n                    }\n                    error = makeErrorFromResponse(error);\n                    reject(error);\n                };\n                decoder.readAsText(xhr.response);\n            }\n        };\n        xhr.onerror = () => {\n            reject(new ConnectionLostError());\n        };\n        xhr.send(data);\n    });\n};\n", "/** @odoo-module **/\n\nimport { registry } from \"../registry\";\n\nfunction checkResponseStatus(response) {\n    if (response.status === 502) {\n        throw new Error(\"Failed to fetch\");\n    }\n}\n\nexport const httpService = {\n    start() {\n        return {\n            async get(route, readMethod = \"json\") {\n                const response = await fetch(route, { method: \"GET\" });\n                checkResponseStatus(response);\n                return response[readMethod]();\n            },\n            async post(route, params = {}, readMethod = \"json\") {\n                const formData = new FormData();\n                for (const key in params) {\n                    const value = params[key];\n                    if (Array.isArray(value) && value.length) {\n                        for (const val of value) {\n                            formData.append(key, val);\n                        }\n                    } else {\n                        formData.append(key, value);\n                    }\n                }\n                const info = {\n                    body: formData,\n                    method: \"POST\",\n                };\n                const response = await fetch(route, info);\n                checkResponseStatus(response);\n                return response[readMethod]();\n            },\n        };\n    },\n};\n\nregistry.category(\"services\").add(\"http\", httpService);\n", "/** @odoo-module **/\n\nimport { browser } from \"../browser/browser\";\nimport { registry } from \"../registry\";\n\n// -----------------------------------------------------------------------------\n// Errors\n// -----------------------------------------------------------------------------\nexport class RPCError extends Error {\n    constructor() {\n        super(...arguments);\n        this.name = \"RPC_ERROR\";\n        this.type = \"server\";\n        this.code = null;\n        this.data = null;\n        this.exceptionName = null;\n        this.subType = null;\n    }\n}\n\nexport class ConnectionLostError extends Error {}\n\nexport class ConnectionAbortedError extends Error {}\n\nexport class HTTPError extends Error {}\n\n// -----------------------------------------------------------------------------\n// Main RPC method\n// -----------------------------------------------------------------------------\nexport function makeErrorFromResponse(reponse) {\n    // Odoo returns error like this, in a error field instead of properly\n    // using http error codes...\n    const { code, data: errorData, message, type: subType } = reponse;\n    const error = new RPCError();\n    error.exceptionName = errorData.name;\n    error.subType = subType;\n    error.data = errorData;\n    error.message = message;\n    error.code = code;\n    return error;\n}\n\nexport function jsonrpc(env, rpcId, url, params, settings = {}) {\n    const bus = env.bus;\n    const XHR = browser.XMLHttpRequest;\n    const data = {\n        id: rpcId,\n        jsonrpc: \"2.0\",\n        method: \"call\",\n        params: params,\n    };\n    const request = settings.xhr || new XHR();\n    let rejectFn;\n    const promise = new Promise((resolve, reject) => {\n        rejectFn = reject;\n        if (!settings.silent) {\n            bus.trigger(\"RPC:REQUEST\", data.id);\n        }\n        // handle success\n        request.addEventListener(\"load\", () => {\n            if (request.status === 502) {\n                // If Odoo is behind another server (eg.: nginx)\n                if (!settings.silent) {\n                    bus.trigger(\"RPC:RESPONSE\", data.id);\n                }\n                reject(new ConnectionLostError());\n                return;\n            }\n            let params;\n            try {\n                params = JSON.parse(request.response);\n            } catch (_) {\n                // the response isn't json parsable, which probably means that the rpc request could\n                // not be handled by the server, e.g. PoolError('The Connection Pool Is Full')\n                if (!settings.silent) {\n                    bus.trigger(\"RPC:RESPONSE\", data.id);\n                }\n                return reject(new ConnectionLostError());\n            }\n            const { error: responseError, result: responseResult } = params;\n            if (!settings.silent) {\n                bus.trigger(\"RPC:RESPONSE\", data.id);\n            }\n            if (!responseError) {\n                return resolve(responseResult);\n            }\n            const error = makeErrorFromResponse(responseError);\n            reject(error);\n        });\n        // handle failure\n        request.addEventListener(\"error\", () => {\n            if (!settings.silent) {\n                bus.trigger(\"RPC:RESPONSE\", data.id);\n            }\n            reject(new ConnectionLostError());\n        });\n        // configure and send request\n        request.open(\"POST\", url);\n        request.setRequestHeader(\"Content-Type\", \"application/json\");\n        request.send(JSON.stringify(data));\n    });\n    /**\n     * @param {Boolean} rejectError Returns an error if true. Allows you to cancel\n     *                  ignored rpc's in order to unblock the ui and not display an error.\n     */\n    promise.abort = function (rejectError = true) {\n        if (request.abort) {\n            request.abort();\n        }\n        if (!settings.silent) {\n            bus.trigger(\"RPC:RESPONSE\", data.id);\n        }\n        if (rejectError) {\n            rejectFn(new ConnectionAbortedError(\"XmlHttpRequestError abort\"));\n        }\n    };\n    return promise;\n}\n\n// -----------------------------------------------------------------------------\n// RPC service\n// -----------------------------------------------------------------------------\nexport const rpcService = {\n    async: true,\n    start(env) {\n        let rpcId = 0;\n        return function rpc(route, params = {}, settings) {\n            return jsonrpc(env, rpcId++, route, params, settings);\n        };\n    },\n};\n\nregistry.category(\"services\").add(\"rpc\", rpcService);\n", "/** @odoo-module **/\n\nconst { Component, hooks } = owl;\n\nexport class Notification extends Component {\n    setup() {\n        if (this.props.onClose) {\n            hooks.onWillUnmount(() => this.props.onClose());\n        }\n    }\n\n    shouldUpdate() {\n        return false;\n    }\n\n    get className() {\n        let className;\n        switch (this.props.type) {\n            case \"danger\":\n                className = \"bg-danger\";\n                break;\n            case \"warning\":\n                className = \"bg-warning\";\n                break;\n            case \"success\":\n                className = \"bg-success\";\n                break;\n            case \"info\":\n                className = \"bg-info\";\n                break;\n        }\n        return className ? `${className} ${this.props.className}` : this.props.className;\n    }\n}\n\nNotification.template = \"web.NotificationWowl\";\nNotification.props = {\n    message: {\n        validate: (m) => {\n            return (\n                typeof m === \"string\" || (typeof m === \"object\" && typeof m.toString === \"function\")\n            );\n        }\n    },\n    title: { type: [String, Boolean, { toString: Function }], optional: true },\n    type: {\n        type: String,\n        optional: true,\n        validate: (t) => [\"warning\", \"danger\", \"success\", \"info\"].includes(t)\n    },\n    messageIsHtml: { type: Boolean, optional: true },\n    className: { type: String, optional: true },\n    buttons: {\n        type: Array,\n        element: {\n            type: Object,\n            shape: {\n                name: { type: String },\n                icon: { type: String, optional: true },\n                primary: { type: Boolean, optional: true },\n                onClick: Function\n            }\n        }\n    },\n    onClose: { type: Function, optional: true }\n};\nNotification.defaultProps = {\n    buttons: [],\n    className: \"\",\n    messageIsHtml: false,\n    type: \"warning\"\n};\n", "/** @odoo-module **/\n\nimport { Notification } from \"./notification\";\n\nconst { Component, tags } = owl;\n\nexport class NotificationContainer extends Component {\n    setup() {\n        // this works, but then this component cannot be unmounted, then\n        // remounted. would need a destroyed hook different from willunmount\n        this.props.bus.on(\"UPDATE\", this, this.render);\n    }\n}\n\nNotificationContainer.template = tags.xml`\n    <div class=\"o_notification_manager\">\n        <t t-foreach=\"props.notifications\" t-as=\"notification\" t-key=\"notification.id\">\n            <Notification\n                t-props=\"notification.props\"\n                t-transition=\"o_notification_fade\"\n                t-on-close=\"notification.close()\"\n            />\n        </t>\n    </div>`;\nNotificationContainer.components = { Notification };\n", "/** @odoo-module **/\n\nimport { browser } from \"../browser/browser\";\nimport { registry } from \"../registry\";\nimport { NotificationContainer } from \"./notification_container\";\n\nconst { EventBus } = owl.core;\n\nconst AUTOCLOSE_DELAY = 4000;\n\n/**\n * @typedef {Object} NotificationButton\n * @property {string} name\n * @property {string} [icon]\n * @property {boolean} [primary=false]\n * @property {function(): void} onClick\n *\n * @typedef {Object} NotificationOptions\n * @property {string} [title]\n * @property {\"warning\" | \"danger\" | \"success\" | \"info\"} [type]\n * @property {boolean} [sticky=false]\n * @property {string} [className]\n * @property {function(): void} [onClose]\n * @property {NotificationButton[]} [buttons]\n */\n\nexport const notificationService = {\n    start() {\n        let notifId = 0;\n        let notifications = [];\n        const bus = new EventBus();\n\n        registry.category(\"main_components\").add(\"NotificationContainer\", {\n            Component: NotificationContainer,\n            props: { bus, notifications },\n        });\n\n        /**\n         * @param {string} message\n         * @param {NotificationOptions} [options]\n         */\n        function add(message, options = {}) {\n            const id = ++notifId;\n            const props = Object.assign({}, options, { message });\n            const sticky = props.sticky;\n            delete props.sticky;\n            const closeFn = () => close(id);\n            const notification = {\n                id,\n                props,\n                close: closeFn,\n            };\n            notifications.push(notification);\n            bus.trigger(\"UPDATE\");\n            if (!sticky) {\n                browser.setTimeout(closeFn, AUTOCLOSE_DELAY);\n            }\n            return closeFn;\n        }\n\n        function close(id) {\n            const index = notifications.findIndex((n) => n.id === id);\n            if (index > -1) {\n                notifications.splice(index, 1);\n                bus.trigger(\"UPDATE\");\n            }\n        }\n\n        return { add };\n    },\n};\n\nregistry.category(\"services\").add(\"notification\", notificationService);\n", "/** @odoo-module **/\n\nimport { registry } from \"./registry\";\n\n/**\n * This ORM service is the standard way to interact with the ORM in python from\n * the javascript codebase.\n */\n\n// -----------------------------------------------------------------------------\n// Helper\n// -----------------------------------------------------------------------------\nfunction assignOptions(kwargs, options, whileList) {\n    for (let elem of whileList) {\n        if (elem in options) {\n            kwargs[elem] = options[elem];\n        }\n    }\n}\n\n// -----------------------------------------------------------------------------\n// ORM\n// -----------------------------------------------------------------------------\n\n/**\n * One2many and Many2many fields expect a special command to manipulate the\n * relation they implement.\n *\n * Internally, each command is a 3-elements tuple where the first element is a\n * mandatory integer that identifies the command, the second element is either\n * the related record id to apply the command on (commands update, delete,\n * unlink and link) either 0 (commands create, clear and set), the third\n * element is either the ``values`` to write on the record (commands create\n * and update) either the new ``ids`` list of related records (command set),\n * either 0 (commands delete, unlink, link, and clear).\n */\nexport const Commands = {\n    create(virtualID, values) {\n        delete values.id;\n        return [0, virtualID || false, values];\n    },\n\n    update(id, values) {\n        delete values.id;\n        return [1, id, values];\n    },\n\n    delete(id) {\n        return [2, id, false];\n    },\n\n    forget(id) {\n        return [3, id, false];\n    },\n\n    linkTo(id) {\n        return [4, id, false];\n    },\n\n    deleteAll() {\n        return [5, false, false];\n    },\n\n    replaceWith(ids) {\n        return [6, false, ids];\n    },\n};\n\nfunction validateModel(value) {\n    if (typeof value !== \"string\" || value.length === 0) {\n        throw new Error(`Invalid model name: ${value}`);\n    }\n}\nfunction validatePrimitiveList(name, type, value) {\n    if (!Array.isArray(value) || value.some((val) => typeof val !== type)) {\n        throw new Error(`Invalid ${name} list: ${value}`);\n    }\n}\nfunction validateObject(name, obj) {\n    if (typeof obj !== \"object\" || obj === null || Array.isArray(obj)) {\n        throw new Error(`${name} should be an object`);\n    }\n}\nfunction validateArray(name, array) {\n    if (!Array.isArray(array)) {\n        throw new Error(`${name} should be an array`);\n    }\n}\n\nexport class ORM {\n    constructor(rpc, user) {\n        this.rpc = rpc;\n        this.user = user;\n        this._silent = false;\n    }\n\n    get silent() {\n        return Object.assign(Object.create(this), { _silent: true });\n    }\n\n    call(model, method, args = [], kwargs = {}) {\n        validateModel(model);\n        let url = `/web/dataset/call_kw/${model}/${method}`;\n        const fullContext = Object.assign({}, this.user.context, kwargs.context || {});\n        const fullKwargs = Object.assign({}, kwargs, { context: fullContext });\n        let params = {\n            model,\n            method,\n            args,\n            kwargs: fullKwargs,\n        };\n        return this.rpc(url, params, { silent: this._silent });\n    }\n\n    create(model, state, ctx) {\n        validateObject(\"state\", state);\n        return this.call(model, \"create\", [state], { context: ctx });\n    }\n\n    read(model, ids, fields, ctx) {\n        validatePrimitiveList(\"ids\", \"number\", ids);\n        if (fields) {\n            validatePrimitiveList(\"fields\", \"string\", fields);\n        }\n        if (!ids.length) {\n            return Promise.resolve([]);\n        }\n        return this.call(model, \"read\", [ids, fields], { context: ctx });\n    }\n\n    readGroup(model, domain, fields, groupby, options = {}, ctx = {}) {\n        validateArray(\"domain\", domain);\n        validatePrimitiveList(\"fields\", \"string\", fields);\n        validatePrimitiveList(\"groupby\", \"string\", groupby);\n        const kwargs = {\n            domain,\n            groupby,\n            fields,\n            context: ctx,\n        };\n        assignOptions(kwargs, options, [\"lazy\", \"offset\", \"orderby\", \"limit\"]);\n        return this.call(model, \"read_group\", [], kwargs);\n    }\n\n    search(model, domain, options = {}, ctx = {}) {\n        validateArray(\"domain\", domain);\n        const kwargs = {\n            context: ctx,\n        };\n        assignOptions(kwargs, options, [\"offset\", \"limit\", \"order\"]);\n        return this.call(model, \"search\", [domain], kwargs);\n    }\n\n    searchRead(model, domain, fields, options = {}, ctx = {}) {\n        validateArray(\"domain\", domain);\n        if (fields) {\n            validatePrimitiveList(\"fields\", \"string\", fields);\n        }\n        const kwargs = { context: ctx, domain, fields };\n        assignOptions(kwargs, options, [\"offset\", \"limit\", \"order\"]);\n        return this.call(model, \"search_read\", [], kwargs);\n    }\n\n    unlink(model, ids, ctx) {\n        validatePrimitiveList(\"ids\", \"number\", ids);\n        if (!ids.length) {\n            return true;\n        }\n        return this.call(model, \"unlink\", [ids], { context: ctx });\n    }\n\n    webReadGroup(model, domain, fields, groupby, options = {}, ctx = {}) {\n        validateArray(\"domain\", domain);\n        validatePrimitiveList(\"fields\", \"string\", fields);\n        validatePrimitiveList(\"groupby\", \"string\", groupby);\n        const kwargs = {\n            domain,\n            groupby,\n            fields,\n            context: ctx,\n        };\n        assignOptions(kwargs, options, [\"lazy\", \"offset\", \"orderby\", \"limit\"]);\n        return this.call(model, \"web_read_group\", [], kwargs);\n    }\n\n    webSearchRead(model, domain, fields, options = {}, ctx = {}) {\n        validateArray(\"domain\", domain);\n        validatePrimitiveList(\"fields\", \"string\", fields);\n        const kwargs = { context: ctx, domain, fields };\n        assignOptions(kwargs, options, [\"offset\", \"limit\", \"order\"]);\n        return this.call(model, \"web_search_read\", [], kwargs);\n    }\n\n    write(model, ids, data, ctx) {\n        validatePrimitiveList(\"ids\", \"number\", ids);\n        validateObject(\"data\", data);\n        return this.call(model, \"write\", [ids, data], { context: ctx });\n    }\n}\n\n/**\n * Note:\n *\n * when we will need a way to configure a rpc (for example, to setup a \"shadow\"\n * flag, or some way of not displaying errors), we can use the following api:\n *\n * this.orm = useService('orm');\n *\n * ...\n *\n * const result = await this.orm.withOption({shadow: true}).read('res.partner', [id]);\n */\nexport const ormService = {\n    dependencies: [\"rpc\", \"user\"],\n    async: [\n        \"call\",\n        \"create\",\n        \"read\",\n        \"readGroup\",\n        \"search\",\n        \"searchRead\",\n        \"unlink\",\n        \"webSearchRead\",\n        \"write\",\n    ],\n    start(env, { rpc, user }) {\n        return new ORM(rpc, user);\n    },\n};\n\nregistry.category(\"services\").add(\"orm\", ormService);\n", "/** @odoo-module **/\n\nimport { usePosition } from \"../position/position_hook\";\n\nconst { Component } = owl;\n\nexport class Popover extends Component {\n    setup() {\n        usePosition(this.props.target, {\n            margin: 16,\n            position: this.props.position,\n        });\n    }\n}\n\nPopover.template = \"web.PopoverWowl\";\nPopover.defaultProps = {\n    position: \"bottom\",\n};\nPopover.props = {\n    popoverClass: {\n        optional: true,\n        type: String,\n    },\n    position: {\n        type: String,\n        validate: (p) => [\"top\", \"bottom\", \"left\", \"right\"].includes(p),\n    },\n    target: HTMLElement,\n};\n", "/** @odoo-module **/\n\nimport { Popover } from \"./popover\";\n\nconst { Component } = owl;\nconst { useExternalListener, useState } = owl.hooks;\nconst { xml } = owl.tags;\n\nclass PopoverController extends Component {\n    setup() {\n        this.state = useState({ displayed: false });\n        this.targetObserver = new MutationObserver(this.onTargetMutate.bind(this));\n\n        useExternalListener(window, \"click\", this.onClickAway, { capture: true });\n    }\n    mounted() {\n        this.targetObserver.observe(this.target.parentElement, { childList: true });\n    }\n    willUnmount() {\n        this.targetObserver.disconnect();\n    }\n\n    shouldUpdate() {\n        return false;\n    }\n\n    get popoverProps() {\n        return {\n            target: this.target,\n            position: this.props.position,\n            popoverClass: this.props.popoverClass,\n        };\n    }\n    get target() {\n        if (typeof this.props.target === \"string\") {\n            return document.querySelector(this.props.target);\n        } else {\n            return this.props.target;\n        }\n    }\n    onClickAway(ev) {\n        if (this.target.contains(ev.target) || ev.target.closest(\".o_popover\")) {\n            return;\n        }\n        if (this.props.closeOnClickAway) {\n            this.props.close();\n        }\n    }\n    onTargetMutate() {\n        const target = this.target;\n        if (!target || !target.parentElement) {\n            this.props.close();\n        }\n    }\n}\nPopoverController.components = { Popover };\nPopoverController.defaultProps = {\n    alwaysDisplayed: false,\n    closeOnClickAway: true,\n};\nPopoverController.template = xml/*xml*/ `\n    <Popover t-props=\"popoverProps\" t-on-popover-closed=\"props.close()\">\n        <t t-component=\"props.Component\" t-props=\"props.props\" />\n    </Popover>\n`;\n\nexport class PopoverContainer extends Component {\n    setup() {\n        this.props.bus.on(\"UPDATE\", this, this.render);\n    }\n}\nPopoverContainer.components = { PopoverController };\nPopoverContainer.template = xml`\n    <div class=\"o_popover_container\">\n        <t t-foreach=\"Object.values(props.popovers)\" t-as=\"popover\" t-key=\"popover.id\">\n            <PopoverController t-props=\"popover\" />\n        </t>\n    </div>\n`;\n", "/** @odoo-module **/\n\nimport { useService } from \"@web/core/utils/hooks\";\n\nconst { onWillUnmount, useComponent } = owl.hooks;\n\nexport function usePopover() {\n    const removeFns = new Set();\n    const service = useService(\"popover\");\n    const component = useComponent();\n\n    onWillUnmount(function () {\n        for (const removeFn of removeFns) {\n            removeFn();\n        }\n        removeFns.clear();\n    });\n    return {\n        /**\n         * Signals the manager to add a popover.\n         *\n         * @param {string | HTMLElement}    target\n         * @param {any}                     Component\n         * @param {Object}                  props\n         * @param {Object}                  [options]\n         * @param {boolean}                 [options.closeOnClickAway=true]\n         * @param {function()}              [options.onClose]\n         * @param {string}                  [options.popoverClass]\n         * @param {string}                  [options.position]\n         * @returns {function()}\n         */\n        add(target, Component, props, options = {}) {\n            const newOptions = Object.create(options);\n            newOptions.onClose = function () {\n                removeFns.delete(removeFn);\n                if (options.onClose && component.__owl__.status !== 5 /* DESTROYED */) {\n                    options.onClose();\n                }\n            };\n\n            const removeFn = service.add(target, Component, props, newOptions);\n            removeFns.add(removeFn);\n            return removeFn;\n        },\n    };\n}\n", "/** @odoo-module **/\n\nimport { registry } from \"../registry\";\nimport { PopoverContainer } from \"./popover_container\";\n\nconst { EventBus } = owl.core;\n\nexport const popoverService = {\n    start() {\n        let nextId = 0;\n        const popovers = {};\n        const bus = new EventBus();\n\n        registry\n            .category(\"main_components\")\n            .add(\"PopoverContainer\", { Component: PopoverContainer, props: { bus, popovers } });\n\n        /**\n         * Signals the manager to add a popover.\n         *\n         * @param {string | HTMLElement}    target\n         * @param {any}                     Component\n         * @param {Object}                  props\n         * @param {Object}                  [options]\n         * @param {boolean}                 [options.closeOnClickAway=true]\n         * @param {function(): void}        [options.onClose]\n         * @param {string}                  [options.popoverClass]\n         * @param {string}                  [options.position]\n         * @returns {function(): void}\n         */\n        function add(target, Component, props, options = {}) {\n            const id = ++nextId;\n            const closeFn = () => close(id);\n            const popover = {\n                id,\n                target,\n                Component,\n                props,\n                close: closeFn,\n                onClose: options.onClose,\n                position: options.position,\n                popoverClass: options.popoverClass,\n                closeOnClickAway: options.closeOnClickAway,\n            };\n            popovers[id] = popover;\n            bus.trigger(\"UPDATE\");\n            return closeFn;\n        }\n\n        function close(id) {\n            if (id in popovers) {\n                const popover = popovers[id];\n                if (popover.onClose) {\n                    popover.onClose();\n                }\n                delete popovers[id];\n                bus.trigger(\"UPDATE\");\n            }\n        }\n\n        return { add };\n    },\n};\n\nregistry.category(\"services\").add(\"popover\", popoverService);\n", "/** @odoo-module */\n\nimport { onDestroyed, useEffect } from \"@web/core/utils/hooks\";\nimport { throttleForAnimation } from \"../utils/timing\";\n\nconst { core, hooks } = owl;\nconst { useComponent, useExternalListener, useRef, useSubEnv, onWillUnmount } = hooks;\nconst { EventBus } = core;\n\n/**\n * @typedef {{\n *  popper?: string;\n *  container?: HTMLElement;\n *  margin?: number;\n *  position?: Position;\n * }} Options\n *\n * @typedef {{\n *  directions: (DirectionsDataKey)[];\n *  variants: (VariantsDataKey)[];\n *  get: (d?: DirectionsDataKey, v?: VariantsDataKey, containerRestricted?: boolean) => PositioningSolution | null;\n * }} Positioning\n *\n * @typedef {keyof DirectionsData} DirectionsDataKey\n * @typedef {{\n *  t: number;\n *  b: number;\n *  l: number;\n *  r: number;\n * }} DirectionsData\n *\n * @typedef {keyof VariantsData} VariantsDataKey\n * @typedef {{\n *  vs: number;\n *  vm: number;\n *  ve: number;\n *  hs: number;\n *  hm: number;\n *  he: number;\n * }} VariantsData\n *\n * @typedef {\"top\" | \"left\" | \"bottom\" | \"right\"} Direction\n * @typedef {\"start\" | \"middle\" | \"end\"} Variant\n *\n * @typedef {{[direction in Direction]: string}} DirectionFlipOrder\n *  values are successive DirectionsDataKey represented as a single string\n *\n * @typedef {{[variant in Variant]: string}} VariantFlipOrder\n *  values are successive VariantsDataKey represented as a single string\n *\n * @typedef {Direction\n *  | \"top-start\" | \"top-middle\" | \"top-end\"\n *  | \"left-start\" | \"left-middle\" | \"left-end\"\n *  | \"right-start\" | \"right-middle\" | \"right-end\"\n *  | \"bottom-start\" | \"bottom-middle\" | \"bottom-end\"} Position\n *\n * @typedef {{ className: string, top: number, left: number }} PositioningSolution\n */\n\nconst POPPER_CLASS = \"o-popper-position\";\n/** @type DirectionFlipOrder */\nconst DIRECTION_FLIP_ORDER = { top: \"tbrl\", right: \"rltb\", bottom: \"btrl\", left: \"lrbt\" };\n/** @type VariantFlipOrder */\nconst VARIANT_FLIP_ORDER = { start: \"sme\", middle: \"mse\", end: \"ems\" };\n\n/** @type {Options} */\nexport const DEFAULTS = {\n    margin: 0,\n    position: \"bottom\",\n};\n\n/**\n * Computes positioning data used to determine each possible position\n * based on the reference, popper, and container sizes.\n * Particularly, a popper must not overflow the container in any direction,\n * it should actually stay at `margin` distance from the border to look good.\n *\n * @param {HTMLElement} reference\n * @param {HTMLElement} popper\n * @param {Options} options\n * @returns {Positioning} a positioning object containing:\n *  - ascendingly sorted directions and variants\n *  - a method returning style to apply to the popper for a given direction and variant\n */\nexport function computePositioning(reference, popper, options) {\n    const { container, margin, position } = options;\n\n    // Retrieve directions and variants\n    const [directionKey, variantKey = \"middle\"] = position.split(\"-\");\n    const directions = DIRECTION_FLIP_ORDER[directionKey];\n    const variants = VARIANT_FLIP_ORDER[variantKey];\n\n    // Boxes\n    const popBox = popper.getBoundingClientRect();\n    const refBox = reference.getBoundingClientRect();\n    const contBox = container.getBoundingClientRect();\n\n    const containerIsHTMLNode = container === document.firstElementChild;\n\n    // Compute positioning data\n    /** @type {DirectionsData} */\n    const directionsData = {\n        t: refBox.top - popBox.height - margin,\n        b: refBox.bottom + margin,\n        r: refBox.right + margin,\n        l: refBox.left - popBox.width - margin,\n    };\n    /** @type {VariantsData} */\n    const variantsData = {\n        vs: refBox.left,\n        vm: refBox.left + refBox.width / 2 + -popBox.width / 2,\n        ve: refBox.right - popBox.width,\n        hs: refBox.top,\n        hm: refBox.top + refBox.height / 2 + -popBox.height / 2,\n        he: refBox.bottom - popBox.height,\n    };\n\n    function get(d = directions[0], v = variants[0], containerRestricted = false) {\n        const vertical = [\"t\", \"b\"].includes(d);\n        const variantPrefix = vertical ? \"v\" : \"h\";\n        const directionValue = directionsData[d];\n        const variantValue = variantsData[variantPrefix + v];\n\n        if (containerRestricted) {\n            const [directionSize, variantSize] = vertical\n                ? [popBox.height + margin, popBox.width]\n                : [popBox.width, popBox.height + margin];\n            let [directionMin, directionMax] = vertical\n                ? [contBox.top, contBox.bottom]\n                : [contBox.left, contBox.right];\n            let [variantMin, variantMax] = vertical\n                ? [contBox.left, contBox.right]\n                : [contBox.top, contBox.bottom];\n\n            if (containerIsHTMLNode) {\n                if (vertical) {\n                    directionMin += container.scrollTop;\n                    directionMax += container.scrollTop;\n                } else {\n                    variantMin += container.scrollTop;\n                    variantMax += container.scrollTop;\n                }\n            }\n\n            // Abort if outside container boundaries\n            const directionOverflow =\n                directionValue < directionMin || directionValue + directionSize > directionMax;\n            const variantOverflow =\n                variantValue < variantMin || variantValue + variantSize > variantMax;\n            if (directionOverflow || variantOverflow) {\n                return null;\n            }\n        }\n\n        const positioning = vertical\n            ? {\n                  top: directionValue,\n                  left: variantValue,\n              }\n            : {\n                  top: variantValue,\n                  left: directionValue,\n              };\n        return { ...positioning, className: `${POPPER_CLASS}--${d}${v}` };\n    }\n\n    return {\n        directions,\n        variants,\n        get,\n    };\n}\n\n/**\n * This method will try to position the popper as requested (according to options).\n * If the requested position does not fit the container, other positions will be\n * tried in different direction and variant flip orders (depending on the requested position).\n * If no position is found that fits the container, the requested position stays used.\n *\n * When the final position is applied, a corresponding CSS class is also added to the popper.\n * This could be used to further styling.\n *\n * @param {HTMLElement} reference\n * @param {HTMLElement} popper\n * @param {Options} options\n */\nfunction reposition(reference, popper, options) {\n    options = {\n        container: document.documentElement,\n        ...DEFAULTS,\n        ...options,\n    };\n\n    // Reset all existing popper classes and only leave it as standalone\n    for (const popperClass of popper.classList) {\n        if (popperClass.startsWith(POPPER_CLASS)) {\n            popper.classList.remove(popperClass);\n        }\n    }\n    popper.classList.add(POPPER_CLASS);\n\n    // Compute positioning and find first match\n    const positioning = computePositioning(reference, popper, options);\n    for (const d of positioning.directions) {\n        for (const v of positioning.variants) {\n            const posData = positioning.get(d, v, true);\n            if (!posData) {\n                continue;\n            }\n\n            // From now, a position match have been found.\n            // Apply styles\n            const { className, top, left } = posData;\n            popper.classList.add(className);\n            popper.style.top = `${top}px`;\n            popper.style.left = `${left}px`;\n            return;\n        }\n    }\n\n    // use the given `position` because no position fits\n    const { className, top, left } = positioning.get();\n    popper.classList.add(className);\n    popper.style.top = `${top}px`;\n    popper.style.left = `${left}px`;\n}\n\nconst POSITION_BUS = Symbol(\"position-bus\");\n\n/**\n * Makes sure that the `popper` element is always\n * placed at `position` from the `reference` element.\n * If doing so the `popper` element is clipped off `container`,\n * sensible fallback positions are tried.\n * If all of fallback positions are also clipped off `container`,\n * the original position is used.\n *\n * @param {HTMLElement | (()=>HTMLElement)} reference\n * @param {Options} options\n */\nexport function usePosition(reference, options) {\n    options = { ...DEFAULTS, ...options };\n    const { popper } = options;\n    const popperRef = popper ? useRef(popper) : useComponent();\n    const getReference = typeof reference === \"function\" ? reference : () => reference;\n    const update = () => {\n        const ref = getReference();\n        if (popperRef.el && ref) {\n            reposition(ref, popperRef.el, options);\n        }\n    };\n    const component = useComponent();\n    const bus = component.env[POSITION_BUS] || new EventBus();\n    bus.on(\"update\", component, update);\n    onDestroyed(() => bus.off(\"update\", component));\n    useEffect(() => bus.trigger(\"update\"));\n    if (!(POSITION_BUS in component.env)) {\n        useSubEnv({ [POSITION_BUS]: bus });\n        const throttledUpdate = throttleForAnimation(() => bus.trigger(\"update\"));\n        useExternalListener(document, \"scroll\", throttledUpdate, { capture: true });\n        useExternalListener(window, \"resize\", throttledUpdate);\n        onWillUnmount(throttledUpdate.cancel);\n    }\n}\n", "/** @odoo-module **/\n\nimport { evaluate } from \"./py_interpreter\";\nimport { parse } from \"./py_parser\";\nimport { tokenize } from \"./py_tokenizer\";\n\nexport { evaluate } from \"./py_interpreter\";\nexport { parse } from \"./py_parser\";\nexport { tokenize } from \"./py_tokenizer\";\nexport { formatAST } from \"./py_utils\";\n\n/**\n * @typedef { import(\"./py_tokenizer\").Token } Token\n * @typedef { import(\"./py_parser\").AST } AST\n */\n\n/**\n * Parses an expression into a valid AST representation\n \n * @param {string} expr \n * @returns { AST }\n */\nexport function parseExpr(expr) {\n    const tokens = tokenize(expr);\n    return parse(tokens);\n}\n\n/**\n * Evaluates a python expression\n *\n * @param {string} expr\n * @param {Object} [context]\n * @returns {any}\n */\nexport function evaluateExpr(expr, context = {}) {\n    const ast = parseExpr(expr);\n    return evaluate(ast, context);\n}\n", "/** @odoo-module **/\n\nimport { PyDate, PyDateTime, PyRelativeDelta, PyTime, PyTimeDelta } from \"./py_date\";\n\nexport const BUILTINS = {\n    /**\n     * @param {any} value\n     * @returns {boolean}\n     */\n    bool(value) {\n        switch (typeof value) {\n            case \"number\":\n                return value !== 0;\n            case \"string\":\n                return value !== \"\";\n            case \"boolean\":\n                return value;\n            case \"object\":\n                if (value === null) {\n                    return false;\n                }\n                if (value.isTrue) {\n                    return value.isTrue();\n                }\n                return true;\n        }\n        return true;\n    },\n\n    time: {\n        strftime(format) {\n            return PyDateTime.now().strftime(format);\n        },\n    },\n\n    context_today() {\n        return PyDate.today();\n    },\n\n    get current_date() {\n        // deprecated: today should be prefered\n        return this.today;\n    },\n\n    get today() {\n        return PyDate.today().strftime(\"%Y-%m-%d\");\n    },\n\n    get now() {\n        return PyDateTime.now().strftime(\"%Y-%m-%d %H:%M:%S\");\n    },\n\n    datetime: {\n        time: PyTime,\n        timedelta: PyTimeDelta,\n        datetime: PyDateTime,\n        date: PyDate,\n    },\n\n    relativedelta: PyRelativeDelta,\n};\n", "/** @odoo-module **/\n\nimport { parseArgs } from \"./py_parser\";\n\n// -----------------------------------------------------------------------------\n// Errors\n// -----------------------------------------------------------------------------\n\nexport class AssertionError extends Error {}\nexport class ValueError extends Error {}\nexport class NotSupportedError extends Error {}\n\n// -----------------------------------------------------------------------------\n// helpers\n// -----------------------------------------------------------------------------\n\nfunction fmt2(n) {\n    return String(n).padStart(2, \"0\");\n}\nfunction fmt4(n) {\n    return String(n).padStart(4, \"0\");\n}\n\n/**\n * computes (Math.floor(a/b), a%b and passes that to the callback.\n *\n * returns the callback's result\n */\nfunction divmod(a, b, fn) {\n    let mod = a % b;\n    // in python, sign(a % b) === sign(b). Not in JS. If wrong side, add a\n    // round of b\n    if ((mod > 0 && b < 0) || (mod < 0 && b > 0)) {\n        mod += b;\n    }\n    return fn(Math.floor(a / b), mod);\n}\n\nfunction assert(bool, message = \"AssertionError\") {\n    if (!bool) {\n        throw new AssertionError(message);\n    }\n}\n\nconst DAYS_IN_MONTH = [null, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nconst DAYS_BEFORE_MONTH = [null];\n\nfor (let dbm = 0, i = 1; i < DAYS_IN_MONTH.length; ++i) {\n    DAYS_BEFORE_MONTH.push(dbm);\n    dbm += DAYS_IN_MONTH[i];\n}\n\nfunction daysInMonth(year, month) {\n    if (month === 2 && isLeap(year)) {\n        return 29;\n    }\n    return DAYS_IN_MONTH[month];\n}\n\nfunction isLeap(year) {\n    return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n}\n\nfunction daysBeforeYear(year) {\n    const y = year - 1;\n    return y * 365 + Math.floor(y / 4) - Math.floor(y / 100) + Math.floor(y / 400);\n}\n\nfunction daysBeforeMonth(year, month) {\n    const postLeapFeb = month > 2 && isLeap(year);\n    return DAYS_BEFORE_MONTH[month] + (postLeapFeb ? 1 : 0);\n}\n\nfunction ymd2ord(year, month, day) {\n    const dim = daysInMonth(year, month);\n    if (!(1 <= day && day <= dim)) {\n        throw new ValueError(`day must be in 1..${dim}`);\n    }\n    return daysBeforeYear(year) + daysBeforeMonth(year, month) + day;\n}\n\nconst DI400Y = daysBeforeYear(401);\nconst DI100Y = daysBeforeYear(101);\nconst DI4Y = daysBeforeYear(5);\n\nfunction ord2ymd(n) {\n    --n;\n    let n400, n100, n4, n1, n0;\n    divmod(n, DI400Y, function (_n400, n) {\n        n400 = _n400;\n        divmod(n, DI100Y, function (_n100, n) {\n            n100 = _n100;\n            divmod(n, DI4Y, function (_n4, n) {\n                n4 = _n4;\n                divmod(n, 365, function (_n1, n) {\n                    n1 = _n1;\n                    n0 = n;\n                });\n            });\n        });\n    });\n\n    n = n0;\n    const year = n400 * 400 + 1 + n100 * 100 + n4 * 4 + n1;\n    if (n1 == 4 || n100 == 100) {\n        assert(n0 === 0);\n        return {\n            year: year - 1,\n            month: 12,\n            day: 31,\n        };\n    }\n\n    let leapyear = n1 === 3 && (n4 !== 24 || n100 == 3);\n    assert(leapyear == isLeap(year));\n    let month = (n + 50) >> 5;\n    let preceding = DAYS_BEFORE_MONTH[month] + (month > 2 && leapyear ? 1 : 0);\n    if (preceding > n) {\n        --month;\n        preceding -= DAYS_IN_MONTH[month] + (month === 2 && leapyear ? 1 : 0);\n    }\n    n -= preceding;\n    return {\n        year: year,\n        month: month,\n        day: n + 1,\n    };\n}\n\n/**\n * Converts the stuff passed in into a valid date, applying overflows as needed\n */\nfunction tmxxx(year, month, day, hour, minute, second, microsecond) {\n    hour = hour || 0;\n    minute = minute || 0;\n    second = second || 0;\n    microsecond = microsecond || 0;\n\n    if (microsecond < 0 || microsecond > 999999) {\n        divmod(microsecond, 1000000, function (carry, ms) {\n            microsecond = ms;\n            second += carry;\n        });\n    }\n    if (second < 0 || second > 59) {\n        divmod(second, 60, function (carry, s) {\n            second = s;\n            minute += carry;\n        });\n    }\n    if (minute < 0 || minute > 59) {\n        divmod(minute, 60, function (carry, m) {\n            minute = m;\n            hour += carry;\n        });\n    }\n    if (hour < 0 || hour > 23) {\n        divmod(hour, 24, function (carry, h) {\n            hour = h;\n            day += carry;\n        });\n    }\n    // That was easy.  Now it gets muddy:  the proper range for day\n    // can't be determined without knowing the correct month and year,\n    // but if day is, e.g., plus or minus a million, the current month\n    // and year values make no sense (and may also be out of bounds\n    // themselves).\n    // Saying 12 months == 1 year should be non-controversial.\n    if (month < 1 || month > 12) {\n        divmod(month - 1, 12, function (carry, m) {\n            month = m + 1;\n            year += carry;\n        });\n    }\n    // Now only day can be out of bounds (year may also be out of bounds\n    // for a datetime object, but we don't care about that here).\n    // If day is out of bounds, what to do is arguable, but at least the\n    // method here is principled and explainable.\n    let dim = daysInMonth(year, month);\n    if (day < 1 || day > dim) {\n        // Move day-1 days from the first of the month.  First try to\n        // get off cheap if we're only one day out of range (adjustments\n        // for timezone alone can't be worse than that).\n        if (day === 0) {\n            --month;\n            if (month > 0) {\n                day = daysInMonth(year, month);\n            } else {\n                --year;\n                month = 12;\n                day = 31;\n            }\n        } else if (day == dim + 1) {\n            ++month;\n            day = 1;\n            if (month > 12) {\n                month = 1;\n                ++year;\n            }\n        } else {\n            let r = ord2ymd(ymd2ord(year, month, 1) + (day - 1));\n            year = r.year;\n            month = r.month;\n            day = r.day;\n        }\n    }\n    return {\n        year: year,\n        month: month,\n        day: day,\n        hour: hour,\n        minute: minute,\n        second: second,\n        microsecond: microsecond,\n    };\n}\n\n// -----------------------------------------------------------------------------\n// Date/Time and related classes\n// -----------------------------------------------------------------------------\n\nexport class PyDate {\n    /**\n     * @returns {PyDate}\n     */\n    static today() {\n        return this.convertDate(new Date());\n    }\n\n    /**\n     * Convert a date object into PyDate\n     * @param {Date} date\n     * @returns {PyDate}\n     */\n    static convertDate(date) {\n        const year = date.getFullYear();\n        const month = date.getMonth() + 1;\n        const day = date.getDate();\n        return new PyDate(year, month, day);\n    }\n\n    /**\n     * @param {integer} year\n     * @param {integer} month\n     * @param {integer} day\n     */\n    constructor(year, month, day) {\n        this.year = year;\n        this.month = month; // 1-indexed => 1 = january, 2 = february, ...\n        this.day = day; // 1-indexed => 1 = first day of month, ...\n    }\n\n    /**\n     * @param  {...any} args\n     * @returns {PyDate}\n     */\n    static create(...args) {\n        const { year, month, day } = parseArgs(args, [\"year\", \"month\", \"day\"]);\n        return new PyDate(year, month, day);\n    }\n\n    /**\n     * @param {PyTimeDelta} timedelta\n     * @returns {PyDate}\n     */\n    add(timedelta) {\n        const s = tmxxx(this.year, this.month, this.day + timedelta.days);\n        return new PyDate(s.year, s.month, s.day);\n    }\n\n    /**\n     * @param {any} other\n     * @returns {boolean}\n     */\n    isEqual(other) {\n        if (!(other instanceof PyDate)) {\n            return false;\n        }\n        return this.year === other.year && this.month === other.month && this.day === other.day;\n    }\n\n    /**\n     * @param {string} format\n     * @returns {string}\n     */\n    strftime(format) {\n        return format.replace(/%([A-Za-z])/g, (m, c) => {\n            switch (c) {\n                case \"Y\":\n                    return fmt4(this.year);\n                case \"m\":\n                    return fmt2(this.month);\n                case \"d\":\n                    return fmt2(this.day);\n            }\n            throw new ValueError(`No known conversion for ${m}`);\n        });\n    }\n\n    /**\n     * @param {PyTimeDelta | PyDate} other\n     * @returns {PyDate | PyTimeDelta}\n     */\n    substract(other) {\n        if (other instanceof PyTimeDelta) {\n            return this.add(other.negate());\n        }\n        if (other instanceof PyDate) {\n            return PyTimeDelta.create(this.toordinal() - other.toordinal());\n        }\n        throw NotSupportedError();\n    }\n\n    /**\n     * @returns {string}\n     */\n    toJSON() {\n        return this.strftime(\"%Y-%m-%d\");\n    }\n\n    /**\n     * @returns {integer}\n     */\n    toordinal() {\n        return ymd2ord(this.year, this.month, this.day);\n    }\n}\n\nexport class PyDateTime {\n    /**\n     * @returns {PyDateTime}\n     */\n    static now() {\n        return this.convertDate(new Date());\n    }\n\n    /**\n     * Convert a date object into PyDateTime\n     * @param {Date} date\n     * @returns {PyDateTime}\n     */\n    static convertDate(date) {\n        const year = date.getFullYear();\n        const month = date.getMonth() + 1;\n        const day = date.getDate();\n        const hour = date.getHours();\n        const minute = date.getMinutes();\n        const second = date.getSeconds();\n        return new PyDateTime(year, month, day, hour, minute, second, 0);\n    }\n\n    /**\n     * @param  {...any} args\n     * @returns {PyDateTime}\n     */\n    static create(...args) {\n        const namedArgs = parseArgs(args, [\n            \"year\",\n            \"month\",\n            \"day\",\n            \"hour\",\n            \"minute\",\n            \"second\",\n            \"microsecond\",\n        ]);\n        const year = namedArgs.year;\n        const month = namedArgs.month;\n        const day = namedArgs.day;\n        const hour = namedArgs.hour || 0;\n        const minute = namedArgs.minute || 0;\n        const second = namedArgs.second || 0;\n        const ms = namedArgs.micro / 1000 || 0;\n        return new PyDateTime(year, month, day, hour, minute, second, ms);\n    }\n\n    /**\n     * @param  {...any} args\n     * @returns {PyDateTime}\n     */\n    static combine(...args) {\n        const { date, time } = parseArgs(args, [\"date\", \"time\"]);\n        // not sure. should we go through constructor instead? what about args normalization?\n        return PyDateTime.create(\n            date.year,\n            date.month,\n            date.day,\n            time.hour,\n            time.minute,\n            time.second\n        );\n    }\n\n    /**\n     * @param {integer} year\n     * @param {integer} month\n     * @param {integer} day\n     * @param {integer} hour\n     * @param {integer} minute\n     * @param {integer} second\n     * @param {integer} microsecond\n     */\n    constructor(year, month, day, hour, minute, second, microsecond) {\n        this.year = year;\n        this.month = month; // 1-indexed => 1 = january, 2 = february, ...\n        this.day = day; // 1-indexed => 1 = first day of month, ...\n        this.hour = hour;\n        this.minute = minute;\n        this.second = second;\n        this.microsecond = microsecond;\n    }\n\n    /**\n     * @param {PyTimeDelta} timedelta\n     * @returns {PyDate}\n     */\n    add(timedelta) {\n        const s = tmxxx(\n            this.year,\n            this.month,\n            this.day + timedelta.days,\n            this.hour,\n            this.minute,\n            this.second + timedelta.seconds,\n            this.microsecond + timedelta.microseconds\n        );\n        // does not seem to closely follow python implementation.\n        return new PyDateTime(s.year, s.month, s.day, s.hour, s.minute, s.second, s.microsecond);\n    }\n\n    /**\n     * @param {any} other\n     * @returns {boolean}\n     */\n    isEqual(other) {\n        if (!(other instanceof PyDateTime)) {\n            return false;\n        }\n        return (\n            this.year === other.year &&\n            this.month === other.month &&\n            this.day === other.day &&\n            this.hour === other.hour &&\n            this.minute === other.minute &&\n            this.second === other.second &&\n            this.microsecond === other.microsecond\n        );\n    }\n\n    /**\n     * @param {string} format\n     * @returns {string}\n     */\n    strftime(format) {\n        return format.replace(/%([A-Za-z])/g, (m, c) => {\n            switch (c) {\n                case \"Y\":\n                    return fmt4(this.year);\n                case \"m\":\n                    return fmt2(this.month);\n                case \"d\":\n                    return fmt2(this.day);\n                case \"H\":\n                    return fmt2(this.hour);\n                case \"M\":\n                    return fmt2(this.minute);\n                case \"S\":\n                    return fmt2(this.second);\n            }\n            throw new ValueError(`No known conversion for ${m}`);\n        });\n    }\n\n    /**\n     * @param {PyTimeDelta} timedelta\n     * @returns {PyDateTime}\n     */\n    substract(timedelta) {\n        return this.add(timedelta.negate());\n    }\n\n    /**\n     * @returns {string}\n     */\n    toJSON() {\n        return this.strftime(\"%Y-%m-%d %H:%M:%S\");\n    }\n\n    /**\n     * @returns {PyDateTime}\n     */\n    to_utc() {\n        const d = new Date(this.year, this.month -1, this.day, this.hour, this.minute, this.second);\n        const timedelta = PyTimeDelta.create({ minutes: d.getTimezoneOffset() });\n        return this.add(timedelta);\n    }\n}\n\nexport class PyTime extends PyDate {\n    /**\n     * @param  {...any} args\n     * @returns {PyTime}\n     */\n    static create(...args) {\n        const namedArgs = parseArgs(args, [\"hour\", \"minute\", \"second\"]);\n        const hour = namedArgs.hour || 0;\n        const minute = namedArgs.minute || 0;\n        const second = namedArgs.second || 0;\n        return new PyTime(hour, minute, second);\n    }\n\n    constructor(hour, minute, second) {\n        const now = new Date();\n        const year = now.getFullYear();\n        const month = now.getMonth();\n        const day = now.getDate();\n        super(year, month, day);\n        this.hour = hour;\n        this.minute = minute;\n        this.second = second;\n    }\n\n    /**\n     * @param {string} format\n     * @returns {string}\n     */\n    strftime(format) {\n        return format.replace(/%([A-Za-z])/g, (m, c) => {\n            switch (c) {\n                case \"Y\":\n                    return fmt4(this.year);\n                case \"m\":\n                    return fmt2(this.month + 1);\n                case \"d\":\n                    return fmt2(this.day);\n                case \"H\":\n                    return fmt2(this.hour);\n                case \"M\":\n                    return fmt2(this.minute);\n                case \"S\":\n                    return fmt2(this.second);\n            }\n            throw new ValueError(`No known conversion for ${m}`);\n        });\n    }\n\n    toJSON() {\n        return this.strftime(\"%H:%M:%S\");\n    }\n}\n\n/*\n * This list is intended to be of that shape (32 days in december), it is used by\n * the algorithm that computes \"relativedelta yearday\". The algorithm was adapted\n * from the one in python (https://github.com/dateutil/dateutil/blob/2.7.3/dateutil/relativedelta.py#L199)\n */\nconst DAYS_IN_YEAR = [31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 366];\n\nconst TIME_PERIODS = [\"hour\", \"minute\", \"second\"];\nconst PERIODS = [\"year\", \"month\", \"day\", ...TIME_PERIODS];\n\nconst RELATIVE_KEYS = \"years months weeks days hours minutes seconds microseconds leapdays\".split(\n    \" \"\n);\nconst ABSOLUTE_KEYS = \"year month day hour minute second microsecond weekday nlyearday yearday\".split(\n    \" \"\n);\n\nconst argsSpec = [\"dt1\", \"dt2\"]; // all other arguments are kwargs\nexport class PyRelativeDelta {\n    /**\n     * @param  {...any} args\n     * @returns {PyRelativeDelta}\n     */\n    static create(...args) {\n        const params = parseArgs(args, argsSpec);\n        if (\"dt1\" in params) {\n            throw new Error(\"relativedelta(dt1, dt2) is not supported for now\");\n        }\n        for (const period of PERIODS) {\n            if (period in params) {\n                const val = params[period];\n                assert(val >= 0, `${period} ${val} is out of range`);\n            }\n        }\n\n        for (const key of RELATIVE_KEYS) {\n            params[key] = params[key] || 0;\n        }\n        for (const key of ABSOLUTE_KEYS) {\n            params[key] = key in params ? params[key] : null;\n        }\n        params.days += 7 * params.weeks;\n\n        let yearDay = 0;\n        if (params.nlyearday) {\n            yearDay = params.nlyearday;\n        } else if (params.yearday) {\n            yearDay = params.yearday;\n            if (yearDay > 59) {\n                params.leapDays = -1;\n            }\n        }\n\n        if (yearDay) {\n            for (let monthIndex = 0; monthIndex < DAYS_IN_YEAR.length; monthIndex++) {\n                if (yearDay <= DAYS_IN_YEAR[monthIndex]) {\n                    params.month = monthIndex + 1;\n                    if (monthIndex === 0) {\n                        params.day = yearDay;\n                    } else {\n                        params.day = yearDay - DAYS_IN_YEAR[monthIndex - 1];\n                    }\n                    break;\n                }\n            }\n        }\n\n        return new PyRelativeDelta(params);\n    }\n\n    /**\n     * @param {PyDateTime|PyDate} date\n     * @param {PyRelativeDelta} delta\n     * @returns {PyDateTime|PyDate}\n     */\n    static add(date, delta) {\n        if (!(date instanceof PyDate || date instanceof PyDateTime)) {\n            throw NotSupportedError();\n        }\n\n        // First pass: we want to determine which is our target year and if we will apply leap days\n        const s = tmxxx(\n            (delta.year || date.year) + delta.years,\n            (delta.month || date.month) + delta.months,\n            delta.day || date.day,\n            delta.hour || date.hour || 0,\n            delta.minute || date.minute || 0,\n            delta.second || date.seconds || 0,\n            delta.microseconds || date.microseconds || 0\n        );\n\n        const newDateTime = new PyDateTime(\n            s.year,\n            s.month,\n            s.day,\n            s.hour,\n            s.minute,\n            s.second,\n            s.microsecond\n        );\n\n        let leapDays = 0;\n        if (delta.leapDays && newDateTime.month > 2 && isLeap(newDateTime.year)) {\n            leapDays = delta.leapDays;\n        }\n\n        // Second pass: apply the difference in days, and the difference in time values\n        const temp = newDateTime.add(\n            PyTimeDelta.create({\n                days: delta.days + leapDays,\n                hours: delta.hours,\n                minutes: delta.minutes,\n                seconds: delta.seconds,\n                microseconds: delta.microseconds,\n            })\n        );\n\n        // Determine the right return type:\n        // First we look at the type of the incoming date object,\n        // then we look at the actual time values held by the computed date.\n        const hasTime = Boolean(temp.hour || temp.minute || temp.second || temp.microsecond);\n        const returnDate =\n            !hasTime && date instanceof PyDate ? new PyDate(temp.year, temp.month, temp.day) : temp;\n\n        // Final pass: target the wanted day of the week (if necessary)\n        if (delta.weekday !== null) {\n            const wantedDow = delta.weekday + 1; // python: Monday is 0 ; JS: Monday is 1;\n            const _date = new Date(returnDate.year, returnDate.month - 1, returnDate.day);\n            const days = (7 - _date.getDay() + wantedDow) % 7;\n            return returnDate.add(new PyTimeDelta(days, 0, 0));\n        }\n        return returnDate;\n    }\n\n    /**\n     * @param {PyDateTime|PyDate} date\n     * @param {PyRelativeDelta} delta\n     * @returns {PyDateTime|PyDate}\n     */\n    static substract(date, delta) {\n        return PyRelativeDelta.add(date, delta.negate());\n    }\n\n    /**\n     * @param {Object} params\n     * @param {+1|-1} sign\n     */\n    constructor(params = {}, sign = +1) {\n        this.years = sign * params.years;\n        this.months = sign * params.months;\n        this.days = sign * params.days;\n        this.hours = sign * params.hours;\n        this.minutes = sign * params.minutes;\n        this.seconds = sign * params.seconds;\n        this.microseconds = sign * params.microseconds;\n\n        this.leapDays = params.leapDays;\n\n        this.year = params.year;\n        this.month = params.month;\n        this.day = params.day;\n        this.hour = params.hour;\n        this.minute = params.minute;\n        this.second = params.second;\n        this.microsecond = params.microsecond;\n\n        this.weekday = params.weekday;\n    }\n\n    /**\n     * @returns {PyRelativeDelta}\n     */\n    negate() {\n        return new PyRelativeDelta(this, -1);\n    }\n\n    isEqual(other) {\n        // For now we don't do normalization in the constructor (or create method).\n        // That is, we only compute the overflows at the time we add or substract.\n        // This is why we can't support isEqual for now.\n        throw new NotSupportedError();\n    }\n}\n\nconst TIME_DELTA_KEYS = \"weeks days hours minutes seconds milliseconds microseconds\".split(\" \");\n\n/**\n * Returns a \"pair\" with the fractional and integer parts of x\n * @param {float}\n * @returns {[float,integer]}\n */\nfunction modf(x) {\n    const mod = x % 1;\n    return [mod < 0 ? mod + 1 : mod, Math.floor(x)];\n}\n\nexport class PyTimeDelta {\n    /**\n     * @param  {...any} args\n     * @returns {PyTimeDelta}\n     */\n    static create(...args) {\n        const namedArgs = parseArgs(args, [\"days\", \"seconds\", \"microseconds\"]);\n        for (const key of TIME_DELTA_KEYS) {\n            namedArgs[key] = namedArgs[key] || 0;\n        }\n\n        // a timedelta can be created using TIME_DELTA_KEYS with float/integer values\n        // but only days, seconds, microseconds are kept internally.\n        // --> some normalization occurs here\n\n        let d = 0;\n        let s = 0;\n        let us = 0; // ~ \u03bcs standard notation for microseconds\n\n        const days = namedArgs.days + namedArgs.weeks * 7;\n        let seconds = namedArgs.seconds + 60 * namedArgs.minutes + 3600 * namedArgs.hours;\n        let microseconds = namedArgs.microseconds + 1000 * namedArgs.milliseconds;\n\n        const [dFrac, dInt] = modf(days);\n        d = dInt;\n        let daysecondsfrac = 0;\n        if (dFrac) {\n            const [dsFrac, dsInt] = modf(dFrac * 24 * 3600);\n            s = dsInt;\n            daysecondsfrac = dsFrac;\n        }\n\n        const [sFrac, sInt] = modf(seconds);\n        seconds = sInt;\n        const secondsfrac = sFrac + daysecondsfrac;\n\n        divmod(seconds, 24 * 3600, (days, seconds) => {\n            d += days;\n            s += seconds;\n        });\n\n        microseconds += secondsfrac * 1e6;\n        divmod(microseconds, 1000000, (seconds, microseconds) => {\n            divmod(seconds, 24 * 3600, (days, seconds) => {\n                d += days;\n                s += seconds;\n                us += Math.round(microseconds);\n            });\n        });\n\n        return new PyTimeDelta(d, s, us);\n    }\n\n    /**\n     * @param {integer} days\n     * @param {integer} seconds\n     * @param {integer} microseconds\n     */\n    constructor(days, seconds, microseconds) {\n        this.days = days;\n        this.seconds = seconds;\n        this.microseconds = microseconds;\n    }\n\n    /**\n     * @param {PyTimeDelta} other\n     * @returns {PyTimeDelta}\n     */\n    add(other) {\n        return PyTimeDelta.create({\n            days: this.days + other.days,\n            seconds: this.seconds + other.seconds,\n            microseconds: this.microseconds + other.microseconds,\n        });\n    }\n\n    /**\n     * @param {integer} n\n     * @returns {PyTimeDelta}\n     */\n    divide(n) {\n        const us = (this.days * 24 * 3600 + this.seconds) * 1e6 + this.microseconds;\n        return PyTimeDelta.create({ microseconds: Math.floor(us / n) });\n    }\n\n    /**\n     * @param {any} other\n     * @returns {boolean}\n     */\n    isEqual(other) {\n        if (!(other instanceof PyTimeDelta)) {\n            return false;\n        }\n        return (\n            this.days === other.days &&\n            this.seconds === other.seconds &&\n            this.microseconds === other.microseconds\n        );\n    }\n\n    /**\n     * @returns {boolean}\n     */\n    isTrue() {\n        return this.days !== 0 || this.seconds !== 0 || this.microseconds !== 0;\n    }\n\n    /**\n     * @param {float} n\n     * @returns {PyTimeDelta}\n     */\n    multiply(n) {\n        return PyTimeDelta.create({\n            days: n * this.days,\n            seconds: n * this.seconds,\n            microseconds: n * this.microseconds,\n        });\n    }\n\n    /**\n     * @returns {PyTimeDelta}\n     */\n    negate() {\n        return PyTimeDelta.create({\n            days: -this.days,\n            seconds: -this.seconds,\n            microseconds: -this.microseconds,\n        });\n    }\n\n    /**\n     * @param {PyTimeDelta} other\n     * @returns {PyTimeDelta}\n     */\n    substract(other) {\n        return PyTimeDelta.create({\n            days: this.days - other.days,\n            seconds: this.seconds - other.seconds,\n            microseconds: this.microseconds - other.microseconds,\n        });\n    }\n\n    /**\n     * @returns {float}\n     */\n    total_seconds() {\n        return this.days * 86400 + this.seconds + this.microseconds / 1000000;\n    }\n}\n", "/** @odoo-module **/\n\nimport { BUILTINS } from \"./py_builtin\";\nimport {\n    NotSupportedError,\n    PyDate,\n    PyDateTime,\n    PyRelativeDelta,\n    PyTime,\n    PyTimeDelta,\n} from \"./py_date\";\nimport { PY_DICT, toPyDict } from \"./py_utils\";\nimport { parseArgs } from './py_parser';\n\n// -----------------------------------------------------------------------------\n// Types\n// -----------------------------------------------------------------------------\n\n/**\n * @typedef { import(\"./py_parser\").AST } AST\n */\n\nexport class EvaluationError extends Error {}\n\n// -----------------------------------------------------------------------------\n// Constants and helpers\n// -----------------------------------------------------------------------------\n\nconst isTrue = BUILTINS.bool;\n\n/**\n * @param {AST} ast\n * @param {Object} context\n * @returns {any}\n */\nfunction applyUnaryOp(ast, context) {\n    const value = evaluate(ast.right, context);\n    switch (ast.op) {\n        case \"-\":\n            if (value instanceof Object && value.negate) {\n                return value.negate();\n            }\n            return -value;\n        case \"+\":\n            return value;\n        case \"not\":\n            return !isTrue(value);\n    }\n    throw new EvaluationError(`Unknown unary operator: ${ast.op}`);\n}\n\n/**\n * We want to maintain this order:\n *   None < number (boolean) < dict < string < list < dict\n * So, each type is mapped to a number to represent that order\n *\n * @param {any} val\n * @returns {number} index type\n */\nfunction pytypeIndex(val) {\n    switch (typeof val) {\n        case \"object\":\n            // None, List, Object, Dict\n            return val === null ? 1 : Array.isArray(val) ? 5 : 3;\n        case \"number\":\n            return 2;\n        case \"string\":\n            return 4;\n    }\n    throw new EvaluationError(`Unknown type: ${typeof val}`);\n}\n\n/**\n * @param {Object} obj\n * @returns {boolean}\n */\nfunction isConstructor(obj) {\n    return !!obj.prototype && !!obj.prototype.constructor.name;\n}\n\n/**\n * Compare two values\n *\n * @param {any} left\n * @param {any} right\n * @returns {boolean}\n */\nfunction isLess(left, right) {\n    if (typeof left === \"number\" && typeof right === \"number\") {\n        return left < right;\n    }\n    if (typeof left === \"boolean\") {\n        left = left ? 1 : 0;\n    }\n    if (typeof right === \"boolean\") {\n        right = right ? 1 : 0;\n    }\n    const leftIndex = pytypeIndex(left);\n    const rightIndex = pytypeIndex(right);\n    if (leftIndex === rightIndex) {\n        return left < right;\n    }\n    return leftIndex < rightIndex;\n}\n\n/**\n * @param {any} left\n * @param {any} right\n * @returns {boolean}\n */\nfunction isEqual(left, right) {\n    if (typeof left !== typeof right) {\n        if (typeof left === \"boolean\" && typeof right === \"number\") {\n            return right === (left ? 1 : 0);\n        }\n        if (typeof left === \"number\" && typeof right === \"boolean\") {\n            return left === (right ? 1 : 0);\n        }\n        return false;\n    }\n    if (left instanceof Object && left.isEqual) {\n        return left.isEqual(right);\n    }\n    return left === right;\n}\n\n/**\n * @param {any} left\n * @param {any} right\n * @returns {boolean}\n */\nfunction isIn(left, right) {\n    if (Array.isArray(right)) {\n        return right.includes(left);\n    }\n    if (typeof right === \"string\" && typeof left === \"string\") {\n        return right.includes(left);\n    }\n    return false;\n}\n\n/**\n * @param {AST} ast\n * @param {object} context\n * @returns {any}\n */\nfunction applyBinaryOp(ast, context) {\n    const left = evaluate(ast.left, context);\n    const right = evaluate(ast.right, context);\n    switch (ast.op) {\n        case \"+\": {\n            const relativeDeltaOnLeft = left instanceof PyRelativeDelta;\n            const relativeDeltaOnRight = right instanceof PyRelativeDelta;\n            if (relativeDeltaOnLeft || relativeDeltaOnRight) {\n                const date = relativeDeltaOnLeft ? right : left;\n                const delta = relativeDeltaOnLeft ? left : right;\n                return PyRelativeDelta.add(date, delta);\n            }\n\n            const timeDeltaOnLeft = left instanceof PyTimeDelta;\n            const timeDeltaOnRight = right instanceof PyTimeDelta;\n            if (timeDeltaOnLeft && timeDeltaOnRight) {\n                return left.add(right);\n            }\n            if (timeDeltaOnLeft) {\n                if (right instanceof PyDate || right instanceof PyDateTime) {\n                    return right.add(left);\n                } else {\n                    throw NotSupportedError();\n                }\n            }\n            if (timeDeltaOnRight) {\n                if (left instanceof PyDate || left instanceof PyDateTime) {\n                    return left.add(right);\n                } else {\n                    throw NotSupportedError();\n                }\n            }\n\n            return left + right;\n        }\n        case \"-\": {\n            const isRightDelta = right instanceof PyRelativeDelta;\n            if (isRightDelta) {\n                return PyRelativeDelta.substract(left, right);\n            }\n\n            const timeDeltaOnRight = right instanceof PyTimeDelta;\n            if (timeDeltaOnRight) {\n                if (left instanceof PyTimeDelta) {\n                    return left.substract(right);\n                } else if (left instanceof PyDate || left instanceof PyDateTime) {\n                    return left.substract(right);\n                } else {\n                    throw NotSupportedError();\n                }\n            }\n\n            if (left instanceof PyDate) {\n                return left.substract(right);\n            }\n            return left - right;\n        }\n        case \"*\":\n            const timeDeltaOnLeft = left instanceof PyTimeDelta;\n            const timeDeltaOnRight = right instanceof PyTimeDelta;\n            if (timeDeltaOnLeft || timeDeltaOnRight) {\n                const number = timeDeltaOnLeft ? right : left;\n                const delta = timeDeltaOnLeft ? left : right;\n                return delta.multiply(number); // check number type?\n            }\n\n            return left * right;\n        case \"/\":\n            return left / right;\n        case \"%\":\n            return left % right;\n        case \"//\":\n            if (left instanceof PyTimeDelta) {\n                return left.divide(right); // check number type?\n            }\n            return Math.floor(left / right);\n        case \"**\":\n            return left ** right;\n        case \"==\":\n            return isEqual(left, right);\n        case \"<>\":\n        case \"!=\":\n            return !isEqual(left, right);\n        case \"<\":\n            return isLess(left, right);\n        case \">\":\n            return isLess(right, left);\n        case \">=\":\n            return isEqual(left, right) || isLess(right, left);\n        case \"<=\":\n            return isEqual(left, right) || isLess(left, right);\n        case \"in\":\n            return isIn(left, right);\n        case \"not in\":\n            return !isIn(left, right);\n    }\n    throw new EvaluationError(`Unknown binary operator: ${ast.op}`);\n}\n\nconst DICT = {\n    get(dict) {\n        return (...args) => {\n            const { key, defValue } = parseArgs(args, [\"key\", \"defValue\"]);\n            if (key in dict) {\n                return dict[key];\n            } else if (defValue) {\n                return defValue;\n            }\n            return null;\n        };\n    },\n};\n\n// -----------------------------------------------------------------------------\n// Evaluate function\n// -----------------------------------------------------------------------------\n\n/**\n * @param {AST} ast\n * @param {Object} context\n * @returns {any}\n */\nexport function evaluate(ast, context = {}) {\n    const dicts = new Set();\n    let pyContext;\n    const evalContext = Object.create(context);\n    Object.defineProperty(evalContext, \"context\", {\n        get() {\n            if (!pyContext) {\n                pyContext = toPyDict(context);\n            }\n            return pyContext;\n        },\n    });\n\n    /**\n     * @param {AST} ast\n     */\n    function _evaluate(ast) {\n        switch (ast.type) {\n            case 0 /* Number */:\n            case 1 /* String */:\n                return ast.value;\n            case 5 /* Name */:\n                if (ast.value in evalContext) {\n                    return evalContext[ast.value];\n                } else if (ast.value in BUILTINS) {\n                    return BUILTINS[ast.value];\n                } else {\n                    throw new EvaluationError(`Name '${ast.value}' is not defined`);\n                }\n            case 3 /* None */:\n                return null;\n            case 2 /* Boolean */:\n                return ast.value;\n            case 6 /* UnaryOperator */:\n                return applyUnaryOp(ast, evalContext);\n            case 7 /* BinaryOperator */:\n                return applyBinaryOp(ast, evalContext);\n            case 14 /* BooleanOperator */:\n                const left = _evaluate(ast.left);\n                if (ast.op === \"and\") {\n                    return isTrue(left) ? _evaluate(ast.right) : left;\n                } else {\n                    return isTrue(left) ? left : _evaluate(ast.right);\n                }\n            case 4 /* List */:\n            case 10 /* Tuple */:\n                return ast.value.map(_evaluate);\n            case 11 /* Dictionary */:\n                const dict = {};\n                for (let key in ast.value) {\n                    dict[key] = _evaluate(ast.value[key]);\n                }\n                dicts.add(dict);\n                return dict;\n            case 8 /* FunctionCall */:\n                const fnValue = _evaluate(ast.fn);\n                const args = ast.args.map(_evaluate);\n                const kwargs = {};\n                for (let kwarg in ast.kwargs) {\n                    kwargs[kwarg] = _evaluate(ast.kwargs[kwarg]);\n                }\n                if (\n                    fnValue === PyDate ||\n                    fnValue === PyDateTime ||\n                    fnValue === PyTime ||\n                    fnValue === PyRelativeDelta ||\n                    fnValue === PyTimeDelta\n                ) {\n                    return fnValue.create(...args, kwargs);\n                }\n                return fnValue(...args, kwargs);\n            case 12 /* Lookup */: {\n                const dict = _evaluate(ast.target);\n                const key = _evaluate(ast.key);\n                return dict[key];\n            }\n            case 13 /* If */: {\n                if (isTrue(_evaluate(ast.condition))) {\n                    return _evaluate(ast.ifTrue);\n                } else {\n                    return _evaluate(ast.ifFalse);\n                }\n            }\n            case 15 /* ObjLookup */: {\n                const left = _evaluate(ast.obj);\n                if (dicts.has(left) || Object.isPrototypeOf.call(PY_DICT, left)) {\n                    // this is a dictionary => need to apply dict methods\n                    return DICT[ast.key](left);\n                }\n                const result = left[ast.key];\n                if (typeof result === \"function\" && !isConstructor(result)) {\n                    return result.bind(left);\n                }\n                return result;\n            }\n        }\n        throw new EvaluationError(`AST of type ${ast.type} cannot be evaluated`);\n    }\n    return _evaluate(ast);\n}\n", "/** @odoo-module **/\n\nimport { binaryOperators, comparators } from \"./py_tokenizer\";\n\n// -----------------------------------------------------------------------------\n// Types\n// -----------------------------------------------------------------------------\n\n/**\n * @typedef { import(\"./py_tokenizer\").Token } Token\n */\n\n/**\n * @typedef {{type: 0, value: number}} ASTNumber\n * @typedef {{type: 1, value: string}} ASTString\n * @typedef {{type: 2, value: boolean}} ASTBoolean\n * @typedef {{type: 3}} ASTNone\n * @typedef {{type: 4, value: AST[]}} ASTList\n * @typedef {{type: 5, value: string}} ASTName\n * @typedef {{type: 6, op: string, right: AST}} ASTUnaryOperator\n * @typedef {{type: 7, op: string, left: AST, right: AST}} ASTBinaryOperator\n * @typedef {{type: 8, fn: AST, args: AST[], kwargs: {[key: string]: AST}}} ASTFunctionCall\n * @typedef {{type: 9, name: ASTName, value: AST}} ASTAssignment\n * @typedef {{type: 10, value: AST[]}} ASTTuple\n * @typedef {{type: 11, value: { [key: string]: AST}}} ASTDictionary\n * @typedef {{type: 12, target: AST, key: AST}} ASTLookup\n * @typedef {{type: 13, condition: AST, ifTrue: AST, ifFalse: AST}} ASTIf\n * @typedef {{type: 14, op: string, left: AST, right: AST}} ASTBooleanOperator\n * @typedef {{type: 15, obj: AST, key: string}} ASTObjLookup\n *\n * @typedef { ASTNumber | ASTString | ASTBoolean | ASTNone | ASTList | ASTName | ASTUnaryOperator | ASTBinaryOperator | ASTFunctionCall | ASTAssignment | ASTTuple | ASTDictionary |ASTLookup | ASTIf | ASTBooleanOperator | ASTObjLookup} AST\n */\n\nexport class ParserError extends Error {}\n\n// -----------------------------------------------------------------------------\n// Constants and helpers\n// -----------------------------------------------------------------------------\n\nconst chainedOperators = new Set(comparators);\nconst infixOperators = new Set(binaryOperators.concat(comparators));\n\n/**\n * Compute the \"binding power\" of a symbol\n *\n * @param {string} symbol\n * @returns {number}\n */\nexport function bp(symbol) {\n    switch (symbol) {\n        case \"=\":\n            return 10;\n        case \"if\":\n            return 20;\n        case \"in\":\n        case \"not in\":\n        case \"is\":\n        case \"is not\":\n        case \"<\":\n        case \"<=\":\n        case \">\":\n        case \">=\":\n        case \"<>\":\n        case \"==\":\n        case \"!=\":\n            return 60;\n        case \"or\":\n            return 30;\n        case \"and\":\n            return 40;\n        case \"not\":\n            return 50;\n        case \"|\":\n            return 70;\n        case \"^\":\n            return 80;\n        case \"&\":\n            return 90;\n        case \"<<\":\n        case \">>\":\n            return 100;\n        case \"+\":\n        case \"-\":\n            return 110;\n        case \"*\":\n        case \"/\":\n        case \"//\":\n        case \"%\":\n            return 120;\n        case \"**\":\n            return 140;\n        case \".\":\n        case \"(\":\n        case \"[\":\n            return 150;\n    }\n    return 0;\n}\n\n/**\n * Compute binding power of a symbol\n *\n * @param {Token} token\n * @returns {number}\n */\nfunction bindingPower(token) {\n    return token.type === 2 /* Symbol */ ? bp(token.value) : 0;\n}\n\n/**\n * Check if a token is a symbol of a given value\n *\n * @param {Token} token\n * @param {string} value\n * @returns {boolean}\n */\nfunction isSymbol(token, value) {\n    return token.type === 2 /* Symbol */ && token.value === value;\n}\n\n/**\n * @param {Token} current\n * @param {Token[]} tokens\n * @returns {AST}\n */\nfunction parsePrefix(current, tokens) {\n    switch (current.type) {\n        case 0 /* Number */:\n            return { type: 0 /* Number */, value: current.value };\n        case 1 /* String */:\n            return { type: 1 /* String */, value: current.value };\n        case 4 /* Constant */:\n            if (current.value === \"None\") {\n                return { type: 3 /* None */ };\n            } else {\n                return { type: 2 /* Boolean */, value: current.value === \"True\" };\n            }\n        case 3 /* Name */:\n            return { type: 5 /* Name */, value: current.value };\n        case 2 /* Symbol */:\n            switch (current.value) {\n                case \"-\":\n                case \"+\":\n                case \"~\":\n                    return {\n                        type: 6 /* UnaryOperator */,\n                        op: current.value,\n                        right: _parse(tokens, 130),\n                    };\n                case \"not\":\n                    return {\n                        type: 6 /* UnaryOperator */,\n                        op: current.value,\n                        right: _parse(tokens, 50),\n                    };\n                case \"(\":\n                    const content = [];\n                    let isTuple = false;\n                    while (tokens[0] && !isSymbol(tokens[0], \")\")) {\n                        content.push(_parse(tokens, 0));\n                        if (tokens[0]) {\n                            if (tokens[0] && isSymbol(tokens[0], \",\")) {\n                                isTuple = true;\n                                tokens.shift();\n                            } else if (!isSymbol(tokens[0], \")\")) {\n                                throw new ParserError(\"parsing error\");\n                            }\n                        } else {\n                            throw new ParserError(\"parsing error\");\n                        }\n                    }\n                    if (!tokens[0] || !isSymbol(tokens[0], \")\")) {\n                        throw new ParserError(\"parsing error\");\n                    }\n                    tokens.shift();\n                    isTuple = isTuple || content.length === 0;\n                    return isTuple ? { type: 10 /* Tuple */, value: content } : content[0];\n                case \"[\":\n                    const value = [];\n                    while (tokens[0] && !isSymbol(tokens[0], \"]\")) {\n                        value.push(_parse(tokens, 0));\n                        if (tokens[0]) {\n                            if (isSymbol(tokens[0], \",\")) {\n                                tokens.shift();\n                            } else if (!isSymbol(tokens[0], \"]\")) {\n                                throw new ParserError(\"parsing error\");\n                            }\n                        }\n                    }\n                    if (!tokens[0] || !isSymbol(tokens[0], \"]\")) {\n                        throw new ParserError(\"parsing error\");\n                    }\n                    tokens.shift();\n                    return { type: 4 /* List */, value };\n                case \"{\": {\n                    const dict = {};\n                    while (tokens[0] && !isSymbol(tokens[0], \"}\")) {\n                        const key = _parse(tokens, 0);\n                        if (\n                            (key.type !== 1 /* String */ && key.type !== 0) /* Number */ ||\n                            !tokens[0] ||\n                            !isSymbol(tokens[0], \":\")\n                        ) {\n                            throw new ParserError(\"parsing error\");\n                        }\n                        tokens.shift();\n                        const value = _parse(tokens, 0);\n                        dict[key.value] = value;\n                        if (isSymbol(tokens[0], \",\")) {\n                            tokens.shift();\n                        }\n                    }\n                    // remove the } token\n                    if (!tokens.shift()) {\n                        throw new ParserError(\"parsing error\");\n                    }\n                    return { type: 11 /* Dictionary */, value: dict };\n                }\n            }\n    }\n    throw new ParserError(\"Token cannot be parsed\");\n}\n\n/**\n * @param {AST} ast\n * @param {Token} current\n * @param {Token[]} tokens\n * @returns {AST}\n */\nfunction parseInfix(left, current, tokens) {\n    switch (current.type) {\n        case 2 /* Symbol */:\n            if (infixOperators.has(current.value)) {\n                let right = _parse(tokens, bindingPower(current));\n                if (current.value === \"and\" || current.value === \"or\") {\n                    return {\n                        type: 14 /* BooleanOperator */,\n                        op: current.value,\n                        left,\n                        right,\n                    };\n                } else if (current.value === \".\") {\n                    if (right.type === 5 /* Name */) {\n                        return {\n                            type: 15 /* ObjLookup */,\n                            obj: left,\n                            key: right.value,\n                        };\n                    } else {\n                        throw new ParserError(\"invalid obj lookup\");\n                    }\n                }\n                let op = {\n                    type: 7 /* BinaryOperator */,\n                    op: current.value,\n                    left,\n                    right,\n                };\n                while (\n                    chainedOperators.has(current.value) &&\n                    tokens[0] &&\n                    tokens[0].type === 2 /* Symbol */ &&\n                    chainedOperators.has(tokens[0].value)\n                ) {\n                    const nextToken = tokens.shift();\n                    op = {\n                        type: 14 /* BooleanOperator */,\n                        op: \"and\",\n                        left: op,\n                        right: {\n                            type: 7 /* BinaryOperator */,\n                            op: nextToken.value,\n                            left: right,\n                            right: _parse(tokens, bindingPower(nextToken)),\n                        },\n                    };\n                    right = op.right.right;\n                }\n                return op;\n            }\n            switch (current.value) {\n                case \"(\":\n                    // function call\n                    const args = [];\n                    const kwargs = {};\n                    while (tokens[0] && !isSymbol(tokens[0], \")\")) {\n                        const arg = _parse(tokens, 0);\n                        if (arg.type === 9 /* Assignment */) {\n                            kwargs[arg.name.value] = arg.value;\n                        } else {\n                            args.push(arg);\n                        }\n                        if (tokens[0] && isSymbol(tokens[0], \",\")) {\n                            tokens.shift();\n                        }\n                    }\n                    if (!tokens[0] || !isSymbol(tokens[0], \")\")) {\n                        throw new ParserError(\"parsing error\");\n                    }\n                    tokens.shift();\n                    return { type: 8 /* FunctionCall */, fn: left, args, kwargs };\n                case \"=\":\n                    if (left.type === 5 /* Name */) {\n                        return {\n                            type: 9 /* Assignment */,\n                            name: left,\n                            value: _parse(tokens, 10),\n                        };\n                    }\n                case \"[\": {\n                    // lookup in dictionary\n                    const key = _parse(tokens);\n                    if (!tokens[0] || !isSymbol(tokens[0], \"]\")) {\n                        throw new ParserError(\"parsing error\");\n                    }\n                    tokens.shift();\n                    return {\n                        type: 12 /* Lookup */,\n                        target: left,\n                        key: key,\n                    };\n                }\n                case \"if\": {\n                    const condition = _parse(tokens);\n                    if (!tokens[0] || !isSymbol(tokens[0], \"else\")) {\n                        throw new ParserError(\"parsing error\");\n                    }\n                    tokens.shift();\n                    const ifFalse = _parse(tokens);\n                    return {\n                        type: 13 /* If */,\n                        condition,\n                        ifTrue: left,\n                        ifFalse,\n                    };\n                }\n            }\n    }\n    throw new ParserError(\"Token cannot be parsed\");\n}\n\n/**\n * @param {Token[]} tokens\n * @param {number} [bp]\n * @returns {AST}\n */\nfunction _parse(tokens, bp = 0) {\n    const token = tokens.shift();\n    let expr = parsePrefix(token, tokens);\n    while (tokens[0] && bindingPower(tokens[0]) > bp) {\n        expr = parseInfix(expr, tokens.shift(), tokens);\n    }\n    return expr;\n}\n\n// -----------------------------------------------------------------------------\n// Parse function\n// -----------------------------------------------------------------------------\n\n/**\n * Parse a list of tokens\n *\n * @param {Token[]} tokens\n * @returns {AST}\n */\nexport function parse(tokens) {\n    if (tokens.length) {\n        return _parse(tokens, 0);\n    }\n    throw new ParserError(\"Missing token\");\n}\n\n/**\n * @param {any[]} args\n * @param {string[]} spec\n * @returns {{[name: string]: any}}\n */\nexport function parseArgs(args, spec) {\n    const last = args[args.length - 1];\n    const unnamedArgs = typeof last === \"object\" ? args.slice(0, -1) : args;\n    const kwargs = typeof last === \"object\" ? last : {};\n    for (let [index, val] of unnamedArgs.entries()) {\n        kwargs[spec[index]] = val;\n    }\n    return kwargs;\n}\n", "/** @odoo-module **/\n\n// -----------------------------------------------------------------------------\n// Types\n// -----------------------------------------------------------------------------\n\n/**\n * @typedef {{type: 0, value: number}} TokenNumber\n *\n * @typedef {{type: 1, value: string}} TokenString\n *\n * @typedef {{type: 2, value: string}} TokenSymbol\n *\n * @typedef {{type: 3, value: string}} TokenName\n *\n * @typedef {{type: 4, value: string}} TokenConstant\n *\n * @typedef {TokenNumber | TokenString | TokenSymbol | TokenName | TokenConstant} Token\n */\n\nexport class TokenizerError extends Error {}\n\n// -----------------------------------------------------------------------------\n// Helpers and Constants\n// -----------------------------------------------------------------------------\n\n/**\n * Directly maps a single escape code to an output character\n */\nconst directMap = {\n    \"\\\\\": \"\\\\\",\n    '\"': '\"',\n    \"'\": \"'\",\n    a: \"\\x07\",\n    b: \"\\x08\",\n    f: \"\\x0c\",\n    n: \"\\n\",\n    r: \"\\r\",\n    t: \"\\t\",\n    v: \"\\v\",\n};\n\n/**\n * Implements the decoding of Python string literals (embedded in\n * JS strings) into actual JS strings. This includes the decoding\n * of escapes into their corresponding JS\n * characters/codepoints/whatever.\n *\n * The ``unicode`` flags notes whether the literal should be\n * decoded as a bytestring literal or a unicode literal, which\n * pretty much only impacts decoding (or not) of unicode escapes\n * at this point since bytestrings are not technically handled\n * (everything is decoded to JS \"unicode\" strings)\n *\n * Eventurally, ``str`` could eventually use typed arrays, that'd\n * be interesting...\n *\n * @param {string} str\n * @param {boolean} unicode\n * @returns {string}\n */\nfunction decodeStringLiteral(str, unicode) {\n    let out = [];\n    let code;\n    for (var i = 0; i < str.length; ++i) {\n        if (str[i] !== \"\\\\\") {\n            out.push(str[i]);\n            continue;\n        }\n        var escape = str[i + 1];\n        if (escape in directMap) {\n            out.push(directMap[escape]);\n            ++i;\n            continue;\n        }\n        switch (escape) {\n            // Ignored\n            case \"\\n\":\n                ++i;\n                continue;\n            // Character named name in the Unicode database (Unicode only)\n            case \"N\":\n                if (!unicode) {\n                    break;\n                }\n                throw new TokenizerError(\"SyntaxError: \\\\N{} escape not implemented\");\n            case \"u\":\n                if (!unicode) {\n                    break;\n                }\n                var uni = str.slice(i + 2, i + 6);\n                if (!/[0-9a-f]{4}/i.test(uni)) {\n                    throw new TokenizerError(\n                        [\n                            \"SyntaxError: (unicode error) 'unicodeescape' codec\",\n                            \" can't decode bytes in position \",\n                            i,\n                            \"-\",\n                            i + 4,\n                            \": truncated \\\\uXXXX escape\",\n                        ].join(\"\")\n                    );\n                }\n                code = parseInt(uni, 16);\n                out.push(String.fromCharCode(code));\n                // escape + 4 hex digits\n                i += 5;\n                continue;\n            case \"U\":\n                if (!unicode) {\n                    break;\n                }\n                // TODO: String.fromCodePoint\n                throw new TokenizerError(\"SyntaxError: \\\\U escape not implemented\");\n            case \"x\":\n                // get 2 hex digits\n                var hex = str.slice(i + 2, i + 4);\n                if (!/[0-9a-f]{2}/i.test(hex)) {\n                    if (!unicode) {\n                        throw new TokenizerError(\"ValueError: invalid \\\\x escape\");\n                    }\n                    throw new TokenizerError(\n                        [\n                            \"SyntaxError: (unicode error) 'unicodeescape'\",\n                            \" codec can't decode bytes in position \",\n                            i,\n                            \"-\",\n                            i + 2,\n                            \": truncated \\\\xXX escape\",\n                        ].join(\"\")\n                    );\n                }\n                code = parseInt(hex, 16);\n                out.push(String.fromCharCode(code));\n                // skip escape + 2 hex digits\n                i += 3;\n                continue;\n            default:\n                // Check if octal\n                if (!/[0-8]/.test(escape)) {\n                    break;\n                }\n                var r = /[0-8]{1,3}/g;\n                r.lastIndex = i + 1;\n                var m = r.exec(str);\n                var oct = m[0];\n                code = parseInt(oct, 8);\n                out.push(String.fromCharCode(code));\n                // skip matchlength\n                i += oct.length;\n                continue;\n        }\n        out.push(\"\\\\\");\n    }\n    return out.join(\"\");\n}\n\nconst constants = new Set([\"None\", \"False\", \"True\"]);\n\nexport const comparators = [\n    \"in\",\n    \"not\",\n    \"not in\",\n    \"is\",\n    \"is not\",\n    \"<\",\n    \"<=\",\n    \">\",\n    \">=\",\n    \"<>\",\n    \"!=\",\n    \"==\",\n];\n\nexport const binaryOperators = [\n    \"or\",\n    \"and\",\n    \"|\",\n    \"^\",\n    \"&\",\n    \"<<\",\n    \">>\",\n    \"+\",\n    \"-\",\n    \"*\",\n    \"/\",\n    \"//\",\n    \"%\",\n    \"~\",\n    \"**\",\n    \".\",\n];\n\nexport const unaryOperators = [\"-\"];\n\nconst symbols = new Set([\n    ...[\"(\", \")\", \"[\", \"]\", \"{\", \"}\", \":\", \",\"],\n    ...[\"if\", \"else\", \"lambda\", \"=\"],\n    ...comparators,\n    ...binaryOperators,\n    ...unaryOperators,\n]);\n\n// Regexps\nfunction group(...args) {\n    return \"(\" + args.join(\"|\") + \")\";\n}\n\nconst Name = \"[a-zA-Z_]\\\\w*\";\nconst Whitespace = \"[ \\\\f\\\\t]*\";\nconst DecNumber = \"\\\\d+(L|l)?\";\nconst IntNumber = DecNumber;\n\nconst Exponent = \"[eE][+-]?\\\\d+\";\nconst PointFloat = group(`\\\\d+\\\\.\\\\d*(${Exponent})?`, `\\\\.\\\\d+(${Exponent})?`);\n// Exponent not optional when no decimal point\nconst FloatNumber = group(PointFloat, `\\\\d+${Exponent}`);\n\nconst Number = group(FloatNumber, IntNumber);\nconst Operator = group(\"\\\\*\\\\*=?\", \">>=?\", \"<<=?\", \"<>\", \"!=\", \"//=?\", \"[+\\\\-*/%&|^=<>]=?\", \"~\");\nconst Bracket = \"[\\\\[\\\\]\\\\(\\\\)\\\\{\\\\}]\";\nconst Special = \"[:;.,`@]\";\nconst Funny = group(Operator, Bracket, Special);\nconst ContStr = group(\n    \"([uU])?'([^\\n'\\\\\\\\]*(?:\\\\\\\\.[^\\n'\\\\\\\\]*)*)'\",\n    '([uU])?\"([^\\n\"\\\\\\\\]*(?:\\\\\\\\.[^\\n\"\\\\\\\\]*)*)\"'\n);\nconst PseudoToken = Whitespace + group(Number, Funny, ContStr, Name);\nconst NumberPattern = new RegExp(\"^\" + Number + \"$\");\nconst StringPattern = new RegExp(\"^\" + ContStr + \"$\");\nconst NamePattern = new RegExp(\"^\" + Name + \"$\");\nconst strip = new RegExp(\"^\" + Whitespace);\n\n// -----------------------------------------------------------------------------\n// Tokenize function\n// -----------------------------------------------------------------------------\n\n/**\n * Transform a string into a list of tokens\n *\n * @param {string} str\n * @returns {Token[]}\n */\nexport function tokenize(str) {\n    const tokens = [];\n    let max = str.length;\n    let start = 0;\n    let end = 0;\n    // /g flag makes repeated exec() have memory\n    const pseudoprog = new RegExp(PseudoToken, \"g\");\n    while (pseudoprog.lastIndex < max) {\n        const pseudomatch = pseudoprog.exec(str);\n        if (!pseudomatch) {\n            // if match failed on trailing whitespace, end tokenizing\n            if (/^\\s+$/.test(str.slice(end))) {\n                break;\n            }\n            throw new TokenizerError(\n                \"Failed to tokenize <<\" +\n                    str +\n                    \">> at index \" +\n                    (end || 0) +\n                    \"; parsed so far: \" +\n                    tokens\n            );\n        }\n        if (pseudomatch.index > end) {\n            if (str.slice(end, pseudomatch.index).trim()) {\n                throw new TokenizerError(\"Invalid expression\");\n            }\n        }\n        start = pseudomatch.index;\n        end = pseudoprog.lastIndex;\n        let token = str.slice(start, end).replace(strip, \"\");\n        if (NumberPattern.test(token)) {\n            tokens.push({\n                type: 0 /* Number */,\n                value: parseFloat(token),\n            });\n        } else if (StringPattern.test(token)) {\n            var m = StringPattern.exec(token);\n            tokens.push({\n                type: 1 /* String */,\n                value: decodeStringLiteral(m[3] !== undefined ? m[3] : m[5], !!(m[2] || m[4])),\n            });\n        } else if (symbols.has(token)) {\n            // transform 'not in' and 'is not' in a single token\n            if (token === \"in\" && tokens.length > 0 && tokens[tokens.length - 1].value === \"not\") {\n                token = \"not in\";\n                tokens.pop();\n            } else if (\n                token === \"not\" &&\n                tokens.length > 0 &&\n                tokens[tokens.length - 1].value === \"is\"\n            ) {\n                token = \"is not\";\n                tokens.pop();\n            }\n            tokens.push({\n                type: 2 /* Symbol */,\n                value: token,\n            });\n        } else if (constants.has(token)) {\n            tokens.push({\n                type: 4 /* Constant */,\n                value: token,\n            });\n        } else if (NamePattern.test(token)) {\n            tokens.push({\n                type: 3 /* Name */,\n                value: token,\n            });\n        } else {\n            throw new TokenizerError(\"Invalid expression\");\n        }\n    }\n    return tokens;\n}\n", "/** @odoo-module **/\n\nimport { bp } from \"./py_parser\";\nimport { PyDate, PyDateTime } from './py_date';\n\n// -----------------------------------------------------------------------------\n// Types\n// -----------------------------------------------------------------------------\n\n/**\n * @typedef { import(\"./py_parser\").AST } AST\n */\n\n// -----------------------------------------------------------------------------\n// Utils\n// -----------------------------------------------------------------------------\n\n/**\n * Represent any value as a primitive AST\n *\n * @param {any} value\n * @returns {AST}\n */\nexport function toPyValue(value) {\n    switch (typeof value) {\n        case \"string\":\n            return { type: 1 /* String */, value };\n        case \"number\":\n            return { type: 0 /* Number */, value };\n        case \"boolean\":\n            return { type: 2 /* Boolean */, value };\n        case \"object\":\n            if (Array.isArray(value)) {\n                return { type: 4 /* List */, value: value.map(toPyValue) };\n            } else if (value === null) {\n                return { type: 3 /* None */ };\n            } else if (value instanceof Date) {\n                return { type: 1, value: PyDateTime.convertDate(value) };\n            } else if (value instanceof PyDate || value instanceof PyDateTime) {\n                return { type: 1, value };\n            } else {\n                const content = {};\n                for (let key in value) {\n                    content[key] = toPyValue(value[key]);\n                }\n                return { type: 11 /* Dictionary */, value: content };\n            }\n        default:\n            throw new Error(\"Invalid type\");\n    }\n}\n\n/**\n * @param {AST} ast\n * @param {number} [lbp] left binding power\n * @return {string}\n */\nexport function formatAST(ast, lbp = 0) {\n    switch (ast.type) {\n        case 3 /* None */:\n            return \"None\";\n        case 1 /* String */:\n            return JSON.stringify(ast.value);\n        case 0 /* Number */:\n            return String(ast.value);\n        case 2 /* Boolean */:\n            return ast.value ? \"True\" : \"False\";\n        case 4 /* List */:\n            return `[${ast.value.map(formatAST).join(\", \")}]`;\n        case 6 /* UnaryOperator */:\n            if (ast.op === \"not\") {\n                return `not ` + formatAST(ast.right, 50);\n            }\n            return ast.op + formatAST(ast.right, 130);\n        case 7 /* BinaryOperator */: {\n            const abp = bp(ast.op);\n            const str = `${formatAST(ast.left, abp)} ${ast.op} ${formatAST(ast.right, abp)}`;\n            return abp < lbp ? `(${str})` : str;\n        }\n        case 11 /* Dictionary */: {\n            const pairs = [];\n            for (let k in ast.value) {\n                pairs.push(`\"${k}\": ${formatAST(ast.value[k])}`);\n            }\n            return `{` + pairs.join(\", \") + `}`;\n        }\n        case 10 /* Tuple */:\n            return `(${ast.value.map(formatAST).join(\", \")})`;\n        case 5 /* Name */:\n            return ast.value;\n        case 12 /* Lookup */: {\n            return `${formatAST(ast.target)}[${formatAST(ast.key)}]`;\n        }\n        case 13 /* If */: {\n            const { ifTrue, condition, ifFalse } = ast;\n            return `${formatAST(ifTrue)} if ${formatAST(condition)} else ${formatAST(ifFalse)}`;\n        }\n        case 14 /* BooleanOperator */: {\n            const abp = bp(ast.op);\n            const str = `${formatAST(ast.left, abp)} ${ast.op} ${formatAST(ast.right, abp)}`;\n            return abp < lbp ? `(${str})` : str;\n        }\n        case 15 /* ObjLookup */:\n            return `${formatAST(ast.obj, 150)}.${ast.key}`;\n        case 8 /* FunctionCall */: {\n            const args = ast.args.map(formatAST);\n            const kwargs = [];\n            for (let kwarg in ast.kwargs) {\n                kwargs.push(`${kwarg} = ${formatAST(ast.kwargs[kwarg])}`);\n            }\n            const argStr = args.concat(kwargs).join(\", \");\n            return `${formatAST(ast.fn)}(${argStr})`;\n        }\n    }\n    throw new Error(\"invalid expression: \" + ast);\n}\n\nexport const PY_DICT = Object.create(null);\n\n/**\n * @param {Object} obj\n * @returns {AST} a python dictionary\n */\nexport function toPyDict(obj) {\n    const result = Object.create(PY_DICT);\n    return Object.assign(result, obj);\n}\n", "/** @odoo-module **/\n\nconst { core } = owl;\nconst { EventBus } = core;\n\n// -----------------------------------------------------------------------------\n// Errors\n// -----------------------------------------------------------------------------\nexport class KeyNotFoundError extends Error {}\n\nexport class DuplicatedKeyError extends Error {}\n\n/**\n * Registry\n *\n * The Registry class is basically just a mapping from a string key to an object.\n * It is really not much more than an object. It is however useful for the\n * following reasons:\n *\n * 1. it let us react and execute code when someone add something to the registry\n *   (for example, the FunctionRegistry subclass this for this purpose)\n * 2. it throws an error when the get operation fails\n * 3. it provides a chained API to add items to the registry.\n */\nexport class Registry extends EventBus {\n    constructor() {\n        super();\n        this.content = {};\n        this.subRegistries = {};\n        this.elements = null;\n        this.entries = null;\n\n        this.on(\"UPDATE\", this, () => {\n            this.elements = null;\n            this.entries = null;\n        });\n    }\n\n    /**\n     * Add an entry (key, value) to the registry if key is not already used. If\n     * the parameter force is set to true, an entry with same key (if any) is replaced.\n     *\n     * Note that this also returns the registry, so another add method call can\n     * be chained\n     *\n     * @param {string} key\n     * @param {any} value\n     * @param {{force?: boolean, sequence?: number}} [options]\n     * @returns {Registry}\n     */\n    add(key, value, { force, sequence } = {}) {\n        if (!force && key in this.content) {\n            throw new DuplicatedKeyError(`Cannot add '${key}' in this registry: it already exists`);\n        }\n        let previousSequence;\n        if (force) {\n            const elem = this.content[key];\n            previousSequence = elem && elem[0];\n        }\n        sequence = sequence === undefined ? previousSequence || 50 : sequence;\n        this.content[key] = [sequence, value];\n        const payload = { operation: \"add\", key, value };\n        this.trigger(\"UPDATE\", payload);\n        return this;\n    }\n\n    /**\n     * Get an item from the registry\n     *\n     * @param {string} key\n     * @returns {any}\n     */\n    get(key, defaultValue) {\n        if (arguments.length < 2 && !(key in this.content)) {\n            throw new KeyNotFoundError(`Cannot find ${key} in this registry!`);\n        }\n        const info = this.content[key];\n        return info ? info[1] : defaultValue;\n    }\n\n    /**\n     * Check the presence of a key in the registry\n     *\n     * @param {string} key\n     * @returns {boolean}\n     */\n    contains(key) {\n        return key in this.content;\n    }\n\n    /**\n     * Get a list of all elements in the registry. Note that it is ordered\n     * according to the sequence numbers.\n     *\n     * @returns {any[]}\n     */\n    getAll() {\n        if (!this.elements) {\n            const content = Object.values(this.content).sort((el1, el2) => el1[0] - el2[0]);\n            this.elements = content.map((elem) => elem[1]);\n        }\n        return this.elements.slice();\n    }\n\n    /**\n     * Return a list of all entries, ordered by sequence numbers.\n     *\n     * @returns {[string, any][]}\n     */\n    getEntries() {\n        if (!this.entries) {\n            const entries = Object.entries(this.content).sort((el1, el2) => el1[1][0] - el2[1][0]);\n            this.entries = entries.map(([str, elem]) => [str, elem[1]]);\n        }\n        return this.entries.slice();\n    }\n\n    /**\n     * Remove an item from the registry\n     *\n     * @param {string} key\n     */\n    remove(key) {\n        const value = this.content[key];\n        delete this.content[key];\n        const payload = { operation: \"delete\", key, value };\n        this.trigger(\"UPDATE\", payload);\n    }\n\n    /**\n     * Open a sub registry (and create it if necessary)\n     *\n     * @param {string} subcategory\n     * @returns {Registry}\n     */\n    category(subcategory) {\n        if (!(subcategory in this.subRegistries)) {\n            this.subRegistries[subcategory] = new Registry();\n        }\n        return this.subRegistries[subcategory];\n    }\n}\n\nexport const registry = new Registry();\n", "/** @odoo-module **/\n\nimport { browser } from \"./browser/browser\";\nimport { registry } from \"./registry\";\nimport { scrollTo } from \"./utils/scrolling\";\n\nexport const scrollerService = {\n    start(env) {\n        /**\n         * Listen to click event to allow having links with href towards an anchor.\n         * Since odoo use hashtag to represent the current state of the view, we can't\n         * easily distinguish between a link towards an anchor and a link towards\n         * another view/state. If we want to navigate towards an anchor, we must not\n         * change the hash of the url otherwise we will be redirected to the app switcher\n         * instead To check if we have an anchor, first check if we have an href\n         * attribute starting with #. Try to find a element in the DOM using JQuery\n         * selector. If we have a match, it means that it is probably a link to an\n         * anchor, so we jump to that anchor.\n         *\n         * @param {MouseEvent} ev\n         */\n        browser.addEventListener(\"click\", (ev) => {\n            const link = ev.target.closest(\"a\");\n            if (!link) {\n                return;\n            }\n            const disableAnchor = link.attributes.getNamedItem(\"disable_anchor\");\n            if (disableAnchor && disableAnchor.value === \"true\") {\n                return;\n            }\n            const href = link.attributes.getNamedItem(\"href\");\n            if (href) {\n                if (href.value[0] === \"#\") {\n                    if (href.value.length === 1) {\n                        ev.preventDefault(); // single hash in href are just a way to activate A-tags node\n                        return;\n                    }\n                    let matchingEl = null;\n                    try {\n                        matchingEl = document.querySelector(`.o_content #${href.value.substr(1)}`);\n                    } catch (e) {\n                        // Invalid selector: not an anchor anyway\n                    }\n                    const triggerEv = new CustomEvent(\"anchor-link-clicked\", {\n                        detail: {\n                            element: matchingEl,\n                            id: href.value,\n                            originalEv: ev,\n                        },\n                    });\n                    env.bus.trigger(\"SCROLLER:ANCHOR_LINK_CLICKED\", triggerEv);\n                    if (matchingEl && !triggerEv.defaultPrevented) {\n                        ev.preventDefault();\n                        scrollTo(matchingEl, { isAnchor: true });\n                    }\n                }\n            }\n        });\n    },\n};\n\nregistry.category(\"services\").add(\"scroller\", scrollerService);\n", "/** @odoo-module **/\n\nconst { Component } = owl;\n\nexport class Tooltip extends Component {}\nTooltip.template = \"web.Tooltip\";\nTooltip.props = {\n    tooltip: { type: String, optional: true },\n    template: { type: String, optional: true },\n    info: { optional: true },\n};\n", "/** @odoo-module **/\n\nimport { browser } from \"@web/core/browser/browser\";\nimport { useEffect, useListener } from \"@web/core/utils/hooks\";\nimport { usePopover } from \"@web/core/popover/popover_hook\";\nimport { Tooltip } from \"./tooltip\";\n\n/**\n * The useTooltip hook allows to display custom tooltips on every elements with\n * a \"data-tooltip\" attribute inside the Component using the hook. This attribute\n * can be set on elements for which we prefer a custom tooltip instead of the\n * native one displaying the value of the \"title\" attribute.\n *\n * Usage (with a parent somewhere using the useTooltip hook):\n *   <button data-tooltip=\"This is a tooltip\">Do something</button>\n *\n * The ideal position of the tooltip can be specified thanks to the attribute\n * \"data-tooltip-position\":\n *   <button data-tooltip=\"This is a tooltip\" data-tooltip-position=\"left\">Do something</button>\n *\n * For advanced tooltips containing dynamic and/or html content, the\n * \"data-tooltip-template\" and \"data-tooltip-info\" attributes can be used.\n * For example, let's suppose the following qweb template:\n *   <t t-name=\"some_template\">\n *     <ul>\n *       <li>info.x</li>\n *       <li>info.y</li>\n *     </ul>\n *   </t>\n * This template can then be used in a tooltip as follows:\n *   <button data-tooltip-template=\"some_template\" data-tooltip-info=\"info\">Do something</button>\n * with \"info\" being a stringified object with two keys \"x\" and \"y\".\n */\nconst OPEN_DELAY = 400;\nconst CLOSE_DELAY = 200;\nexport function useTooltip() {\n    const popover = usePopover();\n    let openTooltipTimeout;\n    let closeTooltip;\n    let target = null;\n\n    /**\n     * Closes the currently opened tooltip if any, or prevent it from opening.\n     */\n    function cleanup() {\n        browser.clearTimeout(openTooltipTimeout);\n        if (closeTooltip) {\n            closeTooltip();\n        }\n    }\n\n    /**\n     * Opens the tooltip after a delay, if the event's target has a data-tooltip\n     * attribute.\n     *\n     * @param {MouseEvent} ev a \"mouseenter\" event\n     */\n    function onMouseEnter(ev) {\n        const dataset = ev.target.dataset;\n        const tooltip = dataset.tooltip;\n        let template, info;\n        if (\"tooltipTemplate\" in dataset) {\n            template = dataset.tooltipTemplate;\n            info = dataset.tooltipInfo ? JSON.parse(dataset.tooltipInfo) : null;\n        }\n        if (tooltip || template) {\n            cleanup();\n            target = ev.target;\n            openTooltipTimeout = browser.setTimeout(() => {\n                const position = dataset.tooltipPosition;\n                closeTooltip = popover.add(\n                    target,\n                    Tooltip,\n                    { tooltip, template, info },\n                    { position }\n                );\n            }, OPEN_DELAY);\n        }\n    }\n\n    // Track mouse position to be able to detect that we are no longer hovering\n    // the target, thus that we should close the tooltip\n    let positionX;\n    let positionY;\n    useListener(\"mousemove\", (ev) => {\n        positionX = ev.x;\n        positionY = ev.y;\n    });\n\n    // Regularly check that the target is still in the DOM and we're still\n    // hovering it, because if not, we have to close the tooltip\n    useEffect(\n        () => {\n            const interval = browser.setInterval(() => {\n                if (!target) {\n                    return;\n                }\n                if (!document.body.contains(target)) {\n                    return cleanup(); // target is no longer in the DOM\n                }\n                const targetRect = target.getBoundingClientRect();\n                if (\n                    positionX < targetRect.left ||\n                    positionX > targetRect.right ||\n                    positionY < targetRect.top ||\n                    positionY > targetRect.bottom\n                ) {\n                    return cleanup(); // mouse is no longer hovering the target\n                }\n            }, CLOSE_DELAY);\n            return () => browser.clearInterval(interval);\n        },\n        () => []\n    );\n\n    // Listen (using event delegation) to \"mouseenter\" events on all nodes with\n    // the \"data-tooltip\" or \"data-tooltip-template\" attribute, to open the tooltip.\n    const selector = \"[data-tooltip], [data-tooltip-template]\";\n    useListener(\"mouseenter\", selector, onMouseEnter, { capture: true });\n}\n", "/** @odoo-module **/\n\nimport { browser } from \"@web/core/browser/browser\";\n\nconst { Component, tags, useState } = owl;\n\nexport class BlockUI extends Component {\n    setup() {\n        this.messagesByDuration = [\n            { time: 20, l1: this.env._t(\"Loading...\") },\n            { time: 40, l1: this.env._t(\"Still loading...\") },\n            {\n                time: 60,\n                l1: this.env._t(\"Still loading...\"),\n                l2: this.env._t(\"Please be patient.\"),\n            },\n            {\n                time: 180,\n                l1: this.env._t(\"Don't leave yet,\"),\n                l2: this.env._t(\"it's still loading...\"),\n            },\n            {\n                time: 120,\n                l1: this.env._t(\"You may not believe it,\"),\n                l2: this.env._t(\"but the application is actually loading...\"),\n            },\n            {\n                time: 3180,\n                l1: this.env._t(\"Take a minute to get a coffee,\"),\n                l2: this.env._t(\"because it's loading...\"),\n            },\n            {\n                time: null,\n                l1: this.env._t(\n                    \"Maybe you should consider reloading the application by pressing F5...\"\n                ),\n            },\n        ];\n        this.state = useState({\n            blockUI: false,\n            line1: \"\",\n            line2: \"\",\n        });\n\n        this.props.bus.on(\"BLOCK\", this, this.block);\n        this.props.bus.on(\"UNBLOCK\", this, this.unblock);\n    }\n\n    replaceMessage(index) {\n        const message = this.messagesByDuration[index];\n        this.state.line1 = message.l1;\n        this.state.line2 = message.l2 || \"\";\n        if (message.time !== null) {\n            this.msgTimer = browser.setTimeout(() => {\n                this.replaceMessage(index + 1);\n            }, message.time * 1000);\n        }\n    }\n\n    block() {\n        this.state.blockUI = true;\n        this.replaceMessage(0);\n    }\n\n    unblock() {\n        this.state.blockUI = false;\n        clearTimeout(this.msgTimer);\n        this.state.line1 = \"\";\n        this.state.line2 = \"\";\n    }\n}\n\nBlockUI.template = tags.xml`\n    <div t-att-class=\"state.blockUI ? 'o_blockUI' : ''\">\n      <t t-if=\"state.blockUI\">\n        <div class=\"o_spinner\">\n            <img src=\"/web/static/img/spin.png\" alt=\"Loading...\"/>\n        </div>\n        <div class=\"o_message\">\n            <t t-raw=\"state.line1\"/> <br/>\n            <t t-raw=\"state.line2\"/>\n        </div>\n      </t>\n    </div>`;\n", "/** @odoo-module **/\n\nimport { useEffect, useService } from \"@web/core/utils/hooks\";\nimport { registry } from \"@web/core/registry\";\nimport { debounce } from \"@web/core/utils/timing\";\nimport { BlockUI } from \"./block_ui\";\nimport { browser } from \"@web/core/browser/browser\";\n\nconst { Component, core, hooks } = owl;\nconst { EventBus } = core;\nconst { useRef } = hooks;\n\nexport const SIZES = { XS: 0, VSM: 1, SM: 2, MD: 3, LG: 4, XL: 5, XXL: 6 };\n\n/**\n * This hook will set the UI active element\n * when the caller component will mount/unmount.\n *\n * The caller component could pass a `t-ref` value of its template\n * to delegate the UI active element to another element than itself.\n * In that case, it is mandatory that the referenced element is fixed and\n * not dynamically attached in/detached from the DOM (e.g. with t-if directive).\n *\n * @param {string} refName\n */\nexport function useActiveElement(refName = null) {\n    const uiService = useService(\"ui\");\n    const owner = refName ? useRef(refName) : Component.current;\n    useEffect(\n        () => {\n            uiService.activateElement(owner.el);\n            return () => uiService.deactivateElement(owner.el);\n        },\n        () => []\n    );\n}\n\nexport const uiService = {\n    start(env) {\n        let ui = {};\n\n        // block/unblock code\n        const bus = new EventBus();\n        registry.category(\"main_components\").add(\"BlockUI\", { Component: BlockUI, props: { bus } });\n\n        let blockCount = 0;\n        function block() {\n            blockCount++;\n            if (blockCount === 1) {\n                bus.trigger(\"BLOCK\");\n            }\n        }\n        function unblock() {\n            blockCount--;\n            if (blockCount < 0) {\n                console.warn(\n                    \"Unblock ui was called more times than block, you should only unblock the UI if you have previously blocked it.\"\n                );\n                blockCount = 0;\n            }\n            if (blockCount === 0) {\n                bus.trigger(\"UNBLOCK\");\n            }\n        }\n\n        Object.assign(ui, {\n            bus,\n            block,\n            unblock,\n        });\n\n        Object.defineProperty(ui, \"isBlocked\", {\n            get() {\n                return blockCount > 0;\n            },\n        });\n\n        // UI active element code\n        let activeElems = [document];\n\n        function activateElement(el) {\n            activeElems.push(el);\n            bus.trigger(\"active-element-changed\", el);\n        }\n        function deactivateElement(el) {\n            activeElems = activeElems.filter((x) => x !== el);\n            bus.trigger(\"active-element-changed\", ui.activeElement);\n        }\n        function getActiveElementOf(el) {\n            for (const activeElement of [...activeElems].reverse()) {\n                if (activeElement.contains(el)) {\n                    return activeElement;\n                }\n            }\n        }\n\n        Object.assign(ui, {\n            activateElement,\n            deactivateElement,\n            getActiveElementOf,\n        });\n        Object.defineProperty(ui, \"activeElement\", {\n            get() {\n                return activeElems[activeElems.length - 1];\n            },\n        });\n\n        // window size handling\n        const MEDIAS = [\n            window.matchMedia(\"(max-width: 474px)\"),\n            window.matchMedia(\"(min-width: 475px) and (max-width: 575px)\"),\n            window.matchMedia(\"(min-width: 576px) and (max-width: 767px)\"),\n            window.matchMedia(\"(min-width: 768px) and (max-width: 991px)\"),\n            window.matchMedia(\"(min-width: 992px) and (max-width: 1199px)\"),\n            window.matchMedia(\"(min-width: 1200px) and (max-width: 1533px)\"),\n            window.matchMedia(\"(min-width: 1534px)\"),\n        ];\n        function getSize() {\n            return MEDIAS.findIndex((media) => media.matches);\n        }\n\n        // listen to media query status changes\n        function updateSize() {\n            ui.size = getSize();\n        }\n        browser.addEventListener(\"resize\", debounce(updateSize, 100));\n\n        Object.assign(ui, {\n            size: getSize(),\n        });\n        Object.defineProperty(ui, \"isSmall\", {\n            get() {\n                return ui.size <= SIZES.SM;\n            },\n        });\n        Object.defineProperty(env, \"isSmall\", {\n            get() {\n                return ui.size <= SIZES.SM;\n            },\n        });\n\n        return ui;\n    },\n};\n\nregistry.category(\"services\").add(\"ui\", uiService);\n", "/** @odoo-module **/\n\nimport { registry } from \"./registry\";\nimport { session } from \"@web/session\";\n\nexport const userService = {\n    dependencies: [\"rpc\"],\n    async: [\"hasGroup\"],\n    start(env, { rpc }) {\n        const groupProms = {};\n\n        const context = {\n            ...session.user_context,\n            uid: session.uid,\n        };\n        return {\n            get context() {\n                return Object.assign({}, context);\n            },\n            removeFromContext(key) {\n                delete context[key];\n            },\n            updateContext(update) {\n                Object.assign(context, update);\n            },\n            hasGroup(group) {\n                if (!context.uid) {\n                    return Promise.resolve(false);\n                }\n                if (!groupProms[group]) {\n                    groupProms[group] = rpc(\"/web/dataset/call_kw/res.users/has_group\", {\n                        model: \"res.users\",\n                        method: \"has_group\",\n                        args: [group],\n                        kwargs: { context },\n                    });\n                }\n                return groupProms[group];\n            },\n            name: session.name,\n            userName: session.username,\n            isAdmin: session.is_admin,\n            isSystem: session.is_system,\n            partnerId: session.partner_id,\n            home_action_id: session.home_action_id,\n            showEffect: session.show_effect,\n            get userId() {\n                return context.uid;\n            },\n            get lang() {\n                return context.lang;\n            },\n            get tz() {\n                return context.tz;\n            },\n            get db() {\n                const res = {\n                    name: session.db,\n                };\n                if (\"dbuuid\" in session) {\n                    res.uuid = session.dbuuid;\n                }\n                return res;\n            },\n        };\n    },\n};\n\nregistry.category(\"services\").add(\"user\", userService);\n", "/** @odoo-module **/\n\n/**\n * Same values returned as those returned by cartesian function for case n = 0\n * and n > 1. For n = 1, brackets are put around the unique parameter elements.\n *\n * @returns {Array}\n */\nfunction _cartesian() {\n    const args = Array.prototype.slice.call(arguments);\n    if (args.length === 0) {\n        return [undefined];\n    }\n    const firstArray = args[0].map(function (elem) {\n        return [elem];\n    });\n    if (args.length === 1) {\n        return firstArray;\n    }\n    const productOfOtherArrays = _cartesian.apply(null, args.slice(1));\n    return firstArray.reduce(function (acc, elem) {\n        return acc.concat(\n            productOfOtherArrays.map(function (tuple) {\n                return elem.concat(tuple);\n            })\n        );\n    }, []);\n}\n\n/**\n * Helper function returning an extraction handler to use on array elements to\n * return a certain attribute or mutated form of the element.\n *\n * @private\n * @param {string | function} [criterion]\n * @returns {(element: any) => any}\n */\nfunction _getExtractorFrom(criterion) {\n    if (criterion) {\n        switch (typeof criterion) {\n            case \"string\":\n                return (element) => element[criterion];\n            case \"function\":\n                return criterion;\n            default:\n                throw new Error(\n                    `Expected criterion of type 'string' or 'function' and got '${typeof criterion}'`\n                );\n        }\n    } else {\n        return (element) => element;\n    }\n}\n\n/**\n * Returns an object holding different groups defined by a given criterion\n * or a default one. Each group is a subset of the original given list.\n * The given criterion can either be:\n * - a string: a property name on the list elements which value will be the\n * group name,\n * - a function: a handler that will return the group name from a given\n * element.\n *\n * @param {any[]} array\n * @param {string | function} [criterion]\n * @returns {Object}\n */\nexport function groupBy(array, criterion) {\n    const extract = _getExtractorFrom(criterion);\n    const groups = {};\n    for (const element of array) {\n        const group = String(extract(element));\n        if (!(group in groups)) {\n            groups[group] = [];\n        }\n        groups[group].push(element);\n    }\n    return groups;\n}\n\n/**\n * Return a shallow copy of a given array sorted by a given criterion or a default one.\n * The given criterion can either be:\n * - a string: a property name on the array elements returning the sortable primitive\n * - a function: a handler that will return the sortable primitive from a given element.\n * The default order is ascending ('asc'). It can be modified by setting the extra param 'order' to 'desc'.\n *\n * @param {any[]} array\n * @param {string | function} [criterion]\n * @param {\"asc\" | \"desc\"} [order=\"asc\"]\n * @returns {any[]}\n */\nexport function sortBy(array, criterion, order = \"asc\") {\n    const extract = _getExtractorFrom(criterion);\n    return array.slice().sort((elA, elB) => {\n        const a = extract(elA);\n        const b = extract(elB);\n        let result;\n        if (isNaN(a) && isNaN(b)) {\n            result = a > b ? 1 : a < b ? -1 : 0;\n        } else {\n            result = a - b;\n        }\n        return order === \"asc\" ? result : -result;\n    });\n}\n\n/**\n * Returns an array containing all the elements of arrayA\n * that are not in arrayB and vice-versa.\n *\n * @param {any[]} arrayA\n * @param {any[]} arrayB\n * @returns an array containing all the elements of arrayA\n * that are not in arrayB and vice-versa.\n */\nexport function symmetricalDifference(arrayA, arrayB) {\n    return arrayA\n        .filter((id) => !arrayB.includes(id))\n        .concat(arrayB.filter((id) => !arrayA.includes(id)));\n}\n\n/**\n * Returns the product of any number n of arrays.\n * The internal structures of their elements is preserved.\n * For n = 1, no brackets are put around the unique parameter elements\n * For n = 0, [undefined] is returned since it is the unit\n * of the cartesian product (up to isomorphism).\n *\n * @returns {Array}\n */\nexport function cartesian() {\n    const args = Array.prototype.slice.call(arguments);\n    if (args.length === 0) {\n        return [undefined];\n    } else if (args.length === 1) {\n        return args[0];\n    } else {\n        return _cartesian.apply(null, args);\n    }\n}\n\n/**\n * Returns all initial sections of a given array, e.g. for [1, 2] the array\n * [[], [1], [1, 2]] is returned.\n *\n * @param {Array} array\n * @returns {Array[]}\n */\nexport function sections(array) {\n    const sections = [];\n    for (let i = 0; i < array.length + 1; i++) {\n        sections.push(array.slice(0, i));\n    }\n    return sections;\n}\n", "/** @odoo-module **/\n\nconst { Component, tags } = owl;\n\nexport class NotUpdatable extends Component {\n    shouldUpdate() {\n        return false;\n    }\n}\nNotUpdatable.template = tags.xml`<t t-slot=\"default\" />`;\n\nexport class ErrorHandler extends Component {\n    catchError(error) {\n        if (this.props.onError) {\n            this.props.onError(error);\n        }\n    }\n}\nErrorHandler.template = tags.xml`<t t-slot=\"default\" />`;\n", "/** @odoo-module **/\n\n/**\n * KeepLast is a concurrency primitive that manages a list of tasks, and only\n * keeps the last task active.\n */\nexport class KeepLast {\n    constructor() {\n        this._id = 0;\n    }\n    /**\n     * Register a new task\n     *\n     * @template T\n     * @param {Promise<T>} promise\n     * @returns {Promise<T>}\n     */\n    add(promise) {\n        this._id++;\n        const currentId = this._id;\n        return new Promise((resolve, reject) => {\n            promise\n                .then((value) => {\n                    if (this._id === currentId) {\n                        resolve(value);\n                    }\n                })\n                .catch((reason) => {\n                    // not sure about this part\n                    if (this._id === currentId) {\n                        reject(reason);\n                    }\n                });\n        });\n    }\n}\n\n/**\n * A (Odoo) mutex is a primitive for serializing computations.  This is\n * useful to avoid a situation where two computations modify some shared\n * state and cause some corrupted state.\n *\n * Imagine that we have a function to fetch some data _load(), which returns\n * a promise which resolves to something useful. Now, we have some code\n * looking like this::\n *\n *      return this._load().then(function (result) {\n *          this.state = result;\n *      });\n *\n * If this code is run twice, but the second execution ends before the\n * first, then the final state will be the result of the first call to\n * _load.  However, if we have a mutex::\n *\n *      this.mutex = new Mutex();\n *\n * and if we wrap the calls to _load in a mutex::\n *\n *      return this.mutex.exec(function() {\n *          return this._load().then(function (result) {\n *              this.state = result;\n *          });\n *      });\n *\n * Then, it is guaranteed that the final state will be the result of the\n * second execution.\n *\n * A Mutex has to be a class, and not a function, because we have to keep\n * track of some internal state.\n */\nexport class Mutex {\n    constructor() {\n        this._lock = Promise.resolve();\n        this._queueSize = 0;\n        this._unlockedProm = undefined;\n        this._unlock = undefined;\n    }\n    /**\n     * Add a computation to the queue, it will be executed as soon as the\n     * previous computations are completed.\n     *\n     * @param {function} action a function which may return a Promise\n     * @returns {Promise}\n     */\n    async exec(action) {\n        const currentLock = this._lock;\n        let result;\n        this._queueSize++;\n        this._unlockedProm =\n            this._unlockedProm ||\n            new Promise((resolve) => {\n                this._unlock = resolve;\n            });\n        this._lock = new Promise((unlockCurrent) => {\n            currentLock.then(() => {\n                result = action();\n                const always = (returnedResult) => {\n                    unlockCurrent();\n                    this._queueSize--;\n                    if (this._queueSize === 0) {\n                        this._unlockedProm = undefined;\n                        this._unlock();\n                    }\n                    return returnedResult;\n                };\n                Promise.resolve(result).then(always).guardedCatch(always);\n            });\n        });\n        await this._lock;\n        return result;\n    }\n    /**\n     * @returns {Promise} resolved as soon as the Mutex is unlocked\n     *   (directly if it is currently idle)\n     */\n    getUnlockedDef() {\n        return this._unlockedProm || Promise.resolve();\n    }\n}\n\n/**\n * Race is a class designed to manage concurrency problems inspired by\n * Promise.race(), except that it is dynamic in the sense that promises can be\n * added anytime to a Race instance. When a promise is added, it returns another\n * promise which resolves as soon as a promise, among all added promises, is\n * resolved. The race is thus over. From that point, a new race will begin the\n * next time a promise will be added.\n */\nexport class Race {\n    constructor() {\n        this.currentProm = null;\n        this.currentPromResolver = null;\n        this.currentPromRejecter = null;\n    }\n    /**\n     * Register a new promise. If there is an ongoing race, the promise is added\n     * to that race. Otherwise, it starts a new race. The returned promise\n     * resolves as soon as the race is over, with the value of the first resolved\n     * promise added to the race.\n     *\n     * @param {Promise} promise\n     * @returns {Promise}\n     */\n    add(promise) {\n        if (!this.currentProm) {\n            this.currentProm = new Promise((resolve, reject) => {\n                this.currentPromResolver = (value) => {\n                    this.currentProm = null;\n                    this.currentPromResolver = null;\n                    this.currentPromRejecter = null;\n                    resolve(value);\n                };\n                this.currentPromRejecter = (error) => {\n                    this.currentProm = null;\n                    this.currentPromResolver = null;\n                    this.currentPromRejecter = null;\n                    reject(error);\n                };\n            });\n        }\n        promise.then(this.currentPromResolver).catch(this.currentPromRejecter);\n        return this.currentProm;\n    }\n    /**\n     * @returns {Promise|null} promise resolved as soon as the race is over, or\n     *   null if there is no race ongoing)\n     */\n    getCurrentProm() {\n        return this.currentProm;\n    }\n}\n", "/** @odoo-module **/\n\n/**\n * Creates a version of the function that's memoized on the value of its first\n * argument, if any.\n *\n * @template T, U\n * @param {(arg: T) => U} func the function to memoize\n * @returns {(arg: T) => U} a memoized version of the original function\n */\nexport function memoize(func) {\n    const cache = new Map();\n    const funcName = func.name ? func.name + \" (memoized)\" : \"memoized\";\n    return {\n        [funcName](...args) {\n            if (!cache.has(args[0])) {\n                cache.set(args[0], func(...args));\n            }\n            return cache.get(...args);\n        },\n    }[funcName];\n}\n", "/** @odoo-module **/\n\nimport { SERVICES_METADATA } from \"@web/env\";\n\nconst { onMounted, onWillPatch, onPatched, onWillUnmount, useComponent } = owl.hooks;\n\n/**\n * This file contains various custom hooks.\n * Their inner working is rather simple:\n * Each custom hook simply hooks itself to any number of owl lifecycle hooks.\n * You can then use them just like an owl hook in any Component\n * e.g.:\n * import { useBus } from \"@web/core/utils/hooks\";\n * ...\n * setup() {\n *    ...\n *    useBus(someBus, someEvent, callback)\n *    ...\n * }\n */\n\n// -----------------------------------------------------------------------------\n// useAutofocus\n// -----------------------------------------------------------------------------\n\n/**\n * Focus a given selector as soon as it appears in the DOM and if it was not\n * displayed before. If the selected target is an input|textarea, set the selection\n * at the end.\n *\n * @param {Object} [params]\n * @param {string} [params.selector='autofocus'] default: select the first element\n *                 with an `autofocus` attribute.\n * @returns {Function} function that forces the focus on the next update if visible.\n */\nexport function useAutofocus(params = {}) {\n    const comp = useComponent();\n    // Prevent autofocus in mobile\n    if (comp.env.isSmall) {\n        return () => {};\n    }\n    const selector = params.selector || \"[autofocus]\";\n    let forceFocusCount = 0;\n    useEffect(\n        function autofocus() {\n            const target = comp.el.querySelector(selector);\n            if (target) {\n                target.focus();\n                if ([\"INPUT\", \"TEXTAREA\"].includes(target.tagName) && target.type !== 'number') {\n                    const inputEl = target;\n                    inputEl.selectionStart = inputEl.selectionEnd = inputEl.value.length;\n                }\n            }\n        },\n        () => [forceFocusCount]\n    );\n\n    return function focusOnUpdate() {\n        forceFocusCount++; // force the effect to rerun on next patch\n    };\n}\n\n// -----------------------------------------------------------------------------\n// useBus\n// -----------------------------------------------------------------------------\n\n/**\n * Ensures a bus event listener is attached and cleared the proper way.\n *\n * @param {EventBus} bus\n * @param {string} eventName\n * @param {Callback} callback\n */\nexport function useBus(bus, eventName, callback) {\n    const component = useComponent();\n    useEffect(\n        () => {\n            bus.on(eventName, component, callback);\n            return () => bus.off(eventName, component);\n        },\n        () => []\n    );\n}\n\n// -----------------------------------------------------------------------------\n// useEffect\n// -----------------------------------------------------------------------------\n\nconst NO_OP = () => {};\n/**\n * @callback Effect\n * @param {...any} dependencies the dependencies computed by computeDependencies\n * @returns {void|(()=>void)} a cleanup function that reverses the side\n *      effects of the effect callback.\n */\n\n/**\n * This hook will run a callback when a component is mounted and patched, and\n * will run a cleanup function before patching and before unmounting the\n * the component.\n *\n * @param {Effect} effect the effect to run on component mount and/or patch\n * @param {()=>any[]} [computeDependencies=()=>[NaN]] a callback to compute\n *      dependencies that will decide if the effect needs to be cleaned up and\n *      run again. If the dependencies did not change, the effect will not run\n *      again. The default value returns an array containing only NaN because\n *      NaN !== NaN, which will cause the effect to rerun on every patch.\n */\nexport function useEffect(effect, computeDependencies = () => [NaN]) {\n    let cleanup, dependencies;\n    onMounted(() => {\n        dependencies = computeDependencies();\n        cleanup = effect(...dependencies) || NO_OP;\n    });\n\n    let shouldReapplyOnPatch = false;\n    onWillPatch(() => {\n        const newDeps = computeDependencies();\n        shouldReapplyOnPatch = newDeps.some((val, i) => val !== dependencies[i]);\n        if (shouldReapplyOnPatch) {\n            cleanup();\n            dependencies = newDeps;\n        }\n    });\n    onPatched(() => {\n        if (shouldReapplyOnPatch) {\n            cleanup = effect(...dependencies) || NO_OP;\n        }\n    });\n\n    onWillUnmount(() => cleanup());\n}\n\n// -----------------------------------------------------------------------------\n// useListener\n// -----------------------------------------------------------------------------\n\n/**\n * The useListener hook offers an alternative to Owl's classical event\n * registration mechanism (with attribute 't-on-eventName' in xml).\n *\n * It is especially useful for abstract components, meant to be extended by\n * specific ones. If those abstract components need to define event handlers,\n * but don't have any template (because the template completely depends on\n * specific cases), then using the 't-on' mechanism isn't adequate, as the\n * handlers would be lost by the template override. In this case, using this\n * hook instead is more convenient.\n *\n * Usage: like all Owl hooks, this function has to be called in the\n * constructor of an Owl component:\n *\n *   useListener('click', () => { console.log('clicked'); });\n *\n * It also allows to do event delegation, by specifying a native query selector\n * as second argument. In this case, the handler is only called if the event\n * is triggered on an element matching the given selector.\n *\n *   useListener('click', 'button', () => { console.log('clicked'); });\n *\n * Note: components that alter the event's target (e.g. Portal) are not\n * expected to behave as expected with event delegation.\n *\n * @param {string} eventName the name of the event\n * @param {string} [querySelector] a JS native selector for event delegation\n * @param {function} handler the event handler (will be bound to the component)\n * @param {Object} [options] to be passed to addEventListener as options.\n *   Useful for listening in the capture phase\n */\nexport function useListener(eventName, querySelector, handler, options = {}) {\n    if (typeof arguments[1] !== \"string\") {\n        querySelector = null;\n        handler = arguments[1];\n        options = arguments[2] || {};\n    }\n    if (typeof handler !== \"function\") {\n        throw new Error(\"The handler must be a function\");\n    }\n\n    const comp = useComponent();\n    let boundHandler;\n    if (querySelector) {\n        boundHandler = function (ev) {\n            let el = ev.target;\n            let target;\n            while (el && !target) {\n                if (el.matches(querySelector)) {\n                    target = el;\n                } else if (el === comp.el) {\n                    el = null;\n                } else {\n                    el = el.parentElement;\n                }\n            }\n            if (el) {\n                handler.call(comp, ev);\n            }\n        };\n    } else {\n        boundHandler = handler.bind(comp);\n    }\n    useEffect(\n        () => {\n            comp.el.addEventListener(eventName, boundHandler, options);\n            return () => {\n                comp.el.removeEventListener(eventName, boundHandler, options);\n            };\n        },\n        () => []\n    );\n}\n\n// -----------------------------------------------------------------------------\n// useService\n// -----------------------------------------------------------------------------\n\nfunction _protectMethod(component, caller, fn) {\n    return async (...args) => {\n        if (component.__owl__.status === 5 /* DESTROYED */) {\n            throw new Error(\"Component is destroyed\");\n        }\n        const result = await fn.call(caller, ...args);\n        return component.__owl__.status === 5 ? new Promise(() => {}) : result;\n    };\n}\n\n/**\n * Import a service into a component\n *\n * @param {string} serviceName\n * @returns {any}\n */\nexport function useService(serviceName) {\n    const component = useComponent();\n    const { services } = component.env;\n    if (!(serviceName in services)) {\n        throw new Error(`Service ${serviceName} is not available`);\n    }\n    const service = services[serviceName];\n    if (serviceName in SERVICES_METADATA) {\n        if (service instanceof Function) {\n            return _protectMethod(component, null, service);\n        } else {\n            const methods = SERVICES_METADATA[serviceName];\n            const result = Object.create(service);\n            for (let method of methods) {\n                result[method] = _protectMethod(component, service, service[method]);\n            }\n            return result;\n        }\n    }\n    return service;\n}\n\n/**\n * Executes \"callback\" when the component is being destroyed\n * @param  {Function} callback\n */\nexport function onDestroyed(callback) {\n    const component = useComponent();\n    const _destroy = component.__destroy;\n    component.__destroy = (...args) => {\n        _destroy.call(component, ...args);\n        // callback is called after super to guarantee the component is actually destroyed\n        callback();\n    };\n}\n", "/** @odoo-module **/\n\n/**\n * @param {Number} value\n * @param {Number} comparisonValue\n * @returns {Number}\n */\nexport function computeVariation(value, comparisonValue) {\n    if (isNaN(value) || isNaN(comparisonValue)) {\n        return NaN;\n    }\n    if (comparisonValue === 0) {\n        if (value === 0) {\n            return 0;\n        } else if (value > 0) {\n            return 1;\n        } else {\n            return -1;\n        }\n    }\n    return (value - comparisonValue) / Math.abs(comparisonValue);\n}\n", "/** @odoo-module **/\n\n/**\n * Shallow compares two objects.\n */\nexport function shallowEqual(obj1, obj2) {\n    const obj1Keys = Object.keys(obj1);\n    return (\n        obj1Keys.length === Object.keys(obj2).length &&\n        obj1Keys.every((key) => obj1[key] === obj2[key])\n    );\n}\n\n/**\n * Deep copies an object. As it relies on JSON this function as some limitations\n * - no support for circular objects\n * - no support for specific classes, that will at best be lost and at worst crash (Map, Set etc...)\n * @param  {Object} An object that is fully JSON stringifiable\n * @return {Object}\n */\nexport function deepCopy(obj) {\n    return JSON.parse(JSON.stringify(obj));\n}\n", "/** @odoo-module **/\n\nconst patchMap = new WeakMap();\n\n/**\n * Patch an object\n *\n * If the intent is to patch a class, don't forget to patch the prototype, unless\n * you want to patch static properties/methods.\n *\n * @param {Object} obj Object to patch\n * @param {string} patchName\n * @param {Object} patchValue\n * @param {{pure?: boolean}} [options]\n */\nexport function patch(obj, patchName, patchValue, options = {}) {\n    if (typeof patchName !== \"string\") {\n        throw new Error(\"Incorrect use of patch: second argument should be the patchName\");\n    }\n    const pure = Boolean(options.pure);\n    if (!patchMap.has(obj)) {\n        patchMap.set(obj, {\n            original: {},\n            patches: [],\n        });\n    }\n    const objDesc = patchMap.get(obj);\n    if (objDesc.patches.some((p) => p.name === patchName)) {\n        throw new Error(`Class ${obj.name} already has a patch ${patchName}`);\n    }\n    objDesc.patches.push({\n        name: patchName,\n        patch: patchValue,\n        pure,\n    });\n\n    for (const k in patchValue) {\n        let prevDesc = null;\n        let proto = obj;\n        do {\n            prevDesc = Object.getOwnPropertyDescriptor(proto, k);\n            proto = Object.getPrototypeOf(proto);\n        } while (!prevDesc && proto);\n\n        let newDesc = Object.getOwnPropertyDescriptor(patchValue, k);\n        if (!Object.hasOwnProperty.call(objDesc.original, k)) {\n            objDesc.original[k] = Object.getOwnPropertyDescriptor(obj, k);\n        }\n\n        if (prevDesc) {\n            const patchedFnName = `${k} (patch ${patchName})`;\n\n            if (prevDesc.value && typeof newDesc.value === \"function\") {\n                newDesc = { ...prevDesc, value: newDesc.value };\n                makeIntermediateFunction(\"value\", prevDesc, newDesc, patchedFnName);\n            }\n            if ((newDesc.get || newDesc.set) && (prevDesc.get || prevDesc.set)) {\n                // get and set are defined together. If they are both defined\n                // in the previous descriptor but only one in the new descriptor\n                // then the other will be undefined so we need to apply the\n                // previous descriptor in the new one.\n                newDesc = {\n                    ...prevDesc,\n                    get: newDesc.get || prevDesc.get,\n                    set: newDesc.set || prevDesc.set,\n                };\n                if (prevDesc.get && typeof newDesc.get === \"function\") {\n                    makeIntermediateFunction(\"get\", prevDesc, newDesc, patchedFnName);\n                }\n                if (prevDesc.set && typeof newDesc.set === \"function\") {\n                    makeIntermediateFunction(\"set\", prevDesc, newDesc, patchedFnName);\n                }\n            }\n        }\n\n        Object.defineProperty(obj, k, newDesc);\n    }\n\n    function makeIntermediateFunction(key, prevDesc, newDesc, patchedFnName) {\n        const _superFn = prevDesc[key];\n        const patchFn = newDesc[key];\n        if (pure) {\n            newDesc[key] = patchFn;\n        } else {\n            newDesc[key] = {\n                [patchedFnName](...args) {\n                    let prevSuper;\n                    if (this) {\n                        prevSuper = this._super;\n                        Object.defineProperty(this, \"_super\", {\n                            value: _superFn.bind(this),\n                            configurable: true,\n                            writable: true,\n                        });\n                    }\n                    const result = patchFn.call(this, ...args);\n                    if (this) {\n                        Object.defineProperty(this, \"_super\", {\n                            value: prevSuper,\n                            configurable: true,\n                            writable: true,\n                        });\n                    }\n                    return result;\n                },\n            }[patchedFnName];\n        }\n    }\n}\n\n/**\n * We define here an unpatch function.  This is mostly useful if we want to\n * remove a patch.  For example, for testing purposes\n *\n * @param {Object} obj\n * @param {string} patchName\n */\nexport function unpatch(obj, patchName) {\n    const objDesc = patchMap.get(obj);\n    if (!objDesc.patches.some((p) => p.name === patchName)) {\n        throw new Error(`Class ${obj.name} does not have any patch ${patchName}`);\n    }\n    patchMap.delete(obj);\n\n    // Restore original methods on the prototype and the class.\n    for (const k in objDesc.original) {\n        if (objDesc.original[k] === undefined) {\n            delete obj[k];\n        } else {\n            Object.defineProperty(obj, k, objDesc.original[k]);\n        }\n    }\n\n    // Re-apply the patches except the one to remove.\n    for (const patchDesc of objDesc.patches) {\n        if (patchDesc.name !== patchName) {\n            patch(obj, patchDesc.name, patchDesc.patch, { pure: patchDesc.pure });\n        }\n    }\n}\n", "/** @odoo-module */\n\n/**\n * Ensures that `element` will be visible in its `scrollable`.\n *\n * @param {HTMLElement} element\n * @param {Object} options\n * @param {HTMLElement} options[scrollable] a scrollable area\n * @param {Boolean} options[isAnchor] states if the scroll is to an anchor\n */\nexport function scrollTo(element, options = { scrollable: null, isAnchor: false }) {\n    function _getScrollParent(node) {\n        if (node == null) {\n            return null;\n        }\n\n        if (node.scrollHeight > node.clientHeight && node.clientHeight > 0) {\n            return node;\n        } else {\n            return _getScrollParent(node.parentNode);\n        }\n    }\n\n    const scrollable = options.scrollable\n        ? options.scrollable\n        : _getScrollParent(element.parentNode);\n    if (scrollable) {\n        const scrollBottom = scrollable.getBoundingClientRect().bottom;\n        const scrollTop = scrollable.getBoundingClientRect().top;\n        const elementBottom = element.getBoundingClientRect().bottom;\n        const elementTop = element.getBoundingClientRect().top;\n        if (elementBottom > scrollBottom && !options.isAnchor) {\n            // The scroll place the element at the bottom border of the scrollable\n            scrollable.scrollTop +=\n                elementTop - scrollBottom + Math.ceil(element.getBoundingClientRect().height);\n        } else if (elementTop < scrollTop || options.isAnchor) {\n            // The scroll place the element at the top of the scrollable\n            scrollable.scrollTop -= scrollTop - elementTop;\n            if (options.isAnchor) {\n                // If the scrollable is within a scrollable, another scroll should be done\n                const parentScrollable = _getScrollParent(scrollable.parentNode);\n                if (parentScrollable) {\n                    scrollTo(scrollable, { isAnchor: true, scrollable: parentScrollable });\n                }\n            }\n        }\n    }\n}\n\n/*\n * Returns the main scrollable element relevant in a context of an action.\n * In desktop, the relevant element is the .o_content of the action.\n * In mobile, it is the html node itself, provided no other children is scrollable\n *   Most of the times in mobile, we don't want to scroll individual elements, so every bit\n *   of code should enforce that html is the scrollable element.\n *\n * @param {Component} The action component.\n * @return {Element}\n */\nfunction getScrollableElement(component) {\n    if (component.env.isSmall) {\n        return document.firstElementChild; // aka html node;\n    } else {\n        return component.el.querySelector(\".o_action_manager .o_content\");\n    }\n}\n\n/**\n * Retrieves the current top and left scroll position. By default, the scrolling\n * area is the '.o_content' main div. In mobile, it is the body.\n *\n * @param {Component} an action Component containing an .o_content scrollable\n *   area.\n */\nexport function getScrollPosition(component) {\n    const scrollingEl = getScrollableElement(component);\n    return {\n        left: scrollingEl ? scrollingEl.scrollLeft : 0,\n        top: scrollingEl ? scrollingEl.scrollTop : 0,\n    };\n}\n\n/**\n * Sets top and left scroll positions to the given values. By default, the\n * scrolling area is the '.o_content' main div. In mobile, it is the body.\n *\n * @param {Component} an action Component containing an .o_content scrollable\n *   area.\n * @param {Object} offset\n * @param {number} [offset.left=0]\n * @param {number} [offset.top=0]\n */\nexport function setScrollPosition(component, offset) {\n    const scrollingEl = getScrollableElement(component);\n    if (scrollingEl) {\n        scrollingEl.scrollLeft = offset.left || 0;\n        scrollingEl.scrollTop = offset.top || 0;\n    }\n}\n", "/** @odoo-module */\n\nimport { unaccent } from \"./strings\";\n\n/**\n * This private function computes a score that represent the fact that the\n * string contains the pattern, or not\n *\n * - If the score is 0, the string does not contain the letters of the pattern in\n *   the correct order.\n * - if the score is > 0, it actually contains the letters.\n *\n * Better matches will get a higher score: consecutive letters are better,\n * and a match closer to the beginning of the string is also scored higher.\n */\nfunction match(pattern, str) {\n    let totalScore = 0;\n    let currentScore = 0;\n    let len = str.length;\n    let patternIndex = 0;\n\n    pattern = unaccent(pattern, false);\n    str = unaccent(str, false);\n\n    for (let i = 0; i < len; i++) {\n        if (str[i] === pattern[patternIndex]) {\n            patternIndex++;\n            currentScore += 100 + currentScore - i / 200;\n        } else {\n            currentScore = 0;\n        }\n        totalScore = totalScore + currentScore;\n    }\n\n    return patternIndex === pattern.length ? totalScore : 0;\n}\n\n/**\n * Return a list of things that matches a pattern, ordered by their 'score' (\n * higher score first). An higher score means that the match is better. For\n * example, consecutive letters are considered a better match.\n */\nexport function fuzzyLookup(pattern, list, fn) {\n    const results = [];\n    list.forEach((data) => {\n        const score = match(pattern, fn(data));\n        if (score > 0) {\n            results.push({ score, elem: data });\n        }\n    });\n\n    // we want better matches first\n    results.sort((a, b) => b.score - a.score);\n\n    return results.map((r) => r.elem);\n}\n\n// Does `pattern` fuzzy match `string`?\nexport function fuzzyTest(pattern, string) {\n    return match(pattern, string) !== 0;\n}\n", "/** @odoo-module **/\n\n/**\n * Escapes a string to use as a RegExp.\n * @url https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#Escaping\n *\n * @param {string} str\n * @returns {string} escaped string to use as a RegExp\n */\nexport function escapeRegExp(str) {\n    return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\n/**\n * Intersperses ``separator`` in ``str`` at the positions indicated by\n * ``indices``.\n *\n * ``indices`` is an array of relative offsets (from the previous insertion\n * position, starting from the end of the string) at which to insert\n * ``separator``.\n *\n * There are two special values:\n *\n * ``-1``\n *   indicates the insertion should end now\n * ``0``\n *   indicates that the previous section pattern should be repeated (until all\n *   of ``str`` is consumed)\n *\n * @param {string} str\n * @param {number[]} indices\n * @param {string} separator\n * @returns {string}\n */\nexport function intersperse(str, indices, separator = \"\") {\n    separator = separator || \"\";\n    const result = [];\n    let last = str.length;\n    for (let i = 0; i < indices.length; ++i) {\n        let section = indices[i];\n        if (section === -1 || last <= 0) {\n            // Done with string, or -1 (stops formatting string)\n            break;\n        } else if (section === 0 && i === 0) {\n            // repeats previous section, which there is none => stop\n            break;\n        } else if (section === 0) {\n            // repeat previous section forever\n            //noinspection AssignmentToForLoopParameterJS\n            section = indices[--i];\n        }\n        result.push(str.substring(last - section, last));\n        last -= section;\n    }\n    const s = str.substring(0, last);\n    if (s) {\n        result.push(s);\n    }\n    return result.reverse().join(separator);\n}\n\n/**\n * Returns a string formatted using given values.\n * If the value is an object, its keys will replace `%(key)s` expressions.\n * If the values are a set of strings, they will replace `%s` expressions.\n * If no value is given, the string will not be formatted.\n *\n * @param {string} s\n * @param {...string} ...values\n * @returns {string}\n */\nexport function sprintf(s, ...values) {\n    if (values.length === 1 && Object.prototype.toString.call(values[0]) === \"[object Object]\") {\n        const valuesDict = values[0];\n        s = s.replace(/\\%\\(?([^\\)]+)\\)s/g, (match, value) => valuesDict[value]);\n    } else if (values.length > 0) {\n        s = s.replace(/\\%s/g, () => values.shift());\n    }\n    return s;\n}\n\n/**\n * Capitalizes a string: \"abc def\" => \"Abc def\"\n *\n * @param {string} s the input string\n * @returns {string}\n */\nexport function capitalize(s) {\n    return s ? s[0].toUpperCase() + s.slice(1) : \"\";\n}\n\nconst diacriticsMap = {\n'\\u0041': 'A','\\u24B6': 'A','\\uFF21': 'A','\\u00C0': 'A','\\u00C1': 'A','\\u00C2': 'A','\\u1EA6': 'A','\\u1EA4': 'A','\\u1EAA': 'A','\\u1EA8': 'A',\n'\\u00C3': 'A','\\u0100': 'A','\\u0102': 'A','\\u1EB0': 'A','\\u1EAE': 'A','\\u1EB4': 'A','\\u1EB2': 'A','\\u0226': 'A','\\u01E0': 'A','\\u00C4': 'A',\n'\\u01DE': 'A','\\u1EA2': 'A','\\u00C5': 'A','\\u01FA': 'A','\\u01CD': 'A','\\u0200': 'A','\\u0202': 'A','\\u1EA0': 'A','\\u1EAC': 'A','\\u1EB6': 'A',\n'\\u1E00': 'A','\\u0104': 'A','\\u023A': 'A','\\u2C6F': 'A',\n\n'\\uA732': 'AA',\n'\\u00C6': 'AE','\\u01FC': 'AE','\\u01E2': 'AE',\n'\\uA734': 'AO',\n'\\uA736': 'AU',\n'\\uA738': 'AV','\\uA73A': 'AV',\n'\\uA73C': 'AY',\n'\\u0042': 'B','\\u24B7': 'B','\\uFF22': 'B','\\u1E02': 'B','\\u1E04': 'B','\\u1E06': 'B','\\u0243': 'B','\\u0182': 'B','\\u0181': 'B',\n\n'\\u0043': 'C','\\u24B8': 'C','\\uFF23': 'C','\\u0106': 'C','\\u0108': 'C','\\u010A': 'C','\\u010C': 'C','\\u00C7': 'C','\\u1E08': 'C','\\u0187': 'C',\n'\\u023B': 'C','\\uA73E': 'C',\n\n'\\u0044': 'D','\\u24B9': 'D','\\uFF24': 'D','\\u1E0A': 'D','\\u010E': 'D','\\u1E0C': 'D','\\u1E10': 'D','\\u1E12': 'D','\\u1E0E': 'D','\\u0110': 'D',\n'\\u018B': 'D','\\u018A': 'D','\\u0189': 'D','\\uA779': 'D',\n\n'\\u01F1': 'DZ','\\u01C4': 'DZ',\n'\\u01F2': 'Dz','\\u01C5': 'Dz',\n\n'\\u0045': 'E','\\u24BA': 'E','\\uFF25': 'E','\\u00C8': 'E','\\u00C9': 'E','\\u00CA': 'E','\\u1EC0': 'E','\\u1EBE': 'E','\\u1EC4': 'E','\\u1EC2': 'E',\n'\\u1EBC': 'E','\\u0112': 'E','\\u1E14': 'E','\\u1E16': 'E','\\u0114': 'E','\\u0116': 'E','\\u00CB': 'E','\\u1EBA': 'E','\\u011A': 'E','\\u0204': 'E',\n'\\u0206': 'E','\\u1EB8': 'E','\\u1EC6': 'E','\\u0228': 'E','\\u1E1C': 'E','\\u0118': 'E','\\u1E18': 'E','\\u1E1A': 'E','\\u0190': 'E','\\u018E': 'E',\n\n'\\u0046': 'F','\\u24BB': 'F','\\uFF26': 'F','\\u1E1E': 'F','\\u0191': 'F','\\uA77B': 'F',\n\n'\\u0047': 'G','\\u24BC': 'G','\\uFF27': 'G','\\u01F4': 'G','\\u011C': 'G','\\u1E20': 'G','\\u011E': 'G','\\u0120': 'G','\\u01E6': 'G','\\u0122': 'G',\n'\\u01E4': 'G','\\u0193': 'G','\\uA7A0': 'G','\\uA77D': 'G','\\uA77E': 'G',\n\n'\\u0048': 'H','\\u24BD': 'H','\\uFF28': 'H','\\u0124': 'H','\\u1E22': 'H','\\u1E26': 'H','\\u021E': 'H','\\u1E24': 'H','\\u1E28': 'H','\\u1E2A': 'H',\n'\\u0126': 'H','\\u2C67': 'H','\\u2C75': 'H','\\uA78D': 'H',\n\n'\\u0049': 'I','\\u24BE': 'I','\\uFF29': 'I','\\u00CC': 'I','\\u00CD': 'I','\\u00CE': 'I','\\u0128': 'I','\\u012A': 'I','\\u012C': 'I','\\u0130': 'I',\n'\\u00CF': 'I','\\u1E2E': 'I','\\u1EC8': 'I','\\u01CF': 'I','\\u0208': 'I','\\u020A': 'I','\\u1ECA': 'I','\\u012E': 'I','\\u1E2C': 'I','\\u0197': 'I',\n\n'\\u004A': 'J','\\u24BF': 'J','\\uFF2A': 'J','\\u0134': 'J','\\u0248': 'J',\n\n'\\u004B': 'K','\\u24C0': 'K','\\uFF2B': 'K','\\u1E30': 'K','\\u01E8': 'K','\\u1E32': 'K','\\u0136': 'K','\\u1E34': 'K','\\u0198': 'K','\\u2C69': 'K',\n'\\uA740': 'K','\\uA742': 'K','\\uA744': 'K','\\uA7A2': 'K',\n\n'\\u004C': 'L','\\u24C1': 'L','\\uFF2C': 'L','\\u013F': 'L','\\u0139': 'L','\\u013D': 'L','\\u1E36': 'L','\\u1E38': 'L','\\u013B': 'L','\\u1E3C': 'L',\n'\\u1E3A': 'L','\\u0141': 'L','\\u023D': 'L','\\u2C62': 'L','\\u2C60': 'L','\\uA748': 'L','\\uA746': 'L','\\uA780': 'L',\n\n'\\u01C7': 'LJ',\n'\\u01C8': 'Lj',\n'\\u004D': 'M','\\u24C2': 'M','\\uFF2D': 'M','\\u1E3E': 'M','\\u1E40': 'M','\\u1E42': 'M','\\u2C6E': 'M','\\u019C': 'M',\n\n'\\u004E': 'N','\\u24C3': 'N','\\uFF2E': 'N','\\u01F8': 'N','\\u0143': 'N','\\u00D1': 'N','\\u1E44': 'N','\\u0147': 'N','\\u1E46': 'N','\\u0145': 'N',\n'\\u1E4A': 'N','\\u1E48': 'N','\\u0220': 'N','\\u019D': 'N','\\uA790': 'N','\\uA7A4': 'N',\n\n'\\u01CA': 'NJ',\n'\\u01CB': 'Nj',\n\n'\\u004F': 'O','\\u24C4': 'O','\\uFF2F': 'O','\\u00D2': 'O','\\u00D3': 'O','\\u00D4': 'O','\\u1ED2': 'O','\\u1ED0': 'O','\\u1ED6': 'O','\\u1ED4': 'O',\n'\\u00D5': 'O','\\u1E4C': 'O','\\u022C': 'O','\\u1E4E': 'O','\\u014C': 'O','\\u1E50': 'O','\\u1E52': 'O','\\u014E': 'O','\\u022E': 'O','\\u0230': 'O',\n'\\u00D6': 'O','\\u022A': 'O','\\u1ECE': 'O','\\u0150': 'O','\\u01D1': 'O','\\u020C': 'O','\\u020E': 'O','\\u01A0': 'O','\\u1EDC': 'O','\\u1EDA': 'O',\n'\\u1EE0': 'O','\\u1EDE': 'O','\\u1EE2': 'O','\\u1ECC': 'O','\\u1ED8': 'O','\\u01EA': 'O','\\u01EC': 'O','\\u00D8': 'O','\\u01FE': 'O','\\u0186': 'O',\n'\\u019F': 'O','\\uA74A': 'O','\\uA74C': 'O',\n\n'\\u01A2': 'OI',\n'\\uA74E': 'OO',\n'\\u0222': 'OU',\n'\\u0050': 'P','\\u24C5': 'P','\\uFF30': 'P','\\u1E54': 'P','\\u1E56': 'P','\\u01A4': 'P','\\u2C63': 'P','\\uA750': 'P','\\uA752': 'P','\\uA754': 'P',\n'\\u0051': 'Q','\\u24C6': 'Q','\\uFF31': 'Q','\\uA756': 'Q','\\uA758': 'Q','\\u024A': 'Q',\n\n'\\u0052': 'R','\\u24C7': 'R','\\uFF32': 'R','\\u0154': 'R','\\u1E58': 'R','\\u0158': 'R','\\u0210': 'R','\\u0212': 'R','\\u1E5A': 'R','\\u1E5C': 'R',\n'\\u0156': 'R','\\u1E5E': 'R','\\u024C': 'R','\\u2C64': 'R','\\uA75A': 'R','\\uA7A6': 'R','\\uA782': 'R',\n\n'\\u0053': 'S','\\u24C8': 'S','\\uFF33': 'S','\\u1E9E': 'S','\\u015A': 'S','\\u1E64': 'S','\\u015C': 'S','\\u1E60': 'S','\\u0160': 'S','\\u1E66': 'S',\n'\\u1E62': 'S','\\u1E68': 'S','\\u0218': 'S','\\u015E': 'S','\\u2C7E': 'S','\\uA7A8': 'S','\\uA784': 'S',\n\n'\\u0054': 'T','\\u24C9': 'T','\\uFF34': 'T','\\u1E6A': 'T','\\u0164': 'T','\\u1E6C': 'T','\\u021A': 'T','\\u0162': 'T','\\u1E70': 'T','\\u1E6E': 'T',\n'\\u0166': 'T','\\u01AC': 'T','\\u01AE': 'T','\\u023E': 'T','\\uA786': 'T',\n\n'\\uA728': 'TZ',\n\n'\\u0055': 'U','\\u24CA': 'U','\\uFF35': 'U','\\u00D9': 'U','\\u00DA': 'U','\\u00DB': 'U','\\u0168': 'U','\\u1E78': 'U','\\u016A': 'U','\\u1E7A': 'U',\n'\\u016C': 'U','\\u00DC': 'U','\\u01DB': 'U','\\u01D7': 'U','\\u01D5': 'U','\\u01D9': 'U','\\u1EE6': 'U','\\u016E': 'U','\\u0170': 'U','\\u01D3': 'U',\n'\\u0214': 'U','\\u0216': 'U','\\u01AF': 'U','\\u1EEA': 'U','\\u1EE8': 'U','\\u1EEE': 'U','\\u1EEC': 'U','\\u1EF0': 'U','\\u1EE4': 'U','\\u1E72': 'U',\n'\\u0172': 'U','\\u1E76': 'U','\\u1E74': 'U','\\u0244': 'U',\n\n'\\u0056': 'V','\\u24CB': 'V','\\uFF36': 'V','\\u1E7C': 'V','\\u1E7E': 'V','\\u01B2': 'V','\\uA75E': 'V','\\u0245': 'V',\n'\\uA760': 'VY',\n'\\u0057': 'W','\\u24CC': 'W','\\uFF37': 'W','\\u1E80': 'W','\\u1E82': 'W','\\u0174': 'W','\\u1E86': 'W','\\u1E84': 'W','\\u1E88': 'W','\\u2C72': 'W',\n'\\u0058': 'X','\\u24CD': 'X','\\uFF38': 'X','\\u1E8A': 'X','\\u1E8C': 'X',\n\n'\\u0059': 'Y','\\u24CE': 'Y','\\uFF39': 'Y','\\u1EF2': 'Y','\\u00DD': 'Y','\\u0176': 'Y','\\u1EF8': 'Y','\\u0232': 'Y','\\u1E8E': 'Y','\\u0178': 'Y',\n'\\u1EF6': 'Y','\\u1EF4': 'Y','\\u01B3': 'Y','\\u024E': 'Y','\\u1EFE': 'Y',\n\n'\\u005A': 'Z','\\u24CF': 'Z','\\uFF3A': 'Z','\\u0179': 'Z','\\u1E90': 'Z','\\u017B': 'Z','\\u017D': 'Z','\\u1E92': 'Z','\\u1E94': 'Z','\\u01B5': 'Z',\n'\\u0224': 'Z','\\u2C7F': 'Z','\\u2C6B': 'Z','\\uA762': 'Z',\n\n'\\u0061': 'a','\\u24D0': 'a','\\uFF41': 'a','\\u1E9A': 'a','\\u00E0': 'a','\\u00E1': 'a','\\u00E2': 'a','\\u1EA7': 'a','\\u1EA5': 'a','\\u1EAB': 'a',\n'\\u1EA9': 'a','\\u00E3': 'a','\\u0101': 'a','\\u0103': 'a','\\u1EB1': 'a','\\u1EAF': 'a','\\u1EB5': 'a','\\u1EB3': 'a','\\u0227': 'a','\\u01E1': 'a',\n'\\u00E4': 'a','\\u01DF': 'a','\\u1EA3': 'a','\\u00E5': 'a','\\u01FB': 'a','\\u01CE': 'a','\\u0201': 'a','\\u0203': 'a','\\u1EA1': 'a','\\u1EAD': 'a',\n'\\u1EB7': 'a','\\u1E01': 'a','\\u0105': 'a','\\u2C65': 'a','\\u0250': 'a',\n\n'\\uA733': 'aa',\n'\\u00E6': 'ae','\\u01FD': 'ae','\\u01E3': 'ae',\n'\\uA735': 'ao',\n'\\uA737': 'au',\n'\\uA739': 'av','\\uA73B': 'av',\n'\\uA73D': 'ay',\n'\\u0062': 'b','\\u24D1': 'b','\\uFF42': 'b','\\u1E03': 'b','\\u1E05': 'b','\\u1E07': 'b','\\u0180': 'b','\\u0183': 'b','\\u0253': 'b',\n\n'\\u0063': 'c','\\u24D2': 'c','\\uFF43': 'c','\\u0107': 'c','\\u0109': 'c','\\u010B': 'c','\\u010D': 'c','\\u00E7': 'c','\\u1E09': 'c','\\u0188': 'c',\n'\\u023C': 'c','\\uA73F': 'c','\\u2184': 'c',\n\n'\\u0064': 'd','\\u24D3': 'd','\\uFF44': 'd','\\u1E0B': 'd','\\u010F': 'd','\\u1E0D': 'd','\\u1E11': 'd','\\u1E13': 'd','\\u1E0F': 'd','\\u0111': 'd',\n'\\u018C': 'd','\\u0256': 'd','\\u0257': 'd','\\uA77A': 'd',\n\n'\\u01F3': 'dz','\\u01C6': 'dz',\n\n'\\u0065': 'e','\\u24D4': 'e','\\uFF45': 'e','\\u00E8': 'e','\\u00E9': 'e','\\u00EA': 'e','\\u1EC1': 'e','\\u1EBF': 'e','\\u1EC5': 'e','\\u1EC3': 'e',\n'\\u1EBD': 'e','\\u0113': 'e','\\u1E15': 'e','\\u1E17': 'e','\\u0115': 'e','\\u0117': 'e','\\u00EB': 'e','\\u1EBB': 'e','\\u011B': 'e','\\u0205': 'e',\n'\\u0207': 'e','\\u1EB9': 'e','\\u1EC7': 'e','\\u0229': 'e','\\u1E1D': 'e','\\u0119': 'e','\\u1E19': 'e','\\u1E1B': 'e','\\u0247': 'e','\\u025B': 'e',\n'\\u01DD': 'e',\n\n'\\u0066': 'f','\\u24D5': 'f','\\uFF46': 'f','\\u1E1F': 'f','\\u0192': 'f','\\uA77C': 'f',\n\n'\\u0067': 'g','\\u24D6': 'g','\\uFF47': 'g','\\u01F5': 'g','\\u011D': 'g','\\u1E21': 'g','\\u011F': 'g','\\u0121': 'g','\\u01E7': 'g','\\u0123': 'g',\n'\\u01E5': 'g','\\u0260': 'g','\\uA7A1': 'g','\\u1D79': 'g','\\uA77F': 'g',\n\n'\\u0068': 'h','\\u24D7': 'h','\\uFF48': 'h','\\u0125': 'h','\\u1E23': 'h','\\u1E27': 'h','\\u021F': 'h','\\u1E25': 'h','\\u1E29': 'h','\\u1E2B': 'h',\n'\\u1E96': 'h','\\u0127': 'h','\\u2C68': 'h','\\u2C76': 'h','\\u0265': 'h',\n\n'\\u0195': 'hv',\n\n'\\u0069': 'i','\\u24D8': 'i','\\uFF49': 'i','\\u00EC': 'i','\\u00ED': 'i','\\u00EE': 'i','\\u0129': 'i','\\u012B': 'i','\\u012D': 'i','\\u00EF': 'i',\n'\\u1E2F': 'i','\\u1EC9': 'i','\\u01D0': 'i','\\u0209': 'i','\\u020B': 'i','\\u1ECB': 'i','\\u012F': 'i','\\u1E2D': 'i','\\u0268': 'i','\\u0131': 'i',\n\n'\\u006A': 'j','\\u24D9': 'j','\\uFF4A': 'j','\\u0135': 'j','\\u01F0': 'j','\\u0249': 'j',\n\n'\\u006B': 'k','\\u24DA': 'k','\\uFF4B': 'k','\\u1E31': 'k','\\u01E9': 'k','\\u1E33': 'k','\\u0137': 'k','\\u1E35': 'k','\\u0199': 'k','\\u2C6A': 'k',\n'\\uA741': 'k','\\uA743': 'k','\\uA745': 'k','\\uA7A3': 'k',\n\n'\\u006C': 'l','\\u24DB': 'l','\\uFF4C': 'l','\\u0140': 'l','\\u013A': 'l','\\u013E': 'l','\\u1E37': 'l','\\u1E39': 'l','\\u013C': 'l','\\u1E3D': 'l',\n'\\u1E3B': 'l','\\u017F': 'l','\\u0142': 'l','\\u019A': 'l','\\u026B': 'l','\\u2C61': 'l','\\uA749': 'l','\\uA781': 'l','\\uA747': 'l',\n\n'\\u01C9': 'lj',\n'\\u006D': 'm','\\u24DC': 'm','\\uFF4D': 'm','\\u1E3F': 'm','\\u1E41': 'm','\\u1E43': 'm','\\u0271': 'm','\\u026F': 'm',\n\n'\\u006E': 'n','\\u24DD': 'n','\\uFF4E': 'n','\\u01F9': 'n','\\u0144': 'n','\\u00F1': 'n','\\u1E45': 'n','\\u0148': 'n','\\u1E47': 'n','\\u0146': 'n',\n'\\u1E4B': 'n','\\u1E49': 'n','\\u019E': 'n','\\u0272': 'n','\\u0149': 'n','\\uA791': 'n','\\uA7A5': 'n',\n\n'\\u01CC': 'nj',\n\n'\\u006F': 'o','\\u24DE': 'o','\\uFF4F': 'o','\\u00F2': 'o','\\u00F3': 'o','\\u00F4': 'o','\\u1ED3': 'o','\\u1ED1': 'o','\\u1ED7': 'o','\\u1ED5': 'o',\n'\\u00F5': 'o','\\u1E4D': 'o','\\u022D': 'o','\\u1E4F': 'o','\\u014D': 'o','\\u1E51': 'o','\\u1E53': 'o','\\u014F': 'o','\\u022F': 'o','\\u0231': 'o',\n'\\u00F6': 'o','\\u022B': 'o','\\u1ECF': 'o','\\u0151': 'o','\\u01D2': 'o','\\u020D': 'o','\\u020F': 'o','\\u01A1': 'o','\\u1EDD': 'o','\\u1EDB': 'o',\n'\\u1EE1': 'o','\\u1EDF': 'o','\\u1EE3': 'o','\\u1ECD': 'o','\\u1ED9': 'o','\\u01EB': 'o','\\u01ED': 'o','\\u00F8': 'o','\\u01FF': 'o','\\u0254': 'o',\n'\\uA74B': 'o','\\uA74D': 'o','\\u0275': 'o',\n\n'\\u01A3': 'oi',\n'\\u0223': 'ou',\n'\\uA74F': 'oo',\n'\\u0070': 'p','\\u24DF': 'p','\\uFF50': 'p','\\u1E55': 'p','\\u1E57': 'p','\\u01A5': 'p','\\u1D7D': 'p','\\uA751': 'p','\\uA753': 'p','\\uA755': 'p',\n'\\u0071': 'q','\\u24E0': 'q','\\uFF51': 'q','\\u024B': 'q','\\uA757': 'q','\\uA759': 'q',\n\n'\\u0072': 'r','\\u24E1': 'r','\\uFF52': 'r','\\u0155': 'r','\\u1E59': 'r','\\u0159': 'r','\\u0211': 'r','\\u0213': 'r','\\u1E5B': 'r','\\u1E5D': 'r',\n'\\u0157': 'r','\\u1E5F': 'r','\\u024D': 'r','\\u027D': 'r','\\uA75B': 'r','\\uA7A7': 'r','\\uA783': 'r',\n\n'\\u0073': 's','\\u24E2': 's','\\uFF53': 's','\\u00DF': 's','\\u015B': 's','\\u1E65': 's','\\u015D': 's','\\u1E61': 's','\\u0161': 's','\\u1E67': 's',\n'\\u1E63': 's','\\u1E69': 's','\\u0219': 's','\\u015F': 's','\\u023F': 's','\\uA7A9': 's','\\uA785': 's','\\u1E9B': 's',\n\n'\\u0074': 't','\\u24E3': 't','\\uFF54': 't','\\u1E6B': 't','\\u1E97': 't','\\u0165': 't','\\u1E6D': 't','\\u021B': 't','\\u0163': 't','\\u1E71': 't',\n'\\u1E6F': 't','\\u0167': 't','\\u01AD': 't','\\u0288': 't','\\u2C66': 't','\\uA787': 't',\n\n'\\uA729': 'tz',\n\n'\\u0075': 'u','\\u24E4': 'u','\\uFF55': 'u','\\u00F9': 'u','\\u00FA': 'u','\\u00FB': 'u','\\u0169': 'u','\\u1E79': 'u','\\u016B': 'u','\\u1E7B': 'u',\n'\\u016D': 'u','\\u00FC': 'u','\\u01DC': 'u','\\u01D8': 'u','\\u01D6': 'u','\\u01DA': 'u','\\u1EE7': 'u','\\u016F': 'u','\\u0171': 'u','\\u01D4': 'u',\n'\\u0215': 'u','\\u0217': 'u','\\u01B0': 'u','\\u1EEB': 'u','\\u1EE9': 'u','\\u1EEF': 'u','\\u1EED': 'u','\\u1EF1': 'u','\\u1EE5': 'u','\\u1E73': 'u',\n'\\u0173': 'u','\\u1E77': 'u','\\u1E75': 'u','\\u0289': 'u',\n\n'\\u0076': 'v','\\u24E5': 'v','\\uFF56': 'v','\\u1E7D': 'v','\\u1E7F': 'v','\\u028B': 'v','\\uA75F': 'v','\\u028C': 'v',\n'\\uA761': 'vy',\n'\\u0077': 'w','\\u24E6': 'w','\\uFF57': 'w','\\u1E81': 'w','\\u1E83': 'w','\\u0175': 'w','\\u1E87': 'w','\\u1E85': 'w','\\u1E98': 'w','\\u1E89': 'w',\n'\\u2C73': 'w',\n'\\u0078': 'x','\\u24E7': 'x','\\uFF58': 'x','\\u1E8B': 'x','\\u1E8D': 'x',\n\n'\\u0079': 'y','\\u24E8': 'y','\\uFF59': 'y','\\u1EF3': 'y','\\u00FD': 'y','\\u0177': 'y','\\u1EF9': 'y','\\u0233': 'y','\\u1E8F': 'y','\\u00FF': 'y',\n'\\u1EF7': 'y','\\u1E99': 'y','\\u1EF5': 'y','\\u01B4': 'y','\\u024F': 'y','\\u1EFF': 'y',\n\n'\\u007A': 'z','\\u24E9': 'z','\\uFF5A': 'z','\\u017A': 'z','\\u1E91': 'z','\\u017C': 'z','\\u017E': 'z','\\u1E93': 'z','\\u1E95': 'z','\\u01B6': 'z',\n'\\u0225': 'z','\\u0240': 'z','\\u2C6C': 'z','\\uA763': 'z',\n};\n\n/**\n * Replace diacritics character with ASCII character\n *\n * @param {string} str diacritics string\n * @param {boolean} caseSensitive\n * @returns {string} ASCII string\n */\nexport function unaccent(str, caseSensitive) {\n    str = str.replace(/[^\\u0000-\\u007E]/g, function (accented) {\n        return diacriticsMap[accented] || accented;\n    });\n    return caseSensitive ? str : str.toLowerCase();\n}\n", "/** @odoo-module **/\n\nimport { browser } from \"../browser/browser\";\n\n/**\n * Creates a version of the function where only the last call between two\n * animation frames is executed before the browser's next repaint. This\n * effectively throttles the function to the display's refresh rate.\n *\n * @param {Function} func the function to throttle\n * @returns {{ (...args): void, cancel: () => void }} the throttled function\n */\nexport function throttleForAnimation(func) {\n    let handle = null;\n    const funcName = func.name ? `${func.name} (throttleForAnimation)` : \"throttleForAnimation\";\n    return Object.assign(\n        {\n            [funcName](...args) {\n                browser.cancelAnimationFrame(handle);\n                handle = browser.requestAnimationFrame(() => {\n                    handle = null;\n                    func.call(this, ...args);\n                });\n            },\n        }[funcName],\n        {\n            cancel() {\n                browser.cancelAnimationFrame(handle);\n            },\n        }\n    );\n}\n\n/**\n * Creates and returns a new debounced version of the passed function (func)\n * which will postpone its execution until after wait milliseconds\n * have elapsed since the last time it was invoked. The debounced function\n * will return a Promise that will be resolved when the function (func)\n * has been fully executed. If `immediate` is passed, trigger the function\n * on the leading edge, instead of the trailing.\n *\n * @template T the return type of the original function\n * @param {(...args) => T} func the function to debounce\n * @param {number} wait how long should elapse before the function is called\n * @param {boolean} [immediate=false] whether the function should be called on\n *      the leading edge instead of the trailing edge.\n * @returns {{ (...args): Promise<T>, cancel: () => void }} the debounced function\n */\nexport function debounce(func, wait, immediate = false) {\n    let timeout;\n    const funcName = func.name ? func.name + \" (debounce)\" : \"debounce\";\n    return Object.assign(\n        {\n            [funcName](...args) {\n                return new Promise((resolve) => {\n                    const callNow = immediate && !timeout;\n                    browser.clearTimeout(timeout);\n                    timeout = browser.setTimeout(() => {\n                        timeout = null;\n                        if (!immediate) {\n                            Promise.resolve(func.apply(this, args)).then(resolve);\n                        }\n                    }, wait);\n                    if (callNow) {\n                        Promise.resolve(func.apply(this, args)).then(resolve);\n                    }\n                });\n            },\n        }[funcName],\n        {\n            cancel() {\n                browser.clearTimeout(timeout);\n            },\n        }\n    );\n}\n\n/**\n * Returns a function, that, as long as it continues to be invoked, will be\n * triggered every N milliseconds.\n *\n * @deprecated this function has behaviour that is unexpected considering its\n *      name, prefer _.throttle until this function is rewritten\n * @param {Function} func\n * @param {number} wait\n * @returns {Function}\n */\nexport function throttle(func, wait) {\n    let waiting = false;\n    const funcName = func.name ? func.name + \" (throttle)\" : \"throttle\";\n    return {\n        [funcName](...args) {\n            const context = this;\n            if (!waiting) {\n                waiting = true;\n                browser.setTimeout(function () {\n                    waiting = false;\n                    func.call(context, ...args);\n                }, wait);\n            }\n        },\n    }[funcName];\n}\n", "/** @odoo-module **/\n\n/**\n * @param {Document} activeElement\n * @param {DOMString} selector\n * @returns all selected and visible elements present in the activeElement\n */\nexport function getVisibleElements(activeElement, selector) {\n    const visibleElements = [];\n    for (const el of activeElement.querySelectorAll(selector)) {\n        const isVisible = el.offsetWidth > 0 && el.offsetHeight > 0;\n        if (isVisible) {\n            visibleElements.push(el);\n        }\n    }\n    return visibleElements;\n}\n", "/** @odoo-module **/\n\nimport { browser } from \"../browser/browser\";\n\n/**\n * Trasnforms a key value mapping to a string formatted as url hash, e.g.\n * {a: \"x\", b: 2} -> \"a=x&b=2\"\n *\n * @param {Object} obj\n * @returns {string}\n */\nexport function objectToUrlEncodedString(obj) {\n    return Object.entries(obj)\n        .map(([k, v]) => (v ? `${k}=${encodeURIComponent(v)}` : k))\n        .join(\"&\");\n}\n\n/**\n * Gets the origin url of the page, or cleans a given one\n *\n * @param {string} [origin]: a given origin url\n * @return {string} a cleaned origin url\n */\nexport function getOrigin(origin) {\n    if (origin) {\n        // remove trailing slashes\n        origin = origin.replace(/\\/+$/, \"\");\n    } else {\n        const { host, protocol } = browser.location;\n        origin = `${protocol}//${host}`;\n    }\n    return origin;\n}\n\n/**\n * @param {string} route: the relative route, or absolute in the case of cors urls\n * @param {object} [queryParams]: parameters to be appended as the url's queryString\n * @param {object} [options]\n * @param {string} [options.origin]: a precomputed origin\n */\nexport function url(route, queryParams, options = {}) {\n    const origin = getOrigin(options.origin);\n    if (!route) {\n        return origin;\n    }\n\n    let queryString = objectToUrlEncodedString(queryParams || {});\n    queryString = queryString.length > 0 ? `?${queryString}` : queryString;\n\n    // Compare the wanted url against the current origin\n    let prefix = [\"http://\", \"https://\", \"//\"].some(\n        (el) => route.length >= el.length && route.slice(0, el.length) === el\n    );\n    prefix = prefix ? \"\" : origin;\n    return `${prefix}${route}${queryString}`;\n}\n", "/** @odoo-module **/\n\nfunction hasParsingError(parsedDocument) {\n    return parsedDocument.getElementsByTagName(\"parsererror\").length > 0;\n}\n\nexport class XMLParser {\n    /**\n     * to override. Should return the parsed content of the arch.\n     * It can call the visitArch function if desired\n     */\n    parse() {}\n\n    visitXML(xml, callback) {\n        function visit(xml) {\n            if (xml) {\n                let didVisitChildren = false;\n                const visitChildren = () => {\n                    for (let child of xml.children) {\n                        visit(child);\n                    }\n                    didVisitChildren = true;\n                };\n                const shouldVisitChildren = callback(xml, visitChildren);\n                if (shouldVisitChildren !== false && !didVisitChildren) {\n                    visitChildren();\n                }\n            }\n        }\n        const xmlDoc = typeof xml === \"string\" ? this.parseXML(xml) : xml;\n        visit(xmlDoc);\n    }\n\n    parseXML(arch) {\n        const parser = new DOMParser();\n        const xml = parser.parseFromString(arch, \"text/xml\");\n        if (hasParsingError(xml)) {\n            throw new Error(\n                `An error occured while parsing ${arch}: ${xml.getElementsByTagName(\"parsererror\")}`\n            );\n        }\n        return xml.documentElement;\n    }\n}\n", "/** @odoo-module **/\nimport { registry } from \"@web/core/registry\";\nimport legacyFieldRegistry from \"web.field_registry\";\nimport owlFieldRegistry from \"web.field_registry_owl\";\nimport { ComponentAdapter } from \"web.OwlCompatibility\";\nimport { useEffect } from \"@web/core/utils/hooks\";\n\nconst { Component, tags, hooks } = owl;\n\nconst fieldRegistry = registry.category(\"fields\");\n\nfunction getFieldFromRegistry(registry, { fieldType, viewType, fieldName, fieldsDescription }) {\n    if (viewType && fieldType) {\n        const specificType = `${viewType}.${fieldType}`;\n        if (registry.contains(specificType)) {\n            return registry.get(specificType);\n        }\n    }\n    if (!registry.contains(fieldType)) {\n        const field = fieldsDescription[fieldName];\n        fieldType = field && field.type;\n    }\n    return registry.get(fieldType, null);\n}\n\nclass Field extends Component {\n    static getTangibleField({ record, type, name }) {\n        const FieldClass = getFieldFromRegistry(fieldRegistry, {\n            fieldName: name,\n            fieldType: type,\n            viewType: record.viewtype,\n            fieldsDescription: record.fields,\n        });\n        return { FieldClass };\n    }\n\n    setup() {\n        const { record, type, name } = this.props;\n        this.fieldRef = hooks.useRef(\"fieldRef\");\n        this.FieldComponent = Field.getTangibleField({ record, type, name }).FieldClass;\n    }\n}\n\nField.template = tags.xml/* xml */ `\n    <t t-component=\"FieldComponent\" t-props=\"props\" class=\"o-field\" t-key=\"props.record.id\" t-ref=\"fieldRef\"/>\n`;\n\nclass FieldSupportsLegacy extends Field {\n    static getTangibleField({ record, type, fieldName }) {\n        let { FieldClass } = super.getTangibleField(...arguments);\n        if (!FieldClass) {\n            FieldClass = getFieldFromRegistry(owlFieldRegistry, {\n                fieldName,\n                fieldType: type,\n                viewType: record.viewType,\n                fieldsDescription: record.fields,\n            });\n            if (FieldClass) {\n                return { FieldClass, isOwlLegacy: true };\n            } else {\n                FieldClass = getFieldFromRegistry(legacyFieldRegistry, {\n                    fieldName,\n                    fieldType: type,\n                    viewType: record.viewType,\n                    fieldsDescription: record.fields,\n                });\n                return { FieldClass, isLegacy: true };\n            }\n        }\n        return {};\n    }\n\n    setup() {\n        super.setup();\n        this.renderId = 0;\n        useEffect(() => {\n            this.renderId++;\n        });\n        if (!this.FieldComponent) {\n            this.env = owl.Component.env;\n            const { record, type, name } = this.props;\n            const { FieldClass, isOwlLegacy, isLegacy } = FieldSupportsLegacy.getTangibleField({\n                record,\n                type,\n                name,\n            });\n            this.FieldComponent = FieldClass;\n            this.isOwlLegacy = isOwlLegacy;\n            this.isLegacy = isLegacy;\n        }\n    }\n\n    get legacyProps() {\n        const legacyRecord = Object.assign({}, this.props.model._legacyRecord_);\n        legacyRecord.data = Object.assign({}, legacyRecord.data, this.props.record.data);\n        return {\n            fieldName: this.props.name,\n            record: legacyRecord,\n        };\n    }\n\n    get widgetArgs() {\n        const { fieldName, record } = this.legacyProps;\n        return [fieldName, record];\n    }\n}\nFieldSupportsLegacy.template = tags.xml/* xml */ `<t>\n    <t t-if=\"!isOwlLegacy and !isLegacy\" t-call=\"${Field.template}\" />\n    <t t-elif=\"isOwlLegacy\" t-component=\"FieldComponent\" t-props=\"legacyProps\" />\n    <t t-elif=\"isLegacy\" t-component=\"ComponentAdapter\" widgetArgs=\"widgetArgs\" Component=\"FieldComponent\" t-key=\"renderId\" />\n</t>\n`;\nFieldSupportsLegacy.components = { ComponentAdapter };\n\nexport { FieldSupportsLegacy as Field };\n", "/** @odoo-module **/\n\nimport { formatDate, formatDateTime } from \"@web/core/l10n/dates\";\nimport { localization as l10n } from \"@web/core/l10n/localization\";\nimport { _lt } from \"@web/core/l10n/translation\";\nimport { registry } from \"@web/core/registry\";\nimport { intersperse } from \"@web/core/utils/strings\";\nimport { session } from \"@web/session\";\n\n// -----------------------------------------------------------------------------\n// Helpers\n// -----------------------------------------------------------------------------\n\n/**\n * Inserts \"thousands\" separators in the provided number.\n *\n * @private\n * @param {string} string representing integer number\n * @param {string} [thousandsSep=\",\"] the separator to insert\n * @param {number[]} [grouping=[3,0]]\n *   array of relative offsets at which to insert `thousandsSep`.\n *   See `strings.intersperse` method.\n * @returns {string}\n */\nfunction insertThousandsSep(number, thousandsSep = \",\", grouping = [3, 0]) {\n    const negative = number[0] === \"-\";\n    number = negative ? number.slice(1) : number;\n    return (negative ? \"-\" : \"\") + intersperse(number, grouping, thousandsSep);\n}\n\n/**\n * Format a number to a human readable format. For example, 3000 could become 3k.\n * Or massive number can use the scientific exponential notation.\n *\n * @private\n * @param {number} number to format\n * @param {Object} [options] Options to format\n * @param {number} [options.decimals=0] number of decimals to use\n *    if minDigits > 1 is used and effective on the number then decimals\n *    will be shrunk to zero, to avoid displaying irrelevant figures ( 0.01 compared to 1000 )\n * @param {number} [options.minDigits=1]\n *    the minimum number of digits to preserve when switching to another\n *    level of thousands (e.g. with a value of '2', 4321 will still be\n *    represented as 4321 otherwise it will be down to one digit (4k))\n * @returns {string}\n */\nfunction humanNumber(number, options = { decimals: 0, minDigits: 1 }) {\n    const decimals = options.decimals || 0;\n    const minDigits = options.minDigits || 1;\n    const d2 = Math.pow(10, decimals);\n    const numberMagnitude = +number.toExponential().split(\"e+\")[1];\n    number = Math.round(number * d2) / d2;\n    // the case numberMagnitude >= 21 corresponds to a number\n    // better expressed in the scientific format.\n    if (numberMagnitude >= 21) {\n        // we do not use number.toExponential(decimals) because we want to\n        // avoid the possible useless O decimals: 1e.+24 preferred to 1.0e+24\n        number = Math.round(number * Math.pow(10, decimals - numberMagnitude)) / d2;\n        return `${number}e+${numberMagnitude}`;\n    }\n    // note: we need to call toString here to make sure we manipulate the resulting\n    // string, not an object with a toString method.\n    const unitSymbols = _lt(\"kMGTPE\").toString();\n    const sign = Math.sign(number);\n    number = Math.abs(number);\n    let symbol = \"\";\n    for (let i = unitSymbols.length; i > 0; i--) {\n        const s = Math.pow(10, i * 3);\n        if (s <= number / Math.pow(10, minDigits - 1)) {\n            number = Math.round((number * d2) / s) / d2;\n            symbol = unitSymbols[i - 1];\n            break;\n        }\n    }\n    const { decimalPoint, grouping, thousandsSep } = l10n;\n\n    // determine if we should keep the decimals (we don't want to display 1,020.02k for 1020020)\n    const decimalsToKeep = number >= 1000 ? 0 : decimals;\n    number = sign * number;\n    const [integerPart, decimalPart] = number.toFixed(decimalsToKeep).split(\".\");\n    const int = insertThousandsSep(integerPart, thousandsSep, grouping);\n    if (!decimalPart) {\n        return int + symbol;\n    }\n    return int + decimalPoint + decimalPart + symbol;\n}\n\n// -----------------------------------------------------------------------------\n// Exports\n// -----------------------------------------------------------------------------\n\n/**\n * Returns a string representing a float.  The result takes into account the\n * user settings (to display the correct decimal separator).\n *\n * @param {float|false} value the value that should be formatted\n * @param {Object} [options]\n * @param {Object} [options.field] a description of the field (returned by\n *   fields_get for example).  It may contain a description of the number of\n *   digits that should be used.\n * @param {integer[]} [options.digits] the number of digits that should be used,\n *   instead of the default digits precision in the field.\n * @param {boolean} [options.humanReadable] if true, large numbers are formatted\n *   to a human readable format.\n * @param {string} [options.decimalPoint] decimal separating character\n * @param {string} [options.thousandsSep] thousands separator to insert\n * @param {number[]} [options.grouping] array of relative offsets at which to\n *   insert `thousandsSep`. See `insertThousandsSep` method.\n * @param {boolean} [options.noTrailingZeros=false] if true, the decimal part\n *   won't contain unnecessary trailing zeros.\n * @returns {string}\n */\nexport function formatFloat(value, options = {}) {\n    if (value === false) {\n        return \"\";\n    }\n    if (options.humanReadable) {\n        return humanNumber(value, options);\n    }\n    const grouping = options.grouping || l10n.grouping;\n    const thousandsSep = \"thousandsSep\" in options ? options.thousandsSep : l10n.thousandsSep;\n    const decimalPoint = \"decimalPoint\" in options ? options.decimalPoint : l10n.decimalPoint;\n    let precision;\n    if (options.digits) {\n        precision = options.digits[1];\n    } else if (options.field && options.field.digits) {\n        precision = options.field.digits[1];\n    } else {\n        precision = 2;\n    }\n    const formatted = (value || 0).toFixed(precision || 2).split(\".\");\n    formatted[0] = insertThousandsSep(formatted[0], thousandsSep, grouping);\n    if (options.noTrailingZeros) {\n        formatted[1] = formatted[1].replace(/0+$/, \"\");\n    }\n    return formatted[1].length ? formatted.join(decimalPoint) : formatted[0];\n}\n\n/**\n * Returns a string representing a float value, from a float converted with a\n * factor.\n *\n * @param {number|false} value\n * @param {Object} [options]\n * @param {Object} [options.field] a description of the field\n * @param {number} [options.factor=1.0] conversion factor\n * @returns {string}\n */\nexport function formatFloatFactor(value, options = {}) {\n    if (value === false) {\n        return \"\";\n    }\n    const factor = options.factor || 1;\n    return formatFloat(value * factor, options);\n}\n\n/**\n * Returns a string representing a time value, from a float.  The idea is that\n * we sometimes want to display something like 1:45 instead of 1.75, or 0:15\n * instead of 0.25.\n *\n * @param {number|false} value\n * @param {Object} [options]\n * @param {Object} [options.field] a description of the field\n * @param {boolean} [options.noLeadingZeroHour] if true, format like 1:30\n *   otherwise, format like 01:30\n * @returns {string}\n */\nexport function formatFloatTime(value, options = {}) {\n    if (value === false) {\n        return \"\";\n    }\n    const isNegative = value < 0;\n    if (isNegative) {\n        value = Math.abs(value);\n    }\n    let hour = Math.floor(value);\n    let min = Math.round((value % 1) * 60);\n    if (min === 60) {\n        min = 0;\n        hour = hour + 1;\n    }\n    min = `${min}`.padStart(2, \"0\");\n    if (!options.noLeadingZeroHour) {\n        hour = `${hour}`.padStart(2, \"0\");\n    }\n    return `${isNegative ? \"-\" : \"\"}${hour}:${min}`;\n}\n\n/**\n * Returns a string representing an integer.  If the value is false, then we\n * return an empty string.\n *\n * @param {integer|false} value\n * @param {Object} [options]\n * @param {Object} [options.field] a description of the field\n * @param {boolean} [options.humanReadable] if true, large numbers are formatted\n *   to a human readable format.\n * @param {boolean} [options.isPassword=false] if returns true, acts like\n * @param {string} [options.thousandsSep] thousands separator to insert\n * @param {number[]} [options.grouping] array of relative offsets at which to\n *   insert `thousandsSep`. See `insertThousandsSep` method.\n * @returns {string}\n */\nexport function formatInteger(value, options = {}) {\n    if (value === false) {\n        return \"\";\n    }\n    if (options.isPassword) {\n        return new Array(value.length + 1).join(\"*\");\n    }\n    if (options.humanReadable) {\n        return humanNumber(value, options);\n    }\n    const grouping = options.grouping || l10n.grouping;\n    const thousandsSep = \"thousandsSep\" in options ? options.thousandsSep : l10n.thousandsSep;\n    return insertThousandsSep(value.toFixed(0), thousandsSep, grouping);\n}\n\n/**\n * Returns a string representing an many2one.  If the value is false, then we\n * return an empty string. Note that it accepts two types of input parameters:\n * an array, in that case we assume that the many2one value is of the form\n * [id, nameget], and we return the nameget, or it can be an object, and in that\n * case, we assume that it is a record datapoint from a BasicModel.\n *\n * @param {Array|Object|false} value\n * @param {Object} [options] additional options\n * @param {Object} [options.field] a description of the field\n * @param {boolean} [options.escape=false] if true, escapes the formatted value\n * @returns {string}\n */\nexport function formatMany2one(value, options) {\n    if (!value) {\n        value = \"\";\n    } else if (Array.isArray(value)) {\n        // value is a pair [id, nameget]\n        value = value[1];\n    } else {\n        // value is a datapoint, so we read its display_name field, which\n        // may in turn be a datapoint (if the name field is a many2one)\n        while (value.data) {\n            value = value.data.display_name || \"\";\n        }\n    }\n    if (options && options.escape) {\n        value = encodeURIComponent(value);\n    }\n    return value;\n}\n\n/**\n * Returns a string representing a monetary value. The result takes into account\n * the user settings (to display the correct decimal separator, currency, ...).\n *\n * @param {float|false} value the value that should be formatted\n * @param {Object} [field]\n *   a description of the field (returned by fields_get for example). It may\n *   contain a description of the number of digits that should be used.\n * @param {Object} [options]\n *   additional options to override the values in the python description of the\n *   field.\n * @param {integer} [options.currencyId] the id of the 'res.currency' to use\n * @param {string} [options.currencyField] the name of the field whose value is\n *   the currency id (ignored if options.currency_id).\n *   Note: if not given it will default to the field \"currency_field\" value or\n *   on \"currency_id\".\n * @param {Object} [options.data] a mapping of field names to field values,\n *   required with options.currencyField\n * @param {boolean} [options.noSymbol] this currency has not a sympbol\n * @param {boolean} [options.humanReadable] if true, large numbers are formatted\n *   to a human readable format.\n * @param {[number, number]} [options.digits] the number of digits that should\n *   be used, instead of the default digits precision in the field.  The first\n *   number is always ignored (legacy constraint)\n * @returns {string}\n */\nexport function formatMonetary(value, options = {}) {\n    let currencyId = options.currencyId;\n    if (!currencyId && options.data) {\n        const currencyField =\n            options.currencyField ||\n            (options.field && options.field.currency_field) ||\n            \"currency_id\";\n        currencyId = options.data[currencyField] && options.data[currencyField].res_id;\n    }\n    const currency = session.currencies[currencyId];\n    const digits = (currency && currency.digits) || options.digits;\n\n    let formatted;\n    if (options.humanReadable) {\n        formatted = humanNumber(value, { decimals: digits ? digits[1] : 2 });\n    } else {\n        formatted = formatFloat(value, { digits });\n    }\n\n    if (!currency || options.noSymbol) {\n        return formatted;\n    }\n    if (currency.position === \"after\") {\n        return `${formatted} ${currency.symbol}`;\n    } else {\n        return `${currency.symbol} ${formatted}`;\n    }\n}\n\n/**\n * Returns a string representing the given value (multiplied by 100)\n * concatenated with '%'.\n *\n * @param {number | false} value\n * @param {Object} [options]\n * @param {Object} [options.field] a description of the field\n * @param {boolean} [options.noSymbol] if true, doesn't concatenate with \"%\"\n * @returns {string}\n */\nexport function formatPercentage(value, options = {}) {\n    value = value || 0;\n    options = Object.assign({ noTrailingZeros: true, thousandsSep: \"\" }, options);\n    const formatted = formatFloat(value * 100, options);\n    return `${formatted}${options.noSymbol ? \"\" : \"%\"}`;\n}\n\nregistry\n    .category(\"formatters\")\n    .add(\"date\", formatDate)\n    .add(\"datetime\", formatDateTime)\n    .add(\"float\", formatFloat)\n    .add(\"float_factor\", formatFloatFactor)\n    .add(\"float_time\", formatFloatTime)\n    .add(\"integer\", formatInteger)\n    .add(\"many2one\", formatMany2one)\n    .add(\"monetary\", formatMonetary)\n    .add(\"percentage\", formatPercentage);\n", "/** @odoo-module **/\n\nimport { parseDate, parseDateTime } from \"@web/core/l10n/dates\";\nimport { localization } from \"@web/core/l10n/localization\";\nimport { registry } from \"@web/core/registry\";\nimport { escapeRegExp } from \"@web/core/utils/strings\";\nimport { session } from \"@web/session\";\n\n// -----------------------------------------------------------------------------\n// Helpers\n// -----------------------------------------------------------------------------\n\n/**\n * Parses a string into a number.\n *\n * @param {string} value\n * @param {Object} options - additional options\n * @param {string|RegExp} [options.thousandsSep] - the thousands separator used in the value\n * @param {string|RegExp} [options.decimalPoint] - the decimal point used in the value\n * @returns {number}\n */\nfunction parseNumber(value, options = {}) {\n    // a number can have the thousand separator multiple times. ex: 1,000,000.00\n    value = value.replaceAll(options.thousandsSep || \",\", \"\");\n    // a number only have one decimal separator\n    value = value.replace(options.decimalPoint || \".\", \".\");\n    return Number(value);\n}\n\n// -----------------------------------------------------------------------------\n// Exports\n// -----------------------------------------------------------------------------\n\nexport class InvalidNumberError extends Error {}\n\n/**\n * Try to extract a float from a string. The localization is considered in the process.\n *\n * @param {string} value\n * @returns {number} a float\n */\nexport function parseFloat(value) {\n    const thousandsSepRegex = new RegExp(escapeRegExp(localization.thousandsSep), \"g\");\n    const decimalPointRegex = new RegExp(escapeRegExp(localization.decimalPoint), \"g\");\n    const parsed = parseNumber(value, {\n        thousandsSep: thousandsSepRegex,\n        decimalPoint: decimalPointRegex,\n    });\n    if (isNaN(parsed)) {\n        throw new InvalidNumberError(`\"${value}\" is not a correct number`);\n    }\n    return parsed;\n}\n\n/**\n * Try to extract a float time from a string. The localization is considered in the process.\n * The float time can have two formats: float or integer:integer.\n *\n * @param {string} value\n * @returns {number} a float\n */\nexport function parseFloatTime(value) {\n    let sign = 1;\n    if (value[0] === \"-\") {\n        value = value.slice(1);\n        sign = -1;\n    }\n    const values = value.split(\":\");\n    if (values.length > 2) {\n        throw new InvalidNumberError(`\"${value}\" is not a correct number`);\n    }\n    if (values.length === 1) {\n        return sign * parseFloat(value);\n    }\n    const hours = parseInteger(values[0]);\n    const minutes = parseInteger(values[1]);\n    return sign * (hours + minutes / 60);\n}\n\n/**\n * Try to extract an integer from a string. The localization is considered in the process.\n *\n * @param {string} value\n * @returns {number} an integer\n */\nexport function parseInteger(value) {\n    const thousandsSepRegex = new RegExp(escapeRegExp(localization.thousandsSep), \"g\");\n    const decimalPointRegex = new RegExp(escapeRegExp(localization.decimalPoint), \"g\");\n    const parsed = parseNumber(value, {\n        thousandsSep: thousandsSepRegex,\n        decimalPoint: decimalPointRegex,\n    });\n    if (!Number.isInteger(parsed)) {\n        throw new InvalidNumberError(`\"${value}\" is not a correct number`);\n    }\n    return parsed;\n}\n\n/**\n * Try to extract a float from a string and unconvert it with a conversion factor of 100.\n * The localization is considered in the process.\n * The percentage can have two formats: float or float%.\n *\n * @param {string} value\n * @returns {number} float\n */\nexport function parsePercentage(value) {\n    if (value[value.length - 1] === \"%\") {\n        value = value.slice(0, value.length - 1);\n    }\n    return parseFloat(value) / 100;\n}\n\n/**\n * Try to extract a monetary value from a string. The localization is considered in the process.\n * The monetary value can have the formats sym$&nbsp;float, float$&nbsp;sym or float\n * where $&nbsp; is a non breaking space and sym is a currency symbol.\n * If a symbol is found it must correspond to the default currency symbol or to the\n * symbol of the currency whose id is passed in options.\n *\n * @param {string} value\n * @param {Object} [options={}]\n * @param {number} [options.currencyId]\n * @returns {number} float\n */\nexport function parseMonetary(value, options = {}) {\n    const values = value.split(\"&nbsp;\");\n    if (values.length === 1) {\n        return parseFloat(value);\n    }\n    let currency;\n    if (options.currencyId) {\n        currency = session.currencies[options.currencyId];\n    } else {\n        currency = Object.values(session.currencies)[0];\n    }\n    const symbolIndex = values.findIndex((v) => v === currency.symbol);\n    if (symbolIndex === -1) {\n        throw new InvalidNumberError(`\"${value}\" is not a correct number`);\n    }\n    values.splice(symbolIndex, 1);\n    if (values.length !== 1) {\n        throw new InvalidNumberError(`\"${value}\" is not a correct number`);\n    }\n    return parseFloat(values[0]);\n}\n\nregistry\n    .category(\"parsers\")\n    .add(\"date\", parseDate)\n    .add(\"datetime\", parseDateTime)\n    .add(\"float\", parseFloat)\n    .add(\"float_time\", parseFloatTime)\n    .add(\"integer\", parseInteger)\n    .add(\"monetary\", parseMonetary)\n    .add(\"percentage\", parsePercentage);\n", "/** @odoo-module **/\n\nimport { FACET_ICONS } from \"../utils/misc\";\nimport { useBus } from \"@web/core/utils/hooks\";\nimport { SearchDropdownItem } from \"@web/search/search_dropdown_item/search_dropdown_item\";\n\nconst { Component } = owl;\n\nexport class ComparisonMenu extends Component {\n    setup() {\n        this.icon = FACET_ICONS.comparison;\n\n        useBus(this.env.searchModel, \"update\", this.render);\n    }\n\n    /**\n     * @returns {Object[]}\n     */\n    get items() {\n        return this.env.searchModel.getSearchItems(\n            (searchItem) => searchItem.type === \"comparison\"\n        );\n    }\n\n    /**\n     * @param {CustomEvent}\n     */\n    onComparisonSelected(ev) {\n        const { itemId } = ev.detail.payload;\n        this.env.searchModel.toggleSearchItem(itemId);\n    }\n}\nComparisonMenu.components = { DropdownItem: SearchDropdownItem };\nComparisonMenu.template = \"web.ComparisonMenu\";\n", "/** @odoo-module **/\n\nimport { useService } from \"@web/core/utils/hooks\";\nimport { ComparisonMenu } from \"../comparison_menu/comparison_menu\";\nimport { FavoriteMenu } from \"../favorite_menu/favorite_menu\";\nimport { FilterMenu } from \"../filter_menu/filter_menu\";\nimport { GroupByMenu } from \"../group_by_menu/group_by_menu\";\nimport { SearchBar } from \"../search_bar/search_bar\";\n\nconst { Component } = owl;\n\nconst MAPPING = {\n    filter: FilterMenu,\n    groupBy: GroupByMenu,\n    comparison: ComparisonMenu,\n    favorite: FavoriteMenu,\n};\n\nexport class ControlPanel extends Component {\n    setup() {\n        this.actionService = useService(\"action\");\n    }\n\n    /**\n     * !!! What follows is a hack, do not copy it !!!\n     *\n     * Duplicates the slots defined for the parent s.t. they are also available\n     * for the current control panel.\n     *\n     * This hack is necessary since Owl does not support manual slots\n     * assignment/transfer yet. This must be removed as soon as Owl implements\n     * such a system.\n     *\n     * @strongly_discouraged_override\n     */\n    __render() {\n        const { slots } = this.env.qweb.constructor;\n        const { __owl__ } = this;\n        const originalSlots = {};\n        const transferredSlotNames = [\n            \"control-panel-top-left\",\n            \"control-panel-top-right\",\n            \"control-panel-bottom-left\",\n            \"control-panel-bottom-right\",\n        ];\n        for (const slotName of transferredSlotNames) {\n            const parentSlotkey = `${__owl__.parent.__owl__.slotId}_${slotName}`;\n            if (parentSlotkey in slots) {\n                const cpSlotKey = `${__owl__.slotId}_${slotName}`;\n                originalSlots[cpSlotKey] = slots[cpSlotKey];\n                slots[cpSlotKey] = function (scope, extra) {\n                    slots[parentSlotkey].call(this, __owl__.parent.__owl__.scope, extra);\n                };\n            }\n        }\n        const res = super.__render(...arguments);\n        // Clean up\n        Object.assign(slots, originalSlots);\n        return res;\n    }\n\n    /**\n     * @returns {Object}\n     */\n    get display() {\n        const display = Object.assign(\n            {\n                \"top-left\": true,\n                \"top-right\": true,\n                \"bottom-left\": true,\n                \"bottom-right\": true,\n            },\n            this.props.display || this.env.searchModel.display.controlPanel\n        );\n        display.top = display[\"top-left\"] || display[\"top-right\"];\n        display.bottom = display[\"bottom-left\"] || display[\"bottom-right\"];\n        return display;\n    }\n\n    /**\n     * @returns {Component[]}\n     */\n    get searchMenus() {\n        const searchMenus = [];\n        for (const key of this.env.searchModel.searchMenuTypes) {\n            // look in display instead?\n            if (\n                key === \"comparison\" &&\n                this.env.searchModel.getSearchItems((i) => i.type === \"comparison\").length === 0\n            ) {\n                continue;\n            }\n            searchMenus.push({ Component: MAPPING[key], key });\n        }\n        return searchMenus;\n    }\n\n    /**\n     * Called when an element of the breadcrumbs is clicked.\n     *\n     * @param {string} jsId\n     */\n    onBreadcrumbClicked(jsId) {\n        this.actionService.restore(jsId);\n    }\n\n    /**\n     * Called when a view is clicked in the view switcher.\n     *\n     * @param {ViewType} viewType\n     */\n    onViewClicked(viewType) {\n        this.actionService.switchView(viewType);\n    }\n}\n\nControlPanel.components = { ComparisonMenu, FavoriteMenu, FilterMenu, GroupByMenu, SearchBar };\nControlPanel.template = \"web.ControlPanel\";\n", "/** @odoo-module **/\n\nimport { registry } from \"@web/core/registry\";\nimport { useAutofocus, useService } from \"@web/core/utils/hooks\";\n\nconst { Component, hooks } = owl;\nconst { useRef, useState } = hooks;\n\nconst favoriteMenuRegistry = registry.category(\"favoriteMenu\");\n\nexport class CustomFavoriteItem extends Component {\n    setup() {\n        this.notificationService = useService(\"notification\");\n        this.descriptionRef = useRef(\"description\");\n        useAutofocus();\n        this.state = useState({\n            description: this.env.config.displayName || \"\",\n            isDefault: false,\n            isShared: false,\n        });\n    }\n\n    /**\n     * @param {Event} ev\n     */\n    saveFavorite(ev) {\n        if (!this.state.description.length) {\n            this.notificationService.add(\n                this.env._t(\"A name for your favorite filter is required.\"),\n                { type: \"danger\" }\n            );\n            ev.stopPropagation();\n            return this.descriptionRef.el.focus();\n        }\n        const favorites = this.env.searchModel.getSearchItems(\n            (s) => s.type === \"favorite\" && s.description === this.state.description\n        );\n        if (favorites.length) {\n            this.notificationService.add(this.env._t(\"A filter with same name already exists.\"), {\n                type: \"danger\",\n            });\n            ev.stopPropagation();\n            return this.descriptionRef.el.focus();\n        }\n        const { description, isDefault, isShared } = this.state;\n        this.env.searchModel.createNewFavorite({ description, isDefault, isShared });\n\n        Object.assign(this.state, {\n            description: this.env.config.displayName || \"\",\n            isDefault: false,\n            isShared: false,\n        });\n    }\n\n    /**\n     * @param {Event} ev\n     */\n    onDefaultCheckboxChange(ev) {\n        const { checked } = ev.target;\n        this.state.isDefault = checked;\n        if (checked) {\n            this.state.isShared = false;\n        }\n    }\n\n    /**\n     * @param {Event} ev\n     */\n    onShareCheckboxChange(ev) {\n        const { checked } = ev.target;\n        this.state.isShared = checked;\n        if (checked) {\n            this.state.isDefault = false;\n        }\n    }\n\n    /**\n     * @param {KeyboardEvent} ev\n     */\n    onInputKeydown(ev) {\n        switch (ev.key) {\n            case \"Enter\":\n                ev.preventDefault();\n                this.saveFavorite();\n                break;\n            case \"Escape\":\n                // Gives the focus back to the component.\n                ev.preventDefault();\n                ev.target.blur();\n                break;\n        }\n    }\n}\n\nCustomFavoriteItem.template = \"web.CustomFavoriteItem\";\nfavoriteMenuRegistry.add(\n    \"custom-favorite-item\",\n    { Component: CustomFavoriteItem, groupNumber: 3 },\n    { sequence: 0 }\n);\n", "/** @odoo-module **/\n\nimport { ConfirmationDialog } from \"@web/core/confirmation_dialog/confirmation_dialog\";\nimport { FACET_ICONS } from \"../utils/misc\";\nimport { registry } from \"@web/core/registry\";\nimport { useBus } from \"@web/core/utils/hooks\";\nimport { useService } from \"@web/core/utils/hooks\";\nimport { SearchDropdownItem } from \"@web/search/search_dropdown_item/search_dropdown_item\";\n\nconst favoriteMenuRegistry = registry.category(\"favoriteMenu\");\n\nconst { Component } = owl;\n\nexport class FavoriteMenu extends Component {\n    setup() {\n        this.icon = FACET_ICONS.favorite;\n        this.dialogService = useService(\"dialog\");\n\n        useBus(this.env.searchModel, \"update\", this.render);\n    }\n\n    /**\n     * @returns {Array}\n     */\n    get items() {\n        const favorites = this.env.searchModel.getSearchItems(\n            (searchItem) => searchItem.type === \"favorite\"\n        );\n        const registryMenus = [];\n        for (const item of favoriteMenuRegistry.getAll()) {\n            if (\"isDisplayed\" in item ? item.isDisplayed(this.env) : true) {\n                registryMenus.push({\n                    Component: item.Component,\n                    groupNumber: item.groupNumber,\n                    key: item.Component.name,\n                });\n            }\n        }\n        return [...favorites, ...registryMenus];\n    }\n\n    /**\n     * @param {CustomEvent} ev\n     */\n    onFavoriteSelected(ev) {\n        const { itemId } = ev.detail.payload;\n        this.env.searchModel.toggleSearchItem(itemId);\n    }\n\n    /**\n     * @param {number} itemId\n     */\n    openConfirmationDialog(itemId) {\n        const { userId } = this.items.find((item) => item.id === itemId);\n        const dialogProps = {\n            title: this.env._t(\"Warning\"),\n            body: userId\n                ? this.env._t(\"Are you sure that you want to remove this filter?\")\n                : this.env._t(\n                      \"This filter is global and will be removed for everybody if you continue.\"\n                  ),\n            confirm: () => this.env.searchModel.deleteFavorite(itemId),\n            cancel: () => {},\n        };\n        this.dialogService.add(ConfirmationDialog, dialogProps);\n    }\n}\nFavoriteMenu.components = { DropdownItem: SearchDropdownItem };\nFavoriteMenu.template = \"web.FavoriteMenu\";\n", "/** @odoo-module **/\n\nimport { DatePicker, DateTimePicker } from \"@web/core/datepicker/datepicker\";\nimport { Domain } from \"@web/core/domain\";\nimport { serializeDate, serializeDateTime } from \"@web/core/l10n/dates\";\nimport { _lt } from \"@web/core/l10n/translation\";\nimport { registry } from \"@web/core/registry\";\n\nconst { Component, hooks } = owl;\nconst { useState } = hooks;\n\nconst { DateTime } = luxon;\n\nconst formatters = registry.category(\"formatters\");\nconst parsers = registry.category(\"parsers\");\n\nconst FIELD_TYPES = {\n    boolean: \"boolean\",\n    char: \"char\",\n    date: \"date\",\n    datetime: \"datetime\",\n    float: \"number\",\n    id: \"id\",\n    integer: \"number\",\n    html: \"char\",\n    many2many: \"char\",\n    many2one: \"char\",\n    monetary: \"number\",\n    one2many: \"char\",\n    text: \"char\",\n    selection: \"selection\",\n};\n\n// FilterMenu parameters\nconst FIELD_OPERATORS = {\n    boolean: [\n        { symbol: \"=\", description: _lt(\"is true\"), value: true },\n        { symbol: \"!=\", description: _lt(\"is false\"), value: true },\n    ],\n    char: [\n        { symbol: \"ilike\", description: _lt(\"contains\") },\n        { symbol: \"not ilike\", description: _lt(\"doesn't contain\") },\n        { symbol: \"=\", description: _lt(\"is equal to\") },\n        { symbol: \"!=\", description: _lt(\"is not equal to\") },\n        { symbol: \"!=\", description: _lt(\"is set\"), value: false },\n        { symbol: \"=\", description: _lt(\"is not set\"), value: false },\n    ],\n    date: [\n        { symbol: \"=\", description: _lt(\"is equal to\") },\n        { symbol: \"!=\", description: _lt(\"is not equal to\") },\n        { symbol: \">\", description: _lt(\"is after\") },\n        { symbol: \"<\", description: _lt(\"is before\") },\n        { symbol: \">=\", description: _lt(\"is after or equal to\") },\n        { symbol: \"<=\", description: _lt(\"is before or equal to\") },\n        { symbol: \"between\", description: _lt(\"is between\") },\n        { symbol: \"!=\", description: _lt(\"is set\"), value: false },\n        { symbol: \"=\", description: _lt(\"is not set\"), value: false },\n    ],\n    datetime: [\n        { symbol: \"between\", description: _lt(\"is between\") },\n        { symbol: \"=\", description: _lt(\"is equal to\") },\n        { symbol: \"!=\", description: _lt(\"is not equal to\") },\n        { symbol: \">\", description: _lt(\"is after\") },\n        { symbol: \"<\", description: _lt(\"is before\") },\n        { symbol: \">=\", description: _lt(\"is after or equal to\") },\n        { symbol: \"<=\", description: _lt(\"is before or equal to\") },\n        { symbol: \"!=\", description: _lt(\"is set\"), value: false },\n        { symbol: \"=\", description: _lt(\"is not set\"), value: false },\n    ],\n    id: [{ symbol: \"=\", description: _lt(\"is\") }],\n    number: [\n        { symbol: \"=\", description: _lt(\"is equal to\") },\n        { symbol: \"!=\", description: _lt(\"is not equal to\") },\n        { symbol: \">\", description: _lt(\"greater than\") },\n        { symbol: \"<\", description: _lt(\"less than\") },\n        { symbol: \">=\", description: _lt(\"greater than or equal to\") },\n        { symbol: \"<=\", description: _lt(\"less than or equal to\") },\n        { symbol: \"!=\", description: _lt(\"is set\"), value: false },\n        { symbol: \"=\", description: _lt(\"is not set\"), value: false },\n    ],\n    selection: [\n        { symbol: \"=\", description: _lt(\"is\") },\n        { symbol: \"!=\", description: _lt(\"is not\") },\n        { symbol: \"!=\", description: _lt(\"is set\"), value: false },\n        { symbol: \"=\", description: _lt(\"is not set\"), value: false },\n    ],\n};\n\nconst parseField = (field, value, opts = {}) => {\n    if (FIELD_TYPES[field.type] === \"char\") {\n        return value;\n    }\n    const type = field.type === \"id\" ? \"integer\" : field.type;\n    const options = { field, ...opts };\n    if ([\"date\", \"datetime\"].includes(type)) {\n        options.timezone = type === \"datetime\";\n    }\n    const parse = parsers.contains(type) ? parsers.get(type) : (v) => v;\n    return parse(value, options);\n};\n\nconst formatField = (field, value, opts = {}) => {\n    if (FIELD_TYPES[field.type] === \"char\") {\n        return value;\n    }\n    const options = { field, ...opts };\n    const type = field.type === \"id\" ? \"integer\" : field.type;\n    if ([\"date\", \"datetime\"].includes(type)) {\n        options.timezone = type === \"datetime\";\n    }\n    const format = formatters.contains(type) ? formatters.get(type) : (v) => v;\n    return format(value, options);\n};\n\nexport class CustomFilterItem extends Component {\n    setup() {\n        this.conditions = useState([]);\n        // Format, filter and sort the fields props\n        this.fields = Object.values(this.env.searchModel.searchViewFields)\n            .filter((field) => this.validateField(field))\n            .concat({ string: \"ID\", type: \"id\", name: \"id\" })\n            .sort(({ string: a }, { string: b }) => (a > b ? 1 : a < b ? -1 : 0));\n\n        // Give access to constants variables to the template.\n        this.OPERATORS = FIELD_OPERATORS;\n        this.FIELD_TYPES = FIELD_TYPES;\n\n        // Add first condition\n        this.addNewCondition();\n    }\n\n    //---------------------------------------------------------------------\n    // Protected\n    //---------------------------------------------------------------------\n\n    /**\n     * Populate the conditions list with a new condition having as properties:\n     * - the last condition or the first available field\n     * - the last condition or the first available operator\n     * - a null or empty array value\n     */\n    addNewCondition() {\n        const lastCondition = [...this.conditions].pop();\n        const condition = lastCondition\n            ? Object.assign({}, lastCondition)\n            : {\n                  field: 0,\n                  operator: 0,\n              };\n        this.setDefaultValue(condition);\n        this.conditions.push(condition);\n    }\n\n    /**\n     * @param {Object} field\n     * @returns {boolean}\n     */\n    validateField(field) {\n        return (\n            !field.deprecated && field.searchable && FIELD_TYPES[field.type] && field.name !== \"id\"\n        );\n    }\n\n    /**\n     * @param {Object} condition\n     */\n    setDefaultValue(condition) {\n        const field = this.fields[condition.field];\n        const genericType = FIELD_TYPES[field.type];\n        const operator = FIELD_OPERATORS[genericType][condition.operator];\n        // Logical value\n        switch (genericType) {\n            case \"id\":\n            case \"number\": {\n                condition.value = 0;\n                break;\n            }\n            case \"date\":\n            case \"datetime\": {\n                condition.value = [DateTime.local()];\n                if (operator.symbol === \"between\") {\n                    condition.value.push(DateTime.local());\n                }\n                if (genericType === \"datetime\") {\n                    condition.value[0] = condition.value[0].set({ hour: 0, minute: 0, second: 0 });\n                    if (operator.symbol === \"between\") {\n                        condition.value[1] = condition.value[1].set({ hour: 23, minute: 59, second: 59 });\n                    }\n                }\n                break;\n            }\n            case \"selection\": {\n                const [firstValue] = this.fields[condition.field].selection[0];\n                condition.value = firstValue;\n                break;\n            }\n            default: {\n                condition.value = \"\";\n            }\n        }\n        // Displayed value (no needed for dates: they are handled by the DatePicker component)\n        if (![\"date\", \"datetime\"].includes(field.type)) {\n            condition.displayedValue = formatField(field, condition.value);\n        }\n    }\n\n    //---------------------------------------------------------------------\n    // Handlers\n    //---------------------------------------------------------------------\n\n    /**\n     * Convert all conditions to prefilters.\n     */\n    onApply() {\n        const preFilters = this.conditions.map((condition) => {\n            const field = this.fields[condition.field];\n            const genericType = this.FIELD_TYPES[field.type];\n            const operator = this.OPERATORS[genericType][condition.operator];\n            const descriptionArray = [field.string, operator.description.toString()];\n            const domainArray = [];\n            let domainValue;\n            // Field type specifics\n            if (\"value\" in operator) {\n                domainValue = [operator.value];\n                // No description to push here\n            } else if ([\"date\", \"datetime\"].includes(genericType)) {\n                const serialize = genericType === \"date\" ? serializeDate : serializeDateTime;\n                domainValue = condition.value.map(serialize);\n                descriptionArray.push(\n                    `\"${condition.value\n                        .map((val) => formatField(field, val))\n                        .join(\" \" + this.env._t(\"and\") + \" \")}\"`\n                );\n            } else {\n                domainValue = [condition.value];\n                descriptionArray.push(`\"${condition.value}\"`);\n            }\n            // Operator specifics\n            if (operator.symbol === \"between\") {\n                domainArray.push(\n                    [field.name, \">=\", domainValue[0]],\n                    [field.name, \"<=\", domainValue[1]]\n                );\n            } else {\n                domainArray.push([field.name, operator.symbol, domainValue[0]]);\n            }\n            const preFilter = {\n                description: descriptionArray.join(\" \"),\n                domain: new Domain(domainArray).toString(),\n                type: \"filter\",\n            };\n            return preFilter;\n        });\n\n        this.env.searchModel.createNewFilters(preFilters);\n\n        // remove conditions\n        while (this.conditions.length) {\n            this.conditions.pop();\n        }\n\n        this.addNewCondition();\n    }\n\n    /**\n     * @param {Object} condition\n     * @param {number} valueIndex\n     * @param {OwlEvent} ev\n     */\n    onDateChanged(condition, valueIndex, ev) {\n        condition.value[valueIndex] = ev.detail.date;\n    }\n\n    /**\n     * @param {Object} condition\n     * @param {Event} ev\n     */\n    onFieldSelect(condition, ev) {\n        Object.assign(condition, {\n            field: ev.target.selectedIndex,\n            operator: 0,\n        });\n        this.setDefaultValue(condition);\n    }\n\n    /**\n     * @param {Object} condition\n     * @param {Event} ev\n     */\n    onOperatorSelect(condition, ev) {\n        condition.operator = ev.target.selectedIndex;\n        this.setDefaultValue(condition);\n    }\n\n    /**\n     * @param {Object} condition\n     */\n    onRemoveCondition(conditionIndex) {\n        this.conditions.splice(conditionIndex, 1);\n    }\n\n    /**\n     * @param {Object} condition\n     * @param {Event} ev\n     */\n    onValueChange(condition, ev) {\n        if (!ev.target.value) {\n            return this.setDefaultValue(condition);\n        }\n        const field = this.fields[condition.field];\n        try {\n            const parsed = parseField(field, ev.target.value);\n            const formatted = formatField(field, parsed);\n            // Only updates values if it can be correctly parsed and formatted.\n            condition.value = parsed;\n            condition.displayedValue = formatted;\n        } catch (err) {\n            // Parsing error: nothing is done\n        }\n        ev.target.value = condition.displayedValue;\n    }\n}\n\nCustomFilterItem.components = { DatePicker, DateTimePicker };\nCustomFilterItem.template = \"web.CustomFilterItem\";\n", "/** @odoo-module **/\n\nimport { CustomFilterItem } from \"./custom_filter_item\";\nimport { FACET_ICONS } from \"../utils/misc\";\nimport { useBus } from \"@web/core/utils/hooks\";\nimport { SearchDropdownItem } from \"@web/search/search_dropdown_item/search_dropdown_item\";\n\nconst { Component } = owl;\n\nexport class FilterMenu extends Component {\n    setup() {\n        this.icon = FACET_ICONS.filter;\n\n        useBus(this.env.searchModel, \"update\", this.render);\n    }\n\n    /**\n     * @returns {Object[]}\n     */\n    get items() {\n        return this.env.searchModel.getSearchItems((searchItem) =>\n            [\"filter\", \"dateFilter\"].includes(searchItem.type)\n        );\n    }\n\n    /**\n     * @param {CustomEvent} ev\n     */\n    onFilterSelected(ev) {\n        const { itemId, optionId } = ev.detail.payload;\n        if (optionId) {\n            this.env.searchModel.toggleDateFilter(itemId, optionId);\n        } else {\n            this.env.searchModel.toggleSearchItem(itemId);\n        }\n    }\n}\n\nFilterMenu.components = { CustomFilterItem, DropdownItem: SearchDropdownItem };\nFilterMenu.template = \"web.FilterMenu\";\n", "/** @odoo-module **/\n\nconst { Component, hooks } = owl;\nconst { useState } = hooks;\n\nexport class CustomGroupByItem extends Component {\n    setup() {\n        this.state = useState({});\n        if (this.props.fields.length) {\n            this.state.fieldName = this.props.fields[0].name;\n        }\n    }\n\n    onApply() {\n        this.trigger(\"add-custom-group\", { fieldName: this.state.fieldName });\n    }\n}\n\nCustomGroupByItem.template = \"web.CustomGroupByItem\";\n", "/** @odoo-module **/\n\nimport { CustomGroupByItem } from \"./custom_group_by_item\";\nimport { FACET_ICONS, GROUPABLE_TYPES } from \"../utils/misc\";\nimport { Dropdown } from \"@web/core/dropdown/dropdown\";\nimport { sortBy } from \"@web/core/utils/arrays\";\nimport { useBus } from \"@web/core/utils/hooks\";\nimport { SearchDropdownItem } from \"@web/search/search_dropdown_item/search_dropdown_item\";\n\nconst { Component } = owl;\n\nexport class GroupByMenu extends Component {\n    setup() {\n        this.icon = FACET_ICONS.groupBy;\n        this.dropdownProps = Object.keys(this.props)\n            .filter((key) => key in Dropdown.props)\n            .reduce((obj, key) => ({ ...obj, [key]: this.props[key] }), {});\n        const fields = [];\n        for (const [fieldName, field] of Object.entries(this.env.searchModel.searchViewFields)) {\n            if (this.validateField(fieldName, field)) {\n                fields.push(Object.assign({ name: fieldName }, field));\n            }\n        }\n        this.fields = sortBy(fields, \"string\");\n\n        useBus(this.env.searchModel, \"update\", this.render);\n    }\n\n    /**\n     * @returns {Object[]}\n     */\n    get items() {\n        return this.env.searchModel.getSearchItems((searchItem) =>\n            [\"groupBy\", \"dateGroupBy\"].includes(searchItem.type)\n        );\n    }\n\n    /**\n     * @param {string} fieldName\n     * @param {Object} field\n     * @returns {boolean}\n     */\n    validateField(fieldName, field) {\n        const { sortable, type } = field;\n        return fieldName !== \"id\" && sortable && GROUPABLE_TYPES.includes(type);\n    }\n\n    /**\n     * @param {CustomEvent} ev\n     */\n    onGroupBySelected(ev) {\n        const { itemId, optionId } = ev.detail.payload;\n        if (optionId) {\n            this.env.searchModel.toggleDateGroupBy(itemId, optionId);\n        } else {\n            this.env.searchModel.toggleSearchItem(itemId);\n        }\n    }\n\n    /**\n     * @param {CustomEvent} ev\n     */\n    onAddCustomGroup(ev) {\n        const { fieldName } = ev.detail;\n        this.env.searchModel.createNewGroupBy(fieldName);\n    }\n}\n\nGroupByMenu.components = { CustomGroupByItem, DropdownItem: SearchDropdownItem };\nGroupByMenu.template = \"web.GroupByMenu\";\nGroupByMenu.defaultProps = {\n    showActiveItems: true,\n    showCaretDown: false,\n};\n", "/** @odoo-module **/\n\nimport { makeContext } from \"@web/core/context\";\nimport { _lt } from \"@web/core/l10n/translation\";\nimport { evaluateExpr } from \"@web/core/py_js/py\";\nimport { XMLParser } from \"@web/core/utils/xml\";\nimport { DEFAULT_INTERVAL, DEFAULT_PERIOD } from \"@web/search/utils/dates\";\n\nconst ALL = _lt(\"All\");\nconst DEFAULT_LIMIT = 200;\nconst DEFAULT_VIEWS_WITH_SEARCH_PANEL = [\"kanban\", \"list\"];\n\n/**\n * Returns the split 'group_by' key from the given context attribute.\n * This helper accepts any invalid context or one that does not have\n * a valid 'group_by' key, and falls back to an empty list.\n * @param {string} context\n * @returns {string[]}\n */\nconst getContextGroubBy = (context) => {\n    try {\n        return makeContext([context]).group_by.split(\":\");\n    } catch (err) {\n        return [];\n    }\n};\n\nfunction reduceType(type) {\n    if (type === \"dateFilter\") {\n        return \"filter\";\n    }\n    if (type === \"dateGroupBy\") {\n        return \"groupBy\";\n    }\n    return type;\n}\n\nexport class SearchArchParser extends XMLParser {\n    constructor(searchViewDescription, searchDefaults = {}, searchPanelDefaults = {}) {\n        super();\n\n        const { fields, irFilters, arch } = searchViewDescription;\n\n        this.fields = fields || {};\n        this.irFilters = irFilters || [];\n        this.arch = arch || \"<search/>\";\n\n        this.labels = [];\n        this.preSearchItems = [];\n        this.searchPanelInfo = {\n            className: \"\",\n            viewTypes: DEFAULT_VIEWS_WITH_SEARCH_PANEL,\n        };\n        this.sections = [];\n\n        this.searchDefaults = searchDefaults;\n        this.searchPanelDefaults = searchPanelDefaults;\n\n        this.currentGroup = [];\n        this.currentTag = null;\n        this.groupNumber = 0;\n        this.pregroupOfGroupBys = [];\n    }\n\n    parse() {\n        this.visitXML(this.arch, (node, visitChildren) => {\n            switch (node.tagName) {\n                case \"search\":\n                    this.visitSearch(node, visitChildren);\n                    break;\n                case \"searchpanel\":\n                    return this.visitSearchPanel(node);\n                case \"group\":\n                    this.visitGroup(node, visitChildren);\n                    break;\n                case \"separator\":\n                    this.visitSeparator();\n                    break;\n                case \"field\":\n                    this.visitField(node);\n                    break;\n                case \"filter\":\n                    this.visitFilter(node);\n                    break;\n            }\n        });\n\n        return {\n            labels: this.labels,\n            preSearchItems: this.preSearchItems,\n            searchPanelInfo: this.searchPanelInfo,\n            sections: this.sections,\n        };\n    }\n\n    pushGroup(tag = null) {\n        if (this.currentGroup.length) {\n            if (this.currentTag === \"groupBy\") {\n                this.pregroupOfGroupBys.push(...this.currentGroup);\n            } else {\n                this.preSearchItems.push(this.currentGroup);\n            }\n        }\n        this.currentTag = tag;\n        this.currentGroup = [];\n        this.groupNumber++;\n    }\n\n    visitField(node) {\n        this.pushGroup(\"field\");\n        const preField = { type: \"field\" };\n        if (node.hasAttribute(\"modifiers\")) {\n            const modifiers = JSON.parse(node.getAttribute(\"modifiers\"));\n            if (modifiers.invisible) {\n                preField.invisible = true;\n            }\n        }\n        if (node.hasAttribute(\"domain\")) {\n            preField.domain = node.getAttribute(\"domain\");\n        }\n        if (node.hasAttribute(\"filter_domain\")) {\n            preField.filterDomain = node.getAttribute(\"filter_domain\");\n        } else if (node.hasAttribute(\"operator\")) {\n            preField.operator = node.getAttribute(\"operator\");\n        }\n        if (node.hasAttribute(\"context\")) {\n            preField.context = node.getAttribute(\"context\");\n        }\n        if (node.hasAttribute(\"name\")) {\n            const name = node.getAttribute(\"name\");\n            preField.fieldName = name;\n            preField.fieldType = this.fields[name].type;\n            if (name in this.searchDefaults) {\n                preField.isDefault = true;\n                let value = this.searchDefaults[name];\n                value = Array.isArray(value) ? value[0] : value;\n                let operator = preField.operator;\n                if (!operator) {\n                    let type = preField.fieldType;\n                    if (node.hasAttribute(\"widget\")) {\n                        type = node.getAttribute(\"widget\");\n                    }\n                    // Note: many2one as a default filter will have a\n                    // numeric value instead of a string => we want \"=\"\n                    // instead of \"ilike\".\n                    if ([\"char\", \"html\", \"many2many\", \"one2many\", \"text\"].includes(type)) {\n                        operator = \"ilike\";\n                    } else {\n                        operator = \"=\";\n                    }\n                }\n                preField.defaultRank = -10;\n                const { fieldType, fieldName } = preField;\n                const { selection, context, relation } = this.fields[fieldName];\n                preField.defaultAutocompleteValue = { label: value, operator, value };\n                if (fieldType === \"selection\") {\n                    const option = selection.find((sel) => sel[0] === value);\n                    if (!option) {\n                        throw Error();\n                    }\n                    preField.defaultAutocompleteValue.label = option[1];\n                } else if (fieldType === \"many2one\") {\n                    this.labels.push((orm) => {\n                        return orm.call(relation, \"name_get\", [value], { context }).then((results) => {\n                            preField.defaultAutocompleteValue.label = results[0][1];\n                        });\n                    });\n                }\n            }\n        } else {\n            throw Error(); //but normally this should have caught earlier with view arch validation server side\n        }\n        if (node.hasAttribute(\"string\")) {\n            preField.description = node.getAttribute(\"string\");\n        } else if (preField.fieldName) {\n            preField.description = this.fields[preField.fieldName].string;\n        } else {\n            preField.description = \"\u03a9\";\n        }\n        this.currentGroup.push(preField);\n    }\n\n    visitFilter(node) {\n        const preSearchItem = { type: \"filter\" };\n        if (node.hasAttribute(\"context\")) {\n            const context = node.getAttribute(\"context\");\n            const [fieldName, defaultInterval] = getContextGroubBy(context);\n            const groupByField = this.fields[fieldName];\n            if (groupByField) {\n                preSearchItem.type = \"groupBy\";\n                preSearchItem.fieldName = fieldName;\n                preSearchItem.fieldType = groupByField.type;\n                if ([\"date\", \"datetime\"].includes(groupByField.type)) {\n                    preSearchItem.type = \"dateGroupBy\";\n                    preSearchItem.defaultIntervalId = defaultInterval || DEFAULT_INTERVAL;\n                }\n            } else {\n                preSearchItem.context = context;\n            }\n        }\n        if (reduceType(preSearchItem.type) !== this.currentTag) {\n            this.pushGroup(reduceType(preSearchItem.type));\n        }\n        if (preSearchItem.type === \"filter\") {\n            if (node.hasAttribute(\"date\")) {\n                const fieldName = node.getAttribute(\"date\");\n                preSearchItem.type = \"dateFilter\";\n                preSearchItem.fieldName = fieldName;\n                preSearchItem.fieldType = this.fields[fieldName].type;\n                preSearchItem.defaultGeneratorId = DEFAULT_PERIOD;\n                if (node.hasAttribute(\"default_period\")) {\n                    preSearchItem.defaultGeneratorId = node.getAttribute(\"default_period\");\n                }\n            } else {\n                let stringRepr = \"[]\";\n                if (node.hasAttribute(\"domain\")) {\n                    stringRepr = node.getAttribute(\"domain\");\n                }\n                preSearchItem.domain = stringRepr;\n            }\n        }\n        if (node.hasAttribute(\"modifiers\")) {\n            const modifiers = JSON.parse(node.getAttribute(\"modifiers\"));\n            if (modifiers.invisible) {\n                preSearchItem.invisible = true;\n                let fieldName = preSearchItem.fieldName;\n                if (fieldName && !this.fields[fieldName]) {\n                    // In some case when a field is limited to specific groups\n                    // on the model, we need to ensure to discard related filter\n                    // as it may still be present in the view (in 'invisible' state)\n                    return;\n                }\n            }\n        }\n        preSearchItem.groupNumber = this.groupNumber;\n        if (node.hasAttribute(\"name\")) {\n            const name = node.getAttribute(\"name\");\n            if (name in this.searchDefaults) {\n                preSearchItem.isDefault = true;\n                if ([\"groupBy\", \"dateGroupBy\"].includes(preSearchItem.type)) {\n                    const value = this.searchDefaults[name];\n                    preSearchItem.defaultRank = typeof value === \"number\" ? value : 100;\n                } else {\n                    preSearchItem.defaultRank = -5;\n                }\n            }\n        }\n        if (node.hasAttribute(\"string\")) {\n            preSearchItem.description = node.getAttribute(\"string\");\n        } else if (preSearchItem.fieldName) {\n            preSearchItem.description = this.fields[preSearchItem.fieldName].string;\n        } else if (node.hasAttribute(\"help\")) {\n            preSearchItem.description = node.getAttribute(\"help\");\n        } else if (node.hasAttribute(\"name\")) {\n            preSearchItem.description = node.getAttribute(\"name\");\n        } else {\n            preSearchItem.description = \"\u03a9\";\n        }\n        this.currentGroup.push(preSearchItem);\n    }\n\n    visitGroup(node, visitChildren) {\n        this.pushGroup();\n        visitChildren();\n        this.pushGroup();\n    }\n\n    visitSearch(node, visitChildren) {\n        visitChildren();\n        this.pushGroup();\n        if (this.pregroupOfGroupBys.length) {\n            this.preSearchItems.push(this.pregroupOfGroupBys);\n        }\n    }\n\n    visitSearchPanel(searchPanelNode) {\n        let hasCategoryWithCounters = false;\n        let hasFilterWithDomain = false;\n        let nextSectionId = 1;\n\n        if (searchPanelNode.hasAttribute(\"class\")) {\n            this.searchPanelInfo.className = searchPanelNode.getAttribute(\"class\");\n        }\n        if (searchPanelNode.hasAttribute(\"view_types\")) {\n            this.searchPanelInfo.viewTypes = searchPanelNode.getAttribute(\"view_types\").split(\",\");\n        }\n\n        for (const node of searchPanelNode.children) {\n            if (node.nodeType !== 1 || node.tagName !== \"field\") {\n                continue;\n            }\n            const isInvisible = Boolean(evaluateExpr(node.getAttribute(\"invisible\") || \"0\"));\n            if (isInvisible) {\n                continue;\n            }\n            const attrs = {};\n            for (const attrName of node.getAttributeNames()) {\n                attrs[attrName] = node.getAttribute(attrName);\n            }\n\n            const type = attrs.select === \"multi\" ? \"filter\" : \"category\";\n            const section = {\n                color: attrs.color || null,\n                description: attrs.string || this.fields[attrs.name].string,\n                enableCounters: Boolean(evaluateExpr(attrs.enable_counters || \"0\")),\n                expand: Boolean(evaluateExpr(attrs.expand || \"0\")),\n                fieldName: attrs.name,\n                icon: attrs.icon || null,\n                id: nextSectionId++,\n                limit: evaluateExpr(attrs.limit || String(DEFAULT_LIMIT)),\n                type,\n                values: new Map(),\n            };\n            if (type === \"category\") {\n                section.activeValueId = this.searchPanelDefaults[attrs.name];\n                section.icon = section.icon || \"fa-folder\";\n                section.hierarchize = Boolean(evaluateExpr(attrs.hierarchize || \"1\"));\n                section.values.set(false, {\n                    childrenIds: [],\n                    display_name: ALL.toString(),\n                    id: false,\n                    bold: true,\n                    parentId: false,\n                });\n                hasCategoryWithCounters = hasCategoryWithCounters || section.enableCounters;\n            } else {\n                section.domain = attrs.domain || \"[]\";\n                section.groupBy = attrs.groupby || null;\n                section.icon = section.icon || \"fa-filter\";\n                hasFilterWithDomain = hasFilterWithDomain || section.domain !== \"[]\";\n            }\n            this.sections.push([section.id, section]);\n        }\n\n        /**\n         * Category counters are automatically disabled if a filter domain is found\n         * to avoid inconsistencies with the counters. The underlying problem could\n         * actually be solved by reworking the search panel and the way the\n         * counters are computed, though this is not the current priority\n         * considering the time it would take, hence this quick \"fix\".\n         */\n        if (hasCategoryWithCounters && hasFilterWithDomain) {\n            // If incompatibilities are found -> disables all category counters\n            for (const section of this.sections) {\n                if (section.type === \"category\") {\n                    section.enableCounters = false;\n                }\n            }\n            // ... and triggers a warning\n            console.warn(\n                \"Warning: categories with counters are incompatible with filters having a domain attribute.\",\n                \"All category counters have been disabled to avoid inconsistencies.\"\n            );\n        }\n\n        return false; // we do not want to let the parser keep visiting children\n    }\n\n    visitSeparator() {\n        this.pushGroup();\n    }\n}\n", "/** @odoo-module **/\n\nimport { Domain } from \"@web/core/domain\";\nimport { serializeDate, serializeDateTime } from \"@web/core/l10n/dates\";\nimport { registry } from \"@web/core/registry\";\nimport { KeepLast } from \"@web/core/utils/concurrency\";\nimport { useAutofocus, useBus, useService } from \"@web/core/utils/hooks\";\nimport { fuzzyTest } from \"@web/core/utils/search\";\n\nconst { Component, hooks } = owl;\nconst { useExternalListener, useRef, useState } = hooks;\nconst parsers = registry.category(\"parsers\");\n\nconst CHAR_FIELDS = [\"char\", \"html\", \"many2many\", \"many2one\", \"one2many\", \"text\"];\n\nlet nextItemId = 1;\n\nexport class SearchBar extends Component {\n    setup() {\n        this.fields = this.env.searchModel.searchViewFields;\n        this.searchItems = this.env.searchModel.getSearchItems((f) => f.type === \"field\");\n\n        // core state\n        this.state = useState({\n            expanded: [],\n            focusedIndex: 0,\n            query: \"\",\n        });\n\n        // derived state\n        this.items = [];\n        this.subItems = {};\n\n        this.orm = useService(\"orm\");\n\n        this.keepLast = new KeepLast();\n\n        this.focusOnUpdate = useAutofocus();\n\n        this.inputRef = useRef(\"search-input\");\n\n        useBus(this.env.bus, \"FOCUS-SEARCH-BAR\", () => {\n            this.inputRef.el.focus();\n        });\n\n        useBus(this.env.searchModel, \"update\", this.render);\n\n        useExternalListener(window, \"click\", this.onWindowClick);\n        useExternalListener(window, \"keydown\", this.onWindowKeydown);\n    }\n\n    //---------------------------------------------------------------------\n    // Private\n    //---------------------------------------------------------------------\n\n    /**\n     * @param {Object} [options={}]\n     * @param {number[]} [options.expanded]\n     * @param {number} [options.focusedIndex]\n     * @param {string} [options.query]\n     * @param {Object[]} [options.subItems]\n     * @returns {Object[]}\n     */\n    async computeState(options = {}) {\n        const query = \"query\" in options ? options.query : this.state.query;\n        const expanded = \"expanded\" in options ? options.expanded : this.state.expanded;\n        const focusedIndex =\n            \"focusedIndex\" in options ? options.focusedIndex : this.state.focusedIndex;\n        const subItems = \"subItems\" in options ? options.subItems : this.subItems;\n\n        const tasks = [];\n        for (const id of expanded) {\n            if (!subItems[id]) {\n                tasks.push({ id, prom: this.computeSubItems(id, query) });\n            }\n        }\n\n        const prom = this.keepLast.add(Promise.all(tasks.map((task) => task.prom)));\n\n        if (tasks.length) {\n            const taskResults = await prom;\n            tasks.forEach((task, index) => {\n                subItems[task.id] = taskResults[index];\n            });\n        }\n\n        this.state.expanded = expanded;\n        this.state.query = query;\n        this.state.focusedIndex = focusedIndex;\n        this.subItems = subItems;\n\n        this.inputRef.el.value = query;\n\n        const trimmedQuery = this.state.query.trim();\n\n        this.items = [];\n\n        if (!trimmedQuery) {\n            return;\n        }\n\n        for (const searchItem of this.searchItems) {\n            const field = this.fields[searchItem.fieldName];\n            const type = field.type === \"reference\" ? \"char\" : field.type;\n            /** @todo do something with respect to localization (rtl) */\n            const preposition = this.env._t([\"date\", \"datetime\"].includes(type) ? \"at\" : \"for\");\n\n            if ([\"selection\", \"boolean\"].includes(type)) {\n                const options = field.selection || [\n                    [true, this.env._t(\"Yes\")],\n                    [false, this.env._t(\"No\")],\n                ];\n                for (const [value, label] of options) {\n                    if (fuzzyTest(trimmedQuery.toLowerCase(), label.toLowerCase())) {\n                        this.items.push({\n                            id: nextItemId++,\n                            searchItemDescription: searchItem.description,\n                            preposition,\n                            searchItemId: searchItem.id,\n                            label,\n                            /** @todo check if searchItem.operator is fine (here and elsewhere) */\n                            operator: searchItem.operator || \"=\",\n                            value,\n                        });\n                    }\n                }\n                continue;\n            }\n\n            const parser = parsers.contains(type) ? parsers.get(type) : (str) => str;\n            let value;\n            try {\n                switch (type) {\n                    case \"date\": {\n                        value = serializeDate(parser(trimmedQuery, { timezone: false }));\n                        break;\n                    }\n                    case \"datetime\": {\n                        value = serializeDateTime(parser(trimmedQuery, { timezone: true }));\n                        break;\n                    }\n                    case \"many2one\": {\n                        value = trimmedQuery;\n                        break;\n                    }\n                    default: {\n                        value = parser(trimmedQuery);\n                    }\n                }\n            } catch (e) {\n                continue;\n            }\n\n            const item = {\n                id: nextItemId++,\n                searchItemDescription: searchItem.description,\n                preposition,\n                searchItemId: searchItem.id,\n                label: this.state.query,\n                operator: searchItem.operator || (CHAR_FIELDS.includes(type) ? \"ilike\" : \"=\"),\n                value,\n            };\n\n            if (type === \"many2one\") {\n                item.isParent = true;\n                item.isExpanded = this.state.expanded.includes(item.searchItemId);\n            }\n\n            this.items.push(item);\n\n            if (item.isExpanded) {\n                this.items.push(...this.subItems[searchItem.id]);\n            }\n        }\n    }\n\n    /**\n     * @param {number} searchItemId\n     * @param {string} query\n     * @returns {Object[]}\n     */\n    async computeSubItems(searchItemId, query) {\n        const searchItem = this.searchItems.find((i) => i.id === searchItemId);\n        const field = this.fields[searchItem.fieldName];\n        let domain = [];\n        if (searchItem.domain) {\n            try {\n                domain = new Domain(searchItem.domain).toList();\n            } catch (e) {\n                // Pass\n            }\n        }\n        const options = await this.orm.call(field.relation, \"name_search\", [], {\n            args: domain,\n            context: field.context,\n            limit: 8,\n            name: query.trim(),\n        });\n        let subItems = [];\n        if (options.length) {\n            const operator = searchItem.operator || \"=\";\n            for (const [value, label] of options) {\n                subItems.push({\n                    id: nextItemId++,\n                    isChild: true,\n                    searchItemId,\n                    value,\n                    label,\n                    operator,\n                });\n            }\n        } else {\n            subItems.push({\n                id: nextItemId++,\n                isChild: true,\n                searchItemId,\n                label: this.env._t(\"(no result)\"),\n                unselectable: true,\n            });\n        }\n        return subItems;\n    }\n\n    /**\n     * @param {number} [index]\n     */\n    focusFacet(index) {\n        const facets = this.el.getElementsByClassName(\"o_searchview_facet\");\n        if (facets.length) {\n            if (index === undefined) {\n                facets[facets.length - 1].focus();\n            } else {\n                facets[index].focus();\n            }\n        }\n    }\n\n    /**\n     * @param {Object} facet\n     */\n    removeFacet(facet) {\n        this.env.searchModel.deactivateGroup(facet.groupId);\n        this.focusOnUpdate();\n    }\n\n    resetState() {\n        this.computeState({ expanded: [], focusedIndex: 0, query: \"\", subItems: [] });\n        this.focusOnUpdate();\n    }\n\n    /**\n     * @param {Object} item\n     */\n    selectItem(item) {\n        if (!item.unselectable) {\n            const { searchItemId, label, operator, value } = item;\n            this.env.searchModel.addAutoCompletionValues(searchItemId, { label, operator, value });\n        }\n        this.resetState();\n    }\n\n    /**\n     * @param {Object} item\n     * @param {boolean} shouldExpand\n     */\n    toggleItem(item, shouldExpand) {\n        const id = item.searchItemId;\n        const expanded = [...this.state.expanded];\n        const index = expanded.findIndex((id0) => id0 === id);\n        if (shouldExpand === true) {\n            if (index < 0) {\n                expanded.push(id);\n            }\n        } else {\n            if (index >= 0) {\n                expanded.splice(index, 1);\n            }\n        }\n        this.computeState({ expanded });\n    }\n\n    //---------------------------------------------------------------------\n    // Handlers\n    //---------------------------------------------------------------------\n\n    /**\n     * @param {Object} facet\n     * @param {number} facetIndex\n     * @param {KeyboardEvent} ev\n     */\n    onFacetKeydown(facet, facetIndex, ev) {\n        switch (ev.key) {\n            case \"ArrowLeft\": {\n                if (facetIndex === 0) {\n                    this.inputRef.el.focus();\n                } else {\n                    this.focusFacet(facetIndex - 1);\n                }\n                break;\n            }\n            case \"ArrowRight\": {\n                const facets = this.el.getElementsByClassName(\"o_searchview_facet\");\n                if (facetIndex === facets.length - 1) {\n                    this.inputRef.el.focus();\n                } else {\n                    this.focusFacet(facetIndex + 1);\n                }\n                break;\n            }\n            case \"Backspace\": {\n                this.removeFacet(facet);\n                break;\n            }\n        }\n    }\n\n    /**\n     * @param {Object} facet\n     */\n    onFacetRemove(facet) {\n        this.removeFacet(facet);\n    }\n\n    /**\n     * @param {number} index\n     */\n    onItemMousemove(focusedIndex) {\n        this.state.focusedIndex = focusedIndex;\n        this.inputRef.el.focus();\n    }\n\n    /**\n     * @param {KeyboardEvent} ev\n     */\n    onSearchKeydown(ev) {\n        if (ev.isComposing) {\n            // This case happens with an IME for example: we let it handle all key events.\n            return;\n        }\n        const focusedItem = this.items[this.state.focusedIndex];\n        let focusedIndex;\n        switch (ev.key) {\n            case \"ArrowDown\":\n                ev.preventDefault();\n                if (this.items.length) {\n                    if (this.state.focusedIndex >= this.items.length - 1) {\n                        focusedIndex = 0;\n                    } else {\n                        focusedIndex = this.state.focusedIndex + 1;\n                    }\n                } else {\n                    this.env.bus.trigger(\"FOCUS-VIEW\");\n                }\n                break;\n            case \"ArrowUp\":\n                ev.preventDefault();\n                if (this.items.length) {\n                    if (\n                        this.state.focusedIndex === 0 ||\n                        this.state.focusedIndex > this.items.length - 1\n                    ) {\n                        focusedIndex = this.items.length - 1;\n                    } else {\n                        focusedIndex = this.state.focusedIndex - 1;\n                    }\n                }\n                break;\n            case \"ArrowLeft\":\n                if (focusedItem && focusedItem.isParent && focusedItem.isExpanded) {\n                    ev.preventDefault();\n                    this.toggleItem(focusedItem, false);\n                } else if (focusedItem && focusedItem.isChild) {\n                    ev.preventDefault();\n                    focusedIndex = this.items.findIndex(\n                        (item) => item.isParent && item.searchItemId === focusedItem.searchItemId\n                    );\n                } else if (ev.target.selectionStart === 0) {\n                    // focus rightmost facet if any.\n                    this.focusFacet();\n                } else {\n                    // do nothing and navigate inside text\n                }\n                break;\n            case \"ArrowRight\":\n                if (ev.target.selectionStart === this.state.query.length) {\n                    if (focusedItem && focusedItem.isParent) {\n                        ev.preventDefault();\n                        if (focusedItem.isExpanded) {\n                            focusedIndex = this.state.focusedIndex + 1;\n                        } else {\n                            this.toggleItem(focusedItem, true);\n                        }\n                    } else if (ev.target.selectionStart === this.state.query.length) {\n                        // Priority 3: focus leftmost facet if any.\n                        this.focusFacet(0);\n                    }\n                }\n                break;\n            case \"Backspace\":\n                if (!this.state.query.length) {\n                    const facets = this.env.searchModel.facets;\n                    if (facets.length) {\n                        this.removeFacet(facets[facets.length - 1]);\n                    }\n                }\n                break;\n            case \"Enter\":\n                if (!this.state.query.length) {\n                    this.env.searchModel.search(); /** @todo keep this thing ?*/\n                    break;\n                } else if (focusedItem) {\n                    ev.preventDefault(); // keep the focus inside the search bar\n                    this.selectItem(focusedItem);\n                }\n                break;\n            case \"Tab\":\n                if (this.state.query.length && focusedItem) {\n                    ev.preventDefault(); // keep the focus inside the search bar\n                    this.selectItem(focusedItem);\n                }\n                break;\n            case \"Escape\":\n                this.resetState();\n                break;\n        }\n\n        if (focusedIndex !== undefined) {\n            this.state.focusedIndex = focusedIndex;\n        }\n    }\n\n    /**\n     * @param {InputEvent} ev\n     */\n    onSearchInput(ev) {\n        const query = ev.target.value;\n        if (query.trim()) {\n            this.computeState({ query, expanded: [], focusedIndex: 0, subItems: [] });\n        } else if (this.items.length) {\n            this.resetState();\n        }\n    }\n\n    /**\n     * @param {MouseEvent} ev\n     */\n    onWindowClick(ev) {\n        if (this.items.length && !this.el.contains(ev.target)) {\n            this.resetState();\n        }\n    }\n\n    /**\n     * @param {KeyboardEvent} ev\n     */\n    onWindowKeydown(ev) {\n        if (this.items.length && ev.key === \"Escape\") {\n            this.resetState();\n        }\n    }\n}\n\nSearchBar.template = \"web.SearchBar\";\n", "/** @odoo-module **/\n\nimport { DropdownItem } from \"@web/core/dropdown/dropdown_item\";\n\nexport class SearchDropdownItem extends DropdownItem {}\nSearchDropdownItem.template = \"web.SearchDropdownItem\";\nSearchDropdownItem.props = {\n    ...DropdownItem.props,\n    checked: {\n        type: Boolean,\n        optional: false,\n    },\n};\n", "/** @odoo-module **/\n\nimport { makeContext } from \"@web/core/context\";\nimport { Domain } from \"@web/core/domain\";\nimport { evaluateExpr } from \"@web/core/py_js/py\";\nimport { sortBy } from \"@web/core/utils/arrays\";\nimport { deepCopy } from \"@web/core/utils/objects\";\nimport { SearchArchParser } from \"./search_arch_parser\";\nimport {\n    constructDateDomain,\n    DEFAULT_INTERVAL,\n    getComparisonOptions,\n    getIntervalOptions,\n    getPeriodOptions,\n    rankInterval,\n    yearSelected,\n} from \"./utils/dates\";\nimport { FACET_ICONS } from \"./utils/misc\";\n\nconst { DateTime } = luxon;\nconst EventBus = owl.core.EventBus;\n\n/**\n * @typedef {Object} ComparisonDomain\n * @property {DomainListRepr} arrayRepr\n * @property {string} description\n */\n\n/**\n * @typedef {Object} Comparison\n * @property {ComparisonDomain[]} domains\n * @property {string} [fieldName]\n */\n\n/**\n * @typedef {Object} SearchParams\n * @property {Comparison | null} comparison\n * @property {Context} context\n * @property {DomainListRepr} domain\n * @property {string[]} groupBy\n * @property {string[]} orderBy\n * @property {boolean} [useSampleModel] to remove?\n */\n\n/** @todo rework doc */\n// interface SectionCommon { // check optional keys\n//     color: string;\n//     description: string;\n//     errorMsg: [string];\n//     enableCounters: boolean;\n//     expand: boolean;\n//     fieldName: string;\n//     icon: string;\n//     id: number;\n//     limit: number;\n//     values: Map<any,any>;\n//   }\n\n//   export interface Category extends SectionCommon {\n//     type: \"category\";\n//     hierarchize: boolean;\n//   }\n\n//   export interface Filter extends SectionCommon {\n//     type: \"filter\";\n//     domain: string;\n//     groupBy: string;\n//     groups: Map<any,any>;\n//   }\n\n//   export type Section = Category | Filter;\n\n//   export type SectionPredicate = (section: Section) => boolean;\n\n/**\n * @param {Section} section\n * @returns {boolean}\n */\nfunction hasValues(section) {\n    const { errorMsg, type, values } = section;\n    if (errorMsg) {\n        return true;\n    }\n    switch (type) {\n        case \"category\": {\n            return values && values.size > 1; // false item ignored\n        }\n        case \"filter\": {\n            return values && values.size > 0;\n        }\n    }\n}\n\n/**\n * Returns a serialised array of the given map with its values being the\n * shallow copies of the original values.\n * @param {Map<any, Object>} map\n * @return {Array[]}\n */\nfunction mapToArray(map) {\n    const result = [];\n    for (const [key, val] of map) {\n        const valCopy = Object.assign({}, val);\n        result.push([key, valCopy]);\n    }\n    return result;\n}\n/**\n * @param {Array[]}\n * @returns {Map<any, Object>} map\n */\nfunction arraytoMap(array) {\n    return new Map(array);\n}\n\n/**\n * @param {Function} op\n * @param {Object} source\n * @param {Object} target\n */\nfunction execute(op, source, target) {\n    const {\n        query,\n        nextId,\n        nextGroupId,\n        nextGroupNumber,\n        searchItems,\n        searchPanelInfo,\n        sections,\n    } = source;\n\n    target.nextGroupId = nextGroupId;\n    target.nextGroupNumber = nextGroupNumber;\n    target.nextId = nextId;\n\n    target.query = query;\n    target.searchItems = searchItems;\n\n    target.searchPanelInfo = searchPanelInfo;\n\n    target.sections = op(sections);\n    for (const [, section] of target.sections) {\n        section.values = op(section.values);\n        if (section.groups) {\n            section.groups = op(section.groups);\n            for (const [, group] of section.groups) {\n                group.values = op(group.values);\n            }\n        }\n    }\n}\n\n//--------------------------------------------------------------------------\n// Global constants/variables\n//--------------------------------------------------------------------------\n\nconst FAVORITE_PRIVATE_GROUP = 1;\nconst FAVORITE_SHARED_GROUP = 2;\n\nexport class SearchModel extends EventBus {\n    constructor(env, services) {\n        super();\n        this.env = env;\n        this.setup(services);\n    }\n    /**\n     * @override\n     */\n    setup(services) {\n        // services\n        const { orm, user, view } = services;\n        this.orm = orm;\n        this.userService = user;\n        this.viewService = view;\n\n        // used to manage search items related to date/datetime fields\n        this.referenceMoment = DateTime.local();\n        this.comparisonOptions = getComparisonOptions();\n        this.intervalOptions = getIntervalOptions();\n        this.optionGenerators = getPeriodOptions(this.referenceMoment);\n    }\n\n    /**\n     *\n     * @param {Object} config\n     * @param {string} config.resModel\n     *\n     * @param {string} [config.searchViewArch=\"<search/>\"]\n     * @param {Object} [config.searchViewFields={}]\n     * @param {number|false} [config.searchViewId=false]\n     * @param {Object[]} [config.irFilters=[]]\n     *\n     * @param {boolean} [config.activateFavorite=true]\n     * @param {Object | null} [config.comparison]\n     * @param {Object} [config.context={}]\n     * @param {Array} [config.domain=[]]\n     * @param {Array} [config.dynamicFilters=[]]\n     * @param {string[]} [config.groupBy=[]]\n     * @param {boolean} [config.loadIrFilters=false]\n     * @param {boolean} [config.display.searchPanel=true]\n     * @param {string[]} [config.orderBy=[]]\n     * @param {string[]} [config.searchMenuTypes=[\"filter\", \"groupBy\", \"favorite\"]]\n     * @param {Object} [config.state]\n     */\n    async load(config) {\n        const { resModel } = config;\n        if (!resModel) {\n            throw Error(`SearchPanel config should have a \"resModel\" key`);\n        }\n        this.resModel = resModel;\n\n        // used to avoid useless recomputations\n        this._reset();\n\n        const { comparison, context, domain, groupBy, orderBy } = config;\n\n        this.globalComparison = comparison;\n        this.globalContext = context || {};\n        this.globalDomain = domain || [];\n        this.globalGroupBy = groupBy || [];\n        this.globalOrderBy = orderBy || [];\n\n        this.searchMenuTypes = new Set(config.searchMenuTypes || [\"filter\", \"groupBy\", \"favorite\"]);\n\n        let { irFilters, loadIrFilters, searchViewArch, searchViewFields, searchViewId } = config;\n        const loadSearchView =\n            searchViewId !== undefined &&\n            (!searchViewArch || !searchViewFields || (!irFilters && loadIrFilters));\n\n        const searchViewDescription = {};\n        if (loadSearchView) {\n            const viewDescriptions = await this.viewService.loadViews(\n                {\n                    context: this.globalContext,\n                    resModel,\n                    views: [[searchViewId, \"search\"]],\n                },\n                {\n                    actionId: this.env.config.actionId,\n                    loadIrFilters: loadIrFilters || false,\n                }\n            );\n            Object.assign(searchViewDescription, viewDescriptions.search);\n        }\n        if (searchViewArch) {\n            searchViewDescription.arch = searchViewArch;\n        }\n        if (searchViewFields) {\n            searchViewDescription.fields = searchViewFields;\n        }\n        if (irFilters) {\n            searchViewDescription.irFilters = irFilters;\n        }\n        if (searchViewId !== undefined) {\n            searchViewDescription.viewId = searchViewId;\n        }\n\n        this.searchViewArch = searchViewDescription.arch || \"<search/>\";\n        this.searchViewFields = searchViewDescription.fields || {};\n        if (searchViewDescription.irFilters) {\n            this.irFilters = searchViewDescription.irFilters;\n        }\n        if (searchViewDescription.viewId !== undefined) {\n            this.searchViewId = searchViewDescription.viewId;\n        }\n\n        if (config.state) {\n            this._importState(config.state);\n            this.__legacyParseSearchPanelArchAnyway(searchViewDescription);\n            this.domainParts = {};\n            this.display = this._getDisplay(config.display);\n\n            return this._reloadSections();\n        }\n\n        this.blockNotification = true;\n\n        this.searchItems = {};\n        this.query = [];\n\n        this.nextId = 1;\n        this.nextGroupId = 1;\n        this.nextGroupNumber = 1;\n\n        // ... to rework (API for external domain, groupBy, facet)\n        this.domainParts = {}; // put in state?\n\n        const searchDefaults = {};\n        const searchPanelDefaults = {};\n\n        for (const key in this.globalContext) {\n            const defaultValue = this.globalContext[key];\n            const searchDefaultMatch = /^search_default_(.*)$/.exec(key);\n            if (searchDefaultMatch) {\n                if (defaultValue) {\n                    searchDefaults[searchDefaultMatch[1]] = defaultValue;\n                }\n                delete this.globalContext[key];\n                continue;\n            }\n            const searchPanelDefaultMatch = /^searchpanel_default_(.*)$/.exec(key);\n            if (searchPanelDefaultMatch) {\n                searchPanelDefaults[searchPanelDefaultMatch[1]] = defaultValue;\n                delete this.globalContext[key];\n            }\n        }\n\n        const parser = new SearchArchParser(\n            searchViewDescription,\n            searchDefaults,\n            searchPanelDefaults\n        );\n        const { labels, preSearchItems, searchPanelInfo, sections } = parser.parse();\n\n        this.searchPanelInfo = { ...searchPanelInfo, shouldReload: false };\n\n        await Promise.all(labels.map((cb) => cb(this.orm)));\n\n        // prepare search items (populate this.searchItems)\n        for (const preGroup of preSearchItems || []) {\n            this._createGroupOfSearchItems(preGroup);\n        }\n        this.nextGroupNumber =\n            1 + Math.max(...Object.values(this.searchItems).map((i) => i.groupNumber || 0), 0);\n\n        const dateFilters = Object.values(this.searchItems).filter(\n            (searchElement) => searchElement.type === \"dateFilter\"\n        );\n        if (dateFilters.length) {\n            this._createGroupOfComparisons(dateFilters);\n        }\n\n        const { dynamicFilters } = config;\n        if (dynamicFilters) {\n            this._createGroupOfDynamicFilters(dynamicFilters);\n        }\n\n        const defaultFavoriteId = this._createGroupOfFavorites(this.irFilters || []);\n        const activateFavorite = \"activateFavorite\" in config ? config.activateFavorite : true;\n\n        // activate default search items (populate this.query)\n        this._activateDefaultSearchItems(activateFavorite ? defaultFavoriteId : null);\n\n        // prepare search panel sections\n\n        /** @type Map<number,Section> */\n        this.sections = new Map(sections || []);\n        this.display = this._getDisplay(config.display);\n\n        if (this.display.searchPanel) {\n            /** @type DomainListRepr */\n            this.searchDomain = this._getDomain({ withSearchPanel: false });\n            this.sectionsPromise = this._fetchSections(this.categories, this.filters).then(() => {\n                for (const { fieldName, values } of this.filters) {\n                    const filterDefaults = searchPanelDefaults[fieldName] || [];\n                    for (const valueId of filterDefaults) {\n                        const value = values.get(valueId);\n                        if (value) {\n                            value.checked = true;\n                        }\n                    }\n                }\n            });\n            if (Object.keys(searchPanelDefaults).length || this._shouldWaitForData(false)) {\n                await this.sectionsPromise;\n            }\n        }\n\n        this.blockNotification = false;\n    }\n\n    /**\n     * @param {Object} [config={}]\n     * @param {Object | null} [config.comparison]\n     * @param {Object} [config.context={}]\n     * @param {Array} [config.domain=[]]\n     * @param {string[]} [config.groupBy=[]]\n     * @param {string[]} [config.orderBy=[]]\n     */\n    async reload(config = {}) {\n        this._reset();\n\n        const { comparison, context, domain, groupBy, orderBy } = config;\n\n        this.globalContext = context || {};\n        this.globalDomain = domain || [];\n        this.globalComparison = comparison;\n        this.globalGroupBy = groupBy || [];\n        this.globalOrderBy = orderBy || [];\n\n        await this._reloadSections();\n    }\n\n    //--------------------------------------------------------------------------\n    // Getters\n    //--------------------------------------------------------------------------\n\n    /**\n     * @returns {Category[]}\n     */\n    get categories() {\n        return [...this.sections.values()].filter((s) => s.type === \"category\");\n    }\n\n    /**\n     * @returns {Context} should be imported from context.js?\n     */\n    get context() {\n        if (!this._context) {\n            this._context = makeContext([this.globalContext, this._getContext()]);\n        }\n        return deepCopy(this._context);\n    }\n\n    /**\n     * @returns {DomainListRepr} should be imported from domain.js?\n     */\n    get domain() {\n        if (!this._domain) {\n            this._domain = this._getDomain();\n        }\n        return deepCopy(this._domain);\n    }\n\n    /**\n     * @returns {Comparison}\n     */\n    get comparison() {\n        if (!this.searchMenuTypes.has(\"comparison\")) {\n            return null;\n        }\n        if (this._comparison === undefined) {\n            if (this.globalComparison) {\n                this._comparison = this.globalComparison;\n            } else {\n                const comparison = this.getFullComparison();\n                if (comparison) {\n                    const {\n                        fieldName,\n                        range,\n                        rangeDescription,\n                        comparisonRange,\n                        comparisonRangeDescription,\n                    } = comparison;\n                    const domains = [\n                        {\n                            arrayRepr: Domain.and([this.domain, range]).toList(),\n                            description: rangeDescription,\n                        },\n                        {\n                            arrayRepr: Domain.and([this.domain, comparisonRange]).toList(),\n                            description: comparisonRangeDescription,\n                        },\n                    ];\n                    this._comparison = { domains, fieldName };\n                } else {\n                    this._comparison = null;\n                }\n            }\n        }\n        return deepCopy(this._comparison);\n    }\n\n    get facets() {\n        const isValidType = (type) =>\n            ![\"groupBy\", \"comparison\"].includes(type) || this.searchMenuTypes.has(type);\n        const facets = [];\n        for (const facet of this._getFacets()) {\n            if (!isValidType(facet.type)) {\n                continue;\n            }\n            facets.push(facet);\n        }\n        return facets;\n    }\n\n    /**\n     * @returns {Filter[]}\n     */\n    get filters() {\n        return [...this.sections.values()].filter((s) => s.type === \"filter\");\n    }\n\n    /**\n     * @returns {string[]}\n     */\n    get groupBy() {\n        if (!this._groupBy) {\n            this._groupBy = this._getGroupBy();\n        }\n        return deepCopy(this._groupBy);\n    }\n\n    /**\n     * @returns {string[]}\n     */\n    get orderBy() {\n        if (!this._orderBy) {\n            this._orderBy = this._getOrderBy();\n        }\n        return deepCopy(this._orderBy);\n    }\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Activate a filter of type 'field' with given filterId with\n     * 'autocompleteValues' value, label, and operator.\n     * @param {Object}\n     */\n    addAutoCompletionValues(searchItemId, autocompleteValue) {\n        const searchItem = this.searchItems[searchItemId];\n        if (searchItem.type !== \"field\") {\n            return;\n        }\n        const { label, value, operator } = autocompleteValue;\n        const queryElem = this.query.find(\n            (queryElem) =>\n                queryElem.searchItemId === searchItemId &&\n                \"autocompleteValue\" in queryElem &&\n                queryElem.autocompleteValue.value === value &&\n                queryElem.autocompleteValue.operator === operator\n        );\n        if (!queryElem) {\n            this.query.push({ searchItemId, autocompleteValue });\n        } else {\n            queryElem.autocompleteValue.label = label; // seems related to old stuff --> should be useless now\n        }\n        this._notify();\n    }\n\n    /**\n     * Remove all the query elements from query.\n     */\n    clearQuery() {\n        this.query = [];\n        this._notify();\n    }\n\n    /**\n     * Create a new filter of type 'favorite' and activate it.\n     * A new group containing only that filter is created.\n     * The query is emptied before activating the new favorite.\n     * @param {Object} params\n     * @returns {Promise}\n     */\n    async createNewFavorite(params) {\n        const { preFavorite, irFilter } = this._getIrFilterDescription(params);\n        const serverSideId = await this.orm.call(\"ir.filters\", \"create_or_replace\", [irFilter]);\n        this.env.bus.trigger(\"CLEAR-CACHES\");\n\n        // before the filter cache was cleared!\n        this.blockNotification = true;\n        this.clearQuery();\n        const favorite = {\n            ...preFavorite,\n            type: \"favorite\",\n            id: this.nextId,\n            groupId: this.nextGroupId,\n            groupNumber: preFavorite.userId ? FAVORITE_PRIVATE_GROUP : FAVORITE_SHARED_GROUP,\n            removable: true,\n            serverSideId,\n        };\n        this.searchItems[this.nextId] = favorite;\n        this.query.push({ searchItemId: this.nextId });\n        this.nextGroupId++;\n        this.nextId++;\n        this.blockNotification = false;\n        this._notify();\n    }\n\n    /**\n     * Create new search items of type 'filter' and activate them.\n     * A new group containing only those filters is created.\n     */\n    createNewFilters(prefilters) {\n        if (!prefilters.length) {\n            return [];\n        }\n        prefilters.forEach((preFilter) => {\n            const filter = Object.assign(preFilter, {\n                groupId: this.nextGroupId,\n                groupNumber: this.nextGroupNumber,\n                id: this.nextId,\n                type: \"filter\",\n            });\n            this.searchItems[this.nextId] = filter;\n            this.query.push({ searchItemId: this.nextId });\n            this.nextId++;\n        });\n        this.nextGroupId++;\n        this.nextGroupNumber++;\n        this._notify();\n    }\n\n    /**\n     * Create a new filter of type 'groupBy' or 'dateGroupBy' and activate it.\n     * It is added to the unique group of groupbys.\n     * @param {string} fieldName\n     */\n    createNewGroupBy(fieldName) {\n        const field = this.searchViewFields[fieldName];\n        const { string, type: fieldType } = field;\n        const firstGroupBy = Object.values(this.searchItems).find((f) => f.type === \"groupBy\");\n        const preSearchItem = {\n            description: string || fieldName,\n            fieldName,\n            fieldType,\n            groupId: firstGroupBy ? firstGroupBy.groupId : this.nextGroupId++,\n            groupNumber: this.nextGroupNumber,\n            id: this.nextId,\n            custom: true,\n        };\n        if ([\"date\", \"datetime\"].includes(fieldType)) {\n            this.searchItems[this.nextId] = Object.assign(\n                { type: \"dateGroupBy\", defaultIntervalId: DEFAULT_INTERVAL },\n                preSearchItem\n            );\n            this.toggleDateGroupBy(this.nextId);\n        } else {\n            this.searchItems[this.nextId] = Object.assign({ type: \"groupBy\" }, preSearchItem);\n            this.toggleSearchItem(this.nextId);\n        }\n        this.nextGroupNumber++; // FIXME: with this, all subsequent added groups are in different groups (visually)\n        this.nextId++;\n        this._notify();\n    }\n\n    /**\n     * Deactivate a group with provided groupId, i.e. delete the query elements\n     * with given groupId.\n     */\n    deactivateGroup(groupId) {\n        this.query = this.query.filter((queryElem) => {\n            const searchItem = this.searchItems[queryElem.searchItemId];\n            return searchItem.groupId !== groupId;\n        });\n\n        for (const partName in this.domainParts) {\n            const part = this.domainParts[partName];\n            if (part.groupId === groupId) {\n                this.setDomainParts({ [partName]: null });\n            }\n        }\n        this._checkComparisonStatus();\n        this._notify();\n    }\n\n    /**\n     * Delete a filter of type 'favorite' with given this.nextId server side and\n     * in control panel model. Of course the filter is also removed\n     * from the search query.\n     */\n    async deleteFavorite(favoriteId) {\n        const searchItem = this.searchItems[favoriteId];\n        if (searchItem.type !== \"favorite\") {\n            return;\n        }\n        const { serverSideId } = searchItem;\n        await this.orm.unlink(\"ir.filters\", [serverSideId]);\n        this.env.bus.trigger(\"CLEAR-CACHES\");\n        const index = this.query.findIndex((queryElem) => queryElem.searchItemId === favoriteId);\n        delete this.searchItems[favoriteId];\n        if (index >= 0) {\n            this.query.splice(index, 1);\n        }\n        this._notify();\n    }\n\n    /**\n     * @returns {Object}\n     */\n    exportState() {\n        const state = {};\n        execute(mapToArray, this, state);\n        return state;\n    }\n\n    getDomainPart(partName) {\n        let part = this.domainParts[partName] || null;\n        if (part) {\n            return deepCopy(part);\n        }\n        return part;\n    }\n\n    getDomainParts() {\n        const copy = deepCopy(this.domainParts);\n        return sortBy(Object.values(copy), (part) => part.groupId);\n    }\n\n    getFullComparison() {\n        let searchItem = null;\n        for (const queryElem of this.query.slice().reverse()) {\n            const item = this.searchItems[queryElem.searchItemId];\n            if (item.type === \"comparison\") {\n                searchItem = item;\n                break;\n            } else if (item.type === \"favorite\" && item.comparison) {\n                searchItem = item;\n                break;\n            }\n        }\n        if (!searchItem) {\n            return null;\n        } else if (searchItem.type === \"favorite\") {\n            return searchItem.comparison;\n        }\n        const { dateFilterId, comparisonOptionId } = searchItem;\n        const { fieldName, fieldType, description: dateFilterDescription } = this.searchItems[\n            dateFilterId\n        ];\n        const selectedGeneratorIds = this._getSelectedGeneratorIds(dateFilterId);\n        // compute range and range description\n        const { domain: range, description: rangeDescription } = constructDateDomain(\n            this.referenceMoment,\n            fieldName,\n            fieldType,\n            selectedGeneratorIds\n        );\n        // compute comparisonRange and comparisonRange description\n        const {\n            domain: comparisonRange,\n            description: comparisonRangeDescription,\n        } = constructDateDomain(\n            this.referenceMoment,\n            fieldName,\n            fieldType,\n            selectedGeneratorIds,\n            comparisonOptionId\n        );\n        return {\n            comparisonId: comparisonOptionId,\n            fieldName,\n            fieldDescription: dateFilterDescription,\n            range: range.toList(),\n            rangeDescription,\n            comparisonRange: comparisonRange.toList(),\n            comparisonRangeDescription,\n        };\n    }\n\n    getIrFilterValues(params) {\n        const { irFilter } = this._getIrFilterDescription(params);\n        return irFilter;\n    }\n\n    /**\n     * Return an array containing enriched copies of all searchElements or of those\n     * satifying the given predicate if any\n     * @param {Function} [predicate]\n     * @returns {Object[]}\n     */\n    getSearchItems(predicate) {\n        const searchItems = [];\n        Object.values(this.searchItems).forEach((searchItem) => {\n            if (\n                (!(\"invisible\" in searchItem) || !searchItem.invisible) &&\n                (!predicate || predicate(searchItem))\n            ) {\n                const enrichedSearchitem = this._enrichItem(searchItem);\n                if (enrichedSearchitem) {\n                    searchItems.push(enrichedSearchitem);\n                }\n            }\n        });\n        if (searchItems.some((f) => f.type === \"favorite\")) {\n            searchItems.sort((f1, f2) => f1.groupNumber - f2.groupNumber);\n        }\n        return searchItems;\n    }\n\n    /**\n     * Returns a sorted list of a copy of all sections. This list can be\n     * filtered by a given predicate.\n     * @param {SectionPredicate} [predicate] used to determine\n     *      which subsets of sections is wanted\n     * @returns {Section[]}\n     */\n    getSections(predicate) {\n        let sections = [...this.sections.values()].map((section) =>\n            Object.assign({}, section, { empty: !hasValues(section) })\n        );\n        if (predicate) {\n            sections = sections.filter(predicate);\n        }\n        return sections.sort((s1, s2) => s1.index - s2.index);\n    }\n\n    search() {\n        this.trigger(\"update\");\n    }\n\n    setDomainParts(parts) {\n        for (const key in parts) {\n            const val = parts[key];\n\n            if (!val) {\n                delete this.domainParts[key];\n            } else {\n                this.domainParts[key] = val;\n                val.groupId = this.nextGroupId++;\n            }\n        }\n        this._notify();\n    }\n\n    /**\n     * Set the active value id of a given category.\n     * @param {number} sectionId\n     * @param {number} valueId\n     */\n    toggleCategoryValue(sectionId, valueId) {\n        const category = this.sections.get(sectionId);\n        category.activeValueId = valueId;\n        this._notify();\n    }\n\n    /**\n     * Toggle a filter value of a given section. The value will be set\n     * to \"forceTo\" if provided, else it will be its own opposed value.\n     * @param {number} sectionId\n     * @param {number[]} valueIds\n     * @param {boolean} [forceTo=null]\n     */\n    toggleFilterValues(sectionId, valueIds, forceTo = null) {\n        const filter = this.sections.get(sectionId);\n        for (const valueId of valueIds) {\n            const value = filter.values.get(valueId);\n            value.checked = forceTo === null ? !value.checked : forceTo;\n        }\n        this._notify();\n    }\n\n    /**\n     * Activate or deactivate the simple filter with given filterId, i.e.\n     * add or remove a corresponding query element.\n     */\n    toggleSearchItem(searchItemId) {\n        const searchItem = this.searchItems[searchItemId];\n        switch (searchItem.type) {\n            case \"dateFilter\":\n            case \"dateGroupBy\":\n            case \"field\": {\n                return;\n            }\n        }\n        const index = this.query.findIndex((queryElem) => queryElem.searchItemId === searchItemId);\n        if (index >= 0) {\n            this.query.splice(index, 1);\n        } else {\n            if (searchItem.type === \"favorite\") {\n                this.query = [];\n            } else if (searchItem.type === \"comparison\") {\n                // make sure only one comparison can be active\n                this.query = this.query.filter((queryElem) => {\n                    const { type } = this.searchItems[queryElem.searchItemId];\n                    return type !== \"comparison\";\n                });\n            }\n            this.query.push({ searchItemId });\n        }\n        this._notify();\n    }\n\n    /**\n     * Used to toggle a query element.\n     * This can impact the query in various form, e.g. add/remove other query elements\n     * in case the filter is of type 'filter'.\n     */\n    toggleDateFilter(searchItemId, generatorId) {\n        const searchItem = this.searchItems[searchItemId];\n        if (searchItem.type !== \"dateFilter\") {\n            return;\n        }\n        generatorId = generatorId || searchItem.defaultGeneratorId;\n        const index = this.query.findIndex(\n            (queryElem) =>\n                queryElem.searchItemId === searchItemId &&\n                \"generatorId\" in queryElem &&\n                queryElem.generatorId === generatorId\n        );\n        if (index >= 0) {\n            this.query.splice(index, 1);\n            if (!yearSelected(this._getSelectedGeneratorIds(searchItemId))) {\n                // This is the case where generatorId was the last option\n                // of type 'year' to be there before being removed above.\n                // Since other options of type 'month' or 'quarter' do\n                // not make sense without a year we deactivate all options.\n                this.query = this.query.filter(\n                    (queryElem) => queryElem.searchItemId !== searchItemId\n                );\n            }\n        } else {\n            this.query.push({ searchItemId, generatorId });\n            if (!yearSelected(this._getSelectedGeneratorIds(searchItemId))) {\n                // Here we add 'this_year' as options if no option of type\n                // year is already selected.\n                const { defaultYearId } = this.optionGenerators.find((o) => o.id === generatorId);\n                this.query.push({ searchItemId, generatorId: defaultYearId });\n            }\n        }\n        this._checkComparisonStatus();\n        this._notify();\n    }\n\n    toggleDateGroupBy(searchItemId, intervalId) {\n        const searchItem = this.searchItems[searchItemId];\n        if (searchItem.type !== \"dateGroupBy\") {\n            return;\n        }\n        intervalId = intervalId || searchItem.defaultIntervalId;\n        const index = this.query.findIndex(\n            (queryElem) =>\n                queryElem.searchItemId === searchItemId &&\n                \"intervalId\" in queryElem &&\n                queryElem.intervalId === intervalId\n        );\n        if (index >= 0) {\n            this.query.splice(index, 1);\n        } else {\n            this.query.push({ searchItemId, intervalId });\n        }\n        this._notify();\n    }\n\n    //--------------------------------------------------------------------------\n    // Private methods\n    //--------------------------------------------------------------------------\n\n    /**\n     * Activate the default favorite (if any) or all default filters.\n     */\n    _activateDefaultSearchItems(defaultFavoriteId) {\n        if (defaultFavoriteId) {\n            // Activate default favorite\n            this.toggleSearchItem(defaultFavoriteId);\n        } else {\n            // Activate default filters\n            Object.values(this.searchItems)\n                .filter((f) => f.isDefault && f.type !== \"favorite\")\n                .sort((f1, f2) => (f1.defaultRank || 100) - (f2.defaultRank || 100))\n                .forEach((f) => {\n                    if (f.type === \"dateFilter\") {\n                        this.toggleDateFilter(f.id);\n                    } else if (f.type === \"dateGroupBy\") {\n                        this.toggleDateGroupBy(f.id);\n                    } else if (f.type === \"field\") {\n                        this.addAutoCompletionValues(f.id, f.defaultAutocompleteValue);\n                    } else {\n                        this.toggleSearchItem(f.id);\n                    }\n                });\n        }\n    }\n\n    /**\n     * If a comparison is active, check if it should become inactive.\n     * The comparison should become inactive if the corresponding date filter has become\n     * inactive.\n     */\n    _checkComparisonStatus() {\n        const activeComparison = this._getActiveComparison();\n        if (!activeComparison) {\n            return;\n        }\n        const { dateFilterId, id } = activeComparison;\n        const dateFilterIsActive = this.query.some(\n            (queryElem) => queryElem.searchItemId === dateFilterId\n        );\n        if (!dateFilterIsActive) {\n            this.query = this.query.filter((queryElem) => queryElem.searchItemId !== id);\n        }\n    }\n\n    /**\n     * @param {string} sectionId\n     * @param {Object} result\n     */\n    _createCategoryTree(sectionId, result) {\n        const category = this.sections.get(sectionId);\n\n        let { error_msg, parent_field: parentField, values } = result;\n        if (error_msg) {\n            category.errorMsg = error_msg;\n            values = [];\n        }\n        if (category.hierarchize) {\n            category.parentField = parentField;\n        }\n        for (const value of values) {\n            category.values.set(\n                value.id,\n                Object.assign({}, value, {\n                    childrenIds: [],\n                    parentId: value[parentField] || false,\n                })\n            );\n        }\n        for (const value of values) {\n            const { parentId } = category.values.get(value.id);\n            if (parentId && category.values.has(parentId)) {\n                category.values.get(parentId).childrenIds.push(value.id);\n            }\n        }\n        // collect rootIds\n        category.rootIds = [false];\n        for (const value of values) {\n            const { parentId } = category.values.get(value.id);\n            if (!parentId) {\n                category.rootIds.push(value.id);\n            }\n        }\n        // Set active value from context\n        const valueIds = [false, ...values.map((val) => val.id)];\n        this._ensureCategoryValue(category, valueIds);\n    }\n\n    /**\n     * @param {string} sectionId\n     * @param {Object} result\n     */\n    _createFilterTree(sectionId, result) {\n        const filter = this.sections.get(sectionId);\n\n        let { error_msg, values } = result;\n        if (error_msg) {\n            filter.errorMsg = error_msg;\n            values = [];\n        }\n\n        // restore checked property\n        values.forEach((value) => {\n            const oldValue = filter.values.get(value.id);\n            value.checked = oldValue ? oldValue.checked : false;\n        });\n\n        filter.values = new Map();\n        const groupIds = [];\n        if (filter.groupBy) {\n            const groups = new Map();\n            for (const value of values) {\n                const groupId = value.group_id;\n                if (!groups.has(groupId)) {\n                    if (groupId) {\n                        groupIds.push(groupId);\n                    }\n                    groups.set(groupId, {\n                        id: groupId,\n                        name: value.group_name,\n                        values: new Map(),\n                        tooltip: value.group_tooltip,\n                        sequence: value.group_sequence,\n                        hex_color: value.group_hex_color,\n                    });\n                    // restore former checked state\n                    const oldGroup = filter.groups && filter.groups.get(groupId);\n                    groups.get(groupId).state = (oldGroup && oldGroup.state) || false;\n                }\n                groups.get(groupId).values.set(value.id, value);\n            }\n            filter.groups = groups;\n            filter.sortedGroupIds = sortBy(\n                groupIds,\n                (id) => groups.get(id).sequence || groups.get(id).name\n            );\n            for (const group of filter.groups.values()) {\n                for (const [valueId, value] of group.values) {\n                    filter.values.set(valueId, value);\n                }\n            }\n        } else {\n            for (const value of values) {\n                filter.values.set(value.id, value);\n            }\n        }\n    }\n\n    /**\n     * Starting from the array of date filters, create the filters of type\n     * 'comparison'.\n     * @param {Object[]} dateFilters\n     */\n    _createGroupOfComparisons(dateFilters) {\n        const preSearchItem = [];\n        for (const dateFilter of dateFilters) {\n            for (const comparisonOption of this.comparisonOptions) {\n                const { id: dateFilterId, description } = dateFilter;\n                const preFilter = {\n                    type: \"comparison\",\n                    comparisonOptionId: comparisonOption.id,\n                    description: `${description}: ${comparisonOption.description}`,\n                    dateFilterId,\n                };\n                preSearchItem.push(preFilter);\n            }\n        }\n        this._createGroupOfSearchItems(preSearchItem);\n    }\n\n    /**\n     * Add filters of type 'filter' determined by the key array dynamicFilters.\n     */\n    _createGroupOfDynamicFilters(dynamicFilters) {\n        const pregroup = dynamicFilters.map((filter) => {\n            return {\n                groupNumber: this.nextGroupNumber,\n                description: filter.description,\n                domain: filter.domain,\n                isDefault: true,\n                type: \"filter\",\n            };\n        });\n        this.nextGroupNumber++;\n        this._createGroupOfSearchItems(pregroup);\n    }\n\n    /**\n     * Add filters of type 'favorite' determined by the array this.favoriteFilters.\n     */\n    _createGroupOfFavorites(irFilters) {\n        let defaultFavoriteId = null;\n        irFilters.forEach((irFilter) => {\n            const favorite = this._irFilterToFavorite(irFilter);\n            this._createGroupOfSearchItems([favorite]);\n            if (favorite.isDefault) {\n                defaultFavoriteId = favorite.id;\n            }\n        });\n        return defaultFavoriteId;\n    }\n\n    /**\n     * Using a list (a 'pregroup') of 'prefilters', create new filters in `searchItems`\n     * for each prefilter. The new filters belong to a same new group.\n     */\n    _createGroupOfSearchItems(pregroup) {\n        pregroup.forEach((preSearchItem) => {\n            const searchItem = Object.assign(preSearchItem, {\n                groupId: this.nextGroupId,\n                id: this.nextId,\n            });\n            this.searchItems[this.nextId] = searchItem;\n            this.nextId++;\n        });\n        this.nextGroupId++;\n    }\n\n    /**\n     * Returns null or a copy of the provided filter with additional information\n     * used only outside of the control panel model, like in search bar or in the\n     * various menus. The value null is returned if the filter should not appear\n     * for some reason.\n     */\n    _enrichItem(searchItem) {\n        const queryElements = this.query.filter(\n            (queryElem) => queryElem.searchItemId === searchItem.id\n        );\n        const isActive = Boolean(queryElements.length);\n        const enrichSearchItem = Object.assign({ isActive }, searchItem);\n        function _enrichOptions(options, selectedIds) {\n            return options.map((o) => {\n                const { description, id, groupNumber } = o;\n                const isActive = selectedIds.some((optionId) => optionId === id);\n                return { description, id, groupNumber, isActive };\n            });\n        }\n        switch (searchItem.type) {\n            case \"comparison\": {\n                const { dateFilterId } = searchItem;\n                const dateFilterIsActive = this.query.some(\n                    (queryElem) => queryElem.searchItemId === dateFilterId\n                );\n                if (!dateFilterIsActive) {\n                    return null;\n                }\n                break;\n            }\n            case \"dateFilter\":\n                enrichSearchItem.options = _enrichOptions(\n                    this.optionGenerators,\n                    queryElements.map((queryElem) => queryElem.generatorId)\n                );\n                break;\n            case \"dateGroupBy\":\n                enrichSearchItem.options = _enrichOptions(\n                    this.intervalOptions,\n                    queryElements.map((queryElem) => queryElem.intervalId)\n                );\n                break;\n            case \"field\":\n                enrichSearchItem.autocompleteValues = queryElements.map(\n                    (queryElem) => queryElem.autocompleteValue\n                );\n                break;\n        }\n        return enrichSearchItem;\n    }\n\n    /**\n     * Ensures that the active value of a category is one of its own\n     * existing values.\n     * @param {Category} category\n     * @param {number[]} valueIds\n     */\n    _ensureCategoryValue(category, valueIds) {\n        if (!valueIds.includes(category.activeValueId)) {\n            category.activeValueId = valueIds[0];\n        }\n    }\n\n    /**\n     * Fetches values for each category at startup. At reload a category is\n     * only fetched if needed.\n     * @param {Category[]} categories\n     * @returns {Promise} resolved when all categories have been fetched\n     */\n    async _fetchCategories(categories) {\n        const filterDomain = this._getFilterDomain();\n        const searchDomain = this.searchDomain;\n        await Promise.all(\n            categories.map(async (category) => {\n                const result = await this.orm.call(\n                    this.resModel,\n                    \"search_panel_select_range\",\n                    [category.fieldName],\n                    {\n                        category_domain: this._getCategoryDomain(category.id),\n                        enable_counters: category.enableCounters,\n                        expand: category.expand,\n                        filter_domain: filterDomain,\n                        hierarchize: category.hierarchize,\n                        limit: category.limit,\n                        search_domain: searchDomain,\n                    }\n                );\n                this._createCategoryTree(category.id, result);\n            })\n        );\n    }\n\n    /**\n     * Fetches values for each filter. This is done at startup and at each\n     * reload if needed.\n     * @param {Filter[]} filters\n     * @returns {Promise} resolved when all filters have been fetched\n     */\n    async _fetchFilters(filters) {\n        const evalContext = {};\n        for (const category of this.categories) {\n            evalContext[category.fieldName] = category.activeValueId;\n        }\n        const categoryDomain = this._getCategoryDomain();\n        const searchDomain = this.searchDomain;\n        await Promise.all(\n            filters.map(async (filter) => {\n                const result = await this.orm.call(\n                    this.resModel,\n                    \"search_panel_select_multi_range\",\n                    [filter.fieldName],\n                    {\n                        category_domain: categoryDomain,\n                        comodel_domain: new Domain(filter.domain).toList(evalContext),\n                        enable_counters: filter.enableCounters,\n                        filter_domain: this._getFilterDomain(filter.id),\n                        expand: filter.expand,\n                        group_by: filter.groupBy || false,\n                        group_domain: this._getGroupDomain(filter),\n                        limit: filter.limit,\n                        search_domain: searchDomain,\n                    }\n                );\n                this._createFilterTree(filter.id, result);\n            })\n        );\n    }\n\n    /**\n     * Fetches values for the given categories and filters.\n     * @param {Category[]} categoriesToLoad\n     * @param {Filter[]} filtersToLoad\n     * @returns {Promise} resolved when all categories have been fetched\n     */\n    async _fetchSections(categoriesToLoad, filtersToLoad) {\n        await this._fetchCategories(categoriesToLoad);\n        await this._fetchFilters(filtersToLoad);\n    }\n\n    _getActiveComparison() {\n        for (const queryElem of this.query) {\n            const searchItem = this.searchItems[queryElem.searchItemId];\n            if (searchItem.type === \"comparison\") {\n                return searchItem;\n            }\n        }\n        return null;\n    }\n\n    /**\n     * Computes and returns the domain based on the current active\n     * categories. If \"excludedCategoryId\" is provided, the category with\n     * that id is not taken into account in the domain computation.\n     * @param {string} [excludedCategoryId]\n     * @returns {Array[]}\n     */\n    _getCategoryDomain(excludedCategoryId) {\n        const domain = [];\n        for (const category of this.categories) {\n            if (category.id === excludedCategoryId || !category.activeValueId) {\n                continue;\n            }\n            const field = this.searchViewFields[category.fieldName];\n            const operator = field.type === \"many2one\" && category.parentField ? \"child_of\" : \"=\";\n            domain.push([category.fieldName, operator, category.activeValueId]);\n        }\n        return domain;\n    }\n\n    /**\n     * Construct a single context from the contexts of\n     * filters of type 'filter', 'favorite', and 'field'.\n     * @returns {Object}\n     */\n    _getContext() {\n        const groups = this._getGroups();\n        const contexts = [this.userService.context];\n        for (const group of groups) {\n            for (const activeItem of group.activeItems) {\n                const context = this._getSearchItemContext(activeItem);\n                if (context) {\n                    contexts.push(context);\n                }\n            }\n        }\n        let context;\n        try {\n            context = makeContext(contexts);\n            return context;\n        } catch (error) {\n            throw new Error(\n                `${this.env._t(\"Failed to evaluate the context\")} ${context}.\\n${error.message}`\n            );\n        }\n    }\n\n    /**\n     * Compute the string representation or the description of the current domain associated\n     * with a date filter starting from its corresponding query elements.\n     */\n    _getDateFilterDomain(dateFilter, generatorIds, key = \"domain\") {\n        const { fieldName, fieldType } = dateFilter;\n        const dateFilterRange = constructDateDomain(\n            this.referenceMoment,\n            fieldName,\n            fieldType,\n            generatorIds\n        );\n        return dateFilterRange[key];\n    }\n\n    /**\n     * Returns which components are displayed in the current action. Components\n     * are opt-out, meaning that they will be displayed as long as a falsy\n     * value is not provided. With the search panel, the view type must also\n     * match the given (or default) search panel view types if the search model\n     * is instanciated in a view (this doesn't apply for any other action type).\n     * @private\n     * @param {Object} [display={}]\n     * @returns {{ controlPanel: Object | false, searchPanel: boolean }}\n     */\n    _getDisplay(display = {}) {\n        const { viewTypes } = this.searchPanelInfo;\n        const { bannerRoute, viewType } = this.env.config;\n        return {\n            controlPanel: \"controlPanel\" in display ? display.controlPanel : {},\n            searchPanel:\n                this.sections.size &&\n                (!viewType || viewTypes.includes(viewType)) &&\n                (\"searchPanel\" in display ? display.searchPanel : true),\n            banner: Boolean(bannerRoute),\n        };\n    }\n\n    /**\n     * Return a domain created by combinining appropriately (with an 'AND') the domains\n     * coming from the active groups of type 'filter', 'dateFilter', 'favorite', and 'field'.\n     * @param {Object} [params]\n     * @param {boolean} [params.raw=false]\n     * @param {boolean} [params.withSearchPanel=true]\n     * @param {boolean} [params.withGlobal=true]\n     * @returns {DomainListRepr | Domain} Domain instance if 'raw', else the evaluated list domain\n     */\n    _getDomain(params = {}) {\n        const withSearchPanel = \"withSearchPanel\" in params ? params.withSearchPanel : true;\n        const withGlobal = \"withGlobal\" in params ? params.withGlobal : true;\n\n        const groups = this._getGroups();\n        const domains = [];\n        if (withGlobal) {\n            domains.push(this.globalDomain);\n        }\n        for (const group of groups) {\n            const groupActiveItemDomains = [];\n            for (const activeItem of group.activeItems) {\n                const domain = this._getSearchItemDomain(activeItem);\n                if (domain) {\n                    groupActiveItemDomains.push(domain);\n                }\n            }\n            const groupDomain = Domain.or(groupActiveItemDomains);\n            domains.push(groupDomain);\n        }\n\n        for (const { domain } of this.getDomainParts()) {\n            domains.push(domain);\n        }\n        // we need to manage (optional) facets, deactivateGroup, clearQuery,...\n\n        if (this.display.searchPanel && withSearchPanel) {\n            domains.push(this._getSearchPanelDomain());\n        }\n\n        let domain;\n        try {\n            domain = Domain.and(domains);\n            return params.raw ? domain : domain.toList(this.userService.context);\n        } catch (error) {\n            throw new Error(\n                `${this.env._t(\"Failed to evaluate the domain\")} ${domain.toString()}.\\n${\n                    error.message\n                }`\n            );\n        }\n    }\n\n    _getFacets() {\n        const facets = [];\n        const groups = this._getGroups();\n        for (const group of groups) {\n            const values = [];\n            let title;\n            let type;\n            for (const activeItem of group.activeItems) {\n                const searchItem = this.searchItems[activeItem.searchItemId];\n                switch (searchItem.type) {\n                    case \"field\": {\n                        type = \"field\";\n                        title = searchItem.description;\n                        for (const autocompleteValue of activeItem.autocompletValues) {\n                            values.push(autocompleteValue.label);\n                        }\n                        break;\n                    }\n                    case \"groupBy\": {\n                        type = \"groupBy\";\n                        values.push(searchItem.description);\n                        break;\n                    }\n                    case \"dateGroupBy\": {\n                        type = \"groupBy\";\n                        for (const intervalId of activeItem.intervalIds) {\n                            const option = this.intervalOptions.find((o) => o.id === intervalId);\n                            values.push(`${searchItem.description}: ${option.description}`);\n                        }\n                        break;\n                    }\n                    case \"dateFilter\": {\n                        type = \"filter\";\n                        const periodDescription = this._getDateFilterDomain(\n                            searchItem,\n                            activeItem.generatorIds,\n                            \"description\"\n                        );\n                        values.push(`${searchItem.description}: ${periodDescription}`);\n                        break;\n                    }\n                    default: {\n                        type = searchItem.type;\n                        values.push(searchItem.description);\n                    }\n                }\n            }\n            const facet = {\n                groupId: group.id,\n                type: type,\n                values,\n                separator: type === \"groupBy\" ? \">\" : this.env._t(\"or\"),\n            };\n            if (type === \"field\") {\n                facet.title = title;\n            } else {\n                facet.icon = FACET_ICONS[type];\n            }\n            facets.push(facet);\n        }\n\n        for (const { facetLabel, groupId } of this.getDomainParts()) {\n            const type = \"filter\";\n            facets.push({\n                groupId,\n                type,\n                values: [facetLabel],\n                icon: FACET_ICONS[type],\n            });\n        }\n\n        return facets;\n    }\n\n    /**\n     * Return the domain resulting from the combination of the autocomplete values\n     * of a search item of type 'field'.\n     */\n    _getFieldDomain(field, autocompleteValues) {\n        const domains = autocompleteValues.map(({ label, value, operator }) => {\n            let domain;\n            if (field.filterDomain) {\n                domain = new Domain(field.filterDomain).toList({ self: label, raw_value: value });\n            } else {\n                domain = [[field.fieldName, operator, value]];\n            }\n            return new Domain(domain);\n        });\n        return Domain.or(domains);\n    }\n\n    /**\n     * Computes and returns the domain based on the current checked\n     * filters. The values of a single filter are combined using a simple\n     * rule: checked values within a same group are combined with an \"OR\"\n     * operator (this is expressed as single condition using a list) and\n     * groups are combined with an \"AND\" operator (expressed by\n     * concatenation of conditions).\n     * If a filter has no group, its checked values are implicitely\n     * considered as forming a group (and grouped using an \"OR\").\n     * If excludedFilterId is provided, the filter with that id is not\n     * taken into account in the domain computation.\n     * @param {string} [excludedFilterId]\n     * @returns {Array[]}\n     */\n    _getFilterDomain(excludedFilterId) {\n        const domain = [];\n\n        function addCondition(fieldName, valueMap) {\n            const ids = [];\n            for (const [valueId, value] of valueMap) {\n                if (value.checked) {\n                    ids.push(valueId);\n                }\n            }\n            if (ids.length) {\n                domain.push([fieldName, \"in\", ids]);\n            }\n        }\n\n        for (const filter of this.filters) {\n            if (filter.id === excludedFilterId) {\n                continue;\n            }\n            const { fieldName, groups, values } = filter;\n            if (groups) {\n                for (const group of groups.values()) {\n                    addCondition(fieldName, group.values);\n                }\n            } else {\n                addCondition(fieldName, values);\n            }\n        }\n        return domain;\n    }\n\n    /**\n     * Return the concatenation of groupBys comming from the active filters of\n     * type 'favorite' and 'groupBy'.\n     * The result respects the appropriate logic: the groupBys\n     * coming from an active favorite (if any) come first, then come the\n     * groupBys comming from the active filters of type 'groupBy' in the order\n     * defined in this.query. If no groupBys are found, one tries to\n     * find some grouBys in this.globalContext.\n     */\n    _getGroupBy() {\n        const groups = this._getGroups();\n        const groupBys = [];\n        for (const group of groups) {\n            for (const activeItem of group.activeItems) {\n                const activeItemGroupBys = this._getSearchItemGroupBys(activeItem);\n                if (activeItemGroupBys) {\n                    groupBys.push(...activeItemGroupBys);\n                }\n            }\n        }\n        const groupBy = groupBys.length ? groupBys : this.globalGroupBy.slice();\n        return typeof groupBy === \"string\" ? [groupBy] : groupBy;\n    }\n\n    /**\n     * Returns a domain or an object of domains used to complement\n     * the filter domains to accurately describe the constrains on\n     * records when computing record counts associated to the filter\n     * values (if a groupBy is provided). The idea is that the checked\n     * values within a group should not impact the counts for the other\n     * values in the same group.\n     * @param {Filter} filter\n     * @returns {Object<string, Array[]> | Array[] | null}\n     */\n    _getGroupDomain(filter) {\n        const { fieldName, groups, enableCounters } = filter;\n        const { type: fieldType } = this.searchViewFields[fieldName];\n\n        if (!enableCounters || !groups) {\n            return {\n                many2one: [],\n                many2many: {},\n            }[fieldType];\n        }\n        let groupDomain = null;\n        if (fieldType === \"many2one\") {\n            for (const group of groups.values()) {\n                const valueIds = [];\n                let active = false;\n                for (const [valueId, value] of group.values) {\n                    const { checked } = value;\n                    valueIds.push(valueId);\n                    if (checked) {\n                        active = true;\n                    }\n                }\n                if (active) {\n                    if (groupDomain) {\n                        groupDomain = [[0, \"=\", 1]];\n                        break;\n                    } else {\n                        groupDomain = [[fieldName, \"in\", valueIds]];\n                    }\n                }\n            }\n        } else if (fieldType === \"many2many\") {\n            const checkedValueIds = new Map();\n            groups.forEach(({ values }, groupId) => {\n                values.forEach(({ checked }, valueId) => {\n                    if (checked) {\n                        if (!checkedValueIds.has(groupId)) {\n                            checkedValueIds.set(groupId, []);\n                        }\n                        checkedValueIds.get(groupId).push(valueId);\n                    }\n                });\n            });\n            groupDomain = {};\n            for (const [gId, ids] of checkedValueIds.entries()) {\n                for (const groupId of groups.keys()) {\n                    if (gId !== groupId) {\n                        const key = JSON.stringify(groupId);\n                        if (!groupDomain[key]) {\n                            groupDomain[key] = [];\n                        }\n                        groupDomain[key].push([fieldName, \"in\", ids]);\n                    }\n                }\n            }\n        }\n        return groupDomain;\n    }\n\n    /**\n     * Reconstruct the (active) groups from the query elements.\n     * @returns {Object[]}\n     */\n    _getGroups() {\n        const preGroups = [];\n        for (const queryElem of this.query) {\n            const { searchItemId } = queryElem;\n            const { groupId } = this.searchItems[searchItemId];\n            let preGroup = preGroups.find((group) => group.id === groupId);\n            if (!preGroup) {\n                preGroup = { id: groupId, queryElements: [] };\n                preGroups.push(preGroup);\n            }\n            preGroup.queryElements.push(queryElem);\n        }\n        const groups = [];\n        for (const preGroup of preGroups) {\n            const { queryElements, id } = preGroup;\n            let activeItems = [];\n            for (const queryElem of queryElements) {\n                const { searchItemId } = queryElem;\n                let activeItem = activeItems.find(({ searchItemId: id }) => id === searchItemId);\n                if (\"generatorId\" in queryElem) {\n                    if (!activeItem) {\n                        activeItem = { searchItemId, generatorIds: [] };\n                        activeItems.push(activeItem);\n                    }\n                    activeItem.generatorIds.push(queryElem.generatorId);\n                } else if (\"intervalId\" in queryElem) {\n                    if (!activeItem) {\n                        activeItem = { searchItemId, intervalIds: [] };\n                        activeItems.push(activeItem);\n                    }\n                    activeItem.intervalIds.push(queryElem.intervalId);\n                } else if (\"autocompleteValue\" in queryElem) {\n                    if (!activeItem) {\n                        activeItem = { searchItemId, autocompletValues: [] };\n                        activeItems.push(activeItem);\n                    }\n                    activeItem.autocompletValues.push(queryElem.autocompleteValue);\n                } else {\n                    if (!activeItem) {\n                        activeItem = { searchItemId };\n                        activeItems.push(activeItem);\n                    }\n                }\n            }\n            for (const activeItem of activeItems) {\n                if (\"intervalIds\" in activeItem) {\n                    activeItem.intervalIds.sort((g1, g2) => rankInterval(g1) - rankInterval(g2));\n                }\n            }\n            groups.push({ id, activeItems });\n        }\n        return groups;\n    }\n\n    /**\n     *\n     * @private\n     * @param {Object} [params={}]\n     * @returns {{ preFavorite: Object, irFilter: Object }}\n     */\n    _getIrFilterDescription(params = {}) {\n        const { description, isDefault, isShared } = params;\n        const fns = this.env.__getContext__.callbacks;\n        const localContext = Object.assign({}, ...fns.map((fn) => fn()));\n        const context = makeContext([this._getContext(), localContext]);\n        const userContext = this.userService.context;\n        for (const key in context) {\n            if (key in userContext || /^search(panel)?_default_/.test(key)) {\n                // clean search defaults and user context keys\n                delete context[key];\n            }\n        }\n        const domain = this._getDomain({ raw: true, withGlobal: false }).toString();\n        const groupBys = this._getGroupBy();\n        const comparison = this.getFullComparison();\n        const orderBy = this._getOrderBy();\n        const userId = isShared ? false : this.userService.userId;\n\n        const preFavorite = {\n            description,\n            isDefault,\n            domain,\n            context,\n            groupBys,\n            orderBy,\n            userId,\n        };\n        const irFilter = {\n            name: description,\n            action_id: this.env.config.actionId,\n            model_id: this.resModel,\n            domain,\n            is_default: isDefault,\n            sort: JSON.stringify(orderBy.map((o) => `${o.name}${o.asc === false ? \" desc\" : \"\"}`)),\n            user_id: userId,\n            context: { group_by: groupBys, ...context },\n        };\n\n        if (comparison) {\n            preFavorite.comparison = comparison;\n            irFilter.context.comparison = comparison;\n        }\n\n        return { preFavorite, irFilter };\n    }\n\n    /**\n     * @returns {string[]}\n     */\n    _getOrderBy() {\n        const groups = this._getGroups();\n        let orderBy = [];\n        for (const group of groups) {\n            for (const activeItem of group.activeItems) {\n                const { searchItemId } = activeItem;\n                const searchItem = this.searchItems[searchItemId];\n                if (searchItem.type === \"favorite\") {\n                    orderBy.push(...searchItem.orderBy);\n                }\n            }\n        }\n        orderBy = orderBy.length ? orderBy : this.globalOrderBy;\n        return typeof orderBy === \"string\" ? [orderBy] : orderBy;\n    }\n\n    /**\n     * Return the context of the provided (active) filter.\n     */\n    _getSearchItemContext(activeItem) {\n        const { searchItemId } = activeItem;\n        const searchItem = this.searchItems[searchItemId];\n        switch (searchItem.type) {\n            case \"field\": {\n                // for <field> nodes, a dynamic context (like context=\"{'field1': self}\")\n                // should set {'field1': [value1, value2]} in the context\n                let context = {};\n                if (searchItem.context) {\n                    try {\n                        const self = activeItem.autocompletValues.map(\n                            (autocompleValue) => autocompleValue.value\n                        );\n                        context = evaluateExpr(searchItem.context, { self });\n                        if (typeof context !== \"object\") {\n                            throw Error();\n                        }\n                    } catch (error) {\n                        throw new Error(\n                            `${this.env._t(\"Failed to evaluate the context\")} \"${\n                                searchItem.context\n                            }\".\\n${error.message}`\n                        );\n                    }\n                }\n                // the following code aims to remodel this:\n                // https://github.com/odoo/odoo/blob/12.0/addons/web/static/src/js/views/search/search_inputs.js#L498\n                // this is required for the helpdesk tour to pass\n                // this seems weird to only do that for m2o fields, but a test fails if\n                // we do it for other fields (my guess being that the test should simply\n                // be adapted)\n                if (searchItem.isDefault && searchItem.fieldType === \"many2one\") {\n                    context[`default_${searchItem.fieldName}`] =\n                        searchItem.defaultAutocompleteValue.value;\n                }\n                return context;\n            }\n            case \"favorite\":\n            case \"filter\": {\n                //Return a deep copy of the filter/favorite to avoid the view to modify the context\n                return makeContext([searchItem.context && deepCopy(searchItem.context)]);\n            }\n            default: {\n                return null;\n            }\n        }\n    }\n\n    /**\n     * Return the domain of the provided filter.\n     */\n    _getSearchItemDomain(activeItem) {\n        const { searchItemId } = activeItem;\n        const searchItem = this.searchItems[searchItemId];\n        switch (searchItem.type) {\n            case \"field\": {\n                return this._getFieldDomain(searchItem, activeItem.autocompletValues);\n            }\n            case \"dateFilter\": {\n                const { dateFilterId } = this._getActiveComparison() || {};\n                if (this.searchMenuTypes.has(\"comparison\") && dateFilterId === searchItemId) {\n                    return new Domain([]);\n                }\n                return this._getDateFilterDomain(searchItem, activeItem.generatorIds);\n            }\n            case \"filter\":\n            case \"favorite\": {\n                return searchItem.domain;\n            }\n            default: {\n                return null;\n            }\n        }\n    }\n\n    _getSearchItemGroupBys(activeItem) {\n        const { searchItemId } = activeItem;\n        const searchItem = this.searchItems[searchItemId];\n        switch (searchItem.type) {\n            case \"dateGroupBy\": {\n                const { fieldName } = searchItem;\n                return activeItem.intervalIds.map((intervalId) => `${fieldName}:${intervalId}`);\n            }\n            case \"groupBy\": {\n                return [searchItem.fieldName];\n            }\n            case \"favorite\": {\n                return searchItem.groupBys;\n            }\n            default: {\n                return null;\n            }\n        }\n    }\n\n    /**\n     * Starting from a date filter id, returns the array of option ids currently selected\n     * for the corresponding date filter.\n     */\n    _getSelectedGeneratorIds(dateFilterId) {\n        const selectedOptionIds = [];\n        for (const queryElem of this.query) {\n            if (queryElem.searchItemId === dateFilterId && \"generatorId\" in queryElem) {\n                selectedOptionIds.push(queryElem.generatorId);\n            }\n        }\n        return selectedOptionIds;\n    }\n\n    /**\n     * @returns {Domain}\n     */\n    _getSearchPanelDomain() {\n        return Domain.and([this._getCategoryDomain(), this._getFilterDomain()]);\n    }\n\n    /**\n     * @param {Object} state\n     */\n    _importState(state) {\n        execute(arraytoMap, state, this);\n    }\n\n    /**\n     * @param {Object} irFilter\n     */\n    _irFilterToFavorite(irFilter) {\n        let userId = false;\n        if (Array.isArray(irFilter.user_id)) {\n            userId = irFilter.user_id[0];\n        }\n        const groupNumber = userId ? FAVORITE_PRIVATE_GROUP : FAVORITE_SHARED_GROUP;\n        const context = evaluateExpr(irFilter.context, this.userService.context);\n        let groupBys = [];\n        if (context.group_by) {\n            groupBys = context.group_by;\n            delete context.group_by;\n        }\n        let comparison;\n        if (context.comparison) {\n            comparison = context.comparison;\n            if (typeof comparison.range === \"string\") {\n                // legacy case\n                comparison.range = new Domain(comparison.range).toList();\n            }\n            if (typeof comparison.comparisonRange === \"string\") {\n                // legacy case\n                comparison.comparisonRange = new Domain(comparison.comparisonRange).toList();\n            }\n            delete context.comparison;\n        }\n        let sort;\n        try {\n            sort = JSON.parse(irFilter.sort);\n        } catch (err) {\n            if (err instanceof SyntaxError) {\n                sort = [];\n            } else {\n                throw err;\n            }\n        }\n        const orderBy = sort.map((order) => {\n            let fieldName;\n            let asc;\n            const sqlNotation = order.split(\" \");\n            if (sqlNotation.length > 1) {\n                // regex: \\fieldName (asc|desc)?\\\n                fieldName = sqlNotation[0];\n                asc = sqlNotation[1] === \"asc\";\n            } else {\n                // legacy notation -- regex: \\-?fieldName\\\n                fieldName = order[0] === \"-\" ? order.slice(1) : order;\n                asc = order[0] === \"-\" ? false : true;\n            }\n            return {\n                asc: asc,\n                name: fieldName,\n            };\n        });\n        const favorite = {\n            context,\n            description: irFilter.name,\n            domain: irFilter.domain,\n            groupBys,\n            groupNumber,\n            orderBy,\n            removable: true,\n            serverSideId: irFilter.id,\n            type: \"favorite\",\n            userId,\n        };\n        if (irFilter.is_default) {\n            favorite.isDefault = irFilter.is_default;\n        }\n        if (comparison) {\n            favorite.comparison = comparison;\n        }\n        return favorite;\n    }\n\n    async _notify() {\n        if (this.blockNotification) {\n            return;\n        }\n\n        this._reset();\n\n        await this._reloadSections();\n\n        this.trigger(\"update\");\n    }\n\n    /**\n     * Updates the search domain and reloads sections if:\n     * - the current search domain is different from the previous, or...\n     * - a `shouldReload` flag has been set to true on the searchPanelInfo.\n     * The latter means that the search domain has been modified while the\n     * search panel was not displayed (and thus not reloaded) and the reload\n     * should occur as soon as the search panel is visible again.\n     * @private\n     * @returns {Promise<void>}\n     */\n    async _reloadSections() {\n        this.blockNotification = true;\n\n        // Check whether the search domain changed\n        const searchDomain = this._getDomain({ withSearchPanel: false });\n        const searchDomainChanged =\n            this.searchPanelInfo.shouldReload ||\n            JSON.stringify(this.searchDomain) !== JSON.stringify(searchDomain);\n        this.searchDomain = searchDomain;\n\n        // Check whether categories/filters will force a reload of the sections\n        const toFetch = (section) =>\n            section.enableCounters || (searchDomainChanged && !section.expand);\n        const categoriesToFetch = this.categories.filter(toFetch);\n        const filtersToFetch = this.filters.filter(toFetch);\n\n        if (searchDomainChanged || Boolean(categoriesToFetch.length + filtersToFetch.length)) {\n            if (this.display.searchPanel) {\n                this.sectionsPromise = this._fetchSections(categoriesToFetch, filtersToFetch);\n                if (this._shouldWaitForData(searchDomainChanged)) {\n                    await this.sectionsPromise;\n                }\n            }\n            // If no current search panel: will try to reload on next model update\n            this.searchPanelInfo.shouldReload = !this.display.searchPanel;\n        }\n\n        this.blockNotification = false;\n    }\n\n    _reset() {\n        delete this._comparison;\n        this._context = null;\n        this._domain = null;\n        this._groupBy = null;\n        this._orderBy = null;\n    }\n\n    /**\n     * Returns whether the query informations should be considered as ready\n     * before or after having (re-)fetched the sections data.\n     * @param {boolean} searchDomainChanged\n     * @returns {boolean}\n     */\n    _shouldWaitForData(searchDomainChanged) {\n        if (this.categories.length && this.filters.some((filter) => filter.domain !== \"[]\")) {\n            // Selected category value might affect the filter values\n            return true;\n        }\n        if (!this.searchDomain.length) {\n            // No search domain -> no need to check for expand\n            return false;\n        }\n        return [...this.sections.values()].some(\n            (section) => !section.expand && searchDomainChanged\n        );\n    }\n\n    /**\n     * Legacy compatibility: the imported state of a legacy search panel model\n     * extension doesn't include the arch information, i.e. the class name and\n     * view types. We have to extract those if they are not given.\n     * @param {Object} searchViewDescription\n     */\n    __legacyParseSearchPanelArchAnyway(searchViewDescription) {\n        if (this.searchPanelInfo) {\n            return;\n        }\n\n        const parser = new SearchArchParser(searchViewDescription);\n        const { searchPanelInfo } = parser.parse();\n\n        this.searchPanelInfo = { ...searchPanelInfo, shouldReload: false };\n    }\n}\n", "/** @odoo-module **/\n\nconst { Component, hooks } = owl;\nconst { useState } = hooks;\n\n/**\n * Search panel\n *\n * Represent an extension of the search interface located on the left side of\n * the view. It is divided in sections defined in a \"<searchpanel>\" node located\n * inside of a \"<search>\" arch. Each section is represented by a list of different\n * values (categories or ungrouped filters) or groups of values (grouped filters).\n * Its state is directly affected by its model (@see SearchModel).\n */\nexport class SearchPanel extends Component {\n    setup() {\n        this.state = useState({\n            active: {},\n            expanded: {},\n        });\n        this.scrollTop = 0;\n        this.hasImportedState = false;\n\n        this.importState(this.props.importedState);\n    }\n\n    async willStart() {\n        await this.env.searchModel.sectionsPromise;\n        this.expandDefaultValue();\n        this.updateActiveValues();\n    }\n\n    mounted() {\n        this.updateGroupHeadersChecked();\n        if (this.hasImportedState) {\n            this.el.scroll({ top: this.scrollTop });\n        }\n    }\n\n    async willUpdateProps() {\n        await this.env.searchModel.sectionsPromise;\n        this.updateActiveValues();\n    }\n\n    //---------------------------------------------------------------------\n    // Getters\n    //---------------------------------------------------------------------\n\n    get sections() {\n        return this.env.searchModel.getSections((s) => !s.empty);\n    }\n\n    //---------------------------------------------------------------------\n    // Public\n    //---------------------------------------------------------------------\n\n    exportState() {\n        const exported = {\n            expanded: this.state.expanded,\n            scrollTop: this.el.scrollTop,\n        };\n        return JSON.stringify(exported);\n    }\n\n    importState(stringifiedState) {\n        this.hasImportedState = Boolean(stringifiedState);\n        if (this.hasImportedState) {\n            const state = JSON.parse(stringifiedState);\n            this.state.expanded = state.expanded;\n            this.scrollTop = state.scrollTop;\n        }\n    }\n\n    //---------------------------------------------------------------------\n    // Protected\n    //---------------------------------------------------------------------\n\n    /**\n     * Expands category values holding the default value of a category.\n     */\n    expandDefaultValue() {\n        if (this.hasImportedState) {\n            return;\n        }\n        const categories = this.env.searchModel.getSections((s) => s.type === \"category\");\n        for (const category of categories) {\n            this.state.expanded[category.id] = {};\n            if (category.activeValueId) {\n                const ancestorIds = this.getAncestorValueIds(category, category.activeValueId);\n                for (const ancestorId of ancestorIds) {\n                    this.state.expanded[category.id][ancestorId] = true;\n                }\n            }\n        }\n    }\n\n    /**\n     * @param {Object} category\n     * @param {number} categoryValueId\n     * @returns {number[]} list of ids of the ancestors of the given value in\n     *   the given category.\n     */\n    getAncestorValueIds(category, categoryValueId) {\n        const { parentId } = category.values.get(categoryValueId);\n        return parentId ? [...this.getAncestorValueIds(category, parentId), parentId] : [];\n    }\n\n    /**\n     * Prevent unnecessary calls to the model by ensuring a different category\n     * is clicked.\n     * @param {Object} category\n     * @param {Object} value\n     */\n    async toggleCategory(category, value) {\n        if (value.childrenIds.length) {\n            const categoryState = this.state.expanded[category.id];\n            if (categoryState[value.id] && category.activeValueId === value.id) {\n                delete categoryState[value.id];\n            } else {\n                categoryState[value.id] = true;\n            }\n        }\n        if (category.activeValueId !== value.id) {\n            this.state.active[category.id] = value.id;\n            this.env.searchModel.toggleCategoryValue(category.id, value.id);\n        }\n    }\n\n    /**\n     * @param {number} filterId\n     * @param {{ values: Map<Object> }} group\n     */\n    toggleFilterGroup(filterId, { values }) {\n        const valueIds = [];\n        const checked = [...values.values()].every(\n            (value) => this.state.active[filterId][value.id]\n        );\n        values.forEach(({ id }) => {\n            valueIds.push(id);\n            this.state.active[filterId][id] = !checked;\n        });\n        this.env.searchModel.toggleFilterValues(filterId, valueIds, !checked);\n    }\n\n    /**\n     * @param {number} filterId\n     * @param {Object} [group]\n     * @param {number} valueId\n     * @param {MouseEvent} ev\n     */\n    toggleFilterValue(filterId, valueId, { currentTarget }) {\n        this.state.active[filterId][valueId] = currentTarget.checked;\n        this.updateGroupHeadersChecked();\n        this.env.searchModel.toggleFilterValues(filterId, [valueId]);\n    }\n\n    updateActiveValues() {\n        for (const section of this.sections) {\n            if (section.type === \"category\") {\n                this.state.active[section.id] = section.activeValueId;\n            } else {\n                this.state.active[section.id] = {};\n                if (section.groups) {\n                    for (const group of section.groups.values()) {\n                        for (const value of group.values.values()) {\n                            this.state.active[section.id][value.id] = value.checked;\n                        }\n                    }\n                }\n                if (section && section.values) {\n                    for (const value of section.values.values()) {\n                        this.state.active[section.id][value.id] = value.checked;\n                    }\n                }\n            }\n        }\n    }\n\n    /**\n     * Updates the \"checked\" or \"indeterminate\" state of each of the group\n     * headers according to the state of their values.\n     */\n    updateGroupHeadersChecked() {\n        const groups = this.el.querySelectorAll(\":scope .o_search_panel_filter_group\");\n        for (const group of groups) {\n            const header = group.querySelector(\":scope .o_search_panel_group_header input\");\n            const vals = [...group.querySelectorAll(\":scope .o_search_panel_filter_value input\")];\n            header.checked = false;\n            header.indeterminate = false;\n            if (vals.every((v) => v.checked)) {\n                header.checked = true;\n            } else if (vals.some((v) => v.checked)) {\n                header.indeterminate = true;\n            }\n        }\n    }\n}\n\nSearchPanel.props = {\n    importedState: { type: String, optional: true },\n};\nSearchPanel.subTemplates = {\n    category: \"web.SearchPanel.Category\",\n    filtersGroup: \"web.SearchPanel.FiltersGroup\",\n};\nSearchPanel.template = \"web.SearchPanel\";\n", "/** @odoo-module **/\n\nimport { _lt } from \"@web/core/l10n/translation\";\nimport { Domain } from \"@web/core/domain\";\nimport { serializeDate, serializeDateTime } from \"@web/core/l10n/dates\";\nimport { localization } from \"@web/core/l10n/localization\";\n\nexport const DEFAULT_PERIOD = \"this_month\";\n\nexport const QUARTERS = {\n    1: { description: _lt(\"Q1\"), coveredMonths: [1, 2, 3] },\n    2: { description: _lt(\"Q2\"), coveredMonths: [4, 5, 6] },\n    3: { description: _lt(\"Q3\"), coveredMonths: [7, 8, 9] },\n    4: { description: _lt(\"Q4\"), coveredMonths: [10, 11, 12] },\n};\n\nexport const MONTH_OPTIONS = {\n    this_month: {\n        id: \"this_month\",\n        groupNumber: 1,\n        format: \"MMMM\",\n        plusParam: {},\n        granularity: \"month\",\n    },\n    last_month: {\n        id: \"last_month\",\n        groupNumber: 1,\n        format: \"MMMM\",\n        plusParam: { months: -1 },\n        granularity: \"month\",\n    },\n    antepenultimate_month: {\n        id: \"antepenultimate_month\",\n        groupNumber: 1,\n        format: \"MMMM\",\n        plusParam: { months: -2 },\n        granularity: \"month\",\n    },\n};\n\nexport const QUARTER_OPTIONS = {\n    fourth_quarter: {\n        id: \"fourth_quarter\",\n        groupNumber: 1,\n        description: QUARTERS[4].description,\n        setParam: { quarter: 4 },\n        granularity: \"quarter\",\n    },\n    third_quarter: {\n        id: \"third_quarter\",\n        groupNumber: 1,\n        description: QUARTERS[3].description,\n        setParam: { quarter: 3 },\n        granularity: \"quarter\",\n    },\n    second_quarter: {\n        id: \"second_quarter\",\n        groupNumber: 1,\n        description: QUARTERS[2].description,\n        setParam: { quarter: 2 },\n        granularity: \"quarter\",\n    },\n    first_quarter: {\n        id: \"first_quarter\",\n        groupNumber: 1,\n        description: QUARTERS[1].description,\n        setParam: { quarter: 1 },\n        granularity: \"quarter\",\n    },\n};\n\nexport const YEAR_OPTIONS = {\n    this_year: {\n        id: \"this_year\",\n        groupNumber: 2,\n        format: \"yyyy\",\n        plusParam: {},\n        granularity: \"year\",\n    },\n    last_year: {\n        id: \"last_year\",\n        groupNumber: 2,\n        format: \"yyyy\",\n        plusParam: { years: -1 },\n        granularity: \"year\",\n    },\n    antepenultimate_year: {\n        id: \"antepenultimate_year\",\n        groupNumber: 2,\n        format: \"yyyy\",\n        plusParam: { years: -2 },\n        granularity: \"year\",\n    },\n};\n\nexport const PERIOD_OPTIONS = Object.assign({}, MONTH_OPTIONS, QUARTER_OPTIONS, YEAR_OPTIONS);\n\nexport const DEFAULT_INTERVAL = \"month\";\n\nexport const INTERVAL_OPTIONS = {\n    year: { description: _lt(\"Year\"), id: \"year\", groupNumber: 1 },\n    quarter: { description: _lt(\"Quarter\"), id: \"quarter\", groupNumber: 1 },\n    month: { description: _lt(\"Month\"), id: \"month\", groupNumber: 1 },\n    week: { description: _lt(\"Week\"), id: \"week\", groupNumber: 1 },\n    day: { description: _lt(\"Day\"), id: \"day\", groupNumber: 1 },\n};\n\n// ComparisonMenu parameters\nexport const COMPARISON_OPTIONS = {\n    previous_period: {\n        description: _lt(\"Previous Period\"),\n        id: \"previous_period\",\n    },\n    previous_year: {\n        description: _lt(\"Previous Year\"),\n        id: \"previous_year\",\n        plusParam: { years: -1 },\n    },\n};\n\nexport const PER_YEAR = {\n    year: 1,\n    quarter: 4,\n    month: 12,\n};\n\n//-------------------------------------------------------------------------\n// Functions\n//-------------------------------------------------------------------------\n\n/**\n * Constructs the string representation of a domain and its description. The\n * domain is of the form:\n *      ['|', d_1 ,..., '|', d_n]\n * where d_i is a time range of the form\n *      ['&', [fieldName, >=, leftBound_i], [fieldName, <=, rightBound_i]]\n * where leftBound_i and rightBound_i are date or datetime computed accordingly\n * to the given options and reference moment.\n */\nexport function constructDateDomain(\n    referenceMoment,\n    fieldName,\n    fieldType,\n    selectedOptionIds,\n    comparisonOptionId\n) {\n    let plusParam;\n    let selectedOptions;\n    if (comparisonOptionId) {\n        [plusParam, selectedOptions] = getComparisonParams(\n            referenceMoment,\n            selectedOptionIds,\n            comparisonOptionId\n        );\n    } else {\n        selectedOptions = getSelectedOptions(referenceMoment, selectedOptionIds);\n    }\n    const yearOptions = selectedOptions.year;\n    const otherOptions = [...(selectedOptions.quarter || []), ...(selectedOptions.month || [])];\n    sortPeriodOptions(yearOptions);\n    sortPeriodOptions(otherOptions);\n    const ranges = [];\n    for (const yearOption of yearOptions) {\n        const constructRangeParams = {\n            referenceMoment,\n            fieldName,\n            fieldType,\n            plusParam,\n        };\n        if (otherOptions.length) {\n            for (const option of otherOptions) {\n                const setParam = Object.assign(\n                    {},\n                    yearOption.setParam,\n                    option ? option.setParam : {}\n                );\n                const { granularity } = option;\n                const range = constructDateRange(\n                    Object.assign({ granularity, setParam }, constructRangeParams)\n                );\n                ranges.push(range);\n            }\n        } else {\n            const { granularity, setParam } = yearOption;\n            const range = constructDateRange(\n                Object.assign({ granularity, setParam }, constructRangeParams)\n            );\n            ranges.push(range);\n        }\n    }\n    const domain = Domain.combine(\n        ranges.map((range) => range.domain),\n        \"OR\"\n    );\n    const description = ranges.map((range) => range.description).join(\"/\");\n    return { domain, description };\n}\n\n/**\n * Constructs the string representation of a domain and its description. The\n * domain is a time range of the form:\n *      ['&', [fieldName, >=, leftBound],[fieldName, <=, rightBound]]\n * where leftBound and rightBound are some date or datetime determined by setParam,\n * plusParam, granularity and the reference moment.\n */\nexport function constructDateRange(params) {\n    const { referenceMoment, fieldName, fieldType, granularity, setParam, plusParam } = params;\n    if (\"quarter\" in setParam) {\n        // Luxon does not consider quarter key in setParam (like moment did)\n        setParam.month = QUARTERS[setParam.quarter].coveredMonths[0];\n        delete setParam.quarter;\n    }\n    const date = referenceMoment.set(setParam).plus(plusParam || {});\n    // compute domain\n    const leftDate = date.startOf(granularity);\n    const rightDate = date.endOf(granularity);\n    let leftBound;\n    let rightBound;\n    if (fieldType === \"date\") {\n        leftBound = serializeDate(leftDate);\n        rightBound = serializeDate(rightDate);\n    } else {\n        leftBound = serializeDateTime(leftDate);\n        rightBound = serializeDateTime(rightDate);\n    }\n    const domain = new Domain([\"&\", [fieldName, \">=\", leftBound], [fieldName, \"<=\", rightBound]]);\n    // compute description\n    const descriptions = [date.toFormat(\"yyyy\")];\n    const method = localization.direction === \"rtl\" ? \"push\" : \"unshift\";\n    if (granularity === \"month\") {\n        descriptions[method](date.toFormat(\"MMMM\"));\n    } else if (granularity === \"quarter\") {\n        const quarter = date.quarter;\n        descriptions[method](QUARTERS[quarter].description.toString());\n    }\n    const description = descriptions.join(\" \");\n    return { domain, description };\n}\n\n/**\n * Returns a version of the options in COMPARISON_OPTIONS with translated descriptions.\n * @see getOptionsWithDescriptions\n */\nexport function getComparisonOptions() {\n    return getOptionsWithDescriptions(COMPARISON_OPTIONS);\n}\n\n/**\n * Returns the params plusParam and selectedOptions necessary for the computation\n * of a comparison domain.\n */\nexport function getComparisonParams(referenceMoment, selectedOptionIds, comparisonOptionId) {\n    const comparisonOption = COMPARISON_OPTIONS[comparisonOptionId];\n    const selectedOptions = getSelectedOptions(referenceMoment, selectedOptionIds);\n    if (comparisonOption.plusParam) {\n        return [comparisonOption.plusParam, selectedOptions];\n    }\n    const plusParam = {};\n    let globalGranularity = \"year\";\n    if (selectedOptions.month) {\n        globalGranularity = \"month\";\n    } else if (selectedOptions.quarter) {\n        globalGranularity = \"quarter\";\n    }\n    const granularityFactor = PER_YEAR[globalGranularity];\n    const years = selectedOptions.year.map((o) => o.setParam.year);\n    const yearMin = Math.min(...years);\n    const yearMax = Math.max(...years);\n    let optionMin = 0;\n    let optionMax = 0;\n    if (selectedOptions.quarter) {\n        const quarters = selectedOptions.quarter.map((o) => o.setParam.quarter);\n        if (globalGranularity === \"month\") {\n            delete selectedOptions.quarter;\n            for (const quarter of quarters) {\n                for (const month of QUARTERS[quarter].coveredMonths) {\n                    const monthOption = selectedOptions.month.find(\n                        (o) => o.setParam.month === month\n                    );\n                    if (!monthOption) {\n                        selectedOptions.month.push({\n                            setParam: { month },\n                            granularity: \"month\",\n                        });\n                    }\n                }\n            }\n        } else {\n            optionMin = Math.min(...quarters);\n            optionMax = Math.max(...quarters);\n        }\n    }\n    if (selectedOptions.month) {\n        const months = selectedOptions.month.map((o) => o.setParam.month);\n        optionMin = Math.min(...months);\n        optionMax = Math.max(...months);\n    }\n    const num = -1 + granularityFactor * (yearMin - yearMax) + optionMin - optionMax;\n    const key =\n        globalGranularity === \"year\"\n            ? \"years\"\n            : globalGranularity === \"month\"\n            ? \"months\"\n            : \"quarters\";\n    plusParam[key] = num;\n    return [plusParam, selectedOptions];\n}\n\n/**\n * Returns a version of the options in INTERVAL_OPTIONS with translated descriptions.\n * @see getOptionsWithDescriptions\n */\nexport function getIntervalOptions() {\n    return getOptionsWithDescriptions(INTERVAL_OPTIONS);\n}\n\n/**\n * Returns a version of the options in PERIOD_OPTIONS with translated descriptions\n * and a key defautlYearId used in the control panel model when toggling a period option.\n */\nexport function getPeriodOptions(referenceMoment) {\n    // adapt when solution for moment is found...\n    const options = [];\n    const originalOptions = Object.values(PERIOD_OPTIONS);\n    for (const option of originalOptions) {\n        const { id, groupNumber } = option;\n        let description;\n        let defaultYear;\n        switch (option.granularity) {\n            case \"quarter\":\n                description = option.description.toString();\n                defaultYear = referenceMoment.set(option.setParam).year;\n                break;\n            case \"month\":\n            case \"year\":\n                const date = referenceMoment.plus(option.plusParam);\n                description = date.toFormat(option.format);\n                defaultYear = date.year;\n                break;\n        }\n        const setParam = getSetParam(option, referenceMoment);\n        options.push({ id, groupNumber, description, defaultYear, setParam });\n    }\n    const periodOptions = [];\n    for (const option of options) {\n        const { id, groupNumber, description, defaultYear } = option;\n        const yearOption = options.find((o) => o.setParam && o.setParam.year === defaultYear);\n        periodOptions.push({\n            id,\n            groupNumber,\n            description,\n            defaultYearId: yearOption.id,\n        });\n    }\n    return periodOptions;\n}\n\n/**\n * Returns a version of the options in OPTIONS with translated descriptions (if any).\n * @param {Object{}} OPTIONS\n * @returns {Object[]}\n */\nexport function getOptionsWithDescriptions(OPTIONS) {\n    const options = [];\n    for (const option of Object.values(OPTIONS)) {\n        options.push(Object.assign({}, option, { description: option.description.toString() }));\n    }\n    return options;\n}\n\n/**\n * Returns a partial version of the period options whose ids are in selectedOptionIds\n * partitioned by granularity.\n */\nexport function getSelectedOptions(referenceMoment, selectedOptionIds) {\n    const selectedOptions = { year: [] };\n    for (const optionId of selectedOptionIds) {\n        const option = PERIOD_OPTIONS[optionId];\n        const setParam = getSetParam(option, referenceMoment);\n        const granularity = option.granularity;\n        if (!selectedOptions[granularity]) {\n            selectedOptions[granularity] = [];\n        }\n        selectedOptions[granularity].push({ granularity, setParam });\n    }\n    return selectedOptions;\n}\n\n/**\n * Returns the setParam object associated with the given periodOption and\n * referenceMoment.\n */\nexport function getSetParam(periodOption, referenceMoment) {\n    if (periodOption.granularity === \"quarter\") {\n        return periodOption.setParam;\n    }\n    const date = referenceMoment.plus(periodOption.plusParam);\n    const granularity = periodOption.granularity;\n    const setParam = { [granularity]: date[granularity] };\n    return setParam;\n}\n\nexport function rankInterval(intervalOptionId) {\n    return Object.keys(INTERVAL_OPTIONS).indexOf(intervalOptionId);\n}\n\n/**\n * Sorts in place an array of 'period' options.\n */\nexport function sortPeriodOptions(options) {\n    options.sort((o1, o2) => {\n        var _a, _b;\n        const granularity1 = o1.granularity;\n        const granularity2 = o2.granularity;\n        if (granularity1 === granularity2) {\n            return (\n                ((_a = o1.setParam[granularity1]) !== null && _a !== void 0 ? _a : 0) -\n                ((_b = o2.setParam[granularity1]) !== null && _b !== void 0 ? _b : 0)\n            );\n        }\n        return granularity1 < granularity2 ? -1 : 1;\n    });\n}\n\n/**\n * Checks if a year id is among the given array of period option ids.\n */\nexport function yearSelected(selectedOptionIds) {\n    return selectedOptionIds.some((optionId) => Object.keys(YEAR_OPTIONS).includes(optionId));\n}\n", "/** @odoo-module **/\n\nimport { DEFAULT_INTERVAL, INTERVAL_OPTIONS } from \"./dates\";\n\n/**\n * @param {string} descr\n */\nfunction errorMsg(descr) {\n    return `Invalid groupBy description: ${descr}`;\n}\n\n/**\n * @param {string} descr\n * @param {Object} fields\n * @returns {Object}\n */\nexport function getGroupBy(descr, fields) {\n    let fieldName;\n    let interval;\n    let spec;\n    [fieldName, interval] = descr.split(\":\");\n    if (!fieldName) {\n        throw Error();\n    }\n    if (fields) {\n        if (!fields[fieldName]) {\n            throw Error(errorMsg(descr));\n        }\n        const fieldType = fields[fieldName].type;\n        if ([\"date\", \"datetime\"].includes(fieldType)) {\n            if (!interval) {\n                interval = DEFAULT_INTERVAL;\n            } else if (!Object.keys(INTERVAL_OPTIONS).includes(interval)) {\n                throw Error(errorMsg(descr));\n            }\n            spec = `${fieldName}:${interval}`;\n        } else if (interval) {\n            throw Error(errorMsg(descr));\n        } else {\n            spec = fieldName;\n            interval = null;\n        }\n    } else {\n        if (interval) {\n            if (!Object.keys(INTERVAL_OPTIONS).includes(interval)) {\n                throw Error(errorMsg(descr));\n            }\n            spec = `${fieldName}:${interval}`;\n        } else {\n            spec = fieldName;\n            interval = null;\n        }\n    }\n    return {\n        fieldName,\n        interval,\n        spec,\n        toJSON() {\n            return spec;\n        },\n    };\n}\n", "/** @odoo-module **/\n\nexport const FACET_ICONS = {\n    filter: \"fa fa-filter\",\n    groupBy: \"fa fa-bars\",\n    favorite: \"fa fa-star\",\n    comparison: \"fa fa-adjust\",\n};\n\nexport const GROUPABLE_TYPES = [\n    \"boolean\",\n    \"char\",\n    \"date\",\n    \"datetime\",\n    \"integer\",\n    \"many2one\",\n    \"selection\",\n];\n", "/** @odoo-module **/\n\nimport { useBus, useService } from \"@web/core/utils/hooks\";\nimport { SearchModel } from \"@web/search/search_model\";\nimport { CallbackRecorder, useSetupAction } from \"@web/webclient/actions/action_hook\";\n\nconst { Component, hooks } = owl;\nconst { useSubEnv } = hooks;\n\nexport const SEARCH_KEYS = [\"comparison\", \"context\", \"domain\", \"groupBy\", \"orderBy\"];\nconst OTHER_SEARCH_KEYS = [\"irFilters\", \"searchViewArch\", \"searchViewFields\", \"searchViewId\"];\n\nexport class WithSearch extends Component {\n    setup() {\n        this.Component = this.props.Component;\n\n        if (!this.env.__getContext__) {\n            useSubEnv({ __getContext__: new CallbackRecorder() });\n        }\n\n        const SearchModelClass = this.Component.SearchModel || SearchModel;\n        this.env.searchModel = new SearchModelClass(this.env, {\n            user: useService(\"user\"),\n            orm: useService(\"orm\"),\n            view: useService(\"view\"),\n        });\n\n        useBus(this.env.searchModel, \"update\", this.render);\n        useSetupAction({\n            getGlobalState: () => {\n                return {\n                    searchModel: JSON.stringify(this.env.searchModel.exportState()),\n                };\n            },\n        });\n    }\n\n    async willStart() {\n        const config = { ...this.props };\n        if (config.globalState && config.globalState.searchModel) {\n            config.state = JSON.parse(config.globalState.searchModel);\n            delete config.globalState;\n        }\n        await this.env.searchModel.load(config);\n    }\n\n    async willUpdateProps(nextProps) {\n        const config = {};\n        for (const key of SEARCH_KEYS) {\n            if (nextProps[key] !== undefined) {\n                config[key] = nextProps[key];\n            }\n        }\n        await this.env.searchModel.reload(config);\n    }\n\n    //-------------------------------------------------------------------------\n    // Getters\n    //-------------------------------------------------------------------------\n\n    get componentProps() {\n        const componentProps = { ...this.props.componentProps };\n        for (const key of SEARCH_KEYS) {\n            componentProps[key] = this.env.searchModel[key];\n        }\n        componentProps.info = componentProps.info || {};\n        for (const key of OTHER_SEARCH_KEYS) {\n            componentProps.info[key] = this.env.searchModel[key];\n        }\n        return componentProps;\n    }\n}\n\nWithSearch.defaultProps = {\n    componentProps: {},\n};\nWithSearch.props = {\n    Component: Function,\n    componentProps: { type: Object, optional: true },\n\n    resModel: String,\n\n    globalState: { type: Object, optional: true },\n\n    display: { type: Object, optional: true },\n\n    // search query elements\n    comparison: { validate: () => true, optional: true }, // fix problem with validation with type: [Object, null]\n    // Issue OWL: https://github.com/odoo/owl/issues/910\n    context: { type: Object, optional: true },\n    domain: { type: Array, element: [String, Array], optional: true },\n    groupBy: { type: Array, element: String, optional: true },\n    orderBy: { type: Array, element: String, optional: true },\n\n    // search view description\n    searchViewArch: { type: String, optional: true },\n    searchViewFields: { type: Object, optional: true },\n    searchViewId: { type: [Number, false], optional: true },\n\n    irFilters: { type: Array, element: Object, optional: true },\n    loadIrFilters: { type: Boolean, optional: true },\n\n    // extra options\n    activateFavorite: { type: Boolean, optional: true },\n    dynamicFilters: { type: Array, element: Object, optional: true },\n    searchMenuTypes: { type: Array, element: String, optional: true },\n};\nWithSearch.template = \"web.WithSearch\";\n", "/** @odoo-module **/\n\nimport { _lt } from \"@web/core/l10n/translation\";\nimport { Dialog } from \"@web/core/dialog/dialog\";\nimport { editModelDebug } from \"@web/core/debug/debug_utils\";\nimport { registry } from \"@web/core/registry\";\n\nconst { tags } = owl;\n\nconst debugRegistry = registry.category(\"debug\");\n\nclass FieldViewGetDialog extends Dialog {}\nFieldViewGetDialog.props = Object.assign({}, Dialog.props, {\n    arch: { type: String },\n    close: Function,\n});\nFieldViewGetDialog.bodyTemplate = tags.xml`<pre t-esc=\"props.arch\"/>`;\nFieldViewGetDialog.title = _lt(\"Fields View Get\");\n\nfunction viewSeparator() {\n    return {\n        type: \"separator\",\n        sequence: 300,\n    };\n}\n\nfunction fieldsViewGet({ component, env }) {\n    let { arch } = component.props;\n    if (\"viewInfo\" in component.props) {\n        //legacy\n        arch = component.props.viewInfo.arch;\n    }\n    return {\n        type: \"item\",\n        description: env._t(\"Fields View Get\"),\n        callback: () => {\n            env.services.dialog.add(FieldViewGetDialog, { arch });\n        },\n        sequence: 340,\n    };\n}\n\nexport function editView({ accessRights, component, env }) {\n    if (!accessRights.canEditView) {\n        return null;\n    }\n    let { viewId, viewType: type } = component.env.config || {}; // fallback is there for legacy\n    if (\"viewInfo\" in component.props) {\n        // legacy\n        viewId = component.props.viewInfo.view_id;\n        type = component.props.viewInfo.type;\n        type = type === \"tree\" ? \"list\" : type;\n    }\n    const displayName = type[0].toUpperCase() + type.slice(1);\n    const description = env._t(\"Edit View: \") + displayName;\n    return {\n        type: \"item\",\n        description,\n        callback: () => {\n            editModelDebug(env, description, \"ir.ui.view\", viewId);\n        },\n        sequence: 350,\n    };\n}\n\nexport function editSearchView({ accessRights, component, env }) {\n    if (!accessRights.canEditView) {\n        return null;\n    }\n    let { searchViewId } = component.props.info || {}; // fallback is there for legacy\n    if (\"viewParams\" in component.props) {\n        //legacy\n        if (!component.props.viewParams.action.controlPanelFieldsView) {\n            return null;\n        }\n        searchViewId = component.props.viewParams.action.controlPanelFieldsView.view_id;\n    }\n    if (searchViewId === undefined) {\n        return null;\n    }\n    const description = env._t(\"Edit ControlPanelView\");\n    return {\n        type: \"item\",\n        description,\n        callback: () => {\n            editModelDebug(env, description, \"ir.ui.view\", searchViewId);\n        },\n        sequence: 360,\n    };\n}\n\ndebugRegistry\n    .category(\"view\")\n    .add(\"viewSeparator\", viewSeparator)\n    .add(\"fieldsViewGet\", fieldsViewGet)\n    .add(\"editView\", editView)\n    .add(\"editSearchView\", editSearchView);\n", "/** @odoo-module **/\n\nexport const COLORS = [\n    \"#1f77b4\",\n    \"#ff7f0e\",\n    \"#aec7e8\",\n    \"#ffbb78\",\n    \"#2ca02c\",\n    \"#98df8a\",\n    \"#d62728\",\n    \"#ff9896\",\n    \"#9467bd\",\n    \"#c5b0d5\",\n    \"#8c564b\",\n    \"#c49c94\",\n    \"#e377c2\",\n    \"#f7b6d2\",\n    \"#7f7f7f\",\n    \"#c7c7c7\",\n    \"#bcbd22\",\n    \"#dbdb8d\",\n    \"#17becf\",\n    \"#9edae5\",\n];\n\n/**\n * @param {number} index\n * @returns {string}\n */\nexport function getColor(index) {\n    return COLORS[index % COLORS.length];\n}\n\nexport const DEFAULT_BG = \"#d3d3d3\";\n\nexport const BORDER_WHITE = \"rgba(255,255,255,0.6)\";\n\nconst RGB_REGEX = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i;\n\n/**\n * @param {string} hex\n * @param {number} opacity\n * @returns {string}\n */\nexport function hexToRGBA(hex, opacity) {\n    const rgb = RGB_REGEX.exec(hex)\n        .slice(1, 4)\n        .map((n) => parseInt(n, 16))\n        .join(\",\");\n    return `rgba(${rgb},${opacity})`;\n}\n", "/** @odoo-module **/\n\nimport { evaluateExpr } from \"@web/core/py_js/py\";\nimport { GROUPABLE_TYPES } from \"@web/search/utils/misc\";\nimport { XMLParser } from \"@web/core/utils/xml\";\nimport { archParseBoolean } from \"../helpers/utils\";\n\nconst MODES = [\"bar\", \"line\", \"pie\"];\nconst ORDERS = [\"ASC\", \"DESC\", \"asc\", \"desc\", null];\n\nexport class GraphArchParser extends XMLParser {\n    parse(arch, fields = {}) {\n        const archInfo = { fields, fieldAttrs: {}, groupBy: [] };\n        this.visitXML(arch, (node) => {\n            switch (node.tagName) {\n                case \"graph\": {\n                    if (node.hasAttribute(\"disable_linking\")) {\n                        archInfo.disableLinking = archParseBoolean(\n                            node.getAttribute(\"disable_linking\")\n                        );\n                    }\n                    if (node.hasAttribute(\"stacked\")) {\n                        archInfo.stacked = archParseBoolean(node.getAttribute(\"stacked\"));\n                    }\n                    const mode = node.getAttribute(\"type\");\n                    if (mode && MODES.includes(mode)) {\n                        archInfo.mode = mode;\n                    }\n                    const order = node.getAttribute(\"order\");\n                    if (order && ORDERS.includes(order)) {\n                        archInfo.order = order.toUpperCase();\n                    }\n                    const title = node.getAttribute(\"string\");\n                    if (title) {\n                        archInfo.title = title;\n                    }\n                    break;\n                }\n                case \"field\": {\n                    let fieldName = node.getAttribute(\"name\"); // exists (rng validation)\n                    if (fieldName === \"id\") {\n                        break;\n                    }\n                    const string = node.getAttribute(\"string\");\n                    if (string) {\n                        if (!archInfo.fieldAttrs[fieldName]) {\n                            archInfo.fieldAttrs[fieldName] = {};\n                        }\n                        archInfo.fieldAttrs[fieldName].string = string;\n                    }\n                    const isInvisible = Boolean(\n                        evaluateExpr(node.getAttribute(\"invisible\") || \"0\")\n                    );\n                    if (isInvisible) {\n                        if (!archInfo.fieldAttrs[fieldName]) {\n                            archInfo.fieldAttrs[fieldName] = {};\n                        }\n                        archInfo.fieldAttrs[fieldName].isInvisible = true;\n                        break;\n                    }\n                    const isMeasure = node.getAttribute(\"type\") === \"measure\";\n                    if (isMeasure) {\n                        // the last field with type=\"measure\" (if any) will be used as measure else __count\n                        archInfo.measure = fieldName;\n                    } else {\n                        const { type } = archInfo.fields[fieldName]; // exists (rng validation)\n                        if (GROUPABLE_TYPES.includes(type)) {\n                            let groupBy = fieldName;\n                            const interval = node.getAttribute(\"interval\");\n                            if (interval) {\n                                groupBy += `:${interval}`;\n                            }\n                            archInfo.groupBy.push(groupBy);\n                        }\n                    }\n                    break;\n                }\n            }\n        });\n        return archInfo;\n    }\n}\n", "/** @odoo-module **/\n\nimport { sortBy } from \"@web/core/utils/arrays\";\nimport { KeepLast, Race } from \"@web/core/utils/concurrency\";\nimport { rankInterval } from \"@web/search/utils/dates\";\nimport { getGroupBy } from \"@web/search/utils/group_by\";\nimport { GROUPABLE_TYPES } from \"@web/search/utils/misc\";\nimport { Model } from \"@web/views/helpers/model\";\nimport { computeReportMeasures, processMeasure } from \"@web/views/helpers/utils\";\n\nexport const SEP = \" / \";\n\n/**\n * @typedef {import(\"@web/search/search_model\").SearchParams} SearchParams\n */\n\nclass DateClasses {\n    // We view the param \"array\" as a matrix of values and undefined.\n    // An equivalence class is formed of defined values of a column.\n    // So nothing has to do with dates but we only use Dateclasses to manage\n    // identification of dates.\n    /**\n     * @param {(any[])[]} array\n     */\n    constructor(array) {\n        this.__referenceIndex = null;\n        this.__array = array;\n        for (let i = 0; i < this.__array.length; i++) {\n            const arr = this.__array[i];\n            if (arr.length && this.__referenceIndex === null) {\n                this.__referenceIndex = i;\n            }\n        }\n    }\n\n    /**\n     * @param {number} index\n     * @param {any} o\n     * @returns {string}\n     */\n    classLabel(index, o) {\n        return `${this.__array[index].indexOf(o)}`;\n    }\n\n    /**\n     * @param {string} classLabel\n     * @returns {any[]}\n     */\n    classMembers(classLabel) {\n        const classNumber = Number(classLabel);\n        const classMembers = new Set();\n        for (const arr of this.__array) {\n            if (arr[classNumber] !== undefined) {\n                classMembers.add(arr[classNumber]);\n            }\n        }\n        return [...classMembers];\n    }\n\n    /**\n     * @param {string} classLabel\n     * @param {number} [index]\n     * @returns {any}\n     */\n    representative(classLabel, index) {\n        const classNumber = Number(classLabel);\n        const i = index === undefined ? this.__referenceIndex : index;\n        if (i === null) {\n            return null;\n        }\n        return this.__array[i][classNumber];\n    }\n\n    /**\n     * @param {number} index\n     * @returns {number}\n     */\n    arrayLength(index) {\n        return this.__array[index].length;\n    }\n}\n\nexport class GraphModel extends Model {\n    /**\n     * @override\n     */\n    setup(params) {\n        // concurrency management\n        this.keepLast = new KeepLast();\n        this.race = new Race();\n        const _fetchDataPoints = this._fetchDataPoints.bind(this);\n        this._fetchDataPoints = (...args) => {\n            return this.race.add(_fetchDataPoints(...args));\n        };\n\n        this.initialGroupBy = null;\n\n        this.metaData = params;\n        this.data = null;\n        this.searchParams = null;\n    }\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @param {SearchParams} searchParams\n     */\n    async load(searchParams) {\n        this.searchParams = searchParams;\n        if (!this.initialGroupBy) {\n            this.initialGroupBy = searchParams.context.graph_groupbys || this.metaData.groupBy; // = arch groupBy --> change that\n        }\n        const metaData = this._buildMetaData();\n        return this._fetchDataPoints(metaData);\n    }\n\n    /**\n     * @override\n     */\n    hasData() {\n        return this.dataPoints.length > 0;\n    }\n\n    /**\n     * Only supposed to be called to change one or several parameters among\n     * \"measure\", \"mode\", \"order\", and \"stacked\".\n     * @param {Object} params\n     */\n    async updateMetaData(params) {\n        if (\"measure\" in params) {\n            const metaData = this._buildMetaData(params);\n            await this._fetchDataPoints(metaData);\n        } else {\n            await this.race.getCurrentProm();\n            this.metaData = Object.assign({}, this.metaData, params);\n            this._prepareData();\n        }\n        this.notify();\n    }\n\n    //--------------------------------------------------------------------------\n    // Protected\n    //--------------------------------------------------------------------------\n\n    /**\n     * @protected\n     * @param {Object} [params={}]\n     * @returns {Object}\n     */\n    _buildMetaData(params) {\n        const { comparison, domain, context, groupBy } = this.searchParams;\n\n        const metaData = Object.assign({}, this.metaData, { context });\n        if (comparison) {\n            metaData.domains = comparison.domains;\n            metaData.comparisonField = comparison.fieldName;\n        } else {\n            metaData.domains = [{ arrayRepr: domain, description: null }];\n        }\n        metaData.measure = context.graph_measure || metaData.measure;\n        metaData.mode = context.graph_mode || metaData.mode;\n        metaData.groupBy = groupBy.length ? groupBy : this.initialGroupBy;\n\n        this._normalize(metaData);\n\n        metaData.measures = computeReportMeasures(\n            metaData.fields,\n            metaData.fieldAttrs,\n            [metaData.measure],\n            metaData.additionalMeasures\n        );\n\n        return Object.assign(metaData, params);\n    }\n\n    /**\n     * Fetch the data points determined by the metaData. This function has\n     * several side effects. It can alter this.metaData and set this.dataPoints.\n     * @protected\n     * @param {Object} metaData\n     */\n    async _fetchDataPoints(metaData) {\n        this.dataPoints = await this.keepLast.add(this._loadDataPoints(metaData));\n        this.metaData = metaData;\n        this._prepareData();\n    }\n\n    /**\n     * Separates dataPoints coming from the read_group(s) into different\n     * datasets. This function returns the parameters data and labels used\n     * to produce the charts.\n     * @protected\n     * @param {Object[]}\n     * @returns {Object}\n     */\n    _getData(dataPoints) {\n        const { comparisonField, groupBy, mode } = this.metaData;\n\n        let identify = false;\n        if (comparisonField && groupBy.length && groupBy[0].fieldName === comparisonField) {\n            identify = true;\n        }\n        const dateClasses = identify ? this._getDateClasses(dataPoints) : null;\n\n        // dataPoints --> labels\n        let labels = [];\n        const labelMap = {};\n        for (const dataPt of dataPoints) {\n            const x = dataPt.labels.slice(0, mode === \"pie\" ? undefined : 1);\n            const trueLabel = x.length ? x.join(SEP) : this.env._t(\"Total\");\n            if (dateClasses) {\n                x[0] = dateClasses.classLabel(dataPt.originIndex, x[0]);\n            }\n            const key = JSON.stringify(x);\n            if (labelMap[key] === undefined) {\n                labelMap[key] = labels.length;\n                if (dateClasses) {\n                    if (mode === \"pie\") {\n                        x[0] = dateClasses.classMembers(x[0]).join(\", \");\n                    } else {\n                        x[0] = dateClasses.representative(x[0]);\n                    }\n                }\n                const label = x.length ? x.join(SEP) : this.env._t(\"Total\");\n                labels.push(label);\n            }\n            dataPt.labelIndex = labelMap[key];\n            dataPt.trueLabel = trueLabel;\n        }\n\n        // dataPoints + labels --> datasetsTmp --> datasets\n        const datasetsTmp = {};\n        for (const dataPt of dataPoints) {\n            const { domain, labelIndex, originIndex, trueLabel, value } = dataPt;\n            const datasetLabel = this._getDatasetLabel(dataPt);\n            if (!(datasetLabel in datasetsTmp)) {\n                let dataLength = labels.length;\n                if (mode !== \"pie\" && dateClasses) {\n                    dataLength = dateClasses.arrayLength(originIndex);\n                }\n                datasetsTmp[datasetLabel] = {\n                    data: new Array(dataLength).fill(0),\n                    trueLabels: labels.slice(0, dataLength), // should be good // check this in case identify = true\n                    domains: new Array(dataLength).fill([]),\n                    label: datasetLabel,\n                    originIndex: originIndex,\n                };\n            }\n            datasetsTmp[datasetLabel].data[labelIndex] = value;\n            datasetsTmp[datasetLabel].domains[labelIndex] = domain;\n            datasetsTmp[datasetLabel].trueLabels[labelIndex] = trueLabel;\n        }\n        // sort by origin\n        let datasets = sortBy(Object.values(datasetsTmp), \"originIndex\");\n\n        if (mode === \"pie\") {\n            // We kinda have a matrix. We remove the zero columns and rows. This is a global operation.\n            // That's why it cannot be done before.\n            datasets = datasets.filter((dataset) => dataset.data.some((v) => Boolean(v)));\n            const labelsToKeepIndexes = {};\n            labels.forEach((_, index) => {\n                if (datasets.some((dataset) => Boolean(dataset.data[index]))) {\n                    labelsToKeepIndexes[index] = true;\n                }\n            });\n            labels = labels.filter((_, index) => labelsToKeepIndexes[index]);\n            for (const dataset of datasets) {\n                dataset.data = dataset.data.filter((_, index) => labelsToKeepIndexes[index]);\n                dataset.domains = dataset.domains.filter((_, index) => labelsToKeepIndexes[index]);\n                dataset.trueLabels = dataset.trueLabels.filter(\n                    (_, index) => labelsToKeepIndexes[index]\n                );\n            }\n        }\n\n        return { datasets, labels };\n    }\n\n    /**\n     * Determines the dataset to which the data point belongs.\n     * @protected\n     * @param {Object} dataPoint\n     * @returns {string}\n     */\n    _getDatasetLabel(dataPoint) {\n        const { measure, measures, domains, mode } = this.metaData;\n        const { labels, originIndex } = dataPoint;\n        if (mode === \"pie\") {\n            return domains[originIndex].description || \"\";\n        }\n        // ([origin] + second to last groupBys) or measure\n        let datasetLabel = labels.slice(1).join(SEP);\n        if (domains.length > 1) {\n            datasetLabel =\n                domains[originIndex].description + (datasetLabel ? SEP + datasetLabel : \"\");\n        }\n        datasetLabel = datasetLabel || measures[measure].string;\n        return datasetLabel;\n    }\n\n    /**\n     * @protected\n     * @param {Object[]} dataPoints\n     * @returns {DateClasses}\n     */\n    _getDateClasses(dataPoints) {\n        const { domains } = this.metaData;\n        const dateSets = domains.map(() => new Set());\n        for (const { labels, originIndex } of dataPoints) {\n            const date = labels[0];\n            dateSets[originIndex].add(date);\n        }\n        const arrays = dateSets.map((dateSet) => [...dateSet]);\n        return new DateClasses(arrays);\n    }\n\n    /**\n     * Eventually filters and sort data points.\n     * @protected\n     * @returns {Object[]}\n     */\n    _getProcessedDataPoints() {\n        const { domains, groupBy, mode, order } = this.metaData;\n        let processedDataPoints = [];\n        if (mode === \"line\") {\n            processedDataPoints = this.dataPoints.filter(\n                (dataPoint) => dataPoint.labels[0] !== this.env._t(\"Undefined\")\n            );\n        } else {\n            processedDataPoints = this.dataPoints.filter((dataPoint) => dataPoint.count !== 0);\n        }\n\n        if (order !== null && mode !== \"pie\" && domains.length === 1 && groupBy.length > 0) {\n            // group data by their x-axis value, and then sort datapoints\n            // based on the sum of values by group in ascending/descending order\n            const groupedDataPoints = {};\n            for (const dataPt of processedDataPoints) {\n                const key = dataPt.labels[0]; // = x-axis value under the current assumptions\n                if (!groupedDataPoints[key]) {\n                    groupedDataPoints[key] = [];\n                }\n                groupedDataPoints[key].push(dataPt);\n            }\n            const groups = Object.values(groupedDataPoints);\n            const groupTotal = (group) => group.reduce((sum, dataPt) => sum + dataPt.value, 0);\n            processedDataPoints = sortBy(groups, groupTotal, order.toLowerCase()).flat();\n        }\n\n        return processedDataPoints;\n    }\n\n    /**\n     * Determines whether the set of data points is good. If not, this.data will be (re)set to null\n     * @protected\n     * @param {Object[]}\n     * @returns {boolean}\n     */\n    _isValidData(dataPoints) {\n        const { mode } = this.metaData;\n        let somePositive = false;\n        let someNegative = false;\n        if (mode === \"pie\") {\n            for (const dataPt of dataPoints) {\n                if (dataPt.value > 0) {\n                    somePositive = true;\n                } else if (dataPt.value < 0) {\n                    someNegative = true;\n                }\n            }\n            if (someNegative && somePositive) {\n                return false;\n            }\n        }\n        return true;\n    }\n\n    /**\n     * Fetch and process graph data.  It is basically a(some) read_group(s)\n     * with correct fields for each domain.  We have to do some light processing\n     * to separate date groups in the field list, because they can be defined\n     * with an aggregation function, such as my_date:week.\n     * @protected\n     * @param {Object} metaData\n     * @returns {Object[]}\n     */\n    async _loadDataPoints(metaData) {\n        const { measure, domains, fields, groupBy, resModel } = metaData;\n\n        const measures = [\"__count\"];\n        if (measure !== \"__count\") {\n            let { group_operator, type } = fields[measure];\n            if (type === \"many2one\") {\n                group_operator = \"count_distinct\";\n            }\n            if (group_operator === undefined) {\n                throw new Error(\n                    `No aggregate function has been provided for the measure '${measure}'`\n                );\n            }\n            measures.push(`${measure}:${group_operator}`);\n        }\n\n        const proms = [];\n        const numbering = {}; // used to avoid ambiguity with many2one with values with same labels:\n        // for instance [1, \"ABC\"] [3, \"ABC\"] should be distinguished.\n        domains.forEach((domain, originIndex) => {\n            proms.push(\n                this.orm\n                    .webReadGroup(\n                        resModel,\n                        domain.arrayRepr,\n                        measures,\n                        groupBy.map((gb) => gb.spec),\n                        { lazy: false }, // what is this thing???\n                        { fill_temporal: true, ...this.searchParams.context }\n                    )\n                    .then((data) => {\n                        const dataPoints = [];\n                        for (const group of data.groups) {\n                            const { __domain, __count } = group;\n                            const labels = [];\n\n                            for (const gb of groupBy) {\n                                let label;\n                                const val = group[gb.spec];\n                                const fieldName = gb.fieldName;\n                                const { type } = fields[fieldName];\n                                if (type === \"boolean\") {\n                                    label = `${val}`; // toUpperCase?\n                                } else if (val === false) {\n                                    label = this.env._t(\"Undefined\");\n                                } else if (type === \"many2one\") {\n                                    const [id, name] = val;\n                                    const key = JSON.stringify([fieldName, name]);\n                                    if (!numbering[key]) {\n                                        numbering[key] = {};\n                                    }\n                                    const numbers = numbering[key];\n                                    if (!numbers[id]) {\n                                        numbers[id] = Object.keys(numbers).length + 1;\n                                    }\n                                    const num = numbers[id];\n                                    label = num === 1 ? name : `${name} (${num})`;\n                                } else if (type === \"selection\") {\n                                    const selected = fields[fieldName].selection.find(\n                                        (s) => s[0] === val\n                                    );\n                                    label = selected[1];\n                                } else {\n                                    label = val;\n                                }\n                                labels.push(label);\n                            }\n\n                            let value = group[measure];\n                            if (value instanceof Array) {\n                                // case where measure is a many2one and is used as groupBy\n                                value = 1;\n                            }\n                            if (!Number.isInteger(value)) {\n                                metaData.allIntegers = false;\n                            }\n                            dataPoints.push({\n                                count: __count,\n                                domain: __domain,\n                                value,\n                                labels,\n                                originIndex,\n                            });\n                        }\n                        return dataPoints;\n                    })\n            );\n        });\n        const promResults = await Promise.all(proms);\n        return promResults.flat();\n    }\n\n    /**\n     * Process metaData.groupBy in order to keep only the finest interval option for\n     * elements based on date/datetime field (e.g. 'date:year'). This means that\n     * 'week' is prefered to 'month'. The field stays at the place of its first occurence.\n     * For instance,\n     * ['foo', 'date:month', 'bar', 'date:week'] becomes ['foo', 'date:week', 'bar'].\n     * @protected\n     * @param {Object} metaData\n     */\n    _normalize(metaData) {\n        const { fields } = metaData;\n        const groupBy = [];\n        for (const gb of metaData.groupBy) {\n            let ngb = gb;\n            if (typeof gb === \"string\") {\n                ngb = getGroupBy(gb, fields);\n            }\n            groupBy.push(ngb);\n        }\n\n        const processedGroupBy = [];\n        for (const gb of groupBy) {\n            const { fieldName, interval } = gb;\n            const { sortable, type } = fields[fieldName];\n            if (\n                !sortable ||\n                [\"id\", \"__count\"].includes(fieldName) ||\n                !GROUPABLE_TYPES.includes(type)\n            ) {\n                continue;\n            }\n            const index = processedGroupBy.findIndex((gb) => gb.fieldName === fieldName);\n            if (index === -1) {\n                processedGroupBy.push(gb);\n            } else if (interval) {\n                const registeredInterval = processedGroupBy[index].interval;\n                if (rankInterval(registeredInterval) < rankInterval(interval)) {\n                    processedGroupBy.splice(index, 1, gb);\n                }\n            }\n        }\n        metaData.groupBy = processedGroupBy;\n\n        metaData.measure = processMeasure(metaData.measure);\n    }\n\n    /**\n     * @protected\n     */\n    async _prepareData() {\n        const processedDataPoints = this._getProcessedDataPoints();\n        this.data = null;\n        if (this._isValidData(processedDataPoints)) {\n            this.data = this._getData(processedDataPoints);\n        }\n    }\n}\n", "/** @odoo-module **/\n\nimport { _lt } from \"@web/core/l10n/translation\";\nimport { BORDER_WHITE, DEFAULT_BG, getColor, hexToRGBA } from \"./colors\";\nimport { formatFloat } from \"@web/fields/formatters\";\nimport { SEP } from \"./graph_model\";\nimport { sortBy } from \"@web/core/utils/arrays\";\nimport { useAssets } from \"@web/core/assets\";\nimport { useEffect } from \"@web/core/utils/hooks\";\n\nconst { Component, hooks } = owl;\nconst { useRef } = hooks;\n\nconst NO_DATA = _lt(\"No data\");\n\n/**\n * @param {Object} chartArea\n * @returns {string}\n */\nfunction getMaxWidth(chartArea) {\n    const { left, right } = chartArea;\n    return Math.floor((right - left) / 1.618) + \"px\";\n}\n\n/**\n * Used to avoid too long legend items.\n * @param {string|Strin} label\n * @returns {string} shortened version of the input label\n */\nfunction shortenLabel(label) {\n    // string returned could be wrong if a groupby value contain a \" / \"!\n    const groups = label.toString().split(SEP);\n    let shortLabel = groups.slice(0, 3).join(SEP);\n    if (shortLabel.length > 30) {\n        shortLabel = `${shortLabel.slice(0, 30)}...`;\n    } else if (groups.length > 3) {\n        shortLabel = `${shortLabel}${SEP}...`;\n    }\n    return shortLabel;\n}\n\nexport class GraphRenderer extends Component {\n    setup() {\n        this.model = this.props.model;\n\n        this.canvasRef = useRef(\"canvas\");\n        this.containerRef = useRef(\"container\");\n\n        this.chart = null;\n        this.tooltip = null;\n        this.legendTooltip = null;\n\n        useAssets({ jsLibs: [\"/web/static/lib/Chart/Chart.js\"] });\n\n        useEffect(() => this.renderChart());\n    }\n\n    willUnmount() {\n        if (this.chart) {\n            this.chart.destroy();\n        }\n    }\n\n    /**\n     * This function aims to remove a suitable number of lines from the\n     * tooltip in order to make it reasonably visible. A message indicating\n     * the number of lines is added if necessary.\n     * @param {HTMLElement} tooltip\n     * @param {number} maxTooltipHeight this the max height in pixels of the tooltip\n     */\n    adjustTooltipHeight(tooltip, maxTooltipHeight) {\n        const sizeOneLine = tooltip.querySelector(\"tbody tr\").clientHeight;\n        const tbodySize = tooltip.querySelector(\"tbody\").clientHeight;\n        const toKeep = Math.max(\n            0,\n            Math.floor((maxTooltipHeight - (tooltip.clientHeight - tbodySize)) / sizeOneLine) - 1\n        );\n        const lines = tooltip.querySelectorAll(\"tbody tr\");\n        const toRemove = lines.length - toKeep;\n        if (toRemove > 0) {\n            for (let index = toKeep; index < lines.length; ++index) {\n                lines[index].remove();\n            }\n            const tr = document.createElement(\"tr\");\n            const td = document.createElement(\"td\");\n            tr.classList.add(\"o_show_more\");\n            td.innerText = this.env._t(\"...\");\n            tr.appendChild(td);\n            tooltip.querySelector(\"tbody\").appendChild(tr);\n        }\n    }\n\n    /**\n     * Creates a custom HTML tooltip.\n     * @param {Object} data\n     * @param {Object} metaData\n     * @param {Object} tooltipModel see chartjs documentation\n     */\n    customTooltip(data, metaData, tooltipModel) {\n        const { measure, measures, disableLinking, mode } = metaData;\n        this.el.style.cursor = \"\";\n        this.removeTooltips();\n        if (tooltipModel.opacity === 0 || tooltipModel.dataPoints.length === 0) {\n            return;\n        }\n        if (!disableLinking && mode !== \"line\") {\n            this.el.style.cursor = \"pointer\";\n        }\n        const chartAreaTop = this.chart.chartArea.top;\n        const viewContentTop = this.el.getBoundingClientRect().top;\n        const innerHTML = this.env.qweb.renderToString(\"web.GraphRenderer.CustomTooltip\", {\n            maxWidth: getMaxWidth(this.chart.chartArea),\n            measure: measures[measure].string,\n            mode: this.model.metaData.mode,\n            tooltipItems: this.getTooltipItems(data, metaData, tooltipModel),\n        });\n        const template = Object.assign(document.createElement(\"template\"), { innerHTML });\n        const tooltip = template.content.firstChild;\n        this.containerRef.el.prepend(tooltip);\n\n        let top;\n        const tooltipHeight = tooltip.clientHeight;\n        const minTopAllowed = Math.floor(chartAreaTop);\n        const maxTopAllowed = Math.floor(window.innerHeight - (viewContentTop + tooltipHeight)) - 2;\n        const y = Math.floor(tooltipModel.y);\n        if (minTopAllowed <= maxTopAllowed) {\n            // Here we know that the full tooltip can fit in the screen.\n            // We put it in the position where Chart.js would put it\n            // if two conditions are respected:\n            //  1: the tooltip is not cut (because we know it is possible to not cut it)\n            //  2: the tooltip does not hide the legend.\n            // If it is not possible to use the Chart.js proposition (y)\n            // we use the best approximated value.\n            if (y <= maxTopAllowed) {\n                if (y >= minTopAllowed) {\n                    top = y;\n                } else {\n                    top = minTopAllowed;\n                }\n            } else {\n                top = maxTopAllowed;\n            }\n        } else {\n            // Here we know that we cannot satisfy condition 1 above,\n            // so we position the tooltip at the minimal position and\n            // cut it the minimum possible.\n            top = minTopAllowed;\n            const maxTooltipHeight = window.innerHeight - (viewContentTop + chartAreaTop) - 2;\n            this.adjustTooltipHeight(tooltip, maxTooltipHeight);\n        }\n        this.fixTooltipLeftPosition(tooltip, tooltipModel.x);\n        tooltip.style.top = Math.floor(top) + \"px\";\n\n        this.tooltip = tooltip;\n    }\n\n    /**\n     * Sets best left position of a tooltip approaching the proposal x.\n     * @param {HTMLElement} tooltip\n     * @param {number} x\n     */\n    fixTooltipLeftPosition(tooltip, x) {\n        let left;\n        const tooltipWidth = tooltip.clientWidth;\n        const minLeftAllowed = Math.floor(this.chart.chartArea.left + 2);\n        const maxLeftAllowed = Math.floor(this.chart.chartArea.right - tooltipWidth - 2);\n        x = Math.floor(x);\n        if (x < minLeftAllowed) {\n            left = minLeftAllowed;\n        } else if (x > maxLeftAllowed) {\n            left = maxLeftAllowed;\n        } else {\n            left = x;\n        }\n        tooltip.style.left = `${left}px`;\n    }\n\n    /**\n     * Used to format correctly the values in tooltips and yAxes.\n     * @param {number} value\n     * @param {boolean} [allIntegers=true]\n     * @returns {string}\n     */\n    formatValue(value, allIntegers = true) {\n        const largeNumber = Math.abs(value) >= 1000;\n        if (allIntegers && !largeNumber) {\n            return String(value);\n        }\n        if (largeNumber) {\n            return formatFloat(value, { humanReadable: true, decimals: 2, minDigits: 1 });\n        }\n        return formatFloat(value);\n    }\n\n    /**\n     * Returns the bar chart data\n     * @returns {Object}\n     */\n    getBarChartData() {\n        // style data\n        const { domains, stacked } = this.model.metaData;\n        const data = this.model.data;\n        for (let index = 0; index < data.datasets.length; ++index) {\n            const dataset = data.datasets[index];\n            // used when stacked\n            if (stacked) {\n                dataset.stack = domains[dataset.originIndex].description || \"\";\n            }\n            // set dataset color\n            dataset.backgroundColor = getColor(index);\n        }\n\n        return data;\n    }\n\n    /**\n     * Returns the chart config.\n     * @returns {Object}\n     */\n    getChartConfig() {\n        const { mode } = this.model.metaData;\n        let data;\n        switch (mode) {\n            case \"bar\":\n                data = this.getBarChartData();\n                break;\n            case \"line\":\n                data = this.getLineChartData();\n                break;\n            case \"pie\":\n                data = this.getPieChartData();\n        }\n        const options = this.prepareOptions();\n        return { data, options, type: mode };\n    }\n\n    /**\n     * Returns an object used to style chart elements independently from\n     * the datasets.\n     * @returns {Object}\n     */\n    getElementOptions() {\n        const { mode } = this.model.metaData;\n        const elementOptions = {};\n        if (mode === \"bar\") {\n            elementOptions.rectangle = { borderWidth: 1 };\n        } else if (mode === \"line\") {\n            elementOptions.line = { fill: false, tension: 0 };\n        }\n        return elementOptions;\n    }\n\n    /**\n     * @returns {Object}\n     */\n    getLegendOptions() {\n        const { mode } = this.model.metaData;\n        const data = this.model.data;\n        const refLength = mode === \"pie\" ? data.labels.length : data.datasets.length;\n        const legendOptions = {\n            display: refLength <= 20,\n            position: \"top\",\n            onHover: this.onlegendHover.bind(this),\n            onLeave: this.onLegendLeave.bind(this),\n        };\n        if (mode === \"line\") {\n            legendOptions.onClick = this.onLegendClick.bind(this);\n        }\n        if (mode === \"pie\") {\n            legendOptions.labels = {\n                generateLabels: (chart) => {\n                    const { data } = chart;\n                    const metaData = data.datasets.map(\n                        (_, index) => chart.getDatasetMeta(index).data\n                    );\n                    const labels = data.labels.map((label, index) => {\n                        const hidden = metaData.some((data) => data[index] && data[index].hidden);\n                        const fullText = label;\n                        const text = shortenLabel(fullText);\n                        const fillStyle = label === NO_DATA ? DEFAULT_BG : getColor(index);\n                        return { text, fullText, fillStyle, hidden, index };\n                    });\n                    return labels;\n                },\n            };\n        } else {\n            const referenceColor = mode === \"bar\" ? \"backgroundColor\" : \"borderColor\";\n            legendOptions.labels = {\n                generateLabels: (chart) => {\n                    const { data } = chart;\n                    const labels = data.datasets.map((dataset, index) => {\n                        return {\n                            text: shortenLabel(dataset.label),\n                            fullText: dataset.label,\n                            fillStyle: dataset[referenceColor],\n                            hidden: !chart.isDatasetVisible(index),\n                            lineCap: dataset.borderCapStyle,\n                            lineDash: dataset.borderDash,\n                            lineDashOffset: dataset.borderDashOffset,\n                            lineJoin: dataset.borderJoinStyle,\n                            lineWidth: dataset.borderWidth,\n                            strokeStyle: dataset[referenceColor],\n                            pointStyle: dataset.pointStyle,\n                            datasetIndex: index,\n                        };\n                    });\n                    return labels;\n                },\n            };\n        }\n        return legendOptions;\n    }\n\n    /**\n     * Returns line chart data.\n     * @returns {Object}\n     */\n    getLineChartData() {\n        const { groupBy, domains } = this.model.metaData;\n        const data = this.model.data;\n        for (let index = 0; index < data.datasets.length; ++index) {\n            const dataset = data.datasets[index];\n            if (groupBy.length <= 1 && domains.length > 1) {\n                if (dataset.originIndex === 0) {\n                    dataset.fill = \"origin\";\n                    dataset.backgroundColor = hexToRGBA(getColor(0), 0.4);\n                    dataset.borderColor = getColor(0);\n                } else if (dataset.originIndex === 1) {\n                    dataset.borderColor = getColor(1);\n                } else {\n                    dataset.borderColor = getColor(index);\n                }\n            } else {\n                dataset.borderColor = getColor(index);\n            }\n            if (data.labels.length === 1) {\n                // shift of the real value to right. This is done to\n                // center the points in the chart. See data.labels below in\n                // Chart parameters\n                dataset.data.unshift(undefined);\n                dataset.trueLabels.unshift(undefined);\n                dataset.domains.unshift(undefined);\n            }\n            dataset.pointBackgroundColor = dataset.borderColor;\n            dataset.pointBorderColor = \"rgba(0,0,0,0.2)\";\n        }\n        if (data.datasets.length === 1 && data.datasets[0].originIndex === 0) {\n            const dataset = data.datasets[0];\n            dataset.fill = \"origin\";\n            dataset.backgroundColor = hexToRGBA(getColor(0), 0.4);\n        }\n        // center the points in the chart (without that code they are put\n        // on the left and the graph seems empty)\n        data.labels = data.labels.length > 1 ? data.labels : [\"\", ...data.labels, \"\"];\n\n        return data;\n    }\n\n    /**\n     * Returns pie chart data.\n     * @returns {Object}\n     */\n    getPieChartData() {\n        const { domains } = this.model.metaData;\n        const data = this.model.data;\n        // style/complete data\n        // give same color to same groups from different origins\n        const colors = data.labels.map((_, index) => getColor(index));\n        for (const dataset of data.datasets) {\n            dataset.backgroundColor = colors;\n            dataset.borderColor = BORDER_WHITE;\n        }\n        // make sure there is a zone associated with every origin\n        const representedOriginIndexes = new Set(\n            data.datasets.map((dataset) => dataset.originIndex)\n        );\n        let addNoDataToLegend = false;\n        const fakeData = new Array(data.labels.length + 1);\n        fakeData[data.labels.length] = 1;\n        const fakeTrueLabels = new Array(data.labels.length + 1);\n        fakeTrueLabels[data.labels.length] = NO_DATA;\n        for (let index = 0; index < domains.length; ++index) {\n            if (!representedOriginIndexes.has(index)) {\n                data.datasets.push({\n                    label: domains[index].description,\n                    data: fakeData,\n                    trueLabels: fakeTrueLabels,\n                    backgroundColor: [...colors, DEFAULT_BG],\n                    borderColor: BORDER_WHITE,\n                });\n                addNoDataToLegend = true;\n            }\n        }\n        if (addNoDataToLegend) {\n            data.labels.push(NO_DATA);\n        }\n\n        return data;\n    }\n\n    /**\n     * Returns the options used to generate the chart axes.\n     * @returns {Object}\n     */\n    getScaleOptions() {\n        const {\n            allIntegers,\n            displayScaleLabels,\n            fields,\n            groupBy,\n            measure,\n            measures,\n            mode,\n        } = this.model.metaData;\n        if (mode === \"pie\") {\n            return {};\n        }\n        const xAxe = {\n            type: \"category\",\n            scaleLabel: {\n                display: Boolean(groupBy.length && displayScaleLabels),\n                labelString: groupBy.length ? fields[groupBy[0].fieldName].string : \"\",\n            },\n            ticks: { callback: (value) => shortenLabel(value) },\n        };\n        const yAxe = {\n            type: \"linear\",\n            scaleLabel: {\n                display: displayScaleLabels,\n                labelString: measures[measure].string,\n            },\n            ticks: {\n                callback: (value) => this.formatValue(value, allIntegers),\n                suggestedMax: 0,\n                suggestedMin: 0,\n            },\n        };\n        return { xAxes: [xAxe], yAxes: [yAxe] };\n    }\n\n    /**\n     * This function extracts the information from the data points in\n     * tooltipModel.dataPoints (corresponding to datapoints over a given\n     * label determined by the mouse position) that will be displayed in a\n     * custom tooltip.\n     * @param {Object} data\n     * @param {Object} metaData\n     * @param {Object} tooltipModel see chartjs documentation\n     * @returns {Object[]}\n     */\n    getTooltipItems(data, metaData, tooltipModel) {\n        const { allIntegers, domains, mode, groupBy } = metaData;\n        const sortedDataPoints = sortBy(tooltipModel.dataPoints, \"yLabel\", \"desc\");\n        const items = [];\n        for (const item of sortedDataPoints) {\n            const id = item.index;\n            const dataset = data.datasets[item.datasetIndex];\n            let label = dataset.trueLabels[id];\n            let value = this.formatValue(dataset.data[id], allIntegers);\n            let boxColor;\n            let percentage;\n            if (mode === \"pie\") {\n                if (label === NO_DATA) {\n                    value = this.formatValue(0, allIntegers);\n                }\n                if (domains.length > 1) {\n                    label = `${dataset.label} / ${label}`;\n                }\n                boxColor = dataset.backgroundColor[id];\n                const totalData = dataset.data.reduce((a, b) => a + b, 0);\n                percentage = totalData && ((dataset.data[item.index] * 100) / totalData).toFixed(2);\n            } else {\n                if (groupBy.length > 1 || domains.length > 1) {\n                    label = `${label} / ${dataset.label}`;\n                }\n                boxColor = mode === \"bar\" ? dataset.backgroundColor : dataset.borderColor;\n            }\n            items.push({ id, label, value, boxColor, percentage });\n        }\n        return items;\n    }\n\n    /**\n     * Returns the options used to generate chart tooltips.\n     * @returns {Object}\n     */\n    getTooltipOptions() {\n        const { data, metaData } = this.model;\n        const { mode } = metaData;\n        const tooltipOptions = {\n            enabled: false,\n            custom: this.customTooltip.bind(this, data, metaData),\n        };\n        if (mode === \"line\") {\n            tooltipOptions.mode = \"index\";\n            tooltipOptions.intersect = false;\n        }\n        return tooltipOptions;\n    }\n\n    /**\n     * If a group has been clicked on, display a view of its records.\n     * @param {MouseEvent} ev\n     */\n    onGraphClicked(ev) {\n        const [activeElement] = this.chart.getElementAtEvent(ev);\n        if (!activeElement) {\n            return;\n        }\n        const { _datasetIndex, _index } = activeElement;\n        const { domains } = this.chart.data.datasets[_datasetIndex];\n        if (domains) {\n            this.props.onGraphClicked(domains[_index]);\n        }\n    }\n\n    /**\n     * Overrides the default legend 'onClick' behaviour. This is done to\n     * remove all existing tooltips right before updating the chart.\n     * @param {Event} ev\n     * @param {Object} legendItem\n     */\n    onLegendClick(ev, legendItem) {\n        this.removeTooltips();\n        // Default 'onClick' fallback. See web/static/lib/Chart/Chart.js#15138\n        const index = legendItem.datasetIndex;\n        const meta = this.chart.getDatasetMeta(index);\n        meta.hidden = meta.hidden === null ? !this.chart.data.datasets[index].hidden : null;\n        this.chart.update();\n    }\n\n    /**\n     * If the text of a legend item has been shortened and the user mouse\n     * hovers that item (actually the event type is mousemove), a tooltip\n     * with the item full text is displayed.\n     * @param {Event} ev\n     * @param {Object} legendItem\n     */\n    onlegendHover(ev, legendItem) {\n        this.canvasRef.el.style.cursor = \"pointer\";\n        /**\n         * The string legendItem.text is an initial segment of legendItem.fullText.\n         * If the two coincide, no need to generate a tooltip. If a tooltip\n         * for the legend already exists, it is already good and does not\n         * need to be recreated.\n         */\n        const { fullText, text } = legendItem;\n        if (this.legendTooltip || text === fullText) {\n            return;\n        }\n        const viewContentTop = this.el.getBoundingClientRect().top;\n        const legendTooltip = Object.assign(document.createElement(\"div\"), {\n            className: \"o_tooltip_legend\",\n            innerText: fullText,\n        });\n        legendTooltip.style.top = `${ev.clientY - viewContentTop}px`;\n        legendTooltip.style.maxWidth = getMaxWidth(this.chart.chartArea);\n        this.containerRef.el.appendChild(legendTooltip);\n        this.fixTooltipLeftPosition(legendTooltip, ev.clientX);\n        this.legendTooltip = legendTooltip;\n    }\n\n    /**\n     * If there's a legend tooltip and the user mouse out of the\n     * corresponding legend item, the tooltip is removed.\n     */\n    onLegendLeave() {\n        this.canvasRef.el.style.cursor = \"\";\n        this.removeLegendTooltip();\n    }\n\n    /**\n     * Prepares options for the chart according to the current mode\n     * (= chart type). This function returns the parameter options used to\n     * instantiate the chart.\n     */\n    prepareOptions() {\n        const { disableLinking, mode } = this.model.metaData;\n        const options = {\n            maintainAspectRatio: false,\n            scales: this.getScaleOptions(),\n            legend: this.getLegendOptions(),\n            tooltips: this.getTooltipOptions(),\n            elements: this.getElementOptions(),\n        };\n        if (!disableLinking && mode !== \"line\") {\n            options.onClick = this.onGraphClicked.bind(this);\n        }\n        return options;\n    }\n\n    /**\n     * Removes the legend tooltip (if any).\n     */\n    removeLegendTooltip() {\n        if (this.legendTooltip) {\n            this.legendTooltip.remove();\n            this.legendTooltip = null;\n        }\n    }\n\n    /**\n     * Removes all existing tooltips (if any).\n     */\n    removeTooltips() {\n        if (this.tooltip) {\n            this.tooltip.remove();\n            this.tooltip = null;\n        }\n        this.removeLegendTooltip();\n    }\n\n    /**\n     * Instantiates a Chart (Chart.js lib) to render the graph according to\n     * the current config.\n     */\n    renderChart() {\n        if (this.chart) {\n            this.chart.destroy();\n        }\n        const config = this.getChartConfig();\n        this.chart = new Chart(this.canvasRef.el, config);\n        // To perform its animations, ChartJS will perform each animation\n        // step in the next animation frame. The initial rendering itself\n        // is delayed for consistency. We can avoid this by manually\n        // advancing the animation service.\n        Chart.animationService.advance();\n    }\n}\n\nGraphRenderer.template = \"web.GraphRenderer\";\nGraphRenderer.props = [\"model\", \"onGraphClicked\"];\n", "/** @odoo-module **/\n\nimport { _lt } from \"@web/core/l10n/translation\";\nimport { registry } from \"@web/core/registry\";\nimport { useService } from \"@web/core/utils/hooks\";\nimport { GroupByMenu } from \"@web/search/group_by_menu/group_by_menu\";\nimport { standardViewProps } from \"@web/views/helpers/standard_view_props\";\nimport { useSetupView } from \"@web/views/helpers/view_hook\";\nimport { Layout } from \"@web/views/layout\";\nimport { useModel } from \"../helpers/model\";\nimport { GraphArchParser } from \"./graph_arch_parser\";\nimport { GraphModel } from \"./graph_model\";\nimport { GraphRenderer } from \"./graph_renderer\";\nimport { SearchModel } from \"@web/search/search_model\";\n\nconst viewRegistry = registry.category(\"views\");\n\nconst { Component } = owl;\n\nexport class GraphView extends Component {\n    setup() {\n        this.actionService = useService(\"action\");\n\n        let modelParams;\n        if (this.props.state) {\n            modelParams = this.props.state.metaData;\n        } else {\n            const { arch, fields } = this.props;\n            const parser = new this.constructor.ArchParser();\n            const archInfo = parser.parse(arch, fields);\n            modelParams = {\n                additionalMeasures: this.props.additionalMeasures,\n                disableLinking: Boolean(archInfo.disableLinking),\n                displayScaleLabels: this.props.displayScaleLabels,\n                fieldAttrs: archInfo.fieldAttrs,\n                fields: this.props.fields,\n                groupBy: archInfo.groupBy,\n                measure: archInfo.measure || \"__count\",\n                mode: archInfo.mode || \"bar\",\n                order: archInfo.order || null,\n                resModel: this.props.resModel,\n                stacked: \"stacked\" in archInfo ? archInfo.stacked : true,\n                title: archInfo.title || this.env._t(\"Untitled\"),\n            };\n        }\n\n        this.model = useModel(this.constructor.Model, modelParams);\n\n        useSetupView({\n            getLocalState: () => {\n                return { metaData: this.model.metaData };\n            },\n            getContext: () => this.getContext(),\n        });\n    }\n\n    /**\n     * @returns {Object}\n     */\n    getContext() {\n        // expand context object? change keys?\n        const { measure, groupBy, mode } = this.model.metaData;\n        return {\n            graph_measure: measure,\n            graph_mode: mode,\n            graph_groupbys: groupBy.map((gb) => gb.spec),\n        };\n    }\n\n    /**\n     * @param {string} domain the domain of the clicked area\n     */\n    onGraphClicked(domain) {\n        const { context, resModel, title } = this.model.metaData;\n\n        const views = {};\n        for (const [viewId, viewType] of this.env.config.views || []) {\n            views[viewType] = viewId;\n        }\n        function getView(viewType) {\n            return [views[viewType] || false, viewType];\n        }\n        const actionViews = [getView(\"list\"), getView(\"form\")];\n\n        this.actionService.doAction(\n            {\n                context,\n                domain,\n                name: title,\n                res_model: resModel,\n                target: \"current\",\n                type: \"ir.actions.act_window\",\n                views: actionViews,\n            },\n            {\n                viewType: \"list\",\n            }\n        );\n    }\n\n    /**\n     * @param {CustomEvent} ev\n     */\n    onMeasureSelected(ev) {\n        const { measure } = ev.detail.payload;\n        this.model.updateMetaData({ measure });\n    }\n\n    /**\n     * @param {\"bar\"|\"line\"|\"pie\"} mode\n     */\n    onModeSelected(mode) {\n        this.model.updateMetaData({ mode });\n    }\n\n    /**\n     * @param {\"ASC\"|\"DESC\"} order\n     */\n    toggleOrder(order) {\n        const { order: currentOrder } = this.model.metaData;\n        const nextOrder = currentOrder === order ? null : order;\n        this.model.updateMetaData({ order: nextOrder });\n    }\n\n    toggleStacked() {\n        const { stacked } = this.model.metaData;\n        this.model.updateMetaData({ stacked: !stacked });\n    }\n}\n\nclass GraphSearchModel extends SearchModel {\n    _getIrFilterDescription() {\n        this.preparingIrFilterDescription = true;\n        const result = super._getIrFilterDescription(...arguments);\n        this.preparingIrFilterDescription = false;\n        return result;\n    }\n\n    _getSearchItemGroupBys(activeItem) {\n        const { searchItemId } = activeItem;\n        const { context, type } = this.searchItems[searchItemId];\n        if (!this.preparingIrFilterDescription && type === \"favorite\" && context.graph_groupbys) {\n            return context.graph_groupbys;\n        }\n        return super._getSearchItemGroupBys(...arguments);\n    }\n}\n\nGraphView.template = \"web.GraphView\";\nGraphView.buttonTemplate = \"web.GraphView.Buttons\";\n\nGraphView.components = { GroupByMenu, Renderer: GraphRenderer, Layout };\n\nGraphView.defaultProps = {\n    additionalMeasures: [],\n    displayGroupByMenu: false,\n    displayScaleLabels: true,\n};\n\nGraphView.props = {\n    ...standardViewProps,\n    additionalMeasures: { type: Array, elements: String, optional: true },\n    displayGroupByMenu: { type: Boolean, optional: true },\n    displayScaleLabels: { type: Boolean, optional: true },\n};\n\nGraphView.type = \"graph\";\n\nGraphView.display_name = _lt(\"Graph\");\nGraphView.icon = \"fa-bar-chart\";\nGraphView.multiRecord = true;\n\nGraphView.Model = GraphModel;\nGraphView.SearchModel = GraphSearchModel;\n\nGraphView.ArchParser = GraphArchParser;\n\nGraphView.searchMenuTypes = [\"filter\", \"groupBy\", \"comparison\", \"favorite\"];\n\nviewRegistry.add(\"graph\", GraphView);\n", "/** @odoo-module **/\n\nimport { SEARCH_KEYS } from \"@web/search/with_search/with_search\";\nimport { useBus, useService } from \"@web/core/utils/hooks\";\nimport { buildSampleORM } from \"@web/views/helpers/sample_server\";\nimport { useSetupView } from \"@web/views/helpers/view_hook\";\n\nconst { core, hooks } = owl;\nconst { EventBus } = core;\nconst { onWillStart, onWillUpdateProps, useComponent } = hooks;\n\n/**\n * @typedef {import(\"@web/search/search_model\").SearchParams} SearchParams\n */\n\nexport class Model extends EventBus {\n    /**\n     * @param {Object} env\n     * @param {Object} services\n     */\n    constructor(env, params, services) {\n        super();\n        this.env = env;\n        this.orm = services.orm;\n        this.useSampleModel = false; // will be set to true by the \"useModel\" hook if necessary\n        this.setup(params, services);\n    }\n\n    /**\n     * @param {Object} params\n     * @param {Object} services\n     */\n    setup(/* params, services */) {}\n\n    /**\n     * @param {SearchParams} searchParams\n     */\n    async load(/* searchParams */) {}\n\n    /**\n     * This function is meant to be overriden by models that want to implement\n     * the sample data feature. It should return true iff the last loaded state\n     * actually contains data. If not, another load will be done (if the sample\n     * feature is enabled) with the orm service substituted by another using the\n     * SampleServer, to have sample data to display instead of an empty screen.\n     *\n     * @returns {boolean}\n     */\n    hasData() {\n        return true;\n    }\n\n    notify() {\n        this.trigger(\"update\");\n    }\n}\nModel.services = [];\n\n/**\n * @param {Object} props\n * @returns {SearchParams}\n */\nfunction getSearchParams(props) {\n    const params = {};\n    for (const key of SEARCH_KEYS) {\n        params[key] = props[key];\n    }\n    return params;\n}\n\n/**\n * @template {Model} T\n * @param {new (env: Object, params: Object, services: Object) => T} ModelClass\n * @param {Object} params\n * @param {Object} [options]\n * @param {Function} [options.onUpdate]\n * @returns {T}\n */\nexport function useModel(ModelClass, params, options = {}) {\n    const component = useComponent();\n    if (!(ModelClass.prototype instanceof Model)) {\n        throw new Error(`the model class should extend Model`);\n    }\n    const services = {};\n    for (const key of ModelClass.services) {\n        services[key] = useService(key);\n    }\n    services.orm = services.orm || useService(\"orm\");\n\n    const model = new ModelClass(component.env, params, services);\n    useBus(model, \"update\", options.onUpdate || component.render);\n\n    const globalState = component.props.globalState || {};\n    let useSampleModel = Boolean(\n        \"useSampleModel\" in globalState\n            ? globalState.useSampleModel\n            : component.props.useSampleModel\n    );\n    model.useSampleModel = useSampleModel;\n    const orm = model.orm;\n    let sampleORM = globalState.sampleORM;\n    const user = useService(\"user\");\n    async function load(props) {\n        model.orm = orm;\n        const searchParams = getSearchParams(props);\n        await model.load(searchParams);\n        if (useSampleModel && !model.hasData()) {\n            sampleORM =\n                sampleORM || buildSampleORM(component.props.resModel, component.props.fields, user);\n            model.orm = sampleORM;\n            await model.load(searchParams);\n        } else {\n            useSampleModel = false;\n        }\n        model.useSampleModel = useSampleModel;\n    }\n    onWillStart(() => {\n        return load(component.props);\n    });\n    onWillUpdateProps((nextProps) => {\n        useSampleModel = false;\n        return load(nextProps);\n    });\n\n    useSetupView({\n        getGlobalState() {\n            return {\n                sampleORM,\n                useSampleModel: model.useSampleModel,\n            };\n        },\n    });\n\n    return model;\n}\n", "/** @odoo-module **/\n\nimport { groupBy as arrayGroupBy, sortBy as arraySortBy } from \"@web/core/utils/arrays\";\nimport { registry } from \"@web/core/registry\";\nimport { ORM } from \"../../core/orm_service\";\nimport { parseDate, serializeDate, serializeDateTime } from \"@web/core/l10n/dates\";\n\nclass UnimplementedRouteError extends Error {}\n\n/**\n * Helper function returning the value from a list of sample strings\n * corresponding to the given ID.\n * @param {number} id\n * @param {string[]} sampleTexts\n * @returns {string}\n */\nfunction getSampleFromId(id, sampleTexts) {\n    return sampleTexts[(id - 1) % sampleTexts.length];\n}\n\n/**\n * Helper function returning a regular expression specifically matching\n * a given 'term' in a fieldName. For example `fieldNameRegex('abc')`:\n * will match:\n * - \"abc\"\n * - \"field_abc__def\"\n * will not match:\n * - \"aabc\"\n * - \"abcd_ef\"\n * @param {...string} term\n * @returns {RegExp}\n */\nfunction fieldNameRegex(...terms) {\n    return new RegExp(`\\\\b((\\\\w+)?_)?(${terms.join(\"|\")})(_(\\\\w+)?)?\\\\b`);\n}\n\nconst MEASURE_SPEC_REGEX = /(?<measure>\\w+):(?<aggregateFunction>\\w+)(\\((?<fieldName>\\w+)\\))?/;\nconst DESCRIPTION_REGEX = fieldNameRegex(\"description\", \"label\", \"title\", \"subject\", \"message\");\nconst EMAIL_REGEX = fieldNameRegex(\"email\");\nconst PHONE_REGEX = fieldNameRegex(\"phone\");\nconst URL_REGEX = fieldNameRegex(\"url\");\n\n/**\n * Sample server class\n *\n * Represents a static instance of the server used when a RPC call sends\n * empty values/groups while the attribute 'sample' is set to true on the\n * view.\n *\n * This server will generate fake data and send them in the adequate format\n * according to the route/method used in the RPC.\n */\nexport class SampleServer {\n    /**\n     * @param {string} modelName\n     * @param {Object} fields\n     */\n    constructor(modelName, fields) {\n        this.mainModel = modelName;\n        this.data = {};\n        this.data[modelName] = {\n            fields,\n            records: [],\n        };\n        // Generate relational fields' co models\n        for (const fieldName in fields) {\n            const field = fields[fieldName];\n            if ([\"many2one\", \"one2many\", \"many2many\"].includes(field.type)) {\n                this.data[field.relation] = this.data[field.relation] || {\n                    fields: {\n                        display_name: { type: \"char\" },\n                        id: { type: \"integer\" },\n                        color: { type: \"integer\" },\n                    },\n                    records: [],\n                };\n            }\n        }\n        // On some models, empty grouped Kanban or List view still contain\n        // real (empty) groups. In this case, we re-use the result of the\n        // web_read_group rpc to tweak sample data s.t. those real groups\n        // contain sample records.\n        this.existingGroups = null;\n        // Sample records generation is only done if necessary, so we delay\n        // it to the first \"mockRPC\" call. These flags allow us to know if\n        // the records have been generated or not.\n        this.populated = false;\n        this.existingGroupsPopulated = false;\n    }\n\n    //---------------------------------------------------------------------\n    // Public\n    //---------------------------------------------------------------------\n\n    /**\n     * This is the main entry point of the SampleServer. Mocks a request to\n     * the server with sample data.\n     * @param {Object} params\n     * @returns {any} the result obtained with the sample data\n     * @throws {Error} If called on a route/method we do not handle\n     */\n    mockRpc(params) {\n        if (!(params.model in this.data)) {\n            throw new Error(`SampleServer: unknown model ${params.model}`);\n        }\n        this._populateModels();\n        switch (params.method || params.route) {\n            case \"/web/dataset/search_read\":\n                return this._mockSearchReadController(params);\n            case \"web_read_group\":\n                return this._mockWebReadGroup(params);\n            case \"read_group\":\n                return this._mockReadGroup(params);\n            case \"read_progress_bar\":\n                return this._mockReadProgressBar(params);\n            case \"read\":\n                return this._mockRead(params);\n        }\n        // this rpc can't be mocked by the SampleServer itself, so check if there is an handler\n        // in the registry: either specific for this model (with key 'model/method'), or\n        // global (with key 'method')\n        const method = params.method || params.route;\n        // This allows to register mock version of methods or routes,\n        // for all models:\n        // registry.category(\"sample_server\").add('some_route', () => \"abcd\");\n        // for a specific model (e.g. 'res.partner'):\n        // registry.category(\"sample_server\").add('res.partner/some_method', () => 23);\n        const mockFunction =\n            registry.category(\"sample_server\").get(`${params.model}/${method}`, null) ||\n            registry.category(\"sample_server\").get(method, null);\n        if (mockFunction) {\n            return mockFunction.call(this, params);\n        }\n        console.log(`SampleServer: unimplemented route \"${params.method || params.route}\"`);\n        throw new SampleServer.UnimplementedRouteError();\n    }\n\n    setExistingGroups(groups) {\n        this.existingGroups = groups;\n    }\n\n    //---------------------------------------------------------------------\n    // Private\n    //---------------------------------------------------------------------\n\n    /**\n     * @param {Object[]} measures, each measure has the form { fieldName, type }\n     * @param {Object[]} records\n     * @returns {Object}\n     */\n    _aggregateFields(measures, records) {\n        const values = {};\n        for (const { fieldName, type } of measures) {\n            if ([\"float\", \"integer\", \"monetary\"].includes(type)) {\n                if (records.length) {\n                    let value = 0;\n                    for (const record of records) {\n                        value += record[fieldName];\n                    }\n                    values[fieldName] = this._sanitizeNumber(value);\n                } else {\n                    values[fieldName] = null;\n                }\n            }\n            if (type === \"many2one\") {\n                const ids = new Set(records.map((r) => r[fieldName]));\n                values.fieldName = ids.size || null;\n            }\n        }\n        return values;\n    }\n\n    /**\n     * @param {any} value\n     * @param {Object} options\n     * @param {string} [options.interval]\n     * @param {string} [options.relation]\n     * @param {string} [options.type]\n     * @returns {any}\n     */\n    _formatValue(value, options) {\n        if (!value) {\n            return false;\n        }\n        const { type, interval, relation } = options;\n        if ([\"date\", \"datetime\"].includes(type)) {\n            const fmt = SampleServer.FORMATS[interval];\n            return parseDate(value).toFormat(fmt);\n        } else if (type === \"many2one\") {\n            const rec = this.data[relation].records.find(({ id }) => id === value);\n            return [value, rec.display_name];\n        } else {\n            return value;\n        }\n    }\n\n    /**\n     * Generates field values based on heuristics according to field types\n     * and names.\n     *\n     * @private\n     * @param {string} modelName\n     * @param {string} fieldName\n     * @param {number} id the record id\n     * @returns {any} the field value\n     */\n    _generateFieldValue(modelName, fieldName, id) {\n        const field = this.data[modelName].fields[fieldName];\n        switch (field.type) {\n            case \"boolean\":\n                return fieldName === \"active\" ? true : this._getRandomBool();\n            case \"char\":\n            case \"text\":\n                if ([\"display_name\", \"name\"].includes(fieldName)) {\n                    if (SampleServer.PEOPLE_MODELS.includes(modelName)) {\n                        return getSampleFromId(id, SampleServer.SAMPLE_PEOPLE);\n                    } else if (modelName === \"res.country\") {\n                        return getSampleFromId(id, SampleServer.SAMPLE_COUNTRIES);\n                    }\n                }\n                if (fieldName === \"display_name\") {\n                    return getSampleFromId(id, SampleServer.SAMPLE_TEXTS);\n                } else if ([\"name\", \"reference\"].includes(fieldName)) {\n                    return `REF${String(id).padStart(4, \"0\")}`;\n                } else if (DESCRIPTION_REGEX.test(fieldName)) {\n                    return getSampleFromId(id, SampleServer.SAMPLE_TEXTS);\n                } else if (EMAIL_REGEX.test(fieldName)) {\n                    const emailName = getSampleFromId(id, SampleServer.SAMPLE_PEOPLE)\n                        .replace(/ /, \".\")\n                        .toLowerCase();\n                    return `${emailName}@sample.demo`;\n                } else if (PHONE_REGEX.test(fieldName)) {\n                    return `+1 555 754 ${String(id).padStart(4, \"0\")}`;\n                } else if (URL_REGEX.test(fieldName)) {\n                    return `http://sample${id}.com`;\n                }\n                return false;\n            case \"date\":\n            case \"datetime\":\n                const datetime = this._getRandomDate();\n                return field.type === \"date\" ? serializeDate(datetime): serializeDateTime(datetime);\n            case \"float\":\n                return this._getRandomFloat(SampleServer.MAX_FLOAT);\n            case \"integer\": {\n                let max = SampleServer.MAX_INTEGER;\n                if (fieldName.includes(\"color\")) {\n                    max = this._getRandomBool() ? SampleServer.MAX_COLOR_INT : 0;\n                }\n                return this._getRandomInt(max);\n            }\n            case \"monetary\":\n                return this._getRandomInt(SampleServer.MAX_MONETARY);\n            case \"many2one\":\n                if (field.relation === \"res.currency\") {\n                    /** @todo return session.company_currency_id */\n                    return 1;\n                }\n                if (field.relation === \"ir.attachment\") {\n                    return false;\n                }\n                return this._getRandomSubRecordId();\n            case \"one2many\":\n            case \"many2many\": {\n                const ids = [this._getRandomSubRecordId(), this._getRandomSubRecordId()];\n                return [...new Set(ids)];\n            }\n            case \"selection\": {\n                // I hoped we wouldn't have to implement such special cases, but here it is.\n                // If this (mail) field is set, 'Warning' is displayed instead of the last\n                // activity, and we don't want to see a bunch of 'Warning's in a list. In the\n                // future, if we have to implement several special cases like that, we'll setup\n                // a proper hook to allow external modules to define extensions of this function.\n                // For now, as we have only one use case, I guess that doing it here is fine.\n                if (fieldName === \"activity_exception_decoration\") {\n                    return false;\n                }\n                if (field.selection.length > 0) {\n                    return this._getRandomArrayEl(field.selection)[0];\n                }\n                return false;\n            }\n            default:\n                return false;\n        }\n    }\n\n    /**\n     * @private\n     * @param {any[]} array\n     * @returns {any}\n     */\n    _getRandomArrayEl(array) {\n        return array[Math.floor(Math.random() * array.length)];\n    }\n\n    /**\n     * @private\n     * @returns {boolean}\n     */\n    _getRandomBool() {\n        return Math.random() < 0.5;\n    }\n\n    /**\n     * @private\n     * @returns {DateTime}\n     */\n    _getRandomDate() {\n        const delta = Math.floor((Math.random() - Math.random()) * SampleServer.DATE_DELTA);\n        return luxon.DateTime.local().plus({ hours: delta });\n    }\n\n    /**\n     * @private\n     * @param {number} max\n     * @returns {number} float in [O, max[\n     */\n    _getRandomFloat(max) {\n        return this._sanitizeNumber(Math.random() * max);\n    }\n\n    /**\n     * @private\n     * @param {number} max\n     * @returns {number} int in [0, max[\n     */\n    _getRandomInt(max) {\n        return Math.floor(Math.random() * max);\n    }\n\n    /**\n     * @private\n     * @returns {number} id in [1, SUB_RECORDSET_SIZE]\n     */\n    _getRandomSubRecordId() {\n        return Math.floor(Math.random() * SampleServer.SUB_RECORDSET_SIZE) + 1;\n    }\n    /**\n     * Mocks calls to the read method.\n     * @private\n     * @param {Object} params\n     * @param {string} params.model\n     * @param {Array[]} params.args (args[0] is the list of ids, args[1] is\n     *   the list of fields)\n     * @returns {Object[]}\n     */\n    _mockRead(params) {\n        const model = this.data[params.model];\n        const ids = params.args[0];\n        const fieldNames = params.args[1];\n        const records = [];\n        for (const r of model.records) {\n            if (!ids.includes(r.id)) {\n                continue;\n            }\n            const record = { id: r.id };\n            for (const fieldName of fieldNames) {\n                const field = model.fields[fieldName];\n                if (!field) {\n                    record[fieldName] = false; // unknown field\n                } else if (field.type === \"many2one\") {\n                    const relModel = this.data[field.relation];\n                    const relRecord = relModel.records.find((relR) => r[fieldName] === relR.id);\n                    record[fieldName] = relRecord ? [relRecord.id, relRecord.display_name] : false;\n                } else {\n                    record[fieldName] = r[fieldName];\n                }\n            }\n            records.push(record);\n        }\n        return records;\n    }\n\n    /**\n     * Mocks calls to the read_group method.\n     *\n     * @param {Object} params\n     * @param {string} params.model\n     * @param {string[]} [params.fields] defaults to the list of all fields\n     * @param {string[]} params.groupBy\n     * @param {boolean} [params.lazy=true]\n     * @returns {Object[]} Object with keys groups and length\n     */\n    _mockReadGroup(params) {\n        const lazy = \"lazy\" in params ? params.lazy : true;\n        const model = params.model;\n        const fields = this.data[model].fields;\n        const records = this.data[model].records;\n\n        const normalizedGroupBys = [];\n        let groupBy = [];\n        if (params.groupBy.length) {\n            groupBy = lazy ? [params.groupBy[0]] : params.groupBy;\n        }\n        for (const groupBySpec of groupBy) {\n            let [fieldName, interval] = groupBySpec.split(\":\");\n            interval = interval || \"month\";\n            const { type, relation } = fields[fieldName];\n            if (type) {\n                const gb = { fieldName, type, interval, relation, alias: groupBySpec };\n                normalizedGroupBys.push(gb);\n            }\n        }\n        const groups = arrayGroupBy(records, (record) => {\n            const vals = {};\n            for (const gb of normalizedGroupBys) {\n                const { fieldName, type } = gb;\n                let value;\n                if ([\"date\", \"datetime\"].includes(type)) {\n                    value = this._formatValue(record[fieldName], gb);\n                } else {\n                    value = record[fieldName];\n                }\n                vals[fieldName] = value;\n            }\n            return JSON.stringify(vals);\n        });\n        const measures = [];\n        for (const measureSpec of params.fields || Object.keys(fields)) {\n            const matches = measureSpec.match(MEASURE_SPEC_REGEX);\n            const { fieldName, aggregateFunction, measure } = (matches && matches.groups) || {};\n            if (!fieldName && !measure) {\n                continue; // this is for _count measure\n            }\n            const fName = fieldName || measure;\n            const { type } = fields[fName];\n            if (\n                !params.groupBy.includes(fName) &&\n                type &&\n                (type !== \"many2one\" || aggregateFunction !== \"count_distinct\")\n            ) {\n                measures.push({ fieldName: fName, type });\n            }\n        }\n\n        let result = [];\n        for (const id in groups) {\n            const records = groups[id];\n            const group = { __domain: [] };\n            let countKey = `__count`;\n            if (normalizedGroupBys.length && lazy) {\n                countKey = `${normalizedGroupBys[0].fieldName}_count`;\n            }\n            group[countKey] = records.length;\n            const firstElem = records[0];\n            for (const gb of normalizedGroupBys) {\n                const { alias, fieldName } = gb;\n                group[alias] = this._formatValue(firstElem[fieldName], gb);\n            }\n            Object.assign(group, this._aggregateFields(measures, records));\n            result.push(group);\n        }\n        if (normalizedGroupBys.length > 0) {\n            const { alias, interval, type } = normalizedGroupBys[0];\n            result = arraySortBy(result, (group) => {\n                const val = group[alias];\n                if ([\"date\", \"datetime\"].includes(type)) {\n                    return parseDate(val, { format: SampleServer.FORMATS[interval] });\n                }\n                return val;\n            });\n        }\n        return result;\n    }\n\n    /**\n     * Mocks calls to the read_progress_bar method.\n     * @private\n     * @param {Object} params\n     * @param {string} params.model\n     * @param {Object} params.kwargs\n     * @return {Object}\n     */\n    _mockReadProgressBar(params) {\n        const groupBy = params.kwargs.group_by;\n        const progress_bar = params.kwargs.progress_bar;\n        const groupByField = this.data[params.model].fields[groupBy];\n        const data = {};\n        for (const record of this.data[params.model].records) {\n            let groupByValue = record[groupBy];\n            if (groupByField.type === \"many2one\") {\n                const relatedRecords = this.data[groupByField.relation].records;\n                const relatedRecord = relatedRecords.find((r) => r.id === groupByValue);\n                groupByValue = relatedRecord.display_name;\n            }\n            // special case for bool values: rpc call response with capitalized strings\n            if (!(groupByValue in data)) {\n                if (groupByValue === true) {\n                    groupByValue = \"True\";\n                } else if (groupByValue === false) {\n                    groupByValue = \"False\";\n                }\n            }\n            if (!(groupByValue in data)) {\n                data[groupByValue] = {};\n                for (const key in progress_bar.colors) {\n                    data[groupByValue][key] = 0;\n                }\n            }\n            const fieldValue = record[progress_bar.field];\n            if (fieldValue in data[groupByValue]) {\n                data[groupByValue][fieldValue]++;\n            }\n        }\n        return data;\n    }\n\n    /**\n     * Mocks calls to the /web/dataset/search_read route to return sample\n     * records.\n     * @private\n     * @param {Object} params\n     * @param {string} params.model\n     * @param {string[]} params.fields\n     * @returns {{ records: Object[], length: number }}\n     */\n    _mockSearchReadController(params) {\n        const model = this.data[params.model];\n        const rawRecords = model.records.slice(0, SampleServer.SEARCH_READ_LIMIT);\n        const records = this._mockRead({\n            model: params.model,\n            args: [rawRecords.map((r) => r.id), params.fields],\n        });\n        return { records, length: records.length };\n    }\n\n    /**\n     * Mocks calls to the web_read_group method to return groups populated\n     * with sample records. Only handles the case where the real call to\n     * web_read_group returned groups, but none of these groups contain\n     * records. In this case, we keep the real groups, and populate them\n     * with sample records.\n     * @private\n     * @param {Object} params\n     * @param {Object} [result] the result of a real call to web_read_group\n     * @returns {{ groups: Object[], length: number }}\n     */\n    _mockWebReadGroup(params) {\n        let groups;\n        if (this.existingGroups) {\n            this._tweakExistingGroups(params);\n            groups = this.existingGroups;\n        } else {\n            groups = this._mockReadGroup(params);\n        }\n        return {\n            groups,\n            length: groups.length,\n        };\n    }\n\n    /**\n     * Updates the sample data such that the existing groups (in database)\n     * also exists in the sample, and such that there are sample records in\n     * those groups.\n     * @private\n     * @param {Object[]} groups empty groups returned by the server\n     * @param {Object} params\n     * @param {string} params.model\n     * @param {string[]} params.groupBy\n     */\n    _populateExistingGroups(params) {\n        if (!this.existingGroupsPopulated) {\n            const groups = this.existingGroups;\n            this.groupsInfo = groups;\n            const groupBy = params.groupBy[0];\n            const values = groups.map((g) => g[groupBy]);\n            const groupByField = this.data[params.model].fields[groupBy];\n            const groupedByM2O = groupByField.type === \"many2one\";\n            if (groupedByM2O) {\n                // re-populate co model with relevant records\n                this.data[groupByField.relation].records = values.map((v) => {\n                    return { id: v[0], display_name: v[1] };\n                });\n            }\n            for (const r of this.data[params.model].records) {\n                const value = getSampleFromId(r.id, values);\n                r[groupBy] = groupedByM2O ? value[0] : value;\n            }\n            this.existingGroupsPopulated = true;\n        }\n    }\n\n    /**\n     * Generates sample records for the models in this.data. Records will be\n     * generated once, and subsequent calls to this function will be skipped.\n     * @private\n     */\n    _populateModels() {\n        if (!this.populated) {\n            for (const modelName in this.data) {\n                const model = this.data[modelName];\n                const fieldNames = Object.keys(model.fields).filter((f) => f !== \"id\");\n                const size =\n                    modelName === this.mainModel\n                        ? SampleServer.MAIN_RECORDSET_SIZE\n                        : SampleServer.SUB_RECORDSET_SIZE;\n                for (let id = 1; id <= size; id++) {\n                    const record = { id };\n                    for (const fieldName of fieldNames) {\n                        record[fieldName] = this._generateFieldValue(modelName, fieldName, id);\n                    }\n                    model.records.push(record);\n                }\n            }\n            this.populated = true;\n        }\n    }\n\n    /**\n     * Rounds the given number value according to the configured precision.\n     * @private\n     * @param {number} value\n     * @returns {number}\n     */\n    _sanitizeNumber(value) {\n        return parseFloat(value.toFixed(SampleServer.FLOAT_PRECISION));\n    }\n\n    /**\n     * A real (web_)read_group call has been done, and it has returned groups,\n     * but they are all empty. This function updates the sample data such\n     * that those group values exist and those groups contain sample records.\n     * @private\n     * @param {Object[]} groups empty groups returned by the server\n     * @param {Object} params\n     * @param {string} params.model\n     * @param {string[]} params.fields\n     * @param {string[]} params.groupBy\n     * @returns {Object[]} groups with count and aggregate values updated\n     *\n     * TODO: rename\n     */\n    _tweakExistingGroups(params) {\n        const groups = this.existingGroups;\n        this._populateExistingGroups(params);\n\n        // update count and aggregates for each group\n        const groupBy = params.groupBy[0].split(\":\")[0];\n        const groupByField = this.data[params.model].fields[groupBy];\n        const groupedByM2O = groupByField.type === \"many2one\";\n        const records = this.data[params.model].records;\n        for (const g of groups) {\n            const groupValue = groupedByM2O ? g[groupBy][0] : g[groupBy];\n            const recordsInGroup = records.filter((r) => r[groupBy] === groupValue);\n            g[`${groupBy}_count`] = recordsInGroup.length;\n            for (const field of params.fields) {\n                const fieldType = this.data[params.model].fields[field].type;\n                if ([\"integer, float\", \"monetary\"].includes(fieldType)) {\n                    g[field] = recordsInGroup.reduce((acc, r) => acc + r[field], 0);\n                }\n            }\n            g.__data = {\n                records: this._mockRead({\n                    model: params.model,\n                    args: [recordsInGroup.map((r) => r.id), params.fields],\n                }),\n                length: recordsInGroup.length,\n            };\n        }\n    }\n}\n\nSampleServer.FORMATS = {\n    day: \"yyyy-MM-dd\",\n    week: \"'W'WW kkkk\",\n    month: \"MMMM yyyy\",\n    quarter: \"'Q'q yyyy\",\n    year: \"y\",\n};\nSampleServer.DISPLAY_FORMATS = Object.assign({}, SampleServer.FORMATS, { day: \"dd MMM yyyy\" });\n\nSampleServer.MAIN_RECORDSET_SIZE = 16;\nSampleServer.SUB_RECORDSET_SIZE = 5;\nSampleServer.SEARCH_READ_LIMIT = 10;\n\nSampleServer.MAX_FLOAT = 100;\nSampleServer.MAX_INTEGER = 50;\nSampleServer.MAX_COLOR_INT = 7;\nSampleServer.MAX_MONETARY = 100000;\nSampleServer.DATE_DELTA = 24 * 60; // in hours -> 60 days\nSampleServer.FLOAT_PRECISION = 2;\n\nSampleServer.SAMPLE_COUNTRIES = [\"Belgium\", \"France\", \"Portugal\", \"Singapore\", \"Australia\"];\nSampleServer.SAMPLE_PEOPLE = [\n    \"John Miller\",\n    \"Henry Campbell\",\n    \"Carrie Helle\",\n    \"Wendi Baltz\",\n    \"Thomas Passot\",\n];\nSampleServer.SAMPLE_TEXTS = [\n    \"Laoreet id\",\n    \"Volutpat blandit\",\n    \"Integer vitae\",\n    \"Viverra nam\",\n    \"In massa\",\n];\nSampleServer.PEOPLE_MODELS = [\n    \"res.users\",\n    \"res.partner\",\n    \"hr.employee\",\n    \"mail.followers\",\n    \"mailing.contact\",\n];\n\nSampleServer.UnimplementedRouteError = UnimplementedRouteError;\n\nexport function buildSampleORM(resModel, fields, user) {\n    const sampleServer = new SampleServer(resModel, fields);\n    const fakeRPC = async (_, params) => {\n        const { kwargs, method, model } = params;\n        const { groupby: groupBy } = kwargs;\n        return sampleServer.mockRpc({ method, model, ...kwargs, groupBy });\n    };\n    return new ORM(fakeRPC, user);\n}\n", "/** @odoo-module **/\n\n// TODO: add this in info props description\n\n// breadcrumbs: { type: Array, optional: 1 },\n// __getLocalState__: { type: CallbackRecorder, optional: 1 },\n// __getContext__: { type: CallbackRecorder, optional: 1 },\n// display: { type: Object, optional: 1 },\n// displayName: { type: String, optional: 1 },\n// noContentHelp: { type: String, optional: 1 },\n// searchViewId: { type: [Number, false], optional: 1 },\n// viewId: { type: [Number, false], optional: 1 },\n// views: { type: Array, element: Array, optional: 1 },\n// viewSwitcherEntries: { type: Array, optional: 1 },\n\nexport const standardViewProps = {\n    info: {\n        type: Object,\n    },\n    resModel: String,\n    arch: { type: String },\n    comparison: { validate: () => true }, // fix problem with validation with type: [Object, null]\n    // Issue OWL: https://github.com/odoo/owl/issues/910\n    context: { type: Object },\n    domain: { type: Array },\n    fields: { type: Object, elements: Object },\n    groupBy: { type: Array, elements: String },\n    limit: { type: Number, optional: 1 },\n    orderBy: { type: Array, elements: String },\n    useSampleModel: { type: Boolean },\n    state: { type: Object, optional: 1 },\n    globalState: { type: Object, optional: 1 },\n    resId: { type: Number, optional: 1 },\n    resIds: { type: Array, optional: 1 },\n    bannerRoute: { type: String, optional: 1 },\n};\n", "/** @odoo-module **/\nimport { _t } from \"@web/core/l10n/translation\";\n/**\n * Parse the arch to check if is true or false\n * If the string is empyt, 0, False or false it's considered as false\n * The rest is considered as true\n *\n * @param {string} str\n * @returns {boolean}\n */\nexport const archParseBoolean = (str) => {\n    return str !== \"False\" && str !== \"false\" && str !== \"0\" && str !== \"\";\n};\n\n/**\n * TODO: doc\n *\n * @param {Object} fields\n * @param {Object} fieldAttrs\n * @param {string[]} activeMeasures\n * @param {string[]} [additionalMeasures=[]]\n * @returns {Object}\n */\nexport const computeReportMeasures = (\n    fields,\n    fieldAttrs,\n    activeMeasures,\n    additionalMeasures = []\n) => {\n    const measures = {\n        __count: { name: \"__count\", string: _t(\"Count\"), type: \"integer\" },\n    };\n    for (const [fieldName, field] of Object.entries(fields)) {\n        if (fieldName === \"id\" || !field.store) {\n            continue;\n        }\n        const { isInvisible } = fieldAttrs[fieldName] || {};\n        if (isInvisible && !additionalMeasures.includes(fieldName)) {\n            continue;\n        }\n        if (\n            [\"integer\", \"float\", \"monetary\"].includes(field.type) ||\n            additionalMeasures.includes(fieldName)\n        ) {\n            measures[fieldName] = field;\n        }\n    }\n\n    // add active measures to the measure list.  This is very rarely\n    // necessary, but it can be useful if one is working with a\n    // functional field non stored, but in a model with an overridden\n    // read_group method.  In this case, the pivot view could work, and\n    // the measure should be allowed.  However, be careful if you define\n    // a measure in your pivot view: non stored functional fields will\n    // probably not work (their aggregate will always be 0).\n    for (const measure of activeMeasures) {\n        if (!measures[measure]) {\n            measures[measure] = fields[measure];\n        }\n    }\n\n    for (const fieldName in fieldAttrs) {\n        if (fieldAttrs[fieldName].string && fieldName in measures) {\n            measures[fieldName].string = fieldAttrs[fieldName].string;\n        }\n    }\n\n    const sortedMeasures = Object.entries(measures).sort(([m1, f1], [m2, f2]) => {\n        if (m1 === \"__count\" || m2 === \"__count\") {\n            return m1 === \"__count\" ? 1 : -1; // Count is always last\n        }\n        return f1.string.toLowerCase().localeCompare(f2.string.toLowerCase());\n    });\n\n    return Object.fromEntries(sortedMeasures);\n};\n\n/**\n * In the preview implementation of reporting views, the virtual field used to\n * display the number of records was named __count__, whereas __count is\n * actually the one used in xml. So basically, activating a filter specifying\n * __count as measures crashed. Unfortunately, as __count__ was used in the JS,\n * all filters saved as favorite at that time were saved with __count__, and\n * not __count. So in order the make them still work with the new\n * implementation, we handle both __count__ and __count.\n *\n * This function replaces occurences of '__count__' by '__count' in the given\n * element(s).\n *\n * @param {any | any[]} [measures]\n * @returns {any}\n */\nexport const processMeasure = (measure) => {\n    if (Array.isArray(measure)) {\n        return measure.map(processMeasure);\n    }\n    return measure === \"__count__\" ? \"__count\" : measure;\n};\n", "/** @odoo-module **/\n\nimport { useDebugCategory } from \"@web/core/debug/debug_context\";\nimport { useSetupAction } from \"@web/webclient/actions/action_hook\";\nimport { registry } from \"@web/core/registry\";\nimport { useListener, useService } from \"@web/core/utils/hooks\";\nimport { evaluateExpr } from \"@web/core/py_js/py\";\n\nconst { useComponent } = owl.hooks;\n\nexport function useSetupView(params) {\n    const component = useComponent();\n    useDebugCategory(\"view\", { component });\n    useSetupAction(params);\n}\n\nexport function useViewArch(arch, params = {}) {\n    const CATEGORY = \"__processed_archs__\";\n\n    arch = arch.trim();\n    const processedRegistry = registry.category(CATEGORY);\n\n    let processedArch;\n    if (!processedRegistry.contains(arch)) {\n        processedArch = {};\n        processedRegistry.add(arch, processedArch);\n    } else {\n        processedArch = processedRegistry.get(arch);\n    }\n\n    const { compile, extract } = params;\n    if (!(\"template\" in processedArch) && compile) {\n        processedArch.template = owl.tags.xml`${compile(arch)}`;\n    }\n    if (!(\"extracted\" in processedArch) && extract) {\n        processedArch.extracted = extract(arch);\n    }\n\n    return processedArch;\n}\n\n/**\n * Allows for a component (usually a View component) to handle links with\n * attribute type=\"action\". This is used to support onboarding banners and content helpers.\n *\n * A @web/core/concurrency:KeepLast must be present in the owl environment to allow coordinating\n * between clicks. (env.keepLast)\n *\n * Note that this is similar but quite different from action buttons, since action links\n * are not dynamic according to the record.\n * @param {Object} params\n * @param  {String} params.resModel The default resModel to which actions will apply\n * @param  {Function} [params.reload] The function to execute to reload, if a button has data-reload-on-close\n */\nexport function useActionLinks({ resModel, reload }) {\n    const selector = `a[type=\"action\"]`;\n    const component = owl.hooks.useComponent();\n    const keepLast = component.env.keepLast;\n\n    const orm = useService(\"orm\");\n    const { doAction } = useService(\"action\");\n\n    function checkAndCollapseBootstrap(target) {\n        // the handler should have stopped the Event\n        // But we still need to alert bootstrap if we need to\n        // This function should be removed when we get rid of bootstrap as a JS framework\n        if (target.dataset.toggle === \"collapse\") {\n            $(target).trigger(\"click.bs.collapse.data-api\");\n        }\n    }\n\n    async function handler(ev) {\n        ev.preventDefault();\n        ev.stopPropagation();\n        let target = ev.target;\n        if (target.tagName !== \"A\") {\n            target = target.closest(\"a\");\n        }\n        const data = target.dataset;\n\n        if (data.method !== undefined && data.model !== undefined) {\n            const options = {};\n            if (data.reloadOnClose) {\n                options.onClose = reload || (() => component.render());\n            }\n            const action = await keepLast.add(orm.call(data.model, data.method));\n            if (action !== undefined) {\n                keepLast.add(Promise.resolve(doAction(action, options)));\n            }\n        } else if (target.getAttribute(\"name\")) {\n            const options = {};\n            if (data.context) {\n                options.additionalContext = evaluateExpr(data.context);\n            }\n            keepLast.add(doAction(target.getAttribute(\"name\"), options));\n        } else {\n            let views;\n            const resId = data.resid ? parseInt(data.resid, 10) : null;\n            if (data.views) {\n                views = evaluateExpr(data.views);\n            } else {\n                views = resId\n                    ? [[false, \"form\"]]\n                    : [\n                          [false, \"list\"],\n                          [false, \"form\"],\n                      ];\n            }\n\n            const action = {\n                name: target.getAttribute(\"title\") || target.textContent.trim(),\n                type: \"ir.actions.act_window\",\n                res_model: data.model || resModel,\n                target: \"current\", // TODO: make customisable?\n                views,\n                domain: data.domain ? evaluateExpr(data.domain) : [],\n            };\n            if (resId) {\n                action.res_id = resId;\n            }\n\n            const options = {};\n            if (data.context) {\n                options.additionalContext = evaluateExpr(data.context);\n            }\n            keepLast.add(doAction(action, options));\n        }\n        checkAndCollapseBootstrap(target);\n    }\n\n    useListener(\"click\", selector, handler);\n}\n", "/** @odoo-module **/\n\nimport { ControlPanel } from \"@web/search/control_panel/control_panel\";\nimport { SearchPanel } from \"@web/search/search_panel/search_panel\";\n\nconst { Component } = owl;\n\n/**\n * @param {Object} params\n * @returns {Object}\n */\nexport const extractLayoutComponents = (params) => {\n    return {\n        ControlPanel: params.ControlPanel || ControlPanel,\n        SearchPanel: params.SearchPanel || SearchPanel,\n        Banner: params.Banner || false,\n    };\n};\n\nexport class Layout extends Component {\n    setup() {\n        const { display = {} } = this.env.searchModel || {};\n        this.components = extractLayoutComponents(this.env.config);\n        this.display = display;\n    }\n}\n\nLayout.template = \"web.Layout\";\nLayout.props = {\n    viewType: { type: String, optional: true },\n    useSampleModel: { type: Boolean, optional: true },\n};\n", "/**@odoo-module */\n\nimport { loadAssets } from \"@web/core/assets\";\nimport { useService } from \"@web/core/utils/hooks\";\nimport { useActionLinks } from \"@web/views/helpers/view_hook\";\n\nexport class OnboardingBanner extends owl.Component {\n    setup() {\n        this.rpc = useService(\"rpc\");\n        this.user = useService(\"user\");\n        const resModel = \"searchModel\" in this.env ? this.env.searchModel.resModel : undefined;\n        useActionLinks({\n            resModel,\n            reload: async () => {\n                this.bannerHTML = await this.loadBanner(this.env.config.bannerRoute);\n                this.render();\n            },\n        });\n    }\n\n    async willStart() {\n        this.bannerHTML = await this.loadBanner(this.env.config.bannerRoute);\n    }\n\n    async loadBanner(bannerRoute) {\n        const response = await this.rpc(bannerRoute, { context: this.user.context });\n        if (!response.html) {\n            return;\n        }\n\n        const banner = new DOMParser().parseFromString(response.html, \"text/html\");\n        const assets = {\n            jsLibs: [],\n            cssLibs: [],\n        };\n        banner\n            .querySelectorAll(`link[rel=\"stylesheet\"] , script[type=\"text/javascript\"]`)\n            .forEach((elem) => {\n                if (elem.tagName === \"SCRIPT\") {\n                    assets.jsLibs.push(elem.src);\n                } else if (elem.tagName === \"LINK\") {\n                    assets.cssLibs.push(elem.href);\n                }\n                elem.remove();\n            });\n        await loadAssets(assets);\n        return new XMLSerializer().serializeToString(banner);\n    }\n}\n\nOnboardingBanner.template = owl.tags.xml`<div class=\"w-100\" t-raw=\"bannerHTML\" />`;\nOnboardingBanner.props = {};\n", "/** @odoo-module **/\n\nimport { evaluateExpr } from \"@web/core/py_js/py\";\nimport { XMLParser } from \"@web/core/utils/xml\";\nimport { archParseBoolean } from \"@web/views/helpers/utils\";\n\nexport class PivotArchParser extends XMLParser {\n    parse(arch) {\n        const archInfo = {\n            activeMeasures: [], // store the defined active measures\n            colGroupBys: [], // store the defined group_by used on cols\n            defaultOrder: null,\n            fieldAttrs: {},\n            rowGroupBys: [], // store the defined group_by used on rows\n            widgets: {}, // wigdets defined in the arch\n        };\n\n        this.visitXML(arch, (node) => {\n            switch (node.tagName) {\n                case \"pivot\": {\n                    if (node.hasAttribute(\"disable_linking\")) {\n                        archInfo.disableLinking = archParseBoolean(\n                            node.getAttribute(\"disable_linking\")\n                        );\n                    }\n                    if (node.hasAttribute(\"default_order\")) {\n                        archInfo.defaultOrder = node.getAttribute(\"default_order\");\n                    }\n                    if (node.hasAttribute(\"string\")) {\n                        archInfo.title = node.getAttribute(\"string\");\n                    }\n                    if (node.hasAttribute(\"display_quantity\")) {\n                        archInfo.displayQuantity = archParseBoolean(\n                            node.getAttribute(\"display_quantity\")\n                        );\n                    }\n                    break;\n                }\n                case \"field\": {\n                    let fieldName = node.getAttribute(\"name\"); // exists (rng validation)\n\n                    archInfo.fieldAttrs[fieldName] = {};\n                    if (node.hasAttribute(\"string\")) {\n                        archInfo.fieldAttrs[fieldName].string = node.getAttribute(\"string\");\n                    }\n                    if (node.hasAttribute(\"invisible\")) {\n                        const isInvisible = Boolean(evaluateExpr(node.getAttribute(\"invisible\")));\n                        if (isInvisible) {\n                            archInfo.fieldAttrs[fieldName].isInvisible = true;\n                            break;\n                        }\n                    }\n\n                    if (node.hasAttribute(\"interval\")) {\n                        fieldName += \":\" + node.getAttribute(\"interval\");\n                    }\n                    if (node.hasAttribute(\"widget\")) {\n                        archInfo.widgets[fieldName] = node.getAttribute(\"widget\");\n                    }\n                    if (node.getAttribute(\"type\") === \"measure\" || node.hasAttribute(\"operator\")) {\n                        archInfo.activeMeasures.push(fieldName);\n                    }\n                    if (node.getAttribute(\"type\") === \"col\") {\n                        archInfo.colGroupBys.push(fieldName);\n                    }\n                    if (node.getAttribute(\"type\") === \"row\") {\n                        archInfo.rowGroupBys.push(fieldName);\n                    }\n                    break;\n                }\n            }\n        });\n\n        return archInfo;\n    }\n}\n", "/** @odoo-module */\n\nimport { GroupByMenu } from \"@web/search/group_by_menu/group_by_menu\";\nimport { getIntervalOptions } from \"@web/search/utils/dates\";\n\nexport class PivotGroupByMenu extends GroupByMenu {\n    /**\n     * @override\n     * @returns {Object[]}\n     */\n    get items() {\n        let items = super.items.filter((i) => !i.custom);\n        if (items.length === 0) {\n            items = this.fields;\n        }\n\n        // Add custom groupbys\n        let groupNumber = 1 + Math.max(0, ...items.map(({ groupNumber: n }) => n));\n        for (const [fieldName, customGroupBy] of this.props.customGroupBys.entries()) {\n            items.push({ ...customGroupBy, name: fieldName, groupNumber: groupNumber++ });\n        }\n\n        return items.map((item) => ({\n            ...item,\n            id: item.id || item.name,\n            fieldName: item.fieldName || item.name,\n            description: item.description || item.string,\n            isActive: false,\n            options:\n                item.options || [\"date\", \"datetime\"].includes(item.type)\n                    ? getIntervalOptions()\n                    : undefined,\n        }));\n    }\n    /**\n     * @override\n     * @param {CustomEvent} ev\n     */\n    onAddCustomGroup(ev) {\n        this.trigger(\"add-custom-group-by\", {\n            fieldName: ev.detail.fieldName,\n            groupId: this.props.cell.groupId,\n        });\n    }\n    /**\n     * @override\n     * @param {CustomEvent} ev\n     */\n    onGroupBySelected(ev) {\n        const { itemId, optionId } = ev.detail.payload;\n        const item = this.items.find(({ id }) => id === itemId);\n        // Augment payload data\n        Object.assign(ev.detail.payload, {\n            fieldName: item.fieldName,\n            interval: optionId,\n            groupId: this.props.cell.groupId,\n        });\n    }\n}\n", "/** @odoo-module **/\n\nimport { Domain } from \"@web/core/domain\";\nimport { cartesian, sections, sortBy, symmetricalDifference } from \"@web/core/utils/arrays\";\nimport { KeepLast, Race } from \"@web/core/utils/concurrency\";\nimport { computeVariation } from \"@web/core/utils/numbers\";\nimport { DEFAULT_INTERVAL } from \"@web/search/utils/dates\";\nimport { Model } from \"@web/views/helpers/model\";\nimport { computeReportMeasures, processMeasure } from \"@web/views/helpers/utils\";\n\n/**\n * Pivot Model\n *\n * The pivot model keeps an in-memory representation of the pivot table that is\n * displayed on the screen.  The exact layout of this representation is not so\n * simple, because a pivot table is at its core a 2-dimensional object, but\n * with a 'tree' component: some rows/cols can be expanded so we zoom into the\n * structure.\n *\n * However, we need to be able to manipulate the data in a somewhat efficient\n * way, and to transform it into a list of lines to be displayed by the renderer.\n *\n * Basicaly the pivot table presents aggregated values for various groups of records\n * in one domain. If a comparison is asked for, two domains are considered.\n *\n * Let us consider a simple example and let us fix the vocabulary (let us suppose we are in June 2020):\n * ___________________________________________________________________________________________________________________________________________\n * |                    |   Total                                                                                                             |\n * |                    |_____________________________________________________________________________________________________________________|\n * |                    |   Sale Team 1                         |  Sale Team 2                         |                                      |\n * |                    |_______________________________________|______________________________________|______________________________________|\n * |                    |   Sales total                         |  Sales total                         |  Sales total                         |\n * |                    |_______________________________________|______________________________________|______________________________________|\n * |                    |   May 2020   | June 2020  | Variation |  May 2020   | June 2020  | Variation |  May 2020   | June 2020  | Variation |\n * |____________________|______________|____________|___________|_____________|____________|___________|_____________|____________|___________|\n * | Total              |     85       |     110    |  29.4%    |     40      |    30      |   -25%    |    125      |    140     |     12%   |\n * |    Europe          |     25       |     35     |    40%    |     40      |    30      |   -25%    |     65      |     65     |      0%   |\n * |        Brussels    |      0       |     15     |   100%    |     30      |    30      |     0%    |     30      |     45     |     50%   |\n * |        Paris       |     25       |     20     |   -20%    |     10      |     0      |  -100%    |     35      |     20     |  -42.8%   |\n * |    North America   |     60       |     75     |    25%    |             |            |           |     60      |     75     |     25%   |\n * |        Washington  |     60       |     75     |    25%    |             |            |           |     60      |     75     |     25%   |\n * |____________________|______________|____________|___________|_____________|____________|___________|_____________|____________|___________|\n *\n *\n * META DATA:\n *\n * In the above pivot table, the records have been grouped using the fields\n *\n *      continent_id, city_id\n *\n * for rows and\n *\n *      sale_team_id\n *\n * for columns.\n *\n * The measure is the field 'sales_total'.\n *\n * Two domains are considered: 'May 2020' and 'June 2020'.\n *\n * In the model,\n *\n *      - rowGroupBys is the list [continent_id, city_id]\n *      - colGroupBys is the list [sale_team_id]\n *      - measures is the list [sales_total]\n *      - domains is the list [d1, d2] with d1 and d2 domain expressions\n *          for say sale_date in May 2020 and June 2020, for instance\n *          d1 = [['sale_date', >=, 2020-05-01], ['sale_date', '<=', 2020-05-31]]\n *      - origins is the list ['May 2020', 'June 2020']\n *\n * DATA:\n *\n * Recall that a group is constituted by records (in a given domain)\n * that have the same (raw) values for a list of fields.\n * Thus the group itself is identified by this list and the domain.\n * In comparison mode, the same group (forgetting the domain part or 'originIndex')\n * can be eventually found in the two domains.\n * This defines the way in which the groups are identified or not.\n *\n * In the above table, (forgetting the domain) the following groups are found:\n *\n *      the 'row groups'\n *      - Total\n *      - Europe\n *      - America\n *      - Europe, Brussels\n *      - Europe, Paris\n *      - America, Washington\n *\n *      the 'col groups'\n *\n *      - Total\n *      - Sale Team 1\n *      - Sale Team 2\n *\n *      and all non trivial combinations of row groups and col groups\n *\n *      - Europe, Sale Team 1\n *      - Europe, Brussels, Sale Team 2\n *      - America, Washington, Sale Team 1\n *      - ...\n *\n * The list of fields is created from the concatenation of two lists of fields, the first in\n *\n * [], [f1], [f1, f2], ... [f1, f2, ..., fn]  for [f1, f2, ..., fn] the full list of groupbys\n * (called rowGroupBys) used to create row groups\n *\n * In the example: [], [continent_id], [continent_id, city_id].\n *\n * and the second in\n * [], [g1], [g1, g2], ... [g1, g2, ..., gm]  for [g1, g2, ..., gm] the full list of groupbys\n * (called colGroupBys) used to create col groups.\n *\n * In the example: [], [sale_team_id].\n *\n * Thus there are (n+1)*(m+1) lists of fields possible.\n *\n * In the example: 6 lists possible, namely [],\n *                                          [continent_id], [sale_team_id],\n *                                          [continent_id, sale_team_id], [continent_id, city_id],\n *                                          [continent_id, city_id, sale_team_id]\n *\n * A given list is thus of the form [f1,..., fi, g1,..., gj] or better [[f1,...,fi], [g1,...,gj]]\n *\n * For each list of fields possible and each domain considered, one read_group is done\n * and gives results of the form (an exception for list [])\n *\n * g = {\n *  f1: v1, ..., fi: vi,\n *  g1: w1, ..., gj: wj,\n *  m1: x1, ..., mk: xk,\n *  __count: c,\n *  __domain: d\n * }\n *\n * where v1,...,vi,w1,...,Wj are 'values' for the corresponding fields and\n * m1,...,mk are the fields selected as measures.\n *\n * For example, g = {\n *      continent_id: [1, 'Europe']\n *      sale_team_id: [1, 'Sale Team 1']\n *      sales_count: 25,\n *      __count: 4\n *      __domain: [\n *                  ['sale_date', >=, 2020-05-01], ['sale_date', '<=', 2020-05-31],\n *                  ['continent_id', '=', 1],\n *                  ['sale_team_id', '=', 1]\n *                ]\n * }\n *\n * Thus the above group g is fully determined by [[v1,...,vi], [w1,...,wj]] and the base domain\n * or the corresponding 'originIndex'.\n *\n * When j=0, g corresponds to a row group (or also row header) and is of the form [[v1,...,vi], []] or more simply [v1,...vi]\n * (not forgetting the list [v1,...vi] comes from left).\n * When i=0, g corresponds to a col group (or col header) and is of the form [[], [w1,...,wj]] or more simply [w1,...,wj].\n *\n * A generic group g as above [[v1,...,vi], [w1,...,wj]] corresponds to the two headers [[v1,...,vi], []]\n * and [[], [w1,...,wj]].\n *\n * Here is a description of the data structure manipulated by the pivot model.\n *\n * Five objects contain all the data from the read_groups\n *\n *      - rowGroupTree: contains information on row headers\n *             the nodes correspond to the groups of the form [[v1,...,vi], []]\n *             The root is [[], []].\n *             A node [[v1,...,vl], []] has as direct children the nodes of the form [[v1,...,vl,v], []],\n *             this means that a direct child is obtained by grouping records using the single field fi+1\n *\n *             The structure at each level is of the form\n *\n *             {\n *                  root: {\n *                      values: [v1,...,vl],\n *                      labels: [la1,...,lal]\n *                  },\n *                  directSubTrees: {\n *                      v => {\n *                              root: {\n *                                  values: [v1,...,vl,v]\n *                                  labels: [label1,...,labell,label]\n *                              },\n *                              directSubTrees: {...}\n *                          },\n *                      v' => {...},\n *                      ...\n *                  }\n *             }\n *\n *             (directSubTrees is a Map instance)\n *\n *             In the example, the rowGroupTree is:\n *\n *             {\n *                  root: {\n *                      values: [],\n *                      labels: []\n *                  },\n *                  directSubTrees: {\n *                      1 => {\n *                              root: {\n *                                  values: [1],\n *                                  labels: ['Europe'],\n *                              },\n *                              directSubTrees: {\n *                                  1 => {\n *                                          root: {\n *                                              values: [1, 1],\n *                                              labels: ['Europe', 'Brussels'],\n *                                          },\n *                                          directSubTrees: new Map(),\n *                                  },\n *                                  2 => {\n *                                          root: {\n *                                              values: [1, 2],\n *                                              labels: ['Europe', 'Paris'],\n *                                          },\n *                                          directSubTrees: new Map(),\n *                                  },\n *                              },\n *                          },\n *                      2 => {\n *                              root: {\n *                                  values: [2],\n *                                  labels: ['America'],\n *                              },\n *                              directSubTrees: {\n *                                  3 => {\n *                                          root: {\n *                                              values: [2, 3],\n *                                              labels: ['America', 'Washington'],\n *                                          }\n *                                          directSubTrees: new Map(),\n *                                  },\n *                              },\n *                      },\n *                  },\n *             }\n *\n *      - colGroupTree: contains information on col headers\n *              The same as above with right instead of left\n *\n *      - measurements: contains information on measure values for all the groups\n *\n *              the object keys are of the form JSON.stringify([[v1,...,vi], [w1,...,wj]])\n *              and values are arrays of length equal to number of origins containing objects of the form\n *                  {m1: x1,...,mk: xk}\n *              The structure looks like\n *\n *              {\n *                  JSON.stringify([[], []]): [{m1: x1,...,mk: xk}, {m1: x1',...,mk: xk'},...]\n *                  ....\n *                  JSON.stringify([[v1,...,vi], [w1,...,wj]]): [{m1: y1',...,mk: yk'}, {m1: y1',...,mk: yk'},...],\n *                  ....\n *                  JSON.stringify([[v1,...,vn], [w1,...,wm]]): [{m1: z1',...,mk: zk'}, {m1: z1',...,mk: zk'},...],\n *              }\n *              Thus the structure contains all information for all groups and all origins on measure values.\n *\n *\n *              this.measurments[\"[[], []]\"][0]['foo'] gives the value of the measure 'foo' for the group 'Total' and the\n *              first domain (origin).\n *\n *              In the example:\n *                  {\n *                      \"[[], []]\": [{'sales_total': 125}, {'sales_total': 140}]                      (total/total)\n *                      ...\n *                      \"[[1, 2], [2]]\": [{'sales_total': 10}, {'sales_total': 0}]                   (Europe/Paris/Sale Team 2)\n *                      ...\n *                  }\n *\n *      - counts: contains information on the number of records in each groups\n *              The structure is similar to the above but the arrays contains numbers (counts)\n *      - groupDomains:\n *              The structure is similar to the above but the arrays contains domains\n *\n *      With this light data structures, all manipulation done by the model are eased and redundancies are limited.\n *      Each time a rendering or an export of the data has to be done, the pivot table is generated by the getTable function.\n */\n\n/**\n * @typedef Meta\n * @property {string[]} activeMeasures\n * @property {string[]} colGroupBys\n * @property {boolean} disableLinking\n * @property {Object} fields\n * @property {Object} measures\n * @property {string} resModel\n * @property {string[]} rowGroupBys\n * @property {string} title\n * @property {boolean} useSampleModel\n * @property {Object} widgets\n * @property {Map} customGroupBys\n * @property {string[]} expandedRowGroupBys\n * @property {string[]} expandedColGroupBys\n * @property {Object} sortedColumn\n * @property {Array[]} domains\n * @property {string[]} origins\n */\n\n/**\n * @typedef Data\n * @property {Object} colGroupTree\n * @property {Object} rowGroupTree\n * @property {Object} groupDomains\n * @property {Object} measurements\n * @property {Object} counts\n * @property {Object} numbering\n */\n\n/**\n * @typedef {import(\"@web/search/search_model\").SearchParams} SearchParams\n */\n\n/**\n * @typedef Config\n * @property {MetaData} metaData\n * @property {Data} data\n */\n\nexport class PivotModel extends Model {\n    /**\n     * @override\n     * @param {Object} params.metaData\n     * @param {string[]} params.metaData.activeMeasures\n     * @param {string[]} params.metaData.colGroupBys\n     * @param {Object} params.metaData.fields\n     * @param {Object[]} params.metaData.measures\n     * @param {string} params.metaData.resModel\n     * @param {string[]} params.metaData.rowGroupBys\n     * @param {string|null} params.metaData.defaultOrder\n     * @param {boolean} params.metaData.disableLinking\n     * @param {boolean} params.metaData.useSampleModel\n     * @param {Map} [params.metaData.customGroupBys={}]\n     * @param {string[]} [params.metaData.expandedColGroupBys=[]]\n     * @param {string[]} [params.metaData.expandedRowGroupBys=[]]\n     * @param {Object|null} [params.metaData.sortedColumn=null]\n     * @param {Object} [params.data] previously exported data\n     */\n    setup(params) {\n        // concurrency management\n        this.keepLast = new KeepLast();\n        this.race = new Race();\n        const _loadData = this._loadData.bind(this);\n        this._loadData = (...args) => {\n            return this.race.add(_loadData(...args));\n        };\n\n        let sortedColumn = params.metaData.sortedColumn || null;\n        if (!sortedColumn && params.metaData.defaultOrder) {\n            const defaultOrder = params.metaData.defaultOrder.split(\" \");\n            sortedColumn = {\n                groupId: [[], []],\n                measure: defaultOrder[0],\n                order: defaultOrder[1] ? defaultOrder[1] : \"asc\",\n            };\n        }\n\n        this.searchParams = {\n            context: {},\n            domain: [],\n            domains: [],\n            groupBy: [],\n        };\n        this.data = params.data || {\n            colGroupTree: null,\n            rowGroupTree: null,\n            groupDomains: {},\n            measurements: {},\n            counts: {},\n            numbering: {},\n        };\n        const metaData = Object.assign({}, params.metaData, {\n            customGroupBys: params.metaData.customGroupBys || new Map(),\n            expandedRowGroupBys: params.metaData.expandedRowGroupBys || [],\n            expandedColGroupBys: params.metaData.expandedColGroupBys || [],\n            sortedColumn,\n        });\n        this.metaData = this._buildMetaData(metaData);\n\n        this.reload = false; // used to discriminate between the first load and subsequent reloads\n        this.nextActiveMeasures = null; // allows to toggle several measures consecutively\n    }\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Add a groupBy to rowGroupBys or colGroupBys according to provided type.\n     *\n     * @param {Object} params\n     * @param {Array[]} params.groupId\n     * @param {string} params.fieldName\n     * @param {'row'|'col'} params.type\n     * @param {boolean} [params.custom=false]\n     * @param {string} [params.interval]\n     */\n    async addGroupBy(params) {\n        if (this.race.getCurrentProm()) {\n            return; // we are currently reloaded the table\n        }\n\n        const { groupId, fieldName, type, custom } = params;\n        let { interval } = params;\n        const metaData = this._buildMetaData();\n        if (custom && !metaData.customGroupBys.has(fieldName)) {\n            const field = metaData.fields[fieldName];\n            if (!interval && [\"date\", \"datetime\"].includes(field.type)) {\n                interval = DEFAULT_INTERVAL;\n            }\n            metaData.customGroupBys.set(fieldName, {\n                ...field,\n                id: fieldName,\n            });\n        }\n\n        let groupBy = fieldName;\n        if (interval) {\n            groupBy = `${groupBy}:${interval}`;\n        }\n        if (type === \"row\") {\n            metaData.expandedRowGroupBys.push(groupBy);\n        } else {\n            metaData.expandedColGroupBys.push(groupBy);\n        }\n        const config = { metaData, data: this.data };\n        await this._expandGroup(groupId, type, config);\n        this.metaData = metaData;\n        this.notify();\n    }\n    /**\n     * Close the group with id given by groupId. A type must be specified\n     * in case groupId is [[], []] (the id of the group 'Total') because this\n     * group is present in both colGroupTree and rowGroupTree.\n     *\n     * @param {Array[]} groupId\n     * @param {'row'|'col'} type\n     */\n    closeGroup(groupId, type) {\n        if (this.race.getCurrentProm()) {\n            return; // we are currently reloading the table\n        }\n\n        let groupBys;\n        let expandedGroupBys;\n        let keyPart;\n        let group;\n        let tree;\n        if (type === \"row\") {\n            groupBys = this.metaData.rowGroupBys;\n            expandedGroupBys = this.metaData.expandedRowGroupBys;\n            tree = this.data.rowGroupTree;\n            group = this._findGroup(this.data.rowGroupTree, groupId[0]);\n            keyPart = 0;\n        } else {\n            groupBys = this.metaData.colGroupBys;\n            expandedGroupBys = this.metaData.expandedColGroupBys;\n            tree = this.data.colGroupTree;\n            group = this._findGroup(this.data.colGroupTree, groupId[1]);\n            keyPart = 1;\n        }\n\n        const groupIdPart = groupId[keyPart];\n        const range = groupIdPart.map((_, index) => index);\n        function keep(key) {\n            const idPart = JSON.parse(key)[keyPart];\n            return (\n                range.some((index) => groupIdPart[index] !== idPart[index]) ||\n                idPart.length === groupIdPart.length\n            );\n        }\n        function omitKeys(object) {\n            const newObject = {};\n            for (const key in object) {\n                if (keep(key)) {\n                    newObject[key] = object[key];\n                }\n            }\n            return newObject;\n        }\n        this.data.measurements = omitKeys(this.data.measurements);\n        this.data.counts = omitKeys(this.data.counts);\n        this.data.groupDomains = omitKeys(this.data.groupDomains);\n\n        group.directSubTrees.clear();\n        delete group.sortedKeys;\n        var newGroupBysLength = this._getTreeHeight(tree) - 1;\n        if (newGroupBysLength <= groupBys.length) {\n            expandedGroupBys.splice(0);\n            groupBys.splice(newGroupBysLength);\n        } else {\n            expandedGroupBys.splice(newGroupBysLength - groupBys.length);\n        }\n        this.notify();\n    }\n    /**\n     * Reload the view with the current rowGroupBys and colGroupBys\n     * This is the easiest way to expand all the groups that are not expanded\n     */\n    async expandAll() {\n        const config = { metaData: this.metaData, data: this.data };\n        await this._loadData(config, false);\n        this.notify();\n    }\n    /**\n     * Expand a group by using groupBy to split it and trigger a re-rendering.\n     *\n     * @param {Object} group\n     * @param {'row'|'col'} type\n     */\n    async expandGroup(groupId, type) {\n        if (this.race.getCurrentProm()) {\n            return; // we are currently reloaded the table\n        }\n\n        const config = { metaData: this.metaData, data: this.data };\n        await this._expandGroup(groupId, type, config);\n        this.notify();\n    }\n    /**\n     * Export model data in a form suitable for an easy encoding of the pivot\n     * table in excell.\n     *\n     * @returns {Object}\n     */\n    exportData() {\n        const measureCount = this.metaData.activeMeasures.length;\n        const originCount = this.metaData.origins.length;\n\n        const table = this.getTable();\n\n        // process headers\n        const headers = table.headers;\n        let colGroupHeaderRows;\n        let measureRow = [];\n        let originRow = [];\n\n        function processHeader(header) {\n            const inTotalColumn = header.groupId[1].length === 0;\n            return {\n                title: header.title,\n                width: header.width,\n                height: header.height,\n                is_bold: !!header.measure && inTotalColumn,\n            };\n        }\n\n        if (originCount > 1) {\n            colGroupHeaderRows = headers.slice(0, headers.length - 2);\n            measureRow = headers[headers.length - 2].map(processHeader);\n            originRow = headers[headers.length - 1].map(processHeader);\n        } else {\n            colGroupHeaderRows = headers.slice(0, headers.length - 1);\n            measureRow = headers[headers.length - 1].map(processHeader);\n        }\n\n        // remove the empty headers on left side\n        colGroupHeaderRows[0].splice(0, 1);\n\n        colGroupHeaderRows = colGroupHeaderRows.map((headerRow) => {\n            return headerRow.map(processHeader);\n        });\n\n        // process rows\n        const tableRows = table.rows.map((row) => {\n            return {\n                title: row.title,\n                indent: row.indent,\n                values: row.subGroupMeasurements.map((measurement) => {\n                    let value = measurement.value;\n                    if (value === undefined) {\n                        value = \"\";\n                    } else if (measurement.originIndexes.length > 1) {\n                        // in that case the value is a variation and a\n                        // number between 0 and 1\n                        value = value * 100;\n                    }\n                    return {\n                        is_bold: measurement.isBold,\n                        value: value,\n                    };\n                }),\n            };\n        });\n\n        return {\n            model: this.metaData.resModel,\n            title: this.metaData.title,\n            col_group_headers: colGroupHeaderRows,\n            measure_headers: measureRow,\n            origin_headers: originRow,\n            rows: tableRows,\n            measure_count: measureCount,\n            origin_count: originCount,\n        };\n    }\n    /**\n     * Swap the pivot columns and the rows. The flip operation is synchronous.\n     * However, we must wait for a potential pending reload to complete before\n     * flipping the axes. This method is thus async.\n     */\n    async flip() {\n        await this.race.getCurrentProm();\n\n        // swap the data: the main column and the main row\n        let temp = this.data.rowGroupTree;\n        this.data.rowGroupTree = this.data.colGroupTree;\n        this.data.colGroupTree = temp;\n\n        // we need to update the record metaData: (expanded) row and col groupBys\n        temp = this.metaData.rowGroupBys;\n        this.metaData.rowGroupBys = this.metaData.colGroupBys;\n        this.metaData.colGroupBys = temp;\n        temp = this.metaData.expandedColGroupBys;\n        this.metaData.expandedColGroupBys = this.metaData.expandedRowGroupBys;\n        this.metaData.expandedRowGroupBys = temp;\n\n        function twistKey(key) {\n            return JSON.stringify(JSON.parse(key).reverse());\n        }\n\n        function twist(object) {\n            const newObject = {};\n            Object.keys(object).forEach((key) => {\n                const value = object[key];\n                newObject[twistKey(key)] = value;\n            });\n            return newObject;\n        }\n\n        this.data.measurements = twist(this.data.measurements);\n        this.data.counts = twist(this.data.counts);\n        this.data.groupDomains = twist(this.data.groupDomains);\n\n        this.notify();\n    }\n    /**\n     * Returns a domain representation of a group\n     *\n     * @param {Object} group\n     * @param {Array} group.colValues\n     * @param {Array} group.rowValues\n     * @param {number} group.originIndex\n     * @returns {Array[]}\n     */\n    getGroupDomain(group) {\n        const config = { metaData: this.metaData, data: this.data };\n        return this._getGroupDomain(group, config);\n    }\n    /**\n     * Returns a description of the pivot table.\n     *\n     * @returns {Object}\n     */\n    getTable() {\n        const headers = this._getTableHeaders();\n        return {\n            headers: headers,\n            rows: this._getTableRows(this.data.rowGroupTree, headers[headers.length - 1]),\n        };\n    }\n    /**\n     * Returns the total number of columns of the pivot table.\n     *\n     * @returns {integer}\n     */\n    getTableWidth() {\n        var leafCounts = this._getLeafCounts(this.data.colGroupTree);\n        return leafCounts[JSON.stringify(this.data.colGroupTree.root.values)] + 2;\n    }\n    /**\n     * @returns {boolean} true iff there's no data in the table\n     */\n    hasData() {\n        return this._hasData(this.data);\n    }\n    /**\n     * @override\n     * @param {SearchParams} searchParams\n     */\n    async load(searchParams) {\n        this.searchParams = searchParams;\n\n        const activeMeasures =\n            processMeasure(searchParams.context.pivot_measures) || this.metaData.activeMeasures;\n        const metaData = this._buildMetaData({ activeMeasures });\n        if (!this.reload) {\n            metaData.rowGroupBys =\n                searchParams.context.pivot_row_groupby ||\n                (searchParams.groupBy.length ? searchParams.groupBy : metaData.rowGroupBys);\n            this.reload = true;\n        } else {\n            metaData.rowGroupBys = searchParams.groupBy.length\n                ? searchParams.groupBy\n                : searchParams.context.pivot_row_groupby || metaData.rowGroupBys;\n        }\n        metaData.colGroupBys =\n            searchParams.context.pivot_column_groupby || this.metaData.colGroupBys;\n\n        if (JSON.stringify(metaData.rowGroupBys) !== JSON.stringify(this.metaData.rowGroupBys)) {\n            metaData.expandedRowGroupBys = [];\n        }\n        if (JSON.stringify(metaData.colGroupBys) !== JSON.stringify(this.metaData.colGroupBys)) {\n            metaData.expandedColGroupBys = [];\n        }\n\n        metaData.measures = computeReportMeasures(\n            metaData.fields,\n            metaData.fieldAttrs,\n            metaData.activeMeasures,\n            metaData.additionalMeasures\n        );\n        const config = { metaData, data: this.data };\n        return this._loadData(config);\n    }\n    /**\n     * Sort the rows, depending on the values of a given column.  This is an\n     * in-memory sort.\n     *\n     * @param {Object} sortedColumn\n     * @param {number[]} sortedColumn.groupId\n     */\n    sortRows(sortedColumn) {\n        if (this.race.getCurrentProm()) {\n            return; // we are currently reloaded the table\n        }\n\n        const config = { metaData: this.metaData, data: this.data };\n        this._sortRows(sortedColumn, config);\n\n        this.notify();\n    }\n    /**\n     * Toggle the active state for a given measure, then reload the data\n     * if this turns out to be necessary.\n     *\n     * @param {string} fieldName\n     * @returns {Promise}\n     */\n    async toggleMeasure(fieldName) {\n        const metaData = this._buildMetaData();\n        this.nextActiveMeasures = this.nextActiveMeasures || metaData.activeMeasures;\n        metaData.activeMeasures = this.nextActiveMeasures;\n        const index = metaData.activeMeasures.indexOf(fieldName);\n        if (index !== -1) {\n            // in this case, we already have all data in memory, no need to\n            // actually reload a lesser amount of information (but still, we need\n            // to wait in case there is a pending load)\n            metaData.activeMeasures.splice(index, 1);\n            await Promise.resolve(this.race.getCurrentProm());\n            this.metaData = metaData;\n        } else {\n            metaData.activeMeasures.push(fieldName);\n            let config = { metaData, data: this.data };\n            await this._loadData(config);\n        }\n        this.nextActiveMeasures = null;\n        this.notify();\n    }\n\n    //--------------------------------------------------------------------------\n    // Protected\n    //--------------------------------------------------------------------------\n\n    /**\n     * Add labels/values in the provided groupTree. A new leaf is created in\n     * the groupTree with a root object corresponding to the group with given\n     * labels/values.\n     *\n     * @protected\n     * @param {Object} groupTree, either this.data.rowGroupTree or this.data.colGroupTree\n     * @param {string[]} labels\n     * @param {Array} values\n     */\n    _addGroup(groupTree, labels, values) {\n        let tree = groupTree;\n        // we assume here that the group with value value.slice(value.length - 2) has already been added.\n        values.slice(0, values.length - 1).forEach(function (value) {\n            tree = tree.directSubTrees.get(value);\n        });\n        const value = values[values.length - 1];\n        if (tree.directSubTrees.has(value)) {\n            return;\n        }\n        tree.directSubTrees.set(value, {\n            root: {\n                labels: labels,\n                values: values,\n            },\n            directSubTrees: new Map(),\n        });\n    }\n    /**\n     * Return a copy of this.metaData, extended with optional params. This is useful\n     * for async methods that need to modify this.metaData, but it can't be done in\n     * place directly for the model to be concurrency proof (so they work on a\n     * copy and commit it at the end).\n     *\n     * @protected\n     * @param {Object} params\n     * @returns {Object}\n     */\n    _buildMetaData(params) {\n        const metaData = Object.assign({}, this.metaData, params);\n        metaData.activeMeasures = [...metaData.activeMeasures];\n        metaData.colGroupBys = [...metaData.colGroupBys];\n        metaData.rowGroupBys = [...metaData.rowGroupBys];\n        metaData.expandedColGroupBys = [...metaData.expandedColGroupBys];\n        metaData.expandedRowGroupBys = [...metaData.expandedRowGroupBys];\n        metaData.customGroupBys = new Map([...metaData.customGroupBys]);\n        // shallow copy sortedColumn because we never modify groupId in place\n        metaData.sortedColumn = metaData.sortedColumn ? { ...metaData.sortedColumn } : null;\n        if (this.searchParams.comparison) {\n            const domains = this.searchParams.comparison.domains.slice().reverse();\n            metaData.domains = domains.map((d) => d.arrayRepr);\n            metaData.origins = domains.map((d) => d.description);\n        } else {\n            metaData.domains = [this.searchParams.domain];\n            metaData.origins = [\"\"];\n        }\n        Object.defineProperty(metaData, \"fullColGroupBys\", {\n            get() {\n                return metaData.colGroupBys.concat(metaData.expandedColGroupBys);\n            },\n        });\n        Object.defineProperty(metaData, \"fullRowGroupBys\", {\n            get() {\n                return metaData.rowGroupBys.concat(metaData.expandedRowGroupBys);\n            },\n        });\n        return metaData;\n    }\n    /**\n     * Expand a group by using groupBy to split it.\n     *\n     * @protected\n     * @param {Object} group\n     * @param {'row'|'col'} type\n     * @param {Config} config\n     */\n    async _expandGroup(groupId, type, config) {\n        const { metaData } = config;\n        const group = {\n            rowValues: groupId[0],\n            colValues: groupId[1],\n            type: type,\n        };\n        const groupValues = type === \"row\" ? groupId[0] : groupId[1];\n        const groupBys = type === \"row\" ? metaData.fullRowGroupBys : metaData.fullColGroupBys;\n        if (groupValues.length >= groupBys.length) {\n            throw new Error(\"Cannot expand group\");\n        }\n        const groupBy = groupBys[groupValues.length];\n        let leftDivisors;\n        let rightDivisors;\n        if (group.type === \"row\") {\n            leftDivisors = [[groupBy]];\n            rightDivisors = sections(metaData.fullColGroupBys);\n        } else {\n            leftDivisors = sections(metaData.fullRowGroupBys);\n            rightDivisors = [[groupBy]];\n        }\n        const divisors = cartesian(leftDivisors, rightDivisors);\n        delete group.type;\n        await this._subdivideGroup(group, divisors, config);\n    }\n    /**\n     * Find a group with given values in the provided groupTree, either\n     * this.rowGrouptree or this.data.colGroupTree.\n     *\n     * @protected\n     * @param {Object} groupTree\n     * @param {Array} values\n     * @returns {Object}\n     */\n    _findGroup(groupTree, values) {\n        let tree = groupTree;\n        values.slice(0, values.length).forEach((value) => {\n            tree = tree.directSubTrees.get(value);\n        });\n        return tree;\n    }\n    /**\n     * In case originIndex is an array of length 1, thus a single origin\n     * index, returns the given measure for a group determined by the id\n     * groupId and the origin index.\n     * If originIndexes is an array of length 2, we compute the variation\n     * ot the measure values for the groups determined by groupId and the\n     * different origin indexes.\n     *\n     * @protected\n     * @param {Array[]} groupId\n     * @param {string} measure\n     * @param {number[]} originIndexes\n     * @param {Config} config\n     * @returns {number}\n     */\n    _getCellValue(groupId, measure, originIndexes, config) {\n        var key = JSON.stringify(groupId);\n        if (!config.data.measurements[key]) {\n            return;\n        }\n        var values = originIndexes.map((originIndex) => {\n            return config.data.measurements[key][originIndex][measure];\n        });\n        if (originIndexes.length > 1) {\n            return computeVariation(values[1], values[0]);\n        } else {\n            return values[0];\n        }\n    }\n    /**\n     * Returns a domain representation of a group\n     *\n     * @protected\n     * @param {Object} group\n     * @param {Array} group.colValues\n     * @param {Array} group.rowValues\n     * @param {number} group.originIndex\n     * @param {Config} config\n     * @returns {Array[]}\n     */\n    _getGroupDomain(group, config) {\n        const { data } = config;\n        var key = JSON.stringify([group.rowValues, group.colValues]);\n        return data.groupDomains[key][group.originIndex];\n    }\n    /**\n     * Returns the group sanitized labels.\n     *\n     * @protected\n     * @param {Object} group\n     * @param {string[]} groupBys\n     * @param {Config} config\n     * @returns {string[]}\n     */\n    _getGroupLabels(group, groupBys, config) {\n        return groupBys.map((groupBy) => {\n            return this._sanitizeLabel(group[groupBy], groupBy, config);\n        });\n    }\n    /**\n     * Returns a promise that returns the annotated read_group results\n     * corresponding to a partition of the given group obtained using the given\n     * rowGroupBy and colGroupBy.\n     *\n     * @protected\n     * @param {Object} group\n     * @param {string[]} rowGroupBy\n     * @param {string[]} colGroupBy\n     * @param {Config} config\n     */\n    async _getGroupSubdivision(group, rowGroupBy, colGroupBy, config) {\n        const groupDomain = this._getGroupDomain(group, config);\n        const measureSpecs = this._getMeasureSpecs(config);\n        const groupBy = rowGroupBy.concat(colGroupBy);\n        const options = { lazy: false };\n        const subGroups = await this.orm.readGroup(\n            config.metaData.resModel,\n            groupDomain,\n            measureSpecs,\n            groupBy,\n            options,\n            this.searchParams.context\n        );\n        return {\n            group: group,\n            subGroups: subGroups,\n            rowGroupBy: rowGroupBy,\n            colGroupBy: colGroupBy,\n        };\n    }\n    /**\n     * Returns the group sanitized values.\n     *\n     * @protected\n     * @param {Object} group\n     * @param {string[]} groupBys\n     * @returns {Array}\n     */\n    _getGroupValues(group, groupBys) {\n        return groupBys.map((groupBy) => {\n            return this._sanitizeValue(group[groupBy]);\n        });\n    }\n    /**\n     * Returns the leaf counts of each group inside the given tree.\n     *\n     * @protected\n     * @param {Object} tree\n     * @returns {Object} keys are group ids\n     */\n    _getLeafCounts(tree) {\n        const leafCounts = {};\n        let leafCount;\n        if (!tree.directSubTrees.size) {\n            leafCount = 1;\n        } else {\n            leafCount = [...tree.directSubTrees.values()].reduce((acc, subTree) => {\n                const subLeafCounts = this._getLeafCounts(subTree);\n                Object.assign(leafCounts, subLeafCounts);\n                return acc + leafCounts[JSON.stringify(subTree.root.values)];\n            }, 0);\n        }\n\n        leafCounts[JSON.stringify(tree.root.values)] = leafCount;\n        return leafCounts;\n    }\n    /**\n     * Returns the group sanitized measure values for the measures in\n     * this.metaData.activeMeasures (that migth contain '__count', not really a fieldName).\n     *\n     * @protected\n     * @param {Object} group\n     * @param {Config} config\n     * @returns {Array}\n     */\n    _getMeasurements(group, config) {\n        const { metaData } = config;\n        return metaData.activeMeasures.reduce((measurements, measureName) => {\n            var measurement = group[measureName];\n            if (measurement instanceof Array) {\n                // case field is many2one and used as measure and groupBy simultaneously\n                measurement = 1;\n            }\n            if (\n                metaData.measures[measureName].type === \"boolean\" &&\n                measurement instanceof Boolean\n            ) {\n                measurement = measurement ? 1 : 0;\n            }\n            if (metaData.origins.length > 1 && !measurement) {\n                measurement = 0;\n            }\n            measurements[measureName] = measurement;\n            return measurements;\n        }, {});\n    }\n    /**\n     * Returns a description of the measures row of the pivot table\n     *\n     * @protected\n     * @param {Object[]} columns for which measure cells must be generated\n     * @returns {Object[]}\n     */\n    _getMeasuresRow(columns) {\n        const sortedColumn = this.metaData.sortedColumn || {};\n        const measureRow = [];\n\n        columns.forEach((column) => {\n            this.metaData.activeMeasures.forEach((measureName) => {\n                const measureCell = {\n                    groupId: column.groupId,\n                    height: 1,\n                    measure: measureName,\n                    title: this.metaData.measures[measureName].string,\n                    width: 2 * this.metaData.origins.length - 1,\n                };\n                if (\n                    sortedColumn.measure === measureName &&\n                    JSON.stringify(sortedColumn.groupId) === JSON.stringify(column.groupId) // FIXME\n                ) {\n                    measureCell.order = sortedColumn.order;\n                }\n                measureRow.push(measureCell);\n            });\n        });\n\n        return measureRow;\n    }\n    /**\n     * Returns the list of measure specs associated with metaData.activeMeasures, i.e.\n     * a measure 'fieldName' becomes 'fieldName:groupOperator' where\n     * groupOperator is the value specified on the field 'fieldName' for\n     * the key group_operator.\n     *\n     * @protected\n     * @param {Config} config\n     * @return {string[]}\n     */\n    _getMeasureSpecs(config) {\n        const { metaData } = config;\n        return metaData.activeMeasures.reduce((acc, measure) => {\n            if (measure === \"__count\") {\n                acc.push(measure);\n                return acc;\n            }\n            const field = this.metaData.fields[measure];\n            if (field.type === \"many2one\") {\n                field.group_operator = \"count_distinct\";\n            }\n            if (field.group_operator === undefined) {\n                throw new Error(\n                    \"No aggregate function has been provided for the measure '\" + measure + \"'\"\n                );\n            }\n            acc.push(measure + \":\" + field.group_operator);\n            return acc;\n        }, []);\n    }\n    /**\n     * Make sure that the labels of different many2one values are distinguished\n     * by numbering them if necessary.\n     *\n     * @protected\n     * @param {Array} label\n     * @param {string} fieldName\n     * @param {Config} config\n     * @returns {string}\n     */\n    _getNumberedLabel(label, fieldName, config) {\n        const { data } = config;\n        const id = label[0];\n        const name = label[1];\n        data.numbering[fieldName] = data.numbering[fieldName] || {};\n        data.numbering[fieldName][name] = data.numbering[fieldName][name] || {};\n        const numbers = data.numbering[fieldName][name];\n        numbers[id] = numbers[id] || Object.keys(numbers).length + 1;\n        return name + (numbers[id] > 1 ? \"  (\" + numbers[id] + \")\" : \"\");\n    }\n    /**\n     * Returns a description of the origins row of the pivot table\n     *\n     * @protected\n     * @param {Object[]} columns for which origin cells must be generated\n     * @returns {Object[]}\n     */\n    _getOriginsRow(columns) {\n        const sortedColumn = this.metaData.sortedColumn || {};\n        const originRow = [];\n\n        columns.forEach((column) => {\n            const groupId = column.groupId;\n            const measure = column.measure;\n            const isSorted =\n                sortedColumn.measure === measure &&\n                JSON.stringify(sortedColumn.groupId) === JSON.stringify(groupId); // FIXME\n            const isSortedByOrigin = isSorted && !sortedColumn.originIndexes[1];\n            const isSortedByVariation = isSorted && sortedColumn.originIndexes[1];\n\n            this.metaData.origins.forEach((origin, originIndex) => {\n                const originCell = {\n                    groupId: groupId,\n                    height: 1,\n                    measure: measure,\n                    originIndexes: [originIndex],\n                    title: origin,\n                    width: 1,\n                };\n                if (isSortedByOrigin && sortedColumn.originIndexes[0] === originIndex) {\n                    originCell.order = sortedColumn.order;\n                }\n                originRow.push(originCell);\n\n                if (originIndex > 0) {\n                    const variationCell = {\n                        groupId: groupId,\n                        height: 1,\n                        measure: measure,\n                        originIndexes: [originIndex - 1, originIndex],\n                        title: this.env._t(\"Variation\"),\n                        width: 1,\n                    };\n                    if (isSortedByVariation && sortedColumn.originIndexes[1] === originIndex) {\n                        variationCell.order = sortedColumn.order;\n                    }\n                    originRow.push(variationCell);\n                }\n            });\n        });\n\n        return originRow;\n    }\n    /**\n     * Returns the list of header rows of the pivot table: the col group rows\n     * (depending on the col groupbys), the measures row and optionnaly the\n     * origins row (if there are more than one origins).\n     *\n     * @protected\n     * @returns {Object[]}\n     */\n    _getTableHeaders() {\n        const _t = this.env._t;\n        const colGroupBys = this.metaData.fullColGroupBys;\n        const height = colGroupBys.length + 1;\n        const measureCount = this.metaData.activeMeasures.length;\n        const originCount = this.metaData.origins.length;\n        const leafCounts = this._getLeafCounts(this.data.colGroupTree);\n        let headers = [];\n        const measureColumns = []; // used to generate the measure cells\n\n        // 1) generate col group rows (total row + one row for each col groupby)\n        const colGroupRows = new Array(height).fill(0).map(() => []);\n        // blank top left cell\n        colGroupRows[0].push({\n            height: height + 1 + (originCount > 1 ? 1 : 0), // + measures rows [+ origins row]\n            title: \"\",\n            width: 1,\n        });\n\n        // col groupby cells with group values\n        /**\n         * Recursive function that generates the header cells corresponding to\n         * the groups of a given tree.\n         *\n         * @param {Object} tree\n         */\n        function generateTreeHeaders(tree, fields) {\n            const group = tree.root;\n            const rowIndex = group.values.length;\n            const row = colGroupRows[rowIndex];\n            const groupId = [[], group.values];\n            const isLeaf = !tree.directSubTrees.size;\n            const leafCount = leafCounts[JSON.stringify(tree.root.values)];\n            const cell = {\n                groupId: groupId,\n                height: isLeaf ? colGroupBys.length + 1 - rowIndex : 1,\n                isLeaf: isLeaf,\n                isFolded: isLeaf && colGroupBys.length > group.values.length,\n                label:\n                    rowIndex === 0\n                        ? undefined\n                        : fields[colGroupBys[rowIndex - 1].split(\":\")[0]].string,\n                title: group.labels[group.labels.length - 1] || _t(\"Total\"),\n                width: leafCount * measureCount * (2 * originCount - 1),\n            };\n            row.push(cell);\n            if (isLeaf) {\n                measureColumns.push(cell);\n            }\n\n            [...tree.directSubTrees.values()].forEach((subTree) => {\n                generateTreeHeaders(subTree, fields);\n            });\n        }\n\n        generateTreeHeaders(this.data.colGroupTree, this.metaData.fields);\n        // blank top right cell for 'Total' group (if there is more that one leaf)\n        if (leafCounts[JSON.stringify(this.data.colGroupTree.root.values)] > 1) {\n            var groupId = [[], []];\n            var totalTopRightCell = {\n                groupId: groupId,\n                height: height,\n                title: \"\",\n                width: measureCount * (2 * originCount - 1),\n            };\n            colGroupRows[0].push(totalTopRightCell);\n            measureColumns.push(totalTopRightCell);\n        }\n        headers = headers.concat(colGroupRows);\n\n        // 2) generate measures row\n        var measuresRow = this._getMeasuresRow(measureColumns);\n        headers.push(measuresRow);\n\n        // 3) generate origins row if more than one origin\n        if (originCount > 1) {\n            headers.push(this._getOriginsRow(measuresRow));\n        }\n\n        return headers;\n    }\n    /**\n     * Returns the list of body rows of the pivot table for a given tree.\n     *\n     * @protected\n     * @param {Object} tree\n     * @param {Object[]} columns\n     * @returns {Object[]}\n     */\n    _getTableRows(tree, columns) {\n        let rows = [];\n        const group = tree.root;\n        const rowGroupId = [group.values, []];\n        const title = group.labels[group.labels.length - 1] || this.env._t(\"Total\");\n        const indent = group.labels.length;\n        const isLeaf = !tree.directSubTrees.size;\n        const rowGroupBys = this.metaData.fullRowGroupBys;\n\n        const subGroupMeasurements = columns.map((column) => {\n            const colGroupId = column.groupId;\n            const groupIntersectionId = [rowGroupId[0], colGroupId[1]];\n            const measure = column.measure;\n            const originIndexes = column.originIndexes || [0];\n\n            const value = this._getCellValue(groupIntersectionId, measure, originIndexes, {\n                data: this.data,\n            });\n\n            const measurement = {\n                groupId: groupIntersectionId,\n                originIndexes: originIndexes,\n                measure: measure,\n                value: value,\n                isBold: !groupIntersectionId[0].length || !groupIntersectionId[1].length,\n            };\n            return measurement;\n        });\n\n        rows.push({\n            title: title,\n            label:\n                indent === 0\n                    ? undefined\n                    : this.metaData.fields[rowGroupBys[indent - 1].split(\":\")[0]].string,\n            groupId: rowGroupId,\n            indent: indent,\n            isLeaf: isLeaf,\n            isFolded: isLeaf && rowGroupBys.length > group.values.length,\n            subGroupMeasurements: subGroupMeasurements,\n        });\n\n        const subTreeKeys = tree.sortedKeys || [...tree.directSubTrees.keys()];\n        subTreeKeys.forEach((subTreeKey) => {\n            const subTree = tree.directSubTrees.get(subTreeKey);\n            rows = rows.concat(this._getTableRows(subTree, columns));\n        });\n\n        return rows;\n    }\n    /**\n     * returns the height of a given groupTree\n     *\n     * @protected\n     * @param {Object} tree, a groupTree\n     * @returns {number}\n     */\n    _getTreeHeight(tree) {\n        const subTreeHeights = [...tree.directSubTrees.values()].map(\n            this._getTreeHeight.bind(this)\n        );\n        return Math.max(0, Math.max.apply(null, subTreeHeights)) + 1;\n    }\n    /**\n     * @protected\n     * @param {Data} data\n     * @returns {boolean} true iff there's no data in the table\n     */\n    _hasData(data) {\n        return (data.counts[JSON.stringify([[], []])] || []).some((count) => {\n            return count > 0;\n        });\n    }\n    /**\n     * Initialize/Reinitialize data.rowGroupTree, colGroupTree, measurements,\n     * counts and subdivide the group 'Total' as many times it is necessary.\n     * A first subdivision with no groupBy (divisors.slice(0, 1)) is made in\n     * order to see if there is data in the intersection of the group 'Total'\n     * and the various origins. In case there is none, non supplementary rpc\n     * will be done (see the code of subdivideGroup).\n     *\n     * @protected\n     * @param {Config} config\n     */\n    async _loadData(config, prune = true) {\n        config.data = {}; // data will be completely recomputed\n        const { data, metaData } = config;\n        data.rowGroupTree = { root: { labels: [], values: [] }, directSubTrees: new Map() };\n        data.colGroupTree = { root: { labels: [], values: [] }, directSubTrees: new Map() };\n        data.measurements = {};\n        data.counts = {};\n        data.groupDomains = {};\n        data.numbering = {};\n        const key = JSON.stringify([[], []]);\n        data.groupDomains[key] = metaData.domains.slice(0);\n\n        const group = { rowValues: [], colValues: [] };\n        const leftDivisors = sections(metaData.fullRowGroupBys);\n        const rightDivisors = sections(metaData.fullColGroupBys);\n        const divisors = cartesian(leftDivisors, rightDivisors);\n\n        await this._subdivideGroup(group, divisors.slice(0, 1), config);\n        await this._subdivideGroup(group, divisors.slice(1), config);\n\n        // keep folded groups folded after the reload if the structure of the table is the same\n        if (prune && this._hasData(data) && this._hasData(this.data)) {\n            if (\n                symmetricalDifference(metaData.rowGroupBys, this.metaData.rowGroupBys).length === 0\n            ) {\n                this._pruneTree(data.rowGroupTree, this.data.rowGroupTree);\n            }\n            if (\n                symmetricalDifference(metaData.colGroupBys, this.metaData.colGroupBys).length === 0\n            ) {\n                this._pruneTree(data.colGroupTree, this.data.colGroupTree);\n            }\n        }\n\n        this.data = config.data;\n        this.metaData = config.metaData;\n    }\n    /**\n     * Extract the information in the read_group results (groupSubdivisions)\n     * and develop this.data.rowGroupTree, colGroupTree, measurements, counts, and\n     * groupDomains.\n     * If a column needs to be sorted, the rowGroupTree corresponding to the\n     * group is sorted.\n     *\n     * @protected\n     * @param {Object} group\n     * @param {Object[]} groupSubdivisions\n     * @param {Config} config\n     */\n    _prepareData(group, groupSubdivisions, config) {\n        const { data, metaData } = config;\n        const groupRowValues = group.rowValues;\n        let groupRowLabels = [];\n        let rowSubTree = data.rowGroupTree;\n        let root;\n        if (groupRowValues.length) {\n            // we should have labels information on hand! regretful!\n            rowSubTree = this._findGroup(data.rowGroupTree, groupRowValues);\n            root = rowSubTree.root;\n            groupRowLabels = root.labels;\n        }\n\n        const groupColValues = group.colValues;\n        let groupColLabels = [];\n        if (groupColValues.length) {\n            root = this._findGroup(data.colGroupTree, groupColValues).root;\n            groupColLabels = root.labels;\n        }\n\n        groupSubdivisions.forEach((groupSubdivision) => {\n            groupSubdivision.subGroups.forEach((subGroup) => {\n                const rowValues = groupRowValues.concat(\n                    this._getGroupValues(subGroup, groupSubdivision.rowGroupBy)\n                );\n                const rowLabels = groupRowLabels.concat(\n                    this._getGroupLabels(subGroup, groupSubdivision.rowGroupBy, config)\n                );\n\n                const colValues = groupColValues.concat(\n                    this._getGroupValues(subGroup, groupSubdivision.colGroupBy)\n                );\n                const colLabels = groupColLabels.concat(\n                    this._getGroupLabels(subGroup, groupSubdivision.colGroupBy, config)\n                );\n\n                if (!colValues.length && rowValues.length) {\n                    this._addGroup(data.rowGroupTree, rowLabels, rowValues);\n                }\n                if (colValues.length && !rowValues.length) {\n                    this._addGroup(data.colGroupTree, colLabels, colValues);\n                }\n\n                const key = JSON.stringify([rowValues, colValues]);\n                const originIndex = groupSubdivision.group.originIndex;\n\n                if (!(key in data.measurements)) {\n                    data.measurements[key] = metaData.origins.map(() => {\n                        return this._getMeasurements({}, config);\n                    });\n                }\n                data.measurements[key][originIndex] = this._getMeasurements(subGroup, config);\n\n                if (!(key in data.counts)) {\n                    data.counts[key] = metaData.origins.map(function () {\n                        return 0;\n                    });\n                }\n                data.counts[key][originIndex] = subGroup.__count;\n\n                if (!(key in data.groupDomains)) {\n                    data.groupDomains[key] = metaData.origins.map(function () {\n                        return Domain.FALSE.toList();\n                    });\n                }\n                // if __domain is not defined this means that we are in the\n                // case where\n                // groupSubdivision.rowGroupBy = groupSubdivision.rowGroupBy = []\n                if (subGroup.__domain) {\n                    data.groupDomains[key][originIndex] = subGroup.__domain;\n                }\n            });\n        });\n\n        if (metaData.sortedColumn) {\n            this._sortRows(metaData.sortedColumn, config);\n        }\n    }\n    /**\n     * Make any group in tree a leaf if it was a leaf in oldTree.\n     *\n     * @protected\n     * @param {Object} tree\n     * @param {Object} oldTree\n     */\n    _pruneTree(tree, oldTree) {\n        if (!oldTree.directSubTrees.size) {\n            tree.directSubTrees.clear();\n            delete tree.sortedKeys;\n            return;\n        }\n        [...tree.directSubTrees.keys()].forEach((subTreeKey) => {\n            const subTree = tree.directSubTrees.get(subTreeKey);\n            if (!oldTree.directSubTrees.has(subTreeKey)) {\n                subTree.directSubTrees.clear();\n                delete subTree.sortedKeys;\n            } else {\n                const oldSubTree = oldTree.directSubTrees.get(subTreeKey);\n                this._pruneTree(subTree, oldSubTree);\n            }\n        });\n    }\n    /**\n     * Extract from a groupBy value a label.\n     *\n     * @protected\n     * @param {any} value\n     * @param {string} groupBy\n     * @param {Config} config\n     * @returns {string}\n     */\n    _sanitizeLabel(value, groupBy, config) {\n        const { metaData } = config;\n        const fieldName = groupBy.split(\":\")[0];\n        if (value === false) {\n            return this.env._t(\"Undefined\");\n        }\n        if (value instanceof Array) {\n            return this._getNumberedLabel(value, fieldName, config);\n        }\n        if (\n            fieldName &&\n            metaData.fields[fieldName] &&\n            metaData.fields[fieldName].type === \"selection\"\n        ) {\n            const selected = metaData.fields[fieldName].selection.find((o) => o[0] === value);\n            return selected ? selected[1] : value; // selected should be truthy normally ?!\n        }\n        return value;\n    }\n    /**\n     * Extract from a groupBy value the raw value of that groupBy (discarding\n     * a label if any)\n     *\n     * @protected\n     * @param {any} value\n     * @returns {any}\n     */\n    _sanitizeValue(value) {\n        if (value instanceof Array) {\n            return value[0];\n        }\n        return value;\n    }\n    /**\n     * Get all partitions of a given group using the provided list of divisors\n     * and enrich the objects of this.data.rowGroupTree, colGroupTree,\n     * measurements, counts.\n     *\n     * @protected\n     * @param {Object} group\n     * @param {Array[]} divisors\n     * @param {Config} config\n     */\n    async _subdivideGroup(group, divisors, config) {\n        const { data, metaData } = config;\n        const key = JSON.stringify([group.rowValues, group.colValues]);\n\n        const proms = metaData.origins.reduce((acc, origin, originIndex) => {\n            // if no information on group content is available, we fetch data.\n            // if group is known to be empty for the given origin,\n            // we don't need to fetch data for that origin.\n            if (!data.counts[key] || data.counts[key][originIndex] > 0) {\n                const subGroup = {\n                    rowValues: group.rowValues,\n                    colValues: group.colValues,\n                    originIndex: originIndex,\n                };\n                divisors.forEach((divisor) => {\n                    acc.push(this._getGroupSubdivision(subGroup, divisor[0], divisor[1], config));\n                });\n            }\n            return acc;\n        }, []);\n        const groupSubdivisions = await this.keepLast.add(Promise.all(proms));\n        if (groupSubdivisions.length) {\n            this._prepareData(group, groupSubdivisions, config);\n        }\n    }\n    /**\n     * Sort the rows, depending on the values of a given column.  This is an\n     * in-memory sort.\n     *\n     * @protected\n     * @param {Object} sortedColumn\n     * @param {number[]} sortedColumn.groupId\n     * @param {Config} config\n     */\n    _sortRows(sortedColumn, config) {\n        const metaData = config.metaData || this.metaData;\n        const data = config.data || this.data;\n        const colGroupValues = sortedColumn.groupId[1];\n        sortedColumn.originIndexes = sortedColumn.originIndexes || [0];\n        metaData.sortedColumn = sortedColumn;\n\n        const sortFunction = (tree) => {\n            return (subTreeKey) => {\n                const subTree = tree.directSubTrees.get(subTreeKey);\n                const groupIntersectionId = [subTree.root.values, colGroupValues];\n                const value =\n                    this._getCellValue(\n                        groupIntersectionId,\n                        sortedColumn.measure,\n                        sortedColumn.originIndexes,\n                        { data }\n                    ) || 0;\n                return sortedColumn.order === \"asc\" ? value : -value;\n            };\n        };\n\n        this._sortTree(sortFunction, data.rowGroupTree);\n    }\n    /**\n     * Sort recursively the subTrees of tree using sortFunction.\n     * In the end each node of the tree has its direct children sorted\n     * according to the criterion reprensented by sortFunction.\n     *\n     * @protected\n     * @param {Function} sortFunction\n     * @param {Object} tree\n     */\n    _sortTree(sortFunction, tree) {\n        tree.sortedKeys = sortBy([...tree.directSubTrees.keys()], sortFunction(tree));\n        [...tree.directSubTrees.values()].forEach((subTree) => {\n            this._sortTree(sortFunction, subTree);\n        });\n    }\n}\n", "/** @odoo-module **/\n\nimport { PivotGroupByMenu } from \"@web/views/pivot/pivot_group_by_menu\";\nimport { localization } from \"@web/core/l10n/localization\";\nimport { registry } from \"@web/core/registry\";\nimport fieldUtils from \"web.field_utils\";\n\nconst { Component } = owl;\nconst formatterRegistry = registry.category(\"formatters\");\n\nexport class PivotRenderer extends Component {\n    setup() {\n        this.model = this.props.model;\n        this.table = this.model.getTable();\n        this.l10n = localization;\n    }\n    willUpdateProps() {\n        this.table = this.model.getTable();\n    }\n    /**\n     * Get the formatted value of the cell.\n     *\n     * @private\n     * @param {Object} cell\n     * @returns {string} Formatted value\n     */\n    getFormattedValue(cell) {\n        const field = this.model.metaData.measures[cell.measure];\n        let formatType = this.model.metaData.widgets[cell.measure];\n        if (!formatType) {\n            const fieldType = field.type;\n            formatType = fieldType === \"many2one\" ? \"integer\" : fieldType;\n        }\n        //If the formatter is not found on the registry, search on the legacy fieldUtils.format.\n        //This must be removed when all the formatters will be on the registry\n        const formatter = formatterRegistry.get(formatType, null) || fieldUtils.format[formatType];\n        if (!formatter) {\n            throw new Error(`${formatType} is not a defined formatter!`);\n        }\n        return formatter(cell.value, field);\n    }\n    /**\n     * Get the formatted variation of a cell.\n     *\n     * @private\n     * @param {Object} cell\n     * @returns {string} Formatted variation\n     */\n    getFormattedVariation(cell) {\n        if (isNaN(cell.value)) {\n            return \"-\";\n        }\n        const formatPercentage = formatterRegistry.get(\"percentage\");\n        return formatPercentage(cell.value, this.model.metaData.fields[cell.measure]);\n    }\n    /**\n     * Retrieve the padding of a left header.\n     *\n     * @param {Object} cell\n     * @returns {Number} Padding\n     */\n    getPadding(cell) {\n        return 5 + cell.indent * 30;\n    }\n\n    //----------------------------------------------------------------------\n    // Handlers\n    //----------------------------------------------------------------------\n\n    onCellClicked(cell) {\n        this.props.onCellClicked(cell);\n    }\n    /**\n     * Handle the adding of a custom groupby (inside the view, not the searchview).\n     *\n     * @param {\"col\"|\"row\"} type\n     * @param {CustomEvent} ev\n     */\n    onAddCustomGroupBy(type, ev) {\n        this.model.addGroupBy({ ...ev.detail, custom: true, type });\n    }\n\n    /**\n     * Handle the selection of a groupby dropdown item.\n     *\n     * @param {\"col\"|\"row\"} type\n     * @param {CustomEvent} ev\n     */\n    onDropdownItemSelected(type, ev) {\n        this.model.addGroupBy({ ...ev.detail.payload, type });\n    }\n    /**\n     * Handle a click on a header cell.\n     *\n     * @param {Object} cell\n     * @param {string} type col or row\n     */\n    onHeaderClick(cell, type) {\n        if (cell.isLeaf && cell.isFolded) {\n            this.model.expandGroup(cell.groupId, type);\n        } else if (!cell.isLeaf) {\n            this.model.closeGroup(cell.groupId, type);\n        }\n    }\n    /**\n     * Handle a click on a measure cell.\n     *\n     * @param {Object} cell\n     */\n    onMeasureClick(cell) {\n        this.model.sortRows({\n            groupId: cell.groupId,\n            measure: cell.measure,\n            order: (cell.order || \"desc\") === \"asc\" ? \"desc\" : \"asc\",\n            originIndexes: cell.originIndexes,\n        });\n    }\n    /**\n     * Hover the column in which the mouse is.\n     *\n     * @param {MouseEvent} ev\n     */\n    onMouseEnter(ev) {\n        var index = [...ev.currentTarget.parentNode.children].indexOf(ev.currentTarget);\n        if (ev.currentTarget.tagName === \"TH\") {\n            if (\n                !ev.currentTarget.classList.contains(\"o_pivot_origin_row\") &&\n                this.model.metaData.origins.length === 2\n            ) {\n                index = 3 * index; // two origins + comparison column\n            }\n            index += 1; // row groupbys column\n        }\n        this.el\n            .querySelectorAll(\"td:nth-child(\" + (index + 1) + \")\")\n            .forEach((elt) => elt.classList.add(\"o_cell_hover\"));\n    }\n    /**\n     * Remove the hover on the columns.\n     */\n    onMouseLeave() {\n        this.el\n            .querySelectorAll(\".o_cell_hover\")\n            .forEach((elt) => elt.classList.remove(\"o_cell_hover\"));\n    }\n}\nPivotRenderer.template = \"web.PivotRenderer\";\nPivotRenderer.components = { PivotGroupByMenu };\nPivotRenderer.props = [\"model\", \"onCellClicked\"];\n", "/** @odoo-module **/\n\nimport { _lt } from \"@web/core/l10n/translation\";\nimport { download } from \"@web/core/network/download\";\nimport { registry } from \"@web/core/registry\";\nimport { useService } from \"@web/core/utils/hooks\";\nimport { useModel } from \"@web/views/helpers/model\";\nimport { standardViewProps } from \"@web/views/helpers/standard_view_props\";\nimport { useSetupView } from \"@web/views/helpers/view_hook\";\nimport { Layout } from \"@web/views/layout\";\nimport { PivotArchParser } from \"@web/views/pivot/pivot_arch_parser\";\nimport { PivotModel } from \"@web/views/pivot/pivot_model\";\nimport { PivotRenderer } from \"@web/views/pivot/pivot_renderer\";\nimport { SearchModel } from \"@web/search/search_model\";\n\nconst viewRegistry = registry.category(\"views\");\n\nconst { Component } = owl;\n\nexport class PivotView extends Component {\n    setup() {\n        this.actionService = useService(\"action\");\n\n        let modelParams = {};\n        if (this.props.state) {\n            modelParams.data = this.props.state.data;\n            modelParams.metaData = this.props.state.metaData;\n        } else {\n            const { arch } = this.props;\n\n            // parse arch\n            const archInfo = new this.constructor.ArchParser().parse(arch);\n\n            if (!archInfo.activeMeasures.length || archInfo.displayQuantity) {\n                archInfo.activeMeasures.unshift(\"__count\");\n            }\n\n            modelParams.metaData = {\n                activeMeasures: archInfo.activeMeasures,\n                additionalMeasures: this.props.additionalMeasures,\n                colGroupBys: archInfo.colGroupBys,\n                defaultOrder: archInfo.defaultOrder,\n                disableLinking: Boolean(archInfo.disableLinking),\n                fields: this.props.fields,\n                fieldAttrs: archInfo.fieldAttrs,\n                resModel: this.props.resModel,\n                rowGroupBys: archInfo.rowGroupBys,\n                title: archInfo.title || this.env._t(\"Untitled\"),\n                widgets: archInfo.widgets,\n            };\n        }\n\n        this.model = useModel(this.constructor.Model, modelParams);\n\n        useSetupView({\n            getLocalState: () => {\n                const { data, metaData } = this.model;\n                return { data, metaData };\n            },\n            getContext: () => this.getContext(),\n        });\n    }\n    /**\n     * @returns {Object}\n     */\n    getContext() {\n        return {\n            pivot_measures: this.model.metaData.activeMeasures,\n            pivot_column_groupby: this.model.metaData.fullColGroupBys,\n            pivot_row_groupby: this.model.metaData.fullRowGroupBys,\n        };\n    }\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Exports the current pivot table data in a xls file. For this, we have to\n     * serialize the current state, then call the server /web/pivot/export_xlsx.\n     * Force a reload before exporting to ensure to export up-to-date data.\n     */\n    onDownloadButtonClicked() {\n        if (this.model.getTableWidth() > 16384) {\n            throw new Error(\n                this.env._t(\n                    \"For Excel compatibility, data cannot be exported if there are more than 16384 columns.\\n\\nTip: try to flip axis, filter further or reduce the number of measures.\"\n                )\n            );\n        }\n        const table = this.model.exportData();\n        download({\n            url: \"/web/pivot/export_xlsx\",\n            data: { data: JSON.stringify(table) },\n        });\n    }\n    /**\n     * Expands all groups\n     */\n    onExpandButtonClicked() {\n        this.model.expandAll();\n    }\n    /**\n     * Flips axis\n     */\n    onFlipButtonClicked() {\n        this.model.flip();\n    }\n    /**\n     * Toggles the given measure\n     *\n     * @param {CustomEvent} ev\n     */\n    onMeasureSelected(ev) {\n        this.model.toggleMeasure(ev.detail.payload.measure);\n    }\n    /**\n     * @param {CustomEvent} ev\n     */\n    onOpenView(cell) {\n        if (cell.value === undefined || this.model.metaData.disableLinking) {\n            return;\n        }\n\n        const context = Object.assign({}, this.model.searchParams.context);\n        Object.keys(context).forEach((x) => {\n            if (x === \"group_by\" || x.startsWith(\"search_default_\")) {\n                delete context[x];\n            }\n        });\n\n        // retrieve form and list view ids from the action\n        const { views = [] } = this.env.config;\n        this.views = [\"list\", \"form\"].map((viewType) => {\n            const view = views.find((view) => view[1] === viewType);\n            return [view ? view[0] : false, viewType];\n        });\n\n        const group = {\n            rowValues: cell.groupId[0],\n            colValues: cell.groupId[1],\n            originIndex: cell.originIndexes[0],\n        };\n        const domain = this.model.getGroupDomain(group);\n\n        this.actionService.doAction({\n            type: \"ir.actions.act_window\",\n            name: this.model.metaData.title,\n            res_model: this.props.resModel,\n            views: this.views,\n            view_mode: \"list\",\n            target: \"current\",\n            context,\n            domain,\n        });\n    }\n}\n\nclass PivotSearchModel extends SearchModel {\n    _getIrFilterDescription() {\n        this.preparingIrFilterDescription = true;\n        const result = super._getIrFilterDescription(...arguments);\n        this.preparingIrFilterDescription = false;\n        return result;\n    }\n\n    _getSearchItemGroupBys(activeItem) {\n        const { searchItemId } = activeItem;\n        const { context, type } = this.searchItems[searchItemId];\n        if (\n            !this.preparingIrFilterDescription &&\n            type === \"favorite\" &&\n            context.pivot_row_groupby\n        ) {\n            return context.pivot_row_groupby;\n        }\n        return super._getSearchItemGroupBys(...arguments);\n    }\n}\n\nPivotView.template = \"web.PivotView\";\nPivotView.buttonTemplate = \"web.PivotView.Buttons\";\nPivotView.components = { Renderer: PivotRenderer, Layout };\n\nPivotView.props = {\n    ...standardViewProps,\n    additionalMeasures: { type: Array, elements: String, optional: 1 },\n};\nPivotView.defaultProps = {\n    additionalMeasures: [],\n};\n\nPivotView.Model = PivotModel;\nPivotView.SearchModel = PivotSearchModel;\n\nPivotView.ArchParser = PivotArchParser;\n\nPivotView.type = \"pivot\";\nPivotView.display_name = _lt(\"Pivot\");\nPivotView.icon = \"fa-table\";\nPivotView.multiRecord = true;\nPivotView.searchMenuTypes = [\"filter\", \"groupBy\", \"comparison\", \"favorite\"];\n\nviewRegistry.add(\"pivot\", PivotView);\n", "/** @odoo-module **/\n\nimport { evaluateExpr } from \"@web/core/py_js/py\";\nimport { registry } from \"@web/core/registry\";\nimport { KeepLast } from \"@web/core/utils/concurrency\";\nimport { useService } from \"@web/core/utils/hooks\";\nimport { deepCopy } from \"@web/core/utils/objects\";\nimport { WithSearch } from \"@web/search/with_search/with_search\";\nimport { useActionLinks } from \"@web/views/helpers/view_hook\";\nimport { extractLayoutComponents } from \"@web/views/layout\";\n\nconst viewRegistry = registry.category(\"views\");\n\nconst { Component, hooks } = owl;\nconst { useSubEnv } = hooks;\n\n/** @typedef {Object} ViewProps\n *  @property {string} resModel\n *  @property {string} type\n *\n *  @property {string} [arch] if given, fields must be given too /\\ no post processing is done (evaluation of \"groups\" attribute,...)\n *  @property {Object} [fields] if given, arch must be given too\n *  @property {number|false} [viewId]\n *  @property {Object} [actionMenus]\n *  @property {boolean} [loadActionMenus=false]\n *\n *  @property {string} [searchViewArch] if given, searchViewFields must be given too\n *  @property {Object} [searchViewFields] if given, searchViewArch must be given too\n *  @property {number|false} [searchViewId]\n *  @property {Object[]} [irFilters]\n *  @property {boolean} [loadIrFilters=false]\n *\n *  @property {Object} [comparison]\n *  @property {Object} [context={}]\n *  @property {DomainRepr} [domain]\n *  @property {string[]} [groupBy]\n *  @property {string[]} [orderBy]\n *\n *  @property {boolean} [useSampleModel]\n *  @property {string} [noContentHelp]\n *\n *  @property {Object} [display={}] to rework\n *\n *  manipulated by withSearch\n *\n *  @property {boolean} [activateFavorite]\n *  @property {Object[]} [dynamicFilters]\n *  @property {string[]} [searchMenuTypes]\n *  @property {Object} [globalState]\n */\n\nconst STANDARD_PROPS = [\n    \"resModel\",\n    \"type\",\n\n    \"arch\",\n    \"fields\",\n    \"viewId\",\n    \"actionMenus\",\n    \"loadActionMenus\",\n\n    \"searchViewArch\",\n    \"searchViewFields\",\n    \"searchViewId\",\n    \"irFilters\",\n    \"loadIrFilters\",\n\n    \"comparison\",\n    \"context\",\n    \"domain\",\n    \"groupBy\",\n    \"orderBy\",\n\n    \"useSampleModel\",\n    \"noContentHelp\",\n\n    \"display\",\n    \"globalState\",\n\n    \"activateFavorite\",\n\n    // LEGACY: remove this later (clean when mappings old state <-> new state are established)\n    \"searchPanel\",\n    \"searchModel\",\n];\n\nexport class View extends Component {\n    setup() {\n        const { arch, fields, resModel, searchViewArch, searchViewFields, type } = this.props;\n\n        if (!resModel) {\n            throw Error(`View props should have a \"resModel\" key`);\n        }\n        if (!type) {\n            throw Error(`View props should have a \"type\" key`);\n        }\n        if ((arch && !fields) || (!arch && fields)) {\n            throw new Error(`\"arch\" and \"fields\" props must be given together`);\n        }\n        if ((searchViewArch && !searchViewFields) || (!searchViewArch && searchViewFields)) {\n            throw new Error(`\"searchViewArch\" and \"searchViewFields\" props must be given together`);\n        }\n\n        this.viewService = useService(\"view\");\n        this.withSearchProps = null;\n\n        useSubEnv({\n            keepLast: new KeepLast(),\n            config: { ...(this.env.config || {}) },\n        });\n        useActionLinks({ resModel });\n    }\n\n    async willStart() {\n        // determine view type\n        let ViewClass = viewRegistry.get(this.props.type);\n        const type = ViewClass.type;\n\n        // determine views for which descriptions should be obtained\n        let { viewId, searchViewId } = this.props;\n\n        const views = deepCopy(this.env.config.views || []);\n        const view = views.find((v) => v[1] === type) || [];\n        if (view.length) {\n            view[0] = viewId !== undefined ? viewId : view[0];\n            viewId = view[0];\n        } else {\n            view.push(viewId || false, type);\n            views.push(view); // viewId will remain undefined if not specified and loadView=false\n        }\n\n        const searchView = views.find((v) => v[1] === \"search\");\n        if (searchView) {\n            searchView[0] = searchViewId !== undefined ? searchViewId : searchView[0];\n            searchViewId = searchView[0];\n        } else if (searchViewId !== undefined) {\n            views.push([searchViewId, \"search\"]);\n        }\n        // searchViewId will remains undefined if loadSearchView=false\n\n        // prepare view description\n        const { context, resModel, loadActionMenus, loadIrFilters } = this.props;\n        let { arch, fields, searchViewArch, searchViewFields, irFilters, actionMenus } = this.props;\n\n        let loadView = !arch || (!actionMenus && loadActionMenus);\n        let loadSearchView =\n            (searchViewId !== undefined && !searchViewArch) || (!irFilters && loadIrFilters);\n\n        let viewDescription = { viewId, resModel, type };\n        let searchViewDescription;\n        if (loadView || loadSearchView) {\n            // view description (or search view description if required) is incomplete\n            // a loadViews is done to complete the missing information\n            const viewDescriptions = await this.viewService.loadViews(\n                { context, resModel, views },\n                { actionId: this.env.config.actionId, loadActionMenus, loadIrFilters }\n            );\n            // Note: if this.props.views is different from views, the cached descriptions\n            // will certainly not be reused! (but for the standard flow this will work as\n            // before)\n            viewDescription = viewDescriptions[type];\n            view[0] = viewDescription.viewId;\n            searchViewDescription = viewDescriptions.search;\n            if (loadSearchView) {\n                searchViewId = searchViewId || searchViewDescription.viewId;\n                if (!searchViewArch) {\n                    searchViewArch = searchViewDescription.arch;\n                    searchViewFields = searchViewDescription.fields;\n                }\n                if (!irFilters) {\n                    irFilters = searchViewDescription.irFilters;\n                }\n            }\n            this.env.config.views = views;\n        }\n\n        if (!arch) {\n            arch = viewDescription.arch;\n            fields = viewDescription.fields;\n        }\n        if (!actionMenus) {\n            actionMenus = viewDescription.actionMenus;\n        }\n\n        const parser = new DOMParser();\n        const xml = parser.parseFromString(arch, \"text/xml\");\n        const rootNode = xml.documentElement;\n\n        const subType = rootNode.getAttribute(\"js_class\");\n        const bannerRoute = rootNode.getAttribute(\"banner_route\");\n        const sample = rootNode.getAttribute(\"sample\");\n\n        // determine ViewClass to instantiate (if not already done)\n        if (subType) {\n            ViewClass = viewRegistry.get(subType);\n        }\n\n        Object.assign(this.env.config, {\n            viewId: viewDescription.viewId,\n            viewType: type,\n            viewSubType: subType,\n            bannerRoute,\n            ...extractLayoutComponents(ViewClass),\n        });\n\n        // prepare the view props\n        const viewProps = {\n            info: { actionMenus, mode: this.props.display.mode },\n            arch,\n            fields,\n            resModel,\n            useSampleModel: false,\n        };\n        if (this.props.globalState) {\n            viewProps.globalState = this.props.globalState;\n        }\n\n        if (\"useSampleModel\" in this.props) {\n            viewProps.useSampleModel = this.props.useSampleModel;\n        } else if (sample) {\n            viewProps.useSampleModel = Boolean(evaluateExpr(sample));\n        }\n\n        for (const key in this.props) {\n            if (!STANDARD_PROPS.includes(key)) {\n                viewProps[key] = this.props[key];\n            }\n        }\n\n        let { noContentHelp } = this.props;\n        if (noContentHelp !== undefined) {\n            const htmlHelp = document.createElement(\"div\");\n            htmlHelp.innerHTML = noContentHelp;\n            if (htmlHelp.innerText.trim()) {\n                viewProps.info.noContentHelp = noContentHelp;\n            }\n        }\n\n        // prepare the WithSearch component props\n        this.withSearchProps = {\n            ...this.props,\n            Component: ViewClass,\n            componentProps: viewProps,\n        };\n\n        if (searchViewId !== undefined) {\n            this.withSearchProps.searchViewId = searchViewId;\n        }\n        if (searchViewArch) {\n            this.withSearchProps.searchViewArch = searchViewArch;\n            this.withSearchProps.searchViewFields = searchViewFields;\n        }\n        if (irFilters) {\n            this.withSearchProps.irFilters = irFilters;\n        }\n\n        if (!this.withSearchProps.searchMenuTypes) {\n            this.withSearchProps.searchMenuTypes =\n                this.props.searchMenuTypes ||\n                ViewClass.searchMenuTypes ||\n                this.constructor.searchMenuTypes;\n        }\n\n        for (const key in this.withSearchProps) {\n            if (!(key in WithSearch.props)) {\n                delete this.withSearchProps[key];\n            }\n        }\n    }\n\n    async willUpdateProps(nextProps) {\n        // we assume that nextProps can only vary in the search keys:\n        // comparison, context, domain, groupBy, orderBy\n        const { comparison, context, domain, groupBy, orderBy } = nextProps;\n        Object.assign(this.withSearchProps, { comparison, context, domain, groupBy, orderBy });\n    }\n}\n\nView.template = \"web.View\";\nView.components = { WithSearch };\nView.defaultProps = {\n    display: {},\n    context: {},\n    loadActionMenus: false,\n    loadIrFilters: false,\n};\n\nView.searchMenuTypes = [\"filter\", \"groupBy\", \"favorite\"];\n\n/** @todo rework doc */\n\n// - create a fakeORM service? --> use sampleServer and mockServer parts?\n\n// - action service uses View comp --> see if things cannot be simplified (we will use also maybe a ClientAction comp similar to view)\n\n// - see if we want to simplify things related to callback recorders --> the class should be put elsewhere too (maybe in core along registry?)\n\n/**\n * To manage (how?):\n *\n  Relate to search\n      searchModel // search model state (searchItems, query)\n      searchPanel // search panel component state (expanded (hierarchy), scrollbar)\n\n  Related to config/display/layout\n      breadcrumbs\n      withBreadcrumbs // 'no_breadcrumbs' in context ? !context.no_breadcrumbs : true,\n      withControlPanel // this.withControlPanel from constructor\n      withSearchBar // 'no_breadcrumbs' in context ? !context.no_breadcrumbs : true,\n      withSearchPanel // this.withSearchPanel from constructor\n      search_panel // = params.search_panel or context.search_panel\n\n  Prepare for concrete view ???\n      activeActions\n\n  Do stuff in View comp ???\n      banner // from arch = this.arch.attrs.banner_route\n*/\n", "/** @odoo-module **/\n\nimport { registry } from \"@web/core/registry\";\n\n/**\n * @typedef {Object} IrFilter\n * @property {[number, string] | false} user_id\n * @property {string} sort\n * @property {string} context\n * @property {string} name\n * @property {string} domain\n * @property {number} id\n * @property {boolean} is_default\n * @property {string} model_id\n * @property {[number, string] | false} action_id\n */\n\n/**\n * @typedef {Object} ViewDescription\n * @property {string} arch\n * @property {Object} fields\n * @property {string} model\n * @property {string} [name] is returned by the server (\"default\" or real name)\n * @property {string} type\n * @property {number} [viewId]\n * @property {Object} [actionMenus] // for views other than search\n * @property {IrFilter[]} [irFilters] // for search view\n */\n\n/**\n * @typedef {Object} LoadViewsParams\n * @property {string} resModel\n * @property {[number, string][]} views\n * @property {Object} context\n */\n\n/**\n * @typedef {Object} LoadViewsOptions\n * @property {number|false} actionId\n * @property {boolean} loadActionMenus\n * @property {boolean} loadIrFilters\n */\n\nexport const viewService = {\n    name: \"view\",\n    dependencies: [\"orm\"],\n    start(env, { orm }) {\n        let cache = {};\n\n        env.bus.on(\"CLEAR-CACHES\", null, () => {\n            cache = {};\n            const processedArchs = registry.category(\"__processed_archs__\");\n            processedArchs.content = {};\n            processedArchs.trigger(\"UPDATE\");\n        });\n\n        /**\n         * Loads various information concerning views: fields_view for each view,\n         * fields of the corresponding model, and optionally the filters.\n         *\n         * @param {LoadViewsParams} params\n         * @param {LoadViewsOptions} options\n         * @returns {Promise<ViewDescriptions>}\n         */\n        async function loadViews(params, options) {\n            const key = JSON.stringify([params.resModel, params.views, params.context, options]);\n            if (!cache[key]) {\n                cache[key] = orm\n                    .call(params.resModel, \"load_views\", [], {\n                        views: params.views,\n                        options: {\n                            action_id: options.actionId || false,\n                            load_filters: options.loadIrFilters || false,\n                            toolbar: options.loadActionMenus || false,\n                        },\n                        context: params.context,\n                    })\n                    .then((result) => {\n                        const viewDescriptions = {\n                            __legacy__: result,\n                        }; // for legacy purpose, keys in result are left in viewDescriptions\n                        for (const [, viewType] of params.views) {\n                            const viewDescription = JSON.parse(\n                                JSON.stringify(result.fields_views[viewType])\n                            );\n                            viewDescription.viewId = viewDescription.view_id;\n                            delete viewDescription.view_id;\n                            if (viewDescription.toolbar) {\n                                viewDescription.actionMenus = viewDescription.toolbar;\n                                delete viewDescription.toolbar;\n                            }\n                            viewDescription.fields = Object.assign(\n                                {},\n                                result.fields,\n                                viewDescription.fields\n                            ); // before a deep freeze was done.\n                            delete viewDescription.base_model; // unused\n                            delete viewDescription.field_parent; // unused\n                            if (viewType === \"search\" && options.loadIrFilters) {\n                                viewDescription.irFilters = result.filters;\n                            }\n                            viewDescriptions[viewType] = viewDescription;\n                        }\n                        return viewDescriptions;\n                    })\n                    .catch((error) => {\n                        delete cache[key];\n                        return Promise.reject(error);\n                    });\n            }\n            return cache[key];\n        }\n        return { loadViews };\n    },\n};\n\nregistry.category(\"services\").add(\"view\", viewService);\n", "/** @odoo-module **/\n\nimport { ActionDialog } from \"./action_dialog\";\n\nconst { Component, tags } = owl;\n\n// -----------------------------------------------------------------------------\n// ActionContainer (Component)\n// -----------------------------------------------------------------------------\nexport class ActionContainer extends Component {\n    setup() {\n        this.info = {};\n        this.env.bus.on(\"ACTION_MANAGER:UPDATE\", this, (info) => {\n            this.info = info;\n            this.render();\n        });\n    }\n\n    __destroy() {\n        this.env.bus.off(\"ACTION_MANAGER:UPDATE\", this);\n        super.__destroy();\n    }\n}\nActionContainer.components = { ActionDialog };\nActionContainer.template = tags.xml`\n    <t t-name=\"web.ActionContainer\">\n      <div class=\"o_action_manager\">\n        <t t-if=\"info.Component\" t-component=\"info.Component\" t-props=\"info.componentProps\" t-key=\"info.id\"/>\n      </div>\n    </t>`;\n", "/** @odoo-module **/\n\nimport { Dialog } from \"@web/core/dialog/dialog\";\nimport { DebugMenu } from \"@web/core/debug/debug_menu\";\nimport { useOwnDebugContext } from \"@web/core/debug/debug_context\";\nimport { useEffect } from \"@web/core/utils/hooks\";\n\nconst { hooks } = owl;\n\nconst LEGACY_SIZE_CLASSES = {\n    \"extra-large\": \"modal-xl\",\n    large: \"modal-lg\",\n    small: \"modal-sm\",\n};\n\n// -----------------------------------------------------------------------------\n// Action Dialog (Component)\n// -----------------------------------------------------------------------------\nclass ActionDialog extends Dialog {\n    setup() {\n        super.setup();\n        useOwnDebugContext();\n        this.actionRef = hooks.useRef(\"actionRef\");\n        const actionProps = this.props && this.props.actionProps;\n        const action = actionProps && actionProps.action;\n        this.actionType = action && action.type;\n        this.title = \"title\" in this.props ? this.props.title : this.constructor.title;\n    }\n}\nActionDialog.components = { ...Dialog.components, DebugMenu };\nActionDialog.template = \"web.ActionDialog\";\nActionDialog.bodyTemplate = \"web.ActionDialogBody\";\nActionDialog.props = {\n    ActionComponent: { optional: true },\n    actionProps: { optional: true },\n    title: { optional: true },\n    close: Function,\n};\n\n/**\n * This LegacyAdaptedActionDialog class will disappear when legacy code will be entirely rewritten.\n * The \"ActionDialog\" class should get exported from this file when the cleaning will occur.\n */\nclass LegacyAdaptedActionDialog extends ActionDialog {\n    setup() {\n        super.setup();\n        const actionProps = this.props && this.props.actionProps;\n        const action = actionProps && actionProps.action;\n        const actionContext = action && action.context;\n        const actionDialogSize = actionContext && actionContext.dialog_size;\n        this.size = LEGACY_SIZE_CLASSES[actionDialogSize] || this.constructor.size;\n        const ControllerComponent = this.props && this.props.ActionComponent;\n        const Controller = ControllerComponent && ControllerComponent.Component;\n        this.isLegacy = Controller && Controller.isLegacy;\n        useEffect(\n            () => {\n                if (this.isLegacy) {\n                    // Retrieve the widget climbing the wrappers\n                    const componentController = this.actionRef.comp;\n                    const controller = componentController.componentRef.comp;\n                    const viewAdapter = controller.controllerRef.comp;\n                    const widget = viewAdapter.widget;\n                    // Render legacy footer buttons\n                    const footer = this.modalRef.el.querySelector(\"footer\");\n                    widget.renderButtons($(footer));\n                }\n            },\n            () => []\n        ); // TODO: should this depend on actionRef.comp?\n    }\n}\nLegacyAdaptedActionDialog.footerTemplate = \"web.LegacyAdaptedActionDialogFooter\";\n\nexport { LegacyAdaptedActionDialog as ActionDialog };\n", "/** @odoo-module **/\n\nimport { getScrollPosition, setScrollPosition } from \"@web/core/utils/scrolling\";\nimport { useEffect } from \"@web/core/utils/hooks\";\n\nconst { useComponent } = owl.hooks;\n\n// -----------------------------------------------------------------------------\n// Action hook\n// -----------------------------------------------------------------------------\nconst scrollSymbol = Symbol(\"scroll\");\n\nexport class CallbackRecorder {\n    constructor() {\n        this.setup();\n    }\n    setup() {\n        this._callbacks = [];\n    }\n    /**\n     * @returns {Function[]}\n     */\n    get callbacks() {\n        return this._callbacks.map(({ callback }) => callback);\n    }\n    /**\n     * @param {any} owner\n     * @param {Function} callback\n     */\n    add(owner, callback) {\n        if (!callback) {\n            throw new Error(\"Missing callback\");\n        }\n        this._callbacks.push({ owner, callback });\n    }\n    /**\n     * @param {any} owner\n     */\n    remove(owner) {\n        this._callbacks = this._callbacks.filter((s) => s.owner !== owner);\n    }\n}\n\n/**\n * @param {CallbackRecorder} callbackRecorder\n * @param {Function} callback\n */\nexport function useCallbackRecorder(callbackRecorder, callback) {\n    const component = useComponent();\n    useEffect(\n        () => {\n            callbackRecorder.add(component, callback);\n            return () => callbackRecorder.remove(component);\n        },\n        () => []\n    );\n}\n\n/**\n */\nexport function useSetupAction(params = {}) {\n    const component = useComponent();\n    const {\n        __beforeLeave__,\n        __getGlobalState__,\n        __getLocalState__,\n        __getContext__,\n    } = component.env;\n\n    if (__beforeLeave__ && params.beforeLeave) {\n        useCallbackRecorder(__beforeLeave__, params.beforeLeave);\n    }\n    if (__getGlobalState__ && params.getGlobalState) {\n        useCallbackRecorder(__getGlobalState__, params.getGlobalState);\n    }\n    if (__getLocalState__) {\n        useCallbackRecorder(__getLocalState__, () => {\n            const state = {};\n            state[scrollSymbol] = getScrollPosition(component);\n            if (params.getLocalState) {\n                Object.assign(state, params.getLocalState());\n            }\n            return state;\n        });\n    }\n    if (__getContext__ && params.getContext) {\n        useCallbackRecorder(__getContext__, params.getContext);\n    }\n\n    useEffect(\n        () => {\n            if (component.props.state && component.props.state[scrollSymbol]) {\n                setScrollPosition(component, component.props.state[scrollSymbol]);\n            }\n        },\n        () => []\n    );\n}\n", "/** @odoo-module **/\n\nimport { browser } from \"@web/core/browser/browser\";\nimport { makeContext } from \"@web/core/context\";\nimport { useDebugCategory } from \"@web/core/debug/debug_context\";\nimport { download } from \"@web/core/network/download\";\nimport { evaluateExpr } from \"@web/core/py_js/py\";\nimport { registry } from \"@web/core/registry\";\nimport { KeepLast } from \"@web/core/utils/concurrency\";\nimport { useBus, useService } from \"@web/core/utils/hooks\";\nimport { sprintf } from \"@web/core/utils/strings\";\nimport { cleanDomFromBootstrap } from \"@web/legacy/utils\";\nimport { View } from \"@web/views/view\";\nimport { ActionDialog } from \"./action_dialog\";\nimport { CallbackRecorder } from \"./action_hook\";\n\nconst { Component, hooks, tags } = owl;\nconst { useRef, useSubEnv } = hooks;\n\nconst actionHandlersRegistry = registry.category(\"action_handlers\");\nconst actionRegistry = registry.category(\"actions\");\nconst viewRegistry = registry.category(\"views\");\n\n/** @typedef {number|false} ActionId */\n/** @typedef {Object} ActionDescription */\n/** @typedef {\"current\" | \"fullscreen\" | \"new\" | \"main\" | \"self\" | \"inline\"} ActionMode */\n/** @typedef {string} ActionTag */\n/** @typedef {string} ActionXMLId */\n/** @typedef {Object} Context */\n/** @typedef {Function} CallableFunction */\n/** @typedef {string} ViewType */\n\n/** @typedef {ActionId|ActionXMLId|ActionTag|ActionDescription} ActionRequest */\n\n/**\n * @typedef {Object} ActionOptions\n * @property {Context} [additionalContext]\n * @property {boolean} [clearBreadcrumbs]\n * @property {CallableFunction} [onClose]\n * @property {Object} [props]\n * @property {ViewType} [viewType]\n */\n\nexport function clearUncommittedChanges(env) {\n    const callbacks = [];\n    env.bus.trigger(\"CLEAR-UNCOMMITTED-CHANGES\", callbacks);\n    return Promise.all(callbacks.map((fn) => fn()));\n}\n\nfunction parseActiveIds(ids) {\n    const activeIds = [];\n    if (typeof ids === \"string\") {\n        activeIds.push(...ids.split(\",\").map(Number));\n    } else if (typeof ids === \"number\") {\n        activeIds.push(ids);\n    }\n    return activeIds;\n}\n\n// -----------------------------------------------------------------------------\n// Errors\n// -----------------------------------------------------------------------------\nexport class ViewNotFoundError extends Error {}\n\nexport class ControllerNotFoundError extends Error {}\n\nexport class InvalidButtonParamsError extends Error {}\n\n// -----------------------------------------------------------------------------\n// ActionManager (Service)\n// -----------------------------------------------------------------------------\n\n// regex that matches context keys not to forward from an action to another\nconst CTX_KEY_REGEX = /^(?:(?:default_|search_default_|show_).+|.+_view_ref|group_by|group_by_no_leaf|active_id|active_ids|orderedBy)$/;\n\n// only register this template once for all dynamic classes ControllerComponent\nconst ControllerComponentTemplate = tags.xml`<t t-component=\"Component\" t-props=\"props\"\n    t-ref=\"component\"\n    t-on-history-back=\"onHistoryBack\"\n    t-on-controller-title-updated.stop=\"onTitleUpdated\"/>`;\n\nfunction makeActionManager(env) {\n    const keepLast = new KeepLast();\n    let id = 0;\n    let controllerStack = [];\n    let dialogCloseProm;\n    let actionCache = {};\n    let dialog = null;\n\n    // The state action (or default user action if none) is loaded as soon as possible\n    // so that the next \"doAction\" will have its action ready when needed.\n    const actionParams = _getActionParams();\n    if (actionParams && typeof actionParams.actionRequest === \"number\") {\n        const { actionRequest, options } = actionParams;\n        _loadAction(actionRequest, options.additionalContext);\n    }\n\n    env.bus.on(\"CLEAR-CACHES\", null, () => {\n        actionCache = {};\n    });\n\n    // ---------------------------------------------------------------------------\n    // misc\n    // ---------------------------------------------------------------------------\n\n    /**\n     * Removes the current dialog from the action service's state.\n     * It returns the dialog's onClose callback to be able to propagate it to the next dialog.\n     *\n     * @return {Function|undefined} When there was a dialog, returns its onClose callback for propagation to next dialog.\n     */\n    function _removeDialog() {\n        if (dialog) {\n            const { onClose, remove } = dialog;\n            dialog = null;\n            // Remove the dialog from the dialog_service.\n            // The code is well enough designed to avoid falling in a function call loop.\n            remove();\n            return onClose;\n        }\n    }\n\n    /**\n     * Returns the last controller of the current controller stack.\n     *\n     * @returns {Controller|null}\n     */\n    function _getCurrentController() {\n        const stack = controllerStack;\n        return stack.length ? stack[stack.length - 1] : null;\n    }\n\n    /**\n     * Given an id, xmlid, tag (key of the client action registry) or directly an\n     * object describing an action.\n     *\n     * @private\n     * @param {ActionRequest} actionRequest\n     * @param {Context} [context={}]\n     * @returns {Promise<Action>}\n     */\n    async function _loadAction(actionRequest, context = {}) {\n        if (typeof actionRequest === \"string\" && actionRegistry.contains(actionRequest)) {\n            // actionRequest is a key in the actionRegistry\n            return {\n                target: \"current\",\n                tag: actionRequest,\n                type: \"ir.actions.client\",\n            };\n        }\n\n        if (typeof actionRequest === \"string\" || typeof actionRequest === \"number\") {\n            // actionRequest is an id or an xmlid\n            const additional_context = {\n                active_id: context.active_id,\n                active_ids: context.active_ids,\n                active_model: context.active_model,\n            };\n            const key = `${JSON.stringify(actionRequest)},${JSON.stringify(additional_context)}`;\n            if (!actionCache[key]) {\n                actionCache[key] = env.services.rpc(\"/web/action/load\", {\n                    action_id: actionRequest,\n                    additional_context,\n                });\n            }\n            const action = await actionCache[key];\n            if (!action) {\n                return {\n                    type: \"ir.actions.client\",\n                    tag: \"invalid_action\",\n                    id: actionRequest,\n                };\n            }\n            return Object.assign({}, action);\n        }\n\n        // actionRequest is an object describing the action\n        return actionRequest;\n    }\n\n    /**\n     * this function returns an action description\n     * with a unique jsId.\n     */\n    function _preprocessAction(action, context = {}) {\n        action._originalAction = JSON.stringify(action);\n        action.context = makeContext([context, action.context], env.services.user.context);\n        const domain = action.domain || [];\n        action.domain =\n            typeof domain === \"string\"\n                ? evaluateExpr(\n                        domain,\n                        Object.assign({}, env.services.user.context, action.context)\n                    )\n                : domain;\n        action = { ...action }; // manipulate a copy to keep cached action unmodified\n        action.jsId = `action_${++id}`;\n        if (action.type === \"ir.actions.act_window\" || action.type === \"ir.actions.client\") {\n            action.target = action.target || \"current\";\n        }\n        if (action.type === \"ir.actions.act_window\") {\n            action.views = [...action.views]; // manipulate a copy to keep cached action unmodified\n            action.controllers = {};\n            const target = action.target;\n            if (target !== \"inline\" && !(target === \"new\" && action.views[0][1] === \"form\")) {\n                // FIXME: search view arch is already sent with load_action, so either remove it\n                // from there or load all fieldviews alongside the action for the sake of consistency\n                const searchViewId = action.search_view_id ? action.search_view_id[0] : false;\n                action.views.push([searchViewId, \"search\"]);\n            }\n        }\n        return action;\n    }\n\n    /**\n     * @private\n     * @param {string} viewType\n     * @throws {Error} if the current controller is not a view\n     * @returns {View | null}\n     */\n    function _getView(viewType) {\n        const currentController = controllerStack[controllerStack.length - 1];\n        if (currentController.action.type !== \"ir.actions.act_window\") {\n            throw new Error(`switchView called but the current controller isn't a view`);\n        }\n        const view = currentController.views.find((view) => view.type === viewType);\n        return view || null;\n    }\n\n    /**\n     * Given a controller stack, returns the list of breadcrumb items.\n     *\n     * @private\n     * @param {ControllerStack} stack\n     * @returns {Breadcrumbs}\n     */\n    function _getBreadcrumbs(stack) {\n        return stack\n            .filter((controller) => controller.action.tag !== \"menu\")\n            .map((controller) => {\n                return {\n                    jsId: controller.jsId,\n                    name: controller.title || controller.action.name || env._t(\"Undefined\"),\n                };\n            });\n    }\n\n    /**\n     * @private\n     * @returns {ActionParams | null}\n     */\n    function _getActionParams() {\n        const state = env.services.router.current.hash;\n        const options = { clearBreadcrumbs: true };\n        let actionRequest = null;\n        if (state.action) {\n            // ClientAction\n            if (actionRegistry.contains(state.action)) {\n                actionRequest = {\n                    params: state,\n                    tag: state.action,\n                    type: \"ir.actions.client\",\n                };\n            } else {\n                // The action to load isn't the current one => executes it\n                actionRequest = state.action;\n                const context = { params: state };\n                if (state.active_id) {\n                    context.active_id = state.active_id;\n                }\n                if (state.active_ids) {\n                    context.active_ids = parseActiveIds(state.active_ids);\n                } else if (state.active_id) {\n                    context.active_ids = [state.active_id];\n                }\n                Object.assign(options, {\n                    additionalContext: context,\n                    viewType: state.view_type,\n                });\n                if (state.id) {\n                    options.props = { resId: state.id };\n                }\n            }\n        } else if (state.model) {\n            if (state.id) {\n                actionRequest = {\n                    res_model: state.model,\n                    res_id: state.id,\n                    type: \"ir.actions.act_window\",\n                    views: [[state.view_id ? state.view_id : false, \"form\"]],\n                };\n            } else if (state.view_type) {\n                // This is a window action on a multi-record view => restores it from\n                // the session storage\n                const storedAction = browser.sessionStorage.getItem(\"current_action\");\n                const lastAction = JSON.parse(storedAction || \"{}\");\n                if (lastAction.res_model === state.model) {\n                    if (lastAction.context) {\n                        // If this method is called because of a company switch, the\n                        // stored allowed_company_ids is incorrect.\n                        // (Fix will be improved in master)\n                        delete lastAction.context.allowed_company_ids;\n                    }\n                    actionRequest = lastAction;\n                    options.viewType = state.view_type;\n                }\n            }\n        }\n        // If no action => falls back on the user default action (if any).\n        if (!actionRequest && env.services.user.home_action_id) {\n            actionRequest = env.services.user.home_action_id;\n        }\n        return actionRequest ? { actionRequest, options } : null;\n    }\n\n    /**\n     * @param {ClientAction | ActWindowAction} action\n     * @param {Object} props\n     * @returns {{ props: ActionProps, config: Config }}\n     */\n    function _getActionInfo(action, props) {\n        return {\n            props: Object.assign({}, props, { action, actionId: action.id }),\n            config: {\n                actionId: action.id,\n                actionType: action.type,\n                actionFlags: action.flags,\n                displayName: action.display_name || action.name || \"\",\n                views: action.views,\n            },\n        };\n    }\n\n    /**\n     * @param {Action} action\n     * @returns {ActionMode}\n     */\n    function _getActionMode(action) {\n        if (action.target === \"new\") {\n            // No possible override for target=\"new\"\n            return \"new\";\n        }\n        if (action.type === \"ir.actions.client\") {\n            const clientAction = actionRegistry.get(action.tag);\n            if (clientAction.target) {\n                // Target is forced by the definition of the client action\n                return clientAction.target;\n            }\n        }\n        if (controllerStack.some((c) => c.action.target === \"fullscreen\")) {\n            // Force fullscreen when one of the controllers is set to fullscreen\n            return \"fullscreen\";\n        }\n        // Default: current\n        return \"current\";\n    }\n\n    /**\n     * @private\n     * @returns {SwitchViewParams | null}\n     */\n    function _getSwitchViewParams() {\n        const state = env.services.router.current.hash;\n        if (state.action && !actionRegistry.contains(state.action)) {\n            const currentController = controllerStack[controllerStack.length - 1];\n            const currentActionId =\n                currentController && currentController.action && currentController.action.id;\n            // Window Action: determines model, viewType etc....\n            if (\n                currentController &&\n                currentController.action.type === \"ir.actions.act_window\" &&\n                currentActionId === state.action\n            ) {\n                const props = { resId: state.id || false };\n                const viewType = state.view_type || currentController.view.type;\n                return { viewType, props };\n            }\n        }\n        return null;\n    }\n\n    /**\n     * @param {BaseView} view\n     * @param {ActWindowAction} action\n     * @param {BaseView[]} views\n     * @param {Object} props\n     * @returns {{ props: ViewProps, config: Config }}\n     */\n    function _getViewInfo(view, action, views, props = {}) {\n        const target = action.target;\n        const viewSwitcherEntries = views\n            .filter((v) => v.multiRecord === view.multiRecord)\n            .map((v) => {\n                const viewSwitcherEntry = {\n                    icon: v.icon,\n                    name: v.display_name.toString(),\n                    type: v.type,\n                    multiRecord: v.multiRecord,\n                    accessKey: v.accessKey,\n                };\n                if (view.type === v.type) {\n                    viewSwitcherEntry.active = true;\n                }\n                return viewSwitcherEntry;\n            });\n        const context = action.context || {};\n        let groupBy = context.group_by || [];\n        if (typeof groupBy === \"string\") {\n            groupBy = [groupBy];\n        }\n        const viewProps = Object.assign({}, props, {\n            context,\n            display: { mode: target === \"new\" ? \"inDialog\" : target },\n            domain: action.domain || [],\n            groupBy,\n            loadActionMenus: target !== \"new\" && target !== \"inline\",\n            loadIrFilters: action.views.some((v) => v[1] === \"search\"),\n            resModel: action.res_model,\n            type: view.type,\n        });\n\n        if (target === \"inline\") {\n            viewProps.searchMenuTypes = [];\n        }\n\n        const specialKeys = [\"help\", \"useSampleModel\", \"limit\", \"count\"];\n        for (const key of specialKeys) {\n            if (key in action) {\n                if (key === \"help\") {\n                    viewProps.noContentHelp = action.help;\n                } else {\n                    viewProps[key] = action[key];\n                }\n            }\n        }\n\n        if (context.search_disable_custom_filters) {\n            viewProps.activateFavorite = false;\n        }\n\n        // view specific\n        if (action.res_id) {\n            viewProps.resId = action.res_id;\n        }\n\n        // LEGACY CODE COMPATIBILITY: remove when all views will be written in owl\n        if (view.isLegacy) {\n            const legacyActionInfo = { ...action, ...viewProps.action };\n            Object.assign(viewProps, {\n                action: legacyActionInfo,\n                View: view,\n                views: action.views,\n            });\n        }\n        // END LEGACY CODE COMPATIBILITY\n\n        return {\n            props: viewProps,\n            config: {\n                actionId: action.id,\n                actionType: action.type,\n                actionFlags: action.flags,\n                displayName: action.display_name || action.name || \"\",\n                views: action.views,\n                viewSwitcherEntries,\n            },\n        };\n    }\n\n    /**\n     * Computes the position of the controller in the nextStack according to options\n     * @param {Object} options\n     * @param {boolean} [options.clearBreadcrumbs=false]\n     * @param {'replaceLast' | 'replaceLastAction'} [options.stackPosition]\n     * @param {number} [options.index]\n     */\n    function _computeStackIndex(options) {\n        let index = null;\n        if (options.clearBreadcrumbs) {\n            index = 0;\n        } else if (options.stackPosition === \"replaceCurrentAction\") {\n            const currentController = controllerStack[controllerStack.length - 1];\n            if (currentController) {\n                index = controllerStack.findIndex(\n                    (ct) => ct.action.jsId === currentController.action.jsId\n                );\n            }\n        } else if (options.stackPosition === \"replacePreviousAction\") {\n            let last;\n            for (let i = controllerStack.length - 1; i >= 0; i--) {\n                const action = controllerStack[i].action.jsId;\n                if (!last) {\n                    last = action;\n                }\n                if (action !== last) {\n                    last = action;\n                    break;\n                }\n            }\n            if (last) {\n                index = controllerStack.findIndex((ct) => ct.action.jsId === last);\n            }\n            // TODO: throw if there is no previous action?\n        } else if (\"index\" in options) {\n            index = options.index;\n        } else {\n            index = controllerStack.length;\n        }\n        return index;\n    }\n\n    /**\n     * Triggers a re-rendering with respect to the given controller.\n     *\n     * @private\n     * @param {Controller} controller\n     * @param {UpdateStackOptions} options\n     * @param {boolean} [options.clearBreadcrumbs=false]\n     * @param {number} [options.index]\n     * @returns {Promise<Number>}\n     */\n    async function _updateUI(controller, options = {}) {\n        let resolve;\n        let reject;\n        let dialogCloseResolve;\n        const currentActionProm = new Promise((_res, _rej) => {\n            resolve = _res;\n            reject = _rej;\n        });\n        const action = controller.action;\n        const index = _computeStackIndex(options);\n        const controllerArray = [controller];\n        if (options.lazyController) {\n            controllerArray.unshift(options.lazyController);\n        }\n        const nextStack = controllerStack.slice(0, index).concat(controllerArray);\n\n        // Compute breadcrumbs\n        if (action.target === \"new\") {\n            controller.config.breadcrumbs = [];\n        } else {\n            controller.config.breadcrumbs = _getBreadcrumbs(nextStack.slice(0, -1));\n        }\n        if (controller.Component.isLegacy) {\n            controller.props.breadcrumbs = controller.config.breadcrumbs;\n        }\n\n        class ControllerComponent extends Component {\n            setup() {\n                this.Component = controller.Component;\n                this.componentRef = useRef(\"component\");\n                this.titleService = useService(\"title\");\n                useDebugCategory(\"action\", { action });\n                useSubEnv({ config: controller.config });\n                if (action.target !== \"new\") {\n                    this.__beforeLeave__ = new CallbackRecorder();\n                    this.__getGlobalState__ = new CallbackRecorder();\n                    this.__getLocalState__ = new CallbackRecorder();\n                    useBus(env.bus, \"CLEAR-UNCOMMITTED-CHANGES\", (callbacks) => {\n                        const beforeLeaveFns = this.__beforeLeave__.callbacks;\n                        callbacks.push(...beforeLeaveFns);\n                    });\n                    useSubEnv({\n                        __beforeLeave__: this.__beforeLeave__,\n                        __getGlobalState__: this.__getGlobalState__,\n                        __getLocalState__: this.__getLocalState__,\n                    });\n                }\n                this.isMounted = false;\n            }\n            catchError(error) {\n                reject(error);\n                cleanDomFromBootstrap();\n                if (action.target === \"new\") {\n                    // get the dialog service to close the dialog.\n                    throw error;\n                } else {\n                    const lastCt = controllerStack[controllerStack.length - 1];\n                    let info = {};\n                    if (lastCt) {\n                        if (lastCt.jsId === controller.jsId) {\n                            // the error occurred on the controller which is\n                            // already in the DOM, so simply show the error\n                            Promise.resolve().then(() => {\n                                throw error;\n                            });\n                            return;\n                        } else {\n                            info = lastCt.__info__;\n                            // the error occurred while rendering a new controller,\n                            // so go back to the last non faulty controller\n                            // (the error will be shown anyway as the promise\n                            // has been rejected)\n                        }\n                    }\n                    env.bus.trigger(\"ACTION_MANAGER:UPDATE\", info);\n                }\n            }\n            mounted() {\n                if (action.target === \"new\") {\n                    dialogCloseProm = new Promise((_r) => {\n                        dialogCloseResolve = _r;\n                    }).then(() => {\n                        dialogCloseProm = undefined;\n                    });\n                    dialog = nextDialog;\n                } else {\n                    controller.getGlobalState = () => {\n                        const exportFns = this.__getGlobalState__.callbacks;\n                        if (exportFns.length) {\n                            return Object.assign({}, ...exportFns.map((fn) => fn()));\n                        }\n                    };\n                    controller.getLocalState = () => {\n                        const exportFns = this.__getLocalState__.callbacks;\n                        if (exportFns.length) {\n                            return Object.assign({}, ...exportFns.map((fn) => fn()));\n                        }\n                    };\n\n                    // LEGACY CODE COMPATIBILITY: remove when controllers will be written in owl\n                    // we determine here which actions no longer occur in the nextStack,\n                    // and we manually destroy all their controller's widgets\n                    const nextStackActionIds = nextStack.map((c) => c.action.jsId);\n                    const toDestroy = new Set();\n                    for (const c of controllerStack) {\n                        if (!nextStackActionIds.includes(c.action.jsId)) {\n                            if (c.action.type === \"ir.actions.act_window\") {\n                                for (const viewType in c.action.controllers) {\n                                    const controller = c.action.controllers[viewType];\n                                    if (controller.Component.isLegacy) {\n                                        toDestroy.add(controller);\n                                    }\n                                }\n                            } else {\n                                toDestroy.add(c);\n                            }\n                        }\n                    }\n                    for (const c of toDestroy) {\n                        if (c.exportedState && c.exportedState.__legacy_widget__) {\n                            c.exportedState.__legacy_widget__.destroy();\n                        }\n                    }\n                    // END LEGACY CODE COMPATIBILITY\n                    controllerStack = nextStack; // the controller is mounted, commit the new stack\n                    pushState(controller);\n                    this.titleService.setParts({\n                        action: controller.title || this.env.config.displayName,\n                    });\n                    browser.sessionStorage.setItem(\"current_action\", action._originalAction);\n                }\n                resolve();\n                env.bus.trigger(\"ACTION_MANAGER:UI-UPDATED\", _getActionMode(action));\n                this.isMounted = true;\n            }\n            willUnmount() {\n                if (action.target === \"new\" && dialogCloseResolve) {\n                    dialogCloseResolve();\n                }\n            }\n            onHistoryBack() {\n                const previousController = controllerStack[controllerStack.length - 2];\n                if (previousController && !dialog) {\n                    restore(previousController.jsId);\n                } else {\n                    _executeCloseAction();\n                }\n            }\n            onTitleUpdated(ev) {\n                controller.title = ev.detail;\n                if (this.isMounted) {\n                    // if not mounted yet, will be done in \"mounted\"\n                    this.titleService.setParts({ action: controller.title });\n                }\n            }\n        }\n        ControllerComponent.template = ControllerComponentTemplate;\n        ControllerComponent.Component = controller.Component;\n\n        let nextDialog = null;\n        if (action.target === \"new\") {\n            cleanDomFromBootstrap();\n            const actionDialogProps = {\n                // TODO add size\n                ActionComponent: ControllerComponent,\n                actionProps: controller.props,\n            };\n            if (action.name) {\n                actionDialogProps.title = action.name;\n            }\n\n            let onClose = _removeDialog();\n            const removeDialog = env.services.dialog.add(ActionDialog, actionDialogProps, {\n                onClose: () => {\n                    const onClose = _removeDialog();\n                    if (onClose) {\n                        onClose();\n                    }\n                    cleanDomFromBootstrap();\n                },\n            });\n            nextDialog = {\n                remove: removeDialog,\n                onClose: onClose || options.onClose,\n            };\n            return currentActionProm;\n        }\n\n        const currentController = _getCurrentController();\n        if (currentController && currentController.getLocalState) {\n            currentController.exportedState = currentController.getLocalState();\n        }\n        if (controller.exportedState) {\n            controller.props.state = controller.exportedState;\n        }\n\n        // TODO DAM Remarks:\n        // this thing seems useless for client actions.\n        // restore and switchView (at least) use this --> cannot be done in switchView only\n        // if prop globalState has been passed in doAction, since the action is new the prop won't be overridden in l655.\n        // if globalState is not useful for client actions --> maybe use that thing in useSetupView instead of useSetupAction?\n        // a good thing: the Object.assign seems to reflect the use of \"externalState\" in legacy Model class --> things should be fine.\n        if (currentController && currentController.getGlobalState) {\n            currentController.action.globalState = Object.assign(\n                {},\n                currentController.action.globalState,\n                currentController.getGlobalState() // what if this = {}?\n            );\n        }\n        if (controller.action.globalState) {\n            controller.props.globalState = controller.action.globalState;\n        }\n\n        const closingProm = _executeCloseAction();\n\n        controller.__info__ = {\n            id: ++id,\n            Component: ControllerComponent,\n            componentProps: controller.props,\n        };\n        env.bus.trigger(\"ACTION_MANAGER:UPDATE\", controller.__info__);\n        return Promise.all([currentActionProm, closingProm]).then((r) => r[0]);\n    }\n\n    // ---------------------------------------------------------------------------\n    // ir.actions.act_url\n    // ---------------------------------------------------------------------------\n\n    /**\n     * Executes actions of type 'ir.actions.act_url', i.e. redirects to the\n     * given url.\n     *\n     * @private\n     * @param {ActURLAction} action\n     * @param {ActionOptions} options\n     */\n    function _executeActURLAction(action, options) {\n        let url = action.url;\n        if (url && !(url.startsWith('http') || url.startsWith('/')))\n            url = '/' + url;\n        if (action.target === \"self\") {\n            env.services.router.redirect(url);\n        } else {\n            const w = browser.open(url, \"_blank\");\n            if (!w || w.closed || typeof w.closed === \"undefined\") {\n                const msg = env._t(\n                    \"A popup window has been blocked. You may need to change your \" +\n                        \"browser settings to allow popup windows for this page.\"\n                );\n                env.services.notification.add(msg, {\n                    sticky: true,\n                    type: \"warning\",\n                });\n            }\n            if (options.onClose) {\n                options.onClose();\n            }\n        }\n    }\n\n    // ---------------------------------------------------------------------------\n    // ir.actions.act_window\n    // ---------------------------------------------------------------------------\n\n    /**\n     * Executes an action of type 'ir.actions.act_window'.\n     *\n     * @private\n     * @param {ActWindowAction} action\n     * @param {ActionOptions} options\n     */\n    function _executeActWindowAction(action, options) {\n        const views = [];\n        for (const [, type] of action.views) {\n            if (viewRegistry.contains(type)) {\n                views.push(viewRegistry.get(type));\n            }\n        }\n        if (!views.length) {\n            throw new Error(`No view found for act_window action ${action.id}`);\n        }\n\n        let view = options.viewType && views.find((v) => v.type === options.viewType);\n        let lazyView;\n\n        if (view && !view.multiRecord) {\n            lazyView = views[0].multiRecord ? views[0] : undefined;\n        } else if (!view) {\n            view = views[0];\n        }\n\n        if (env.isSmall) {\n            if (!view.isMobileFriendly) {\n                view = _findMobileView(views, view.multiRecord) || view;\n            }\n            if (lazyView && !lazyView.isMobileFriendly) {\n                lazyView = _findMobileView(views, lazyView.multiRecord) || lazyView;\n            }\n        }\n\n        const controller = {\n            jsId: `controller_${++id}`,\n            Component: view.isLegacy ? view : View,\n            action,\n            view,\n            views,\n            ..._getViewInfo(view, action, views, options.props),\n        };\n        action.controllers[view.type] = controller;\n\n        const updateUIOptions = {\n            clearBreadcrumbs: options.clearBreadcrumbs,\n            onClose: options.onClose,\n            stackPosition: options.stackPosition,\n        };\n\n        if (lazyView) {\n            updateUIOptions.lazyController = {\n                jsId: `controller_${++id}`,\n                Component: lazyView.isLegacy ? lazyView : View,\n                action,\n                view: lazyView,\n                views,\n                ..._getViewInfo(lazyView, action, views),\n            };\n        }\n\n        return _updateUI(controller, updateUIOptions);\n    }\n\n    /**\n     * Helper function to find the first mobile-friendly view, if any.\n     *\n     * @private\n     * @param {Array} views an array of views\n     * @param {boolean} multiRecord true if we search for a multiRecord view\n     * @returns {Object|undefined} first mobile-friendly view found\n     */\n    function _findMobileView(views, multiRecord) {\n        return views.find((view) => view.isMobileFriendly && view.multiRecord === multiRecord);\n    }\n\n    // ---------------------------------------------------------------------------\n    // ir.actions.client\n    // ---------------------------------------------------------------------------\n\n    /**\n     * Executes an action of type 'ir.actions.client'.\n     *\n     * @private\n     * @param {ClientAction} action\n     * @param {ActionOptions} options\n     */\n    async function _executeClientAction(action, options) {\n        const clientAction = actionRegistry.get(action.tag);\n        if (clientAction.prototype instanceof Component) {\n            if (action.target !== \"new\") {\n                await clearUncommittedChanges(env);\n                if (clientAction.target) {\n                    action.target = clientAction.target;\n                }\n            }\n            const controller = {\n                jsId: `controller_${++id}`,\n                Component: clientAction,\n                action,\n                ..._getActionInfo(action, options.props),\n            };\n            return _updateUI(controller, {\n                clearBreadcrumbs: options.clearBreadcrumbs,\n                stackPosition: options.stackPosition,\n                onClose: options.onClose,\n            });\n        } else {\n            const next = await clientAction(env, action);\n            if (next) {\n                return doAction(next, options);\n            }\n        }\n    }\n\n    // ---------------------------------------------------------------------------\n    // ir.actions.report\n    // ---------------------------------------------------------------------------\n\n    // messages that might be shown to the user dependening on the state of wkhtmltopdf\n    const link = '<br><br><a href=\"http://wkhtmltopdf.org/\" target=\"_blank\">wkhtmltopdf.org</a>';\n    const WKHTMLTOPDF_MESSAGES = {\n        broken:\n            env._t(\n                \"Your installation of Wkhtmltopdf seems to be broken. The report will be shown \" +\n                    \"in html.\"\n            ) + link,\n        install:\n            env._t(\n                \"Unable to find Wkhtmltopdf on this system. The report will be shown in \" + \"html.\"\n            ) + link,\n        upgrade:\n            env._t(\n                \"You should upgrade your version of Wkhtmltopdf to at least 0.12.0 in order to \" +\n                    \"get a correct display of headers and footers as well as support for \" +\n                    \"table-breaking between pages.\"\n            ) + link,\n        workers: env._t(\n            \"You need to start Odoo with at least two workers to print a pdf version of \" +\n                \"the reports.\"\n        ),\n    };\n\n    // only check the wkhtmltopdf state once, so keep the rpc promise\n    let wkhtmltopdfStateProm;\n\n    /**\n     * Generates the report url given a report action.\n     *\n     * @private\n     * @param {ReportAction} action\n     * @param {ReportType} type\n     * @returns {string}\n     */\n    function _getReportUrl(action, type) {\n        let url = `/report/${type}/${action.report_name}`;\n        const actionContext = action.context || {};\n        if (action.data && JSON.stringify(action.data) !== \"{}\") {\n            // build a query string with `action.data` (it's the place where reports\n            // using a wizard to customize the output traditionally put their options)\n            const options = encodeURIComponent(JSON.stringify(action.data));\n            const context = encodeURIComponent(JSON.stringify(actionContext));\n            url += `?options=${options}&context=${context}`;\n        } else {\n            if (actionContext.active_ids) {\n                url += `/${actionContext.active_ids.join(\",\")}`;\n            }\n            if (type === \"html\") {\n                const context = encodeURIComponent(JSON.stringify(env.services.user.context));\n                url += `?context=${context}`;\n            }\n        }\n        return url;\n    }\n\n    /**\n     * Launches download action of the report\n     *\n     * @private\n     * @param {ReportAction} action\n     * @param {ActionOptions} options\n     * @returns {Promise}\n     */\n    async function _triggerDownload(action, options, type) {\n        const url = _getReportUrl(action, type);\n        env.services.ui.block();\n        try {\n            await download({\n                url: \"/report/download\",\n                data: {\n                    data: JSON.stringify([url, action.report_type]),\n                    context: JSON.stringify(env.services.user.context),\n                },\n            });\n        } finally {\n            env.services.ui.unblock();\n        }\n        const onClose = options.onClose;\n        if (action.close_on_report_download) {\n            return doAction({ type: \"ir.actions.act_window_close\" }, { onClose });\n        } else if (onClose) {\n            onClose();\n        }\n    }\n\n    function _executeReportClientAction(action, options) {\n        const props = Object.assign({}, options.props, {\n            data: action.data,\n            display_name: action.display_name,\n            name: action.name,\n            report_file: action.report_file,\n            report_name: action.report_name,\n            report_url: _getReportUrl(action, \"html\"),\n            context: Object.assign({}, action.context),\n        });\n\n        const controller = {\n            jsId: `controller_${++id}`,\n            // for historical reasons, the report Component is a client action,\n            // but there's no need to keep this when it will be converted to owl.\n            Component: actionRegistry.get(\"report.client_action\"),\n            action,\n            ..._getActionInfo(action, props),\n        };\n\n        return _updateUI(controller, {\n            clearBreadcrumbs: options.clearBreadcrumbs,\n            stackPosition: options.stackPosition,\n            onClose: options.onClose,\n        });\n    }\n\n    /**\n     * Executes actions of type 'ir.actions.report'.\n     *\n     * @private\n     * @param {ReportAction} action\n     * @param {ActionOptions} options\n     */\n    async function _executeReportAction(action, options) {\n        const handlers = registry.category(\"ir.actions.report handlers\").getAll();\n        for (const handler of handlers) {\n            const result = await handler(action, options, env);\n            if (result) {\n                return result;\n            }\n        }\n        if (action.report_type === \"qweb-html\") {\n            return _executeReportClientAction(action, options);\n        } else if (action.report_type === \"qweb-pdf\") {\n            // check the state of wkhtmltopdf before proceeding\n            if (!wkhtmltopdfStateProm) {\n                wkhtmltopdfStateProm = env.services.rpc(\"/report/check_wkhtmltopdf\");\n            }\n            const state = await wkhtmltopdfStateProm;\n            // display a notification according to wkhtmltopdf's state\n            if (state in WKHTMLTOPDF_MESSAGES) {\n                env.services.notification.add(WKHTMLTOPDF_MESSAGES[state], {\n                    sticky: true,\n                    title: env._t(\"Report\"),\n                });\n            }\n            if (state === \"upgrade\" || state === \"ok\") {\n                // trigger the download of the PDF report\n                return _triggerDownload(action, options, \"pdf\");\n            } else {\n                // open the report in the client action if generating the PDF is not possible\n                return _executeReportClientAction(action, options);\n            }\n        } else if (action.report_type === \"qweb-text\") {\n            return _triggerDownload(action, options, \"text\");\n        } else {\n            console.error(\n                `The ActionManager can't handle reports of type ${action.report_type}`,\n                action\n            );\n        }\n    }\n\n    // ---------------------------------------------------------------------------\n    // ir.actions.server\n    // ---------------------------------------------------------------------------\n\n    /**\n     * Executes an action of type 'ir.actions.server'.\n     *\n     * @private\n     * @param {ServerAction} action\n     * @param {ActionOptions} options\n     * @returns {Promise<void>}\n     */\n    async function _executeServerAction(action, options) {\n        const runProm = env.services.rpc(\"/web/action/run\", {\n            action_id: action.id,\n            context: makeContext([env.services.user.context, action.context]),\n        });\n        let nextAction = await keepLast.add(runProm);\n        nextAction = nextAction || { type: \"ir.actions.act_window_close\" };\n        return doAction(nextAction, options);\n    }\n\n    async function _executeCloseAction(params = {}) {\n        let onClose;\n        if (dialog) {\n            onClose = _removeDialog();\n        } else {\n            onClose = params.onClose;\n        }\n        if (onClose) {\n            await onClose(params.onCloseInfo);\n        }\n\n        return dialogCloseProm;\n    }\n\n    // ---------------------------------------------------------------------------\n    // public API\n    // ---------------------------------------------------------------------------\n\n    /**\n     * Main entry point of a 'doAction' request. Loads the action and executes it.\n     *\n     * @param {ActionRequest} actionRequest\n     * @param {ActionOptions} options\n     * @returns {Promise<number | undefined | void>}\n     */\n    async function doAction(actionRequest, options = {}) {\n        const actionProm = _loadAction(actionRequest, options.additionalContext);\n        let action = await keepLast.add(actionProm);\n        action = _preprocessAction(action, options.additionalContext);\n        options.clearBreadcrumbs = action.target === \"main\" || options.clearBreadcrumbs;\n        switch (action.type) {\n            case \"ir.actions.act_url\":\n                return _executeActURLAction(action, options);\n            case \"ir.actions.act_window\":\n                if (action.target !== \"new\") {\n                    await clearUncommittedChanges(env);\n                }\n                return _executeActWindowAction(action, options);\n            case \"ir.actions.act_window_close\":\n                return _executeCloseAction({ onClose: options.onClose, onCloseInfo: action.infos });\n            case \"ir.actions.client\":\n                return _executeClientAction(action, options);\n            case \"ir.actions.report\":\n                return _executeReportAction(action, options);\n            case \"ir.actions.server\":\n                return _executeServerAction(action, options);\n            default: {\n                let handler = actionHandlersRegistry.get(action.type, null);\n                if (handler !== null) {\n                    return handler({ env, action, options });\n                }\n                throw new Error(\n                    `The ActionManager service can't handle actions of type ${action.type}`\n                );\n            }\n        }\n    }\n\n    /**\n     * Executes an action on top of the current one (typically, when a button in a\n     * view is clicked). The button may be of type 'object' (call a given method\n     * of a given model) or 'action' (execute a given action). Alternatively, the\n     * button may have the attribute 'special', and in this case an\n     * 'ir.actions.act_window_close' is executed.\n     *\n     * @param {DoActionButtonParams} params\n     * @returns {Promise<void>}\n     */\n    async function doActionButton(params) {\n        // determine the action to execute according to the params\n        let action;\n        const context = makeContext([params.context, params.buttonContext]);\n        if (params.special) {\n            action = { type: \"ir.actions.act_window_close\", infos: { special: true } };\n        } else if (params.type === \"object\") {\n            // call a Python Object method, which may return an action to execute\n            let args = params.resId ? [[params.resId]] : [params.resIds];\n            if (params.args) {\n                let additionalArgs;\n                try {\n                    // warning: quotes and double quotes problem due to json and xml clash\n                    // maybe we should force escaping in xml or do a better parse of the args array\n                    additionalArgs = JSON.parse(params.args.replace(/'/g, '\"'));\n                } catch (e) {\n                    browser.console.error(\"Could not JSON.parse arguments\", params.args);\n                }\n                args = args.concat(additionalArgs);\n            }\n            const callProm = env.services.rpc(\"/web/dataset/call_button\", {\n                args,\n                kwargs: { context },\n                method: params.name,\n                model: params.resModel,\n            });\n            action = await keepLast.add(callProm);\n            action =\n                action && typeof action === \"object\"\n                    ? action\n                    : { type: \"ir.actions.act_window_close\" };\n        } else if (params.type === \"action\") {\n            // execute a given action, so load it first\n            context.active_id = params.resId || null;\n            context.active_ids = params.resIds;\n            context.active_model = params.resModel;\n            action = await keepLast.add(_loadAction(params.name, context));\n        } else {\n            throw new InvalidButtonParamsError(\"Missing type for doActionButton request\");\n        }\n        // filter out context keys that are specific to the current action, because:\n        //  - wrong default_* and search_default_* values won't give the expected result\n        //  - wrong group_by values will fail and forbid rendering of the destination view\n        let currentCtx = {};\n        for (const key in params.context) {\n            if (key.match(CTX_KEY_REGEX) === null) {\n                currentCtx[key] = params.context[key];\n            }\n        }\n        const activeCtx = { active_model: params.resModel };\n        if (params.resId) {\n            activeCtx.active_id = params.resId;\n            activeCtx.active_ids = [params.resId];\n        }\n        action.context = makeContext([currentCtx, params.buttonContext, activeCtx, action.context]);\n        // in case an effect is returned from python and there is already an effect\n        // attribute on the button, the priority is given to the button attribute\n        const effect = params.effect ? evaluateExpr(params.effect) : action.effect;\n        const options = { onClose: params.onClose };\n        await doAction(action, options);\n        if (params.close) {\n            await _executeCloseAction();\n        }\n        if (effect) {\n            env.services.effect.add(effect);\n        }\n    }\n\n    /**\n     * Switches to the given view type in action of the last controller of the\n     * stack. This action must be of type 'ir.actions.act_window'.\n     *\n     * @param {ViewType} viewType\n     * @param {Object} [props={}]\n     * @throws {ViewNotFoundError} if the viewType is not found on the current action\n     * @returns {Promise<Number>}\n     */\n    async function switchView(viewType, props = {}) {\n        if (dialog) {\n            // we don't want to switch view when there's a dialog open, as we would\n            // not switch in the correct action (action in background != dialog action)\n            return;\n        }\n        const controller = controllerStack[controllerStack.length - 1];\n        const view = _getView(viewType);\n        if (!view) {\n            throw new ViewNotFoundError(\n                sprintf(\n                    env._t(\"No view of type '%s' could be found in the current action.\"),\n                    viewType\n                )\n            );\n        }\n        await keepLast.add(Promise.resolve());\n        const newController = controller.action.controllers[viewType] || {\n            jsId: `controller_${++id}`,\n            Component: view.isLegacy ? view : View,\n            action: controller.action,\n            views: controller.views,\n            view,\n        };\n\n        // LEGACY CODE COMPATIBILITY: remove when controllers will be written in owl\n        if (view.isLegacy && newController.jsId === controller.jsId) {\n            // case where a legacy view is reloaded via the view switcher\n            const { __legacy_widget__ } = controller.getLocalState();\n            const params = {};\n            if (\"resId\" in props) {\n                params.currentId = props.resId;\n            }\n            return __legacy_widget__.reload(params);\n        }\n        // END LEGACY CODE COMPATIBILITY\n\n        Object.assign(\n            newController,\n            _getViewInfo(view, controller.action, controller.views, props)\n        );\n        controller.action.controllers[viewType] = newController;\n        let index;\n        if (view.multiRecord) {\n            index = controllerStack.findIndex((ct) => ct.action.jsId === controller.action.jsId);\n            index = index > -1 ? index : controllerStack.length - 1;\n        } else {\n            // This case would mostly happen when loadState detects a change in the URL.\n            // Also, I guess we may need it when we have other monoRecord views\n            index = controllerStack.findIndex(\n                (ct) => ct.action.jsId === controller.action.jsId && !ct.view.multiRecord\n            );\n            index = index > -1 ? index : controllerStack.length;\n        }\n        await clearUncommittedChanges(env);\n        return _updateUI(newController, { index });\n    }\n\n    /**\n     * Restores a controller from the controller stack given its id. Typically,\n     * this function is called when clicking on the breadcrumbs. If no id is given\n     * restores the previous controller from the stack (penultimate).\n     *\n     * @param {string} jsId\n     */\n    async function restore(jsId) {\n        await keepLast.add(Promise.resolve());\n        let index;\n        if (!jsId) {\n            index = controllerStack.length - 2;\n        } else {\n            index = controllerStack.findIndex((controller) => controller.jsId === jsId);\n        }\n        if (index < 0) {\n            const msg = jsId ? \"Invalid controller to restore\" : \"No controller to restore\";\n            throw new ControllerNotFoundError(msg);\n        }\n        const controller = controllerStack[index];\n        if (controller.action.type === \"ir.actions.act_window\") {\n            Object.assign(\n                controller,\n                _getViewInfo(controller.view, controller.action, controller.views)\n            );\n        }\n        await clearUncommittedChanges(env);\n        return _updateUI(controller, { index });\n    }\n\n    /**\n     * Performs a \"doAction\" or a \"switchView\" according to the current content of\n     * the URL. The id of the underlying action is be returned if one of these\n     * operations has successfully started.\n     *\n     * @returns {Promise<boolean>} true iff the state could have been loaded\n     */\n    async function loadState() {\n        const switchViewParams = _getSwitchViewParams();\n        if (switchViewParams) {\n            // only when we already have an action in dom\n            const { viewType, props } = switchViewParams;\n            const view = _getView(viewType);\n            if (view) {\n                // Params valid and view found => performs a \"switchView\"\n                await switchView(viewType, props);\n                return true;\n            }\n        } else {\n            const actionParams = _getActionParams();\n            if (actionParams) {\n                // Params valid => performs a \"doAction\"\n                const { actionRequest, options } = actionParams;\n                await doAction(actionRequest, options);\n                return true;\n            }\n        }\n        return false;\n    }\n\n    function pushState(controller) {\n        const newState = {};\n        const action = controller.action;\n        if (action.id) {\n            newState.action = action.id;\n        } else if (action.type === \"ir.actions.client\") {\n            newState.action = action.tag;\n        }\n        if (action.context) {\n            const activeId = action.context.active_id;\n            if (activeId) {\n                newState.active_id = activeId;\n            }\n            const activeIds = action.context.active_ids;\n            // we don't push active_ids if it's a single element array containing\n            // the active_id to make the url shorter in most cases\n            if (activeIds && !(activeIds.length === 1 && activeIds[0] === activeId)) {\n                newState.active_ids = activeIds.join(\",\");\n            }\n        }\n        if (action.type === \"ir.actions.act_window\") {\n            const props = controller.props;\n            newState.model = props.resModel;\n            newState.view_type = props.type;\n            newState.id = props.resId || (props.state && props.state.currentId) || undefined;\n        }\n        env.services.router.pushState(newState, { replace: true });\n    }\n    return {\n        doAction,\n        doActionButton,\n        switchView,\n        restore,\n        loadState,\n        async loadAction(actionRequest, context) {\n            let action = await _loadAction(actionRequest, context);\n            return _preprocessAction(action, context);\n        },\n        get currentController() {\n            return _getCurrentController();\n        },\n        __legacy__isActionInStack(actionId) {\n            return controllerStack.find((c) => c.action.jsId === actionId);\n        },\n    };\n}\n\nexport const actionService = {\n    dependencies: [\"effect\", \"localization\", \"notification\", \"router\", \"rpc\", \"ui\", \"user\"],\n    start(env) {\n        return makeActionManager(env);\n    },\n};\n\nregistry.category(\"services\").add(\"action\", actionService);\n", "/** @odoo-module **/\n\nimport { registry } from \"@web/core/registry\";\nimport { useService } from \"@web/core/utils/hooks\";\nimport { sprintf } from \"@web/core/utils/strings\";\n\nconst { utils, Component } = owl;\nconst { escape } = utils;\n\nexport const displayNotificationAction = (env, action) => {\n    const params = action.params || {};\n    const options = {\n        className: params.className || \"\",\n        sticky: params.sticky || false,\n        title: params.title,\n        type: params.type || \"info\",\n        messageIsHtml: true,\n    };\n    let links = (params.links || []).map((link) => {\n        return `<a href=\"${escape(link.url)}\" target=\"_blank\">${escape(link.label)}</a>`;\n    });\n    const message = sprintf(escape(params.message), ...links);\n    env.services.notification.add(message, options);\n    return params.next;\n};\n\nregistry.category(\"actions\").add(\"display_notification\", displayNotificationAction);\n\nclass InvalidAction extends Component {\n    setup() {\n        this.notification = useService(\"notification\");\n    }\n\n    mounted() {\n        const message = sprintf(\n            this.env._t(\"No action with id '%s' could be found\"),\n            this.props.actionId\n        );\n        this.notification.add(message, { type: \"danger\" });\n    }\n}\nInvalidAction.template = owl.tags.xml`<div class=\"o_invalid_action\"></div>`;\n\nregistry.category(\"actions\").add(\"invalid_action\", InvalidAction);\n", "/** @odoo-module **/\n\nimport { editModelDebug } from \"@web/core/debug/debug_utils\";\nimport { registry } from \"@web/core/registry\";\n\nconst debugRegistry = registry.category(\"debug\");\n\nfunction actionSeparator({ action }) {\n    if (!action.id || !action.res_model) {\n        return null;\n    }\n    return {\n        type: \"separator\",\n        sequence: 100,\n    };\n}\n\nfunction accessSeparator({ accessRights, action }) {\n    const { canSeeModelAccess, canSeeRecordRules } = accessRights;\n    if (!action.res_model || (!canSeeModelAccess && !canSeeRecordRules)) {\n        return null;\n    }\n    return {\n        type: \"separator\",\n        sequence: 200,\n    };\n}\n\nfunction editAction({ action, env }) {\n    if (!action.id) {\n        return null;\n    }\n    const description = env._t(\"Edit Action\");\n    return {\n        type: \"item\",\n        description,\n        callback: () => {\n            editModelDebug(env, description, action.type, action.id);\n        },\n        sequence: 110,\n    };\n}\n\nfunction viewFields({ action, env }) {\n    if (!action.res_model) {\n        return null;\n    }\n    const description = env._t(\"View Fields\");\n    return {\n        type: \"item\",\n        description,\n        callback: async () => {\n            const modelId = (\n                await env.services.orm.search(\"ir.model\", [[\"model\", \"=\", action.res_model]], {\n                    limit: 1,\n                })\n            )[0];\n            env.services.action.doAction({\n                res_model: \"ir.model.fields\",\n                name: description,\n                views: [\n                    [false, \"list\"],\n                    [false, \"form\"],\n                ],\n                domain: [[\"model_id\", \"=\", modelId]],\n                type: \"ir.actions.act_window\",\n                context: {\n                    default_model_id: modelId,\n                },\n            });\n        },\n        sequence: 120,\n    };\n}\n\nfunction manageFilters({ action, env }) {\n    if (!action.res_model) {\n        return null;\n    }\n    const description = env._t(\"Manage Filters\");\n    return {\n        type: \"item\",\n        description,\n        callback: () => {\n            // manage_filters\n            env.services.action.doAction({\n                res_model: \"ir.filters\",\n                name: description,\n                views: [\n                    [false, \"list\"],\n                    [false, \"form\"],\n                ],\n                type: \"ir.actions.act_window\",\n                context: {\n                    search_default_my_filters: true,\n                    search_default_model_id: action.res_model,\n                },\n            });\n        },\n        sequence: 130,\n    };\n}\n\nfunction technicalTranslation({ action, env }) {\n    if (!action.res_model) {\n        return null;\n    }\n    return {\n        type: \"item\",\n        description: env._t(\"Technical Translation\"),\n        callback: async () => {\n            const result = await env.services.orm.call(\n                \"ir.translation\",\n                \"get_technical_translations\",\n                [action.res_model]\n            );\n            env.services.action.doAction(result);\n        },\n        sequence: 140,\n    };\n}\n\nfunction viewAccessRights({ accessRights, action, env }) {\n    if (!action.res_model || !accessRights.canSeeModelAccess) {\n        return null;\n    }\n    const description = env._t(\"View Access Rights\");\n    return {\n        type: \"item\",\n        description,\n        callback: async () => {\n            const modelId = (\n                await env.services.orm.search(\"ir.model\", [[\"model\", \"=\", action.res_model]], {\n                    limit: 1,\n                })\n            )[0];\n            env.services.action.doAction({\n                res_model: \"ir.model.access\",\n                name: description,\n                views: [\n                    [false, \"list\"],\n                    [false, \"form\"],\n                ],\n                domain: [[\"model_id\", \"=\", modelId]],\n                type: \"ir.actions.act_window\",\n                context: {\n                    default_model_id: modelId,\n                },\n            });\n        },\n        sequence: 210,\n    };\n}\n\nfunction viewRecordRules({ accessRights, action, env }) {\n    if (!action.res_model || !accessRights.canSeeRecordRules) {\n        return null;\n    }\n    const description = env._t(\"Model Record Rules\");\n    return {\n        type: \"item\",\n        description: env._t(\"View Record Rules\"),\n        callback: async () => {\n            const modelId = (\n                await env.services.orm.search(\"ir.model\", [[\"model\", \"=\", action.res_model]], {\n                    limit: 1,\n                })\n            )[0];\n            env.services.action.doAction({\n                res_model: \"ir.rule\",\n                name: description,\n                views: [\n                    [false, \"list\"],\n                    [false, \"form\"],\n                ],\n                domain: [[\"model_id\", \"=\", modelId]],\n                type: \"ir.actions.act_window\",\n                context: {\n                    default_model_id: modelId,\n                },\n            });\n        },\n        sequence: 220,\n    };\n}\n\ndebugRegistry\n    .category(\"action\")\n    .add(\"actionSeparator\", actionSeparator)\n    .add(\"editAction\", editAction)\n    .add(\"viewFields\", viewFields)\n    .add(\"manageFilters\", manageFilters)\n    .add(\"technicalTranslation\", technicalTranslation)\n    .add(\"accessSeparator\", accessSeparator)\n    .add(\"viewAccessRights\", viewAccessRights)\n    .add(\"viewRecordRules\", viewRecordRules);\n", "/** @odoo-module alias=web.clickEverywhere **/\n\nimport { registry } from \"../../core/registry\";\n\nconst { loadJS } = owl.utils;\n\nexport default async function startClickEverywhere(xmlId, appsMenusOnly) {\n    await loadJS(\"web/static/src/webclient/clickbot/clickbot.js\");\n    window.clickEverywhere(xmlId, appsMenusOnly);\n}\n\nfunction runClickTestItem({ env }) {\n    return {\n        type: \"item\",\n        description: env._t(\"Run Click Everywhere Test\"),\n        callback: () => {\n            startClickEverywhere();\n        },\n        sequence: 30,\n    };\n}\n\nregistry.category(\"debug\").category(\"default\").add(\"runClickTestItem\", runClickTestItem);\n", "/** @odoo-module **/\n\nimport { browser } from \"@web/core/browser/browser\";\nimport { registry } from \"@web/core/registry\";\nimport { symmetricalDifference } from \"../core/utils/arrays\";\nimport { session } from \"@web/session\";\n\nfunction parseCompanyIds(cidsFromHash) {\n    const cids = [];\n    if (typeof cidsFromHash === \"string\") {\n        cids.push(...cidsFromHash.split(\",\").map(Number));\n    } else if (typeof cidsFromHash === \"number\") {\n        cids.push(cidsFromHash);\n    }\n    return cids;\n}\n\nfunction computeAllowedCompanyIds(cids) {\n    const { user_companies } = session;\n    let allowedCompanyIds = cids || [];\n    const availableCompaniesFromSession = user_companies.allowed_companies;\n    const notReallyAllowedCompanies = allowedCompanyIds.filter(\n        (id) => !(id in availableCompaniesFromSession)\n    );\n\n    if (!allowedCompanyIds.length || notReallyAllowedCompanies.length) {\n        allowedCompanyIds = [user_companies.current_company];\n    }\n    return allowedCompanyIds;\n}\n\nexport const companyService = {\n    dependencies: [\"user\", \"router\", \"cookie\"],\n    start(env, { user, router, cookie }) {\n        let cids;\n        if (\"cids\" in router.current.hash) {\n            cids = parseCompanyIds(router.current.hash.cids);\n        } else if (\"cids\" in cookie.current) {\n            cids = parseCompanyIds(cookie.current.cids);\n        }\n        let allowedCompanyIds = computeAllowedCompanyIds(cids);\n\n        const stringCIds = allowedCompanyIds.join(\",\");\n        router.replaceState({ cids: stringCIds }, { lock: true });\n        cookie.setCookie(\"cids\", stringCIds);\n\n        user.updateContext({ allowed_company_ids: allowedCompanyIds });\n        const availableCompanies = session.user_companies.allowed_companies;\n\n        return {\n            availableCompanies,\n            get allowedCompanyIds() {\n                return allowedCompanyIds.slice();\n            },\n            get currentCompany() {\n                return availableCompanies[allowedCompanyIds[0]];\n            },\n            setCompanies(mode, ...companyIds) {\n                // compute next company ids\n                let nextCompanyIds;\n                if (mode === \"toggle\") {\n                    nextCompanyIds = symmetricalDifference(allowedCompanyIds, companyIds);\n                } else if (mode === \"loginto\") {\n                    const companyId = companyIds[0];\n                    if (allowedCompanyIds.length === 1) {\n                        // 1 enabled company: stay in single company mode\n                        nextCompanyIds = [companyId];\n                    } else {\n                        // multi company mode\n                        nextCompanyIds = [\n                            companyId,\n                            ...allowedCompanyIds.filter((id) => id !== companyId),\n                        ];\n                    }\n                }\n                nextCompanyIds = nextCompanyIds.length ? nextCompanyIds : [companyIds[0]];\n\n                // apply them\n                router.pushState({ cids: nextCompanyIds }, { lock: true });\n                cookie.setCookie(\"cids\", nextCompanyIds);\n                browser.setTimeout(() => browser.location.reload()); // history.pushState is a little async\n            },\n        };\n    },\n};\n\nregistry.category(\"services\").add(\"company\", companyService);\n", "/** @odoo-module */\nimport { registry } from \"@web/core/registry\";\nimport { browser } from \"@web/core/browser/browser\";\n\nimport dialogs from \"web.view_dialogs\";\nimport { ComponentAdapter } from \"web.OwlCompatibility\";\n\nfunction runJSTestsItem({ env }) {\n    const runTestsURL = browser.location.origin + \"/web/tests?mod=*\";\n    return {\n        type: \"item\",\n        description: env._t(\"Run JS Tests\"),\n        href: runTestsURL,\n        callback: () => {\n            browser.open(runTestsURL);\n        },\n        sequence: 10,\n    };\n}\n\nfunction runJSTestsMobileItem({ env }) {\n    const runTestsMobileURL = browser.location.origin + \"/web/tests/mobile?mod=*\";\n    return {\n        type: \"item\",\n        description: env._t(\"Run JS Mobile Tests\"),\n        href: runTestsMobileURL,\n        callback: () => {\n            browser.open(runTestsMobileURL);\n        },\n        sequence: 20,\n    };\n}\n\nexport function openViewItem({ env }) {\n    async function onSelected(records) {\n        const views = await env.services.orm.searchRead(\n            \"ir.ui.view\",\n            [[\"id\", \"=\", records[0].id]],\n            [\"name\", \"model\", \"type\"],\n            { limit: 1 }\n        );\n        const view = views[0];\n        view.type = view.type === \"tree\" ? \"list\" : view.type; // ignore tree view\n        env.services.action.doAction({\n            type: \"ir.actions.act_window\",\n            name: view.name,\n            res_model: view.model,\n            views: [[view.id, view.type]],\n        });\n    }\n\n    return {\n        type: \"item\",\n        description: env._t(\"Open View\"),\n        callback: () => {\n            const adapterParent = new ComponentAdapter(null, { Component: owl.Component });\n            const selectCreateDialog = new dialogs.SelectCreateDialog(adapterParent, {\n                res_model: \"ir.ui.view\",\n                title: env._t(\"Select a view\"),\n                disable_multiple_selection: true,\n                domain: [\n                    [\"type\", \"!=\", \"qweb\"],\n                    [\"type\", \"!=\", \"search\"],\n                ],\n                on_selected: onSelected,\n            });\n\n            selectCreateDialog.open();\n        },\n        sequence: 40,\n    };\n}\n\n// This separates the items defined above from global items that aren't webclient-only\nfunction globalSeparator() {\n    return {\n        type: \"separator\",\n        sequence: 400,\n    };\n}\n\nregistry\n    .category(\"debug\")\n    .category(\"default\")\n    .add(\"runJSTestsItem\", runJSTestsItem)\n    .add(\"runJSTestsMobileItem\", runJSTestsMobileItem)\n    .add(\"globalSeparator\", globalSeparator)\n    .add(\"openViewItem\", openViewItem);\n", "/** @odoo-module **/\n\nimport { browser } from \"@web/core/browser/browser\";\nimport { registry } from \"@web/core/registry\";\nimport { useService } from \"@web/core/utils/hooks\";\n\nconst { Component, useState } = owl;\n\n/**\n * Loading Indicator\n *\n * When the user performs an action, it is good to give him some feedback that\n * something is currently happening.  The purpose of the Loading Indicator is to\n * display a small rectangle on the bottom right of the screen with just the\n * text 'Loading' and the number of currently running rpcs.\n *\n * After a delay of 3s, if a rpc is still not completed, we also block the UI.\n */\nexport class LoadingIndicator extends Component {\n    setup() {\n        this.state = useState({\n            count: 0,\n            show: false,\n        });\n        this.rpcIds = new Set();\n        this.env.bus.on(\"RPC:REQUEST\", this, this.requestCall);\n        this.env.bus.on(\"RPC:RESPONSE\", this, this.responseCall);\n        this.uiService = useService(\"ui\");\n    }\n\n    requestCall(rpcId) {\n        if (this.state.count === 0) {\n            this.state.show = true;\n            this.blockUITimer = browser.setTimeout(() => {\n                this.shouldUnblock = true;\n                this.uiService.block();\n            }, 3000);\n        }\n        this.rpcIds.add(rpcId);\n        this.state.count++;\n    }\n\n    responseCall(rpcId) {\n        this.rpcIds.delete(rpcId);\n        this.state.count = this.rpcIds.size;\n        if (this.state.count === 0) {\n            if (this.shouldUnblock) {\n                this.uiService.unblock();\n                this.shouldUnblock = false;\n            } else {\n                browser.clearTimeout(this.blockUITimer);\n            }\n            this.state.show = false;\n        }\n    }\n}\n\nLoadingIndicator.template = \"web.LoadingIndicator\";\n\nregistry.category(\"main_components\").add(\"LoadingIndicator\", {\n    Component: LoadingIndicator,\n});\n", "/** @odoo-module **/\n\n/**\n * Traverses the given menu tree, executes the given callback for each node with\n * the node itself and the list of its ancestors as arguments.\n *\n * @param {Object} tree tree of menus as exported by the menus service\n * @param {Function} cb\n * @param {[Object]} [parents] the ancestors of the tree root, if any\n */\nfunction traverseMenuTree(tree, cb, parents = []) {\n    cb(tree, parents);\n    tree.childrenTree.forEach((c) => traverseMenuTree(c, cb, parents.concat([tree])));\n}\n\n/**\n * Computes the \"apps\" and \"menuItems\" from a given menu tree.\n *\n * @param {Object} menuTree tree of menus as exported by the menus service\n * @returns {Object} with keys \"apps\" and \"menuItems\" (HomeMenu props)\n */\nexport function computeAppsAndMenuItems(menuTree) {\n    const apps = [];\n    const menuItems = [];\n    traverseMenuTree(menuTree, (menuItem, parents) => {\n        if (!menuItem.id || !menuItem.actionID) {\n            return;\n        }\n        const isApp = menuItem.id === menuItem.appID;\n        const item = {\n            parents: parents\n                .slice(1)\n                .map((p) => p.name)\n                .join(\" / \"),\n            label: menuItem.name,\n            id: menuItem.id,\n            xmlid: menuItem.xmlid,\n            actionID: menuItem.actionID,\n            appID: menuItem.appID,\n        };\n        if (isApp) {\n            if (menuItem.webIconData) {\n                item.webIconData = menuItem.webIconData;\n            } else {\n                const [iconClass, color, backgroundColor] = (menuItem.webIcon || \"\").split(\",\");\n                if (backgroundColor !== undefined) {\n                    // Could split in three parts?\n                    item.webIcon = { iconClass, color, backgroundColor };\n                } else {\n                    item.webIconData = \"/web_enterprise/static/img/default_icon_app.png\";\n                }\n            }\n        } else {\n            item.menuID = parents[1].id;\n        }\n        if (isApp) {\n            apps.push(item);\n        } else {\n            menuItems.push(item);\n        }\n    });\n    return { apps, menuItems };\n}\n", "/** @odoo-module **/\n\nimport { _lt } from \"@web/core/l10n/translation\";\nimport { registry } from \"@web/core/registry\";\nimport { computeAppsAndMenuItems } from \"@web/webclient/menus/menu_helpers\";\nimport { fuzzyLookup } from \"@web/core/utils/search\";\n\nconst { Component } = owl;\n\nclass AppIconCommand extends Component {}\nAppIconCommand.template = \"web.AppIconCommand\";\n\nconst commandCategoryRegistry = registry.category(\"command_categories\");\ncommandCategoryRegistry.add(\"apps\", { namespace: \"/\" }, { sequence: 10 });\ncommandCategoryRegistry.add(\"menu_items\", { namespace: \"/\" }, { sequence: 20 });\n\nconst commandEmptyMessageRegistry = registry.category(\"command_empty_list\");\ncommandEmptyMessageRegistry.add(\"/\", _lt(\"No menu found\"));\n\nconst commandProviderRegistry = registry.category(\"command_provider\");\ncommandProviderRegistry.add(\"menu\", {\n    namespace: \"/\",\n    async provide(env, options) {\n        const result = [];\n        const menuService = env.services.menu;\n        let { apps, menuItems } = computeAppsAndMenuItems(menuService.getMenuAsTree(\"root\"));\n        if (options.searchValue !== \"\") {\n            apps = fuzzyLookup(options.searchValue, apps, (menu) => menu.label);\n\n            fuzzyLookup(options.searchValue, menuItems, (menu) =>\n                (menu.parents + \" / \" + menu.label).split(\"/\").reverse().join(\"/\")\n            ).forEach((menu) => {\n                result.push({\n                    action() {\n                        menuService.selectMenu(menu);\n                    },\n                    category: \"menu_items\",\n                    name: menu.parents + \" / \" + menu.label,\n                });\n            });\n        }\n\n        apps.forEach((menu) => {\n            const props = {};\n            if (menu.webIconData) {\n                const prefix = \"data:image/png;base64,\";\n                props.webIconData = menu.webIconData.startsWith(prefix)\n                    ? menu.webIconData\n                    : prefix + menu.webIconData.replace(/\\s/g, \"\");\n            } else {\n                props.webIcon = menu.webIcon;\n            }\n            result.push({\n                Component: AppIconCommand,\n                action() {\n                    menuService.selectMenu(menu);\n                },\n                category: \"apps\",\n                name: menu.label,\n                props,\n            });\n        });\n\n        return result;\n    },\n});\n", "/** @odoo-module **/\n\nimport { browser } from \"../../core/browser/browser\";\nimport { registry } from \"../../core/registry\";\nimport { session } from \"@web/session\";\n\nconst loadMenusUrl = `/web/webclient/load_menus`;\n\nfunction makeFetchLoadMenus() {\n    const cacheHashes = session.cache_hashes;\n    let loadMenusHash = cacheHashes.load_menus || new Date().getTime().toString();\n    return async function fetchLoadMenus(reload) {\n        if (reload) {\n            loadMenusHash = new Date().getTime().toString();\n        } else if (odoo.loadMenusPromise) {\n            return odoo.loadMenusPromise;\n        }\n        const res = await browser.fetch(`${loadMenusUrl}/${loadMenusHash}`);\n        if (!res.ok) {\n            throw new Error(\"Error while fetching menus\");\n        }\n        return res.json();\n    };\n}\n\nfunction makeMenus(env, menusData, fetchLoadMenus) {\n    let currentAppId;\n    return {\n        getAll() {\n            return Object.values(menusData);\n        },\n        getApps() {\n            return this.getMenu(\"root\").children.map((mid) => this.getMenu(mid));\n        },\n        getMenu(menuID) {\n            return menusData[menuID];\n        },\n        getCurrentApp() {\n            if (!currentAppId) {\n                return;\n            }\n            return this.getMenu(currentAppId);\n        },\n        getMenuAsTree(menuID) {\n            const menu = this.getMenu(menuID);\n            if (!menu.childrenTree) {\n                menu.childrenTree = menu.children.map((mid) => this.getMenuAsTree(mid));\n            }\n            return menu;\n        },\n        async selectMenu(menu) {\n            menu = typeof menu === \"number\" ? this.getMenu(menu) : menu;\n            if (!menu.actionID) {\n                return;\n            }\n            await env.services.action.doAction(menu.actionID, { clearBreadcrumbs: true });\n            this.setCurrentMenu(menu);\n        },\n        setCurrentMenu(menu) {\n            menu = typeof menu === \"number\" ? this.getMenu(menu) : menu;\n            if (menu && menu.appID !== currentAppId) {\n                currentAppId = menu.appID;\n                env.bus.trigger(\"MENUS:APP-CHANGED\");\n                // FIXME: lock API: maybe do something like\n                // pushState({menu_id: ...}, { lock: true}); ?\n                env.services.router.pushState({ menu_id: menu.id }, { lock: true });\n            }\n        },\n        async reload() {\n            if (fetchLoadMenus) {\n                menusData = await fetchLoadMenus(true);\n                env.bus.trigger(\"MENUS:APP-CHANGED\");\n            }\n        },\n    };\n}\n\nexport const menuService = {\n    dependencies: [\"action\", \"router\"],\n    async start(env) {\n        const fetchLoadMenus = makeFetchLoadMenus();\n        const menusData = await fetchLoadMenus();\n        return makeMenus(env, menusData, fetchLoadMenus);\n    },\n};\n\nregistry.category(\"services\").add(\"menu\", menuService);\n", "/** @odoo-module **/\n\nimport { Dropdown } from \"@web/core/dropdown/dropdown\";\nimport { DropdownItem } from \"@web/core/dropdown/dropdown_item\";\nimport { useEffect, useService, onDestroyed, useBus } from \"@web/core/utils/hooks\";\nimport { registry } from \"@web/core/registry\";\nimport { debounce } from \"@web/core/utils/timing\";\nimport { ErrorHandler, NotUpdatable } from \"@web/core/utils/components\";\n\nconst { Component, hooks } = owl;\nconst { useExternalListener, useRef, onWillUnmount } = hooks;\nconst systrayRegistry = registry.category(\"systray\");\n\nconst getBoundingClientRect = Element.prototype.getBoundingClientRect;\n\nexport class MenuDropdown extends Dropdown {\n    setup() {\n        super.setup();\n        useEffect(\n            () => {\n                if (this.props.xmlid) {\n                    this.togglerRef.el.dataset.menuXmlid = this.props.xmlid;\n                }\n            },\n            () => []\n        );\n    }\n}\nMenuDropdown.props.xmlid = {\n    type: String,\n    optional: true,\n};\n\nexport class MenuItem extends DropdownItem {\n    setup() {\n        super.setup();\n        useEffect(\n            () => {\n                if (this.props.payload.id) {\n                    this.el.dataset.section = this.props.payload.id;\n                }\n                if (this.props.payload.xmlid) {\n                    this.el.dataset.menuXmlid = this.props.payload.xmlid;\n                }\n            },\n            () => []\n        );\n    }\n}\n\nexport class NavBar extends Component {\n    setup() {\n        this.currentAppSectionsExtra = [];\n        this.actionService = useService(\"action\");\n        this.menuService = useService(\"menu\");\n        this.appSubMenus = useRef(\"appSubMenus\");\n        const debouncedAdapt = debounce(this.adapt.bind(this), 250);\n        onDestroyed(() => debouncedAdapt.cancel());\n        useExternalListener(window, \"resize\", debouncedAdapt);\n\n        let adaptCounter = 0;\n        const renderAndAdapt = () => {\n            adaptCounter++;\n            this.render();\n        };\n\n        systrayRegistry.on(\"UPDATE\", this, renderAndAdapt);\n        this.env.bus.on(\"MENUS:APP-CHANGED\", this, renderAndAdapt);\n\n        onWillUnmount(() => {\n            systrayRegistry.off(\"UPDATE\", this);\n            this.env.bus.off(\"MENUS:APP-CHANGED\", this);\n        });\n\n        // We don't want to adapt every time we are patched\n        // rather, we adapt only when menus or systrays have changed.\n        useEffect(() => {this.adapt();}, () => [adaptCounter]);\n    }\n\n    handleItemError(error, item) {\n        // remove the faulty component\n        item.isDisplayed = () => false;\n        Promise.resolve().then(() => {\n            throw error;\n        });\n    }\n\n    get currentApp() {\n        return this.menuService.getCurrentApp();\n    }\n\n    get currentAppSections() {\n        return (\n            (this.currentApp && this.menuService.getMenuAsTree(this.currentApp.id).childrenTree) ||\n            []\n        );\n    }\n\n    get systrayItems() {\n        return systrayRegistry\n            .getEntries()\n            .map(([key, value]) => ({ key, ...value }))\n            .filter((item) => (\"isDisplayed\" in item ? item.isDisplayed(this.env) : true))\n            .reverse();\n    }\n\n    /**\n     * Adapt will check the available width for the app sections to get displayed.\n     * If not enough space is available, it will replace by a \"more\" menu\n     * the least amount of app sections needed trying to fit the width.\n     *\n     * NB: To compute the widths of the actual app sections, a render needs to be done upfront.\n     *     By the end of this method another render may occur depending on the adaptation result.\n     */\n    async adapt() {\n        if (!this.el) {\n            // currently, the promise returned by 'render' is resolved at the end of\n            // the rendering even if the component has been destroyed meanwhile, so we\n            // may get here and have this.el unset\n            return;\n        }\n\n        // ------- Initialize -------\n        // Get the sectionsMenu\n        const sectionsMenu = this.appSubMenus.el;\n        if (!sectionsMenu) {\n            // No need to continue adaptations if there is no sections menu.\n            return;\n        }\n\n        // Save initial state to further check if new render has to be done.\n        const initialAppSectionsExtra = this.currentAppSectionsExtra;\n        const firstInitialAppSectionExtra = [...initialAppSectionsExtra].shift();\n        const initialAppId = firstInitialAppSectionExtra && firstInitialAppSectionExtra.appID;\n\n        // Restore (needed to get offset widths)\n        const sections = [\n            ...sectionsMenu.querySelectorAll(\":scope > *:not(.o_menu_sections_more)\"),\n        ];\n        for (const section of sections) {\n            section.classList.remove(\"d-none\");\n        }\n        this.currentAppSectionsExtra = [];\n\n        // ------- Check overflowing sections -------\n        // use getBoundingClientRect to get unrounded values for width in order to avoid rounding problem\n        // with offsetWidth.\n        const sectionsAvailableWidth = getBoundingClientRect.call(sectionsMenu).width;\n        const sectionsTotalWidth = sections.reduce((sum, s) => sum + getBoundingClientRect.call(s).width, 0);\n        if (sectionsAvailableWidth < sectionsTotalWidth) {\n            // Sections are overflowing\n            // Initial width is harcoded to the width the more menu dropdown will take\n            let width = 46;\n            for (const section of sections) {\n                if (sectionsAvailableWidth < width + section.offsetWidth) {\n                    // Last sections are overflowing\n                    const overflowingSections = sections.slice(sections.indexOf(section));\n                    overflowingSections.forEach((s) => {\n                        // Hide from normal menu\n                        s.classList.add(\"d-none\");\n                        // Show inside \"more\" menu\n                        const sectionId =\n                            s.dataset.section ||\n                            s.querySelector(\"[data-section]\").getAttribute(\"data-section\");\n                        const currentAppSection = this.currentAppSections.find(\n                            (appSection) => appSection.id.toString() === sectionId\n                        );\n                        this.currentAppSectionsExtra.push(currentAppSection);\n                    });\n                    break;\n                }\n                width += section.offsetWidth;\n            }\n        }\n\n        // ------- Final rendering -------\n        const firstCurrentAppSectionExtra = [...this.currentAppSectionsExtra].shift();\n        const currentAppId = firstCurrentAppSectionExtra && firstCurrentAppSectionExtra.appID;\n        if (\n            initialAppSectionsExtra.length === this.currentAppSectionsExtra.length &&\n            initialAppId === currentAppId\n        ) {\n            // Do not render if more menu items stayed the same.\n            return;\n        }\n        return this.render();\n    }\n\n    onNavBarDropdownItemSelection(ev) {\n        const { payload: menu } = ev.detail;\n        if (menu) {\n            this.menuService.selectMenu(menu);\n        }\n    }\n\n    getMenuItemHref(payload) {\n        const parts = [`menu_id=${payload.id}`];\n        if (payload.actionID) {\n            parts.push(`action=${payload.actionID}`);\n        }\n        return \"#\" + parts.join(\"&\");\n    }\n}\nNavBar.template = \"web.NavBar\";\nNavBar.components = { MenuDropdown, MenuItem, NotUpdatable, ErrorHandler };\n", "/** @odoo-module **/\n\nimport { useService } from \"@web/core/utils/hooks\";\nimport { registry } from \"@web/core/registry\";\nimport { browser } from \"@web/core/browser/browser\";\nimport { symmetricalDifference } from \"@web/core/utils/arrays\";\n\nconst { Component, hooks } = owl;\nconst { useState } = hooks;\n\nexport class SwitchCompanyMenu extends Component {\n    setup() {\n        this.companyService = useService(\"company\");\n        this.currentCompany = this.companyService.currentCompany;\n        this.state = useState({ companiesToToggle: [] });\n    }\n\n    toggleCompany(companyId) {\n        this.state.companiesToToggle = symmetricalDifference(this.state.companiesToToggle, [\n            companyId,\n        ]);\n        browser.clearTimeout(this.toggleTimer);\n        this.toggleTimer = browser.setTimeout(() => {\n            this.companyService.setCompanies(\"toggle\", ...this.state.companiesToToggle);\n        }, this.constructor.toggleDelay);\n    }\n\n    logIntoCompany(companyId) {\n        browser.clearTimeout(this.toggleTimer);\n        this.companyService.setCompanies(\"loginto\", companyId);\n    }\n\n    get selectedCompanies() {\n        return symmetricalDifference(\n            this.companyService.allowedCompanyIds,\n            this.state.companiesToToggle\n        );\n    }\n}\nSwitchCompanyMenu.template = \"web.SwitchCompanyMenu\";\nSwitchCompanyMenu.toggleDelay = 1000;\n\nexport const systrayItem = {\n    Component: SwitchCompanyMenu,\n    isDisplayed(env) {\n        const { availableCompanies } = env.services.company;\n        return Object.keys(availableCompanies).length > 1;\n    },\n};\n\nregistry.category(\"systray\").add(\"SwitchCompanyMenu\", systrayItem, { sequence: 1 });\n", "/** @odoo-module **/\n\nimport { browser } from \"@web/core/browser/browser\";\nimport { DropdownItem } from \"@web/core/dropdown/dropdown_item\";\nimport { registry } from \"@web/core/registry\";\nimport { useEffect, useService } from \"@web/core/utils/hooks\";\n\nconst { Component } = owl;\n\nconst userMenuRegistry = registry.category(\"user_menuitems\");\n\nclass UserMenuItem extends DropdownItem {\n    setup() {\n        super.setup();\n        useEffect(\n            () => {\n                if (this.props.payload.id) {\n                    this.el.dataset.menu = this.props.payload.id;\n                }\n            },\n            () => []\n        );\n    }\n}\n\nexport class UserMenu extends Component {\n    setup() {\n        this.user = useService(\"user\");\n        const { origin } = browser.location;\n        const { userId } = this.user;\n        this.source = `${origin}/web/image?model=res.users&field=avatar_128&id=${userId}`;\n    }\n\n    getElements() {\n        const sortedItems = userMenuRegistry\n            .getAll()\n            .map((element) => element(this.env))\n            .sort((x, y) => {\n                const xSeq = x.sequence ? x.sequence : 100;\n                const ySeq = y.sequence ? y.sequence : 100;\n                return xSeq - ySeq;\n            });\n        return sortedItems;\n    }\n\n    onDropdownItemSelected(ev) {\n        ev.detail.payload.callback();\n    }\n}\nUserMenu.template = \"web.UserMenu\";\nUserMenu.components = { UserMenuItem };\n\nexport const systrayItem = {\n    Component: UserMenu,\n};\nregistry.category(\"systray\").add(\"web.user_menu\", systrayItem, { sequence: 0 });\n", "/** @odoo-module **/\n\nimport { Dialog } from \"../../core/dialog/dialog\";\nimport { browser } from \"../../core/browser/browser\";\nimport { registry } from \"../../core/registry\";\nimport { _lt } from \"../../core/l10n/translation\";\nimport { session } from \"@web/session\";\n\nfunction documentationItem(env) {\n    const documentationURL = \"https://www.odoo.com/documentation/15.0\";\n    return {\n        type: \"item\",\n        id: \"documentation\",\n        description: env._t(\"Documentation\"),\n        href: documentationURL,\n        callback: () => {\n            browser.open(documentationURL, \"_blank\");\n        },\n        sequence: 10,\n    };\n}\n\nfunction supportItem(env) {\n    const url = session.support_url;\n    return {\n        type: \"item\",\n        id: \"support\",\n        description: env._t(\"Support\"),\n        href: url,\n        callback: () => {\n            browser.open(url, \"_blank\");\n        },\n        sequence: 20,\n    };\n}\n\nclass ShortCutsDialog extends Dialog {}\nShortCutsDialog.bodyTemplate = \"web.UserMenu.shortcutsTable\";\nShortCutsDialog.title = _lt(\"Shortcuts\");\n\nfunction shortCutsItem(env) {\n    return {\n        type: \"item\",\n        id: \"shortcuts\",\n        hide: env.isSmall,\n        description: env._t(\"Shortcuts\"),\n        callback: () => {\n            env.services.dialog.add(ShortCutsDialog);\n        },\n        sequence: 30,\n    };\n}\n\nfunction separator() {\n    return {\n        type: \"separator\",\n        sequence: 40,\n    };\n}\n\nexport function preferencesItem(env) {\n    return {\n        type: \"item\",\n        id: \"settings\",\n        description: env._t(\"Preferences\"),\n        callback: async function () {\n            const actionDescription = await env.services.orm.call(\"res.users\", \"action_get\");\n            actionDescription.res_id = env.services.user.userId;\n            env.services.action.doAction(actionDescription);\n        },\n        sequence: 50,\n    };\n}\n\nfunction odooAccountItem(env) {\n    return {\n        type: \"item\",\n        id: \"account\",\n        description: env._t(\"My Odoo.com account\"),\n        callback: () => {\n            env.services\n                .rpc(\"/web/session/account\")\n                .then((url) => {\n                    browser.location.href = url;\n                })\n                .catch(() => {\n                    browser.location.href = \"https://accounts.odoo.com/account\";\n                });\n        },\n        sequence: 60,\n    };\n}\n\nfunction logOutItem(env) {\n    const route = \"/web/session/logout\";\n    return {\n        type: \"item\",\n        id: \"logout\",\n        description: env._t(\"Log out\"),\n        href: `${browser.location.origin}${route}`,\n        callback: () => {\n            browser.location.href = route;\n        },\n        sequence: 70,\n    };\n}\n\nregistry\n    .category(\"user_menuitems\")\n    .add(\"documentation\", documentationItem)\n    .add(\"support\", supportItem)\n    .add(\"shortcuts\", shortCutsItem)\n    .add(\"separator\", separator)\n    .add(\"profile\", preferencesItem)\n    .add(\"odoo_account\", odooAccountItem)\n    .add(\"log_out\", logOutItem);\n", "/** @odoo-module **/\n\nimport { ActionContainer } from \"./actions/action_container\";\nimport { NavBar } from \"./navbar/navbar\";\nimport { useBus, useEffect, useService } from \"@web/core/utils/hooks\";\nimport { useTooltip } from \"@web/core/tooltip/tooltip_hook\";\nimport { NotUpdatable } from \"../core/utils/components\";\nimport { MainComponentsContainer } from \"../core/main_components_container\";\nimport { useOwnDebugContext } from \"../core/debug/debug_context\";\nimport { registry } from \"@web/core/registry\";\nimport { DebugMenu } from \"@web/core/debug/debug_menu\";\nimport { localization } from \"@web/core/l10n/localization\";\n\nconst { Component, hooks } = owl;\nconst { useExternalListener } = hooks;\n\nexport class WebClient extends Component {\n    setup() {\n        this.menuService = useService(\"menu\");\n        this.actionService = useService(\"action\");\n        this.title = useService(\"title\");\n        this.router = useService(\"router\");\n        this.user = useService(\"user\");\n        useService(\"legacy_service_provider\");\n        useOwnDebugContext({ categories: [\"default\"] });\n        if (this.env.debug) {\n            registry.category(\"systray\").add(\n                \"web.debug_mode_menu\",\n                {\n                    Component: DebugMenu,\n                },\n                { sequence: 100 }\n            );\n        }\n        this.localization = localization;\n        this.title.setParts({ zopenerp: \"Odoo\" }); // zopenerp is easy to grep\n        useBus(this.env.bus, \"ROUTE_CHANGE\", this.loadRouterState);\n        useBus(this.env.bus, \"ACTION_MANAGER:UI-UPDATED\", (mode) => {\n            if (mode !== \"new\") {\n                this.el.classList.toggle(\"o_fullscreen\", mode === \"fullscreen\");\n            }\n        });\n        useEffect(\n            () => {\n                this.loadRouterState();\n            },\n            () => []\n        );\n        useExternalListener(window, \"click\", this.onGlobalClick, { capture: true });\n        useTooltip();\n    }\n\n    mounted() {\n        // the chat window and dialog services listen to 'web_client_ready' event in\n        // order to initialize themselves:\n        this.env.bus.trigger(\"WEB_CLIENT_READY\");\n    }\n\n    async loadRouterState() {\n        let stateLoaded = await this.actionService.loadState();\n        let menuId = Number(this.router.current.hash.menu_id || 0);\n\n        if (!stateLoaded && menuId) {\n            // Determines the current actionId based on the current menu\n            const menu = this.menuService.getAll().find((m) => menuId === m.id);\n            const actionId = menu && menu.actionID;\n            if (actionId) {\n                await this.actionService.doAction(actionId, { clearBreadcrumbs: true });\n                stateLoaded = true;\n            }\n        }\n\n        if (stateLoaded && !menuId) {\n            // Determines the current menu based on the current action\n            const currentController = this.actionService.currentController;\n            const actionId = currentController && currentController.action.id;\n            const menu = this.menuService.getAll().find((m) => m.actionID === actionId);\n            menuId = menu && menu.appID;\n        }\n\n        if (menuId) {\n            // Sets the menu according to the current action\n            this.menuService.setCurrentMenu(menuId);\n        }\n\n        if (!stateLoaded) {\n            // If no action => falls back to the default app\n            await this._loadDefaultApp();\n        }\n    }\n\n    _loadDefaultApp() {\n        // Selects the first root menu if any\n        const root = this.menuService.getMenu(\"root\");\n        const firstApp = root.children[0];\n        if (firstApp) {\n            return this.menuService.selectMenu(firstApp);\n        }\n    }\n\n    /**\n     * @param {MouseEvent} ev\n     */\n    onGlobalClick(ev) {\n        // When a ctrl-click occurs inside an <a href/> element\n        // we let the browser do the default behavior and\n        // we do not want any other listener to execute.\n        if (\n            ev.ctrlKey &&\n            ((ev.target instanceof HTMLAnchorElement && ev.target.href) ||\n                (ev.target instanceof HTMLElement && ev.target.closest(\"a[href]:not([href=''])\")))\n        ) {\n            ev.stopImmediatePropagation();\n            return;\n        }\n    }\n}\nWebClient.components = {\n    ActionContainer,\n    NavBar,\n    NotUpdatable,\n    MainComponentsContainer,\n};\nWebClient.template = \"web.WebClient\";\n", "/** @odoo-module **/\n\nimport { registry } from \"./core/registry\";\n\n// -----------------------------------------------------------------------------\n// Types\n// -----------------------------------------------------------------------------\n\n/**\n * @typedef {Object} OdooEnv\n * @property {Object} services\n * @property {owl.core.EventBus} bus\n * @property {owl.QWeb} qweb\n * @property {string} debug\n * @property {(str: string) => string} _t\n * @property {boolean} [isSmall]\n */\n\n// -----------------------------------------------------------------------------\n// makeEnv\n// -----------------------------------------------------------------------------\n\n/**\n * Return a value Odoo Env object\n *\n * @returns {OdooEnv}\n */\nexport function makeEnv() {\n    return {\n        qweb: new owl.QWeb(),\n        bus: new owl.core.EventBus(),\n        services: {},\n        debug: odoo.debug,\n        _t: () => {\n            throw new Error(\"Translations are not ready yet. Maybe use _lt instead?\");\n        },\n        get isSmall() {\n            throw new Error(\"UI service not initialized!\");\n        },\n    };\n}\n\n// -----------------------------------------------------------------------------\n// Service Launcher\n// -----------------------------------------------------------------------------\n\nconst serviceRegistry = registry.category(\"services\");\n\nexport const SERVICES_METADATA = {};\n\n/**\n * Start all services registered in the service registry, while making sure\n * each service dependencies are properly fulfilled.\n *\n * @param {OdooEnv} env\n * @returns {Promise<void>}\n */\nexport async function startServices(env) {\n    const toStart = new Set();\n    serviceRegistry.on(\"UPDATE\", null, async (payload) => {\n        // Wait for all synchronous code so that if new services that depend on\n        // one another are added to the registry, they're all present before we\n        // start them regardless of the order they're added to the registry.\n        await Promise.resolve();\n        const { operation, key: name, value: service } = payload;\n        if (operation === \"delete\") {\n            // We hardly see why it would be usefull to remove a service.\n            // Furthermore we could encounter problems with dependencies.\n            // Keep it simple!\n            return;\n        }\n        if (toStart.size) {\n            const namedService = Object.assign(Object.create(service), { name });\n            toStart.add(namedService);\n        } else {\n            await _startServices(env, toStart);\n        }\n    });\n    // Wait for all synchronous code so that if new services that depend on\n    // one another are added to the registry, they're all present before we\n    // start them regardless of the order they're added to the registry.\n    await Promise.resolve();\n    await _startServices(env, toStart);\n}\n\nasync function _startServices(env, toStart) {\n    const services = env.services;\n    for (const [name, service] of serviceRegistry.getEntries()) {\n        if (!(name in services)) {\n            const namedService = Object.assign(Object.create(service), { name });\n            toStart.add(namedService);\n        }\n    }\n\n    // start as many services in parallel as possible\n    async function start() {\n        let service = null;\n        const proms = [];\n        while ((service = findNext())) {\n            let name = service.name;\n            toStart.delete(service);\n            const entries = (service.dependencies || []).map((dep) => [dep, services[dep]]);\n            const dependencies = Object.fromEntries(entries);\n            let value;\n            try {\n                value = service.start(env, dependencies);\n            } catch (e) {\n                value = e;\n                console.error(e);\n            }\n            if (\"async\" in service) {\n                SERVICES_METADATA[name] = service.async;\n            }\n            if (value instanceof Promise) {\n                proms.push(\n                    new Promise(async (resolve) => {\n                        value\n                            .then((val) => {\n                                services[name] = val || null;\n                            })\n                            .catch((error) => {\n                                services[name] = error;\n                                console.error(error);\n                            })\n                            .finally(resolve);\n                    })\n                );\n            } else {\n                services[service.name] = value || null;\n            }\n        }\n        await Promise.all(proms);\n        if (proms.length) {\n            return start();\n        }\n    }\n    await start();\n    if (toStart.size) {\n        const names = [...toStart].map((s) => s.name);\n        const missingDeps = new Set();\n        [...toStart].forEach((s) =>\n            s.dependencies.forEach((dep) => {\n                if (!(dep in services) && !names.includes(dep)) {\n                    missingDeps.add(dep);\n                }\n            })\n        );\n        const depNames = [...missingDeps].join(\", \");\n        throw new Error(\n            `Some services could not be started: ${names}. Missing dependencies: ${depNames}`\n        );\n    }\n\n    function findNext() {\n        for (let s of toStart) {\n            if (s.dependencies) {\n                if (s.dependencies.every((d) => d in services)) {\n                    return s;\n                }\n            } else {\n                return s;\n            }\n        }\n        return null;\n    }\n}\n", "/*!\r\n * jQuery.scrollTo\r\n * Copyright (c) 2007-2014 Ariel Flesler - aflesler<a>gmail<d>com | http://flesler.blogspot.com\r\n * Licensed under MIT\r\n * http://flesler.blogspot.com/2007/10/jqueryscrollto.html\r\n * @projectDescription Easy element scrolling using jQuery.\r\n * @author Ariel Flesler\r\n * @version 1.4.14\r\n */\r\n;(function (define) {\r\n\t'use strict';\r\n\r\n\tdefine(['jquery'], function ($) {\r\n\r\n\t\tvar $scrollTo = $.scrollTo = function( target, duration, settings ) {\r\n\t\t\treturn $(window).scrollTo( target, duration, settings );\r\n\t\t};\r\n\r\n\t\t$scrollTo.defaults = {\r\n\t\t\taxis:'xy',\r\n\t\t\tduration: 0,\r\n\t\t\tlimit:true\r\n\t\t};\r\n\r\n\t\t// Returns the element that needs to be animated to scroll the window.\r\n\t\t// Kept for backwards compatibility (specially for localScroll & serialScroll)\r\n\t\t$scrollTo.window = function( scope ) {\r\n\t\t\treturn $(window)._scrollable();\r\n\t\t};\r\n\r\n\t\t// Hack, hack, hack :)\r\n\t\t// Returns the real elements to scroll (supports window/iframes, documents and regular nodes)\r\n\t\t$.fn._scrollable = function() {\r\n\t\t\treturn this.map(function() {\r\n\t\t\t\tvar elem = this,\r\n\t\t\t\t\tisWin = !elem.nodeName || $.inArray( elem.nodeName.toLowerCase(), ['iframe','#document','html','body'] ) != -1;\r\n\r\n\t\t\t\t\tif (!isWin)\r\n\t\t\t\t\t\treturn elem;\r\n\r\n\t\t\t\tvar doc = (elem.contentWindow || elem).document || elem.ownerDocument || elem;\r\n\r\n\t\t\t\treturn /webkit/i.test(navigator.userAgent) || doc.compatMode == 'BackCompat' ?\r\n\t\t\t\t\tdoc.body :\r\n\t\t\t\t\tdoc.documentElement;\r\n\t\t\t});\r\n\t\t};\r\n\r\n\t\t$.fn.scrollTo = function( target, duration, settings ) {\r\n\t\t\tif (typeof duration == 'object') {\r\n\t\t\t\tsettings = duration;\r\n\t\t\t\tduration = 0;\r\n\t\t\t}\r\n\t\t\tif (typeof settings == 'function')\r\n\t\t\t\tsettings = { onAfter:settings };\r\n\r\n\t\t\tif (target == 'max')\r\n\t\t\t\ttarget = 9e9;\r\n\r\n\t\t\tsettings = $.extend( {}, $scrollTo.defaults, settings );\r\n\t\t\t// Speed is still recognized for backwards compatibility\r\n\t\t\tduration = duration || settings.duration;\r\n\t\t\t// Make sure the settings are given right\r\n\t\t\tsettings.queue = settings.queue && settings.axis.length > 1;\r\n\r\n\t\t\tif (settings.queue)\r\n\t\t\t\t// Let's keep the overall duration\r\n\t\t\t\tduration /= 2;\r\n\t\t\tsettings.offset = both( settings.offset );\r\n\t\t\tsettings.over = both( settings.over );\r\n\r\n\t\t\treturn this._scrollable().each(function() {\r\n\t\t\t\t// Null target yields nothing, just like jQuery does\r\n\t\t\t\tif (target == null) return;\r\n\r\n\t\t\t\tvar elem = this,\r\n\t\t\t\t\t$elem = $(elem),\r\n\t\t\t\t\ttarg = target, toff, attr = {},\r\n\t\t\t\t\twin = $elem.is('html,body');\r\n\r\n\t\t\t\tswitch (typeof targ) {\r\n\t\t\t\t\t// A number will pass the regex\r\n\t\t\t\t\tcase 'number':\r\n\t\t\t\t\tcase 'string':\r\n\t\t\t\t\t\tif (/^([+-]=?)?\\d+(\\.\\d+)?(px|%)?$/.test(targ)) {\r\n\t\t\t\t\t\t\ttarg = both( targ );\r\n\t\t\t\t\t\t\t// We are done\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t// Relative/Absolute selector, no break!\r\n\t\t\t\t\t\ttarg = win ? $(targ) : $(targ, this);\r\n\t\t\t\t\t\tif (!targ.length) return;\r\n\t\t\t\t\tcase 'object':\r\n\t\t\t\t\t\t// DOMElement / jQuery\r\n\t\t\t\t\t\tif (targ.is || targ.style)\r\n\t\t\t\t\t\t\t// Get the real position of the target\r\n\t\t\t\t\t\t\ttoff = (targ = $(targ)).offset();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar offset = $.isFunction(settings.offset) && settings.offset(elem, targ) || settings.offset;\r\n\r\n\t\t\t\t$.each( settings.axis.split(''), function( i, axis ) {\r\n\t\t\t\t\tvar Pos\t= axis == 'x' ? 'Left' : 'Top',\r\n\t\t\t\t\t\tpos = Pos.toLowerCase(),\r\n\t\t\t\t\t\tkey = 'scroll' + Pos,\r\n\t\t\t\t\t\told = elem[key],\r\n\t\t\t\t\t\tmax = $scrollTo.max(elem, axis);\r\n\r\n\t\t\t\t\tif (toff) {// jQuery / DOMElement\r\n\t\t\t\t\t\tattr[key] = toff[pos] + ( win ? 0 : old - $elem.offset()[pos] );\r\n\r\n\t\t\t\t\t\t// If it's a dom element, reduce the margin\r\n\t\t\t\t\t\tif (settings.margin) {\r\n\t\t\t\t\t\t\tattr[key] -= parseInt(targ.css('margin'+Pos)) || 0;\r\n\t\t\t\t\t\t\tattr[key] -= parseInt(targ.css('border'+Pos+'Width')) || 0;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tattr[key] += offset[pos] || 0;\r\n\r\n\t\t\t\t\t\tif(settings.over[pos])\r\n\t\t\t\t\t\t\t// Scroll to a fraction of its width/height\r\n\t\t\t\t\t\t\tattr[key] += targ[axis=='x'?'width':'height']() * settings.over[pos];\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tvar val = targ[pos];\r\n\t\t\t\t\t\t// Handle percentage values\r\n\t\t\t\t\t\tattr[key] = val.slice && val.slice(-1) == '%' ?\r\n\t\t\t\t\t\t\tparseFloat(val) / 100 * max\r\n\t\t\t\t\t\t\t: val;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Number or 'number'\r\n\t\t\t\t\tif (settings.limit && /^\\d+$/.test(attr[key]))\r\n\t\t\t\t\t\t// Check the limits\r\n\t\t\t\t\t\tattr[key] = attr[key] <= 0 ? 0 : Math.min( attr[key], max );\r\n\r\n\t\t\t\t\t// Queueing axes\r\n\t\t\t\t\tif (!i && settings.queue) {\r\n\t\t\t\t\t\t// Don't waste time animating, if there's no need.\r\n\t\t\t\t\t\tif (old != attr[key])\r\n\t\t\t\t\t\t\t// Intermediate animation\r\n\t\t\t\t\t\t\tanimate( settings.onAfterFirst );\r\n\t\t\t\t\t\t// Don't animate this axis again in the next iteration.\r\n\t\t\t\t\t\tdelete attr[key];\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tanimate( settings.onAfter );\r\n\r\n\t\t\t\tfunction animate( callback ) {\r\n\t\t\t\t\t$elem.animate( attr, duration, settings.easing, callback && function() {\r\n\t\t\t\t\t\tcallback.call(this, targ, settings);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}).end();\r\n\t\t};\r\n\r\n\t\t// Max scrolling position, works on quirks mode\r\n\t\t// It only fails (not too badly) on IE, quirks mode.\r\n\t\t$scrollTo.max = function( elem, axis ) {\r\n\t\t\tvar Dim = axis == 'x' ? 'Width' : 'Height',\r\n\t\t\t\tscroll = 'scroll'+Dim;\r\n\r\n\t\t\tif (!$(elem).is('html,body'))\r\n\t\t\t\treturn elem[scroll] - $(elem)[Dim.toLowerCase()]();\r\n\r\n\t\t\tvar size = 'client' + Dim,\r\n\t\t\t\thtml = elem.ownerDocument.documentElement,\r\n\t\t\t\tbody = elem.ownerDocument.body;\r\n\r\n\t\t\treturn Math.max( html[scroll], body[scroll] ) - Math.min( html[size]  , body[size]   );\r\n\t\t};\r\n\r\n\t\tfunction both( val ) {\r\n\t\t\treturn $.isFunction(val) || $.isPlainObject(val) ? val : { top:val, left:val };\r\n\t\t}\r\n\r\n\t\t// AMD requirement\r\n\t\treturn $scrollTo;\r\n\t})\r\n}(typeof define === 'function' && define.amd ? define : function (deps, factory) {\r\n\tif (typeof module !== 'undefined' && module.exports) {\r\n\t\t// Node\r\n\t\tmodule.exports = factory(require('jquery'));\r\n\t} else {\r\n\t\tfactory(jQuery);\r\n\t}\r\n}));\r\n", "var luxon = (function (exports) {\n  'use strict';\n\n  function _defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  function _createClass(Constructor, protoProps, staticProps) {\n    if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) _defineProperties(Constructor, staticProps);\n    return Constructor;\n  }\n\n  function _inheritsLoose(subClass, superClass) {\n    subClass.prototype = Object.create(superClass.prototype);\n    subClass.prototype.constructor = subClass;\n    subClass.__proto__ = superClass;\n  }\n\n  function _getPrototypeOf(o) {\n    _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n      return o.__proto__ || Object.getPrototypeOf(o);\n    };\n    return _getPrototypeOf(o);\n  }\n\n  function _setPrototypeOf(o, p) {\n    _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n      o.__proto__ = p;\n      return o;\n    };\n\n    return _setPrototypeOf(o, p);\n  }\n\n  function _isNativeReflectConstruct() {\n    if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n    if (Reflect.construct.sham) return false;\n    if (typeof Proxy === \"function\") return true;\n\n    try {\n      Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n      return true;\n    } catch (e) {\n      return false;\n    }\n  }\n\n  function _construct(Parent, args, Class) {\n    if (_isNativeReflectConstruct()) {\n      _construct = Reflect.construct;\n    } else {\n      _construct = function _construct(Parent, args, Class) {\n        var a = [null];\n        a.push.apply(a, args);\n        var Constructor = Function.bind.apply(Parent, a);\n        var instance = new Constructor();\n        if (Class) _setPrototypeOf(instance, Class.prototype);\n        return instance;\n      };\n    }\n\n    return _construct.apply(null, arguments);\n  }\n\n  function _isNativeFunction(fn) {\n    return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n  }\n\n  function _wrapNativeSuper(Class) {\n    var _cache = typeof Map === \"function\" ? new Map() : undefined;\n\n    _wrapNativeSuper = function _wrapNativeSuper(Class) {\n      if (Class === null || !_isNativeFunction(Class)) return Class;\n\n      if (typeof Class !== \"function\") {\n        throw new TypeError(\"Super expression must either be null or a function\");\n      }\n\n      if (typeof _cache !== \"undefined\") {\n        if (_cache.has(Class)) return _cache.get(Class);\n\n        _cache.set(Class, Wrapper);\n      }\n\n      function Wrapper() {\n        return _construct(Class, arguments, _getPrototypeOf(this).constructor);\n      }\n\n      Wrapper.prototype = Object.create(Class.prototype, {\n        constructor: {\n          value: Wrapper,\n          enumerable: false,\n          writable: true,\n          configurable: true\n        }\n      });\n      return _setPrototypeOf(Wrapper, Class);\n    };\n\n    return _wrapNativeSuper(Class);\n  }\n\n  function _objectWithoutPropertiesLoose(source, excluded) {\n    if (source == null) return {};\n    var target = {};\n    var sourceKeys = Object.keys(source);\n    var key, i;\n\n    for (i = 0; i < sourceKeys.length; i++) {\n      key = sourceKeys[i];\n      if (excluded.indexOf(key) >= 0) continue;\n      target[key] = source[key];\n    }\n\n    return target;\n  }\n\n  function _unsupportedIterableToArray(o, minLen) {\n    if (!o) return;\n    if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n    var n = Object.prototype.toString.call(o).slice(8, -1);\n    if (n === \"Object\" && o.constructor) n = o.constructor.name;\n    if (n === \"Map\" || n === \"Set\") return Array.from(n);\n    if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n  }\n\n  function _arrayLikeToArray(arr, len) {\n    if (len == null || len > arr.length) len = arr.length;\n\n    for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n    return arr2;\n  }\n\n  function _createForOfIteratorHelperLoose(o) {\n    var i = 0;\n\n    if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) {\n      if (Array.isArray(o) || (o = _unsupportedIterableToArray(o))) return function () {\n        if (i >= o.length) return {\n          done: true\n        };\n        return {\n          done: false,\n          value: o[i++]\n        };\n      };\n      throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n    }\n\n    i = o[Symbol.iterator]();\n    return i.next.bind(i);\n  }\n\n  // these aren't really private, but nor are they really useful to document\n\n  /**\n   * @private\n   */\n  var LuxonError = /*#__PURE__*/function (_Error) {\n    _inheritsLoose(LuxonError, _Error);\n\n    function LuxonError() {\n      return _Error.apply(this, arguments) || this;\n    }\n\n    return LuxonError;\n  }( /*#__PURE__*/_wrapNativeSuper(Error));\n  /**\n   * @private\n   */\n\n\n  var InvalidDateTimeError = /*#__PURE__*/function (_LuxonError) {\n    _inheritsLoose(InvalidDateTimeError, _LuxonError);\n\n    function InvalidDateTimeError(reason) {\n      return _LuxonError.call(this, \"Invalid DateTime: \" + reason.toMessage()) || this;\n    }\n\n    return InvalidDateTimeError;\n  }(LuxonError);\n  /**\n   * @private\n   */\n\n  var InvalidIntervalError = /*#__PURE__*/function (_LuxonError2) {\n    _inheritsLoose(InvalidIntervalError, _LuxonError2);\n\n    function InvalidIntervalError(reason) {\n      return _LuxonError2.call(this, \"Invalid Interval: \" + reason.toMessage()) || this;\n    }\n\n    return InvalidIntervalError;\n  }(LuxonError);\n  /**\n   * @private\n   */\n\n  var InvalidDurationError = /*#__PURE__*/function (_LuxonError3) {\n    _inheritsLoose(InvalidDurationError, _LuxonError3);\n\n    function InvalidDurationError(reason) {\n      return _LuxonError3.call(this, \"Invalid Duration: \" + reason.toMessage()) || this;\n    }\n\n    return InvalidDurationError;\n  }(LuxonError);\n  /**\n   * @private\n   */\n\n  var ConflictingSpecificationError = /*#__PURE__*/function (_LuxonError4) {\n    _inheritsLoose(ConflictingSpecificationError, _LuxonError4);\n\n    function ConflictingSpecificationError() {\n      return _LuxonError4.apply(this, arguments) || this;\n    }\n\n    return ConflictingSpecificationError;\n  }(LuxonError);\n  /**\n   * @private\n   */\n\n  var InvalidUnitError = /*#__PURE__*/function (_LuxonError5) {\n    _inheritsLoose(InvalidUnitError, _LuxonError5);\n\n    function InvalidUnitError(unit) {\n      return _LuxonError5.call(this, \"Invalid unit \" + unit) || this;\n    }\n\n    return InvalidUnitError;\n  }(LuxonError);\n  /**\n   * @private\n   */\n\n  var InvalidArgumentError = /*#__PURE__*/function (_LuxonError6) {\n    _inheritsLoose(InvalidArgumentError, _LuxonError6);\n\n    function InvalidArgumentError() {\n      return _LuxonError6.apply(this, arguments) || this;\n    }\n\n    return InvalidArgumentError;\n  }(LuxonError);\n  /**\n   * @private\n   */\n\n  var ZoneIsAbstractError = /*#__PURE__*/function (_LuxonError7) {\n    _inheritsLoose(ZoneIsAbstractError, _LuxonError7);\n\n    function ZoneIsAbstractError() {\n      return _LuxonError7.call(this, \"Zone is an abstract class\") || this;\n    }\n\n    return ZoneIsAbstractError;\n  }(LuxonError);\n\n  /**\n   * @private\n   */\n  var n = \"numeric\",\n      s = \"short\",\n      l = \"long\";\n  var DATE_SHORT = {\n    year: n,\n    month: n,\n    day: n\n  };\n  var DATE_MED = {\n    year: n,\n    month: s,\n    day: n\n  };\n  var DATE_MED_WITH_WEEKDAY = {\n    year: n,\n    month: s,\n    day: n,\n    weekday: s\n  };\n  var DATE_FULL = {\n    year: n,\n    month: l,\n    day: n\n  };\n  var DATE_HUGE = {\n    year: n,\n    month: l,\n    day: n,\n    weekday: l\n  };\n  var TIME_SIMPLE = {\n    hour: n,\n    minute: n\n  };\n  var TIME_WITH_SECONDS = {\n    hour: n,\n    minute: n,\n    second: n\n  };\n  var TIME_WITH_SHORT_OFFSET = {\n    hour: n,\n    minute: n,\n    second: n,\n    timeZoneName: s\n  };\n  var TIME_WITH_LONG_OFFSET = {\n    hour: n,\n    minute: n,\n    second: n,\n    timeZoneName: l\n  };\n  var TIME_24_SIMPLE = {\n    hour: n,\n    minute: n,\n    hour12: false\n  };\n  /**\n   * {@link toLocaleString}; format like '09:30:23', always 24-hour.\n   */\n\n  var TIME_24_WITH_SECONDS = {\n    hour: n,\n    minute: n,\n    second: n,\n    hour12: false\n  };\n  /**\n   * {@link toLocaleString}; format like '09:30:23 EDT', always 24-hour.\n   */\n\n  var TIME_24_WITH_SHORT_OFFSET = {\n    hour: n,\n    minute: n,\n    second: n,\n    hour12: false,\n    timeZoneName: s\n  };\n  /**\n   * {@link toLocaleString}; format like '09:30:23 Eastern Daylight Time', always 24-hour.\n   */\n\n  var TIME_24_WITH_LONG_OFFSET = {\n    hour: n,\n    minute: n,\n    second: n,\n    hour12: false,\n    timeZoneName: l\n  };\n  /**\n   * {@link toLocaleString}; format like '10/14/1983, 9:30 AM'. Only 12-hour if the locale is.\n   */\n\n  var DATETIME_SHORT = {\n    year: n,\n    month: n,\n    day: n,\n    hour: n,\n    minute: n\n  };\n  /**\n   * {@link toLocaleString}; format like '10/14/1983, 9:30:33 AM'. Only 12-hour if the locale is.\n   */\n\n  var DATETIME_SHORT_WITH_SECONDS = {\n    year: n,\n    month: n,\n    day: n,\n    hour: n,\n    minute: n,\n    second: n\n  };\n  var DATETIME_MED = {\n    year: n,\n    month: s,\n    day: n,\n    hour: n,\n    minute: n\n  };\n  var DATETIME_MED_WITH_SECONDS = {\n    year: n,\n    month: s,\n    day: n,\n    hour: n,\n    minute: n,\n    second: n\n  };\n  var DATETIME_MED_WITH_WEEKDAY = {\n    year: n,\n    month: s,\n    day: n,\n    weekday: s,\n    hour: n,\n    minute: n\n  };\n  var DATETIME_FULL = {\n    year: n,\n    month: l,\n    day: n,\n    hour: n,\n    minute: n,\n    timeZoneName: s\n  };\n  var DATETIME_FULL_WITH_SECONDS = {\n    year: n,\n    month: l,\n    day: n,\n    hour: n,\n    minute: n,\n    second: n,\n    timeZoneName: s\n  };\n  var DATETIME_HUGE = {\n    year: n,\n    month: l,\n    day: n,\n    weekday: l,\n    hour: n,\n    minute: n,\n    timeZoneName: l\n  };\n  var DATETIME_HUGE_WITH_SECONDS = {\n    year: n,\n    month: l,\n    day: n,\n    weekday: l,\n    hour: n,\n    minute: n,\n    second: n,\n    timeZoneName: l\n  };\n\n  /*\n    This is just a junk drawer, containing anything used across multiple classes.\n    Because Luxon is small(ish), this should stay small and we won't worry about splitting\n    it up into, say, parsingUtil.js and basicUtil.js and so on. But they are divided up by feature area.\n  */\n  /**\n   * @private\n   */\n  // TYPES\n\n  function isUndefined(o) {\n    return typeof o === \"undefined\";\n  }\n  function isNumber(o) {\n    return typeof o === \"number\";\n  }\n  function isInteger(o) {\n    return typeof o === \"number\" && o % 1 === 0;\n  }\n  function isString(o) {\n    return typeof o === \"string\";\n  }\n  function isDate(o) {\n    return Object.prototype.toString.call(o) === \"[object Date]\";\n  } // CAPABILITIES\n\n  function hasIntl() {\n    try {\n      return typeof Intl !== \"undefined\" && Intl.DateTimeFormat;\n    } catch (e) {\n      return false;\n    }\n  }\n  function hasFormatToParts() {\n    return !isUndefined(Intl.DateTimeFormat.prototype.formatToParts);\n  }\n  function hasRelative() {\n    try {\n      return typeof Intl !== \"undefined\" && !!Intl.RelativeTimeFormat;\n    } catch (e) {\n      return false;\n    }\n  } // OBJECTS AND ARRAYS\n\n  function maybeArray(thing) {\n    return Array.isArray(thing) ? thing : [thing];\n  }\n  function bestBy(arr, by, compare) {\n    if (arr.length === 0) {\n      return undefined;\n    }\n\n    return arr.reduce(function (best, next) {\n      var pair = [by(next), next];\n\n      if (!best) {\n        return pair;\n      } else if (compare(best[0], pair[0]) === best[0]) {\n        return best;\n      } else {\n        return pair;\n      }\n    }, null)[1];\n  }\n  function pick(obj, keys) {\n    return keys.reduce(function (a, k) {\n      a[k] = obj[k];\n      return a;\n    }, {});\n  }\n  function hasOwnProperty(obj, prop) {\n    return Object.prototype.hasOwnProperty.call(obj, prop);\n  } // NUMBERS AND STRINGS\n\n  function integerBetween(thing, bottom, top) {\n    return isInteger(thing) && thing >= bottom && thing <= top;\n  } // x % n but takes the sign of n instead of x\n\n  function floorMod(x, n) {\n    return x - n * Math.floor(x / n);\n  }\n  function padStart(input, n) {\n    if (n === void 0) {\n      n = 2;\n    }\n\n    if (input.toString().length < n) {\n      return (\"0\".repeat(n) + input).slice(-n);\n    } else {\n      return input.toString();\n    }\n  }\n  function parseInteger(string) {\n    if (isUndefined(string) || string === null || string === \"\") {\n      return undefined;\n    } else {\n      return parseInt(string, 10);\n    }\n  }\n  function parseMillis(fraction) {\n    // Return undefined (instead of 0) in these cases, where fraction is not set\n    if (isUndefined(fraction) || fraction === null || fraction === \"\") {\n      return undefined;\n    } else {\n      var f = parseFloat(\"0.\" + fraction) * 1000;\n      return Math.floor(f);\n    }\n  }\n  function roundTo(number, digits, towardZero) {\n    if (towardZero === void 0) {\n      towardZero = false;\n    }\n\n    var factor = Math.pow(10, digits),\n        rounder = towardZero ? Math.trunc : Math.round;\n    return rounder(number * factor) / factor;\n  } // DATE BASICS\n\n  function isLeapYear(year) {\n    return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n  }\n  function daysInYear(year) {\n    return isLeapYear(year) ? 366 : 365;\n  }\n  function daysInMonth(year, month) {\n    var modMonth = floorMod(month - 1, 12) + 1,\n        modYear = year + (month - modMonth) / 12;\n\n    if (modMonth === 2) {\n      return isLeapYear(modYear) ? 29 : 28;\n    } else {\n      return [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][modMonth - 1];\n    }\n  } // covert a calendar object to a local timestamp (epoch, but with the offset baked in)\n\n  function objToLocalTS(obj) {\n    var d = Date.UTC(obj.year, obj.month - 1, obj.day, obj.hour, obj.minute, obj.second, obj.millisecond); // for legacy reasons, years between 0 and 99 are interpreted as 19XX; revert that\n\n    if (obj.year < 100 && obj.year >= 0) {\n      d = new Date(d);\n      d.setUTCFullYear(d.getUTCFullYear() - 1900);\n    }\n\n    return +d;\n  }\n  function weeksInWeekYear(weekYear) {\n    var p1 = (weekYear + Math.floor(weekYear / 4) - Math.floor(weekYear / 100) + Math.floor(weekYear / 400)) % 7,\n        last = weekYear - 1,\n        p2 = (last + Math.floor(last / 4) - Math.floor(last / 100) + Math.floor(last / 400)) % 7;\n    return p1 === 4 || p2 === 3 ? 53 : 52;\n  }\n  function untruncateYear(year) {\n    if (year > 99) {\n      return year;\n    } else return year > 60 ? 1900 + year : 2000 + year;\n  } // PARSING\n\n  function parseZoneInfo(ts, offsetFormat, locale, timeZone) {\n    if (timeZone === void 0) {\n      timeZone = null;\n    }\n\n    var date = new Date(ts),\n        intlOpts = {\n      hour12: false,\n      year: \"numeric\",\n      month: \"2-digit\",\n      day: \"2-digit\",\n      hour: \"2-digit\",\n      minute: \"2-digit\"\n    };\n\n    if (timeZone) {\n      intlOpts.timeZone = timeZone;\n    }\n\n    var modified = Object.assign({\n      timeZoneName: offsetFormat\n    }, intlOpts),\n        intl = hasIntl();\n\n    if (intl && hasFormatToParts()) {\n      var parsed = new Intl.DateTimeFormat(locale, modified).formatToParts(date).find(function (m) {\n        return m.type.toLowerCase() === \"timezonename\";\n      });\n      return parsed ? parsed.value : null;\n    } else if (intl) {\n      // this probably doesn't work for all locales\n      var without = new Intl.DateTimeFormat(locale, intlOpts).format(date),\n          included = new Intl.DateTimeFormat(locale, modified).format(date),\n          diffed = included.substring(without.length),\n          trimmed = diffed.replace(/^[, \\u200e]+/, \"\");\n      return trimmed;\n    } else {\n      return null;\n    }\n  } // signedOffset('-5', '30') -> -330\n\n  function signedOffset(offHourStr, offMinuteStr) {\n    var offHour = parseInt(offHourStr, 10); // don't || this because we want to preserve -0\n\n    if (Number.isNaN(offHour)) {\n      offHour = 0;\n    }\n\n    var offMin = parseInt(offMinuteStr, 10) || 0,\n        offMinSigned = offHour < 0 || Object.is(offHour, -0) ? -offMin : offMin;\n    return offHour * 60 + offMinSigned;\n  } // COERCION\n\n  function asNumber(value) {\n    var numericValue = Number(value);\n    if (typeof value === \"boolean\" || value === \"\" || Number.isNaN(numericValue)) throw new InvalidArgumentError(\"Invalid unit value \" + value);\n    return numericValue;\n  }\n  function normalizeObject(obj, normalizer, nonUnitKeys) {\n    var normalized = {};\n\n    for (var u in obj) {\n      if (hasOwnProperty(obj, u)) {\n        if (nonUnitKeys.indexOf(u) >= 0) continue;\n        var v = obj[u];\n        if (v === undefined || v === null) continue;\n        normalized[normalizer(u)] = asNumber(v);\n      }\n    }\n\n    return normalized;\n  }\n  function formatOffset(offset, format) {\n    var hours = Math.trunc(Math.abs(offset / 60)),\n        minutes = Math.trunc(Math.abs(offset % 60)),\n        sign = offset >= 0 ? \"+\" : \"-\";\n\n    switch (format) {\n      case \"short\":\n        return \"\" + sign + padStart(hours, 2) + \":\" + padStart(minutes, 2);\n\n      case \"narrow\":\n        return \"\" + sign + hours + (minutes > 0 ? \":\" + minutes : \"\");\n\n      case \"techie\":\n        return \"\" + sign + padStart(hours, 2) + padStart(minutes, 2);\n\n      default:\n        throw new RangeError(\"Value format \" + format + \" is out of range for property format\");\n    }\n  }\n  function timeObject(obj) {\n    return pick(obj, [\"hour\", \"minute\", \"second\", \"millisecond\"]);\n  }\n  var ianaRegex = /[A-Za-z_+-]{1,256}(:?\\/[A-Za-z_+-]{1,256}(\\/[A-Za-z_+-]{1,256})?)?/;\n\n  function stringify(obj) {\n    return JSON.stringify(obj, Object.keys(obj).sort());\n  }\n  /**\n   * @private\n   */\n\n\n  var monthsLong = [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"];\n  var monthsShort = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\n  var monthsNarrow = [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"];\n  function months(length) {\n    switch (length) {\n      case \"narrow\":\n        return monthsNarrow;\n\n      case \"short\":\n        return monthsShort;\n\n      case \"long\":\n        return monthsLong;\n\n      case \"numeric\":\n        return [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"];\n\n      case \"2-digit\":\n        return [\"01\", \"02\", \"03\", \"04\", \"05\", \"06\", \"07\", \"08\", \"09\", \"10\", \"11\", \"12\"];\n\n      default:\n        return null;\n    }\n  }\n  var weekdaysLong = [\"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\", \"Sunday\"];\n  var weekdaysShort = [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"];\n  var weekdaysNarrow = [\"M\", \"T\", \"W\", \"T\", \"F\", \"S\", \"S\"];\n  function weekdays(length) {\n    switch (length) {\n      case \"narrow\":\n        return weekdaysNarrow;\n\n      case \"short\":\n        return weekdaysShort;\n\n      case \"long\":\n        return weekdaysLong;\n\n      case \"numeric\":\n        return [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\"];\n\n      default:\n        return null;\n    }\n  }\n  var meridiems = [\"AM\", \"PM\"];\n  var erasLong = [\"Before Christ\", \"Anno Domini\"];\n  var erasShort = [\"BC\", \"AD\"];\n  var erasNarrow = [\"B\", \"A\"];\n  function eras(length) {\n    switch (length) {\n      case \"narrow\":\n        return erasNarrow;\n\n      case \"short\":\n        return erasShort;\n\n      case \"long\":\n        return erasLong;\n\n      default:\n        return null;\n    }\n  }\n  function meridiemForDateTime(dt) {\n    return meridiems[dt.hour < 12 ? 0 : 1];\n  }\n  function weekdayForDateTime(dt, length) {\n    return weekdays(length)[dt.weekday - 1];\n  }\n  function monthForDateTime(dt, length) {\n    return months(length)[dt.month - 1];\n  }\n  function eraForDateTime(dt, length) {\n    return eras(length)[dt.year < 0 ? 0 : 1];\n  }\n  function formatRelativeTime(unit, count, numeric, narrow) {\n    if (numeric === void 0) {\n      numeric = \"always\";\n    }\n\n    if (narrow === void 0) {\n      narrow = false;\n    }\n\n    var units = {\n      years: [\"year\", \"yr.\"],\n      quarters: [\"quarter\", \"qtr.\"],\n      months: [\"month\", \"mo.\"],\n      weeks: [\"week\", \"wk.\"],\n      days: [\"day\", \"day\", \"days\"],\n      hours: [\"hour\", \"hr.\"],\n      minutes: [\"minute\", \"min.\"],\n      seconds: [\"second\", \"sec.\"]\n    };\n    var lastable = [\"hours\", \"minutes\", \"seconds\"].indexOf(unit) === -1;\n\n    if (numeric === \"auto\" && lastable) {\n      var isDay = unit === \"days\";\n\n      switch (count) {\n        case 1:\n          return isDay ? \"tomorrow\" : \"next \" + units[unit][0];\n\n        case -1:\n          return isDay ? \"yesterday\" : \"last \" + units[unit][0];\n\n        case 0:\n          return isDay ? \"today\" : \"this \" + units[unit][0];\n\n      }\n    }\n\n    var isInPast = Object.is(count, -0) || count < 0,\n        fmtValue = Math.abs(count),\n        singular = fmtValue === 1,\n        lilUnits = units[unit],\n        fmtUnit = narrow ? singular ? lilUnits[1] : lilUnits[2] || lilUnits[1] : singular ? units[unit][0] : unit;\n    return isInPast ? fmtValue + \" \" + fmtUnit + \" ago\" : \"in \" + fmtValue + \" \" + fmtUnit;\n  }\n  function formatString(knownFormat) {\n    // these all have the offsets removed because we don't have access to them\n    // without all the intl stuff this is backfilling\n    var filtered = pick(knownFormat, [\"weekday\", \"era\", \"year\", \"month\", \"day\", \"hour\", \"minute\", \"second\", \"timeZoneName\", \"hour12\"]),\n        key = stringify(filtered),\n        dateTimeHuge = \"EEEE, LLLL d, yyyy, h:mm a\";\n\n    switch (key) {\n      case stringify(DATE_SHORT):\n        return \"M/d/yyyy\";\n\n      case stringify(DATE_MED):\n        return \"LLL d, yyyy\";\n\n      case stringify(DATE_MED_WITH_WEEKDAY):\n        return \"EEE, LLL d, yyyy\";\n\n      case stringify(DATE_FULL):\n        return \"LLLL d, yyyy\";\n\n      case stringify(DATE_HUGE):\n        return \"EEEE, LLLL d, yyyy\";\n\n      case stringify(TIME_SIMPLE):\n        return \"h:mm a\";\n\n      case stringify(TIME_WITH_SECONDS):\n        return \"h:mm:ss a\";\n\n      case stringify(TIME_WITH_SHORT_OFFSET):\n        return \"h:mm a\";\n\n      case stringify(TIME_WITH_LONG_OFFSET):\n        return \"h:mm a\";\n\n      case stringify(TIME_24_SIMPLE):\n        return \"HH:mm\";\n\n      case stringify(TIME_24_WITH_SECONDS):\n        return \"HH:mm:ss\";\n\n      case stringify(TIME_24_WITH_SHORT_OFFSET):\n        return \"HH:mm\";\n\n      case stringify(TIME_24_WITH_LONG_OFFSET):\n        return \"HH:mm\";\n\n      case stringify(DATETIME_SHORT):\n        return \"M/d/yyyy, h:mm a\";\n\n      case stringify(DATETIME_MED):\n        return \"LLL d, yyyy, h:mm a\";\n\n      case stringify(DATETIME_FULL):\n        return \"LLLL d, yyyy, h:mm a\";\n\n      case stringify(DATETIME_HUGE):\n        return dateTimeHuge;\n\n      case stringify(DATETIME_SHORT_WITH_SECONDS):\n        return \"M/d/yyyy, h:mm:ss a\";\n\n      case stringify(DATETIME_MED_WITH_SECONDS):\n        return \"LLL d, yyyy, h:mm:ss a\";\n\n      case stringify(DATETIME_MED_WITH_WEEKDAY):\n        return \"EEE, d LLL yyyy, h:mm a\";\n\n      case stringify(DATETIME_FULL_WITH_SECONDS):\n        return \"LLLL d, yyyy, h:mm:ss a\";\n\n      case stringify(DATETIME_HUGE_WITH_SECONDS):\n        return \"EEEE, LLLL d, yyyy, h:mm:ss a\";\n\n      default:\n        return dateTimeHuge;\n    }\n  }\n\n  function stringifyTokens(splits, tokenToString) {\n    var s = \"\";\n\n    for (var _iterator = _createForOfIteratorHelperLoose(splits), _step; !(_step = _iterator()).done;) {\n      var token = _step.value;\n\n      if (token.literal) {\n        s += token.val;\n      } else {\n        s += tokenToString(token.val);\n      }\n    }\n\n    return s;\n  }\n\n  var _macroTokenToFormatOpts = {\n    D: DATE_SHORT,\n    DD: DATE_MED,\n    DDD: DATE_FULL,\n    DDDD: DATE_HUGE,\n    t: TIME_SIMPLE,\n    tt: TIME_WITH_SECONDS,\n    ttt: TIME_WITH_SHORT_OFFSET,\n    tttt: TIME_WITH_LONG_OFFSET,\n    T: TIME_24_SIMPLE,\n    TT: TIME_24_WITH_SECONDS,\n    TTT: TIME_24_WITH_SHORT_OFFSET,\n    TTTT: TIME_24_WITH_LONG_OFFSET,\n    f: DATETIME_SHORT,\n    ff: DATETIME_MED,\n    fff: DATETIME_FULL,\n    ffff: DATETIME_HUGE,\n    F: DATETIME_SHORT_WITH_SECONDS,\n    FF: DATETIME_MED_WITH_SECONDS,\n    FFF: DATETIME_FULL_WITH_SECONDS,\n    FFFF: DATETIME_HUGE_WITH_SECONDS\n  };\n  /**\n   * @private\n   */\n\n  var Formatter = /*#__PURE__*/function () {\n    Formatter.create = function create(locale, opts) {\n      if (opts === void 0) {\n        opts = {};\n      }\n\n      return new Formatter(locale, opts);\n    };\n\n    Formatter.parseFormat = function parseFormat(fmt) {\n      var current = null,\n          currentFull = \"\",\n          bracketed = false;\n      var splits = [];\n\n      for (var i = 0; i < fmt.length; i++) {\n        var c = fmt.charAt(i);\n\n        if (c === \"'\") {\n          if (currentFull.length > 0) {\n            splits.push({\n              literal: bracketed,\n              val: currentFull\n            });\n          }\n\n          current = null;\n          currentFull = \"\";\n          bracketed = !bracketed;\n        } else if (bracketed) {\n          currentFull += c;\n        } else if (c === current) {\n          currentFull += c;\n        } else {\n          if (currentFull.length > 0) {\n            splits.push({\n              literal: false,\n              val: currentFull\n            });\n          }\n\n          currentFull = c;\n          current = c;\n        }\n      }\n\n      if (currentFull.length > 0) {\n        splits.push({\n          literal: bracketed,\n          val: currentFull\n        });\n      }\n\n      return splits;\n    };\n\n    Formatter.macroTokenToFormatOpts = function macroTokenToFormatOpts(token) {\n      return _macroTokenToFormatOpts[token];\n    };\n\n    function Formatter(locale, formatOpts) {\n      this.opts = formatOpts;\n      this.loc = locale;\n      this.systemLoc = null;\n    }\n\n    var _proto = Formatter.prototype;\n\n    _proto.formatWithSystemDefault = function formatWithSystemDefault(dt, opts) {\n      if (this.systemLoc === null) {\n        this.systemLoc = this.loc.redefaultToSystem();\n      }\n\n      var df = this.systemLoc.dtFormatter(dt, Object.assign({}, this.opts, opts));\n      return df.format();\n    };\n\n    _proto.formatDateTime = function formatDateTime(dt, opts) {\n      if (opts === void 0) {\n        opts = {};\n      }\n\n      var df = this.loc.dtFormatter(dt, Object.assign({}, this.opts, opts));\n      return df.format();\n    };\n\n    _proto.formatDateTimeParts = function formatDateTimeParts(dt, opts) {\n      if (opts === void 0) {\n        opts = {};\n      }\n\n      var df = this.loc.dtFormatter(dt, Object.assign({}, this.opts, opts));\n      return df.formatToParts();\n    };\n\n    _proto.resolvedOptions = function resolvedOptions(dt, opts) {\n      if (opts === void 0) {\n        opts = {};\n      }\n\n      var df = this.loc.dtFormatter(dt, Object.assign({}, this.opts, opts));\n      return df.resolvedOptions();\n    };\n\n    _proto.num = function num(n, p) {\n      if (p === void 0) {\n        p = 0;\n      }\n\n      // we get some perf out of doing this here, annoyingly\n      if (this.opts.forceSimple) {\n        return padStart(n, p);\n      }\n\n      var opts = Object.assign({}, this.opts);\n\n      if (p > 0) {\n        opts.padTo = p;\n      }\n\n      return this.loc.numberFormatter(opts).format(n);\n    };\n\n    _proto.formatDateTimeFromString = function formatDateTimeFromString(dt, fmt) {\n      var _this = this;\n\n      var knownEnglish = this.loc.listingMode() === \"en\",\n          useDateTimeFormatter = this.loc.outputCalendar && this.loc.outputCalendar !== \"gregory\" && hasFormatToParts(),\n          string = function string(opts, extract) {\n        return _this.loc.extract(dt, opts, extract);\n      },\n          formatOffset = function formatOffset(opts) {\n        if (dt.isOffsetFixed && dt.offset === 0 && opts.allowZ) {\n          return \"Z\";\n        }\n\n        return dt.isValid ? dt.zone.formatOffset(dt.ts, opts.format) : \"\";\n      },\n          meridiem = function meridiem() {\n        return knownEnglish ? meridiemForDateTime(dt) : string({\n          hour: \"numeric\",\n          hour12: true\n        }, \"dayperiod\");\n      },\n          month = function month(length, standalone) {\n        return knownEnglish ? monthForDateTime(dt, length) : string(standalone ? {\n          month: length\n        } : {\n          month: length,\n          day: \"numeric\"\n        }, \"month\");\n      },\n          weekday = function weekday(length, standalone) {\n        return knownEnglish ? weekdayForDateTime(dt, length) : string(standalone ? {\n          weekday: length\n        } : {\n          weekday: length,\n          month: \"long\",\n          day: \"numeric\"\n        }, \"weekday\");\n      },\n          maybeMacro = function maybeMacro(token) {\n        var formatOpts = Formatter.macroTokenToFormatOpts(token);\n\n        if (formatOpts) {\n          return _this.formatWithSystemDefault(dt, formatOpts);\n        } else {\n          return token;\n        }\n      },\n          era = function era(length) {\n        return knownEnglish ? eraForDateTime(dt, length) : string({\n          era: length\n        }, \"era\");\n      },\n          tokenToString = function tokenToString(token) {\n        // Where possible: http://cldr.unicode.org/translation/date-time#TOC-Stand-Alone-vs.-Format-Styles\n        switch (token) {\n          // ms\n          case \"S\":\n            return _this.num(dt.millisecond);\n\n          case \"u\": // falls through\n\n          case \"SSS\":\n            return _this.num(dt.millisecond, 3);\n          // seconds\n\n          case \"s\":\n            return _this.num(dt.second);\n\n          case \"ss\":\n            return _this.num(dt.second, 2);\n          // minutes\n\n          case \"m\":\n            return _this.num(dt.minute);\n\n          case \"mm\":\n            return _this.num(dt.minute, 2);\n          // hours\n\n          case \"h\":\n            return _this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12);\n\n          case \"hh\":\n            return _this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12, 2);\n\n          case \"H\":\n            return _this.num(dt.hour);\n\n          case \"HH\":\n            return _this.num(dt.hour, 2);\n          // offset\n\n          case \"Z\":\n            // like +6\n            return formatOffset({\n              format: \"narrow\",\n              allowZ: _this.opts.allowZ\n            });\n\n          case \"ZZ\":\n            // like +06:00\n            return formatOffset({\n              format: \"short\",\n              allowZ: _this.opts.allowZ\n            });\n\n          case \"ZZZ\":\n            // like +0600\n            return formatOffset({\n              format: \"techie\",\n              allowZ: _this.opts.allowZ\n            });\n\n          case \"ZZZZ\":\n            // like EST\n            return dt.zone.offsetName(dt.ts, {\n              format: \"short\",\n              locale: _this.loc.locale\n            });\n\n          case \"ZZZZZ\":\n            // like Eastern Standard Time\n            return dt.zone.offsetName(dt.ts, {\n              format: \"long\",\n              locale: _this.loc.locale\n            });\n          // zone\n\n          case \"z\":\n            // like America/New_York\n            return dt.zoneName;\n          // meridiems\n\n          case \"a\":\n            return meridiem();\n          // dates\n\n          case \"d\":\n            return useDateTimeFormatter ? string({\n              day: \"numeric\"\n            }, \"day\") : _this.num(dt.day);\n\n          case \"dd\":\n            return useDateTimeFormatter ? string({\n              day: \"2-digit\"\n            }, \"day\") : _this.num(dt.day, 2);\n          // weekdays - standalone\n\n          case \"c\":\n            // like 1\n            return _this.num(dt.weekday);\n\n          case \"ccc\":\n            // like 'Tues'\n            return weekday(\"short\", true);\n\n          case \"cccc\":\n            // like 'Tuesday'\n            return weekday(\"long\", true);\n\n          case \"ccccc\":\n            // like 'T'\n            return weekday(\"narrow\", true);\n          // weekdays - format\n\n          case \"E\":\n            // like 1\n            return _this.num(dt.weekday);\n\n          case \"EEE\":\n            // like 'Tues'\n            return weekday(\"short\", false);\n\n          case \"EEEE\":\n            // like 'Tuesday'\n            return weekday(\"long\", false);\n\n          case \"EEEEE\":\n            // like 'T'\n            return weekday(\"narrow\", false);\n          // months - standalone\n\n          case \"L\":\n            // like 1\n            return useDateTimeFormatter ? string({\n              month: \"numeric\",\n              day: \"numeric\"\n            }, \"month\") : _this.num(dt.month);\n\n          case \"LL\":\n            // like 01, doesn't seem to work\n            return useDateTimeFormatter ? string({\n              month: \"2-digit\",\n              day: \"numeric\"\n            }, \"month\") : _this.num(dt.month, 2);\n\n          case \"LLL\":\n            // like Jan\n            return month(\"short\", true);\n\n          case \"LLLL\":\n            // like January\n            return month(\"long\", true);\n\n          case \"LLLLL\":\n            // like J\n            return month(\"narrow\", true);\n          // months - format\n\n          case \"M\":\n            // like 1\n            return useDateTimeFormatter ? string({\n              month: \"numeric\"\n            }, \"month\") : _this.num(dt.month);\n\n          case \"MM\":\n            // like 01\n            return useDateTimeFormatter ? string({\n              month: \"2-digit\"\n            }, \"month\") : _this.num(dt.month, 2);\n\n          case \"MMM\":\n            // like Jan\n            return month(\"short\", false);\n\n          case \"MMMM\":\n            // like January\n            return month(\"long\", false);\n\n          case \"MMMMM\":\n            // like J\n            return month(\"narrow\", false);\n          // years\n\n          case \"y\":\n            // like 2014\n            return useDateTimeFormatter ? string({\n              year: \"numeric\"\n            }, \"year\") : _this.num(dt.year);\n\n          case \"yy\":\n            // like 14\n            return useDateTimeFormatter ? string({\n              year: \"2-digit\"\n            }, \"year\") : _this.num(dt.year.toString().slice(-2), 2);\n\n          case \"yyyy\":\n            // like 0012\n            return useDateTimeFormatter ? string({\n              year: \"numeric\"\n            }, \"year\") : _this.num(dt.year, 4);\n\n          case \"yyyyyy\":\n            // like 000012\n            return useDateTimeFormatter ? string({\n              year: \"numeric\"\n            }, \"year\") : _this.num(dt.year, 6);\n          // eras\n\n          case \"G\":\n            // like AD\n            return era(\"short\");\n\n          case \"GG\":\n            // like Anno Domini\n            return era(\"long\");\n\n          case \"GGGGG\":\n            return era(\"narrow\");\n\n          case \"kk\":\n            return _this.num(dt.weekYear.toString().slice(-2), 2);\n\n          case \"kkkk\":\n            return _this.num(dt.weekYear, 4);\n\n          case \"W\":\n            return _this.num(dt.weekNumber);\n\n          case \"WW\":\n            return _this.num(dt.weekNumber, 2);\n\n          case \"o\":\n            return _this.num(dt.ordinal);\n\n          case \"ooo\":\n            return _this.num(dt.ordinal, 3);\n\n          case \"q\":\n            // like 1\n            return _this.num(dt.quarter);\n\n          case \"qq\":\n            // like 01\n            return _this.num(dt.quarter, 2);\n\n          case \"X\":\n            return _this.num(Math.floor(dt.ts / 1000));\n\n          case \"x\":\n            return _this.num(dt.ts);\n\n          default:\n            return maybeMacro(token);\n        }\n      };\n\n      return stringifyTokens(Formatter.parseFormat(fmt), tokenToString);\n    };\n\n    _proto.formatDurationFromString = function formatDurationFromString(dur, fmt) {\n      var _this2 = this;\n\n      var tokenToField = function tokenToField(token) {\n        switch (token[0]) {\n          case \"S\":\n            return \"millisecond\";\n\n          case \"s\":\n            return \"second\";\n\n          case \"m\":\n            return \"minute\";\n\n          case \"h\":\n            return \"hour\";\n\n          case \"d\":\n            return \"day\";\n\n          case \"M\":\n            return \"month\";\n\n          case \"y\":\n            return \"year\";\n\n          default:\n            return null;\n        }\n      },\n          tokenToString = function tokenToString(lildur) {\n        return function (token) {\n          var mapped = tokenToField(token);\n\n          if (mapped) {\n            return _this2.num(lildur.get(mapped), token.length);\n          } else {\n            return token;\n          }\n        };\n      },\n          tokens = Formatter.parseFormat(fmt),\n          realTokens = tokens.reduce(function (found, _ref) {\n        var literal = _ref.literal,\n            val = _ref.val;\n        return literal ? found : found.concat(val);\n      }, []),\n          collapsed = dur.shiftTo.apply(dur, realTokens.map(tokenToField).filter(function (t) {\n        return t;\n      }));\n\n      return stringifyTokens(tokens, tokenToString(collapsed));\n    };\n\n    return Formatter;\n  }();\n\n  var Invalid = /*#__PURE__*/function () {\n    function Invalid(reason, explanation) {\n      this.reason = reason;\n      this.explanation = explanation;\n    }\n\n    var _proto = Invalid.prototype;\n\n    _proto.toMessage = function toMessage() {\n      if (this.explanation) {\n        return this.reason + \": \" + this.explanation;\n      } else {\n        return this.reason;\n      }\n    };\n\n    return Invalid;\n  }();\n\n  /**\n   * @interface\n   */\n\n  var Zone = /*#__PURE__*/function () {\n    function Zone() {}\n\n    var _proto = Zone.prototype;\n\n    /**\n     * Returns the offset's common name (such as EST) at the specified timestamp\n     * @abstract\n     * @param {number} ts - Epoch milliseconds for which to get the name\n     * @param {Object} opts - Options to affect the format\n     * @param {string} opts.format - What style of offset to return. Accepts 'long' or 'short'.\n     * @param {string} opts.locale - What locale to return the offset name in.\n     * @return {string}\n     */\n    _proto.offsetName = function offsetName(ts, opts) {\n      throw new ZoneIsAbstractError();\n    }\n    /**\n     * Returns the offset's value as a string\n     * @abstract\n     * @param {number} ts - Epoch milliseconds for which to get the offset\n     * @param {string} format - What style of offset to return.\n     *                          Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n     * @return {string}\n     */\n    ;\n\n    _proto.formatOffset = function formatOffset(ts, format) {\n      throw new ZoneIsAbstractError();\n    }\n    /**\n     * Return the offset in minutes for this zone at the specified timestamp.\n     * @abstract\n     * @param {number} ts - Epoch milliseconds for which to compute the offset\n     * @return {number}\n     */\n    ;\n\n    _proto.offset = function offset(ts) {\n      throw new ZoneIsAbstractError();\n    }\n    /**\n     * Return whether this Zone is equal to another zone\n     * @abstract\n     * @param {Zone} otherZone - the zone to compare\n     * @return {boolean}\n     */\n    ;\n\n    _proto.equals = function equals(otherZone) {\n      throw new ZoneIsAbstractError();\n    }\n    /**\n     * Return whether this Zone is valid.\n     * @abstract\n     * @type {boolean}\n     */\n    ;\n\n    _createClass(Zone, [{\n      key: \"type\",\n\n      /**\n       * The type of zone\n       * @abstract\n       * @type {string}\n       */\n      get: function get() {\n        throw new ZoneIsAbstractError();\n      }\n      /**\n       * The name of this zone.\n       * @abstract\n       * @type {string}\n       */\n\n    }, {\n      key: \"name\",\n      get: function get() {\n        throw new ZoneIsAbstractError();\n      }\n      /**\n       * Returns whether the offset is known to be fixed for the whole year.\n       * @abstract\n       * @type {boolean}\n       */\n\n    }, {\n      key: \"universal\",\n      get: function get() {\n        throw new ZoneIsAbstractError();\n      }\n    }, {\n      key: \"isValid\",\n      get: function get() {\n        throw new ZoneIsAbstractError();\n      }\n    }]);\n\n    return Zone;\n  }();\n\n  var singleton = null;\n  /**\n   * Represents the local zone for this Javascript environment.\n   * @implements {Zone}\n   */\n\n  var LocalZone = /*#__PURE__*/function (_Zone) {\n    _inheritsLoose(LocalZone, _Zone);\n\n    function LocalZone() {\n      return _Zone.apply(this, arguments) || this;\n    }\n\n    var _proto = LocalZone.prototype;\n\n    /** @override **/\n    _proto.offsetName = function offsetName(ts, _ref) {\n      var format = _ref.format,\n          locale = _ref.locale;\n      return parseZoneInfo(ts, format, locale);\n    }\n    /** @override **/\n    ;\n\n    _proto.formatOffset = function formatOffset$1(ts, format) {\n      return formatOffset(this.offset(ts), format);\n    }\n    /** @override **/\n    ;\n\n    _proto.offset = function offset(ts) {\n      return -new Date(ts).getTimezoneOffset();\n    }\n    /** @override **/\n    ;\n\n    _proto.equals = function equals(otherZone) {\n      return otherZone.type === \"local\";\n    }\n    /** @override **/\n    ;\n\n    _createClass(LocalZone, [{\n      key: \"type\",\n\n      /** @override **/\n      get: function get() {\n        return \"local\";\n      }\n      /** @override **/\n\n    }, {\n      key: \"name\",\n      get: function get() {\n        if (hasIntl()) {\n          return new Intl.DateTimeFormat().resolvedOptions().timeZone;\n        } else return \"local\";\n      }\n      /** @override **/\n\n    }, {\n      key: \"universal\",\n      get: function get() {\n        return false;\n      }\n    }, {\n      key: \"isValid\",\n      get: function get() {\n        return true;\n      }\n    }], [{\n      key: \"instance\",\n\n      /**\n       * Get a singleton instance of the local zone\n       * @return {LocalZone}\n       */\n      get: function get() {\n        if (singleton === null) {\n          singleton = new LocalZone();\n        }\n\n        return singleton;\n      }\n    }]);\n\n    return LocalZone;\n  }(Zone);\n\n  var matchingRegex = RegExp(\"^\" + ianaRegex.source + \"$\");\n  var dtfCache = {};\n\n  function makeDTF(zone) {\n    if (!dtfCache[zone]) {\n      dtfCache[zone] = new Intl.DateTimeFormat(\"en-US\", {\n        hour12: false,\n        timeZone: zone,\n        year: \"numeric\",\n        month: \"2-digit\",\n        day: \"2-digit\",\n        hour: \"2-digit\",\n        minute: \"2-digit\",\n        second: \"2-digit\"\n      });\n    }\n\n    return dtfCache[zone];\n  }\n\n  var typeToPos = {\n    year: 0,\n    month: 1,\n    day: 2,\n    hour: 3,\n    minute: 4,\n    second: 5\n  };\n\n  function hackyOffset(dtf, date) {\n    var formatted = dtf.format(date).replace(/\\u200E/g, \"\"),\n        parsed = /(\\d+)\\/(\\d+)\\/(\\d+),? (\\d+):(\\d+):(\\d+)/.exec(formatted),\n        fMonth = parsed[1],\n        fDay = parsed[2],\n        fYear = parsed[3],\n        fHour = parsed[4],\n        fMinute = parsed[5],\n        fSecond = parsed[6];\n    return [fYear, fMonth, fDay, fHour, fMinute, fSecond];\n  }\n\n  function partsOffset(dtf, date) {\n    var formatted = dtf.formatToParts(date),\n        filled = [];\n\n    for (var i = 0; i < formatted.length; i++) {\n      var _formatted$i = formatted[i],\n          type = _formatted$i.type,\n          value = _formatted$i.value,\n          pos = typeToPos[type];\n\n      if (!isUndefined(pos)) {\n        filled[pos] = parseInt(value, 10);\n      }\n    }\n\n    return filled;\n  }\n\n  var ianaZoneCache = {};\n  /**\n   * A zone identified by an IANA identifier, like America/New_York\n   * @implements {Zone}\n   */\n\n  var IANAZone = /*#__PURE__*/function (_Zone) {\n    _inheritsLoose(IANAZone, _Zone);\n\n    /**\n     * @param {string} name - Zone name\n     * @return {IANAZone}\n     */\n    IANAZone.create = function create(name) {\n      if (!ianaZoneCache[name]) {\n        ianaZoneCache[name] = new IANAZone(name);\n      }\n\n      return ianaZoneCache[name];\n    }\n    /**\n     * Reset local caches. Should only be necessary in testing scenarios.\n     * @return {void}\n     */\n    ;\n\n    IANAZone.resetCache = function resetCache() {\n      ianaZoneCache = {};\n      dtfCache = {};\n    }\n    /**\n     * Returns whether the provided string is a valid specifier. This only checks the string's format, not that the specifier identifies a known zone; see isValidZone for that.\n     * @param {string} s - The string to check validity on\n     * @example IANAZone.isValidSpecifier(\"America/New_York\") //=> true\n     * @example IANAZone.isValidSpecifier(\"Fantasia/Castle\") //=> true\n     * @example IANAZone.isValidSpecifier(\"Sport~~blorp\") //=> false\n     * @return {boolean}\n     */\n    ;\n\n    IANAZone.isValidSpecifier = function isValidSpecifier(s) {\n      return !!(s && s.match(matchingRegex));\n    }\n    /**\n     * Returns whether the provided string identifies a real zone\n     * @param {string} zone - The string to check\n     * @example IANAZone.isValidZone(\"America/New_York\") //=> true\n     * @example IANAZone.isValidZone(\"Fantasia/Castle\") //=> false\n     * @example IANAZone.isValidZone(\"Sport~~blorp\") //=> false\n     * @return {boolean}\n     */\n    ;\n\n    IANAZone.isValidZone = function isValidZone(zone) {\n      try {\n        new Intl.DateTimeFormat(\"en-US\", {\n          timeZone: zone\n        }).format();\n        return true;\n      } catch (e) {\n        return false;\n      }\n    } // Etc/GMT+8 -> -480\n\n    /** @ignore */\n    ;\n\n    IANAZone.parseGMTOffset = function parseGMTOffset(specifier) {\n      if (specifier) {\n        var match = specifier.match(/^Etc\\/GMT([+-]\\d{1,2})$/i);\n\n        if (match) {\n          return -60 * parseInt(match[1]);\n        }\n      }\n\n      return null;\n    };\n\n    function IANAZone(name) {\n      var _this;\n\n      _this = _Zone.call(this) || this;\n      /** @private **/\n\n      _this.zoneName = name;\n      /** @private **/\n\n      _this.valid = IANAZone.isValidZone(name);\n      return _this;\n    }\n    /** @override **/\n\n\n    var _proto = IANAZone.prototype;\n\n    /** @override **/\n    _proto.offsetName = function offsetName(ts, _ref) {\n      var format = _ref.format,\n          locale = _ref.locale;\n      return parseZoneInfo(ts, format, locale, this.name);\n    }\n    /** @override **/\n    ;\n\n    _proto.formatOffset = function formatOffset$1(ts, format) {\n      return formatOffset(this.offset(ts), format);\n    }\n    /** @override **/\n    ;\n\n    _proto.offset = function offset(ts) {\n      var date = new Date(ts),\n          dtf = makeDTF(this.name),\n          _ref2 = dtf.formatToParts ? partsOffset(dtf, date) : hackyOffset(dtf, date),\n          year = _ref2[0],\n          month = _ref2[1],\n          day = _ref2[2],\n          hour = _ref2[3],\n          minute = _ref2[4],\n          second = _ref2[5],\n          adjustedHour = hour === 24 ? 0 : hour;\n\n      var asUTC = objToLocalTS({\n        year: year,\n        month: month,\n        day: day,\n        hour: adjustedHour,\n        minute: minute,\n        second: second,\n        millisecond: 0\n      });\n      var asTS = +date;\n      var over = asTS % 1000;\n      asTS -= over >= 0 ? over : 1000 + over;\n      return (asUTC - asTS) / (60 * 1000);\n    }\n    /** @override **/\n    ;\n\n    _proto.equals = function equals(otherZone) {\n      return otherZone.type === \"iana\" && otherZone.name === this.name;\n    }\n    /** @override **/\n    ;\n\n    _createClass(IANAZone, [{\n      key: \"type\",\n      get: function get() {\n        return \"iana\";\n      }\n      /** @override **/\n\n    }, {\n      key: \"name\",\n      get: function get() {\n        return this.zoneName;\n      }\n      /** @override **/\n\n    }, {\n      key: \"universal\",\n      get: function get() {\n        return false;\n      }\n    }, {\n      key: \"isValid\",\n      get: function get() {\n        return this.valid;\n      }\n    }]);\n\n    return IANAZone;\n  }(Zone);\n\n  var singleton$1 = null;\n  /**\n   * A zone with a fixed offset (meaning no DST)\n   * @implements {Zone}\n   */\n\n  var FixedOffsetZone = /*#__PURE__*/function (_Zone) {\n    _inheritsLoose(FixedOffsetZone, _Zone);\n\n    /**\n     * Get an instance with a specified offset\n     * @param {number} offset - The offset in minutes\n     * @return {FixedOffsetZone}\n     */\n    FixedOffsetZone.instance = function instance(offset) {\n      return offset === 0 ? FixedOffsetZone.utcInstance : new FixedOffsetZone(offset);\n    }\n    /**\n     * Get an instance of FixedOffsetZone from a UTC offset string, like \"UTC+6\"\n     * @param {string} s - The offset string to parse\n     * @example FixedOffsetZone.parseSpecifier(\"UTC+6\")\n     * @example FixedOffsetZone.parseSpecifier(\"UTC+06\")\n     * @example FixedOffsetZone.parseSpecifier(\"UTC-6:00\")\n     * @return {FixedOffsetZone}\n     */\n    ;\n\n    FixedOffsetZone.parseSpecifier = function parseSpecifier(s) {\n      if (s) {\n        var r = s.match(/^utc(?:([+-]\\d{1,2})(?::(\\d{2}))?)?$/i);\n\n        if (r) {\n          return new FixedOffsetZone(signedOffset(r[1], r[2]));\n        }\n      }\n\n      return null;\n    };\n\n    _createClass(FixedOffsetZone, null, [{\n      key: \"utcInstance\",\n\n      /**\n       * Get a singleton instance of UTC\n       * @return {FixedOffsetZone}\n       */\n      get: function get() {\n        if (singleton$1 === null) {\n          singleton$1 = new FixedOffsetZone(0);\n        }\n\n        return singleton$1;\n      }\n    }]);\n\n    function FixedOffsetZone(offset) {\n      var _this;\n\n      _this = _Zone.call(this) || this;\n      /** @private **/\n\n      _this.fixed = offset;\n      return _this;\n    }\n    /** @override **/\n\n\n    var _proto = FixedOffsetZone.prototype;\n\n    /** @override **/\n    _proto.offsetName = function offsetName() {\n      return this.name;\n    }\n    /** @override **/\n    ;\n\n    _proto.formatOffset = function formatOffset$1(ts, format) {\n      return formatOffset(this.fixed, format);\n    }\n    /** @override **/\n    ;\n\n    /** @override **/\n    _proto.offset = function offset() {\n      return this.fixed;\n    }\n    /** @override **/\n    ;\n\n    _proto.equals = function equals(otherZone) {\n      return otherZone.type === \"fixed\" && otherZone.fixed === this.fixed;\n    }\n    /** @override **/\n    ;\n\n    _createClass(FixedOffsetZone, [{\n      key: \"type\",\n      get: function get() {\n        return \"fixed\";\n      }\n      /** @override **/\n\n    }, {\n      key: \"name\",\n      get: function get() {\n        return this.fixed === 0 ? \"UTC\" : \"UTC\" + formatOffset(this.fixed, \"narrow\");\n      }\n    }, {\n      key: \"universal\",\n      get: function get() {\n        return true;\n      }\n    }, {\n      key: \"isValid\",\n      get: function get() {\n        return true;\n      }\n    }]);\n\n    return FixedOffsetZone;\n  }(Zone);\n\n  /**\n   * A zone that failed to parse. You should never need to instantiate this.\n   * @implements {Zone}\n   */\n\n  var InvalidZone = /*#__PURE__*/function (_Zone) {\n    _inheritsLoose(InvalidZone, _Zone);\n\n    function InvalidZone(zoneName) {\n      var _this;\n\n      _this = _Zone.call(this) || this;\n      /**  @private */\n\n      _this.zoneName = zoneName;\n      return _this;\n    }\n    /** @override **/\n\n\n    var _proto = InvalidZone.prototype;\n\n    /** @override **/\n    _proto.offsetName = function offsetName() {\n      return null;\n    }\n    /** @override **/\n    ;\n\n    _proto.formatOffset = function formatOffset() {\n      return \"\";\n    }\n    /** @override **/\n    ;\n\n    _proto.offset = function offset() {\n      return NaN;\n    }\n    /** @override **/\n    ;\n\n    _proto.equals = function equals() {\n      return false;\n    }\n    /** @override **/\n    ;\n\n    _createClass(InvalidZone, [{\n      key: \"type\",\n      get: function get() {\n        return \"invalid\";\n      }\n      /** @override **/\n\n    }, {\n      key: \"name\",\n      get: function get() {\n        return this.zoneName;\n      }\n      /** @override **/\n\n    }, {\n      key: \"universal\",\n      get: function get() {\n        return false;\n      }\n    }, {\n      key: \"isValid\",\n      get: function get() {\n        return false;\n      }\n    }]);\n\n    return InvalidZone;\n  }(Zone);\n\n  /**\n   * @private\n   */\n  function normalizeZone(input, defaultZone) {\n    var offset;\n\n    if (isUndefined(input) || input === null) {\n      return defaultZone;\n    } else if (input instanceof Zone) {\n      return input;\n    } else if (isString(input)) {\n      var lowered = input.toLowerCase();\n      if (lowered === \"local\") return defaultZone;else if (lowered === \"utc\" || lowered === \"gmt\") return FixedOffsetZone.utcInstance;else if ((offset = IANAZone.parseGMTOffset(input)) != null) {\n        // handle Etc/GMT-4, which V8 chokes on\n        return FixedOffsetZone.instance(offset);\n      } else if (IANAZone.isValidSpecifier(lowered)) return IANAZone.create(input);else return FixedOffsetZone.parseSpecifier(lowered) || new InvalidZone(input);\n    } else if (isNumber(input)) {\n      return FixedOffsetZone.instance(input);\n    } else if (typeof input === \"object\" && input.offset && typeof input.offset === \"number\") {\n      // This is dumb, but the instanceof check above doesn't seem to really work\n      // so we're duck checking it\n      return input;\n    } else {\n      return new InvalidZone(input);\n    }\n  }\n\n  var now = function now() {\n    return Date.now();\n  },\n      defaultZone = null,\n      // not setting this directly to LocalZone.instance bc loading order issues\n  defaultLocale = null,\n      defaultNumberingSystem = null,\n      defaultOutputCalendar = null,\n      throwOnInvalid = false;\n  /**\n   * Settings contains static getters and setters that control Luxon's overall behavior. Luxon is a simple library with few options, but the ones it does have live here.\n   */\n\n\n  var Settings = /*#__PURE__*/function () {\n    function Settings() {}\n\n    /**\n     * Reset Luxon's global caches. Should only be necessary in testing scenarios.\n     * @return {void}\n     */\n    Settings.resetCaches = function resetCaches() {\n      Locale.resetCache();\n      IANAZone.resetCache();\n    };\n\n    _createClass(Settings, null, [{\n      key: \"now\",\n\n      /**\n       * Get the callback for returning the current timestamp.\n       * @type {function}\n       */\n      get: function get() {\n        return now;\n      }\n      /**\n       * Set the callback for returning the current timestamp.\n       * The function should return a number, which will be interpreted as an Epoch millisecond count\n       * @type {function}\n       * @example Settings.now = () => Date.now() + 3000 // pretend it is 3 seconds in the future\n       * @example Settings.now = () => 0 // always pretend it's Jan 1, 1970 at midnight in UTC time\n       */\n      ,\n      set: function set(n) {\n        now = n;\n      }\n      /**\n       * Get the default time zone to create DateTimes in.\n       * @type {string}\n       */\n\n    }, {\n      key: \"defaultZoneName\",\n      get: function get() {\n        return Settings.defaultZone.name;\n      }\n      /**\n       * Set the default time zone to create DateTimes in. Does not affect existing instances.\n       * @type {string}\n       */\n      ,\n      set: function set(z) {\n        if (!z) {\n          defaultZone = null;\n        } else {\n          defaultZone = normalizeZone(z);\n        }\n      }\n      /**\n       * Get the default time zone object to create DateTimes in. Does not affect existing instances.\n       * @type {Zone}\n       */\n\n    }, {\n      key: \"defaultZone\",\n      get: function get() {\n        return defaultZone || LocalZone.instance;\n      }\n      /**\n       * Get the default locale to create DateTimes with. Does not affect existing instances.\n       * @type {string}\n       */\n\n    }, {\n      key: \"defaultLocale\",\n      get: function get() {\n        return defaultLocale;\n      }\n      /**\n       * Set the default locale to create DateTimes with. Does not affect existing instances.\n       * @type {string}\n       */\n      ,\n      set: function set(locale) {\n        defaultLocale = locale;\n      }\n      /**\n       * Get the default numbering system to create DateTimes with. Does not affect existing instances.\n       * @type {string}\n       */\n\n    }, {\n      key: \"defaultNumberingSystem\",\n      get: function get() {\n        return defaultNumberingSystem;\n      }\n      /**\n       * Set the default numbering system to create DateTimes with. Does not affect existing instances.\n       * @type {string}\n       */\n      ,\n      set: function set(numberingSystem) {\n        defaultNumberingSystem = numberingSystem;\n      }\n      /**\n       * Get the default output calendar to create DateTimes with. Does not affect existing instances.\n       * @type {string}\n       */\n\n    }, {\n      key: \"defaultOutputCalendar\",\n      get: function get() {\n        return defaultOutputCalendar;\n      }\n      /**\n       * Set the default output calendar to create DateTimes with. Does not affect existing instances.\n       * @type {string}\n       */\n      ,\n      set: function set(outputCalendar) {\n        defaultOutputCalendar = outputCalendar;\n      }\n      /**\n       * Get whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals\n       * @type {boolean}\n       */\n\n    }, {\n      key: \"throwOnInvalid\",\n      get: function get() {\n        return throwOnInvalid;\n      }\n      /**\n       * Set whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals\n       * @type {boolean}\n       */\n      ,\n      set: function set(t) {\n        throwOnInvalid = t;\n      }\n    }]);\n\n    return Settings;\n  }();\n\n  var intlDTCache = {};\n\n  function getCachedDTF(locString, opts) {\n    if (opts === void 0) {\n      opts = {};\n    }\n\n    var key = JSON.stringify([locString, opts]);\n    var dtf = intlDTCache[key];\n\n    if (!dtf) {\n      dtf = new Intl.DateTimeFormat(locString, opts);\n      intlDTCache[key] = dtf;\n    }\n\n    return dtf;\n  }\n\n  var intlNumCache = {};\n\n  function getCachedINF(locString, opts) {\n    if (opts === void 0) {\n      opts = {};\n    }\n\n    var key = JSON.stringify([locString, opts]);\n    var inf = intlNumCache[key];\n\n    if (!inf) {\n      inf = new Intl.NumberFormat(locString, opts);\n      intlNumCache[key] = inf;\n    }\n\n    return inf;\n  }\n\n  var intlRelCache = {};\n\n  function getCachedRTF(locString, opts) {\n    if (opts === void 0) {\n      opts = {};\n    }\n\n    var _opts = opts,\n        base = _opts.base,\n        cacheKeyOpts = _objectWithoutPropertiesLoose(_opts, [\"base\"]); // exclude `base` from the options\n\n\n    var key = JSON.stringify([locString, cacheKeyOpts]);\n    var inf = intlRelCache[key];\n\n    if (!inf) {\n      inf = new Intl.RelativeTimeFormat(locString, opts);\n      intlRelCache[key] = inf;\n    }\n\n    return inf;\n  }\n\n  var sysLocaleCache = null;\n\n  function systemLocale() {\n    if (sysLocaleCache) {\n      return sysLocaleCache;\n    } else if (hasIntl()) {\n      var computedSys = new Intl.DateTimeFormat().resolvedOptions().locale; // node sometimes defaults to \"und\". Override that because that is dumb\n\n      sysLocaleCache = !computedSys || computedSys === \"und\" ? \"en-US\" : computedSys;\n      return sysLocaleCache;\n    } else {\n      sysLocaleCache = \"en-US\";\n      return sysLocaleCache;\n    }\n  }\n\n  function parseLocaleString(localeStr) {\n    // I really want to avoid writing a BCP 47 parser\n    // see, e.g. https://github.com/wooorm/bcp-47\n    // Instead, we'll do this:\n    // a) if the string has no -u extensions, just leave it alone\n    // b) if it does, use Intl to resolve everything\n    // c) if Intl fails, try again without the -u\n    var uIndex = localeStr.indexOf(\"-u-\");\n\n    if (uIndex === -1) {\n      return [localeStr];\n    } else {\n      var options;\n      var smaller = localeStr.substring(0, uIndex);\n\n      try {\n        options = getCachedDTF(localeStr).resolvedOptions();\n      } catch (e) {\n        options = getCachedDTF(smaller).resolvedOptions();\n      }\n\n      var _options = options,\n          numberingSystem = _options.numberingSystem,\n          calendar = _options.calendar; // return the smaller one so that we can append the calendar and numbering overrides to it\n\n      return [smaller, numberingSystem, calendar];\n    }\n  }\n\n  function intlConfigString(localeStr, numberingSystem, outputCalendar) {\n    if (hasIntl()) {\n      if (outputCalendar || numberingSystem) {\n        localeStr += \"-u\";\n\n        if (outputCalendar) {\n          localeStr += \"-ca-\" + outputCalendar;\n        }\n\n        if (numberingSystem) {\n          localeStr += \"-nu-\" + numberingSystem;\n        }\n\n        return localeStr;\n      } else {\n        return localeStr;\n      }\n    } else {\n      return [];\n    }\n  }\n\n  function mapMonths(f) {\n    var ms = [];\n\n    for (var i = 1; i <= 12; i++) {\n      var dt = DateTime.utc(2016, i, 1);\n      ms.push(f(dt));\n    }\n\n    return ms;\n  }\n\n  function mapWeekdays(f) {\n    var ms = [];\n\n    for (var i = 1; i <= 7; i++) {\n      var dt = DateTime.utc(2016, 11, 13 + i);\n      ms.push(f(dt));\n    }\n\n    return ms;\n  }\n\n  function listStuff(loc, length, defaultOK, englishFn, intlFn) {\n    var mode = loc.listingMode(defaultOK);\n\n    if (mode === \"error\") {\n      return null;\n    } else if (mode === \"en\") {\n      return englishFn(length);\n    } else {\n      return intlFn(length);\n    }\n  }\n\n  function supportsFastNumbers(loc) {\n    if (loc.numberingSystem && loc.numberingSystem !== \"latn\") {\n      return false;\n    } else {\n      return loc.numberingSystem === \"latn\" || !loc.locale || loc.locale.startsWith(\"en\") || hasIntl() && new Intl.DateTimeFormat(loc.intl).resolvedOptions().numberingSystem === \"latn\";\n    }\n  }\n  /**\n   * @private\n   */\n\n\n  var PolyNumberFormatter = /*#__PURE__*/function () {\n    function PolyNumberFormatter(intl, forceSimple, opts) {\n      this.padTo = opts.padTo || 0;\n      this.floor = opts.floor || false;\n\n      if (!forceSimple && hasIntl()) {\n        var intlOpts = {\n          useGrouping: false\n        };\n        if (opts.padTo > 0) intlOpts.minimumIntegerDigits = opts.padTo;\n        this.inf = getCachedINF(intl, intlOpts);\n      }\n    }\n\n    var _proto = PolyNumberFormatter.prototype;\n\n    _proto.format = function format(i) {\n      if (this.inf) {\n        var fixed = this.floor ? Math.floor(i) : i;\n        return this.inf.format(fixed);\n      } else {\n        // to match the browser's numberformatter defaults\n        var _fixed = this.floor ? Math.floor(i) : roundTo(i, 3);\n\n        return padStart(_fixed, this.padTo);\n      }\n    };\n\n    return PolyNumberFormatter;\n  }();\n  /**\n   * @private\n   */\n\n\n  var PolyDateFormatter = /*#__PURE__*/function () {\n    function PolyDateFormatter(dt, intl, opts) {\n      this.opts = opts;\n      this.hasIntl = hasIntl();\n      var z;\n\n      if (dt.zone.universal && this.hasIntl) {\n        // Chromium doesn't support fixed-offset zones like Etc/GMT+8 in its formatter,\n        // See https://bugs.chromium.org/p/chromium/issues/detail?id=364374.\n        // So we have to make do. Two cases:\n        // 1. The format options tell us to show the zone. We can't do that, so the best\n        // we can do is format the date in UTC.\n        // 2. The format options don't tell us to show the zone. Then we can adjust them\n        // the time and tell the formatter to show it to us in UTC, so that the time is right\n        // and the bad zone doesn't show up.\n        // We can clean all this up when Chrome fixes this.\n        z = \"UTC\";\n\n        if (opts.timeZoneName) {\n          this.dt = dt;\n        } else {\n          this.dt = dt.offset === 0 ? dt : DateTime.fromMillis(dt.ts + dt.offset * 60 * 1000);\n        }\n      } else if (dt.zone.type === \"local\") {\n        this.dt = dt;\n      } else {\n        this.dt = dt;\n        z = dt.zone.name;\n      }\n\n      if (this.hasIntl) {\n        var intlOpts = Object.assign({}, this.opts);\n\n        if (z) {\n          intlOpts.timeZone = z;\n        }\n\n        this.dtf = getCachedDTF(intl, intlOpts);\n      }\n    }\n\n    var _proto2 = PolyDateFormatter.prototype;\n\n    _proto2.format = function format() {\n      if (this.hasIntl) {\n        return this.dtf.format(this.dt.toJSDate());\n      } else {\n        var tokenFormat = formatString(this.opts),\n            loc = Locale.create(\"en-US\");\n        return Formatter.create(loc).formatDateTimeFromString(this.dt, tokenFormat);\n      }\n    };\n\n    _proto2.formatToParts = function formatToParts() {\n      if (this.hasIntl && hasFormatToParts()) {\n        return this.dtf.formatToParts(this.dt.toJSDate());\n      } else {\n        // This is kind of a cop out. We actually could do this for English. However, we couldn't do it for intl strings\n        // and IMO it's too weird to have an uncanny valley like that\n        return [];\n      }\n    };\n\n    _proto2.resolvedOptions = function resolvedOptions() {\n      if (this.hasIntl) {\n        return this.dtf.resolvedOptions();\n      } else {\n        return {\n          locale: \"en-US\",\n          numberingSystem: \"latn\",\n          outputCalendar: \"gregory\"\n        };\n      }\n    };\n\n    return PolyDateFormatter;\n  }();\n  /**\n   * @private\n   */\n\n\n  var PolyRelFormatter = /*#__PURE__*/function () {\n    function PolyRelFormatter(intl, isEnglish, opts) {\n      this.opts = Object.assign({\n        style: \"long\"\n      }, opts);\n\n      if (!isEnglish && hasRelative()) {\n        this.rtf = getCachedRTF(intl, opts);\n      }\n    }\n\n    var _proto3 = PolyRelFormatter.prototype;\n\n    _proto3.format = function format(count, unit) {\n      if (this.rtf) {\n        return this.rtf.format(count, unit);\n      } else {\n        return formatRelativeTime(unit, count, this.opts.numeric, this.opts.style !== \"long\");\n      }\n    };\n\n    _proto3.formatToParts = function formatToParts(count, unit) {\n      if (this.rtf) {\n        return this.rtf.formatToParts(count, unit);\n      } else {\n        return [];\n      }\n    };\n\n    return PolyRelFormatter;\n  }();\n  /**\n   * @private\n   */\n\n\n  var Locale = /*#__PURE__*/function () {\n    Locale.fromOpts = function fromOpts(opts) {\n      return Locale.create(opts.locale, opts.numberingSystem, opts.outputCalendar, opts.defaultToEN);\n    };\n\n    Locale.create = function create(locale, numberingSystem, outputCalendar, defaultToEN) {\n      if (defaultToEN === void 0) {\n        defaultToEN = false;\n      }\n\n      var specifiedLocale = locale || Settings.defaultLocale,\n          // the system locale is useful for human readable strings but annoying for parsing/formatting known formats\n      localeR = specifiedLocale || (defaultToEN ? \"en-US\" : systemLocale()),\n          numberingSystemR = numberingSystem || Settings.defaultNumberingSystem,\n          outputCalendarR = outputCalendar || Settings.defaultOutputCalendar;\n      return new Locale(localeR, numberingSystemR, outputCalendarR, specifiedLocale);\n    };\n\n    Locale.resetCache = function resetCache() {\n      sysLocaleCache = null;\n      intlDTCache = {};\n      intlNumCache = {};\n      intlRelCache = {};\n    };\n\n    Locale.fromObject = function fromObject(_temp) {\n      var _ref = _temp === void 0 ? {} : _temp,\n          locale = _ref.locale,\n          numberingSystem = _ref.numberingSystem,\n          outputCalendar = _ref.outputCalendar;\n\n      return Locale.create(locale, numberingSystem, outputCalendar);\n    };\n\n    function Locale(locale, numbering, outputCalendar, specifiedLocale) {\n      var _parseLocaleString = parseLocaleString(locale),\n          parsedLocale = _parseLocaleString[0],\n          parsedNumberingSystem = _parseLocaleString[1],\n          parsedOutputCalendar = _parseLocaleString[2];\n\n      this.locale = parsedLocale;\n      this.numberingSystem = numbering || parsedNumberingSystem || null;\n      this.outputCalendar = outputCalendar || parsedOutputCalendar || null;\n      this.intl = intlConfigString(this.locale, this.numberingSystem, this.outputCalendar);\n      this.weekdaysCache = {\n        format: {},\n        standalone: {}\n      };\n      this.monthsCache = {\n        format: {},\n        standalone: {}\n      };\n      this.meridiemCache = null;\n      this.eraCache = {};\n      this.specifiedLocale = specifiedLocale;\n      this.fastNumbersCached = null;\n    }\n\n    var _proto4 = Locale.prototype;\n\n    _proto4.listingMode = function listingMode(defaultOK) {\n      if (defaultOK === void 0) {\n        defaultOK = true;\n      }\n\n      var intl = hasIntl(),\n          hasFTP = intl && hasFormatToParts(),\n          isActuallyEn = this.isEnglish(),\n          hasNoWeirdness = (this.numberingSystem === null || this.numberingSystem === \"latn\") && (this.outputCalendar === null || this.outputCalendar === \"gregory\");\n\n      if (!hasFTP && !(isActuallyEn && hasNoWeirdness) && !defaultOK) {\n        return \"error\";\n      } else if (!hasFTP || isActuallyEn && hasNoWeirdness) {\n        return \"en\";\n      } else {\n        return \"intl\";\n      }\n    };\n\n    _proto4.clone = function clone(alts) {\n      if (!alts || Object.getOwnPropertyNames(alts).length === 0) {\n        return this;\n      } else {\n        return Locale.create(alts.locale || this.specifiedLocale, alts.numberingSystem || this.numberingSystem, alts.outputCalendar || this.outputCalendar, alts.defaultToEN || false);\n      }\n    };\n\n    _proto4.redefaultToEN = function redefaultToEN(alts) {\n      if (alts === void 0) {\n        alts = {};\n      }\n\n      return this.clone(Object.assign({}, alts, {\n        defaultToEN: true\n      }));\n    };\n\n    _proto4.redefaultToSystem = function redefaultToSystem(alts) {\n      if (alts === void 0) {\n        alts = {};\n      }\n\n      return this.clone(Object.assign({}, alts, {\n        defaultToEN: false\n      }));\n    };\n\n    _proto4.months = function months$1(length, format, defaultOK) {\n      var _this = this;\n\n      if (format === void 0) {\n        format = false;\n      }\n\n      if (defaultOK === void 0) {\n        defaultOK = true;\n      }\n\n      return listStuff(this, length, defaultOK, months, function () {\n        var intl = format ? {\n          month: length,\n          day: \"numeric\"\n        } : {\n          month: length\n        },\n            formatStr = format ? \"format\" : \"standalone\";\n\n        if (!_this.monthsCache[formatStr][length]) {\n          _this.monthsCache[formatStr][length] = mapMonths(function (dt) {\n            return _this.extract(dt, intl, \"month\");\n          });\n        }\n\n        return _this.monthsCache[formatStr][length];\n      });\n    };\n\n    _proto4.weekdays = function weekdays$1(length, format, defaultOK) {\n      var _this2 = this;\n\n      if (format === void 0) {\n        format = false;\n      }\n\n      if (defaultOK === void 0) {\n        defaultOK = true;\n      }\n\n      return listStuff(this, length, defaultOK, weekdays, function () {\n        var intl = format ? {\n          weekday: length,\n          year: \"numeric\",\n          month: \"long\",\n          day: \"numeric\"\n        } : {\n          weekday: length\n        },\n            formatStr = format ? \"format\" : \"standalone\";\n\n        if (!_this2.weekdaysCache[formatStr][length]) {\n          _this2.weekdaysCache[formatStr][length] = mapWeekdays(function (dt) {\n            return _this2.extract(dt, intl, \"weekday\");\n          });\n        }\n\n        return _this2.weekdaysCache[formatStr][length];\n      });\n    };\n\n    _proto4.meridiems = function meridiems$1(defaultOK) {\n      var _this3 = this;\n\n      if (defaultOK === void 0) {\n        defaultOK = true;\n      }\n\n      return listStuff(this, undefined, defaultOK, function () {\n        return meridiems;\n      }, function () {\n        // In theory there could be aribitrary day periods. We're gonna assume there are exactly two\n        // for AM and PM. This is probably wrong, but it's makes parsing way easier.\n        if (!_this3.meridiemCache) {\n          var intl = {\n            hour: \"numeric\",\n            hour12: true\n          };\n          _this3.meridiemCache = [DateTime.utc(2016, 11, 13, 9), DateTime.utc(2016, 11, 13, 19)].map(function (dt) {\n            return _this3.extract(dt, intl, \"dayperiod\");\n          });\n        }\n\n        return _this3.meridiemCache;\n      });\n    };\n\n    _proto4.eras = function eras$1(length, defaultOK) {\n      var _this4 = this;\n\n      if (defaultOK === void 0) {\n        defaultOK = true;\n      }\n\n      return listStuff(this, length, defaultOK, eras, function () {\n        var intl = {\n          era: length\n        }; // This is utter bullshit. Different calendars are going to define eras totally differently. What I need is the minimum set of dates\n        // to definitely enumerate them.\n\n        if (!_this4.eraCache[length]) {\n          _this4.eraCache[length] = [DateTime.utc(-40, 1, 1), DateTime.utc(2017, 1, 1)].map(function (dt) {\n            return _this4.extract(dt, intl, \"era\");\n          });\n        }\n\n        return _this4.eraCache[length];\n      });\n    };\n\n    _proto4.extract = function extract(dt, intlOpts, field) {\n      var df = this.dtFormatter(dt, intlOpts),\n          results = df.formatToParts(),\n          matching = results.find(function (m) {\n        return m.type.toLowerCase() === field;\n      });\n      return matching ? matching.value : null;\n    };\n\n    _proto4.numberFormatter = function numberFormatter(opts) {\n      if (opts === void 0) {\n        opts = {};\n      }\n\n      // this forcesimple option is never used (the only caller short-circuits on it, but it seems safer to leave)\n      // (in contrast, the rest of the condition is used heavily)\n      return new PolyNumberFormatter(this.intl, opts.forceSimple || this.fastNumbers, opts);\n    };\n\n    _proto4.dtFormatter = function dtFormatter(dt, intlOpts) {\n      if (intlOpts === void 0) {\n        intlOpts = {};\n      }\n\n      return new PolyDateFormatter(dt, this.intl, intlOpts);\n    };\n\n    _proto4.relFormatter = function relFormatter(opts) {\n      if (opts === void 0) {\n        opts = {};\n      }\n\n      return new PolyRelFormatter(this.intl, this.isEnglish(), opts);\n    };\n\n    _proto4.isEnglish = function isEnglish() {\n      return this.locale === \"en\" || this.locale.toLowerCase() === \"en-us\" || hasIntl() && new Intl.DateTimeFormat(this.intl).resolvedOptions().locale.startsWith(\"en-us\");\n    };\n\n    _proto4.equals = function equals(other) {\n      return this.locale === other.locale && this.numberingSystem === other.numberingSystem && this.outputCalendar === other.outputCalendar;\n    };\n\n    _createClass(Locale, [{\n      key: \"fastNumbers\",\n      get: function get() {\n        if (this.fastNumbersCached == null) {\n          this.fastNumbersCached = supportsFastNumbers(this);\n        }\n\n        return this.fastNumbersCached;\n      }\n    }]);\n\n    return Locale;\n  }();\n\n  /*\n   * This file handles parsing for well-specified formats. Here's how it works:\n   * Two things go into parsing: a regex to match with and an extractor to take apart the groups in the match.\n   * An extractor is just a function that takes a regex match array and returns a { year: ..., month: ... } object\n   * parse() does the work of executing the regex and applying the extractor. It takes multiple regex/extractor pairs to try in sequence.\n   * Extractors can take a \"cursor\" representing the offset in the match to look at. This makes it easy to combine extractors.\n   * combineExtractors() does the work of combining them, keeping track of the cursor through multiple extractions.\n   * Some extractions are super dumb and simpleParse and fromStrings help DRY them.\n   */\n\n  function combineRegexes() {\n    for (var _len = arguments.length, regexes = new Array(_len), _key = 0; _key < _len; _key++) {\n      regexes[_key] = arguments[_key];\n    }\n\n    var full = regexes.reduce(function (f, r) {\n      return f + r.source;\n    }, \"\");\n    return RegExp(\"^\" + full + \"$\");\n  }\n\n  function combineExtractors() {\n    for (var _len2 = arguments.length, extractors = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      extractors[_key2] = arguments[_key2];\n    }\n\n    return function (m) {\n      return extractors.reduce(function (_ref, ex) {\n        var mergedVals = _ref[0],\n            mergedZone = _ref[1],\n            cursor = _ref[2];\n\n        var _ex = ex(m, cursor),\n            val = _ex[0],\n            zone = _ex[1],\n            next = _ex[2];\n\n        return [Object.assign(mergedVals, val), mergedZone || zone, next];\n      }, [{}, null, 1]).slice(0, 2);\n    };\n  }\n\n  function parse(s) {\n    if (s == null) {\n      return [null, null];\n    }\n\n    for (var _len3 = arguments.length, patterns = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n      patterns[_key3 - 1] = arguments[_key3];\n    }\n\n    for (var _i = 0, _patterns = patterns; _i < _patterns.length; _i++) {\n      var _patterns$_i = _patterns[_i],\n          regex = _patterns$_i[0],\n          extractor = _patterns$_i[1];\n      var m = regex.exec(s);\n\n      if (m) {\n        return extractor(m);\n      }\n    }\n\n    return [null, null];\n  }\n\n  function simpleParse() {\n    for (var _len4 = arguments.length, keys = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n      keys[_key4] = arguments[_key4];\n    }\n\n    return function (match, cursor) {\n      var ret = {};\n      var i;\n\n      for (i = 0; i < keys.length; i++) {\n        ret[keys[i]] = parseInteger(match[cursor + i]);\n      }\n\n      return [ret, null, cursor + i];\n    };\n  } // ISO and SQL parsing\n\n\n  var offsetRegex = /(?:(Z)|([+-]\\d\\d)(?::?(\\d\\d))?)/,\n      isoTimeBaseRegex = /(\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(?:[.,](\\d{1,30}))?)?)?/,\n      isoTimeRegex = RegExp(\"\" + isoTimeBaseRegex.source + offsetRegex.source + \"?\"),\n      isoTimeExtensionRegex = RegExp(\"(?:T\" + isoTimeRegex.source + \")?\"),\n      isoYmdRegex = /([+-]\\d{6}|\\d{4})(?:-?(\\d\\d)(?:-?(\\d\\d))?)?/,\n      isoWeekRegex = /(\\d{4})-?W(\\d\\d)(?:-?(\\d))?/,\n      isoOrdinalRegex = /(\\d{4})-?(\\d{3})/,\n      extractISOWeekData = simpleParse(\"weekYear\", \"weekNumber\", \"weekDay\"),\n      extractISOOrdinalData = simpleParse(\"year\", \"ordinal\"),\n      sqlYmdRegex = /(\\d{4})-(\\d\\d)-(\\d\\d)/,\n      // dumbed-down version of the ISO one\n  sqlTimeRegex = RegExp(isoTimeBaseRegex.source + \" ?(?:\" + offsetRegex.source + \"|(\" + ianaRegex.source + \"))?\"),\n      sqlTimeExtensionRegex = RegExp(\"(?: \" + sqlTimeRegex.source + \")?\");\n\n  function int(match, pos, fallback) {\n    var m = match[pos];\n    return isUndefined(m) ? fallback : parseInteger(m);\n  }\n\n  function extractISOYmd(match, cursor) {\n    var item = {\n      year: int(match, cursor),\n      month: int(match, cursor + 1, 1),\n      day: int(match, cursor + 2, 1)\n    };\n    return [item, null, cursor + 3];\n  }\n\n  function extractISOTime(match, cursor) {\n    var item = {\n      hour: int(match, cursor, 0),\n      minute: int(match, cursor + 1, 0),\n      second: int(match, cursor + 2, 0),\n      millisecond: parseMillis(match[cursor + 3])\n    };\n    return [item, null, cursor + 4];\n  }\n\n  function extractISOOffset(match, cursor) {\n    var local = !match[cursor] && !match[cursor + 1],\n        fullOffset = signedOffset(match[cursor + 1], match[cursor + 2]),\n        zone = local ? null : FixedOffsetZone.instance(fullOffset);\n    return [{}, zone, cursor + 3];\n  }\n\n  function extractIANAZone(match, cursor) {\n    var zone = match[cursor] ? IANAZone.create(match[cursor]) : null;\n    return [{}, zone, cursor + 1];\n  } // ISO duration parsing\n\n\n  var isoDuration = /^-?P(?:(?:(-?\\d{1,9})Y)?(?:(-?\\d{1,9})M)?(?:(-?\\d{1,9})W)?(?:(-?\\d{1,9})D)?(?:T(?:(-?\\d{1,9})H)?(?:(-?\\d{1,9})M)?(?:(-?\\d{1,20})(?:[.,](-?\\d{1,9}))?S)?)?)$/;\n\n  function extractISODuration(match) {\n    var s = match[0],\n        yearStr = match[1],\n        monthStr = match[2],\n        weekStr = match[3],\n        dayStr = match[4],\n        hourStr = match[5],\n        minuteStr = match[6],\n        secondStr = match[7],\n        millisecondsStr = match[8];\n    var hasNegativePrefix = s[0] === \"-\";\n\n    var maybeNegate = function maybeNegate(num) {\n      return num && hasNegativePrefix ? -num : num;\n    };\n\n    return [{\n      years: maybeNegate(parseInteger(yearStr)),\n      months: maybeNegate(parseInteger(monthStr)),\n      weeks: maybeNegate(parseInteger(weekStr)),\n      days: maybeNegate(parseInteger(dayStr)),\n      hours: maybeNegate(parseInteger(hourStr)),\n      minutes: maybeNegate(parseInteger(minuteStr)),\n      seconds: maybeNegate(parseInteger(secondStr)),\n      milliseconds: maybeNegate(parseMillis(millisecondsStr))\n    }];\n  } // These are a little braindead. EDT *should* tell us that we're in, say, America/New_York\n  // and not just that we're in -240 *right now*. But since I don't think these are used that often\n  // I'm just going to ignore that\n\n\n  var obsOffsets = {\n    GMT: 0,\n    EDT: -4 * 60,\n    EST: -5 * 60,\n    CDT: -5 * 60,\n    CST: -6 * 60,\n    MDT: -6 * 60,\n    MST: -7 * 60,\n    PDT: -7 * 60,\n    PST: -8 * 60\n  };\n\n  function fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\n    var result = {\n      year: yearStr.length === 2 ? untruncateYear(parseInteger(yearStr)) : parseInteger(yearStr),\n      month: monthsShort.indexOf(monthStr) + 1,\n      day: parseInteger(dayStr),\n      hour: parseInteger(hourStr),\n      minute: parseInteger(minuteStr)\n    };\n    if (secondStr) result.second = parseInteger(secondStr);\n\n    if (weekdayStr) {\n      result.weekday = weekdayStr.length > 3 ? weekdaysLong.indexOf(weekdayStr) + 1 : weekdaysShort.indexOf(weekdayStr) + 1;\n    }\n\n    return result;\n  } // RFC 2822/5322\n\n\n  var rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\\d\\d)(\\d\\d)))$/;\n\n  function extractRFC2822(match) {\n    var weekdayStr = match[1],\n        dayStr = match[2],\n        monthStr = match[3],\n        yearStr = match[4],\n        hourStr = match[5],\n        minuteStr = match[6],\n        secondStr = match[7],\n        obsOffset = match[8],\n        milOffset = match[9],\n        offHourStr = match[10],\n        offMinuteStr = match[11],\n        result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n    var offset;\n\n    if (obsOffset) {\n      offset = obsOffsets[obsOffset];\n    } else if (milOffset) {\n      offset = 0;\n    } else {\n      offset = signedOffset(offHourStr, offMinuteStr);\n    }\n\n    return [result, new FixedOffsetZone(offset)];\n  }\n\n  function preprocessRFC2822(s) {\n    // Remove comments and folding whitespace and replace multiple-spaces with a single space\n    return s.replace(/\\([^)]*\\)|[\\n\\t]/g, \" \").replace(/(\\s\\s+)/g, \" \").trim();\n  } // http date\n\n\n  var rfc1123 = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\\d\\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\\d{4}) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,\n      rfc850 = /^(Monday|Tuesday|Wedsday|Thursday|Friday|Saturday|Sunday), (\\d\\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,\n      ascii = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \\d|\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) (\\d{4})$/;\n\n  function extractRFC1123Or850(match) {\n    var weekdayStr = match[1],\n        dayStr = match[2],\n        monthStr = match[3],\n        yearStr = match[4],\n        hourStr = match[5],\n        minuteStr = match[6],\n        secondStr = match[7],\n        result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n    return [result, FixedOffsetZone.utcInstance];\n  }\n\n  function extractASCII(match) {\n    var weekdayStr = match[1],\n        monthStr = match[2],\n        dayStr = match[3],\n        hourStr = match[4],\n        minuteStr = match[5],\n        secondStr = match[6],\n        yearStr = match[7],\n        result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n    return [result, FixedOffsetZone.utcInstance];\n  }\n\n  var isoYmdWithTimeExtensionRegex = combineRegexes(isoYmdRegex, isoTimeExtensionRegex);\n  var isoWeekWithTimeExtensionRegex = combineRegexes(isoWeekRegex, isoTimeExtensionRegex);\n  var isoOrdinalWithTimeExtensionRegex = combineRegexes(isoOrdinalRegex, isoTimeExtensionRegex);\n  var isoTimeCombinedRegex = combineRegexes(isoTimeRegex);\n  var extractISOYmdTimeAndOffset = combineExtractors(extractISOYmd, extractISOTime, extractISOOffset);\n  var extractISOWeekTimeAndOffset = combineExtractors(extractISOWeekData, extractISOTime, extractISOOffset);\n  var extractISOOrdinalDataAndTime = combineExtractors(extractISOOrdinalData, extractISOTime);\n  var extractISOTimeAndOffset = combineExtractors(extractISOTime, extractISOOffset);\n  /**\n   * @private\n   */\n\n  function parseISODate(s) {\n    return parse(s, [isoYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset], [isoWeekWithTimeExtensionRegex, extractISOWeekTimeAndOffset], [isoOrdinalWithTimeExtensionRegex, extractISOOrdinalDataAndTime], [isoTimeCombinedRegex, extractISOTimeAndOffset]);\n  }\n  function parseRFC2822Date(s) {\n    return parse(preprocessRFC2822(s), [rfc2822, extractRFC2822]);\n  }\n  function parseHTTPDate(s) {\n    return parse(s, [rfc1123, extractRFC1123Or850], [rfc850, extractRFC1123Or850], [ascii, extractASCII]);\n  }\n  function parseISODuration(s) {\n    return parse(s, [isoDuration, extractISODuration]);\n  }\n  var sqlYmdWithTimeExtensionRegex = combineRegexes(sqlYmdRegex, sqlTimeExtensionRegex);\n  var sqlTimeCombinedRegex = combineRegexes(sqlTimeRegex);\n  var extractISOYmdTimeOffsetAndIANAZone = combineExtractors(extractISOYmd, extractISOTime, extractISOOffset, extractIANAZone);\n  var extractISOTimeOffsetAndIANAZone = combineExtractors(extractISOTime, extractISOOffset, extractIANAZone);\n  function parseSQL(s) {\n    return parse(s, [sqlYmdWithTimeExtensionRegex, extractISOYmdTimeOffsetAndIANAZone], [sqlTimeCombinedRegex, extractISOTimeOffsetAndIANAZone]);\n  }\n\n  var INVALID = \"Invalid Duration\"; // unit conversion constants\n\n  var lowOrderMatrix = {\n    weeks: {\n      days: 7,\n      hours: 7 * 24,\n      minutes: 7 * 24 * 60,\n      seconds: 7 * 24 * 60 * 60,\n      milliseconds: 7 * 24 * 60 * 60 * 1000\n    },\n    days: {\n      hours: 24,\n      minutes: 24 * 60,\n      seconds: 24 * 60 * 60,\n      milliseconds: 24 * 60 * 60 * 1000\n    },\n    hours: {\n      minutes: 60,\n      seconds: 60 * 60,\n      milliseconds: 60 * 60 * 1000\n    },\n    minutes: {\n      seconds: 60,\n      milliseconds: 60 * 1000\n    },\n    seconds: {\n      milliseconds: 1000\n    }\n  },\n      casualMatrix = Object.assign({\n    years: {\n      quarters: 4,\n      months: 12,\n      weeks: 52,\n      days: 365,\n      hours: 365 * 24,\n      minutes: 365 * 24 * 60,\n      seconds: 365 * 24 * 60 * 60,\n      milliseconds: 365 * 24 * 60 * 60 * 1000\n    },\n    quarters: {\n      months: 3,\n      weeks: 13,\n      days: 91,\n      hours: 91 * 24,\n      minutes: 91 * 24 * 60,\n      seconds: 91 * 24 * 60 * 60,\n      milliseconds: 91 * 24 * 60 * 60 * 1000\n    },\n    months: {\n      weeks: 4,\n      days: 30,\n      hours: 30 * 24,\n      minutes: 30 * 24 * 60,\n      seconds: 30 * 24 * 60 * 60,\n      milliseconds: 30 * 24 * 60 * 60 * 1000\n    }\n  }, lowOrderMatrix),\n      daysInYearAccurate = 146097.0 / 400,\n      daysInMonthAccurate = 146097.0 / 4800,\n      accurateMatrix = Object.assign({\n    years: {\n      quarters: 4,\n      months: 12,\n      weeks: daysInYearAccurate / 7,\n      days: daysInYearAccurate,\n      hours: daysInYearAccurate * 24,\n      minutes: daysInYearAccurate * 24 * 60,\n      seconds: daysInYearAccurate * 24 * 60 * 60,\n      milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1000\n    },\n    quarters: {\n      months: 3,\n      weeks: daysInYearAccurate / 28,\n      days: daysInYearAccurate / 4,\n      hours: daysInYearAccurate * 24 / 4,\n      minutes: daysInYearAccurate * 24 * 60 / 4,\n      seconds: daysInYearAccurate * 24 * 60 * 60 / 4,\n      milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1000 / 4\n    },\n    months: {\n      weeks: daysInMonthAccurate / 7,\n      days: daysInMonthAccurate,\n      hours: daysInMonthAccurate * 24,\n      minutes: daysInMonthAccurate * 24 * 60,\n      seconds: daysInMonthAccurate * 24 * 60 * 60,\n      milliseconds: daysInMonthAccurate * 24 * 60 * 60 * 1000\n    }\n  }, lowOrderMatrix); // units ordered by size\n\n  var orderedUnits = [\"years\", \"quarters\", \"months\", \"weeks\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\"];\n  var reverseUnits = orderedUnits.slice(0).reverse(); // clone really means \"create another instance just like this one, but with these changes\"\n\n  function clone(dur, alts, clear) {\n    if (clear === void 0) {\n      clear = false;\n    }\n\n    // deep merge for vals\n    var conf = {\n      values: clear ? alts.values : Object.assign({}, dur.values, alts.values || {}),\n      loc: dur.loc.clone(alts.loc),\n      conversionAccuracy: alts.conversionAccuracy || dur.conversionAccuracy\n    };\n    return new Duration(conf);\n  }\n\n  function antiTrunc(n) {\n    return n < 0 ? Math.floor(n) : Math.ceil(n);\n  } // NB: mutates parameters\n\n\n  function convert(matrix, fromMap, fromUnit, toMap, toUnit) {\n    var conv = matrix[toUnit][fromUnit],\n        raw = fromMap[fromUnit] / conv,\n        sameSign = Math.sign(raw) === Math.sign(toMap[toUnit]),\n        // ok, so this is wild, but see the matrix in the tests\n    added = !sameSign && toMap[toUnit] !== 0 && Math.abs(raw) <= 1 ? antiTrunc(raw) : Math.trunc(raw);\n    toMap[toUnit] += added;\n    fromMap[fromUnit] -= added * conv;\n  } // NB: mutates parameters\n\n\n  function normalizeValues(matrix, vals) {\n    reverseUnits.reduce(function (previous, current) {\n      if (!isUndefined(vals[current])) {\n        if (previous) {\n          convert(matrix, vals, previous, vals, current);\n        }\n\n        return current;\n      } else {\n        return previous;\n      }\n    }, null);\n  }\n  /**\n   * A Duration object represents a period of time, like \"2 months\" or \"1 day, 1 hour\". Conceptually, it's just a map of units to their quantities, accompanied by some additional configuration and methods for creating, parsing, interrogating, transforming, and formatting them. They can be used on their own or in conjunction with other Luxon types; for example, you can use {@link DateTime.plus} to add a Duration object to a DateTime, producing another DateTime.\n   *\n   * Here is a brief overview of commonly used methods and getters in Duration:\n   *\n   * * **Creation** To create a Duration, use {@link Duration.fromMillis}, {@link Duration.fromObject}, or {@link Duration.fromISO}.\n   * * **Unit values** See the {@link Duration.years}, {@link Duration.months}, {@link Duration.weeks}, {@link Duration.days}, {@link Duration.hours}, {@link Duration.minutes}, {@link Duration.seconds}, {@link Duration.milliseconds} accessors.\n   * * **Configuration** See  {@link Duration.locale} and {@link Duration.numberingSystem} accessors.\n   * * **Transformation** To create new Durations out of old ones use {@link Duration.plus}, {@link Duration.minus}, {@link Duration.normalize}, {@link Duration.set}, {@link Duration.reconfigure}, {@link Duration.shiftTo}, and {@link Duration.negate}.\n   * * **Output** To convert the Duration into other representations, see {@link Duration.as}, {@link Duration.toISO}, {@link Duration.toFormat}, and {@link Duration.toJSON}\n   *\n   * There's are more methods documented below. In addition, for more information on subtler topics like internationalization and validity, see the external documentation.\n   */\n\n\n  var Duration = /*#__PURE__*/function () {\n    /**\n     * @private\n     */\n    function Duration(config) {\n      var accurate = config.conversionAccuracy === \"longterm\" || false;\n      /**\n       * @access private\n       */\n\n      this.values = config.values;\n      /**\n       * @access private\n       */\n\n      this.loc = config.loc || Locale.create();\n      /**\n       * @access private\n       */\n\n      this.conversionAccuracy = accurate ? \"longterm\" : \"casual\";\n      /**\n       * @access private\n       */\n\n      this.invalid = config.invalid || null;\n      /**\n       * @access private\n       */\n\n      this.matrix = accurate ? accurateMatrix : casualMatrix;\n      /**\n       * @access private\n       */\n\n      this.isLuxonDuration = true;\n    }\n    /**\n     * Create Duration from a number of milliseconds.\n     * @param {number} count of milliseconds\n     * @param {Object} opts - options for parsing\n     * @param {string} [opts.locale='en-US'] - the locale to use\n     * @param {string} opts.numberingSystem - the numbering system to use\n     * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n     * @return {Duration}\n     */\n\n\n    Duration.fromMillis = function fromMillis(count, opts) {\n      return Duration.fromObject(Object.assign({\n        milliseconds: count\n      }, opts));\n    }\n    /**\n     * Create a Duration from a Javascript object with keys like 'years' and 'hours.\n     * If this object is empty then a zero milliseconds duration is returned.\n     * @param {Object} obj - the object to create the DateTime from\n     * @param {number} obj.years\n     * @param {number} obj.quarters\n     * @param {number} obj.months\n     * @param {number} obj.weeks\n     * @param {number} obj.days\n     * @param {number} obj.hours\n     * @param {number} obj.minutes\n     * @param {number} obj.seconds\n     * @param {number} obj.milliseconds\n     * @param {string} [obj.locale='en-US'] - the locale to use\n     * @param {string} obj.numberingSystem - the numbering system to use\n     * @param {string} [obj.conversionAccuracy='casual'] - the conversion system to use\n     * @return {Duration}\n     */\n    ;\n\n    Duration.fromObject = function fromObject(obj) {\n      if (obj == null || typeof obj !== \"object\") {\n        throw new InvalidArgumentError(\"Duration.fromObject: argument expected to be an object, got \" + (obj === null ? \"null\" : typeof obj));\n      }\n\n      return new Duration({\n        values: normalizeObject(obj, Duration.normalizeUnit, [\"locale\", \"numberingSystem\", \"conversionAccuracy\", \"zone\" // a bit of debt; it's super inconvenient internally not to be able to blindly pass this\n        ]),\n        loc: Locale.fromObject(obj),\n        conversionAccuracy: obj.conversionAccuracy\n      });\n    }\n    /**\n     * Create a Duration from an ISO 8601 duration string.\n     * @param {string} text - text to parse\n     * @param {Object} opts - options for parsing\n     * @param {string} [opts.locale='en-US'] - the locale to use\n     * @param {string} opts.numberingSystem - the numbering system to use\n     * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n     * @see https://en.wikipedia.org/wiki/ISO_8601#Durations\n     * @example Duration.fromISO('P3Y6M1W4DT12H30M5S').toObject() //=> { years: 3, months: 6, weeks: 1, days: 4, hours: 12, minutes: 30, seconds: 5 }\n     * @example Duration.fromISO('PT23H').toObject() //=> { hours: 23 }\n     * @example Duration.fromISO('P5Y3M').toObject() //=> { years: 5, months: 3 }\n     * @return {Duration}\n     */\n    ;\n\n    Duration.fromISO = function fromISO(text, opts) {\n      var _parseISODuration = parseISODuration(text),\n          parsed = _parseISODuration[0];\n\n      if (parsed) {\n        var obj = Object.assign(parsed, opts);\n        return Duration.fromObject(obj);\n      } else {\n        return Duration.invalid(\"unparsable\", \"the input \\\"\" + text + \"\\\" can't be parsed as ISO 8601\");\n      }\n    }\n    /**\n     * Create an invalid Duration.\n     * @param {string} reason - simple string of why this datetime is invalid. Should not contain parameters or anything else data-dependent\n     * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n     * @return {Duration}\n     */\n    ;\n\n    Duration.invalid = function invalid(reason, explanation) {\n      if (explanation === void 0) {\n        explanation = null;\n      }\n\n      if (!reason) {\n        throw new InvalidArgumentError(\"need to specify a reason the Duration is invalid\");\n      }\n\n      var invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n      if (Settings.throwOnInvalid) {\n        throw new InvalidDurationError(invalid);\n      } else {\n        return new Duration({\n          invalid: invalid\n        });\n      }\n    }\n    /**\n     * @private\n     */\n    ;\n\n    Duration.normalizeUnit = function normalizeUnit(unit) {\n      var normalized = {\n        year: \"years\",\n        years: \"years\",\n        quarter: \"quarters\",\n        quarters: \"quarters\",\n        month: \"months\",\n        months: \"months\",\n        week: \"weeks\",\n        weeks: \"weeks\",\n        day: \"days\",\n        days: \"days\",\n        hour: \"hours\",\n        hours: \"hours\",\n        minute: \"minutes\",\n        minutes: \"minutes\",\n        second: \"seconds\",\n        seconds: \"seconds\",\n        millisecond: \"milliseconds\",\n        milliseconds: \"milliseconds\"\n      }[unit ? unit.toLowerCase() : unit];\n      if (!normalized) throw new InvalidUnitError(unit);\n      return normalized;\n    }\n    /**\n     * Check if an object is a Duration. Works across context boundaries\n     * @param {object} o\n     * @return {boolean}\n     */\n    ;\n\n    Duration.isDuration = function isDuration(o) {\n      return o && o.isLuxonDuration || false;\n    }\n    /**\n     * Get  the locale of a Duration, such 'en-GB'\n     * @type {string}\n     */\n    ;\n\n    var _proto = Duration.prototype;\n\n    /**\n     * Returns a string representation of this Duration formatted according to the specified format string. You may use these tokens:\n     * * `S` for milliseconds\n     * * `s` for seconds\n     * * `m` for minutes\n     * * `h` for hours\n     * * `d` for days\n     * * `M` for months\n     * * `y` for years\n     * Notes:\n     * * Add padding by repeating the token, e.g. \"yy\" pads the years to two digits, \"hhhh\" pads the hours out to four digits\n     * * The duration will be converted to the set of units in the format string using {@link Duration.shiftTo} and the Durations's conversion accuracy setting.\n     * @param {string} fmt - the format string\n     * @param {Object} opts - options\n     * @param {boolean} [opts.floor=true] - floor numerical values\n     * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"y d s\") //=> \"1 6 2\"\n     * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"yy dd sss\") //=> \"01 06 002\"\n     * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"M S\") //=> \"12 518402000\"\n     * @return {string}\n     */\n    _proto.toFormat = function toFormat(fmt, opts) {\n      if (opts === void 0) {\n        opts = {};\n      }\n\n      // reverse-compat since 1.2; we always round down now, never up, and we do it by default\n      var fmtOpts = Object.assign({}, opts, {\n        floor: opts.round !== false && opts.floor !== false\n      });\n      return this.isValid ? Formatter.create(this.loc, fmtOpts).formatDurationFromString(this, fmt) : INVALID;\n    }\n    /**\n     * Returns a Javascript object with this Duration's values.\n     * @param opts - options for generating the object\n     * @param {boolean} [opts.includeConfig=false] - include configuration attributes in the output\n     * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toObject() //=> { years: 1, days: 6, seconds: 2 }\n     * @return {Object}\n     */\n    ;\n\n    _proto.toObject = function toObject(opts) {\n      if (opts === void 0) {\n        opts = {};\n      }\n\n      if (!this.isValid) return {};\n      var base = Object.assign({}, this.values);\n\n      if (opts.includeConfig) {\n        base.conversionAccuracy = this.conversionAccuracy;\n        base.numberingSystem = this.loc.numberingSystem;\n        base.locale = this.loc.locale;\n      }\n\n      return base;\n    }\n    /**\n     * Returns an ISO 8601-compliant string representation of this Duration.\n     * @see https://en.wikipedia.org/wiki/ISO_8601#Durations\n     * @example Duration.fromObject({ years: 3, seconds: 45 }).toISO() //=> 'P3YT45S'\n     * @example Duration.fromObject({ months: 4, seconds: 45 }).toISO() //=> 'P4MT45S'\n     * @example Duration.fromObject({ months: 5 }).toISO() //=> 'P5M'\n     * @example Duration.fromObject({ minutes: 5 }).toISO() //=> 'PT5M'\n     * @example Duration.fromObject({ milliseconds: 6 }).toISO() //=> 'PT0.006S'\n     * @return {string}\n     */\n    ;\n\n    _proto.toISO = function toISO() {\n      // we could use the formatter, but this is an easier way to get the minimum string\n      if (!this.isValid) return null;\n      var s = \"P\";\n      if (this.years !== 0) s += this.years + \"Y\";\n      if (this.months !== 0 || this.quarters !== 0) s += this.months + this.quarters * 3 + \"M\";\n      if (this.weeks !== 0) s += this.weeks + \"W\";\n      if (this.days !== 0) s += this.days + \"D\";\n      if (this.hours !== 0 || this.minutes !== 0 || this.seconds !== 0 || this.milliseconds !== 0) s += \"T\";\n      if (this.hours !== 0) s += this.hours + \"H\";\n      if (this.minutes !== 0) s += this.minutes + \"M\";\n      if (this.seconds !== 0 || this.milliseconds !== 0) // this will handle \"floating point madness\" by removing extra decimal places\n        // https://stackoverflow.com/questions/588004/is-floating-point-math-broken\n        s += roundTo(this.seconds + this.milliseconds / 1000, 3) + \"S\";\n      if (s === \"P\") s += \"T0S\";\n      return s;\n    }\n    /**\n     * Returns an ISO 8601 representation of this Duration appropriate for use in JSON.\n     * @return {string}\n     */\n    ;\n\n    _proto.toJSON = function toJSON() {\n      return this.toISO();\n    }\n    /**\n     * Returns an ISO 8601 representation of this Duration appropriate for use in debugging.\n     * @return {string}\n     */\n    ;\n\n    _proto.toString = function toString() {\n      return this.toISO();\n    }\n    /**\n     * Returns an milliseconds value of this Duration.\n     * @return {number}\n     */\n    ;\n\n    _proto.valueOf = function valueOf() {\n      return this.as(\"milliseconds\");\n    }\n    /**\n     * Make this Duration longer by the specified amount. Return a newly-constructed Duration.\n     * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n     * @return {Duration}\n     */\n    ;\n\n    _proto.plus = function plus(duration) {\n      if (!this.isValid) return this;\n      var dur = friendlyDuration(duration),\n          result = {};\n\n      for (var _iterator = _createForOfIteratorHelperLoose(orderedUnits), _step; !(_step = _iterator()).done;) {\n        var k = _step.value;\n\n        if (hasOwnProperty(dur.values, k) || hasOwnProperty(this.values, k)) {\n          result[k] = dur.get(k) + this.get(k);\n        }\n      }\n\n      return clone(this, {\n        values: result\n      }, true);\n    }\n    /**\n     * Make this Duration shorter by the specified amount. Return a newly-constructed Duration.\n     * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n     * @return {Duration}\n     */\n    ;\n\n    _proto.minus = function minus(duration) {\n      if (!this.isValid) return this;\n      var dur = friendlyDuration(duration);\n      return this.plus(dur.negate());\n    }\n    /**\n     * Scale this Duration by the specified amount. Return a newly-constructed Duration.\n     * @param {function} fn - The function to apply to each unit. Arity is 1 or 2: the value of the unit and, optionally, the unit name. Must return a number.\n     * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnit(x => x * 2) //=> { hours: 2, minutes: 60 }\n     * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnit((x, u) => u === \"hour\" ? x * 2 : x) //=> { hours: 2, minutes: 30 }\n     * @return {Duration}\n     */\n    ;\n\n    _proto.mapUnits = function mapUnits(fn) {\n      if (!this.isValid) return this;\n      var result = {};\n\n      for (var _i = 0, _Object$keys = Object.keys(this.values); _i < _Object$keys.length; _i++) {\n        var k = _Object$keys[_i];\n        result[k] = asNumber(fn(this.values[k], k));\n      }\n\n      return clone(this, {\n        values: result\n      }, true);\n    }\n    /**\n     * Get the value of unit.\n     * @param {string} unit - a unit such as 'minute' or 'day'\n     * @example Duration.fromObject({years: 2, days: 3}).years //=> 2\n     * @example Duration.fromObject({years: 2, days: 3}).months //=> 0\n     * @example Duration.fromObject({years: 2, days: 3}).days //=> 3\n     * @return {number}\n     */\n    ;\n\n    _proto.get = function get(unit) {\n      return this[Duration.normalizeUnit(unit)];\n    }\n    /**\n     * \"Set\" the values of specified units. Return a newly-constructed Duration.\n     * @param {Object} values - a mapping of units to numbers\n     * @example dur.set({ years: 2017 })\n     * @example dur.set({ hours: 8, minutes: 30 })\n     * @return {Duration}\n     */\n    ;\n\n    _proto.set = function set(values) {\n      if (!this.isValid) return this;\n      var mixed = Object.assign(this.values, normalizeObject(values, Duration.normalizeUnit, []));\n      return clone(this, {\n        values: mixed\n      });\n    }\n    /**\n     * \"Set\" the locale and/or numberingSystem.  Returns a newly-constructed Duration.\n     * @example dur.reconfigure({ locale: 'en-GB' })\n     * @return {Duration}\n     */\n    ;\n\n    _proto.reconfigure = function reconfigure(_temp) {\n      var _ref = _temp === void 0 ? {} : _temp,\n          locale = _ref.locale,\n          numberingSystem = _ref.numberingSystem,\n          conversionAccuracy = _ref.conversionAccuracy;\n\n      var loc = this.loc.clone({\n        locale: locale,\n        numberingSystem: numberingSystem\n      }),\n          opts = {\n        loc: loc\n      };\n\n      if (conversionAccuracy) {\n        opts.conversionAccuracy = conversionAccuracy;\n      }\n\n      return clone(this, opts);\n    }\n    /**\n     * Return the length of the duration in the specified unit.\n     * @param {string} unit - a unit such as 'minutes' or 'days'\n     * @example Duration.fromObject({years: 1}).as('days') //=> 365\n     * @example Duration.fromObject({years: 1}).as('months') //=> 12\n     * @example Duration.fromObject({hours: 60}).as('days') //=> 2.5\n     * @return {number}\n     */\n    ;\n\n    _proto.as = function as(unit) {\n      return this.isValid ? this.shiftTo(unit).get(unit) : NaN;\n    }\n    /**\n     * Reduce this Duration to its canonical representation in its current units.\n     * @example Duration.fromObject({ years: 2, days: 5000 }).normalize().toObject() //=> { years: 15, days: 255 }\n     * @example Duration.fromObject({ hours: 12, minutes: -45 }).normalize().toObject() //=> { hours: 11, minutes: 15 }\n     * @return {Duration}\n     */\n    ;\n\n    _proto.normalize = function normalize() {\n      if (!this.isValid) return this;\n      var vals = this.toObject();\n      normalizeValues(this.matrix, vals);\n      return clone(this, {\n        values: vals\n      }, true);\n    }\n    /**\n     * Convert this Duration into its representation in a different set of units.\n     * @example Duration.fromObject({ hours: 1, seconds: 30 }).shiftTo('minutes', 'milliseconds').toObject() //=> { minutes: 60, milliseconds: 30000 }\n     * @return {Duration}\n     */\n    ;\n\n    _proto.shiftTo = function shiftTo() {\n      for (var _len = arguments.length, units = new Array(_len), _key = 0; _key < _len; _key++) {\n        units[_key] = arguments[_key];\n      }\n\n      if (!this.isValid) return this;\n\n      if (units.length === 0) {\n        return this;\n      }\n\n      units = units.map(function (u) {\n        return Duration.normalizeUnit(u);\n      });\n      var built = {},\n          accumulated = {},\n          vals = this.toObject();\n      var lastUnit;\n\n      for (var _iterator2 = _createForOfIteratorHelperLoose(orderedUnits), _step2; !(_step2 = _iterator2()).done;) {\n        var k = _step2.value;\n\n        if (units.indexOf(k) >= 0) {\n          lastUnit = k;\n          var own = 0; // anything we haven't boiled down yet should get boiled to this unit\n\n          for (var ak in accumulated) {\n            own += this.matrix[ak][k] * accumulated[ak];\n            accumulated[ak] = 0;\n          } // plus anything that's already in this unit\n\n\n          if (isNumber(vals[k])) {\n            own += vals[k];\n          }\n\n          var i = Math.trunc(own);\n          built[k] = i;\n          accumulated[k] = own - i; // we'd like to absorb these fractions in another unit\n          // plus anything further down the chain that should be rolled up in to this\n\n          for (var down in vals) {\n            if (orderedUnits.indexOf(down) > orderedUnits.indexOf(k)) {\n              convert(this.matrix, vals, down, built, k);\n            }\n          } // otherwise, keep it in the wings to boil it later\n\n        } else if (isNumber(vals[k])) {\n          accumulated[k] = vals[k];\n        }\n      } // anything leftover becomes the decimal for the last unit\n      // lastUnit must be defined since units is not empty\n\n\n      for (var key in accumulated) {\n        if (accumulated[key] !== 0) {\n          built[lastUnit] += key === lastUnit ? accumulated[key] : accumulated[key] / this.matrix[lastUnit][key];\n        }\n      }\n\n      return clone(this, {\n        values: built\n      }, true).normalize();\n    }\n    /**\n     * Return the negative of this Duration.\n     * @example Duration.fromObject({ hours: 1, seconds: 30 }).negate().toObject() //=> { hours: -1, seconds: -30 }\n     * @return {Duration}\n     */\n    ;\n\n    _proto.negate = function negate() {\n      if (!this.isValid) return this;\n      var negated = {};\n\n      for (var _i2 = 0, _Object$keys2 = Object.keys(this.values); _i2 < _Object$keys2.length; _i2++) {\n        var k = _Object$keys2[_i2];\n        negated[k] = -this.values[k];\n      }\n\n      return clone(this, {\n        values: negated\n      }, true);\n    }\n    /**\n     * Get the years.\n     * @type {number}\n     */\n    ;\n\n    /**\n     * Equality check\n     * Two Durations are equal iff they have the same units and the same values for each unit.\n     * @param {Duration} other\n     * @return {boolean}\n     */\n    _proto.equals = function equals(other) {\n      if (!this.isValid || !other.isValid) {\n        return false;\n      }\n\n      if (!this.loc.equals(other.loc)) {\n        return false;\n      }\n\n      for (var _iterator3 = _createForOfIteratorHelperLoose(orderedUnits), _step3; !(_step3 = _iterator3()).done;) {\n        var u = _step3.value;\n\n        if (this.values[u] !== other.values[u]) {\n          return false;\n        }\n      }\n\n      return true;\n    };\n\n    _createClass(Duration, [{\n      key: \"locale\",\n      get: function get() {\n        return this.isValid ? this.loc.locale : null;\n      }\n      /**\n       * Get the numbering system of a Duration, such 'beng'. The numbering system is used when formatting the Duration\n       *\n       * @type {string}\n       */\n\n    }, {\n      key: \"numberingSystem\",\n      get: function get() {\n        return this.isValid ? this.loc.numberingSystem : null;\n      }\n    }, {\n      key: \"years\",\n      get: function get() {\n        return this.isValid ? this.values.years || 0 : NaN;\n      }\n      /**\n       * Get the quarters.\n       * @type {number}\n       */\n\n    }, {\n      key: \"quarters\",\n      get: function get() {\n        return this.isValid ? this.values.quarters || 0 : NaN;\n      }\n      /**\n       * Get the months.\n       * @type {number}\n       */\n\n    }, {\n      key: \"months\",\n      get: function get() {\n        return this.isValid ? this.values.months || 0 : NaN;\n      }\n      /**\n       * Get the weeks\n       * @type {number}\n       */\n\n    }, {\n      key: \"weeks\",\n      get: function get() {\n        return this.isValid ? this.values.weeks || 0 : NaN;\n      }\n      /**\n       * Get the days.\n       * @type {number}\n       */\n\n    }, {\n      key: \"days\",\n      get: function get() {\n        return this.isValid ? this.values.days || 0 : NaN;\n      }\n      /**\n       * Get the hours.\n       * @type {number}\n       */\n\n    }, {\n      key: \"hours\",\n      get: function get() {\n        return this.isValid ? this.values.hours || 0 : NaN;\n      }\n      /**\n       * Get the minutes.\n       * @type {number}\n       */\n\n    }, {\n      key: \"minutes\",\n      get: function get() {\n        return this.isValid ? this.values.minutes || 0 : NaN;\n      }\n      /**\n       * Get the seconds.\n       * @return {number}\n       */\n\n    }, {\n      key: \"seconds\",\n      get: function get() {\n        return this.isValid ? this.values.seconds || 0 : NaN;\n      }\n      /**\n       * Get the milliseconds.\n       * @return {number}\n       */\n\n    }, {\n      key: \"milliseconds\",\n      get: function get() {\n        return this.isValid ? this.values.milliseconds || 0 : NaN;\n      }\n      /**\n       * Returns whether the Duration is invalid. Invalid durations are returned by diff operations\n       * on invalid DateTimes or Intervals.\n       * @return {boolean}\n       */\n\n    }, {\n      key: \"isValid\",\n      get: function get() {\n        return this.invalid === null;\n      }\n      /**\n       * Returns an error code if this Duration became invalid, or null if the Duration is valid\n       * @return {string}\n       */\n\n    }, {\n      key: \"invalidReason\",\n      get: function get() {\n        return this.invalid ? this.invalid.reason : null;\n      }\n      /**\n       * Returns an explanation of why this Duration became invalid, or null if the Duration is valid\n       * @type {string}\n       */\n\n    }, {\n      key: \"invalidExplanation\",\n      get: function get() {\n        return this.invalid ? this.invalid.explanation : null;\n      }\n    }]);\n\n    return Duration;\n  }();\n  function friendlyDuration(durationish) {\n    if (isNumber(durationish)) {\n      return Duration.fromMillis(durationish);\n    } else if (Duration.isDuration(durationish)) {\n      return durationish;\n    } else if (typeof durationish === \"object\") {\n      return Duration.fromObject(durationish);\n    } else {\n      throw new InvalidArgumentError(\"Unknown duration argument \" + durationish + \" of type \" + typeof durationish);\n    }\n  }\n\n  var INVALID$1 = \"Invalid Interval\"; // checks if the start is equal to or before the end\n\n  function validateStartEnd(start, end) {\n    if (!start || !start.isValid) {\n      return Interval.invalid(\"missing or invalid start\");\n    } else if (!end || !end.isValid) {\n      return Interval.invalid(\"missing or invalid end\");\n    } else if (end < start) {\n      return Interval.invalid(\"end before start\", \"The end of an interval must be after its start, but you had start=\" + start.toISO() + \" and end=\" + end.toISO());\n    } else {\n      return null;\n    }\n  }\n  /**\n   * An Interval object represents a half-open interval of time, where each endpoint is a {@link DateTime}. Conceptually, it's a container for those two endpoints, accompanied by methods for creating, parsing, interrogating, comparing, transforming, and formatting them.\n   *\n   * Here is a brief overview of the most commonly used methods and getters in Interval:\n   *\n   * * **Creation** To create an Interval, use {@link fromDateTimes}, {@link after}, {@link before}, or {@link fromISO}.\n   * * **Accessors** Use {@link start} and {@link end} to get the start and end.\n   * * **Interrogation** To analyze the Interval, use {@link count}, {@link length}, {@link hasSame}, {@link contains}, {@link isAfter}, or {@link isBefore}.\n   * * **Transformation** To create other Intervals out of this one, use {@link set}, {@link splitAt}, {@link splitBy}, {@link divideEqually}, {@link merge}, {@link xor}, {@link union}, {@link intersection}, or {@link difference}.\n   * * **Comparison** To compare this Interval to another one, use {@link equals}, {@link overlaps}, {@link abutsStart}, {@link abutsEnd}, {@link engulfs}.\n   * * **Output** To convert the Interval into other representations, see {@link toString}, {@link toISO}, {@link toISODate}, {@link toISOTime}, {@link toFormat}, and {@link toDuration}.\n   */\n\n\n  var Interval = /*#__PURE__*/function () {\n    /**\n     * @private\n     */\n    function Interval(config) {\n      /**\n       * @access private\n       */\n      this.s = config.start;\n      /**\n       * @access private\n       */\n\n      this.e = config.end;\n      /**\n       * @access private\n       */\n\n      this.invalid = config.invalid || null;\n      /**\n       * @access private\n       */\n\n      this.isLuxonInterval = true;\n    }\n    /**\n     * Create an invalid Interval.\n     * @param {string} reason - simple string of why this Interval is invalid. Should not contain parameters or anything else data-dependent\n     * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n     * @return {Interval}\n     */\n\n\n    Interval.invalid = function invalid(reason, explanation) {\n      if (explanation === void 0) {\n        explanation = null;\n      }\n\n      if (!reason) {\n        throw new InvalidArgumentError(\"need to specify a reason the Interval is invalid\");\n      }\n\n      var invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n      if (Settings.throwOnInvalid) {\n        throw new InvalidIntervalError(invalid);\n      } else {\n        return new Interval({\n          invalid: invalid\n        });\n      }\n    }\n    /**\n     * Create an Interval from a start DateTime and an end DateTime. Inclusive of the start but not the end.\n     * @param {DateTime|Date|Object} start\n     * @param {DateTime|Date|Object} end\n     * @return {Interval}\n     */\n    ;\n\n    Interval.fromDateTimes = function fromDateTimes(start, end) {\n      var builtStart = friendlyDateTime(start),\n          builtEnd = friendlyDateTime(end);\n      var validateError = validateStartEnd(builtStart, builtEnd);\n\n      if (validateError == null) {\n        return new Interval({\n          start: builtStart,\n          end: builtEnd\n        });\n      } else {\n        return validateError;\n      }\n    }\n    /**\n     * Create an Interval from a start DateTime and a Duration to extend to.\n     * @param {DateTime|Date|Object} start\n     * @param {Duration|Object|number} duration - the length of the Interval.\n     * @return {Interval}\n     */\n    ;\n\n    Interval.after = function after(start, duration) {\n      var dur = friendlyDuration(duration),\n          dt = friendlyDateTime(start);\n      return Interval.fromDateTimes(dt, dt.plus(dur));\n    }\n    /**\n     * Create an Interval from an end DateTime and a Duration to extend backwards to.\n     * @param {DateTime|Date|Object} end\n     * @param {Duration|Object|number} duration - the length of the Interval.\n     * @return {Interval}\n     */\n    ;\n\n    Interval.before = function before(end, duration) {\n      var dur = friendlyDuration(duration),\n          dt = friendlyDateTime(end);\n      return Interval.fromDateTimes(dt.minus(dur), dt);\n    }\n    /**\n     * Create an Interval from an ISO 8601 string.\n     * Accepts `<start>/<end>`, `<start>/<duration>`, and `<duration>/<end>` formats.\n     * @param {string} text - the ISO string to parse\n     * @param {Object} [opts] - options to pass {@link DateTime.fromISO} and optionally {@link Duration.fromISO}\n     * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n     * @return {Interval}\n     */\n    ;\n\n    Interval.fromISO = function fromISO(text, opts) {\n      var _split = (text || \"\").split(\"/\", 2),\n          s = _split[0],\n          e = _split[1];\n\n      if (s && e) {\n        var start, startIsValid;\n\n        try {\n          start = DateTime.fromISO(s, opts);\n          startIsValid = start.isValid;\n        } catch (e) {\n          startIsValid = false;\n        }\n\n        var end, endIsValid;\n\n        try {\n          end = DateTime.fromISO(e, opts);\n          endIsValid = end.isValid;\n        } catch (e) {\n          endIsValid = false;\n        }\n\n        if (startIsValid && endIsValid) {\n          return Interval.fromDateTimes(start, end);\n        }\n\n        if (startIsValid) {\n          var dur = Duration.fromISO(e, opts);\n\n          if (dur.isValid) {\n            return Interval.after(start, dur);\n          }\n        } else if (endIsValid) {\n          var _dur = Duration.fromISO(s, opts);\n\n          if (_dur.isValid) {\n            return Interval.before(end, _dur);\n          }\n        }\n      }\n\n      return Interval.invalid(\"unparsable\", \"the input \\\"\" + text + \"\\\" can't be parsed as ISO 8601\");\n    }\n    /**\n     * Check if an object is an Interval. Works across context boundaries\n     * @param {object} o\n     * @return {boolean}\n     */\n    ;\n\n    Interval.isInterval = function isInterval(o) {\n      return o && o.isLuxonInterval || false;\n    }\n    /**\n     * Returns the start of the Interval\n     * @type {DateTime}\n     */\n    ;\n\n    var _proto = Interval.prototype;\n\n    /**\n     * Returns the length of the Interval in the specified unit.\n     * @param {string} unit - the unit (such as 'hours' or 'days') to return the length in.\n     * @return {number}\n     */\n    _proto.length = function length(unit) {\n      if (unit === void 0) {\n        unit = \"milliseconds\";\n      }\n\n      return this.isValid ? this.toDuration.apply(this, [unit]).get(unit) : NaN;\n    }\n    /**\n     * Returns the count of minutes, hours, days, months, or years included in the Interval, even in part.\n     * Unlike {@link length} this counts sections of the calendar, not periods of time, e.g. specifying 'day'\n     * asks 'what dates are included in this interval?', not 'how many days long is this interval?'\n     * @param {string} [unit='milliseconds'] - the unit of time to count.\n     * @return {number}\n     */\n    ;\n\n    _proto.count = function count(unit) {\n      if (unit === void 0) {\n        unit = \"milliseconds\";\n      }\n\n      if (!this.isValid) return NaN;\n      var start = this.start.startOf(unit),\n          end = this.end.startOf(unit);\n      return Math.floor(end.diff(start, unit).get(unit)) + 1;\n    }\n    /**\n     * Returns whether this Interval's start and end are both in the same unit of time\n     * @param {string} unit - the unit of time to check sameness on\n     * @return {boolean}\n     */\n    ;\n\n    _proto.hasSame = function hasSame(unit) {\n      return this.isValid ? this.isEmpty() || this.e.minus(1).hasSame(this.s, unit) : false;\n    }\n    /**\n     * Return whether this Interval has the same start and end DateTimes.\n     * @return {boolean}\n     */\n    ;\n\n    _proto.isEmpty = function isEmpty() {\n      return this.s.valueOf() === this.e.valueOf();\n    }\n    /**\n     * Return whether this Interval's start is after the specified DateTime.\n     * @param {DateTime} dateTime\n     * @return {boolean}\n     */\n    ;\n\n    _proto.isAfter = function isAfter(dateTime) {\n      if (!this.isValid) return false;\n      return this.s > dateTime;\n    }\n    /**\n     * Return whether this Interval's end is before the specified DateTime.\n     * @param {DateTime} dateTime\n     * @return {boolean}\n     */\n    ;\n\n    _proto.isBefore = function isBefore(dateTime) {\n      if (!this.isValid) return false;\n      return this.e <= dateTime;\n    }\n    /**\n     * Return whether this Interval contains the specified DateTime.\n     * @param {DateTime} dateTime\n     * @return {boolean}\n     */\n    ;\n\n    _proto.contains = function contains(dateTime) {\n      if (!this.isValid) return false;\n      return this.s <= dateTime && this.e > dateTime;\n    }\n    /**\n     * \"Sets\" the start and/or end dates. Returns a newly-constructed Interval.\n     * @param {Object} values - the values to set\n     * @param {DateTime} values.start - the starting DateTime\n     * @param {DateTime} values.end - the ending DateTime\n     * @return {Interval}\n     */\n    ;\n\n    _proto.set = function set(_temp) {\n      var _ref = _temp === void 0 ? {} : _temp,\n          start = _ref.start,\n          end = _ref.end;\n\n      if (!this.isValid) return this;\n      return Interval.fromDateTimes(start || this.s, end || this.e);\n    }\n    /**\n     * Split this Interval at each of the specified DateTimes\n     * @param {...[DateTime]} dateTimes - the unit of time to count.\n     * @return {[Interval]}\n     */\n    ;\n\n    _proto.splitAt = function splitAt() {\n      var _this = this;\n\n      if (!this.isValid) return [];\n\n      for (var _len = arguments.length, dateTimes = new Array(_len), _key = 0; _key < _len; _key++) {\n        dateTimes[_key] = arguments[_key];\n      }\n\n      var sorted = dateTimes.map(friendlyDateTime).filter(function (d) {\n        return _this.contains(d);\n      }).sort(),\n          results = [];\n      var s = this.s,\n          i = 0;\n\n      while (s < this.e) {\n        var added = sorted[i] || this.e,\n            next = +added > +this.e ? this.e : added;\n        results.push(Interval.fromDateTimes(s, next));\n        s = next;\n        i += 1;\n      }\n\n      return results;\n    }\n    /**\n     * Split this Interval into smaller Intervals, each of the specified length.\n     * Left over time is grouped into a smaller interval\n     * @param {Duration|Object|number} duration - The length of each resulting interval.\n     * @return {[Interval]}\n     */\n    ;\n\n    _proto.splitBy = function splitBy(duration) {\n      var dur = friendlyDuration(duration);\n\n      if (!this.isValid || !dur.isValid || dur.as(\"milliseconds\") === 0) {\n        return [];\n      }\n\n      var s = this.s,\n          added,\n          next;\n      var results = [];\n\n      while (s < this.e) {\n        added = s.plus(dur);\n        next = +added > +this.e ? this.e : added;\n        results.push(Interval.fromDateTimes(s, next));\n        s = next;\n      }\n\n      return results;\n    }\n    /**\n     * Split this Interval into the specified number of smaller intervals.\n     * @param {number} numberOfParts - The number of Intervals to divide the Interval into.\n     * @return {[Interval]}\n     */\n    ;\n\n    _proto.divideEqually = function divideEqually(numberOfParts) {\n      if (!this.isValid) return [];\n      return this.splitBy(this.length() / numberOfParts).slice(0, numberOfParts);\n    }\n    /**\n     * Return whether this Interval overlaps with the specified Interval\n     * @param {Interval} other\n     * @return {boolean}\n     */\n    ;\n\n    _proto.overlaps = function overlaps(other) {\n      return this.e > other.s && this.s < other.e;\n    }\n    /**\n     * Return whether this Interval's end is adjacent to the specified Interval's start.\n     * @param {Interval} other\n     * @return {boolean}\n     */\n    ;\n\n    _proto.abutsStart = function abutsStart(other) {\n      if (!this.isValid) return false;\n      return +this.e === +other.s;\n    }\n    /**\n     * Return whether this Interval's start is adjacent to the specified Interval's end.\n     * @param {Interval} other\n     * @return {boolean}\n     */\n    ;\n\n    _proto.abutsEnd = function abutsEnd(other) {\n      if (!this.isValid) return false;\n      return +other.e === +this.s;\n    }\n    /**\n     * Return whether this Interval engulfs the start and end of the specified Interval.\n     * @param {Interval} other\n     * @return {boolean}\n     */\n    ;\n\n    _proto.engulfs = function engulfs(other) {\n      if (!this.isValid) return false;\n      return this.s <= other.s && this.e >= other.e;\n    }\n    /**\n     * Return whether this Interval has the same start and end as the specified Interval.\n     * @param {Interval} other\n     * @return {boolean}\n     */\n    ;\n\n    _proto.equals = function equals(other) {\n      if (!this.isValid || !other.isValid) {\n        return false;\n      }\n\n      return this.s.equals(other.s) && this.e.equals(other.e);\n    }\n    /**\n     * Return an Interval representing the intersection of this Interval and the specified Interval.\n     * Specifically, the resulting Interval has the maximum start time and the minimum end time of the two Intervals.\n     * Returns null if the intersection is empty, meaning, the intervals don't intersect.\n     * @param {Interval} other\n     * @return {Interval}\n     */\n    ;\n\n    _proto.intersection = function intersection(other) {\n      if (!this.isValid) return this;\n      var s = this.s > other.s ? this.s : other.s,\n          e = this.e < other.e ? this.e : other.e;\n\n      if (s > e) {\n        return null;\n      } else {\n        return Interval.fromDateTimes(s, e);\n      }\n    }\n    /**\n     * Return an Interval representing the union of this Interval and the specified Interval.\n     * Specifically, the resulting Interval has the minimum start time and the maximum end time of the two Intervals.\n     * @param {Interval} other\n     * @return {Interval}\n     */\n    ;\n\n    _proto.union = function union(other) {\n      if (!this.isValid) return this;\n      var s = this.s < other.s ? this.s : other.s,\n          e = this.e > other.e ? this.e : other.e;\n      return Interval.fromDateTimes(s, e);\n    }\n    /**\n     * Merge an array of Intervals into a equivalent minimal set of Intervals.\n     * Combines overlapping and adjacent Intervals.\n     * @param {[Interval]} intervals\n     * @return {[Interval]}\n     */\n    ;\n\n    Interval.merge = function merge(intervals) {\n      var _intervals$sort$reduc = intervals.sort(function (a, b) {\n        return a.s - b.s;\n      }).reduce(function (_ref2, item) {\n        var sofar = _ref2[0],\n            current = _ref2[1];\n\n        if (!current) {\n          return [sofar, item];\n        } else if (current.overlaps(item) || current.abutsStart(item)) {\n          return [sofar, current.union(item)];\n        } else {\n          return [sofar.concat([current]), item];\n        }\n      }, [[], null]),\n          found = _intervals$sort$reduc[0],\n          final = _intervals$sort$reduc[1];\n\n      if (final) {\n        found.push(final);\n      }\n\n      return found;\n    }\n    /**\n     * Return an array of Intervals representing the spans of time that only appear in one of the specified Intervals.\n     * @param {[Interval]} intervals\n     * @return {[Interval]}\n     */\n    ;\n\n    Interval.xor = function xor(intervals) {\n      var _Array$prototype;\n\n      var start = null,\n          currentCount = 0;\n\n      var results = [],\n          ends = intervals.map(function (i) {\n        return [{\n          time: i.s,\n          type: \"s\"\n        }, {\n          time: i.e,\n          type: \"e\"\n        }];\n      }),\n          flattened = (_Array$prototype = Array.prototype).concat.apply(_Array$prototype, ends),\n          arr = flattened.sort(function (a, b) {\n        return a.time - b.time;\n      });\n\n      for (var _iterator = _createForOfIteratorHelperLoose(arr), _step; !(_step = _iterator()).done;) {\n        var i = _step.value;\n        currentCount += i.type === \"s\" ? 1 : -1;\n\n        if (currentCount === 1) {\n          start = i.time;\n        } else {\n          if (start && +start !== +i.time) {\n            results.push(Interval.fromDateTimes(start, i.time));\n          }\n\n          start = null;\n        }\n      }\n\n      return Interval.merge(results);\n    }\n    /**\n     * Return an Interval representing the span of time in this Interval that doesn't overlap with any of the specified Intervals.\n     * @param {...Interval} intervals\n     * @return {[Interval]}\n     */\n    ;\n\n    _proto.difference = function difference() {\n      var _this2 = this;\n\n      for (var _len2 = arguments.length, intervals = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        intervals[_key2] = arguments[_key2];\n      }\n\n      return Interval.xor([this].concat(intervals)).map(function (i) {\n        return _this2.intersection(i);\n      }).filter(function (i) {\n        return i && !i.isEmpty();\n      });\n    }\n    /**\n     * Returns a string representation of this Interval appropriate for debugging.\n     * @return {string}\n     */\n    ;\n\n    _proto.toString = function toString() {\n      if (!this.isValid) return INVALID$1;\n      return \"[\" + this.s.toISO() + \" \\u2013 \" + this.e.toISO() + \")\";\n    }\n    /**\n     * Returns an ISO 8601-compliant string representation of this Interval.\n     * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n     * @param {Object} opts - The same options as {@link DateTime.toISO}\n     * @return {string}\n     */\n    ;\n\n    _proto.toISO = function toISO(opts) {\n      if (!this.isValid) return INVALID$1;\n      return this.s.toISO(opts) + \"/\" + this.e.toISO(opts);\n    }\n    /**\n     * Returns an ISO 8601-compliant string representation of date of this Interval.\n     * The time components are ignored.\n     * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n     * @return {string}\n     */\n    ;\n\n    _proto.toISODate = function toISODate() {\n      if (!this.isValid) return INVALID$1;\n      return this.s.toISODate() + \"/\" + this.e.toISODate();\n    }\n    /**\n     * Returns an ISO 8601-compliant string representation of time of this Interval.\n     * The date components are ignored.\n     * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n     * @param {Object} opts - The same options as {@link DateTime.toISO}\n     * @return {string}\n     */\n    ;\n\n    _proto.toISOTime = function toISOTime(opts) {\n      if (!this.isValid) return INVALID$1;\n      return this.s.toISOTime(opts) + \"/\" + this.e.toISOTime(opts);\n    }\n    /**\n     * Returns a string representation of this Interval formatted according to the specified format string.\n     * @param {string} dateFormat - the format string. This string formats the start and end time. See {@link DateTime.toFormat} for details.\n     * @param {Object} opts - options\n     * @param {string} [opts.separator =  ' \u2013 '] - a separator to place between the start and end representations\n     * @return {string}\n     */\n    ;\n\n    _proto.toFormat = function toFormat(dateFormat, _temp2) {\n      var _ref3 = _temp2 === void 0 ? {} : _temp2,\n          _ref3$separator = _ref3.separator,\n          separator = _ref3$separator === void 0 ? \" \u2013 \" : _ref3$separator;\n\n      if (!this.isValid) return INVALID$1;\n      return \"\" + this.s.toFormat(dateFormat) + separator + this.e.toFormat(dateFormat);\n    }\n    /**\n     * Return a Duration representing the time spanned by this interval.\n     * @param {string|string[]} [unit=['milliseconds']] - the unit or units (such as 'hours' or 'days') to include in the duration.\n     * @param {Object} opts - options that affect the creation of the Duration\n     * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n     * @example Interval.fromDateTimes(dt1, dt2).toDuration().toObject() //=> { milliseconds: 88489257 }\n     * @example Interval.fromDateTimes(dt1, dt2).toDuration('days').toObject() //=> { days: 1.0241812152777778 }\n     * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes']).toObject() //=> { hours: 24, minutes: 34.82095 }\n     * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes', 'seconds']).toObject() //=> { hours: 24, minutes: 34, seconds: 49.257 }\n     * @example Interval.fromDateTimes(dt1, dt2).toDuration('seconds').toObject() //=> { seconds: 88489.257 }\n     * @return {Duration}\n     */\n    ;\n\n    _proto.toDuration = function toDuration(unit, opts) {\n      if (!this.isValid) {\n        return Duration.invalid(this.invalidReason);\n      }\n\n      return this.e.diff(this.s, unit, opts);\n    }\n    /**\n     * Run mapFn on the interval start and end, returning a new Interval from the resulting DateTimes\n     * @param {function} mapFn\n     * @return {Interval}\n     * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.toUTC())\n     * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.plus({ hours: 2 }))\n     */\n    ;\n\n    _proto.mapEndpoints = function mapEndpoints(mapFn) {\n      return Interval.fromDateTimes(mapFn(this.s), mapFn(this.e));\n    };\n\n    _createClass(Interval, [{\n      key: \"start\",\n      get: function get() {\n        return this.isValid ? this.s : null;\n      }\n      /**\n       * Returns the end of the Interval\n       * @type {DateTime}\n       */\n\n    }, {\n      key: \"end\",\n      get: function get() {\n        return this.isValid ? this.e : null;\n      }\n      /**\n       * Returns whether this Interval's end is at least its start, meaning that the Interval isn't 'backwards'.\n       * @type {boolean}\n       */\n\n    }, {\n      key: \"isValid\",\n      get: function get() {\n        return this.invalidReason === null;\n      }\n      /**\n       * Returns an error code if this Interval is invalid, or null if the Interval is valid\n       * @type {string}\n       */\n\n    }, {\n      key: \"invalidReason\",\n      get: function get() {\n        return this.invalid ? this.invalid.reason : null;\n      }\n      /**\n       * Returns an explanation of why this Interval became invalid, or null if the Interval is valid\n       * @type {string}\n       */\n\n    }, {\n      key: \"invalidExplanation\",\n      get: function get() {\n        return this.invalid ? this.invalid.explanation : null;\n      }\n    }]);\n\n    return Interval;\n  }();\n\n  /**\n   * The Info class contains static methods for retrieving general time and date related data. For example, it has methods for finding out if a time zone has a DST, for listing the months in any supported locale, and for discovering which of Luxon features are available in the current environment.\n   */\n\n  var Info = /*#__PURE__*/function () {\n    function Info() {}\n\n    /**\n     * Return whether the specified zone contains a DST.\n     * @param {string|Zone} [zone='local'] - Zone to check. Defaults to the environment's local zone.\n     * @return {boolean}\n     */\n    Info.hasDST = function hasDST(zone) {\n      if (zone === void 0) {\n        zone = Settings.defaultZone;\n      }\n\n      var proto = DateTime.local().setZone(zone).set({\n        month: 12\n      });\n      return !zone.universal && proto.offset !== proto.set({\n        month: 6\n      }).offset;\n    }\n    /**\n     * Return whether the specified zone is a valid IANA specifier.\n     * @param {string} zone - Zone to check\n     * @return {boolean}\n     */\n    ;\n\n    Info.isValidIANAZone = function isValidIANAZone(zone) {\n      return IANAZone.isValidSpecifier(zone) && IANAZone.isValidZone(zone);\n    }\n    /**\n     * Converts the input into a {@link Zone} instance.\n     *\n     * * If `input` is already a Zone instance, it is returned unchanged.\n     * * If `input` is a string containing a valid time zone name, a Zone instance\n     *   with that name is returned.\n     * * If `input` is a string that doesn't refer to a known time zone, a Zone\n     *   instance with {@link Zone.isValid} == false is returned.\n     * * If `input is a number, a Zone instance with the specified fixed offset\n     *   in minutes is returned.\n     * * If `input` is `null` or `undefined`, the default zone is returned.\n     * @param {string|Zone|number} [input] - the value to be converted\n     * @return {Zone}\n     */\n    ;\n\n    Info.normalizeZone = function normalizeZone$1(input) {\n      return normalizeZone(input, Settings.defaultZone);\n    }\n    /**\n     * Return an array of standalone month names.\n     * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n     * @param {string} [length='long'] - the length of the month representation, such as \"numeric\", \"2-digit\", \"narrow\", \"short\", \"long\"\n     * @param {Object} opts - options\n     * @param {string} [opts.locale] - the locale code\n     * @param {string} [opts.numberingSystem=null] - the numbering system\n     * @param {string} [opts.outputCalendar='gregory'] - the calendar\n     * @example Info.months()[0] //=> 'January'\n     * @example Info.months('short')[0] //=> 'Jan'\n     * @example Info.months('numeric')[0] //=> '1'\n     * @example Info.months('short', { locale: 'fr-CA' } )[0] //=> 'janv.'\n     * @example Info.months('numeric', { locale: 'ar' })[0] //=> '\u0661'\n     * @example Info.months('long', { outputCalendar: 'islamic' })[0] //=> 'Rabi\u02bb I'\n     * @return {[string]}\n     */\n    ;\n\n    Info.months = function months(length, _temp) {\n      if (length === void 0) {\n        length = \"long\";\n      }\n\n      var _ref = _temp === void 0 ? {} : _temp,\n          _ref$locale = _ref.locale,\n          locale = _ref$locale === void 0 ? null : _ref$locale,\n          _ref$numberingSystem = _ref.numberingSystem,\n          numberingSystem = _ref$numberingSystem === void 0 ? null : _ref$numberingSystem,\n          _ref$outputCalendar = _ref.outputCalendar,\n          outputCalendar = _ref$outputCalendar === void 0 ? \"gregory\" : _ref$outputCalendar;\n\n      return Locale.create(locale, numberingSystem, outputCalendar).months(length);\n    }\n    /**\n     * Return an array of format month names.\n     * Format months differ from standalone months in that they're meant to appear next to the day of the month. In some languages, that\n     * changes the string.\n     * See {@link months}\n     * @param {string} [length='long'] - the length of the month representation, such as \"numeric\", \"2-digit\", \"narrow\", \"short\", \"long\"\n     * @param {Object} opts - options\n     * @param {string} [opts.locale] - the locale code\n     * @param {string} [opts.numberingSystem=null] - the numbering system\n     * @param {string} [opts.outputCalendar='gregory'] - the calendar\n     * @return {[string]}\n     */\n    ;\n\n    Info.monthsFormat = function monthsFormat(length, _temp2) {\n      if (length === void 0) {\n        length = \"long\";\n      }\n\n      var _ref2 = _temp2 === void 0 ? {} : _temp2,\n          _ref2$locale = _ref2.locale,\n          locale = _ref2$locale === void 0 ? null : _ref2$locale,\n          _ref2$numberingSystem = _ref2.numberingSystem,\n          numberingSystem = _ref2$numberingSystem === void 0 ? null : _ref2$numberingSystem,\n          _ref2$outputCalendar = _ref2.outputCalendar,\n          outputCalendar = _ref2$outputCalendar === void 0 ? \"gregory\" : _ref2$outputCalendar;\n\n      return Locale.create(locale, numberingSystem, outputCalendar).months(length, true);\n    }\n    /**\n     * Return an array of standalone week names.\n     * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n     * @param {string} [length='long'] - the length of the weekday representation, such as \"narrow\", \"short\", \"long\".\n     * @param {Object} opts - options\n     * @param {string} [opts.locale] - the locale code\n     * @param {string} [opts.numberingSystem=null] - the numbering system\n     * @example Info.weekdays()[0] //=> 'Monday'\n     * @example Info.weekdays('short')[0] //=> 'Mon'\n     * @example Info.weekdays('short', { locale: 'fr-CA' })[0] //=> 'lun.'\n     * @example Info.weekdays('short', { locale: 'ar' })[0] //=> '\u0627\u0644\u0627\u062b\u0646\u064a\u0646'\n     * @return {[string]}\n     */\n    ;\n\n    Info.weekdays = function weekdays(length, _temp3) {\n      if (length === void 0) {\n        length = \"long\";\n      }\n\n      var _ref3 = _temp3 === void 0 ? {} : _temp3,\n          _ref3$locale = _ref3.locale,\n          locale = _ref3$locale === void 0 ? null : _ref3$locale,\n          _ref3$numberingSystem = _ref3.numberingSystem,\n          numberingSystem = _ref3$numberingSystem === void 0 ? null : _ref3$numberingSystem;\n\n      return Locale.create(locale, numberingSystem, null).weekdays(length);\n    }\n    /**\n     * Return an array of format week names.\n     * Format weekdays differ from standalone weekdays in that they're meant to appear next to more date information. In some languages, that\n     * changes the string.\n     * See {@link weekdays}\n     * @param {string} [length='long'] - the length of the weekday representation, such as \"narrow\", \"short\", \"long\".\n     * @param {Object} opts - options\n     * @param {string} [opts.locale=null] - the locale code\n     * @param {string} [opts.numberingSystem=null] - the numbering system\n     * @return {[string]}\n     */\n    ;\n\n    Info.weekdaysFormat = function weekdaysFormat(length, _temp4) {\n      if (length === void 0) {\n        length = \"long\";\n      }\n\n      var _ref4 = _temp4 === void 0 ? {} : _temp4,\n          _ref4$locale = _ref4.locale,\n          locale = _ref4$locale === void 0 ? null : _ref4$locale,\n          _ref4$numberingSystem = _ref4.numberingSystem,\n          numberingSystem = _ref4$numberingSystem === void 0 ? null : _ref4$numberingSystem;\n\n      return Locale.create(locale, numberingSystem, null).weekdays(length, true);\n    }\n    /**\n     * Return an array of meridiems.\n     * @param {Object} opts - options\n     * @param {string} [opts.locale] - the locale code\n     * @example Info.meridiems() //=> [ 'AM', 'PM' ]\n     * @example Info.meridiems({ locale: 'my' }) //=> [ '\u1014\u1036\u1014\u1000\u103a', '\u100a\u1014\u1031' ]\n     * @return {[string]}\n     */\n    ;\n\n    Info.meridiems = function meridiems(_temp5) {\n      var _ref5 = _temp5 === void 0 ? {} : _temp5,\n          _ref5$locale = _ref5.locale,\n          locale = _ref5$locale === void 0 ? null : _ref5$locale;\n\n      return Locale.create(locale).meridiems();\n    }\n    /**\n     * Return an array of eras, such as ['BC', 'AD']. The locale can be specified, but the calendar system is always Gregorian.\n     * @param {string} [length='short'] - the length of the era representation, such as \"short\" or \"long\".\n     * @param {Object} opts - options\n     * @param {string} [opts.locale] - the locale code\n     * @example Info.eras() //=> [ 'BC', 'AD' ]\n     * @example Info.eras('long') //=> [ 'Before Christ', 'Anno Domini' ]\n     * @example Info.eras('long', { locale: 'fr' }) //=> [ 'avant J\u00e9sus-Christ', 'apr\u00e8s J\u00e9sus-Christ' ]\n     * @return {[string]}\n     */\n    ;\n\n    Info.eras = function eras(length, _temp6) {\n      if (length === void 0) {\n        length = \"short\";\n      }\n\n      var _ref6 = _temp6 === void 0 ? {} : _temp6,\n          _ref6$locale = _ref6.locale,\n          locale = _ref6$locale === void 0 ? null : _ref6$locale;\n\n      return Locale.create(locale, null, \"gregory\").eras(length);\n    }\n    /**\n     * Return the set of available features in this environment.\n     * Some features of Luxon are not available in all environments. For example, on older browsers, timezone support is not available. Use this function to figure out if that's the case.\n     * Keys:\n     * * `zones`: whether this environment supports IANA timezones\n     * * `intlTokens`: whether this environment supports internationalized token-based formatting/parsing\n     * * `intl`: whether this environment supports general internationalization\n     * * `relative`: whether this environment supports relative time formatting\n     * @example Info.features() //=> { intl: true, intlTokens: false, zones: true, relative: false }\n     * @return {Object}\n     */\n    ;\n\n    Info.features = function features() {\n      var intl = false,\n          intlTokens = false,\n          zones = false,\n          relative = false;\n\n      if (hasIntl()) {\n        intl = true;\n        intlTokens = hasFormatToParts();\n        relative = hasRelative();\n\n        try {\n          zones = new Intl.DateTimeFormat(\"en\", {\n            timeZone: \"America/New_York\"\n          }).resolvedOptions().timeZone === \"America/New_York\";\n        } catch (e) {\n          zones = false;\n        }\n      }\n\n      return {\n        intl: intl,\n        intlTokens: intlTokens,\n        zones: zones,\n        relative: relative\n      };\n    };\n\n    return Info;\n  }();\n\n  function dayDiff(earlier, later) {\n    var utcDayStart = function utcDayStart(dt) {\n      return dt.toUTC(0, {\n        keepLocalTime: true\n      }).startOf(\"day\").valueOf();\n    },\n        ms = utcDayStart(later) - utcDayStart(earlier);\n\n    return Math.floor(Duration.fromMillis(ms).as(\"days\"));\n  }\n\n  function highOrderDiffs(cursor, later, units) {\n    var differs = [[\"years\", function (a, b) {\n      return b.year - a.year;\n    }], [\"months\", function (a, b) {\n      return b.month - a.month + (b.year - a.year) * 12;\n    }], [\"weeks\", function (a, b) {\n      var days = dayDiff(a, b);\n      return (days - days % 7) / 7;\n    }], [\"days\", dayDiff]];\n    var results = {};\n    var lowestOrder, highWater;\n\n    for (var _i = 0, _differs = differs; _i < _differs.length; _i++) {\n      var _differs$_i = _differs[_i],\n          unit = _differs$_i[0],\n          differ = _differs$_i[1];\n\n      if (units.indexOf(unit) >= 0) {\n        var _cursor$plus;\n\n        lowestOrder = unit;\n        var delta = differ(cursor, later);\n        highWater = cursor.plus((_cursor$plus = {}, _cursor$plus[unit] = delta, _cursor$plus));\n\n        if (highWater > later) {\n          var _cursor$plus2;\n\n          cursor = cursor.plus((_cursor$plus2 = {}, _cursor$plus2[unit] = delta - 1, _cursor$plus2));\n          delta -= 1;\n        } else {\n          cursor = highWater;\n        }\n\n        results[unit] = delta;\n      }\n    }\n\n    return [cursor, results, highWater, lowestOrder];\n  }\n\n  function _diff (earlier, later, units, opts) {\n    var _highOrderDiffs = highOrderDiffs(earlier, later, units),\n        cursor = _highOrderDiffs[0],\n        results = _highOrderDiffs[1],\n        highWater = _highOrderDiffs[2],\n        lowestOrder = _highOrderDiffs[3];\n\n    var remainingMillis = later - cursor;\n    var lowerOrderUnits = units.filter(function (u) {\n      return [\"hours\", \"minutes\", \"seconds\", \"milliseconds\"].indexOf(u) >= 0;\n    });\n\n    if (lowerOrderUnits.length === 0) {\n      if (highWater < later) {\n        var _cursor$plus3;\n\n        highWater = cursor.plus((_cursor$plus3 = {}, _cursor$plus3[lowestOrder] = 1, _cursor$plus3));\n      }\n\n      if (highWater !== cursor) {\n        results[lowestOrder] = (results[lowestOrder] || 0) + remainingMillis / (highWater - cursor);\n      }\n    }\n\n    var duration = Duration.fromObject(Object.assign(results, opts));\n\n    if (lowerOrderUnits.length > 0) {\n      var _Duration$fromMillis;\n\n      return (_Duration$fromMillis = Duration.fromMillis(remainingMillis, opts)).shiftTo.apply(_Duration$fromMillis, lowerOrderUnits).plus(duration);\n    } else {\n      return duration;\n    }\n  }\n\n  var numberingSystems = {\n    arab: \"[\\u0660-\\u0669]\",\n    arabext: \"[\\u06F0-\\u06F9]\",\n    bali: \"[\\u1B50-\\u1B59]\",\n    beng: \"[\\u09E6-\\u09EF]\",\n    deva: \"[\\u0966-\\u096F]\",\n    fullwide: \"[\\uFF10-\\uFF19]\",\n    gujr: \"[\\u0AE6-\\u0AEF]\",\n    hanidec: \"[\u3007|\u4e00|\u4e8c|\u4e09|\u56db|\u4e94|\u516d|\u4e03|\u516b|\u4e5d]\",\n    khmr: \"[\\u17E0-\\u17E9]\",\n    knda: \"[\\u0CE6-\\u0CEF]\",\n    laoo: \"[\\u0ED0-\\u0ED9]\",\n    limb: \"[\\u1946-\\u194F]\",\n    mlym: \"[\\u0D66-\\u0D6F]\",\n    mong: \"[\\u1810-\\u1819]\",\n    mymr: \"[\\u1040-\\u1049]\",\n    orya: \"[\\u0B66-\\u0B6F]\",\n    tamldec: \"[\\u0BE6-\\u0BEF]\",\n    telu: \"[\\u0C66-\\u0C6F]\",\n    thai: \"[\\u0E50-\\u0E59]\",\n    tibt: \"[\\u0F20-\\u0F29]\",\n    latn: \"\\\\d\"\n  };\n  var numberingSystemsUTF16 = {\n    arab: [1632, 1641],\n    arabext: [1776, 1785],\n    bali: [6992, 7001],\n    beng: [2534, 2543],\n    deva: [2406, 2415],\n    fullwide: [65296, 65303],\n    gujr: [2790, 2799],\n    khmr: [6112, 6121],\n    knda: [3302, 3311],\n    laoo: [3792, 3801],\n    limb: [6470, 6479],\n    mlym: [3430, 3439],\n    mong: [6160, 6169],\n    mymr: [4160, 4169],\n    orya: [2918, 2927],\n    tamldec: [3046, 3055],\n    telu: [3174, 3183],\n    thai: [3664, 3673],\n    tibt: [3872, 3881]\n  }; // eslint-disable-next-line\n\n  var hanidecChars = numberingSystems.hanidec.replace(/[\\[|\\]]/g, \"\").split(\"\");\n  function parseDigits(str) {\n    var value = parseInt(str, 10);\n\n    if (isNaN(value)) {\n      value = \"\";\n\n      for (var i = 0; i < str.length; i++) {\n        var code = str.charCodeAt(i);\n\n        if (str[i].search(numberingSystems.hanidec) !== -1) {\n          value += hanidecChars.indexOf(str[i]);\n        } else {\n          for (var key in numberingSystemsUTF16) {\n            var _numberingSystemsUTF = numberingSystemsUTF16[key],\n                min = _numberingSystemsUTF[0],\n                max = _numberingSystemsUTF[1];\n\n            if (code >= min && code <= max) {\n              value += code - min;\n            }\n          }\n        }\n      }\n\n      return parseInt(value, 10);\n    } else {\n      return value;\n    }\n  }\n  function digitRegex(_ref, append) {\n    var numberingSystem = _ref.numberingSystem;\n\n    if (append === void 0) {\n      append = \"\";\n    }\n\n    return new RegExp(\"\" + numberingSystems[numberingSystem || \"latn\"] + append);\n  }\n\n  var MISSING_FTP = \"missing Intl.DateTimeFormat.formatToParts support\";\n\n  function intUnit(regex, post) {\n    if (post === void 0) {\n      post = function post(i) {\n        return i;\n      };\n    }\n\n    return {\n      regex: regex,\n      deser: function deser(_ref) {\n        var s = _ref[0];\n        return post(parseDigits(s));\n      }\n    };\n  }\n\n  var NBSP = String.fromCharCode(160);\n  var spaceOrNBSP = \"[ \" + NBSP + \"]\";\n  var spaceOrNBSPRegExp = new RegExp(spaceOrNBSP, \"g\");\n\n  function fixListRegex(s) {\n    // make dots optional and also make them literal\n    // make space and non breakable space characters interchangeable\n    return s.replace(/\\./g, \"\\\\.?\").replace(spaceOrNBSPRegExp, spaceOrNBSP);\n  }\n\n  function stripInsensitivities(s) {\n    return s.replace(/\\./g, \"\") // ignore dots that were made optional\n    .replace(spaceOrNBSPRegExp, \" \") // interchange space and nbsp\n    .toLowerCase();\n  }\n\n  function oneOf(strings, startIndex) {\n    if (strings === null) {\n      return null;\n    } else {\n      return {\n        regex: RegExp(strings.map(fixListRegex).join(\"|\")),\n        deser: function deser(_ref2) {\n          var s = _ref2[0];\n          return strings.findIndex(function (i) {\n            return stripInsensitivities(s) === stripInsensitivities(i);\n          }) + startIndex;\n        }\n      };\n    }\n  }\n\n  function offset(regex, groups) {\n    return {\n      regex: regex,\n      deser: function deser(_ref3) {\n        var h = _ref3[1],\n            m = _ref3[2];\n        return signedOffset(h, m);\n      },\n      groups: groups\n    };\n  }\n\n  function simple(regex) {\n    return {\n      regex: regex,\n      deser: function deser(_ref4) {\n        var s = _ref4[0];\n        return s;\n      }\n    };\n  }\n\n  function escapeToken(value) {\n    // eslint-disable-next-line no-useless-escape\n    return value.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\");\n  }\n\n  function unitForToken(token, loc) {\n    var one = digitRegex(loc),\n        two = digitRegex(loc, \"{2}\"),\n        three = digitRegex(loc, \"{3}\"),\n        four = digitRegex(loc, \"{4}\"),\n        six = digitRegex(loc, \"{6}\"),\n        oneOrTwo = digitRegex(loc, \"{1,2}\"),\n        oneToThree = digitRegex(loc, \"{1,3}\"),\n        oneToSix = digitRegex(loc, \"{1,6}\"),\n        oneToNine = digitRegex(loc, \"{1,9}\"),\n        twoToFour = digitRegex(loc, \"{2,4}\"),\n        fourToSix = digitRegex(loc, \"{4,6}\"),\n        literal = function literal(t) {\n      return {\n        regex: RegExp(escapeToken(t.val)),\n        deser: function deser(_ref5) {\n          var s = _ref5[0];\n          return s;\n        },\n        literal: true\n      };\n    },\n        unitate = function unitate(t) {\n      if (token.literal) {\n        return literal(t);\n      }\n\n      switch (t.val) {\n        // era\n        case \"G\":\n          return oneOf(loc.eras(\"short\", false), 0);\n\n        case \"GG\":\n          return oneOf(loc.eras(\"long\", false), 0);\n        // years\n\n        case \"y\":\n          return intUnit(oneToSix);\n\n        case \"yy\":\n          return intUnit(twoToFour, untruncateYear);\n\n        case \"yyyy\":\n          return intUnit(four);\n\n        case \"yyyyy\":\n          return intUnit(fourToSix);\n\n        case \"yyyyyy\":\n          return intUnit(six);\n        // months\n\n        case \"M\":\n          return intUnit(oneOrTwo);\n\n        case \"MM\":\n          return intUnit(two);\n\n        case \"MMM\":\n          return oneOf(loc.months(\"short\", true, false), 1);\n\n        case \"MMMM\":\n          return oneOf(loc.months(\"long\", true, false), 1);\n\n        case \"L\":\n          return intUnit(oneOrTwo);\n\n        case \"LL\":\n          return intUnit(two);\n\n        case \"LLL\":\n          return oneOf(loc.months(\"short\", false, false), 1);\n\n        case \"LLLL\":\n          return oneOf(loc.months(\"long\", false, false), 1);\n        // dates\n\n        case \"d\":\n          return intUnit(oneOrTwo);\n\n        case \"dd\":\n          return intUnit(two);\n        // ordinals\n\n        case \"o\":\n          return intUnit(oneToThree);\n\n        case \"ooo\":\n          return intUnit(three);\n        // time\n\n        case \"HH\":\n          return intUnit(two);\n\n        case \"H\":\n          return intUnit(oneOrTwo);\n\n        case \"hh\":\n          return intUnit(two);\n\n        case \"h\":\n          return intUnit(oneOrTwo);\n\n        case \"mm\":\n          return intUnit(two);\n\n        case \"m\":\n          return intUnit(oneOrTwo);\n\n        case \"q\":\n          return intUnit(oneOrTwo);\n\n        case \"qq\":\n          return intUnit(two);\n\n        case \"s\":\n          return intUnit(oneOrTwo);\n\n        case \"ss\":\n          return intUnit(two);\n\n        case \"S\":\n          return intUnit(oneToThree);\n\n        case \"SSS\":\n          return intUnit(three);\n\n        case \"u\":\n          return simple(oneToNine);\n        // meridiem\n\n        case \"a\":\n          return oneOf(loc.meridiems(), 0);\n        // weekYear (k)\n\n        case \"kkkk\":\n          return intUnit(four);\n\n        case \"kk\":\n          return intUnit(twoToFour, untruncateYear);\n        // weekNumber (W)\n\n        case \"W\":\n          return intUnit(oneOrTwo);\n\n        case \"WW\":\n          return intUnit(two);\n        // weekdays\n\n        case \"E\":\n        case \"c\":\n          return intUnit(one);\n\n        case \"EEE\":\n          return oneOf(loc.weekdays(\"short\", false, false), 1);\n\n        case \"EEEE\":\n          return oneOf(loc.weekdays(\"long\", false, false), 1);\n\n        case \"ccc\":\n          return oneOf(loc.weekdays(\"short\", true, false), 1);\n\n        case \"cccc\":\n          return oneOf(loc.weekdays(\"long\", true, false), 1);\n        // offset/zone\n\n        case \"Z\":\n        case \"ZZ\":\n          return offset(new RegExp(\"([+-]\" + oneOrTwo.source + \")(?::(\" + two.source + \"))?\"), 2);\n\n        case \"ZZZ\":\n          return offset(new RegExp(\"([+-]\" + oneOrTwo.source + \")(\" + two.source + \")?\"), 2);\n        // we don't support ZZZZ (PST) or ZZZZZ (Pacific Standard Time) in parsing\n        // because we don't have any way to figure out what they are\n\n        case \"z\":\n          return simple(/[a-z_+-/]{1,256}?/i);\n\n        default:\n          return literal(t);\n      }\n    };\n\n    var unit = unitate(token) || {\n      invalidReason: MISSING_FTP\n    };\n    unit.token = token;\n    return unit;\n  }\n\n  var partTypeStyleToTokenVal = {\n    year: {\n      \"2-digit\": \"yy\",\n      numeric: \"yyyyy\"\n    },\n    month: {\n      numeric: \"M\",\n      \"2-digit\": \"MM\",\n      short: \"MMM\",\n      long: \"MMMM\"\n    },\n    day: {\n      numeric: \"d\",\n      \"2-digit\": \"dd\"\n    },\n    weekday: {\n      short: \"EEE\",\n      long: \"EEEE\"\n    },\n    dayperiod: \"a\",\n    dayPeriod: \"a\",\n    hour: {\n      numeric: \"h\",\n      \"2-digit\": \"hh\"\n    },\n    minute: {\n      numeric: \"m\",\n      \"2-digit\": \"mm\"\n    },\n    second: {\n      numeric: \"s\",\n      \"2-digit\": \"ss\"\n    }\n  };\n\n  function tokenForPart(part, locale, formatOpts) {\n    var type = part.type,\n        value = part.value;\n\n    if (type === \"literal\") {\n      return {\n        literal: true,\n        val: value\n      };\n    }\n\n    var style = formatOpts[type];\n    var val = partTypeStyleToTokenVal[type];\n\n    if (typeof val === \"object\") {\n      val = val[style];\n    }\n\n    if (val) {\n      return {\n        literal: false,\n        val: val\n      };\n    }\n\n    return undefined;\n  }\n\n  function buildRegex(units) {\n    var re = units.map(function (u) {\n      return u.regex;\n    }).reduce(function (f, r) {\n      return f + \"(\" + r.source + \")\";\n    }, \"\");\n    return [\"^\" + re + \"$\", units];\n  }\n\n  function match(input, regex, handlers) {\n    var matches = input.match(regex);\n\n    if (matches) {\n      var all = {};\n      var matchIndex = 1;\n\n      for (var i in handlers) {\n        if (hasOwnProperty(handlers, i)) {\n          var h = handlers[i],\n              groups = h.groups ? h.groups + 1 : 1;\n\n          if (!h.literal && h.token) {\n            all[h.token.val[0]] = h.deser(matches.slice(matchIndex, matchIndex + groups));\n          }\n\n          matchIndex += groups;\n        }\n      }\n\n      return [matches, all];\n    } else {\n      return [matches, {}];\n    }\n  }\n\n  function dateTimeFromMatches(matches) {\n    var toField = function toField(token) {\n      switch (token) {\n        case \"S\":\n          return \"millisecond\";\n\n        case \"s\":\n          return \"second\";\n\n        case \"m\":\n          return \"minute\";\n\n        case \"h\":\n        case \"H\":\n          return \"hour\";\n\n        case \"d\":\n          return \"day\";\n\n        case \"o\":\n          return \"ordinal\";\n\n        case \"L\":\n        case \"M\":\n          return \"month\";\n\n        case \"y\":\n          return \"year\";\n\n        case \"E\":\n        case \"c\":\n          return \"weekday\";\n\n        case \"W\":\n          return \"weekNumber\";\n\n        case \"k\":\n          return \"weekYear\";\n\n        case \"q\":\n          return \"quarter\";\n\n        default:\n          return null;\n      }\n    };\n\n    var zone;\n\n    if (!isUndefined(matches.Z)) {\n      zone = new FixedOffsetZone(matches.Z);\n    } else if (!isUndefined(matches.z)) {\n      zone = IANAZone.create(matches.z);\n    } else {\n      zone = null;\n    }\n\n    if (!isUndefined(matches.q)) {\n      matches.M = (matches.q - 1) * 3 + 1;\n    }\n\n    if (!isUndefined(matches.h)) {\n      if (matches.h < 12 && matches.a === 1) {\n        matches.h += 12;\n      } else if (matches.h === 12 && matches.a === 0) {\n        matches.h = 0;\n      }\n    }\n\n    if (matches.G === 0 && matches.y) {\n      matches.y = -matches.y;\n    }\n\n    if (!isUndefined(matches.u)) {\n      matches.S = parseMillis(matches.u);\n    }\n\n    var vals = Object.keys(matches).reduce(function (r, k) {\n      var f = toField(k);\n\n      if (f) {\n        r[f] = matches[k];\n      }\n\n      return r;\n    }, {});\n    return [vals, zone];\n  }\n\n  var dummyDateTimeCache = null;\n\n  function getDummyDateTime() {\n    if (!dummyDateTimeCache) {\n      dummyDateTimeCache = DateTime.fromMillis(1555555555555);\n    }\n\n    return dummyDateTimeCache;\n  }\n\n  function maybeExpandMacroToken(token, locale) {\n    if (token.literal) {\n      return token;\n    }\n\n    var formatOpts = Formatter.macroTokenToFormatOpts(token.val);\n\n    if (!formatOpts) {\n      return token;\n    }\n\n    var formatter = Formatter.create(locale, formatOpts);\n    var parts = formatter.formatDateTimeParts(getDummyDateTime());\n    var tokens = parts.map(function (p) {\n      return tokenForPart(p, locale, formatOpts);\n    });\n\n    if (tokens.includes(undefined)) {\n      return token;\n    }\n\n    return tokens;\n  }\n\n  function expandMacroTokens(tokens, locale) {\n    var _Array$prototype;\n\n    return (_Array$prototype = Array.prototype).concat.apply(_Array$prototype, tokens.map(function (t) {\n      return maybeExpandMacroToken(t, locale);\n    }));\n  }\n  /**\n   * @private\n   */\n\n\n  function explainFromTokens(locale, input, format) {\n    var tokens = expandMacroTokens(Formatter.parseFormat(format), locale),\n        units = tokens.map(function (t) {\n      return unitForToken(t, locale);\n    }),\n        disqualifyingUnit = units.find(function (t) {\n      return t.invalidReason;\n    });\n\n    if (disqualifyingUnit) {\n      return {\n        input: input,\n        tokens: tokens,\n        invalidReason: disqualifyingUnit.invalidReason\n      };\n    } else {\n      var _buildRegex = buildRegex(units),\n          regexString = _buildRegex[0],\n          handlers = _buildRegex[1],\n          regex = RegExp(regexString, \"i\"),\n          _match = match(input, regex, handlers),\n          rawMatches = _match[0],\n          matches = _match[1],\n          _ref6 = matches ? dateTimeFromMatches(matches) : [null, null],\n          result = _ref6[0],\n          zone = _ref6[1];\n\n      if (hasOwnProperty(matches, \"a\") && hasOwnProperty(matches, \"H\")) {\n        throw new ConflictingSpecificationError(\"Can't include meridiem when specifying 24-hour format\");\n      }\n\n      return {\n        input: input,\n        tokens: tokens,\n        regex: regex,\n        rawMatches: rawMatches,\n        matches: matches,\n        result: result,\n        zone: zone\n      };\n    }\n  }\n  function parseFromTokens(locale, input, format) {\n    var _explainFromTokens = explainFromTokens(locale, input, format),\n        result = _explainFromTokens.result,\n        zone = _explainFromTokens.zone,\n        invalidReason = _explainFromTokens.invalidReason;\n\n    return [result, zone, invalidReason];\n  }\n\n  var nonLeapLadder = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334],\n      leapLadder = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335];\n\n  function unitOutOfRange(unit, value) {\n    return new Invalid(\"unit out of range\", \"you specified \" + value + \" (of type \" + typeof value + \") as a \" + unit + \", which is invalid\");\n  }\n\n  function dayOfWeek(year, month, day) {\n    var js = new Date(Date.UTC(year, month - 1, day)).getUTCDay();\n    return js === 0 ? 7 : js;\n  }\n\n  function computeOrdinal(year, month, day) {\n    return day + (isLeapYear(year) ? leapLadder : nonLeapLadder)[month - 1];\n  }\n\n  function uncomputeOrdinal(year, ordinal) {\n    var table = isLeapYear(year) ? leapLadder : nonLeapLadder,\n        month0 = table.findIndex(function (i) {\n      return i < ordinal;\n    }),\n        day = ordinal - table[month0];\n    return {\n      month: month0 + 1,\n      day: day\n    };\n  }\n  /**\n   * @private\n   */\n\n\n  function gregorianToWeek(gregObj) {\n    var year = gregObj.year,\n        month = gregObj.month,\n        day = gregObj.day,\n        ordinal = computeOrdinal(year, month, day),\n        weekday = dayOfWeek(year, month, day);\n    var weekNumber = Math.floor((ordinal - weekday + 10) / 7),\n        weekYear;\n\n    if (weekNumber < 1) {\n      weekYear = year - 1;\n      weekNumber = weeksInWeekYear(weekYear);\n    } else if (weekNumber > weeksInWeekYear(year)) {\n      weekYear = year + 1;\n      weekNumber = 1;\n    } else {\n      weekYear = year;\n    }\n\n    return Object.assign({\n      weekYear: weekYear,\n      weekNumber: weekNumber,\n      weekday: weekday\n    }, timeObject(gregObj));\n  }\n  function weekToGregorian(weekData) {\n    var weekYear = weekData.weekYear,\n        weekNumber = weekData.weekNumber,\n        weekday = weekData.weekday,\n        weekdayOfJan4 = dayOfWeek(weekYear, 1, 4),\n        yearInDays = daysInYear(weekYear);\n    var ordinal = weekNumber * 7 + weekday - weekdayOfJan4 - 3,\n        year;\n\n    if (ordinal < 1) {\n      year = weekYear - 1;\n      ordinal += daysInYear(year);\n    } else if (ordinal > yearInDays) {\n      year = weekYear + 1;\n      ordinal -= daysInYear(weekYear);\n    } else {\n      year = weekYear;\n    }\n\n    var _uncomputeOrdinal = uncomputeOrdinal(year, ordinal),\n        month = _uncomputeOrdinal.month,\n        day = _uncomputeOrdinal.day;\n\n    return Object.assign({\n      year: year,\n      month: month,\n      day: day\n    }, timeObject(weekData));\n  }\n  function gregorianToOrdinal(gregData) {\n    var year = gregData.year,\n        month = gregData.month,\n        day = gregData.day,\n        ordinal = computeOrdinal(year, month, day);\n    return Object.assign({\n      year: year,\n      ordinal: ordinal\n    }, timeObject(gregData));\n  }\n  function ordinalToGregorian(ordinalData) {\n    var year = ordinalData.year,\n        ordinal = ordinalData.ordinal,\n        _uncomputeOrdinal2 = uncomputeOrdinal(year, ordinal),\n        month = _uncomputeOrdinal2.month,\n        day = _uncomputeOrdinal2.day;\n\n    return Object.assign({\n      year: year,\n      month: month,\n      day: day\n    }, timeObject(ordinalData));\n  }\n  function hasInvalidWeekData(obj) {\n    var validYear = isInteger(obj.weekYear),\n        validWeek = integerBetween(obj.weekNumber, 1, weeksInWeekYear(obj.weekYear)),\n        validWeekday = integerBetween(obj.weekday, 1, 7);\n\n    if (!validYear) {\n      return unitOutOfRange(\"weekYear\", obj.weekYear);\n    } else if (!validWeek) {\n      return unitOutOfRange(\"week\", obj.week);\n    } else if (!validWeekday) {\n      return unitOutOfRange(\"weekday\", obj.weekday);\n    } else return false;\n  }\n  function hasInvalidOrdinalData(obj) {\n    var validYear = isInteger(obj.year),\n        validOrdinal = integerBetween(obj.ordinal, 1, daysInYear(obj.year));\n\n    if (!validYear) {\n      return unitOutOfRange(\"year\", obj.year);\n    } else if (!validOrdinal) {\n      return unitOutOfRange(\"ordinal\", obj.ordinal);\n    } else return false;\n  }\n  function hasInvalidGregorianData(obj) {\n    var validYear = isInteger(obj.year),\n        validMonth = integerBetween(obj.month, 1, 12),\n        validDay = integerBetween(obj.day, 1, daysInMonth(obj.year, obj.month));\n\n    if (!validYear) {\n      return unitOutOfRange(\"year\", obj.year);\n    } else if (!validMonth) {\n      return unitOutOfRange(\"month\", obj.month);\n    } else if (!validDay) {\n      return unitOutOfRange(\"day\", obj.day);\n    } else return false;\n  }\n  function hasInvalidTimeData(obj) {\n    var hour = obj.hour,\n        minute = obj.minute,\n        second = obj.second,\n        millisecond = obj.millisecond;\n    var validHour = integerBetween(hour, 0, 23) || hour === 24 && minute === 0 && second === 0 && millisecond === 0,\n        validMinute = integerBetween(minute, 0, 59),\n        validSecond = integerBetween(second, 0, 59),\n        validMillisecond = integerBetween(millisecond, 0, 999);\n\n    if (!validHour) {\n      return unitOutOfRange(\"hour\", hour);\n    } else if (!validMinute) {\n      return unitOutOfRange(\"minute\", minute);\n    } else if (!validSecond) {\n      return unitOutOfRange(\"second\", second);\n    } else if (!validMillisecond) {\n      return unitOutOfRange(\"millisecond\", millisecond);\n    } else return false;\n  }\n\n  var INVALID$2 = \"Invalid DateTime\";\n  var MAX_DATE = 8.64e15;\n\n  function unsupportedZone(zone) {\n    return new Invalid(\"unsupported zone\", \"the zone \\\"\" + zone.name + \"\\\" is not supported\");\n  } // we cache week data on the DT object and this intermediates the cache\n\n\n  function possiblyCachedWeekData(dt) {\n    if (dt.weekData === null) {\n      dt.weekData = gregorianToWeek(dt.c);\n    }\n\n    return dt.weekData;\n  } // clone really means, \"make a new object with these modifications\". all \"setters\" really use this\n  // to create a new object while only changing some of the properties\n\n\n  function clone$1(inst, alts) {\n    var current = {\n      ts: inst.ts,\n      zone: inst.zone,\n      c: inst.c,\n      o: inst.o,\n      loc: inst.loc,\n      invalid: inst.invalid\n    };\n    return new DateTime(Object.assign({}, current, alts, {\n      old: current\n    }));\n  } // find the right offset a given local time. The o input is our guess, which determines which\n  // offset we'll pick in ambiguous cases (e.g. there are two 3 AMs b/c Fallback DST)\n\n\n  function fixOffset(localTS, o, tz) {\n    // Our UTC time is just a guess because our offset is just a guess\n    var utcGuess = localTS - o * 60 * 1000; // Test whether the zone matches the offset for this ts\n\n    var o2 = tz.offset(utcGuess); // If so, offset didn't change and we're done\n\n    if (o === o2) {\n      return [utcGuess, o];\n    } // If not, change the ts by the difference in the offset\n\n\n    utcGuess -= (o2 - o) * 60 * 1000; // If that gives us the local time we want, we're done\n\n    var o3 = tz.offset(utcGuess);\n\n    if (o2 === o3) {\n      return [utcGuess, o2];\n    } // If it's different, we're in a hole time. The offset has changed, but the we don't adjust the time\n\n\n    return [localTS - Math.min(o2, o3) * 60 * 1000, Math.max(o2, o3)];\n  } // convert an epoch timestamp into a calendar object with the given offset\n\n\n  function tsToObj(ts, offset) {\n    ts += offset * 60 * 1000;\n    var d = new Date(ts);\n    return {\n      year: d.getUTCFullYear(),\n      month: d.getUTCMonth() + 1,\n      day: d.getUTCDate(),\n      hour: d.getUTCHours(),\n      minute: d.getUTCMinutes(),\n      second: d.getUTCSeconds(),\n      millisecond: d.getUTCMilliseconds()\n    };\n  } // convert a calendar object to a epoch timestamp\n\n\n  function objToTS(obj, offset, zone) {\n    return fixOffset(objToLocalTS(obj), offset, zone);\n  } // create a new DT instance by adding a duration, adjusting for DSTs\n\n\n  function adjustTime(inst, dur) {\n    var oPre = inst.o,\n        year = inst.c.year + Math.trunc(dur.years),\n        month = inst.c.month + Math.trunc(dur.months) + Math.trunc(dur.quarters) * 3,\n        c = Object.assign({}, inst.c, {\n      year: year,\n      month: month,\n      day: Math.min(inst.c.day, daysInMonth(year, month)) + Math.trunc(dur.days) + Math.trunc(dur.weeks) * 7\n    }),\n        millisToAdd = Duration.fromObject({\n      years: dur.years - Math.trunc(dur.years),\n      quarters: dur.quarters - Math.trunc(dur.quarters),\n      months: dur.months - Math.trunc(dur.months),\n      weeks: dur.weeks - Math.trunc(dur.weeks),\n      days: dur.days - Math.trunc(dur.days),\n      hours: dur.hours,\n      minutes: dur.minutes,\n      seconds: dur.seconds,\n      milliseconds: dur.milliseconds\n    }).as(\"milliseconds\"),\n        localTS = objToLocalTS(c);\n\n    var _fixOffset = fixOffset(localTS, oPre, inst.zone),\n        ts = _fixOffset[0],\n        o = _fixOffset[1];\n\n    if (millisToAdd !== 0) {\n      ts += millisToAdd; // that could have changed the offset by going over a DST, but we want to keep the ts the same\n\n      o = inst.zone.offset(ts);\n    }\n\n    return {\n      ts: ts,\n      o: o\n    };\n  } // helper useful in turning the results of parsing into real dates\n  // by handling the zone options\n\n\n  function parseDataToDateTime(parsed, parsedZone, opts, format, text) {\n    var setZone = opts.setZone,\n        zone = opts.zone;\n\n    if (parsed && Object.keys(parsed).length !== 0) {\n      var interpretationZone = parsedZone || zone,\n          inst = DateTime.fromObject(Object.assign(parsed, opts, {\n        zone: interpretationZone,\n        // setZone is a valid option in the calling methods, but not in fromObject\n        setZone: undefined\n      }));\n      return setZone ? inst : inst.setZone(zone);\n    } else {\n      return DateTime.invalid(new Invalid(\"unparsable\", \"the input \\\"\" + text + \"\\\" can't be parsed as \" + format));\n    }\n  } // if you want to output a technical format (e.g. RFC 2822), this helper\n  // helps handle the details\n\n\n  function toTechFormat(dt, format, allowZ) {\n    if (allowZ === void 0) {\n      allowZ = true;\n    }\n\n    return dt.isValid ? Formatter.create(Locale.create(\"en-US\"), {\n      allowZ: allowZ,\n      forceSimple: true\n    }).formatDateTimeFromString(dt, format) : null;\n  } // technical time formats (e.g. the time part of ISO 8601), take some options\n  // and this commonizes their handling\n\n\n  function toTechTimeFormat(dt, _ref) {\n    var _ref$suppressSeconds = _ref.suppressSeconds,\n        suppressSeconds = _ref$suppressSeconds === void 0 ? false : _ref$suppressSeconds,\n        _ref$suppressMillisec = _ref.suppressMilliseconds,\n        suppressMilliseconds = _ref$suppressMillisec === void 0 ? false : _ref$suppressMillisec,\n        includeOffset = _ref.includeOffset,\n        _ref$includeZone = _ref.includeZone,\n        includeZone = _ref$includeZone === void 0 ? false : _ref$includeZone,\n        _ref$spaceZone = _ref.spaceZone,\n        spaceZone = _ref$spaceZone === void 0 ? false : _ref$spaceZone,\n        _ref$format = _ref.format,\n        format = _ref$format === void 0 ? \"extended\" : _ref$format;\n    var fmt = format === \"basic\" ? \"HHmm\" : \"HH:mm\";\n\n    if (!suppressSeconds || dt.second !== 0 || dt.millisecond !== 0) {\n      fmt += format === \"basic\" ? \"ss\" : \":ss\";\n\n      if (!suppressMilliseconds || dt.millisecond !== 0) {\n        fmt += \".SSS\";\n      }\n    }\n\n    if ((includeZone || includeOffset) && spaceZone) {\n      fmt += \" \";\n    }\n\n    if (includeZone) {\n      fmt += \"z\";\n    } else if (includeOffset) {\n      fmt += format === \"basic\" ? \"ZZZ\" : \"ZZ\";\n    }\n\n    return toTechFormat(dt, fmt);\n  } // defaults for unspecified units in the supported calendars\n\n\n  var defaultUnitValues = {\n    month: 1,\n    day: 1,\n    hour: 0,\n    minute: 0,\n    second: 0,\n    millisecond: 0\n  },\n      defaultWeekUnitValues = {\n    weekNumber: 1,\n    weekday: 1,\n    hour: 0,\n    minute: 0,\n    second: 0,\n    millisecond: 0\n  },\n      defaultOrdinalUnitValues = {\n    ordinal: 1,\n    hour: 0,\n    minute: 0,\n    second: 0,\n    millisecond: 0\n  }; // Units in the supported calendars, sorted by bigness\n\n  var orderedUnits$1 = [\"year\", \"month\", \"day\", \"hour\", \"minute\", \"second\", \"millisecond\"],\n      orderedWeekUnits = [\"weekYear\", \"weekNumber\", \"weekday\", \"hour\", \"minute\", \"second\", \"millisecond\"],\n      orderedOrdinalUnits = [\"year\", \"ordinal\", \"hour\", \"minute\", \"second\", \"millisecond\"]; // standardize case and plurality in units\n\n  function normalizeUnit(unit) {\n    var normalized = {\n      year: \"year\",\n      years: \"year\",\n      month: \"month\",\n      months: \"month\",\n      day: \"day\",\n      days: \"day\",\n      hour: \"hour\",\n      hours: \"hour\",\n      minute: \"minute\",\n      minutes: \"minute\",\n      quarter: \"quarter\",\n      quarters: \"quarter\",\n      second: \"second\",\n      seconds: \"second\",\n      millisecond: \"millisecond\",\n      milliseconds: \"millisecond\",\n      weekday: \"weekday\",\n      weekdays: \"weekday\",\n      weeknumber: \"weekNumber\",\n      weeksnumber: \"weekNumber\",\n      weeknumbers: \"weekNumber\",\n      weekyear: \"weekYear\",\n      weekyears: \"weekYear\",\n      ordinal: \"ordinal\"\n    }[unit.toLowerCase()];\n    if (!normalized) throw new InvalidUnitError(unit);\n    return normalized;\n  } // this is a dumbed down version of fromObject() that runs about 60% faster\n  // but doesn't do any validation, makes a bunch of assumptions about what units\n  // are present, and so on.\n\n\n  function quickDT(obj, zone) {\n    // assume we have the higher-order units\n    for (var _iterator = _createForOfIteratorHelperLoose(orderedUnits$1), _step; !(_step = _iterator()).done;) {\n      var u = _step.value;\n\n      if (isUndefined(obj[u])) {\n        obj[u] = defaultUnitValues[u];\n      }\n    }\n\n    var invalid = hasInvalidGregorianData(obj) || hasInvalidTimeData(obj);\n\n    if (invalid) {\n      return DateTime.invalid(invalid);\n    }\n\n    var tsNow = Settings.now(),\n        offsetProvis = zone.offset(tsNow),\n        _objToTS = objToTS(obj, offsetProvis, zone),\n        ts = _objToTS[0],\n        o = _objToTS[1];\n\n    return new DateTime({\n      ts: ts,\n      zone: zone,\n      o: o\n    });\n  }\n\n  function diffRelative(start, end, opts) {\n    var round = isUndefined(opts.round) ? true : opts.round,\n        format = function format(c, unit) {\n      c = roundTo(c, round || opts.calendary ? 0 : 2, true);\n      var formatter = end.loc.clone(opts).relFormatter(opts);\n      return formatter.format(c, unit);\n    },\n        differ = function differ(unit) {\n      if (opts.calendary) {\n        if (!end.hasSame(start, unit)) {\n          return end.startOf(unit).diff(start.startOf(unit), unit).get(unit);\n        } else return 0;\n      } else {\n        return end.diff(start, unit).get(unit);\n      }\n    };\n\n    if (opts.unit) {\n      return format(differ(opts.unit), opts.unit);\n    }\n\n    for (var _iterator2 = _createForOfIteratorHelperLoose(opts.units), _step2; !(_step2 = _iterator2()).done;) {\n      var unit = _step2.value;\n      var count = differ(unit);\n\n      if (Math.abs(count) >= 1) {\n        return format(count, unit);\n      }\n    }\n\n    return format(0, opts.units[opts.units.length - 1]);\n  }\n  /**\n   * A DateTime is an immutable data structure representing a specific date and time and accompanying methods. It contains class and instance methods for creating, parsing, interrogating, transforming, and formatting them.\n   *\n   * A DateTime comprises of:\n   * * A timestamp. Each DateTime instance refers to a specific millisecond of the Unix epoch.\n   * * A time zone. Each instance is considered in the context of a specific zone (by default the local system's zone).\n   * * Configuration properties that effect how output strings are formatted, such as `locale`, `numberingSystem`, and `outputCalendar`.\n   *\n   * Here is a brief overview of the most commonly used functionality it provides:\n   *\n   * * **Creation**: To create a DateTime from its components, use one of its factory class methods: {@link local}, {@link utc}, and (most flexibly) {@link fromObject}. To create one from a standard string format, use {@link fromISO}, {@link fromHTTP}, and {@link fromRFC2822}. To create one from a custom string format, use {@link fromFormat}. To create one from a native JS date, use {@link fromJSDate}.\n   * * **Gregorian calendar and time**: To examine the Gregorian properties of a DateTime individually (i.e as opposed to collectively through {@link toObject}), use the {@link year}, {@link month},\n   * {@link day}, {@link hour}, {@link minute}, {@link second}, {@link millisecond} accessors.\n   * * **Week calendar**: For ISO week calendar attributes, see the {@link weekYear}, {@link weekNumber}, and {@link weekday} accessors.\n   * * **Configuration** See the {@link locale} and {@link numberingSystem} accessors.\n   * * **Transformation**: To transform the DateTime into other DateTimes, use {@link set}, {@link reconfigure}, {@link setZone}, {@link setLocale}, {@link plus}, {@link minus}, {@link endOf}, {@link startOf}, {@link toUTC}, and {@link toLocal}.\n   * * **Output**: To convert the DateTime to other representations, use the {@link toRelative}, {@link toRelativeCalendar}, {@link toJSON}, {@link toISO}, {@link toHTTP}, {@link toObject}, {@link toRFC2822}, {@link toString}, {@link toLocaleString}, {@link toFormat}, {@link toMillis} and {@link toJSDate}.\n   *\n   * There's plenty others documented below. In addition, for more information on subtler topics like internationalization, time zones, alternative calendars, validity, and so on, see the external documentation.\n   */\n\n\n  var DateTime = /*#__PURE__*/function () {\n    /**\n     * @access private\n     */\n    function DateTime(config) {\n      var zone = config.zone || Settings.defaultZone;\n      var invalid = config.invalid || (Number.isNaN(config.ts) ? new Invalid(\"invalid input\") : null) || (!zone.isValid ? unsupportedZone(zone) : null);\n      /**\n       * @access private\n       */\n\n      this.ts = isUndefined(config.ts) ? Settings.now() : config.ts;\n      var c = null,\n          o = null;\n\n      if (!invalid) {\n        var unchanged = config.old && config.old.ts === this.ts && config.old.zone.equals(zone);\n\n        if (unchanged) {\n          var _ref2 = [config.old.c, config.old.o];\n          c = _ref2[0];\n          o = _ref2[1];\n        } else {\n          var ot = zone.offset(this.ts);\n          c = tsToObj(this.ts, ot);\n          invalid = Number.isNaN(c.year) ? new Invalid(\"invalid input\") : null;\n          c = invalid ? null : c;\n          o = invalid ? null : ot;\n        }\n      }\n      /**\n       * @access private\n       */\n\n\n      this._zone = zone;\n      /**\n       * @access private\n       */\n\n      this.loc = config.loc || Locale.create();\n      /**\n       * @access private\n       */\n\n      this.invalid = invalid;\n      /**\n       * @access private\n       */\n\n      this.weekData = null;\n      /**\n       * @access private\n       */\n\n      this.c = c;\n      /**\n       * @access private\n       */\n\n      this.o = o;\n      /**\n       * @access private\n       */\n\n      this.isLuxonDateTime = true;\n    } // CONSTRUCT\n\n    /**\n     * Create a local DateTime\n     * @param {number} [year] - The calendar year. If omitted (as in, call `local()` with no arguments), the current time will be used\n     * @param {number} [month=1] - The month, 1-indexed\n     * @param {number} [day=1] - The day of the month\n     * @param {number} [hour=0] - The hour of the day, in 24-hour time\n     * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59\n     * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59\n     * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999\n     * @example DateTime.local()                            //~> now\n     * @example DateTime.local(2017)                        //~> 2017-01-01T00:00:00\n     * @example DateTime.local(2017, 3)                     //~> 2017-03-01T00:00:00\n     * @example DateTime.local(2017, 3, 12)                 //~> 2017-03-12T00:00:00\n     * @example DateTime.local(2017, 3, 12, 5)              //~> 2017-03-12T05:00:00\n     * @example DateTime.local(2017, 3, 12, 5, 45)          //~> 2017-03-12T05:45:00\n     * @example DateTime.local(2017, 3, 12, 5, 45, 10)      //~> 2017-03-12T05:45:10\n     * @example DateTime.local(2017, 3, 12, 5, 45, 10, 765) //~> 2017-03-12T05:45:10.765\n     * @return {DateTime}\n     */\n\n\n    DateTime.local = function local(year, month, day, hour, minute, second, millisecond) {\n      if (isUndefined(year)) {\n        return new DateTime({\n          ts: Settings.now()\n        });\n      } else {\n        return quickDT({\n          year: year,\n          month: month,\n          day: day,\n          hour: hour,\n          minute: minute,\n          second: second,\n          millisecond: millisecond\n        }, Settings.defaultZone);\n      }\n    }\n    /**\n     * Create a DateTime in UTC\n     * @param {number} [year] - The calendar year. If omitted (as in, call `utc()` with no arguments), the current time will be used\n     * @param {number} [month=1] - The month, 1-indexed\n     * @param {number} [day=1] - The day of the month\n     * @param {number} [hour=0] - The hour of the day, in 24-hour time\n     * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59\n     * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59\n     * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999\n     * @example DateTime.utc()                            //~> now\n     * @example DateTime.utc(2017)                        //~> 2017-01-01T00:00:00Z\n     * @example DateTime.utc(2017, 3)                     //~> 2017-03-01T00:00:00Z\n     * @example DateTime.utc(2017, 3, 12)                 //~> 2017-03-12T00:00:00Z\n     * @example DateTime.utc(2017, 3, 12, 5)              //~> 2017-03-12T05:00:00Z\n     * @example DateTime.utc(2017, 3, 12, 5, 45)          //~> 2017-03-12T05:45:00Z\n     * @example DateTime.utc(2017, 3, 12, 5, 45, 10)      //~> 2017-03-12T05:45:10Z\n     * @example DateTime.utc(2017, 3, 12, 5, 45, 10, 765) //~> 2017-03-12T05:45:10.765Z\n     * @return {DateTime}\n     */\n    ;\n\n    DateTime.utc = function utc(year, month, day, hour, minute, second, millisecond) {\n      if (isUndefined(year)) {\n        return new DateTime({\n          ts: Settings.now(),\n          zone: FixedOffsetZone.utcInstance\n        });\n      } else {\n        return quickDT({\n          year: year,\n          month: month,\n          day: day,\n          hour: hour,\n          minute: minute,\n          second: second,\n          millisecond: millisecond\n        }, FixedOffsetZone.utcInstance);\n      }\n    }\n    /**\n     * Create a DateTime from a Javascript Date object. Uses the default zone.\n     * @param {Date} date - a Javascript Date object\n     * @param {Object} options - configuration options for the DateTime\n     * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n     * @return {DateTime}\n     */\n    ;\n\n    DateTime.fromJSDate = function fromJSDate(date, options) {\n      if (options === void 0) {\n        options = {};\n      }\n\n      var ts = isDate(date) ? date.valueOf() : NaN;\n\n      if (Number.isNaN(ts)) {\n        return DateTime.invalid(\"invalid input\");\n      }\n\n      var zoneToUse = normalizeZone(options.zone, Settings.defaultZone);\n\n      if (!zoneToUse.isValid) {\n        return DateTime.invalid(unsupportedZone(zoneToUse));\n      }\n\n      return new DateTime({\n        ts: ts,\n        zone: zoneToUse,\n        loc: Locale.fromObject(options)\n      });\n    }\n    /**\n     * Create a DateTime from a number of milliseconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone.\n     * @param {number} milliseconds - a number of milliseconds since 1970 UTC\n     * @param {Object} options - configuration options for the DateTime\n     * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n     * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n     * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance\n     * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance\n     * @return {DateTime}\n     */\n    ;\n\n    DateTime.fromMillis = function fromMillis(milliseconds, options) {\n      if (options === void 0) {\n        options = {};\n      }\n\n      if (!isNumber(milliseconds)) {\n        throw new InvalidArgumentError(\"fromMillis requires a numerical input, but received a \" + typeof milliseconds + \" with value \" + milliseconds);\n      } else if (milliseconds < -MAX_DATE || milliseconds > MAX_DATE) {\n        // this isn't perfect because because we can still end up out of range because of additional shifting, but it's a start\n        return DateTime.invalid(\"Timestamp out of range\");\n      } else {\n        return new DateTime({\n          ts: milliseconds,\n          zone: normalizeZone(options.zone, Settings.defaultZone),\n          loc: Locale.fromObject(options)\n        });\n      }\n    }\n    /**\n     * Create a DateTime from a number of seconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone.\n     * @param {number} seconds - a number of seconds since 1970 UTC\n     * @param {Object} options - configuration options for the DateTime\n     * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n     * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n     * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance\n     * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance\n     * @return {DateTime}\n     */\n    ;\n\n    DateTime.fromSeconds = function fromSeconds(seconds, options) {\n      if (options === void 0) {\n        options = {};\n      }\n\n      if (!isNumber(seconds)) {\n        throw new InvalidArgumentError(\"fromSeconds requires a numerical input\");\n      } else {\n        return new DateTime({\n          ts: seconds * 1000,\n          zone: normalizeZone(options.zone, Settings.defaultZone),\n          loc: Locale.fromObject(options)\n        });\n      }\n    }\n    /**\n     * Create a DateTime from a Javascript object with keys like 'year' and 'hour' with reasonable defaults.\n     * @param {Object} obj - the object to create the DateTime from\n     * @param {number} obj.year - a year, such as 1987\n     * @param {number} obj.month - a month, 1-12\n     * @param {number} obj.day - a day of the month, 1-31, depending on the month\n     * @param {number} obj.ordinal - day of the year, 1-365 or 366\n     * @param {number} obj.weekYear - an ISO week year\n     * @param {number} obj.weekNumber - an ISO week number, between 1 and 52 or 53, depending on the year\n     * @param {number} obj.weekday - an ISO weekday, 1-7, where 1 is Monday and 7 is Sunday\n     * @param {number} obj.hour - hour of the day, 0-23\n     * @param {number} obj.minute - minute of the hour, 0-59\n     * @param {number} obj.second - second of the minute, 0-59\n     * @param {number} obj.millisecond - millisecond of the second, 0-999\n     * @param {string|Zone} [obj.zone='local'] - interpret the numbers in the context of a particular zone. Can take any value taken as the first argument to setZone()\n     * @param {string} [obj.locale='system's locale'] - a locale to set on the resulting DateTime instance\n     * @param {string} obj.outputCalendar - the output calendar to set on the resulting DateTime instance\n     * @param {string} obj.numberingSystem - the numbering system to set on the resulting DateTime instance\n     * @example DateTime.fromObject({ year: 1982, month: 5, day: 25}).toISODate() //=> '1982-05-25'\n     * @example DateTime.fromObject({ year: 1982 }).toISODate() //=> '1982-01-01'\n     * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }) //~> today at 10:26:06\n     * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6, zone: 'utc' }),\n     * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6, zone: 'local' })\n     * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6, zone: 'America/New_York' })\n     * @example DateTime.fromObject({ weekYear: 2016, weekNumber: 2, weekday: 3 }).toISODate() //=> '2016-01-13'\n     * @return {DateTime}\n     */\n    ;\n\n    DateTime.fromObject = function fromObject(obj) {\n      var zoneToUse = normalizeZone(obj.zone, Settings.defaultZone);\n\n      if (!zoneToUse.isValid) {\n        return DateTime.invalid(unsupportedZone(zoneToUse));\n      }\n\n      var tsNow = Settings.now(),\n          offsetProvis = zoneToUse.offset(tsNow),\n          normalized = normalizeObject(obj, normalizeUnit, [\"zone\", \"locale\", \"outputCalendar\", \"numberingSystem\"]),\n          containsOrdinal = !isUndefined(normalized.ordinal),\n          containsGregorYear = !isUndefined(normalized.year),\n          containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day),\n          containsGregor = containsGregorYear || containsGregorMD,\n          definiteWeekDef = normalized.weekYear || normalized.weekNumber,\n          loc = Locale.fromObject(obj); // cases:\n      // just a weekday -> this week's instance of that weekday, no worries\n      // (gregorian data or ordinal) + (weekYear or weekNumber) -> error\n      // (gregorian month or day) + ordinal -> error\n      // otherwise just use weeks or ordinals or gregorian, depending on what's specified\n\n      if ((containsGregor || containsOrdinal) && definiteWeekDef) {\n        throw new ConflictingSpecificationError(\"Can't mix weekYear/weekNumber units with year/month/day or ordinals\");\n      }\n\n      if (containsGregorMD && containsOrdinal) {\n        throw new ConflictingSpecificationError(\"Can't mix ordinal dates with month/day\");\n      }\n\n      var useWeekData = definiteWeekDef || normalized.weekday && !containsGregor; // configure ourselves to deal with gregorian dates or week stuff\n\n      var units,\n          defaultValues,\n          objNow = tsToObj(tsNow, offsetProvis);\n\n      if (useWeekData) {\n        units = orderedWeekUnits;\n        defaultValues = defaultWeekUnitValues;\n        objNow = gregorianToWeek(objNow);\n      } else if (containsOrdinal) {\n        units = orderedOrdinalUnits;\n        defaultValues = defaultOrdinalUnitValues;\n        objNow = gregorianToOrdinal(objNow);\n      } else {\n        units = orderedUnits$1;\n        defaultValues = defaultUnitValues;\n      } // set default values for missing stuff\n\n\n      var foundFirst = false;\n\n      for (var _iterator3 = _createForOfIteratorHelperLoose(units), _step3; !(_step3 = _iterator3()).done;) {\n        var u = _step3.value;\n        var v = normalized[u];\n\n        if (!isUndefined(v)) {\n          foundFirst = true;\n        } else if (foundFirst) {\n          normalized[u] = defaultValues[u];\n        } else {\n          normalized[u] = objNow[u];\n        }\n      } // make sure the values we have are in range\n\n\n      var higherOrderInvalid = useWeekData ? hasInvalidWeekData(normalized) : containsOrdinal ? hasInvalidOrdinalData(normalized) : hasInvalidGregorianData(normalized),\n          invalid = higherOrderInvalid || hasInvalidTimeData(normalized);\n\n      if (invalid) {\n        return DateTime.invalid(invalid);\n      } // compute the actual time\n\n\n      var gregorian = useWeekData ? weekToGregorian(normalized) : containsOrdinal ? ordinalToGregorian(normalized) : normalized,\n          _objToTS2 = objToTS(gregorian, offsetProvis, zoneToUse),\n          tsFinal = _objToTS2[0],\n          offsetFinal = _objToTS2[1],\n          inst = new DateTime({\n        ts: tsFinal,\n        zone: zoneToUse,\n        o: offsetFinal,\n        loc: loc\n      }); // gregorian data + weekday serves only to validate\n\n\n      if (normalized.weekday && containsGregor && obj.weekday !== inst.weekday) {\n        return DateTime.invalid(\"mismatched weekday\", \"you can't specify both a weekday of \" + normalized.weekday + \" and a date of \" + inst.toISO());\n      }\n\n      return inst;\n    }\n    /**\n     * Create a DateTime from an ISO 8601 string\n     * @param {string} text - the ISO string\n     * @param {Object} opts - options to affect the creation\n     * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the time to this zone\n     * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one\n     * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n     * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n     * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n     * @example DateTime.fromISO('2016-05-25T09:08:34.123')\n     * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00')\n     * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00', {setZone: true})\n     * @example DateTime.fromISO('2016-05-25T09:08:34.123', {zone: 'utc'})\n     * @example DateTime.fromISO('2016-W05-4')\n     * @return {DateTime}\n     */\n    ;\n\n    DateTime.fromISO = function fromISO(text, opts) {\n      if (opts === void 0) {\n        opts = {};\n      }\n\n      var _parseISODate = parseISODate(text),\n          vals = _parseISODate[0],\n          parsedZone = _parseISODate[1];\n\n      return parseDataToDateTime(vals, parsedZone, opts, \"ISO 8601\", text);\n    }\n    /**\n     * Create a DateTime from an RFC 2822 string\n     * @param {string} text - the RFC 2822 string\n     * @param {Object} opts - options to affect the creation\n     * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since the offset is always specified in the string itself, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in.\n     * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one\n     * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n     * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n     * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n     * @example DateTime.fromRFC2822('25 Nov 2016 13:23:12 GMT')\n     * @example DateTime.fromRFC2822('Fri, 25 Nov 2016 13:23:12 +0600')\n     * @example DateTime.fromRFC2822('25 Nov 2016 13:23 Z')\n     * @return {DateTime}\n     */\n    ;\n\n    DateTime.fromRFC2822 = function fromRFC2822(text, opts) {\n      if (opts === void 0) {\n        opts = {};\n      }\n\n      var _parseRFC2822Date = parseRFC2822Date(text),\n          vals = _parseRFC2822Date[0],\n          parsedZone = _parseRFC2822Date[1];\n\n      return parseDataToDateTime(vals, parsedZone, opts, \"RFC 2822\", text);\n    }\n    /**\n     * Create a DateTime from an HTTP header date\n     * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1\n     * @param {string} text - the HTTP header date\n     * @param {Object} opts - options to affect the creation\n     * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since HTTP dates are always in UTC, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in.\n     * @param {boolean} [opts.setZone=false] - override the zone with the fixed-offset zone specified in the string. For HTTP dates, this is always UTC, so this option is equivalent to setting the `zone` option to 'utc', but this option is included for consistency with similar methods.\n     * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n     * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n     * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n     * @example DateTime.fromHTTP('Sun, 06 Nov 1994 08:49:37 GMT')\n     * @example DateTime.fromHTTP('Sunday, 06-Nov-94 08:49:37 GMT')\n     * @example DateTime.fromHTTP('Sun Nov  6 08:49:37 1994')\n     * @return {DateTime}\n     */\n    ;\n\n    DateTime.fromHTTP = function fromHTTP(text, opts) {\n      if (opts === void 0) {\n        opts = {};\n      }\n\n      var _parseHTTPDate = parseHTTPDate(text),\n          vals = _parseHTTPDate[0],\n          parsedZone = _parseHTTPDate[1];\n\n      return parseDataToDateTime(vals, parsedZone, opts, \"HTTP\", opts);\n    }\n    /**\n     * Create a DateTime from an input string and format string.\n     * Defaults to en-US if no locale has been specified, regardless of the system's locale.\n     * @see https://moment.github.io/luxon/docs/manual/parsing.html#table-of-tokens\n     * @param {string} text - the string to parse\n     * @param {string} fmt - the format the string is expected to be in (see the link below for the formats)\n     * @param {Object} opts - options to affect the creation\n     * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone\n     * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one\n     * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale\n     * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system\n     * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n     * @return {DateTime}\n     */\n    ;\n\n    DateTime.fromFormat = function fromFormat(text, fmt, opts) {\n      if (opts === void 0) {\n        opts = {};\n      }\n\n      if (isUndefined(text) || isUndefined(fmt)) {\n        throw new InvalidArgumentError(\"fromFormat requires an input string and a format\");\n      }\n\n      var _opts = opts,\n          _opts$locale = _opts.locale,\n          locale = _opts$locale === void 0 ? null : _opts$locale,\n          _opts$numberingSystem = _opts.numberingSystem,\n          numberingSystem = _opts$numberingSystem === void 0 ? null : _opts$numberingSystem,\n          localeToUse = Locale.fromOpts({\n        locale: locale,\n        numberingSystem: numberingSystem,\n        defaultToEN: true\n      }),\n          _parseFromTokens = parseFromTokens(localeToUse, text, fmt),\n          vals = _parseFromTokens[0],\n          parsedZone = _parseFromTokens[1],\n          invalid = _parseFromTokens[2];\n\n      if (invalid) {\n        return DateTime.invalid(invalid);\n      } else {\n        return parseDataToDateTime(vals, parsedZone, opts, \"format \" + fmt, text);\n      }\n    }\n    /**\n     * @deprecated use fromFormat instead\n     */\n    ;\n\n    DateTime.fromString = function fromString(text, fmt, opts) {\n      if (opts === void 0) {\n        opts = {};\n      }\n\n      return DateTime.fromFormat(text, fmt, opts);\n    }\n    /**\n     * Create a DateTime from a SQL date, time, or datetime\n     * Defaults to en-US if no locale has been specified, regardless of the system's locale\n     * @param {string} text - the string to parse\n     * @param {Object} opts - options to affect the creation\n     * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone\n     * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one\n     * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale\n     * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system\n     * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n     * @example DateTime.fromSQL('2017-05-15')\n     * @example DateTime.fromSQL('2017-05-15 09:12:34')\n     * @example DateTime.fromSQL('2017-05-15 09:12:34.342')\n     * @example DateTime.fromSQL('2017-05-15 09:12:34.342+06:00')\n     * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles')\n     * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles', { setZone: true })\n     * @example DateTime.fromSQL('2017-05-15 09:12:34.342', { zone: 'America/Los_Angeles' })\n     * @example DateTime.fromSQL('09:12:34.342')\n     * @return {DateTime}\n     */\n    ;\n\n    DateTime.fromSQL = function fromSQL(text, opts) {\n      if (opts === void 0) {\n        opts = {};\n      }\n\n      var _parseSQL = parseSQL(text),\n          vals = _parseSQL[0],\n          parsedZone = _parseSQL[1];\n\n      return parseDataToDateTime(vals, parsedZone, opts, \"SQL\", text);\n    }\n    /**\n     * Create an invalid DateTime.\n     * @param {string} reason - simple string of why this DateTime is invalid. Should not contain parameters or anything else data-dependent\n     * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n     * @return {DateTime}\n     */\n    ;\n\n    DateTime.invalid = function invalid(reason, explanation) {\n      if (explanation === void 0) {\n        explanation = null;\n      }\n\n      if (!reason) {\n        throw new InvalidArgumentError(\"need to specify a reason the DateTime is invalid\");\n      }\n\n      var invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n      if (Settings.throwOnInvalid) {\n        throw new InvalidDateTimeError(invalid);\n      } else {\n        return new DateTime({\n          invalid: invalid\n        });\n      }\n    }\n    /**\n     * Check if an object is a DateTime. Works across context boundaries\n     * @param {object} o\n     * @return {boolean}\n     */\n    ;\n\n    DateTime.isDateTime = function isDateTime(o) {\n      return o && o.isLuxonDateTime || false;\n    } // INFO\n\n    /**\n     * Get the value of unit.\n     * @param {string} unit - a unit such as 'minute' or 'day'\n     * @example DateTime.local(2017, 7, 4).get('month'); //=> 7\n     * @example DateTime.local(2017, 7, 4).get('day'); //=> 4\n     * @return {number}\n     */\n    ;\n\n    var _proto = DateTime.prototype;\n\n    _proto.get = function get(unit) {\n      return this[unit];\n    }\n    /**\n     * Returns whether the DateTime is valid. Invalid DateTimes occur when:\n     * * The DateTime was created from invalid calendar information, such as the 13th month or February 30\n     * * The DateTime was created by an operation on another invalid date\n     * @type {boolean}\n     */\n    ;\n\n    /**\n     * Returns the resolved Intl options for this DateTime.\n     * This is useful in understanding the behavior of formatting methods\n     * @param {Object} opts - the same options as toLocaleString\n     * @return {Object}\n     */\n    _proto.resolvedLocaleOpts = function resolvedLocaleOpts(opts) {\n      if (opts === void 0) {\n        opts = {};\n      }\n\n      var _Formatter$create$res = Formatter.create(this.loc.clone(opts), opts).resolvedOptions(this),\n          locale = _Formatter$create$res.locale,\n          numberingSystem = _Formatter$create$res.numberingSystem,\n          calendar = _Formatter$create$res.calendar;\n\n      return {\n        locale: locale,\n        numberingSystem: numberingSystem,\n        outputCalendar: calendar\n      };\n    } // TRANSFORM\n\n    /**\n     * \"Set\" the DateTime's zone to UTC. Returns a newly-constructed DateTime.\n     *\n     * Equivalent to {@link setZone}('utc')\n     * @param {number} [offset=0] - optionally, an offset from UTC in minutes\n     * @param {Object} [opts={}] - options to pass to `setZone()`\n     * @return {DateTime}\n     */\n    ;\n\n    _proto.toUTC = function toUTC(offset, opts) {\n      if (offset === void 0) {\n        offset = 0;\n      }\n\n      if (opts === void 0) {\n        opts = {};\n      }\n\n      return this.setZone(FixedOffsetZone.instance(offset), opts);\n    }\n    /**\n     * \"Set\" the DateTime's zone to the host's local zone. Returns a newly-constructed DateTime.\n     *\n     * Equivalent to `setZone('local')`\n     * @return {DateTime}\n     */\n    ;\n\n    _proto.toLocal = function toLocal() {\n      return this.setZone(Settings.defaultZone);\n    }\n    /**\n     * \"Set\" the DateTime's zone to specified zone. Returns a newly-constructed DateTime.\n     *\n     * By default, the setter keeps the underlying time the same (as in, the same timestamp), but the new instance will report different local times and consider DSTs when making computations, as with {@link plus}. You may wish to use {@link toLocal} and {@link toUTC} which provide simple convenience wrappers for commonly used zones.\n     * @param {string|Zone} [zone='local'] - a zone identifier. As a string, that can be any IANA zone supported by the host environment, or a fixed-offset name of the form 'UTC+3', or the strings 'local' or 'utc'. You may also supply an instance of a {@link Zone} class.\n     * @param {Object} opts - options\n     * @param {boolean} [opts.keepLocalTime=false] - If true, adjust the underlying time so that the local time stays the same, but in the target zone. You should rarely need this.\n     * @return {DateTime}\n     */\n    ;\n\n    _proto.setZone = function setZone(zone, _temp) {\n      var _ref3 = _temp === void 0 ? {} : _temp,\n          _ref3$keepLocalTime = _ref3.keepLocalTime,\n          keepLocalTime = _ref3$keepLocalTime === void 0 ? false : _ref3$keepLocalTime,\n          _ref3$keepCalendarTim = _ref3.keepCalendarTime,\n          keepCalendarTime = _ref3$keepCalendarTim === void 0 ? false : _ref3$keepCalendarTim;\n\n      zone = normalizeZone(zone, Settings.defaultZone);\n\n      if (zone.equals(this.zone)) {\n        return this;\n      } else if (!zone.isValid) {\n        return DateTime.invalid(unsupportedZone(zone));\n      } else {\n        var newTS = this.ts;\n\n        if (keepLocalTime || keepCalendarTime) {\n          var offsetGuess = zone.offset(this.ts);\n          var asObj = this.toObject();\n\n          var _objToTS3 = objToTS(asObj, offsetGuess, zone);\n\n          newTS = _objToTS3[0];\n        }\n\n        return clone$1(this, {\n          ts: newTS,\n          zone: zone\n        });\n      }\n    }\n    /**\n     * \"Set\" the locale, numberingSystem, or outputCalendar. Returns a newly-constructed DateTime.\n     * @param {Object} properties - the properties to set\n     * @example DateTime.local(2017, 5, 25).reconfigure({ locale: 'en-GB' })\n     * @return {DateTime}\n     */\n    ;\n\n    _proto.reconfigure = function reconfigure(_temp2) {\n      var _ref4 = _temp2 === void 0 ? {} : _temp2,\n          locale = _ref4.locale,\n          numberingSystem = _ref4.numberingSystem,\n          outputCalendar = _ref4.outputCalendar;\n\n      var loc = this.loc.clone({\n        locale: locale,\n        numberingSystem: numberingSystem,\n        outputCalendar: outputCalendar\n      });\n      return clone$1(this, {\n        loc: loc\n      });\n    }\n    /**\n     * \"Set\" the locale. Returns a newly-constructed DateTime.\n     * Just a convenient alias for reconfigure({ locale })\n     * @example DateTime.local(2017, 5, 25).setLocale('en-GB')\n     * @return {DateTime}\n     */\n    ;\n\n    _proto.setLocale = function setLocale(locale) {\n      return this.reconfigure({\n        locale: locale\n      });\n    }\n    /**\n     * \"Set\" the values of specified units. Returns a newly-constructed DateTime.\n     * You can only set units with this method; for \"setting\" metadata, see {@link reconfigure} and {@link setZone}.\n     * @param {Object} values - a mapping of units to numbers\n     * @example dt.set({ year: 2017 })\n     * @example dt.set({ hour: 8, minute: 30 })\n     * @example dt.set({ weekday: 5 })\n     * @example dt.set({ year: 2005, ordinal: 234 })\n     * @return {DateTime}\n     */\n    ;\n\n    _proto.set = function set(values) {\n      if (!this.isValid) return this;\n      var normalized = normalizeObject(values, normalizeUnit, []),\n          settingWeekStuff = !isUndefined(normalized.weekYear) || !isUndefined(normalized.weekNumber) || !isUndefined(normalized.weekday);\n      var mixed;\n\n      if (settingWeekStuff) {\n        mixed = weekToGregorian(Object.assign(gregorianToWeek(this.c), normalized));\n      } else if (!isUndefined(normalized.ordinal)) {\n        mixed = ordinalToGregorian(Object.assign(gregorianToOrdinal(this.c), normalized));\n      } else {\n        mixed = Object.assign(this.toObject(), normalized); // if we didn't set the day but we ended up on an overflow date,\n        // use the last day of the right month\n\n        if (isUndefined(normalized.day)) {\n          mixed.day = Math.min(daysInMonth(mixed.year, mixed.month), mixed.day);\n        }\n      }\n\n      var _objToTS4 = objToTS(mixed, this.o, this.zone),\n          ts = _objToTS4[0],\n          o = _objToTS4[1];\n\n      return clone$1(this, {\n        ts: ts,\n        o: o\n      });\n    }\n    /**\n     * Add a period of time to this DateTime and return the resulting DateTime\n     *\n     * Adding hours, minutes, seconds, or milliseconds increases the timestamp by the right number of milliseconds. Adding days, months, or years shifts the calendar, accounting for DSTs and leap years along the way. Thus, `dt.plus({ hours: 24 })` may result in a different time than `dt.plus({ days: 1 })` if there's a DST shift in between.\n     * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n     * @example DateTime.local().plus(123) //~> in 123 milliseconds\n     * @example DateTime.local().plus({ minutes: 15 }) //~> in 15 minutes\n     * @example DateTime.local().plus({ days: 1 }) //~> this time tomorrow\n     * @example DateTime.local().plus({ days: -1 }) //~> this time yesterday\n     * @example DateTime.local().plus({ hours: 3, minutes: 13 }) //~> in 3 hr, 13 min\n     * @example DateTime.local().plus(Duration.fromObject({ hours: 3, minutes: 13 })) //~> in 3 hr, 13 min\n     * @return {DateTime}\n     */\n    ;\n\n    _proto.plus = function plus(duration) {\n      if (!this.isValid) return this;\n      var dur = friendlyDuration(duration);\n      return clone$1(this, adjustTime(this, dur));\n    }\n    /**\n     * Subtract a period of time to this DateTime and return the resulting DateTime\n     * See {@link plus}\n     * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n     @return {DateTime}\n    */\n    ;\n\n    _proto.minus = function minus(duration) {\n      if (!this.isValid) return this;\n      var dur = friendlyDuration(duration).negate();\n      return clone$1(this, adjustTime(this, dur));\n    }\n    /**\n     * \"Set\" this DateTime to the beginning of a unit of time.\n     * @param {string} unit - The unit to go to the beginning of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'.\n     * @example DateTime.local(2014, 3, 3).startOf('month').toISODate(); //=> '2014-03-01'\n     * @example DateTime.local(2014, 3, 3).startOf('year').toISODate(); //=> '2014-01-01'\n     * @example DateTime.local(2014, 3, 3, 5, 30).startOf('day').toISOTime(); //=> '00:00.000-05:00'\n     * @example DateTime.local(2014, 3, 3, 5, 30).startOf('hour').toISOTime(); //=> '05:00:00.000-05:00'\n     * @return {DateTime}\n     */\n    ;\n\n    _proto.startOf = function startOf(unit) {\n      if (!this.isValid) return this;\n      var o = {},\n          normalizedUnit = Duration.normalizeUnit(unit);\n\n      switch (normalizedUnit) {\n        case \"years\":\n          o.month = 1;\n        // falls through\n\n        case \"quarters\":\n        case \"months\":\n          o.day = 1;\n        // falls through\n\n        case \"weeks\":\n        case \"days\":\n          o.hour = 0;\n        // falls through\n\n        case \"hours\":\n          o.minute = 0;\n        // falls through\n\n        case \"minutes\":\n          o.second = 0;\n        // falls through\n\n        case \"seconds\":\n          o.millisecond = 0;\n          break;\n        // no default, invalid units throw in normalizeUnit()\n      }\n\n      if (normalizedUnit === \"weeks\") {\n        o.weekday = 1;\n      }\n\n      if (normalizedUnit === \"quarters\") {\n        var q = Math.ceil(this.month / 3);\n        o.month = (q - 1) * 3 + 1;\n      }\n\n      return this.set(o);\n    }\n    /**\n     * \"Set\" this DateTime to the end (meaning the last millisecond) of a unit of time\n     * @param {string} unit - The unit to go to the end of. Can be 'year', 'month', 'day', 'hour', 'minute', 'second', or 'millisecond'.\n     * @example DateTime.local(2014, 3, 3).endOf('month').toISO(); //=> '2014-03-31T23:59:59.999-05:00'\n     * @example DateTime.local(2014, 3, 3).endOf('year').toISO(); //=> '2014-12-31T23:59:59.999-05:00'\n     * @example DateTime.local(2014, 3, 3, 5, 30).endOf('day').toISO(); //=> '2014-03-03T23:59:59.999-05:00'\n     * @example DateTime.local(2014, 3, 3, 5, 30).endOf('hour').toISO(); //=> '2014-03-03T05:59:59.999-05:00'\n     * @return {DateTime}\n     */\n    ;\n\n    _proto.endOf = function endOf(unit) {\n      var _this$plus;\n\n      return this.isValid ? this.plus((_this$plus = {}, _this$plus[unit] = 1, _this$plus)).startOf(unit).minus(1) : this;\n    } // OUTPUT\n\n    /**\n     * Returns a string representation of this DateTime formatted according to the specified format string.\n     * **You may not want this.** See {@link toLocaleString} for a more flexible formatting tool. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/docs/manual/formatting.html#table-of-tokens).\n     * Defaults to en-US if no locale has been specified, regardless of the system's locale.\n     * @see https://moment.github.io/luxon/docs/manual/formatting.html#table-of-tokens\n     * @param {string} fmt - the format string\n     * @param {Object} opts - opts to override the configuration options\n     * @example DateTime.local().toFormat('yyyy LLL dd') //=> '2017 Apr 22'\n     * @example DateTime.local().setLocale('fr').toFormat('yyyy LLL dd') //=> '2017 avr. 22'\n     * @example DateTime.local().toFormat('yyyy LLL dd', { locale: \"fr\" }) //=> '2017 avr. 22'\n     * @example DateTime.local().toFormat(\"HH 'hours and' mm 'minutes'\") //=> '20 hours and 55 minutes'\n     * @return {string}\n     */\n    ;\n\n    _proto.toFormat = function toFormat(fmt, opts) {\n      if (opts === void 0) {\n        opts = {};\n      }\n\n      return this.isValid ? Formatter.create(this.loc.redefaultToEN(opts)).formatDateTimeFromString(this, fmt) : INVALID$2;\n    }\n    /**\n     * Returns a localized string representing this date. Accepts the same options as the Intl.DateTimeFormat constructor and any presets defined by Luxon, such as `DateTime.DATE_FULL` or `DateTime.TIME_SIMPLE`.\n     * The exact behavior of this method is browser-specific, but in general it will return an appropriate representation\n     * of the DateTime in the assigned locale.\n     * Defaults to the system's locale if no locale has been specified\n     * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n     * @param opts {Object} - Intl.DateTimeFormat constructor options and configuration options\n     * @example DateTime.local().toLocaleString(); //=> 4/20/2017\n     * @example DateTime.local().setLocale('en-gb').toLocaleString(); //=> '20/04/2017'\n     * @example DateTime.local().toLocaleString({ locale: 'en-gb' }); //=> '20/04/2017'\n     * @example DateTime.local().toLocaleString(DateTime.DATE_FULL); //=> 'April 20, 2017'\n     * @example DateTime.local().toLocaleString(DateTime.TIME_SIMPLE); //=> '11:32 AM'\n     * @example DateTime.local().toLocaleString(DateTime.DATETIME_SHORT); //=> '4/20/2017, 11:32 AM'\n     * @example DateTime.local().toLocaleString({ weekday: 'long', month: 'long', day: '2-digit' }); //=> 'Thursday, April 20'\n     * @example DateTime.local().toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> 'Thu, Apr 20, 11:27 AM'\n     * @example DateTime.local().toLocaleString({ hour: '2-digit', minute: '2-digit', hour12: false }); //=> '11:32'\n     * @return {string}\n     */\n    ;\n\n    _proto.toLocaleString = function toLocaleString(opts) {\n      if (opts === void 0) {\n        opts = DATE_SHORT;\n      }\n\n      return this.isValid ? Formatter.create(this.loc.clone(opts), opts).formatDateTime(this) : INVALID$2;\n    }\n    /**\n     * Returns an array of format \"parts\", meaning individual tokens along with metadata. This is allows callers to post-process individual sections of the formatted output.\n     * Defaults to the system's locale if no locale has been specified\n     * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/formatToParts\n     * @param opts {Object} - Intl.DateTimeFormat constructor options, same as `toLocaleString`.\n     * @example DateTime.local().toLocaleParts(); //=> [\n     *                                   //=>   { type: 'day', value: '25' },\n     *                                   //=>   { type: 'literal', value: '/' },\n     *                                   //=>   { type: 'month', value: '05' },\n     *                                   //=>   { type: 'literal', value: '/' },\n     *                                   //=>   { type: 'year', value: '1982' }\n     *                                   //=> ]\n     */\n    ;\n\n    _proto.toLocaleParts = function toLocaleParts(opts) {\n      if (opts === void 0) {\n        opts = {};\n      }\n\n      return this.isValid ? Formatter.create(this.loc.clone(opts), opts).formatDateTimeParts(this) : [];\n    }\n    /**\n     * Returns an ISO 8601-compliant string representation of this DateTime\n     * @param {Object} opts - options\n     * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n     * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n     * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n     * @param {string} [opts.format='extended'] - choose between the basic and extended format\n     * @example DateTime.utc(1982, 5, 25).toISO() //=> '1982-05-25T00:00:00.000Z'\n     * @example DateTime.local().toISO() //=> '2017-04-22T20:47:05.335-04:00'\n     * @example DateTime.local().toISO({ includeOffset: false }) //=> '2017-04-22T20:47:05.335'\n     * @example DateTime.local().toISO({ format: 'basic' }) //=> '20170422T204705.335-0400'\n     * @return {string}\n     */\n    ;\n\n    _proto.toISO = function toISO(opts) {\n      if (opts === void 0) {\n        opts = {};\n      }\n\n      if (!this.isValid) {\n        return null;\n      }\n\n      return this.toISODate(opts) + \"T\" + this.toISOTime(opts);\n    }\n    /**\n     * Returns an ISO 8601-compliant string representation of this DateTime's date component\n     * @param {Object} opts - options\n     * @param {string} [opts.format='extended'] - choose between the basic and extended format\n     * @example DateTime.utc(1982, 5, 25).toISODate() //=> '1982-05-25'\n     * @example DateTime.utc(1982, 5, 25).toISODate({ format: 'basic' }) //=> '19820525'\n     * @return {string}\n     */\n    ;\n\n    _proto.toISODate = function toISODate(_temp3) {\n      var _ref5 = _temp3 === void 0 ? {} : _temp3,\n          _ref5$format = _ref5.format,\n          format = _ref5$format === void 0 ? \"extended\" : _ref5$format;\n\n      var fmt = format === \"basic\" ? \"yyyyMMdd\" : \"yyyy-MM-dd\";\n\n      if (this.year > 9999) {\n        fmt = \"+\" + fmt;\n      }\n\n      return toTechFormat(this, fmt);\n    }\n    /**\n     * Returns an ISO 8601-compliant string representation of this DateTime's week date\n     * @example DateTime.utc(1982, 5, 25).toISOWeekDate() //=> '1982-W21-2'\n     * @return {string}\n     */\n    ;\n\n    _proto.toISOWeekDate = function toISOWeekDate() {\n      return toTechFormat(this, \"kkkk-'W'WW-c\");\n    }\n    /**\n     * Returns an ISO 8601-compliant string representation of this DateTime's time component\n     * @param {Object} opts - options\n     * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n     * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n     * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n     * @param {string} [opts.format='extended'] - choose between the basic and extended format\n     * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime() //=> '07:34:19.361Z'\n     * @example DateTime.utc().set({ hour: 7, minute: 34, seconds: 0, milliseconds: 0 }).toISOTime({ suppressSeconds: true }) //=> '07:34Z'\n     * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ format: 'basic' }) //=> '073419.361Z'\n     * @return {string}\n     */\n    ;\n\n    _proto.toISOTime = function toISOTime(_temp4) {\n      var _ref6 = _temp4 === void 0 ? {} : _temp4,\n          _ref6$suppressMillise = _ref6.suppressMilliseconds,\n          suppressMilliseconds = _ref6$suppressMillise === void 0 ? false : _ref6$suppressMillise,\n          _ref6$suppressSeconds = _ref6.suppressSeconds,\n          suppressSeconds = _ref6$suppressSeconds === void 0 ? false : _ref6$suppressSeconds,\n          _ref6$includeOffset = _ref6.includeOffset,\n          includeOffset = _ref6$includeOffset === void 0 ? true : _ref6$includeOffset,\n          _ref6$format = _ref6.format,\n          format = _ref6$format === void 0 ? \"extended\" : _ref6$format;\n\n      return toTechTimeFormat(this, {\n        suppressSeconds: suppressSeconds,\n        suppressMilliseconds: suppressMilliseconds,\n        includeOffset: includeOffset,\n        format: format\n      });\n    }\n    /**\n     * Returns an RFC 2822-compatible string representation of this DateTime, always in UTC\n     * @example DateTime.utc(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 +0000'\n     * @example DateTime.local(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 -0400'\n     * @return {string}\n     */\n    ;\n\n    _proto.toRFC2822 = function toRFC2822() {\n      return toTechFormat(this, \"EEE, dd LLL yyyy HH:mm:ss ZZZ\", false);\n    }\n    /**\n     * Returns a string representation of this DateTime appropriate for use in HTTP headers.\n     * Specifically, the string conforms to RFC 1123.\n     * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1\n     * @example DateTime.utc(2014, 7, 13).toHTTP() //=> 'Sun, 13 Jul 2014 00:00:00 GMT'\n     * @example DateTime.utc(2014, 7, 13, 19).toHTTP() //=> 'Sun, 13 Jul 2014 19:00:00 GMT'\n     * @return {string}\n     */\n    ;\n\n    _proto.toHTTP = function toHTTP() {\n      return toTechFormat(this.toUTC(), \"EEE, dd LLL yyyy HH:mm:ss 'GMT'\");\n    }\n    /**\n     * Returns a string representation of this DateTime appropriate for use in SQL Date\n     * @example DateTime.utc(2014, 7, 13).toSQLDate() //=> '2014-07-13'\n     * @return {string}\n     */\n    ;\n\n    _proto.toSQLDate = function toSQLDate() {\n      return toTechFormat(this, \"yyyy-MM-dd\");\n    }\n    /**\n     * Returns a string representation of this DateTime appropriate for use in SQL Time\n     * @param {Object} opts - options\n     * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset.\n     * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n     * @example DateTime.utc().toSQL() //=> '05:15:16.345'\n     * @example DateTime.local().toSQL() //=> '05:15:16.345 -04:00'\n     * @example DateTime.local().toSQL({ includeOffset: false }) //=> '05:15:16.345'\n     * @example DateTime.local().toSQL({ includeZone: false }) //=> '05:15:16.345 America/New_York'\n     * @return {string}\n     */\n    ;\n\n    _proto.toSQLTime = function toSQLTime(_temp5) {\n      var _ref7 = _temp5 === void 0 ? {} : _temp5,\n          _ref7$includeOffset = _ref7.includeOffset,\n          includeOffset = _ref7$includeOffset === void 0 ? true : _ref7$includeOffset,\n          _ref7$includeZone = _ref7.includeZone,\n          includeZone = _ref7$includeZone === void 0 ? false : _ref7$includeZone;\n\n      return toTechTimeFormat(this, {\n        includeOffset: includeOffset,\n        includeZone: includeZone,\n        spaceZone: true\n      });\n    }\n    /**\n     * Returns a string representation of this DateTime appropriate for use in SQL DateTime\n     * @param {Object} opts - options\n     * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset.\n     * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n     * @example DateTime.utc(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 Z'\n     * @example DateTime.local(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 -04:00'\n     * @example DateTime.local(2014, 7, 13).toSQL({ includeOffset: false }) //=> '2014-07-13 00:00:00.000'\n     * @example DateTime.local(2014, 7, 13).toSQL({ includeZone: true }) //=> '2014-07-13 00:00:00.000 America/New_York'\n     * @return {string}\n     */\n    ;\n\n    _proto.toSQL = function toSQL(opts) {\n      if (opts === void 0) {\n        opts = {};\n      }\n\n      if (!this.isValid) {\n        return null;\n      }\n\n      return this.toSQLDate() + \" \" + this.toSQLTime(opts);\n    }\n    /**\n     * Returns a string representation of this DateTime appropriate for debugging\n     * @return {string}\n     */\n    ;\n\n    _proto.toString = function toString() {\n      return this.isValid ? this.toISO() : INVALID$2;\n    }\n    /**\n     * Returns the epoch milliseconds of this DateTime. Alias of {@link toMillis}\n     * @return {number}\n     */\n    ;\n\n    _proto.valueOf = function valueOf() {\n      return this.toMillis();\n    }\n    /**\n     * Returns the epoch milliseconds of this DateTime.\n     * @return {number}\n     */\n    ;\n\n    _proto.toMillis = function toMillis() {\n      return this.isValid ? this.ts : NaN;\n    }\n    /**\n     * Returns the epoch seconds of this DateTime.\n     * @return {number}\n     */\n    ;\n\n    _proto.toSeconds = function toSeconds() {\n      return this.isValid ? this.ts / 1000 : NaN;\n    }\n    /**\n     * Returns an ISO 8601 representation of this DateTime appropriate for use in JSON.\n     * @return {string}\n     */\n    ;\n\n    _proto.toJSON = function toJSON() {\n      return this.toISO();\n    }\n    /**\n     * Returns a BSON serializable equivalent to this DateTime.\n     * @return {Date}\n     */\n    ;\n\n    _proto.toBSON = function toBSON() {\n      return this.toJSDate();\n    }\n    /**\n     * Returns a Javascript object with this DateTime's year, month, day, and so on.\n     * @param opts - options for generating the object\n     * @param {boolean} [opts.includeConfig=false] - include configuration attributes in the output\n     * @example DateTime.local().toObject() //=> { year: 2017, month: 4, day: 22, hour: 20, minute: 49, second: 42, millisecond: 268 }\n     * @return {Object}\n     */\n    ;\n\n    _proto.toObject = function toObject(opts) {\n      if (opts === void 0) {\n        opts = {};\n      }\n\n      if (!this.isValid) return {};\n      var base = Object.assign({}, this.c);\n\n      if (opts.includeConfig) {\n        base.outputCalendar = this.outputCalendar;\n        base.numberingSystem = this.loc.numberingSystem;\n        base.locale = this.loc.locale;\n      }\n\n      return base;\n    }\n    /**\n     * Returns a Javascript Date equivalent to this DateTime.\n     * @return {Date}\n     */\n    ;\n\n    _proto.toJSDate = function toJSDate() {\n      return new Date(this.isValid ? this.ts : NaN);\n    } // COMPARE\n\n    /**\n     * Return the difference between two DateTimes as a Duration.\n     * @param {DateTime} otherDateTime - the DateTime to compare this one to\n     * @param {string|string[]} [unit=['milliseconds']] - the unit or array of units (such as 'hours' or 'days') to include in the duration.\n     * @param {Object} opts - options that affect the creation of the Duration\n     * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n     * @example\n     * var i1 = DateTime.fromISO('1982-05-25T09:45'),\n     *     i2 = DateTime.fromISO('1983-10-14T10:30');\n     * i2.diff(i1).toObject() //=> { milliseconds: 43807500000 }\n     * i2.diff(i1, 'hours').toObject() //=> { hours: 12168.75 }\n     * i2.diff(i1, ['months', 'days']).toObject() //=> { months: 16, days: 19.03125 }\n     * i2.diff(i1, ['months', 'days', 'hours']).toObject() //=> { months: 16, days: 19, hours: 0.75 }\n     * @return {Duration}\n     */\n    ;\n\n    _proto.diff = function diff(otherDateTime, unit, opts) {\n      if (unit === void 0) {\n        unit = \"milliseconds\";\n      }\n\n      if (opts === void 0) {\n        opts = {};\n      }\n\n      if (!this.isValid || !otherDateTime.isValid) {\n        return Duration.invalid(this.invalid || otherDateTime.invalid, \"created by diffing an invalid DateTime\");\n      }\n\n      var durOpts = Object.assign({\n        locale: this.locale,\n        numberingSystem: this.numberingSystem\n      }, opts);\n\n      var units = maybeArray(unit).map(Duration.normalizeUnit),\n          otherIsLater = otherDateTime.valueOf() > this.valueOf(),\n          earlier = otherIsLater ? this : otherDateTime,\n          later = otherIsLater ? otherDateTime : this,\n          diffed = _diff(earlier, later, units, durOpts);\n\n      return otherIsLater ? diffed.negate() : diffed;\n    }\n    /**\n     * Return the difference between this DateTime and right now.\n     * See {@link diff}\n     * @param {string|string[]} [unit=['milliseconds']] - the unit or units units (such as 'hours' or 'days') to include in the duration\n     * @param {Object} opts - options that affect the creation of the Duration\n     * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n     * @return {Duration}\n     */\n    ;\n\n    _proto.diffNow = function diffNow(unit, opts) {\n      if (unit === void 0) {\n        unit = \"milliseconds\";\n      }\n\n      if (opts === void 0) {\n        opts = {};\n      }\n\n      return this.diff(DateTime.local(), unit, opts);\n    }\n    /**\n     * Return an Interval spanning between this DateTime and another DateTime\n     * @param {DateTime} otherDateTime - the other end point of the Interval\n     * @return {Interval}\n     */\n    ;\n\n    _proto.until = function until(otherDateTime) {\n      return this.isValid ? Interval.fromDateTimes(this, otherDateTime) : this;\n    }\n    /**\n     * Return whether this DateTime is in the same unit of time as another DateTime\n     * @param {DateTime} otherDateTime - the other DateTime\n     * @param {string} unit - the unit of time to check sameness on\n     * @example DateTime.local().hasSame(otherDT, 'day'); //~> true if both the same calendar day\n     * @return {boolean}\n     */\n    ;\n\n    _proto.hasSame = function hasSame(otherDateTime, unit) {\n      if (!this.isValid) return false;\n\n      if (unit === \"millisecond\") {\n        return this.valueOf() === otherDateTime.valueOf();\n      } else {\n        var inputMs = otherDateTime.valueOf();\n        return this.startOf(unit) <= inputMs && inputMs <= this.endOf(unit);\n      }\n    }\n    /**\n     * Equality check\n     * Two DateTimes are equal iff they represent the same millisecond, have the same zone and location, and are both valid.\n     * To compare just the millisecond values, use `+dt1 === +dt2`.\n     * @param {DateTime} other - the other DateTime\n     * @return {boolean}\n     */\n    ;\n\n    _proto.equals = function equals(other) {\n      return this.isValid && other.isValid && this.valueOf() === other.valueOf() && this.zone.equals(other.zone) && this.loc.equals(other.loc);\n    }\n    /**\n     * Returns a string representation of a this time relative to now, such as \"in two days\". Can only internationalize if your\n     * platform supports Intl.RelativeTimeFormat. Rounds down by default.\n     * @param {Object} options - options that affect the output\n     * @param {DateTime} [options.base=DateTime.local()] - the DateTime to use as the basis to which this time is compared. Defaults to now.\n     * @param {string} [options.style=\"long\"] - the style of units, must be \"long\", \"short\", or \"narrow\"\n     * @param {string} options.unit - use a specific unit; if omitted, the method will pick the unit. Use one of \"years\", \"quarters\", \"months\", \"weeks\", \"days\", \"hours\", \"minutes\", or \"seconds\"\n     * @param {boolean} [options.round=true] - whether to round the numbers in the output.\n     * @param {boolean} [options.padding=0] - padding in milliseconds. This allows you to round up the result if it fits inside the threshold. Don't use in combination with {round: false} because the decimal output will include the padding.\n     * @param {string} options.locale - override the locale of this DateTime\n     * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this\n     * @example DateTime.local().plus({ days: 1 }).toRelative() //=> \"in 1 day\"\n     * @example DateTime.local().setLocale(\"es\").toRelative({ days: 1 }) //=> \"dentro de 1 d\u00eda\"\n     * @example DateTime.local().plus({ days: 1 }).toRelative({ locale: \"fr\" }) //=> \"dans 23 heures\"\n     * @example DateTime.local().minus({ days: 2 }).toRelative() //=> \"2 days ago\"\n     * @example DateTime.local().minus({ days: 2 }).toRelative({ unit: \"hours\" }) //=> \"48 hours ago\"\n     * @example DateTime.local().minus({ hours: 36 }).toRelative({ round: false }) //=> \"1.5 days ago\"\n     */\n    ;\n\n    _proto.toRelative = function toRelative(options) {\n      if (options === void 0) {\n        options = {};\n      }\n\n      if (!this.isValid) return null;\n      var base = options.base || DateTime.fromObject({\n        zone: this.zone\n      }),\n          padding = options.padding ? this < base ? -options.padding : options.padding : 0;\n      return diffRelative(base, this.plus(padding), Object.assign(options, {\n        numeric: \"always\",\n        units: [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\"]\n      }));\n    }\n    /**\n     * Returns a string representation of this date relative to today, such as \"yesterday\" or \"next month\".\n     * Only internationalizes on platforms that supports Intl.RelativeTimeFormat.\n     * @param {Object} options - options that affect the output\n     * @param {DateTime} [options.base=DateTime.local()] - the DateTime to use as the basis to which this time is compared. Defaults to now.\n     * @param {string} options.locale - override the locale of this DateTime\n     * @param {string} options.unit - use a specific unit; if omitted, the method will pick the unit. Use one of \"years\", \"quarters\", \"months\", \"weeks\", or \"days\"\n     * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this\n     * @example DateTime.local().plus({ days: 1 }).toRelativeCalendar() //=> \"tomorrow\"\n     * @example DateTime.local().setLocale(\"es\").plus({ days: 1 }).toRelative() //=> \"\"ma\u00f1ana\"\n     * @example DateTime.local().plus({ days: 1 }).toRelativeCalendar({ locale: \"fr\" }) //=> \"demain\"\n     * @example DateTime.local().minus({ days: 2 }).toRelativeCalendar() //=> \"2 days ago\"\n     */\n    ;\n\n    _proto.toRelativeCalendar = function toRelativeCalendar(options) {\n      if (options === void 0) {\n        options = {};\n      }\n\n      if (!this.isValid) return null;\n      return diffRelative(options.base || DateTime.fromObject({\n        zone: this.zone\n      }), this, Object.assign(options, {\n        numeric: \"auto\",\n        units: [\"years\", \"months\", \"days\"],\n        calendary: true\n      }));\n    }\n    /**\n     * Return the min of several date times\n     * @param {...DateTime} dateTimes - the DateTimes from which to choose the minimum\n     * @return {DateTime} the min DateTime, or undefined if called with no argument\n     */\n    ;\n\n    DateTime.min = function min() {\n      for (var _len = arguments.length, dateTimes = new Array(_len), _key = 0; _key < _len; _key++) {\n        dateTimes[_key] = arguments[_key];\n      }\n\n      if (!dateTimes.every(DateTime.isDateTime)) {\n        throw new InvalidArgumentError(\"min requires all arguments be DateTimes\");\n      }\n\n      return bestBy(dateTimes, function (i) {\n        return i.valueOf();\n      }, Math.min);\n    }\n    /**\n     * Return the max of several date times\n     * @param {...DateTime} dateTimes - the DateTimes from which to choose the maximum\n     * @return {DateTime} the max DateTime, or undefined if called with no argument\n     */\n    ;\n\n    DateTime.max = function max() {\n      for (var _len2 = arguments.length, dateTimes = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        dateTimes[_key2] = arguments[_key2];\n      }\n\n      if (!dateTimes.every(DateTime.isDateTime)) {\n        throw new InvalidArgumentError(\"max requires all arguments be DateTimes\");\n      }\n\n      return bestBy(dateTimes, function (i) {\n        return i.valueOf();\n      }, Math.max);\n    } // MISC\n\n    /**\n     * Explain how a string would be parsed by fromFormat()\n     * @param {string} text - the string to parse\n     * @param {string} fmt - the format the string is expected to be in (see description)\n     * @param {Object} options - options taken by fromFormat()\n     * @return {Object}\n     */\n    ;\n\n    DateTime.fromFormatExplain = function fromFormatExplain(text, fmt, options) {\n      if (options === void 0) {\n        options = {};\n      }\n\n      var _options = options,\n          _options$locale = _options.locale,\n          locale = _options$locale === void 0 ? null : _options$locale,\n          _options$numberingSys = _options.numberingSystem,\n          numberingSystem = _options$numberingSys === void 0 ? null : _options$numberingSys,\n          localeToUse = Locale.fromOpts({\n        locale: locale,\n        numberingSystem: numberingSystem,\n        defaultToEN: true\n      });\n      return explainFromTokens(localeToUse, text, fmt);\n    }\n    /**\n     * @deprecated use fromFormatExplain instead\n     */\n    ;\n\n    DateTime.fromStringExplain = function fromStringExplain(text, fmt, options) {\n      if (options === void 0) {\n        options = {};\n      }\n\n      return DateTime.fromFormatExplain(text, fmt, options);\n    } // FORMAT PRESETS\n\n    /**\n     * {@link toLocaleString} format like 10/14/1983\n     * @type {Object}\n     */\n    ;\n\n    _createClass(DateTime, [{\n      key: \"isValid\",\n      get: function get() {\n        return this.invalid === null;\n      }\n      /**\n       * Returns an error code if this DateTime is invalid, or null if the DateTime is valid\n       * @type {string}\n       */\n\n    }, {\n      key: \"invalidReason\",\n      get: function get() {\n        return this.invalid ? this.invalid.reason : null;\n      }\n      /**\n       * Returns an explanation of why this DateTime became invalid, or null if the DateTime is valid\n       * @type {string}\n       */\n\n    }, {\n      key: \"invalidExplanation\",\n      get: function get() {\n        return this.invalid ? this.invalid.explanation : null;\n      }\n      /**\n       * Get the locale of a DateTime, such 'en-GB'. The locale is used when formatting the DateTime\n       *\n       * @type {string}\n       */\n\n    }, {\n      key: \"locale\",\n      get: function get() {\n        return this.isValid ? this.loc.locale : null;\n      }\n      /**\n       * Get the numbering system of a DateTime, such 'beng'. The numbering system is used when formatting the DateTime\n       *\n       * @type {string}\n       */\n\n    }, {\n      key: \"numberingSystem\",\n      get: function get() {\n        return this.isValid ? this.loc.numberingSystem : null;\n      }\n      /**\n       * Get the output calendar of a DateTime, such 'islamic'. The output calendar is used when formatting the DateTime\n       *\n       * @type {string}\n       */\n\n    }, {\n      key: \"outputCalendar\",\n      get: function get() {\n        return this.isValid ? this.loc.outputCalendar : null;\n      }\n      /**\n       * Get the time zone associated with this DateTime.\n       * @type {Zone}\n       */\n\n    }, {\n      key: \"zone\",\n      get: function get() {\n        return this._zone;\n      }\n      /**\n       * Get the name of the time zone.\n       * @type {string}\n       */\n\n    }, {\n      key: \"zoneName\",\n      get: function get() {\n        return this.isValid ? this.zone.name : null;\n      }\n      /**\n       * Get the year\n       * @example DateTime.local(2017, 5, 25).year //=> 2017\n       * @type {number}\n       */\n\n    }, {\n      key: \"year\",\n      get: function get() {\n        return this.isValid ? this.c.year : NaN;\n      }\n      /**\n       * Get the quarter\n       * @example DateTime.local(2017, 5, 25).quarter //=> 2\n       * @type {number}\n       */\n\n    }, {\n      key: \"quarter\",\n      get: function get() {\n        return this.isValid ? Math.ceil(this.c.month / 3) : NaN;\n      }\n      /**\n       * Get the month (1-12).\n       * @example DateTime.local(2017, 5, 25).month //=> 5\n       * @type {number}\n       */\n\n    }, {\n      key: \"month\",\n      get: function get() {\n        return this.isValid ? this.c.month : NaN;\n      }\n      /**\n       * Get the day of the month (1-30ish).\n       * @example DateTime.local(2017, 5, 25).day //=> 25\n       * @type {number}\n       */\n\n    }, {\n      key: \"day\",\n      get: function get() {\n        return this.isValid ? this.c.day : NaN;\n      }\n      /**\n       * Get the hour of the day (0-23).\n       * @example DateTime.local(2017, 5, 25, 9).hour //=> 9\n       * @type {number}\n       */\n\n    }, {\n      key: \"hour\",\n      get: function get() {\n        return this.isValid ? this.c.hour : NaN;\n      }\n      /**\n       * Get the minute of the hour (0-59).\n       * @example DateTime.local(2017, 5, 25, 9, 30).minute //=> 30\n       * @type {number}\n       */\n\n    }, {\n      key: \"minute\",\n      get: function get() {\n        return this.isValid ? this.c.minute : NaN;\n      }\n      /**\n       * Get the second of the minute (0-59).\n       * @example DateTime.local(2017, 5, 25, 9, 30, 52).second //=> 52\n       * @type {number}\n       */\n\n    }, {\n      key: \"second\",\n      get: function get() {\n        return this.isValid ? this.c.second : NaN;\n      }\n      /**\n       * Get the millisecond of the second (0-999).\n       * @example DateTime.local(2017, 5, 25, 9, 30, 52, 654).millisecond //=> 654\n       * @type {number}\n       */\n\n    }, {\n      key: \"millisecond\",\n      get: function get() {\n        return this.isValid ? this.c.millisecond : NaN;\n      }\n      /**\n       * Get the week year\n       * @see https://en.wikipedia.org/wiki/ISO_week_date\n       * @example DateTime.local(2014, 11, 31).weekYear //=> 2015\n       * @type {number}\n       */\n\n    }, {\n      key: \"weekYear\",\n      get: function get() {\n        return this.isValid ? possiblyCachedWeekData(this).weekYear : NaN;\n      }\n      /**\n       * Get the week number of the week year (1-52ish).\n       * @see https://en.wikipedia.org/wiki/ISO_week_date\n       * @example DateTime.local(2017, 5, 25).weekNumber //=> 21\n       * @type {number}\n       */\n\n    }, {\n      key: \"weekNumber\",\n      get: function get() {\n        return this.isValid ? possiblyCachedWeekData(this).weekNumber : NaN;\n      }\n      /**\n       * Get the day of the week.\n       * 1 is Monday and 7 is Sunday\n       * @see https://en.wikipedia.org/wiki/ISO_week_date\n       * @example DateTime.local(2014, 11, 31).weekday //=> 4\n       * @type {number}\n       */\n\n    }, {\n      key: \"weekday\",\n      get: function get() {\n        return this.isValid ? possiblyCachedWeekData(this).weekday : NaN;\n      }\n      /**\n       * Get the ordinal (meaning the day of the year)\n       * @example DateTime.local(2017, 5, 25).ordinal //=> 145\n       * @type {number|DateTime}\n       */\n\n    }, {\n      key: \"ordinal\",\n      get: function get() {\n        return this.isValid ? gregorianToOrdinal(this.c).ordinal : NaN;\n      }\n      /**\n       * Get the human readable short month name, such as 'Oct'.\n       * Defaults to the system's locale if no locale has been specified\n       * @example DateTime.local(2017, 10, 30).monthShort //=> Oct\n       * @type {string}\n       */\n\n    }, {\n      key: \"monthShort\",\n      get: function get() {\n        return this.isValid ? Info.months(\"short\", {\n          locale: this.locale\n        })[this.month - 1] : null;\n      }\n      /**\n       * Get the human readable long month name, such as 'October'.\n       * Defaults to the system's locale if no locale has been specified\n       * @example DateTime.local(2017, 10, 30).monthLong //=> October\n       * @type {string}\n       */\n\n    }, {\n      key: \"monthLong\",\n      get: function get() {\n        return this.isValid ? Info.months(\"long\", {\n          locale: this.locale\n        })[this.month - 1] : null;\n      }\n      /**\n       * Get the human readable short weekday, such as 'Mon'.\n       * Defaults to the system's locale if no locale has been specified\n       * @example DateTime.local(2017, 10, 30).weekdayShort //=> Mon\n       * @type {string}\n       */\n\n    }, {\n      key: \"weekdayShort\",\n      get: function get() {\n        return this.isValid ? Info.weekdays(\"short\", {\n          locale: this.locale\n        })[this.weekday - 1] : null;\n      }\n      /**\n       * Get the human readable long weekday, such as 'Monday'.\n       * Defaults to the system's locale if no locale has been specified\n       * @example DateTime.local(2017, 10, 30).weekdayLong //=> Monday\n       * @type {string}\n       */\n\n    }, {\n      key: \"weekdayLong\",\n      get: function get() {\n        return this.isValid ? Info.weekdays(\"long\", {\n          locale: this.locale\n        })[this.weekday - 1] : null;\n      }\n      /**\n       * Get the UTC offset of this DateTime in minutes\n       * @example DateTime.local().offset //=> -240\n       * @example DateTime.utc().offset //=> 0\n       * @type {number}\n       */\n\n    }, {\n      key: \"offset\",\n      get: function get() {\n        return this.isValid ? +this.o : NaN;\n      }\n      /**\n       * Get the short human name for the zone's current offset, for example \"EST\" or \"EDT\".\n       * Defaults to the system's locale if no locale has been specified\n       * @type {string}\n       */\n\n    }, {\n      key: \"offsetNameShort\",\n      get: function get() {\n        if (this.isValid) {\n          return this.zone.offsetName(this.ts, {\n            format: \"short\",\n            locale: this.locale\n          });\n        } else {\n          return null;\n        }\n      }\n      /**\n       * Get the long human name for the zone's current offset, for example \"Eastern Standard Time\" or \"Eastern Daylight Time\".\n       * Defaults to the system's locale if no locale has been specified\n       * @type {string}\n       */\n\n    }, {\n      key: \"offsetNameLong\",\n      get: function get() {\n        if (this.isValid) {\n          return this.zone.offsetName(this.ts, {\n            format: \"long\",\n            locale: this.locale\n          });\n        } else {\n          return null;\n        }\n      }\n      /**\n       * Get whether this zone's offset ever changes, as in a DST.\n       * @type {boolean}\n       */\n\n    }, {\n      key: \"isOffsetFixed\",\n      get: function get() {\n        return this.isValid ? this.zone.universal : null;\n      }\n      /**\n       * Get whether the DateTime is in a DST.\n       * @type {boolean}\n       */\n\n    }, {\n      key: \"isInDST\",\n      get: function get() {\n        if (this.isOffsetFixed) {\n          return false;\n        } else {\n          return this.offset > this.set({\n            month: 1\n          }).offset || this.offset > this.set({\n            month: 5\n          }).offset;\n        }\n      }\n      /**\n       * Returns true if this DateTime is in a leap year, false otherwise\n       * @example DateTime.local(2016).isInLeapYear //=> true\n       * @example DateTime.local(2013).isInLeapYear //=> false\n       * @type {boolean}\n       */\n\n    }, {\n      key: \"isInLeapYear\",\n      get: function get() {\n        return isLeapYear(this.year);\n      }\n      /**\n       * Returns the number of days in this DateTime's month\n       * @example DateTime.local(2016, 2).daysInMonth //=> 29\n       * @example DateTime.local(2016, 3).daysInMonth //=> 31\n       * @type {number}\n       */\n\n    }, {\n      key: \"daysInMonth\",\n      get: function get() {\n        return daysInMonth(this.year, this.month);\n      }\n      /**\n       * Returns the number of days in this DateTime's year\n       * @example DateTime.local(2016).daysInYear //=> 366\n       * @example DateTime.local(2013).daysInYear //=> 365\n       * @type {number}\n       */\n\n    }, {\n      key: \"daysInYear\",\n      get: function get() {\n        return this.isValid ? daysInYear(this.year) : NaN;\n      }\n      /**\n       * Returns the number of weeks in this DateTime's year\n       * @see https://en.wikipedia.org/wiki/ISO_week_date\n       * @example DateTime.local(2004).weeksInWeekYear //=> 53\n       * @example DateTime.local(2013).weeksInWeekYear //=> 52\n       * @type {number}\n       */\n\n    }, {\n      key: \"weeksInWeekYear\",\n      get: function get() {\n        return this.isValid ? weeksInWeekYear(this.weekYear) : NaN;\n      }\n    }], [{\n      key: \"DATE_SHORT\",\n      get: function get() {\n        return DATE_SHORT;\n      }\n      /**\n       * {@link toLocaleString} format like 'Oct 14, 1983'\n       * @type {Object}\n       */\n\n    }, {\n      key: \"DATE_MED\",\n      get: function get() {\n        return DATE_MED;\n      }\n      /**\n       * {@link toLocaleString} format like 'Fri, Oct 14, 1983'\n       * @type {Object}\n       */\n\n    }, {\n      key: \"DATE_MED_WITH_WEEKDAY\",\n      get: function get() {\n        return DATE_MED_WITH_WEEKDAY;\n      }\n      /**\n       * {@link toLocaleString} format like 'October 14, 1983'\n       * @type {Object}\n       */\n\n    }, {\n      key: \"DATE_FULL\",\n      get: function get() {\n        return DATE_FULL;\n      }\n      /**\n       * {@link toLocaleString} format like 'Tuesday, October 14, 1983'\n       * @type {Object}\n       */\n\n    }, {\n      key: \"DATE_HUGE\",\n      get: function get() {\n        return DATE_HUGE;\n      }\n      /**\n       * {@link toLocaleString} format like '09:30 AM'. Only 12-hour if the locale is.\n       * @type {Object}\n       */\n\n    }, {\n      key: \"TIME_SIMPLE\",\n      get: function get() {\n        return TIME_SIMPLE;\n      }\n      /**\n       * {@link toLocaleString} format like '09:30:23 AM'. Only 12-hour if the locale is.\n       * @type {Object}\n       */\n\n    }, {\n      key: \"TIME_WITH_SECONDS\",\n      get: function get() {\n        return TIME_WITH_SECONDS;\n      }\n      /**\n       * {@link toLocaleString} format like '09:30:23 AM EDT'. Only 12-hour if the locale is.\n       * @type {Object}\n       */\n\n    }, {\n      key: \"TIME_WITH_SHORT_OFFSET\",\n      get: function get() {\n        return TIME_WITH_SHORT_OFFSET;\n      }\n      /**\n       * {@link toLocaleString} format like '09:30:23 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n       * @type {Object}\n       */\n\n    }, {\n      key: \"TIME_WITH_LONG_OFFSET\",\n      get: function get() {\n        return TIME_WITH_LONG_OFFSET;\n      }\n      /**\n       * {@link toLocaleString} format like '09:30', always 24-hour.\n       * @type {Object}\n       */\n\n    }, {\n      key: \"TIME_24_SIMPLE\",\n      get: function get() {\n        return TIME_24_SIMPLE;\n      }\n      /**\n       * {@link toLocaleString} format like '09:30:23', always 24-hour.\n       * @type {Object}\n       */\n\n    }, {\n      key: \"TIME_24_WITH_SECONDS\",\n      get: function get() {\n        return TIME_24_WITH_SECONDS;\n      }\n      /**\n       * {@link toLocaleString} format like '09:30:23 EDT', always 24-hour.\n       * @type {Object}\n       */\n\n    }, {\n      key: \"TIME_24_WITH_SHORT_OFFSET\",\n      get: function get() {\n        return TIME_24_WITH_SHORT_OFFSET;\n      }\n      /**\n       * {@link toLocaleString} format like '09:30:23 Eastern Daylight Time', always 24-hour.\n       * @type {Object}\n       */\n\n    }, {\n      key: \"TIME_24_WITH_LONG_OFFSET\",\n      get: function get() {\n        return TIME_24_WITH_LONG_OFFSET;\n      }\n      /**\n       * {@link toLocaleString} format like '10/14/1983, 9:30 AM'. Only 12-hour if the locale is.\n       * @type {Object}\n       */\n\n    }, {\n      key: \"DATETIME_SHORT\",\n      get: function get() {\n        return DATETIME_SHORT;\n      }\n      /**\n       * {@link toLocaleString} format like '10/14/1983, 9:30:33 AM'. Only 12-hour if the locale is.\n       * @type {Object}\n       */\n\n    }, {\n      key: \"DATETIME_SHORT_WITH_SECONDS\",\n      get: function get() {\n        return DATETIME_SHORT_WITH_SECONDS;\n      }\n      /**\n       * {@link toLocaleString} format like 'Oct 14, 1983, 9:30 AM'. Only 12-hour if the locale is.\n       * @type {Object}\n       */\n\n    }, {\n      key: \"DATETIME_MED\",\n      get: function get() {\n        return DATETIME_MED;\n      }\n      /**\n       * {@link toLocaleString} format like 'Oct 14, 1983, 9:30:33 AM'. Only 12-hour if the locale is.\n       * @type {Object}\n       */\n\n    }, {\n      key: \"DATETIME_MED_WITH_SECONDS\",\n      get: function get() {\n        return DATETIME_MED_WITH_SECONDS;\n      }\n      /**\n       * {@link toLocaleString} format like 'Fri, 14 Oct 1983, 9:30 AM'. Only 12-hour if the locale is.\n       * @type {Object}\n       */\n\n    }, {\n      key: \"DATETIME_MED_WITH_WEEKDAY\",\n      get: function get() {\n        return DATETIME_MED_WITH_WEEKDAY;\n      }\n      /**\n       * {@link toLocaleString} format like 'October 14, 1983, 9:30 AM EDT'. Only 12-hour if the locale is.\n       * @type {Object}\n       */\n\n    }, {\n      key: \"DATETIME_FULL\",\n      get: function get() {\n        return DATETIME_FULL;\n      }\n      /**\n       * {@link toLocaleString} format like 'October 14, 1983, 9:30:33 AM EDT'. Only 12-hour if the locale is.\n       * @type {Object}\n       */\n\n    }, {\n      key: \"DATETIME_FULL_WITH_SECONDS\",\n      get: function get() {\n        return DATETIME_FULL_WITH_SECONDS;\n      }\n      /**\n       * {@link toLocaleString} format like 'Friday, October 14, 1983, 9:30 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n       * @type {Object}\n       */\n\n    }, {\n      key: \"DATETIME_HUGE\",\n      get: function get() {\n        return DATETIME_HUGE;\n      }\n      /**\n       * {@link toLocaleString} format like 'Friday, October 14, 1983, 9:30:33 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n       * @type {Object}\n       */\n\n    }, {\n      key: \"DATETIME_HUGE_WITH_SECONDS\",\n      get: function get() {\n        return DATETIME_HUGE_WITH_SECONDS;\n      }\n    }]);\n\n    return DateTime;\n  }();\n  function friendlyDateTime(dateTimeish) {\n    if (DateTime.isDateTime(dateTimeish)) {\n      return dateTimeish;\n    } else if (dateTimeish && dateTimeish.valueOf && isNumber(dateTimeish.valueOf())) {\n      return DateTime.fromJSDate(dateTimeish);\n    } else if (dateTimeish && typeof dateTimeish === \"object\") {\n      return DateTime.fromObject(dateTimeish);\n    } else {\n      throw new InvalidArgumentError(\"Unknown datetime argument: \" + dateTimeish + \", of type \" + typeof dateTimeish);\n    }\n  }\n\n  exports.DateTime = DateTime;\n  exports.Duration = Duration;\n  exports.FixedOffsetZone = FixedOffsetZone;\n  exports.IANAZone = IANAZone;\n  exports.Info = Info;\n  exports.Interval = Interval;\n  exports.InvalidZone = InvalidZone;\n  exports.LocalZone = LocalZone;\n  exports.Settings = Settings;\n  exports.Zone = Zone;\n\n  return exports;\n\n}({}));\n//# sourceMappingURL=luxon.js.map", "var py = {};\n(function (py) {\n    var create = function (o, props) {\n        function F() {}\n        F.prototype = o;\n        var inst = new F;\n        if (props) {\n            for(var name in props) {\n                if(!props.hasOwnProperty(name)) { continue; }\n                inst[name] = props[name];\n            }\n        }\n        return inst;\n    };\n\n    var symbols = {};\n    var comparators = {};\n    var Base = {\n        nud: function () { throw new Error(this.id + \" undefined as prefix\"); },\n        led: function (led) { throw new Error(this.id + \" undefined as infix\"); },\n        toString: function () {\n            if (this.id === '(constant)' || this.id === '(number)' || this.id === '(name)' || this.id === '(string)') {\n                return [this.id.slice(0, this.id.length-1), ' ', this.value, ')'].join('');\n            } else if (this.id === '(end)') {\n                return '(end)';\n            } else if (this.id === '(comparator)' ) {\n                var repr = ['(comparator', this.expressions[0]];\n                for (var i=0;i<this.operators.length; ++i) {\n                    repr.push(this.operators[i], this.expressions[i+1]);\n                }\n                return repr.join(' ') + ')';\n            }\n            var out = [this.id, this.first, this.second, this.third]\n                .filter(function (r){return r}).join(' ');\n            return '(' + out + ')';\n        }\n    };\n    function symbol(id, bp) {\n        bp = bp || 0;\n        var s = symbols[id];\n        if (s) {\n            if (bp > s.lbp) {\n                s.lbp = bp;\n            }\n            return s;\n        }\n        return symbols[id] = create(Base, {\n            id: id,\n            lbp: bp\n        });\n    }\n    function constant(id) {\n        var s = symbol(id);\n        s.id = '(constant)';\n        s.value = id;\n        s.nud = function () {\n            return this;\n        };\n    }\n    function prefix(id, bp, nud) {\n        symbol(id).nud = nud || function () {\n            this.first = expression(bp);\n            return this\n        }\n    }\n    function infix(id, bp, led) {\n        symbol(id, bp).led = led || function (left) {\n            this.first = left;\n            this.second = expression(bp);\n            return this;\n        }\n    }\n    function infixr(id, bp) {\n        symbol(id, bp).led = function (left) {\n            this.first = left;\n            this.second = expression(bp - 1);\n            return this;\n        }\n    }\n    function comparator(id) {\n        comparators[id] = true;\n        var bp = 60;\n        infix(id, bp, function (left) {\n            this.id = '(comparator)';\n            this.operators = [id];\n            this.expressions = [left, expression(bp)];\n            while (token.id in comparators) {\n                this.operators.push(token.id);\n                advance();\n                this.expressions.push(\n                    expression(bp));\n            }\n            return this;\n        });\n    }\n\n    constant('None'); constant('False'); constant('True');\n\n    symbol('(number)').nud = function () { return this; };\n    symbol('(name)').nud = function () { return this; };\n    symbol('(string)').nud = function () { return this; };\n    symbol('(end)');\n\n    symbol(':'); symbol(')'); symbol(']'); symbol('}'); symbol(',');\n    symbol('else');\n\n    infix('=', 10, function (left) {\n        if (left.id !== '(name)') {\n            throw new Error(\"Expected keyword argument name, got \" + token.id);\n        }\n        this.first = left;\n        this.second = expression();\n        return this;\n    });\n\n    symbol('lambda', 20).nud = function () {\n        this.first = [];\n        if (token.id !== ':') {\n            for(;;) {\n                if (token.id !== '(name)') {\n                    throw new Error('Excepted an argument name');\n                }\n                this.first.push(token);\n                advance();\n                if (token.id !== ',') {\n                    break;\n                }\n                advance(',');\n            }\n        }\n        advance(':');\n        this.second = expression();\n        return this;\n    };\n    infix('if', 20, function (left) {\n        this.ifTrue = left;\n        this.condition = expression();\n        advance('else');\n        this.ifFalse = expression();\n        return this;\n    });\n\n    infixr('or', 30); infixr('and', 40); prefix('not', 50);\n\n    comparator('in'); comparator('not in');\n    comparator('is'); comparator('is not');\n    comparator('<'); comparator('<=');\n    comparator('>'); comparator('>=');\n    comparator('<>'); comparator('!='); comparator('==');\n\n    infix('|', 70); infix('^', 80); infix('&', 90);\n\n    infix('<<', 100); infix('>>', 100);\n\n    infix('+', 110); infix('-', 110);\n\n    infix('*', 120); infix('/', 120);\n    infix('//', 120); infix('%', 120);\n\n    prefix('-', 130); prefix('+', 130); prefix('~', 130);\n\n    infixr('**', 140);\n\n    infix('.', 150, function (left) {\n        if (token.id !== '(name)') {\n            throw new Error('Expected attribute name, got ' + token.id);\n        }\n        this.first = left;\n        this.second = token;\n        advance();\n        return this;\n    });\n    symbol('(', 150).nud = function () {\n        this.first = [];\n        var comma = false;\n        if (token.id !== ')') {\n            while (true) {\n                if (token.id === ')') {\n                    break;\n                }\n                this.first.push(expression());\n                if (token.id !== ',') {\n                    break;\n                }\n                comma = true;\n                advance(',');\n            }\n        }\n        advance(')');\n        if (!this.first.length || comma) {\n            return this;\n        } else {\n            return this.first[0];\n        }\n    };\n    symbol('(').led = function (left) {\n        this.first = left;\n        this.second = [];\n        if (token.id !== \")\") {\n            for(;;) {\n                this.second.push(expression());\n                if (token.id !== ',') {\n                    break;\n                }\n                advance(',');\n            }\n        }\n        advance(\")\");\n        return this;\n\n    };\n    infix('[', 150, function (left) {\n        this.first = left;\n        this.second = expression();\n        advance(\"]\");\n        return this;\n    });\n    symbol('[').nud = function () {\n        this.first = [];\n        if (token.id !== ']') {\n            for (;;) {\n                if (token.id === ']') {\n                    break;\n                }\n                this.first.push(expression());\n                if (token.id !== ',') {\n                    break;\n                }\n                advance(',');\n            }\n        }\n        advance(']');\n        return this;\n    };\n\n    symbol('{').nud = function () {\n        this.first = [];\n        if (token.id !== '}') {\n            for(;;) {\n                if (token.id === '}') {\n                    break;\n                }\n                var key = expression();\n                advance(':');\n                var value = expression();\n                this.first.push([key, value]);\n                if (token.id !== ',') {\n                    break;\n                }\n                advance(',');\n            }\n        }\n        advance('}');\n        return this;\n    };\n\n    py.tokenize = (function () {\n        function group() { return '(' + Array.prototype.join.call(arguments, '|') + ')'; }\n\n        var Whitespace = '[ \\\\f\\\\t]*';\n\n        var Name = '[a-zA-Z_]\\\\w*';\n\n        var DecNumber = '\\\\d+(L|l)?';\n        var IntNumber = DecNumber;\n\n        var Exponent = '[eE][+-]?\\\\d+';\n        var PointFloat = group(`\\\\d+\\\\.\\\\d*(${Exponent})?`, `\\\\.\\\\d+(${Exponent})?`);\n        // Exponent not optional when no decimal point\n        var FloatNumber = group(PointFloat, `\\\\d+${Exponent}`);\n\n        var Number = group(FloatNumber, IntNumber);\n\n        var Operator = group(\"\\\\*\\\\*=?\", \">>=?\", \"<<=?\", \"<>\", \"!=\",\n                             \"//=?\", \"[+\\\\-*/%&|^=<>]=?\", \"~\");\n        var Bracket = '[\\\\[\\\\]\\\\(\\\\)\\\\{\\\\}]';\n        var Special = '[:;.,`@]';\n        var Funny = group(Operator, Bracket, Special);\n\n        var ContStr = group(\"([uU])?'([^\\n'\\\\\\\\]*(?:\\\\\\\\.[^\\n'\\\\\\\\]*)*)'\", '([uU])?\"([^\\n\"\\\\\\\\]*(?:\\\\\\\\.[^\\n\"\\\\\\\\]*)*)\"');\n        var PseudoToken = Whitespace + group(Number, Funny, ContStr, Name);\n\n        var number_pattern = new RegExp('^' + Number + '$');\n        var string_pattern = new RegExp('^' + ContStr + '$');\n        var name_pattern = new RegExp('^' + Name + '$');\n        var strip = new RegExp('^' + Whitespace);\n        return function tokenize(s) {\n            var max=s.length, tokens = [], start, end;\n            // /g flag makes repeated exec() have memory\n            var pseudoprog = new RegExp(PseudoToken, 'g');\n\n            while(pseudoprog.lastIndex < max) {\n                var pseudomatch = pseudoprog.exec(s);\n                if (!pseudomatch) {\n                    // if match failed on trailing whitespace, end tokenizing\n                    if (/^\\s+$/.test(s.slice(end))) {\n                        break;\n                    }\n                    throw new Error('Failed to tokenize <<' + s\n                                    + '>> at index ' + (end || 0)\n                                    + '; parsed so far: ' + tokens);\n                }\n\n                start = pseudomatch.index;\n                end = pseudoprog.lastIndex;\n                // strip leading space caught by Whitespace\n                var token = s.slice(start, end).replace(strip, '');\n\n                if (number_pattern.test(token)) {\n                    tokens.push(create(symbols['(number)'], {\n                        value: parseFloat(token)\n                    }));\n                } else if (string_pattern.test(token)) {\n                    var m = string_pattern.exec(token);\n                    tokens.push(create(symbols['(string)'], {\n                        value: PY_decode_string_literal(\n                            m[3] !== undefined ? m[3] : m[5],\n                            !!(m[2] || m[4])\n                        )\n                    }));\n                } else if (token in symbols) {\n                    var symbol;\n                    // transform 'not in' and 'is not' in a single token\n                    if (token === 'in' && tokens.length > 1 && tokens[tokens.length-1].id === 'not') {\n                        symbol = symbols['not in'];\n                        tokens.pop();\n                    } else if (token === 'not' && tokens.length > 1 && tokens[tokens.length-1].id === 'is') {\n                        symbol = symbols['is not'];\n                        tokens.pop();\n                    } else {\n                        symbol = symbols[token];\n                    }\n                    tokens.push(create(symbol));\n                } else if (name_pattern.test(token)) {\n                    tokens.push(create(symbols['(name)'], {\n                        value: token\n                    }));\n                } else {\n                     throw new Error(\"Tokenizing failure of <<\" + s + \">> at index \" + start\n                                     + \" for token [[\" + token + \"]]\"\n                                     + \"; parsed so far: \" + tokens);\n\n                }\n            }\n            tokens.push(create(symbols['(end)']));\n            return tokens;\n        }\n    })();\n\n    var token, next;\n    function expression(rbp) {\n        rbp = rbp || 0;\n        var t = token;\n        token = next();\n        var left = t.nud();\n        while (rbp < token.lbp) {\n            t = token;\n            token = next();\n            left = t.led(left);\n        }\n        return left;\n    }\n    function advance(id) {\n        if (id && token.id !== id) {\n            throw new Error(\n                'Expected \"' + id + '\", got \"' + token.id + '\"');\n        }\n        token = next();\n    }\n\n    function PY_ensurepy(val, name) {\n        switch (val) {\n        case undefined:\n            throw new Error(\"NameError: name '\" + name + \"' is not defined\");\n        case null:\n            return py.None;\n        case true:\n            return py.True;\n        case false:\n            return py.False;\n        }\n\n        var fn = function () {};\n        fn.prototype = py.object;\n        if (py.PY_isInstance(val, py.object)\n            || py.PY_isSubclass(val, py.object)) {\n            return val;\n        }\n\n        switch (typeof val) {\n        case 'number':\n            return py.float.fromJSON(val);\n        case 'string':\n            return py.str.fromJSON(val);\n        case 'function':\n            return py.PY_def.fromJSON(val);\n        }\n\n        switch(val.constructor) {\n        case Object:\n            // TODO: why py.object instead of py.dict?\n            var o = py.PY_call(py.object);\n            for (var prop in val) {\n                if (val.hasOwnProperty(prop)) {\n                    o[prop] = val[prop];\n                }\n            }\n            return o;\n        case Array:\n            return py.list.fromJSON(val);\n        }\n\n        throw new Error(\"Could not convert \" + val + \" to a pyval\");\n    }\n\n    var typename = function (obj) {\n        if (obj.__class__) { // py type\n            return obj.__class__.__name__;\n        } else if(typeof obj !== 'object') { // JS primitive\n            return typeof obj;\n        } else { // JS object\n            return obj.constructor.name;\n        }\n    };\n    // JSAPI, JS-level utility functions for implementing new py.js\n    // types\n    py.py = {};\n\n    py.PY_parseArgs = function PY_parseArgs(argument, format) {\n        var out = {};\n        var args = argument[0];\n        var kwargs = {};\n        for (var k in argument[1]) {\n            if (!argument[1].hasOwnProperty(k)) { continue; }\n            kwargs[k] = argument[1][k];\n        }\n        if (typeof format === 'string') {\n            format = format.split(/\\s+/);\n        }\n        var name = function (spec) {\n            if (typeof spec === 'string') {\n                return spec;\n            } else if (spec instanceof Array && spec.length === 2) {\n                return spec[0];\n            }\n            throw new Error(\n                \"TypeError: unknown format specification \" +\n                    JSON.stringify(spec));\n        };\n        var spec;\n        // TODO: ensure all format arg names are actual names?\n        for(var i=0; i<args.length; ++i) {\n            spec = format[i];\n            // spec list ended, or specs switching to keyword-only\n            if (!spec || spec === '*') {\n                throw new Error(\n                    \"TypeError: function takes exactly \" + (i-1) +\n                    \" positional arguments (\" + args.length +\n                    \" given\")\n            } else if(/^\\*\\w/.test(spec)) {\n                // *args, final\n                out[name(spec.slice(1))] = args.slice(i);\n                break;\n            }\n\n            out[name(spec)] = args[i];\n        }\n        for(var j=i; j<format.length; ++j) {\n            spec = format[j];\n            var n = name(spec);\n\n            if (n in out) {\n                throw new Error(\n                    \"TypeError: function got multiple values \" + \n                    \"for keyword argument '\" + kwarg + \"'\");\n            }\n            if (/^\\*\\*\\w/.test(n)) {\n                // **kwarg\n                out[n.slice(2)] = kwargs;\n                kwargs = {};\n                break;\n            }\n            if (n in kwargs) {\n                out[n] = kwargs[n];\n                // Remove from args map\n                delete kwargs[n];\n            }\n        }\n        // Ensure all keyword arguments were consumed\n        for (var key in kwargs) {\n            throw new Error(\n                \"TypeError: function got an unexpected keyword argument '\"\n                    + key + \"'\");\n        }\n\n        // Fixup args count if there's a kwonly flag (or an *args)\n        var kwonly = 0;\n        for(var k = 0; k < format.length; ++k) {\n            if (/^\\*/.test(format[k])) { kwonly = 1; break; }\n        }\n        // Check that all required arguments have been matched, add\n        // optional values\n        for(var k = 0; k < format.length; ++k) {\n            spec = format[k];\n            var n = name(spec);\n            // kwonly, va_arg or matched argument\n            if (/^\\*/.test(n) || n in out) { continue; }\n            // Unmatched required argument\n            if (!(spec instanceof Array)) {\n                throw new Error(\n                    \"TypeError: function takes exactly \" + (format.length - kwonly)\n                    + \" arguments\");\n            }\n            // Set default value\n            out[n] = spec[1];\n        }\n        \n        return out;\n    };\n\n    py.PY_hasAttr = function (o, attr_name) {\n        try {\n            py.PY_getAttr(o, attr_name);\n            return true;\n        } catch (e) {\n            return false;\n        }\n    };\n    py.PY_getAttr = function (o, attr_name) {\n        return PY_ensurepy(o.__getattribute__(attr_name));\n    };\n    py.PY_str = function (o) {\n        var v = o.__str__();\n        if (py.PY_isInstance(v, py.str)) {\n            return v;\n        }\n        throw new Error(\n            'TypeError: __str__ returned non-string (type '\n                + typename(v)\n                +')');\n    };\n    py.PY_isInstance = function (inst, cls) {\n        var fn = function () {};\n        fn.prototype = cls;\n        return inst instanceof fn;\n    };\n    py.PY_isSubclass = function (derived, cls) {\n        var fn = function () {};\n        fn.prototype = cls;\n        return derived === cls || derived instanceof fn;\n    };\n    py.PY_call = function (callable, args, kwargs) {\n        if (!args) {\n            args = [];\n        }\n        if (typeof args === 'object' && !(args instanceof Array)) {\n            kwargs = args;\n            args = [];\n        }\n        if (!kwargs) {\n            kwargs = {};\n        }\n        if (callable.__is_type) {\n            // class hack\n            var instance = callable.__new__.call(callable, args, kwargs);\n            var typ = function () {};\n            typ.prototype = callable;\n            if (instance instanceof typ) {\n                instance.__init__.call(instance, args, kwargs);\n            }\n            return instance\n        }\n        return callable.__call__(args, kwargs);\n    };\n    py.PY_isTrue = function (o) {\n        var res = o.__nonzero__();\n        if (res === py.True) {\n            return true;\n        }\n        if (res === py.False) {\n            return false;\n        }\n        throw new Error(\n            \"TypeError: __nonzero__ should return bool, returned \"\n                + typename(res));\n    };\n    py.PY_not = function (o) {\n        return !py.PY_isTrue(o);\n    };\n    py.PY_size = function (o) {\n        if (!o.__len__) {\n            throw new Error(\n                \"TypeError: object of type '\" +\n                    typename(o) +\n                    \"' has no len()\");\n        }\n        var v = o.__len__();\n        if (typeof v !== 'number') {\n            throw new Error(\"TypeError: a number is required\");\n        }\n        return v;\n    };\n    py.PY_getItem = function (o, key) {\n        if (!('__getitem__' in o)) {\n            throw new Error(\n                \"TypeError: '\" + typename(o) +\n                    \"' object is unsubscriptable\")\n        }\n        if (!py.PY_isInstance(key, py.object)) {\n            throw new Error(\n                \"TypeError: '\" + typename(key) +\n                    \"' is not a py.js object\");\n        }\n        var res = o.__getitem__(key);\n        if (!py.PY_isInstance(key, py.object)) {\n            throw new Error(\n                \"TypeError: __getitem__ must return a py.js object, got \"\n                    + typename(res));\n        }\n        return res;\n    };\n    py.PY_setItem = function (o, key, v) {\n        if (!('__setitem__' in o)) {\n            throw new Error(\n                \"TypeError: '\" + typename(o) +\n                    \"' object does not support item assignment\");\n        }\n        if (!py.PY_isInstance(key, py.object)) {\n            throw new Error(\n                \"TypeError: '\" + typename(key) +\n                    \"' is not a py.js object\");\n        }\n        if (!py.PY_isInstance(v, py.object)) {\n            throw new Error(\n                \"TypeError: '\" + typename(v) +\n                    \"' is not a py.js object\");\n        }\n        o.__setitem__(key, v);\n    };\n\n    py.PY_add = function (o1, o2) {\n        return PY_op(o1, o2, '+');\n    };\n    py.PY_subtract = function (o1, o2) {\n        return PY_op(o1, o2, '-');\n    };\n    py.PY_multiply = function (o1, o2) {\n        return PY_op(o1, o2, '*');\n    };\n    py.PY_divide = function (o1, o2) {\n        return PY_op(o1, o2, '/');\n    };\n    py.PY_negative = function (o) {\n        if (!o.__neg__) {\n            throw new Error(\n                \"TypeError: bad operand for unary -: '\"\n                    + typename(o)\n                    + \"'\");\n        }\n        return o.__neg__();\n    };\n    py.PY_positive = function (o) {\n        if (!o.__pos__) {\n            throw new Error(\n                \"TypeError: bad operand for unary +: '\"\n                    + typename(o)\n                    + \"'\");\n        }\n        return o.__pos__();\n    };\n\n    // Builtins\n    py.type = function type(name, bases, dict) {\n        if (typeof name !== 'string') {\n            throw new Error(\"ValueError: a class name should be a string\");\n        }\n        if (!bases || bases.length === 0) {\n            bases = [py.object];\n        } else if (bases.length > 1) {\n            throw new Error(\"ValueError: can't provide multiple bases for a \"\n                          + \"new type\");\n        }\n        var base = bases[0];\n        var ClassObj = create(base);\n        if (dict) {\n            for (var k in dict) {\n                if (!dict.hasOwnProperty(k)) { continue; }\n                ClassObj[k] = dict[k];\n            }\n        }\n        ClassObj.__class__ = ClassObj;\n        ClassObj.__name__ = name;\n        ClassObj.__bases__ = bases;\n        ClassObj.__is_type = true;\n\n        return ClassObj;\n    };\n    py.type.__call__ = function () {\n        var args = py.PY_parseArgs(arguments, ['object']);\n        return args.object.__class__;\n    };\n\n    var hash_counter = 0;\n    py.object = py.type('object', [{}], {\n        __new__: function () {\n            // If ``this`` isn't the class object, this is going to be\n            // beyond fucked up\n            var inst = create(this);\n            inst.__is_type = false;\n            return inst;\n        },\n        __init__: function () {},\n        // Basic customization\n        __hash__: function () {\n            if (this._hash) {\n                return this._hash;\n            }\n            // tagged counter, to avoid collisions with e.g. number hashes\n            return this._hash = '\\0\\0\\0' + String(hash_counter++);\n        },\n        __eq__: function (other) {\n            return (this === other) ? py.True : py.False;\n        },\n        __ne__: function (other) {\n            if (py.PY_isTrue(this.__eq__(other))) {\n                return py.False;\n            } else {\n                return py.True;\n            }\n        },\n        __lt__: function () { return py.NotImplemented; },\n        __le__: function () { return py.NotImplemented; },\n        __ge__: function () { return py.NotImplemented; },\n        __gt__: function () { return py.NotImplemented; },\n        __str__: function () {\n            return this.__unicode__();\n        },\n        __unicode__: function () {\n            return py.str.fromJSON('<' + typename(this) + ' object>');\n        },\n        __nonzero__: function () {\n            return py.True;\n        },\n        // Attribute access\n        __getattribute__: function (name) {\n            if (name in this) {\n                var val = this[name];\n                if (typeof val === 'object' && '__get__' in val) {\n                    // TODO: second argument should be class\n                    return val.__get__(this, py.PY_call(py.type, [this]));\n                }\n                if (typeof val === 'function' && !this.hasOwnProperty(name)) {\n                    // val is a method from the class\n                    return PY_instancemethod.fromJSON(val, this);\n                }\n                return val;\n            }\n            if ('__getattr__' in this) {\n                return this.__getattr__(name);\n            }\n            throw new Error(\"AttributeError: object has no attribute '\" + name +\"'\");\n        },\n        __setattr__: function (name, value) {\n            if (name in this && '__set__' in this[name]) {\n                this[name].__set__(this, value);\n            }\n            this[name] = value;\n        },\n        // no delattr, because no 'del' statement\n\n        // Conversion\n        toJSON: function () {\n            throw new Error(this.constructor.name + ' can not be converted to JSON');\n        }\n    });\n    var NoneType = py.type('NoneType', null, {\n        __nonzero__: function () { return py.False; },\n        toJSON: function () { return null; }\n    });\n    py.None = py.PY_call(NoneType);\n    var NotImplementedType = py.type('NotImplementedType', null, {});\n    py.NotImplemented = py.PY_call(NotImplementedType);\n    var booleans_initialized = false;\n    py.bool = py.type('bool', null, {\n        __new__: function () {\n            if (!booleans_initialized) {\n                return py.object.__new__.apply(this);\n            }\n\n            var ph = {};\n            var args = py.PY_parseArgs(arguments, [['value', ph]]);\n            if (args.value === ph) {\n                return py.False;\n            }\n            return py.PY_isTrue(args.value) ? py.True : py.False;\n        },\n        __str__: function () {\n            return py.str.fromJSON((this === py.True) ? \"True\" : \"False\");\n        },\n        __nonzero__: function () { return this; },\n        fromJSON: function (val) { return val ? py.True : py.False },\n        toJSON: function () { return this === py.True; }\n    });\n    py.True = py.PY_call(py.bool);\n    py.False = py.PY_call(py.bool);\n    booleans_initialized = true;\n    py.float = py.type('float', null, {\n        __init__: function () {\n            var placeholder = {};\n            var args = py.PY_parseArgs(arguments, [['value', placeholder]]);\n            var value = args.value;\n            if (value === placeholder) {\n                this._value = 0; return;\n            }\n            if (py.PY_isInstance(value, py.float)) {\n                this._value = value._value;\n            }\n            if (py.PY_isInstance(value, py.object) && '__float__' in value) {\n                var res = value.__float__();\n                if (py.PY_isInstance(res, py.float)) {\n                    this._value = res._value;\n                    return;\n                }\n                throw new Error('TypeError: __float__ returned non-float (type ' +\n                                typename(res) + ')');\n            }\n            throw new Error('TypeError: float() argument must be a string or a number');\n        },\n        __str__: function () {\n            return py.str.fromJSON(String(this._value));\n        },\n        __eq__: function (other) {\n            return this._value === other._value ? py.True : py.False;\n        },\n        __lt__: function (other) {\n            if (!py.PY_isInstance(other, py.float)) {\n                return py.NotImplemented;\n            }\n            return this._value < other._value ? py.True : py.False;\n        },\n        __le__: function (other) {\n            if (!py.PY_isInstance(other, py.float)) {\n                return py.NotImplemented;\n            }\n            return this._value <= other._value ? py.True : py.False;\n        },\n        __gt__: function (other) {\n            if (!py.PY_isInstance(other, py.float)) {\n                return py.NotImplemented;\n            }\n            return this._value > other._value ? py.True : py.False;\n        },\n        __ge__: function (other) {\n            if (!py.PY_isInstance(other, py.float)) {\n                return py.NotImplemented;\n            }\n            return this._value >= other._value ? py.True : py.False;\n        },\n        __abs__: function () {\n            return py.float.fromJSON(\n                Math.abs(this._value));\n        },\n        __add__: function (other) {\n            if (!py.PY_isInstance(other, py.float)) {\n                return py.NotImplemented;\n            }\n            return py.float.fromJSON(this._value + other._value);\n        },\n        __mod__: function (other) {\n            if (!py.PY_isInstance(other, py.float)) {\n                return py.NotImplemented;\n            }\n            return py.float.fromJSON(this._value % other._value);\n        },\n        __neg__: function () {\n            return py.float.fromJSON(-this._value);\n        },\n        __sub__: function (other) {\n            if (!py.PY_isInstance(other, py.float)) {\n                return py.NotImplemented;\n            }\n            return py.float.fromJSON(this._value - other._value);\n        },\n        __mul__: function (other) {\n            if (!py.PY_isInstance(other, py.float)) {\n                return py.NotImplemented;\n            }\n            return py.float.fromJSON(this._value * other._value);\n        },\n        __pow__: function (other) {\n            if (!py.PY_isInstance(other, py.float)) {\n                return py.NotImplemented;\n            }\n            return py.float.fromJSON(this._value ** other._value);\n        },\n        __div__: function (other) {\n            if (!py.PY_isInstance(other, py.float)) {\n                return py.NotImplemented;\n            }\n            return py.float.fromJSON(this._value / other._value);\n        },\n        __nonzero__: function () {\n            return this._value ? py.True : py.False;\n        },\n        fromJSON: function (v) {\n            if (!(typeof v === 'number')) {\n                throw new Error('py.float.fromJSON can only take numbers');\n            }\n            var instance = py.PY_call(py.float);\n            instance._value = v;\n            return instance;\n        },\n        toJSON: function () {\n            return this._value;\n        }\n    });\n    py.str = py.type('str', null, {\n        __init__: function () {\n            var placeholder = {};\n            var args = py.PY_parseArgs(arguments, [['value', placeholder]]);\n            var s = args.value;\n            if (s === placeholder) { this._value = ''; return; }\n            this._value = py.PY_str(s)._value;\n        },\n        __hash__: function () {\n            return '\\1\\0\\1' + this._value;\n        },\n        __str__: function () {\n            return this;\n        },\n        __eq__: function (other) {\n            if (py.PY_isInstance(other, py.str)\n                    && this._value === other._value) {\n                return py.True;\n            }\n            return py.False;\n        },\n        __lt__: function (other) {\n            if (py.PY_not(py.PY_call(py.isinstance, [other, py.str]))) {\n                return py.NotImplemented;\n            }\n            return this._value < other._value ? py.True : py.False;\n        },\n        __le__: function (other) {\n            if (!py.PY_isInstance(other, py.str)) {\n                return py.NotImplemented;\n            }\n            return this._value <= other._value ? py.True : py.False;\n        },\n        __gt__: function (other) {\n            if (!py.PY_isInstance(other, py.str)) {\n                return py.NotImplemented;\n            }\n            return this._value > other._value ? py.True : py.False;\n        },\n        __ge__: function (other) {\n            if (!py.PY_isInstance(other, py.str)) {\n                return py.NotImplemented;\n            }\n            return this._value >= other._value ? py.True : py.False;\n        },\n        __add__: function (other) {\n            if (!py.PY_isInstance(other, py.str)) {\n                return py.NotImplemented;\n            }\n            return py.str.fromJSON(this._value + other._value);\n        },\n        __nonzero__: function () {\n            return this._value.length ? py.True : py.False;\n        },\n        __contains__: function (s) {\n            return (this._value.indexOf(s._value) !== -1) ? py.True : py.False;\n        },\n        fromJSON: function (s) {\n            if (typeof s === 'string') {\n                var instance = py.PY_call(py.str);\n                instance._value = s;\n                return instance;\n            }\n            throw new Error(\"str.fromJSON can only take strings\");\n        },\n        toJSON: function () {\n            return this._value;\n        }\n    });\n    py.tuple = py.type('tuple', null, {\n        __init__: function () {\n            this._values = [];\n        },\n        __len__: function () {\n            return this._values.length;\n        },\n        __nonzero__: function () {\n            return py.PY_size(this) > 0 ? py.True : py.False;\n        },\n        __contains__: function (value) {\n            for(var i=0, len=this._values.length; i<len; ++i) {\n                if (py.PY_isTrue(this._values[i].__eq__(value))) {\n                    return py.True;\n                }\n            }\n            return py.False;\n        },\n        __getitem__: function (index) {\n            return this._values[index.toJSON()];\n        },\n        toJSON: function () {\n            var out = [];\n            for (var i=0; i<this._values.length; ++i) {\n                out.push(this._values[i].toJSON());\n            }\n            return out;\n        },\n        fromJSON: function (ar) {\n            if (!(ar instanceof Array)) {\n                throw new Error(\"Can only create a py.tuple from an Array\");\n            }\n            var t = py.PY_call(py.tuple);\n            for(var i=0; i<ar.length; ++i) {\n                t._values.push(PY_ensurepy(ar[i]));\n            }\n            return t;\n        }\n    });\n    py.list = py.type('list', null, {\n        __nonzero__: function () {\n            return this.__len__ > 0 ? py.True : py.False;\n        },\n    });\n    _.defaults(py.list, py.tuple) // Copy attributes not redefined in type list\n    py.dict = py.type('dict', null, {\n        __init__: function () {\n            this._store = {};\n        },\n        __getitem__: function (key) {\n            var h = key.__hash__();\n            if (!(h in this._store)) {\n                throw new Error(\"KeyError: '\" + key.toJSON() + \"'\");\n            }\n            return this._store[h][1];\n        },\n        __setitem__: function (key, value) {\n            this._store[key.__hash__()] = [key, value];\n        },\n        __len__: function () {\n            return Object.keys(this._store).length\n        },\n        __nonzero__: function () {\n            return py.PY_size(this) > 0 ? py.True : py.False;\n        },\n        get: function () {\n            var args = py.PY_parseArgs(arguments, ['k', ['d', py.None]]);\n            var h = args.k.__hash__();\n            if (!(h in this._store)) {\n                return args.d;\n            }\n            return this._store[h][1];\n        },\n        fromJSON: function (d) {\n            var instance = py.PY_call(py.dict);\n            for (var k in (d || {})) {\n                if (!d.hasOwnProperty(k)) { continue; }\n                instance.__setitem__(\n                    py.str.fromJSON(k),\n                    PY_ensurepy(d[k]));\n            }\n            return instance;\n        },\n        toJSON: function () {\n            var out = {};\n            for(var k in this._store) {\n                var item = this._store[k];\n                out[item[0].toJSON()] = item[1].toJSON();\n            }\n            return out;\n        }\n    });\n    py.PY_def = py.type('function', null, {\n        __call__: function () {\n            // don't want to rewrite __call__ for instancemethod\n            return this._func.apply(this._inst, arguments);\n        },\n        fromJSON: function (nativefunc) {\n            var instance = py.PY_call(py.PY_def);\n            instance._inst = null;\n            instance._func = nativefunc;\n            return instance;\n        },\n        toJSON: function () {\n            return this._func;\n        }\n    });\n    py.classmethod = py.type('classmethod', null, {\n        __init__: function () {\n            var args = py.PY_parseArgs(arguments, 'function');\n            this._func = args['function'];\n        },\n        __get__: function (obj, type) {\n            return PY_instancemethod.fromJSON(this._func, type);\n        },\n        fromJSON: function (func) {\n            return py.PY_call(py.classmethod, [func]);\n        }\n    });\n    var PY_instancemethod = py.type('instancemethod', [py.PY_def], {\n        fromJSON: function (nativefunc, instance) {\n            var inst = py.PY_call(PY_instancemethod);\n            // could also use bind?\n            inst._inst = instance;\n            inst._func = nativefunc;\n            return inst;\n        }\n    });\n\n    py.abs = new py.PY_def.fromJSON(function abs() {\n        var args = py.PY_parseArgs(arguments, ['number']);\n        if (!args.number.__abs__) {\n            throw new Error(\n                \"TypeError: bad operand type for abs(): '\"\n                    + typename(args.number)\n                    + \"'\");\n        }\n        return  args.number.__abs__();\n    });\n    py.len = new py.PY_def.fromJSON(function len() {\n        var args = py.PY_parseArgs(arguments, ['object']);\n        return py.float.fromJSON(py.PY_size(args.object));\n    });\n    py.isinstance = new py.PY_def.fromJSON(function isinstance() {\n        var args = py.PY_parseArgs(arguments, ['object', 'class']);\n        return py.PY_isInstance(args.object, args['class'])\n            ? py.True : py.False;\n    });\n    py.issubclass = new py.PY_def.fromJSON(function issubclass() {\n        var args = py.PY_parseArgs(arguments, ['C', 'B']);\n        return py.PY_isSubclass(args.C, args.B)\n            ? py.True : py.False;\n    });\n\n\n    /**\n     * Implements the decoding of Python string literals (embedded in\n     * JS strings) into actual JS strings. This includes the decoding\n     * of escapes into their corresponding JS\n     * characters/codepoints/whatever.\n     *\n     * The ``unicode`` flags notes whether the literal should be\n     * decoded as a bytestring literal or a unicode literal, which\n     * pretty much only impacts decoding (or not) of unicode escapes\n     * at this point since bytestrings are not technically handled\n     * (everything is decoded to JS \"unicode\" strings)\n     *\n     * Eventurally, ``str`` could eventually use typed arrays, that'd\n     * be interesting...\n     */\n    var PY_decode_string_literal = function (str, unicode) {\n        var out = [], code;\n        // Directly maps a single escape code to an output\n        // character\n        var direct_map = {\n            '\\\\': '\\\\',\n            '\"': '\"',\n            \"'\": \"'\",\n            'a': '\\x07',\n            'b': '\\x08',\n            'f': '\\x0c',\n            'n': '\\n',\n            'r': '\\r',\n            't': '\\t',\n            'v': '\\v'\n        };\n\n        for (var i=0; i<str.length; ++i) {\n            if (str[i] !== '\\\\') {\n                out.push(str[i]);\n                continue;\n            }\n            var escape = str[i+1];\n            if (escape in direct_map) {\n                out.push(direct_map[escape]);\n                ++i;\n                continue;\n            }\n\n            switch (escape) {\n            // Ignored\n            case '\\n': ++i; continue;\n            // Character named name in the Unicode database (Unicode only)\n            case 'N':\n                if (!unicode) { break; }\n                throw Error(\"SyntaxError: \\\\N{} escape not implemented\");\n            case 'u':\n                if (!unicode) { break; }\n                var uni = str.slice(i+2, i+6);\n                if (!/[0-9a-f]{4}/i.test(uni)) {\n                    throw new Error([\n                        \"SyntaxError: (unicode error) 'unicodeescape' codec\",\n                        \" can't decode bytes in position \",\n                        i, \"-\", i+4,\n                        \": truncated \\\\uXXXX escape\"\n                    ].join(''));\n                }\n                code = parseInt(uni, 16);\n                out.push(String.fromCharCode(code));\n                // escape + 4 hex digits\n                i += 5;\n                continue;\n            case 'U':\n                if (!unicode) { break; }\n                // TODO: String.fromCodePoint\n                throw Error(\"SyntaxError: \\\\U escape not implemented\");\n            case 'x':\n                // get 2 hex digits\n                var hex = str.slice(i+2, i+4);\n                if (!/[0-9a-f]{2}/i.test(hex)) {\n                    if (!unicode) {\n                        throw new Error('ValueError: invalid \\\\x escape');\n                    }\n                    throw new Error([\n                        \"SyntaxError: (unicode error) 'unicodeescape'\",\n                        \" codec can't decode bytes in position \",\n                        i, '-', i+2,\n                        \": truncated \\\\xXX escape\"\n                    ].join(''))\n                }\n                code = parseInt(hex, 16);\n                out.push(String.fromCharCode(code));\n                // skip escape + 2 hex digits\n                i += 3;\n                continue;\n            default:\n                // Check if octal\n                if (!/[0-8]/.test(escape)) { break; }\n                var r = /[0-8]{1,3}/g;\n                r.lastIndex = i+1;\n                var m = r.exec(str);\n                var oct = m[0];\n                code = parseInt(oct, 8);\n                out.push(String.fromCharCode(code));\n                // skip matchlength\n                i += oct.length;\n                continue;\n            }\n            out.push('\\\\');\n        }\n\n        return out.join('');\n    };\n    // All binary operators with fallbacks, so they can be applied generically\n    var PY_operators = {\n        '==': ['eq', 'eq', function (a, b) { return a === b; }],\n        '!=': ['ne', 'ne', function (a, b) { return a !== b; }],\n        '<>': ['ne', 'ne', function (a, b) { return a !== b; }],\n        '<': ['lt', 'gt', function (a, b) {return a.__class__.__name__ < b.__class__.__name__;}],\n        '<=': ['le', 'ge', function (a, b) {return a.__class__.__name__ <= b.__class__.__name__;}],\n        '>': ['gt', 'lt', function (a, b) {return a.__class__.__name__ > b.__class__.__name__;}],\n        '>=': ['ge', 'le', function (a, b) {return a.__class__.__name__ >= b.__class__.__name__;}],\n\n        '+': ['add', 'radd'],\n        '-': ['sub', 'rsub'],\n        '*': ['mul', 'rmul'],\n        '/': ['div', 'rdiv'],\n        '//': ['floordiv', 'rfloordiv'],\n        '%': ['mod', 'rmod'],\n        '**': ['pow', 'rpow'],\n        '<<': ['lshift', 'rlshift'],\n        '>>': ['rshift', 'rrshift'],\n        '&': ['and', 'rand'],\n        '^': ['xor', 'rxor'],\n        '|': ['or', 'ror']\n    };\n    /**\n      * Implements operator fallback/reflection.\n      *\n      * First two arguments are the objects to apply the operator on,\n      * in their actual order (ltr).\n      *\n      * Third argument is the actual operator.\n      *\n      * If the operator methods raise exceptions, those exceptions are\n      * not intercepted.\n      */\n    var PY_op = function (o1, o2, op) {\n        var r;\n        var methods = PY_operators[op];\n        var forward = '__' + methods[0] + '__', reverse = '__' + methods[1] + '__';\n        var otherwise = methods[2];\n\n        if (forward in o1 && (r = o1[forward](o2)) !== py.NotImplemented) {\n            return r;\n        }\n        if (reverse in o2 && (r = o2[reverse](o1)) !== py.NotImplemented) {\n            return r;\n        }\n        if (otherwise) {\n            return PY_ensurepy(otherwise(o1, o2));\n        }\n        throw new Error(\n            \"TypeError: unsupported operand type(s) for \" + op + \": '\"\n                + typename(o1) + \"' and '\" + typename(o2) + \"'\");\n    };\n\n    var PY_builtins = {\n        type: py.type,\n\n        None: py.None,\n        True: py.True,\n        False: py.False,\n        NotImplemented: py.NotImplemented,\n\n        object: py.object,\n        bool: py.bool,\n        float: py.float,\n        str: py.str,\n        unicode: py.unicode,\n        tuple: py.tuple,\n        list: py.list,\n        dict: py.dict,\n\n        abs: py.abs,\n        len: py.len,\n        isinstance: py.isinstance,\n        issubclass: py.issubclass,\n        classmethod: py.classmethod,\n    };\n\n    py.parse = function (toks) {\n        var index = 0;\n        token = toks[0];\n        next = function () { return toks[++index]; };\n        return expression();\n    };\n    var evaluate_operator = function (operator, a, b) {\n        switch (operator) {\n        case 'is': return a === b ? py.True : py.False;\n        case 'is not': return a !== b ? py.True : py.False;\n        case 'in':\n            return b.__contains__(a);\n        case 'not in':\n            return py.PY_isTrue(b.__contains__(a)) ? py.False : py.True;\n        case '==': case '!=': case '<>':\n        case '<': case '<=':\n        case '>': case '>=':\n            return PY_op(a, b, operator);\n        }\n        throw new Error('SyntaxError: unknown comparator [[' + operator + ']]');\n    };\n    py.evaluate = function (expr, context) {\n        context = context || {};\n        switch (expr.id) {\n        case '(name)':\n            var val = context[expr.value];\n            if (val === undefined && expr.value in PY_builtins) {\n                return PY_builtins[expr.value];\n            }\n            return PY_ensurepy(val, expr.value);\n        case '(string)':\n            return py.str.fromJSON(expr.value);\n        case '(number)':\n            return py.float.fromJSON(expr.value);\n        case '(constant)':\n            switch (expr.value) {\n            case 'None': return py.None;\n            case 'False': return py.False;\n            case 'True': return py.True;\n            }\n            throw new Error(\"SyntaxError: unknown constant '\" + expr.value + \"'\");\n        case '(comparator)':\n            var result, left = py.evaluate(expr.expressions[0], context);\n            for(var i=0; i<expr.operators.length; ++i) {\n                result = evaluate_operator(\n                    expr.operators[i],\n                    left,\n                    left = py.evaluate(expr.expressions[i+1], context));\n                if (py.PY_not(result)) { return py.False; }\n            }\n            return py.True;\n        case 'not':\n            return py.PY_isTrue(py.evaluate(expr.first, context)) ? py.False : py.True;\n        case 'and':\n            var and_first = py.evaluate(expr.first, context);\n            if (py.PY_isTrue(and_first.__nonzero__())) {\n                return py.evaluate(expr.second, context);\n            }\n            return and_first;\n        case 'or':\n            var or_first = py.evaluate(expr.first, context);\n            if (py.PY_isTrue(or_first.__nonzero__())) {\n                return or_first\n            }\n            return py.evaluate(expr.second, context);\n        case 'if':\n            var cond = py.evaluate(expr.condition, context);\n            if (py.PY_isTrue(cond)) {\n                return py.evaluate(expr.ifTrue, context);\n            } else {\n                return py.evaluate(expr.ifFalse, context);\n            }\n        case '(':\n            if (expr.second) {\n                var callable = py.evaluate(expr.first, context);\n                var args = [], kwargs = {};\n                for (var jj=0; jj<expr.second.length; ++jj) {\n                    var arg = expr.second[jj];\n                    if (arg.id !== '=') {\n                        // arg\n                        args.push(py.evaluate(arg, context));\n                    } else {\n                        // kwarg\n                        kwargs[arg.first.value] =\n                            py.evaluate(arg.second, context);\n                    }\n                }\n                return py.PY_call(callable, args, kwargs);\n            }\n            var tuple_exprs = expr.first,\n                tuple_values = [];\n            for (var j=0, len=tuple_exprs.length; j<len; ++j) {\n                tuple_values.push(py.evaluate(\n                    tuple_exprs[j], context));\n            }\n            return py.tuple.fromJSON(tuple_values);\n        case '[':\n            if (expr.second) {\n                return py.PY_getItem(\n                    py.evaluate(expr.first, context),\n                    py.evaluate(expr.second, context));\n            }\n            var list_exprs = expr.first, list_values = [];\n            for (var k=0; k<list_exprs.length; ++k) {\n                list_values.push(py.evaluate(\n                    list_exprs[k], context));\n            }\n            return py.list.fromJSON(list_values);\n        case '{':\n            var dict_exprs = expr.first, dict = py.PY_call(py.dict);\n            for(var l=0; l<dict_exprs.length; ++l) {\n                py.PY_setItem(dict,\n                    py.evaluate(dict_exprs[l][0], context),\n                    py.evaluate(dict_exprs[l][1], context));\n            }\n            return dict;\n        case '.':\n            if (expr.second.id !== '(name)') {\n                throw new Error('SyntaxError: ' + expr);\n            }\n            return py.PY_getAttr(py.evaluate(expr.first, context),\n                                 expr.second.value);\n        // numerical operators\n        case '~':\n            return (py.evaluate(expr.first, context)).__invert__();\n        case '+':\n            if (!expr.second) {\n                return py.PY_positive(py.evaluate(expr.first, context));\n            }\n        case '-':\n            if (!expr.second) {\n                return py.PY_negative(py.evaluate(expr.first, context));\n            }\n        case '*': case '/': case '//':\n        case '%':\n        case '**':\n        case '<<': case '>>':\n        case '&': case '^': case '|':\n            return PY_op(\n                py.evaluate(expr.first, context),\n                py.evaluate(expr.second, context),\n                expr.id);\n\n        default:\n            throw new Error('SyntaxError: Unknown node [[' + expr.id + ']]');\n        }\n    };\n    py.eval = function (str, context) {\n        return py.evaluate(\n            py.parse(\n                py.tokenize(\n                    str)),\n            context).toJSON();\n    }\n})(typeof exports === 'undefined' ? py : exports);\n", "(function (py) {\n\"use strict\";\n\n/**\n * This file add extra functionality to the python interpreter exported by py.js\n *\n * Main extra functionality is about time management, more precisely:\n * - date\n * - datetime\n * - relativedelta\n *\n * These python modules are exported in the py.extras object, and can be added\n * to the evaluation context.  For example,\n *\n *  var context = {\n *      datetime: py.extras.datetime,\n *      date: py.extras.date,\n *      time: py.extras.time,\n *  };\n *  var result = py.eval(some_python_expression, context);\n */\n\n/*\n * py.js helpers and setup\n */\n\n/**\n * computes (Math.floor(a/b), a%b and passes that to the callback.\n *\n * returns the callback's result\n */\nfunction divmod (a, b, fn) {\n    var mod = a%b;\n    // in python, sign(a % b) === sign(b). Not in JS. If wrong side, add a\n    // round of b\n    if (mod > 0 && b < 0 || mod < 0 && b > 0) {\n        mod += b;\n    }\n    return fn(Math.floor(a/b), mod);\n}\n\n/**\n * Passes the fractional and integer parts of x to the callback, returns\n * the callback's result\n */\nfunction modf(x, fn) {\n    var mod = x%1;\n    if (mod < 0) {\n        mod += 1;\n    }\n    return fn(mod, Math.floor(x));\n}\n\nfunction assert(bool) {\n    if (!bool) {\n        throw new Error(\"AssertionError\");\n    }\n}\n\n\nvar obj = function () {};\nobj.prototype = py.object;\nvar asJS = function (arg) {\n    if (arg instanceof obj) {\n        return arg.toJSON();\n    }\n    return arg;\n};\n\nvar datetime = py.PY_call(py.object);\n\nvar zero = py.float.fromJSON(0);\n\n// Port from pypy/lib_pypy/datetime.py\nvar DAYS_IN_MONTH = [null, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nvar DAYS_BEFORE_MONTH = [null];\nvar dbm = 0;\n\nfor (var i=1; i<DAYS_IN_MONTH.length; ++i) {\n    DAYS_BEFORE_MONTH.push(dbm);\n    dbm += DAYS_IN_MONTH[i];\n}\n\nfunction is_leap(year) {\n    return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n}\n\nfunction days_before_year(year) {\n    var y = year - 1;\n    return y*365 + Math.floor(y/4) - Math.floor(y/100) + Math.floor(y/400);\n}\n\nfunction days_in_month(year, month) {\n    if (month === 2 && is_leap(year)) {\n        return 29;\n    }\n    return DAYS_IN_MONTH[month];\n}\n\nfunction days_before_month(year, month) {\n    var post_leap_feb = month > 2 && is_leap(year);\n    return DAYS_BEFORE_MONTH[month] + (post_leap_feb ? 1 : 0);\n}\n\nfunction ymd2ord(year, month, day) {\n    var dim = days_in_month(year, month);\n    if (!(1 <= day && day <= dim)) {\n        throw new Error(\"ValueError: day must be in 1..\" + dim);\n    }\n    return days_before_year(year) +\n           days_before_month(year, month) +\n           day;\n}\n\nfunction get_quarter_number(month) {\n    return Math.ceil(month / 3);\n}\n\nfunction get_quarter(year, month) {\n    var quarter_number = get_quarter_number(month);\n    var month_from = ((quarter_number - 1) * 3) + 1\n    var date_from = {year: year, month: month_from, day: 1}\n    var date_to = {year: year, month: month_from + 2, day: days_in_month(year, month)}\n    return [date_from, date_to];\n}\n\nfunction get_day_of_week(year, month, day) {\n    // Since JavaScript is a piece of garbage, months start at 0\n    var d = new Date(year, month - 1, day);\n    // Convert to ISO8601: Monday = 0 ... Sunday = 6\n    return (d.getDay() + 6) % 7;\n}\n\nvar DI400Y = days_before_year(401);\nvar DI100Y = days_before_year(101);\nvar DI4Y = days_before_year(5);\n\nfunction ord2ymd(n) {\n    --n;\n    var n400, n100, n4, n1, n0;\n    divmod(n, DI400Y, function (_n400, n) {\n        n400 = _n400;\n        divmod(n, DI100Y, function (_n100, n) {\n            n100 = _n100;\n            divmod(n, DI4Y, function (_n4, n) {\n                n4 = _n4;\n                divmod(n, 365, function (_n1, n) {\n                    n1 = _n1;\n                    n0 = n;\n                });\n            });\n        });\n    });\n\n    n = n0;\n    var year = n400 * 400 + 1 + n100 * 100 + n4 * 4 + n1;\n    if (n1 == 4 || n100 == 100) {\n        assert(n0 === 0);\n        return {\n            year: year - 1,\n            month: 12,\n            day: 31\n        };\n    }\n\n    var leapyear = n1 === 3 && (n4 !== 24 || n100 == 3);\n    assert(leapyear == is_leap(year));\n    var month = (n + 50) >> 5;\n    var preceding = DAYS_BEFORE_MONTH[month] + ((month > 2 && leapyear) ? 1 : 0);\n    if (preceding > n) {\n        --month;\n        preceding -= DAYS_IN_MONTH[month] + ((month === 2 && leapyear) ? 1 : 0);\n    }\n    n -= preceding;\n    return {\n        year: year,\n        month: month,\n        day: n+1\n    };\n}\n\n/**\n * Converts the stuff passed in into a valid date, applying overflows as needed\n */\nfunction tmxxx(year, month, day, hour, minute, second, microsecond) {\n    hour = hour || 0; minute = minute || 0; second = second || 0;\n    microsecond = microsecond || 0;\n\n    if (microsecond < 0 || microsecond > 999999) {\n        divmod(microsecond, 1000000, function (carry, ms) {\n            microsecond = ms;\n            second += carry;\n        });\n    }\n    if (second < 0 || second > 59) {\n        divmod(second, 60, function (carry, s) {\n            second = s;\n            minute += carry;\n        });\n    }\n    if (minute < 0 || minute > 59) {\n        divmod(minute, 60, function (carry, m) {\n            minute = m;\n            hour += carry;\n        });\n    }\n    if (hour < 0 || hour > 23) {\n        divmod(hour, 24, function (carry, h) {\n            hour = h;\n            day += carry;\n        });\n    }\n    // That was easy.  Now it gets muddy:  the proper range for day\n    // can't be determined without knowing the correct month and year,\n    // but if day is, e.g., plus or minus a million, the current month\n    // and year values make no sense (and may also be out of bounds\n    // themselves).\n    // Saying 12 months == 1 year should be non-controversial.\n    if (month < 1 || month > 12) {\n        divmod(month-1, 12, function (carry, m) {\n            month = m + 1;\n            year += carry;\n        });\n    }\n    // Now only day can be out of bounds (year may also be out of bounds\n    // for a datetime object, but we don't care about that here).\n    // If day is out of bounds, what to do is arguable, but at least the\n    // method here is principled and explainable.\n    var dim = days_in_month(year, month);\n    if (day < 1 || day > dim) {\n        // Move day-1 days from the first of the month.  First try to\n        // get off cheap if we're only one day out of range (adjustments\n        // for timezone alone can't be worse than that).\n        if (day === 0) {\n            --month;\n            if (month > 0) {\n                day = days_in_month(year, month);\n            } else {\n                --year; month=12; day=31;\n            }\n        } else if (day == dim + 1) {\n            ++month;\n            day = 1;\n            if (month > 12) {\n                month = 1;\n                ++year;\n            }\n        } else {\n            var r = ord2ymd(ymd2ord(year, month, 1) + (day - 1));\n            year = r.year;\n            month = r.month;\n            day = r.day;\n        }\n    }\n    return {\n        year: year,\n        month: month,\n        day: day,\n        hour: hour,\n        minute: minute,\n        second: second,\n        microsecond: microsecond\n    };\n}\n\ndatetime.timedelta = py.type('timedelta', null, {\n    __init__: function () {\n        var args = py.PY_parseArgs(arguments, [\n            ['days', zero], ['seconds', zero], ['microseconds', zero],\n            ['milliseconds', zero], ['minutes', zero], ['hours', zero],\n            ['weeks', zero]\n        ]);\n\n        var d = 0, s = 0, m = 0;\n        var days = args.days.toJSON() + args.weeks.toJSON() * 7;\n        var seconds = args.seconds.toJSON()\n                    + args.minutes.toJSON() * 60\n                    + args.hours.toJSON() * 3600;\n        var microseconds = args.microseconds.toJSON()\n                         + args.milliseconds.toJSON() * 1000;\n\n        // Get rid of all fractions, and normalize s and us.\n        // Take a deep breath <wink>.\n        var daysecondsfrac = modf(days, function (dayfrac, days) {\n            d = days;\n            if (dayfrac) {\n                return modf(dayfrac * 24 * 3600, function (dsf, dsw) {\n                    s = dsw;\n                    return dsf;\n                });\n            }\n            return 0;\n        });\n\n        var secondsfrac = modf(seconds, function (sf, s) {\n            seconds = s;\n            return sf + daysecondsfrac;\n        });\n        divmod(seconds, 24*3600, function (days, seconds) {\n            d += days;\n            s += seconds;\n        });\n        // seconds isn't referenced again before redefinition\n\n        microseconds += secondsfrac * 1e6;\n        divmod(microseconds, 1000000, function (seconds, microseconds) {\n            divmod(seconds, 24*3600, function (days, seconds) {\n                d += days;\n                s += seconds;\n                m += Math.round(microseconds);\n            });\n        });\n\n        // Carrying still possible here?\n\n        this.days = d;\n        this.seconds = s;\n        this.microseconds = m;\n    },\n    __str__: function () {\n        var hh, mm, ss;\n        divmod(this.seconds, 60, function (m, s) {\n            divmod(m, 60, function (h, m) {\n                hh = h;\n                mm = m;\n                ss = s;\n            });\n        });\n        var s = _.str.sprintf(\"%d:%02d:%02d\", hh, mm, ss);\n        if (this.days) {\n            s = _.str.sprintf(\"%d day%s, %s\",\n                this.days,\n                (this.days != 1 && this.days != -1) ? 's' : '',\n                s);\n        }\n        if (this.microseconds) {\n            s = _.str.sprintf(\"%s.%06d\", s, this.microseconds);\n        }\n        return py.str.fromJSON(s);\n    },\n    __eq__: function (other) {\n        if (!py.PY_isInstance(other, datetime.timedelta)) {\n            return py.False;\n        }\n\n        return (this.days === other.days\n            && this.seconds === other.seconds\n            && this.microseconds === other.microseconds)\n                ? py.True : py.False;\n    },\n    __add__: function (other) {\n        if (!py.PY_isInstance(other, datetime.timedelta)) {\n            return py.NotImplemented;\n        }\n        return py.PY_call(datetime.timedelta, [\n            py.float.fromJSON(this.days + other.days),\n            py.float.fromJSON(this.seconds + other.seconds),\n            py.float.fromJSON(this.microseconds + other.microseconds)\n        ]);\n    },\n    __radd__: function (other) { return this.__add__(other); },\n    __sub__: function (other) {\n        if (!py.PY_isInstance(other, datetime.timedelta)) {\n            return py.NotImplemented;\n        }\n        return py.PY_call(datetime.timedelta, [\n            py.float.fromJSON(this.days - other.days),\n            py.float.fromJSON(this.seconds - other.seconds),\n            py.float.fromJSON(this.microseconds - other.microseconds)\n        ]);\n    },\n    __rsub__: function (other) {\n        if (!py.PY_isInstance(other, datetime.timedelta)) {\n            return py.NotImplemented;\n        }\n        return this.__neg__().__add__(other);\n    },\n    __neg__: function () {\n        return py.PY_call(datetime.timedelta, [\n            py.float.fromJSON(-this.days),\n            py.float.fromJSON(-this.seconds),\n            py.float.fromJSON(-this.microseconds)\n        ]);\n    },\n    __pos__: function () { return this; },\n    __mul__: function (other) {\n        if (!py.PY_isInstance(other, py.float)) {\n            return py.NotImplemented;\n        }\n        var n = other.toJSON();\n        return py.PY_call(datetime.timedelta, [\n            py.float.fromJSON(this.days * n),\n            py.float.fromJSON(this.seconds * n),\n            py.float.fromJSON(this.microseconds * n)\n        ]);\n    },\n    __rmul__: function (other) { return this.__mul__(other); },\n    __div__: function (other) {\n        if (!py.PY_isInstance(other, py.float)) {\n            return py.NotImplemented;\n        }\n        var usec = ((this.days * 24 * 3600) + this.seconds) * 1000000\n                    + this.microseconds;\n        return py.PY_call(\n            datetime.timedelta, [\n                zero, zero, py.float.fromJSON(usec / other.toJSON())]);\n    },\n    __floordiv__: function (other) { return this.__div__(other); },\n    total_seconds: function () {\n        return py.float.fromJSON(\n            this.days * 86400\n          + this.seconds\n          + this.microseconds / 1000000);\n    },\n    __nonzero__: function () {\n        return (!!this.days || !!this.seconds || !!this.microseconds)\n            ? py.True\n            : py.False;\n    }\n});\n\ndatetime.datetime = py.type('datetime', null, {\n    __init__: function () {\n        var zero = py.float.fromJSON(0);\n        var args = py.PY_parseArgs(arguments, [\n            'year', 'month', 'day',\n            ['hour', zero], ['minute', zero], ['second', zero],\n            ['microsecond', zero], ['tzinfo', py.None]\n        ]);\n        for(var key in args) {\n            if (!args.hasOwnProperty(key)) { continue; }\n            this[key] = asJS(args[key]);\n        }\n    },\n    __eq__: function (other) {\n        return (this.year === other.year\n             && this.month === other.month\n             && this.day === other.day\n             && this.hour === other.hour\n             && this.minute === other.minute\n             && this.second === other.second\n             && this.microsecond === other.microsecond\n             && this.tzinfo === other.tzinfo)\n            ? py.True : py.False;\n    },\n    replace: function () {\n        var args = py.PY_parseArgs(arguments, [\n            ['year', py.None], ['month', py.None], ['day', py.None],\n            ['hour', py.None], ['minute', py.None], ['second', py.None],\n            ['microsecond', py.None] // FIXME: tzinfo, can't use None as valid input\n        ]);\n        var params = {};\n        for(var key in args) {\n            if (!args.hasOwnProperty(key)) { continue; }\n\n            var arg = args[key];\n            params[key] = (arg === py.None ? this[key] : asJS(arg));\n        }\n        return py.PY_call(datetime.datetime, params);\n    },\n    start_of: function() {\n        var args = py.PY_parseArgs(arguments, 'granularity');\n        var granularity = args.granularity.toJSON();\n        if (granularity === 'year') {\n            return py.PY_call(datetime.datetime, [this.year, 1, 1]);\n        } else if (granularity === 'quarter') {\n            var quarter = get_quarter(this.year, this.month)[0];\n            return py.PY_call(datetime.datetime, [quarter.year, quarter.month, quarter.day]);\n        } else if (granularity === 'month') {\n            return py.PY_call(datetime.datetime, [this.year, this.month, 1]);\n        } else if (granularity === 'week') {\n            var dow = get_day_of_week(this.year, this.month, this.day);\n            return py.PY_call(datetime.datetime, [this.year, this.month, this.day - dow]);\n        } else if (granularity === 'day') {\n            return py.PY_call(datetime.datetime, [this.year, this.month, this.day]);\n        } else if (granularity === 'hour') {\n            return py.PY_call(datetime.datetime, [this.year, this.month, this.day, this.hour]);\n        } else {\n            throw new Error(\n                'ValueError: ' + granularity + ' is not a supported granularity, supported ' +\n                ' granularities are: year, quarter, month, week, day and hour.'\n            )\n        }\n    },\n    end_of: function () {\n        var args = py.PY_parseArgs(arguments, 'granularity');\n        var granularity = args.granularity.toJSON();\n        var min = [23, 59, 59];\n        if (granularity === 'year') {\n            return py.PY_call(datetime.datetime, [this.year, 12, 31].concat(min));\n        } else if (granularity === 'quarter') {\n            var quarter = get_quarter(this.year, this.month)[1];\n            return py.PY_call(\n                datetime.datetime, [quarter.year, quarter.month, quarter.day].concat(min)\n            );\n        } else if (granularity === 'month') {\n            var dom = days_in_month(this.year, this.month);\n            return py.PY_call(datetime.datetime, [this.year, this.month, dom].concat(min));\n        } else if (granularity === 'week') {\n            var dow = get_day_of_week(this.year, this.month, this.day);\n            return py.PY_call(\n                datetime.datetime, [this.year, this.month, this.day + (6 - dow)].concat(min)\n            );\n        } else if (granularity === 'day') {\n            return py.PY_call(datetime.datetime, [this.year, this.month, this.day].concat(min));\n        } else if (granularity === 'hour') {\n            return py.PY_call(\n                datetime.datetime, [this.year, this.month, this.day, this.hour, 59, 59]\n            );\n        } else {\n            throw new Error(\n                'ValueError: ' + granularity + ' is not a supported granularity, supported ' +\n                ' granularities are: year, quarter, month, week, day and hour.'\n            )\n        }\n    },\n    add: function() {\n        var args = py.PY_parseArgs(arguments, [\n            ['years', py.None], ['months', py.None], ['days', py.None],\n            ['hours', py.None], ['minutes', py.None], ['seconds', py.None],\n        ]);\n        return py.PY_add(this, py.PY_call(relativedelta, {\n            'years': args.years,\n            'months': args.months,\n            'days': args.days,\n            'hours': args.hours,\n            'minutes': args.minutes,\n            'seconds': args.seconds,\n        }));\n    },\n    subtract: function() {\n        var args = py.PY_parseArgs(arguments, [\n            ['years', py.None], ['months', py.None], ['days', py.None],\n            ['hours', py.None], ['minutes', py.None], ['seconds', py.None],\n        ]);\n        var params = {};\n        for (var key in args) {\n            params[key] = (args[key] === py.None ? args[key] : py.float.fromJSON(-asJS(args[key])));\n        }\n        return py.PY_add(this, py.PY_call(relativedelta, params));\n    },\n    strftime: function () {\n        var self = this;\n        var args = py.PY_parseArgs(arguments, 'format');\n        return py.str.fromJSON(args.format.toJSON()\n            .replace(/%([A-Za-z])/g, function (m, c) {\n                switch (c) {\n                case 'Y': return _.str.sprintf('%04d', self.year);\n                case 'm': return _.str.sprintf('%02d', self.month);\n                case 'd': return _.str.sprintf('%02d', self.day);\n                case 'H': return _.str.sprintf('%02d', self.hour);\n                case 'M': return _.str.sprintf('%02d', self.minute);\n                case 'S': return _.str.sprintf('%02d', self.second);\n                }\n                throw new Error('ValueError: No known conversion for ' + m);\n            }));\n    },\n    to_utc: function () {\n        var d = new Date(this.year, this.month - 1, this.day, this.hour, this.minute, this.second);\n        var offset = d.getTimezoneOffset();\n        var kwargs = {minutes: py.float.fromJSON(offset)};\n        var timedelta = py.PY_call(py.extras.datetime.timedelta,[],kwargs);\n        var s = tmxxx(this.year, this.month, this.day + timedelta.days, this.hour, this.minute, this.second + timedelta.seconds);\n        return datetime.datetime.fromJSON(s.year, s.month, s.day, s.hour, s.minute, s.second);\n    },\n    now: py.classmethod.fromJSON(function () {\n        var d = new Date();\n        return py.PY_call(datetime.datetime, [\n            d.getFullYear(), d.getMonth() + 1, d.getDate(),\n            d.getHours(), d.getMinutes(), d.getSeconds(),\n            d.getMilliseconds() * 1000]);\n    }),\n    today: py.classmethod.fromJSON(function () {\n        var dt_class = py.PY_getAttr(datetime, 'datetime');\n        return py.PY_call(py.PY_getAttr(dt_class, 'now'));\n    }),\n    utcnow: py.classmethod.fromJSON(function () {\n        var d = new Date();\n        return py.PY_call(datetime.datetime,\n            [d.getUTCFullYear(), d.getUTCMonth() + 1, d.getUTCDate(),\n             d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(),\n             d.getUTCMilliseconds() * 1000]);\n    }),\n\n    combine: py.classmethod.fromJSON(function () {\n        var args = py.PY_parseArgs(arguments, 'date time');\n        return py.PY_call(datetime.datetime, [\n            py.PY_getAttr(args.date, 'year'),\n            py.PY_getAttr(args.date, 'month'),\n            py.PY_getAttr(args.date, 'day'),\n            py.PY_getAttr(args.time, 'hour'),\n            py.PY_getAttr(args.time, 'minute'),\n            py.PY_getAttr(args.time, 'second')\n        ]);\n    }),\n    toJSON: function () {\n        return new Date(\n            this.year,\n            this.month - 1,\n            this.day,\n            this.hour,\n            this.minute,\n            this.second,\n            this.microsecond / 1000);\n    },\n    __add__: function (other) {\n        if (!py.PY_isInstance(other, datetime.timedelta)) {\n            return py.NotImplemented;\n        }\n        var s = tmxxx(this.year, this.month, this.day + other.days, this.hour, this.minute, this.second + other.seconds);\n        return datetime.datetime.fromJSON(s.year, s.month, s.day, s.hour, s.minute, s.second);\n    },\n    __sub__: function (other) {\n        if (py.PY_isInstance(other, datetime.timedelta)) {\n            return py.PY_add(this, py.PY_negative(other));\n        }\n        return py.NotImplemented;\n    },\n    fromJSON: function (year, month, day, hour, minute, second) {\n        return py.PY_call(datetime.datetime, [year, month, day, hour, minute, second]);\n    },\n});\n\ndatetime.date = py.type('date', null, {\n    __init__: function () {\n        var args = py.PY_parseArgs(arguments, 'year month day');\n        this.year = asJS(args.year);\n        this.month = asJS(args.month);\n        this.day = asJS(args.day);\n    },\n    strftime: function () {\n        var self = this;\n        var args = py.PY_parseArgs(arguments, 'format');\n        return py.str.fromJSON(args.format.toJSON()\n            .replace(/%([A-Za-z])/g, function (m, c) {\n                switch (c) {\n                case 'Y': return self.year;\n                case 'm': return _.str.sprintf('%02d', self.month);\n                case 'd': return _.str.sprintf('%02d', self.day);\n                }\n                throw new Error('ValueError: No known conversion for ' + m);\n            }));\n    },\n    __eq__: function (other) {\n        return (this.year === other.year\n             && this.month === other.month\n             && this.day === other.day)\n            ? py.True : py.False;\n    },\n    replace: function () {\n        var args = py.PY_parseArgs(arguments, [\n            ['year', py.None], ['month', py.None], ['day', py.None]\n        ]);\n        var params = {};\n        for(var key in args) {\n            if (!args.hasOwnProperty(key)) { continue; }\n\n            var arg = args[key];\n            params[key] = (arg === py.None ? this[key] : asJS(arg));\n        }\n        return py.PY_call(datetime.date, params);\n    },\n    start_of: function() {\n        var args = py.PY_parseArgs(arguments, 'granularity');\n        var granularity = args.granularity.toJSON();\n        if (granularity === 'year') {\n            return py.PY_call(datetime.date, [this.year, 1, 1]);\n        } else if (granularity === 'quarter') {\n            var quarter = get_quarter(this.year, this.month)[0];\n            return py.PY_call(datetime.date, [quarter.year, quarter.month, quarter.day]);\n        } else if (granularity === 'month') {\n            return py.PY_call(datetime.date, [this.year, this.month, 1]);\n        } else if (granularity === 'week') {\n            var dow = get_day_of_week(this.year, this.month, this.day);\n            return py.PY_call(datetime.date, [this.year, this.month, this.day - dow]);\n        } else if (granularity === 'day') {\n            return py.PY_call(datetime.date, [this.year, this.month, this.day]);\n        } else {\n            throw new Error(\n                'ValueError: ' + granularity + ' is not a supported granularity, supported ' +\n                ' granularities are: year, quarter, month, week and day.'\n            )\n        }\n    },\n    end_of: function () {\n        var args = py.PY_parseArgs(arguments, 'granularity');\n        var granularity = args.granularity.toJSON();\n        if (granularity === 'year') {\n            return py.PY_call(datetime.date, [this.year, 12, 31]);\n        } else if (granularity === 'quarter') {\n            var quarter = get_quarter(this.year, this.month)[1];\n            return py.PY_call(datetime.date, [quarter.year, quarter.month, quarter.day]);\n        } else if (granularity === 'month') {\n            var dom = days_in_month(this.year, this.month);\n            return py.PY_call(datetime.date, [this.year, this.month, dom]);\n        } else if (granularity === 'week') {\n            var dow = get_day_of_week(this.year, this.month, this.day);\n            return py.PY_call(datetime.date, [this.year, this.month, this.day + (6 - dow)]);\n        } else if (granularity === 'day') {\n            return py.PY_call(datetime.date, [this.year, this.month, this.day]);\n        } else {\n            throw new Error(\n                'ValueError: ' + granularity + ' is not a supported granularity, supported ' +\n                ' granularities are: year, quarter, month, week and day.'\n            )\n        }\n    },\n    add: function() {\n        var args = py.PY_parseArgs(arguments, [\n            ['years', py.None], ['months', py.None], ['days', py.None],\n        ]);\n        return py.PY_add(this, py.PY_call(relativedelta, {\n            'years': args.years,\n            'months': args.months,\n            'days': args.days,\n        }));\n    },\n    subtract: function() {\n        var args = py.PY_parseArgs(arguments, [\n            ['years', py.None], ['months', py.None], ['days', py.None],\n        ]);\n        var params = {};\n        for (var key in args) {\n            params[key] = (args[key] === py.None ? args[key] : py.float.fromJSON(-asJS(args[key])));\n        }\n        return py.PY_add(this, py.PY_call(relativedelta, params));\n    },\n    __add__: function (other) {\n        if (!py.PY_isInstance(other, datetime.timedelta)) {\n            return py.NotImplemented;\n        }\n        var s = tmxxx(this.year, this.month, this.day + other.days);\n        return datetime.date.fromJSON(s.year, s.month, s.day);\n    },\n    __radd__: function (other) { return this.__add__(other); },\n    __sub__: function (other) {\n        if (py.PY_isInstance(other, datetime.timedelta)) {\n            return py.PY_add(this, py.PY_negative(other));\n        }\n        if (py.PY_isInstance(other, datetime.date)) {\n            // FIXME: getattr and sub API methods\n            return py.PY_call(datetime.timedelta, [\n                py.PY_subtract(\n                    py.PY_call(py.PY_getAttr(this, 'toordinal')),\n                    py.PY_call(py.PY_getAttr(other, 'toordinal')))\n            ]);\n        }\n        return py.NotImplemented;\n    },\n    toordinal: function () {\n        return py.float.fromJSON(ymd2ord(this.year, this.month, this.day));\n    },\n    weekday: function () {\n        return  py.float.fromJSON((this.toordinal().toJSON()+6)%7);\n    },\n    fromJSON: function (year, month, day) {\n        return py.PY_call(datetime.date, [year, month, day]);\n    },\n    today: py.classmethod.fromJSON(function () {\n        var d = new Date ();\n        return py.PY_call(datetime.date, [\n            d.getFullYear(), d.getMonth() + 1, d.getDate()]);\n    }),\n});\n\ndatetime.time = py.type('time', null, {\n    __init__: function () {\n        var zero = py.float.fromJSON(0);\n        var args = py.PY_parseArgs(arguments, [\n            ['hour', zero], ['minute', zero], ['second', zero], ['microsecond', zero],\n            ['tzinfo', py.None]\n        ]);\n\n        for(var k in args) {\n            if (!args.hasOwnProperty(k)) { continue; }\n            this[k] = asJS(args[k]);\n        }\n    }\n});\n\nvar time = py.PY_call(py.object);\ntime.strftime = py.PY_def.fromJSON(function () {\n    var args  = py.PY_parseArgs(arguments, 'format');\n    var dt_class = py.PY_getAttr(datetime, 'datetime');\n    var d = py.PY_call(py.PY_getAttr(dt_class, 'utcnow'));\n    return py.PY_call(py.PY_getAttr(d, 'strftime'), [args.format]);\n});\n\nvar args = _.map(('year month day hour minute second '\n                + 'years months weeks days hours minutes seconds '\n                + 'weekday leapdays yearday nlyearday').split(' '), function (arg) {\n    switch (arg) {\n        case 'years':case 'months':case 'days':case 'leapdays':case 'weeks':\n        case 'hours':case 'minutes':case 'seconds':\n        return [arg, zero];\n    case 'year':case 'month':case 'day':case 'weekday':\n    case 'hour':case 'minute':case 'second':\n    case 'yearday':case 'nlyearday':\n        return [arg, null];\n    default:\n        throw new Error(\"Unknown relativedelta argument \" + arg);\n    }\n});\nargs.unshift('*');\n\nvar _utils = {\n    monthrange: function (year, month) {\n        if (month < 1 || month > 12) {\n            throw new Error(\"Illegal month \" + month);\n        }\n\n        var day1 = this.weekday(year, month, 1);\n        var ndays = this.mdays[month] + (month == this.February && this.isleap(year));\n        return [day1, ndays];\n    },\n    weekday: function (year, month, day) {\n        var date = py.PY_call(datetime.date, [year, month, day]);\n        return py.PY_call(py.PY_getAttr(date, 'weekday'));\n    },\n    isleap: function (year) {\n        return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n    },\n    mdays: [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],\n    January: 1,\n    February: 2\n};\n\nvar relativedelta = py.type('relativedelta', null, {\n    __init__: function () {\n        this.ops = py.PY_parseArgs(arguments, args);\n        this.ops.days = py.float.fromJSON(\n            asJS(this.ops.days) + asJS(this.ops.weeks) * 7\n        );\n\n        var yday = zero;\n        if (this.ops.nlyearday) {\n            yday = this.ops.nlyearday;\n        } else if (this.ops.yearday) {\n            yday = this.ops.yearday;\n            if (asJS(this.ops.yearday) > 59) {\n                this.ops.leapdays = py.float.fromJS(-1);\n            }\n        }\n        if (py.PY_isTrue(yday)) {\n            var ydayidx = [31, 59, 90, 120, 151, 181, 212,\n                           243, 273, 304, 334, 366];\n            for(var idx=0; idx<ydayidx.length; ++idx) {\n                var ydays = ydayidx[idx];\n                if (asJS(yday) <= ydays) {\n                    this.ops.month = py.float.fromJSON(idx+1);\n                    if (!idx) {\n                        this.ops.day = yday;\n                    } else {\n                        this.ops.day = py.PY_subtract(\n                            yday,\n                            py.float.fromJSON(ydayidx[idx-1])\n                        );\n                    }\n                    break;\n                }\n            }\n            if (idx === ydayidx.length) {\n                throw new Error(\"Invalid year day (\" + asJS(yday) + \")\");\n            }\n        }\n        this._fix();\n    },\n    _fix: function () {\n        var self = this;\n        var months = asJS(this.ops.months);\n        if (Math.abs(months) > 11) {\n            var s = months > 0 ? 1 : -1;\n            divmod(months * s, 12, function (years, months) {\n                self.ops.months = py.float.fromJSON(months*s);\n                self.ops.years = py.float.fromJSON(\n                    asJS(self.ops.years) + years*s);\n            });\n        }\n        this._has_time = 0;\n    },\n    __add__: function (other) {\n        if (!(py.PY_isInstance(other, datetime.date) ||\n            py.PY_isInstance(other, datetime.datetime))) {\n            return py.NotImplemented;\n        }\n        // TODO: test this whole mess\n        var year = (asJS(this.ops.year) || asJS(other.year)) + asJS(this.ops.years);\n        var month = asJS(this.ops.month) || asJS(other.month);\n        var months;\n        if (months = asJS(this.ops.months)) {\n            if (Math.abs(months) < 1 || Math.abs(months) > 12) {\n                throw new Error(\"Can only use relative months between -12 and +12\");\n            }\n            month += months;\n            if (month > 12) {\n                year += 1;\n                month -= 12;\n            }\n            if (month < 1) {\n                year -= 1;\n                month += 12;\n            }\n        }\n\n        var day = Math.min(_utils.monthrange(year, month)[1],\n                           asJS(this.ops.day) || asJS(other.day));\n\n        var repl = {\n            year: py.float.fromJSON(year),\n            month: py.float.fromJSON(month),\n            day: py.float.fromJSON(day)\n        };\n\n        if (py.PY_isInstance(other, datetime.datetime)) {\n            repl.hour = py.float.fromJSON(asJS(this.ops.hour) || asJS(other.hour));\n            repl.minute = py.float.fromJSON(asJS(this.ops.minute) || asJS(other.minute));\n            repl.second = py.float.fromJSON(asJS(this.ops.second) || asJS(other.second));\n        }\n\n        var days = asJS(this.ops.days);\n        if (py.PY_isTrue(this.ops.leapdays) && month > 2 && _utils.isleap(year)) {\n            days += asJS(this.ops.leapdays);\n        }\n\n        var ret = py.PY_add(\n            py.PY_call(py.PY_getAttr(other, 'replace'), repl),\n            py.PY_call(datetime.timedelta, {\n                days: py.float.fromJSON(days),\n                hours: py.float.fromJSON(asJS(this.ops.hours)),\n                minutes: py.float.fromJSON(asJS(this.ops.minutes)),\n                seconds: py.float.fromJSON(asJS(this.ops.seconds))\n            })\n        );\n\n        if (this.ops.weekday) {\n            // FIXME: only handles numeric weekdays, not decorated\n            var weekday = asJS(this.ops.weekday), nth = 1;\n            var jumpdays = (Math.abs(nth) - 1) * 7;\n\n            var ret_weekday = asJS(py.PY_call(py.PY_getAttr(ret, 'weekday')));\n            if (nth > 0) {\n                jumpdays += (7-ret_weekday+weekday) % 7;\n            } else {\n                jumpdays += (ret_weekday - weekday) % 7;\n                jumpdays *= -1;\n            }\n            ret = py.PY_add(\n                ret,\n                py.PY_call(datetime.timedelta, {\n                    days: py.float.fromJSON(jumpdays)\n                })\n            );\n        }\n\n        return ret;\n    },\n    __radd__: function (other) {\n        return this.__add__(other);\n    },\n    __rsub__: function (other) {\n        return this.__neg__().__radd__(other);\n    },\n    __neg__: function () {\n        return py.PY_call(relativedelta, {\n            years: py.PY_negative(this.ops.years),\n            months: py.PY_negative(this.ops.months),\n            days: py.PY_negative(this.ops.days),\n            leapdays: this.ops.leapdays,\n            hours: py.PY_negative(this.ops.hours),\n            minutes: py.PY_negative(this.ops.minutes),\n            seconds: py.PY_negative(this.ops.seconds),\n            year: this.ops.year,\n            month: this.ops.month,\n            day: this.ops.day,\n            weekday: this.ops.weekday,\n            hour: this.ops.hour,\n            minute: this.ops.minute,\n            second: this.ops.second\n        });\n    }\n});\n\npy.extras = {\n    datetime: datetime,\n    time: time,\n    relativedelta: relativedelta,\n};\n\n})(typeof exports === 'undefined' ? py : exports);\n", "/*!\n * jQuery BBQ: Back Button & Query Library - v1.3pre - 8/26/2010\n * http://benalman.com/projects/jquery-bbq-plugin/\n * \n * Copyright (c) 2010 \"Cowboy\" Ben Alman\n * Dual licensed under the MIT and GPL licenses.\n * http://benalman.com/about/license/\n */\n\n// Script: jQuery BBQ: Back Button & Query Library\n//\n// *Version: 1.3pre, Last updated: 8/26/2010*\n// \n// Project Home - http://benalman.com/projects/jquery-bbq-plugin/\n// GitHub       - http://github.com/cowboy/jquery-bbq/\n// Source       - http://github.com/cowboy/jquery-bbq/raw/master/jquery.ba-bbq.js\n// (Minified)   - http://github.com/cowboy/jquery-bbq/raw/master/jquery.ba-bbq.min.js (2.2kb gzipped)\n// \n// About: License\n// \n// Copyright (c) 2010 \"Cowboy\" Ben Alman,\n// Dual licensed under the MIT and GPL licenses.\n// http://benalman.com/about/license/\n// \n// About: Examples\n// \n// These working examples, complete with fully commented code, illustrate a few\n// ways in which this plugin can be used.\n// \n// Basic AJAX     - http://benalman.com/code/projects/jquery-bbq/examples/fragment-basic/\n// Advanced AJAX  - http://benalman.com/code/projects/jquery-bbq/examples/fragment-advanced/\n// jQuery UI Tabs - http://benalman.com/code/projects/jquery-bbq/examples/fragment-jquery-ui-tabs/\n// Deparam        - http://benalman.com/code/projects/jquery-bbq/examples/deparam/\n// \n// About: Support and Testing\n// \n// Information about what version or versions of jQuery this plugin has been\n// tested with, what browsers it has been tested in, and where the unit tests\n// reside (so you can test it yourself).\n// \n// jQuery Versions - 1.2.6, 1.3.2, 1.4.1, 1.4.2\n// Browsers Tested - Internet Explorer 6-8, Firefox 2-4, Chrome 5-6, Safari 3.2-5,\n//                   Opera 9.6-10.60, iPhone 3.1, Android 1.6-2.2, BlackBerry 4.6-5.\n// Unit Tests      - http://benalman.com/code/projects/jquery-bbq/unit/\n// \n// About: Release History\n// \n// 1.3pre - (8/26/2010) Integrated <jQuery hashchange event> v1.3, which adds\n//         document.title and document.domain support in IE6/7, BlackBerry\n//         support, better Iframe hiding for accessibility reasons, and the new\n//         <jQuery.fn.hashchange> \"shortcut\" method. Added the\n//         <jQuery.param.sorted> method which reduces the possibility of\n//         extraneous hashchange event triggering. Added the\n//         <jQuery.param.fragment.ajaxCrawlable> method which can be used to\n//         enable Google \"AJAX Crawlable mode.\"\n// 1.2.1 - (2/17/2010) Actually fixed the stale window.location Safari bug from\n//         <jQuery hashchange event> in BBQ, which was the main reason for the\n//         previous release!\n// 1.2   - (2/16/2010) Integrated <jQuery hashchange event> v1.2, which fixes a\n//         Safari bug, the event can now be bound before DOM ready, and IE6/7\n//         page should no longer scroll when the event is first bound. Also\n//         added the <jQuery.param.fragment.noEscape> method, and reworked the\n//         <hashchange event (BBQ)> internal \"add\" method to be compatible with\n//         changes made to the jQuery 1.4.2 special events API.\n// 1.1.1 - (1/22/2010) Integrated <jQuery hashchange event> v1.1, which fixes an\n//         obscure IE8 EmulateIE7 meta tag compatibility mode bug.\n// 1.1   - (1/9/2010) Broke out the jQuery BBQ event.special <hashchange event>\n//         functionality into a separate plugin for users who want just the\n//         basic event & back button support, without all the extra awesomeness\n//         that BBQ provides. This plugin will be included as part of jQuery BBQ,\n//         but also be available separately. See <jQuery hashchange event>\n//         plugin for more information. Also added the <jQuery.bbq.removeState>\n//         method and added additional <jQuery.deparam> examples.\n// 1.0.3 - (12/2/2009) Fixed an issue in IE 6 where location.search and\n//         location.hash would report incorrectly if the hash contained the ?\n//         character. Also <jQuery.param.querystring> and <jQuery.param.fragment>\n//         will no longer parse params out of a URL that doesn't contain ? or #,\n//         respectively.\n// 1.0.2 - (10/10/2009) Fixed an issue in IE 6/7 where the hidden IFRAME caused\n//         a \"This page contains both secure and nonsecure items.\" warning when\n//         used on an https:// page.\n// 1.0.1 - (10/7/2009) Fixed an issue in IE 8. Since both \"IE7\" and \"IE8\n//         Compatibility View\" modes erroneously report that the browser\n//         supports the native window.onhashchange event, a slightly more\n//         robust test needed to be added.\n// 1.0   - (10/2/2009) Initial release\n\n(function($,window){\n  '$:nomunge'; // Used by YUI compressor.\n  \n  // Some convenient shortcuts.\n  var undefined,\n    aps = Array.prototype.slice,\n    decode = decodeURIComponent,\n    \n    // Method / object references.\n    jq_param = $.param,\n    jq_param_sorted,\n    jq_param_fragment,\n    jq_deparam,\n    jq_deparam_fragment,\n    jq_bbq = $.bbq = $.bbq || {},\n    jq_bbq_pushState,\n    jq_bbq_getState,\n    jq_elemUrlAttr,\n    special = $.event.special,\n    \n    // Reused strings.\n    str_hashchange = 'hashchange',\n    str_querystring = 'querystring',\n    str_fragment = 'fragment',\n    str_elemUrlAttr = 'elemUrlAttr',\n    str_href = 'href',\n    str_src = 'src',\n    \n    // Reused RegExp.\n    re_params_querystring = /^.*\\?|#.*$/g,\n    re_params_fragment,\n    re_fragment,\n    re_no_escape,\n    \n    ajax_crawlable,\n    fragment_prefix,\n    \n    // Used by jQuery.elemUrlAttr.\n    elemUrlAttr_cache = {};\n  \n  // A few commonly used bits, broken out to help reduce minified file size.\n  \n  function is_string( arg ) {\n    return typeof arg === 'string';\n  };\n  \n  // Why write the same function twice? Let's curry! Mmmm, curry..\n  \n  function curry( func ) {\n    var args = aps.call( arguments, 1 );\n    \n    return function() {\n      return func.apply( this, args.concat( aps.call( arguments ) ) );\n    };\n  };\n  \n  // Get location.hash (or what you'd expect location.hash to be) sans any\n  // leading #. Thanks for making this necessary, Firefox!\n  function get_fragment( url ) {\n    return url.replace( re_fragment, '$2' );\n  };\n  \n  // Get location.search (or what you'd expect location.search to be) sans any\n  // leading #. Thanks for making this necessary, IE6!\n  function get_querystring( url ) {\n    return url.replace( /(?:^[^?#]*\\?([^#]*).*$)?.*/, '$1' );\n  };\n  \n  // Section: Param (to string)\n  // \n  // Method: jQuery.param.querystring\n  // \n  // Retrieve the query string from a URL or if no arguments are passed, the\n  // current window.location.href.\n  // \n  // Usage:\n  // \n  // > jQuery.param.querystring( [ url ] );\n  // \n  // Arguments:\n  // \n  //  url - (String) A URL containing query string params to be parsed. If url\n  //    is not passed, the current window.location.href is used.\n  // \n  // Returns:\n  // \n  //  (String) The parsed query string, with any leading \"?\" removed.\n  //\n  \n  // Method: jQuery.param.querystring (build url)\n  // \n  // Merge a URL, with or without pre-existing query string params, plus any\n  // object, params string or URL containing query string params into a new URL.\n  // \n  // Usage:\n  // \n  // > jQuery.param.querystring( url, params [, merge_mode ] );\n  // \n  // Arguments:\n  // \n  //  url - (String) A valid URL for params to be merged into. This URL may\n  //    contain a query string and/or fragment (hash).\n  //  params - (String) A params string or URL containing query string params to\n  //    be merged into url.\n  //  params - (Object) A params object to be merged into url.\n  //  merge_mode - (Number) Merge behavior defaults to 0 if merge_mode is not\n  //    specified, and is as-follows:\n  // \n  //    * 0: params in the params argument will override any query string\n  //         params in url.\n  //    * 1: any query string params in url will override params in the params\n  //         argument.\n  //    * 2: params argument will completely replace any query string in url.\n  // \n  // Returns:\n  // \n  //  (String) A URL with a urlencoded query string in the format '?a=b&c=d&e=f'.\n  \n  // Method: jQuery.param.fragment\n  // \n  // Retrieve the fragment (hash) from a URL or if no arguments are passed, the\n  // current window.location.href.\n  // \n  // Usage:\n  // \n  // > jQuery.param.fragment( [ url ] );\n  // \n  // Arguments:\n  // \n  //  url - (String) A URL containing fragment (hash) params to be parsed. If\n  //    url is not passed, the current window.location.href is used.\n  // \n  // Returns:\n  // \n  //  (String) The parsed fragment (hash) string, with any leading \"#\" removed.\n  \n  // Method: jQuery.param.fragment (build url)\n  // \n  // Merge a URL, with or without pre-existing fragment (hash) params, plus any\n  // object, params string or URL containing fragment (hash) params into a new\n  // URL.\n  // \n  // Usage:\n  // \n  // > jQuery.param.fragment( url, params [, merge_mode ] );\n  // \n  // Arguments:\n  // \n  //  url - (String) A valid URL for params to be merged into. This URL may\n  //    contain a query string and/or fragment (hash).\n  //  params - (String) A params string or URL containing fragment (hash) params\n  //    to be merged into url.\n  //  params - (Object) A params object to be merged into url.\n  //  merge_mode - (Number) Merge behavior defaults to 0 if merge_mode is not\n  //    specified, and is as-follows:\n  // \n  //    * 0: params in the params argument will override any fragment (hash)\n  //         params in url.\n  //    * 1: any fragment (hash) params in url will override params in the\n  //         params argument.\n  //    * 2: params argument will completely replace any query string in url.\n  // \n  // Returns:\n  // \n  //  (String) A URL with a urlencoded fragment (hash) in the format '#a=b&c=d&e=f'.\n  \n  function jq_param_sub( is_fragment, get_func, url, params, merge_mode ) {\n    var result,\n      qs,\n      matches,\n      url_params,\n      hash;\n    \n    if ( params !== undefined ) {\n      // Build URL by merging params into url string.\n      \n      // matches[1] = url part that precedes params, not including trailing ?/#\n      // matches[2] = params, not including leading ?/#\n      // matches[3] = if in 'querystring' mode, hash including leading #, otherwise ''\n      matches = url.match( is_fragment ? re_fragment : /^([^#?]*)\\??([^#]*)(#?.*)/ );\n      \n      // Get the hash if in 'querystring' mode, and it exists.\n      hash = matches[3] || '';\n      \n      if ( merge_mode === 2 && is_string( params ) ) {\n        // If merge_mode is 2 and params is a string, merge the fragment / query\n        // string into the URL wholesale, without converting it into an object.\n        qs = params.replace( is_fragment ? re_params_fragment : re_params_querystring, '' );\n        \n      } else {\n        // Convert relevant params in url to object.\n        url_params = jq_deparam( matches[2] );\n        \n        params = is_string( params )\n          \n          // Convert passed params string into object.\n          ? jq_deparam[ is_fragment ? str_fragment : str_querystring ]( params )\n          \n          // Passed params object.\n          : params;\n        \n        qs = merge_mode === 2 ? params                              // passed params replace url params\n          : merge_mode === 1  ? $.extend( {}, params, url_params )  // url params override passed params\n          : $.extend( {}, url_params, params );                     // passed params override url params\n        \n        // Convert params object into a sorted params string.\n        qs = jq_param_sorted( qs );\n        \n        // Unescape characters specified via $.param.noEscape. Since only hash-\n        // history users have requested this feature, it's only enabled for\n        // fragment-related params strings.\n        if ( is_fragment ) {\n          qs = qs.replace( re_no_escape, decode );\n        }\n      }\n      \n      // Build URL from the base url, querystring and hash. In 'querystring'\n      // mode, ? is only added if a query string exists. In 'fragment' mode, #\n      // is always added.\n      result = matches[1] + ( is_fragment ? fragment_prefix : qs || !matches[1] ? '?' : '' ) + qs + hash;\n      \n    } else {\n      // If URL was passed in, parse params from URL string, otherwise parse\n      // params from window.location.href.\n      result = get_func( url !== undefined ? url : location.href );\n    }\n    \n    return result;\n  };\n  \n  jq_param[ str_querystring ]                  = curry( jq_param_sub, 0, get_querystring );\n  jq_param[ str_fragment ] = jq_param_fragment = curry( jq_param_sub, 1, get_fragment );\n  \n  // Method: jQuery.param.sorted\n  // \n  // Returns a params string equivalent to that returned by the internal\n  // jQuery.param method, but sorted, which makes it suitable for use as a\n  // cache key.\n  // \n  // For example, in most browsers jQuery.param({z:1,a:2}) returns \"z=1&a=2\"\n  // and jQuery.param({a:2,z:1}) returns \"a=2&z=1\". Even though both the\n  // objects being serialized and the resulting params strings are equivalent,\n  // if these params strings were set into the location.hash fragment\n  // sequentially, the hashchange event would be triggered unnecessarily, since\n  // the strings are different (even though the data described by them is the\n  // same). By sorting the params string, unecessary hashchange event triggering\n  // can be avoided.\n  // \n  // Usage:\n  // \n  // > jQuery.param.sorted( obj [, traditional ] );\n  // \n  // Arguments:\n  // \n  //  obj - (Object) An object to be serialized.\n  //  traditional - (Boolean) Params deep/shallow serialization mode. See the\n  //    documentation at http://api.jquery.com/jQuery.param/ for more detail.\n  // \n  // Returns:\n  // \n  //  (String) A sorted params string.\n  \n  jq_param.sorted = jq_param_sorted = function( a, traditional ) {\n    var arr = [],\n      obj = {};\n    \n    $.each( jq_param( a, traditional ).split( '&' ), function(i,v){\n      var key = v.replace( /(?:%5B|=).*$/, '' ),\n        key_obj = obj[ key ];\n      \n      if ( !key_obj ) {\n        key_obj = obj[ key ] = [];\n        arr.push( key );\n      }\n      \n      key_obj.push( v );\n    });\n    \n    return $.map( arr.sort(), function(v){\n      return obj[ v ];\n    }).join( '&' );\n  };\n  \n  // Method: jQuery.param.fragment.noEscape\n  // \n  // Specify characters that will be left unescaped when fragments are created\n  // or merged using <jQuery.param.fragment>, or when the fragment is modified\n  // using <jQuery.bbq.pushState>. This option only applies to serialized data\n  // object fragments, and not set-as-string fragments. Does not affect the\n  // query string. Defaults to \",/\" (comma, forward slash).\n  // \n  // Note that this is considered a purely aesthetic option, and will help to\n  // create URLs that \"look pretty\" in the address bar or bookmarks, without\n  // affecting functionality in any way. That being said, be careful to not\n  // unescape characters that are used as delimiters or serve a special\n  // purpose, such as the \"#?&=+\" (octothorpe, question mark, ampersand,\n  // equals, plus) characters.\n  // \n  // Usage:\n  // \n  // > jQuery.param.fragment.noEscape( [ chars ] );\n  // \n  // Arguments:\n  // \n  //  chars - (String) The characters to not escape in the fragment. If\n  //    unspecified, defaults to empty string (escape all characters).\n  // \n  // Returns:\n  // \n  //  Nothing.\n  \n  jq_param_fragment.noEscape = function( chars ) {\n    chars = chars || '';\n    var arr = $.map( chars.split(''), encodeURIComponent );\n    re_no_escape = new RegExp( arr.join('|'), 'g' );\n  };\n  \n  // A sensible default. These are the characters people seem to complain about\n  // \"uglifying up the URL\" the most.\n  jq_param_fragment.noEscape( ',/' );\n  \n  // Method: jQuery.param.fragment.ajaxCrawlable\n  // \n  // TODO: DESCRIBE\n  // \n  // Usage:\n  // \n  // > jQuery.param.fragment.ajaxCrawlable( [ state ] );\n  // \n  // Arguments:\n  // \n  //  state - (Boolean) TODO: DESCRIBE\n  // \n  // Returns:\n  // \n  //  (Boolean) The current ajaxCrawlable state.\n  \n  jq_param_fragment.ajaxCrawlable = function( state ) {\n    if ( state !== undefined ) {\n      if ( state ) {\n        re_params_fragment = /^.*(?:#!|#)/;\n        re_fragment = /^([^#]*)(?:#!|#)?(.*)$/;\n        fragment_prefix = '#!';\n      } else {\n        re_params_fragment = /^.*#/;\n        re_fragment = /^([^#]*)#?(.*)$/;\n        fragment_prefix = '#';\n      }\n      ajax_crawlable = !!state;\n    }\n    \n    return ajax_crawlable;\n  };\n  \n  jq_param_fragment.ajaxCrawlable( 0 );\n  \n  // Section: Deparam (from string)\n  // \n  // Method: jQuery.deparam\n  // \n  // Deserialize a params string into an object, optionally coercing numbers,\n  // booleans, null and undefined values; this method is the counterpart to the\n  // internal jQuery.param method.\n  // \n  // Usage:\n  // \n  // > jQuery.deparam( params [, coerce ] );\n  // \n  // Arguments:\n  // \n  //  params - (String) A params string to be parsed.\n  //  coerce - (Boolean) If true, coerces any numbers or true, false, null, and\n  //    undefined to their actual value. Defaults to false if omitted.\n  // \n  // Returns:\n  // \n  //  (Object) An object representing the deserialized params string.\n  \n  $.deparam = jq_deparam = function( params, coerce ) {\n    var obj = {},\n      coerce_types = { 'true': !0, 'false': !1, 'null': null };\n    \n    // Iterate over all name=value pairs.\n    $.each( params.replace( /\\+/g, ' ' ).split( '&' ), function(j,v){\n      var param = v.split( '=' ),\n        key = decode( param[0] ),\n        val,\n        cur = obj,\n        i = 0,\n        \n        // If key is more complex than 'foo', like 'a[]' or 'a[b][c]', split it\n        // into its component parts.\n        keys = key.split( '][' ),\n        keys_last = keys.length - 1;\n      \n      // If the first keys part contains [ and the last ends with ], then []\n      // are correctly balanced.\n      if ( /\\[/.test( keys[0] ) && /\\]$/.test( keys[ keys_last ] ) ) {\n        // Remove the trailing ] from the last keys part.\n        keys[ keys_last ] = keys[ keys_last ].replace( /\\]$/, '' );\n        \n        // Split first keys part into two parts on the [ and add them back onto\n        // the beginning of the keys array.\n        keys = keys.shift().split('[').concat( keys );\n        \n        keys_last = keys.length - 1;\n      } else {\n        // Basic 'foo' style key.\n        keys_last = 0;\n      }\n      \n      // Are we dealing with a name=value pair, or just a name?\n      if ( param.length === 2 ) {\n        val = decode( param[1] );\n        \n        // Coerce values.\n        if ( coerce ) {\n          val = val && !isNaN(val)            ? +val              // number\n            : val === 'undefined'             ? undefined         // undefined\n            : coerce_types[val] !== undefined ? coerce_types[val] // true, false, null\n            : val;                                                // string\n        }\n        \n        if ( keys_last ) {\n          // Complex key, build deep object structure based on a few rules:\n          // * The 'cur' pointer starts at the object top-level.\n          // * [] = array push (n is set to array length), [n] = array if n is \n          //   numeric, otherwise object.\n          // * If at the last keys part, set the value.\n          // * For each keys part, if the current level is undefined create an\n          //   object or array based on the type of the next keys part.\n          // * Move the 'cur' pointer to the next level.\n          // * Rinse & repeat.\n          for ( ; i <= keys_last; i++ ) {\n            key = keys[i] === '' ? cur.length : keys[i];\n            if ( key === \"__proto__\" || key === \"prototype\" || key === \"constructor\" ) break;\n            cur = cur[key] = i < keys_last\n              ? cur[key] || ( keys[i+1] && isNaN( keys[i+1] ) ? {} : [] )\n              : val;\n          }\n          \n        } else {\n          // Simple key, even simpler rules, since only scalars and shallow\n          // arrays are allowed.\n          \n          if ( $.isArray( obj[key] ) ) {\n            // val is already an array, so push on the next value.\n            obj[key].push( val );\n            \n          } else if ( obj[key] !== undefined ) {\n            // val isn't an array, but since a second value has been specified,\n            // convert val into an array.\n            obj[key] = [ obj[key], val ];\n            \n          } else {\n            // val is a scalar.\n            obj[key] = val;\n          }\n        }\n        \n      } else if ( key ) {\n        // No value was defined, so set something meaningful.\n        obj[key] = coerce\n          ? undefined\n          : '';\n      }\n    });\n    \n    return obj;\n  };\n  \n  // Method: jQuery.deparam.querystring\n  // \n  // Parse the query string from a URL or the current window.location.href,\n  // deserializing it into an object, optionally coercing numbers, booleans,\n  // null and undefined values.\n  // \n  // Usage:\n  // \n  // > jQuery.deparam.querystring( [ url ] [, coerce ] );\n  // \n  // Arguments:\n  // \n  //  url - (String) An optional params string or URL containing query string\n  //    params to be parsed. If url is omitted, the current\n  //    window.location.href is used.\n  //  coerce - (Boolean) If true, coerces any numbers or true, false, null, and\n  //    undefined to their actual value. Defaults to false if omitted.\n  // \n  // Returns:\n  // \n  //  (Object) An object representing the deserialized params string.\n  \n  // Method: jQuery.deparam.fragment\n  // \n  // Parse the fragment (hash) from a URL or the current window.location.href,\n  // deserializing it into an object, optionally coercing numbers, booleans,\n  // null and undefined values.\n  // \n  // Usage:\n  // \n  // > jQuery.deparam.fragment( [ url ] [, coerce ] );\n  // \n  // Arguments:\n  // \n  //  url - (String) An optional params string or URL containing fragment (hash)\n  //    params to be parsed. If url is omitted, the current window.location.href\n  //    is used.\n  //  coerce - (Boolean) If true, coerces any numbers or true, false, null, and\n  //    undefined to their actual value. Defaults to false if omitted.\n  // \n  // Returns:\n  // \n  //  (Object) An object representing the deserialized params string.\n  \n  function jq_deparam_sub( is_fragment, url_or_params, coerce ) {\n    if ( url_or_params === undefined || typeof url_or_params === 'boolean' ) {\n      // url_or_params not specified.\n      coerce = url_or_params;\n      url_or_params = jq_param[ is_fragment ? str_fragment : str_querystring ]();\n    } else {\n      url_or_params = is_string( url_or_params )\n        ? url_or_params.replace( is_fragment ? re_params_fragment : re_params_querystring, '' )\n        : url_or_params;\n    }\n    \n    return jq_deparam( url_or_params, coerce );\n  };\n  \n  jq_deparam[ str_querystring ]                    = curry( jq_deparam_sub, 0 );\n  jq_deparam[ str_fragment ] = jq_deparam_fragment = curry( jq_deparam_sub, 1 );\n  \n  // Section: Element manipulation\n  // \n  // Method: jQuery.elemUrlAttr\n  // \n  // Get the internal \"Default URL attribute per tag\" list, or augment the list\n  // with additional tag-attribute pairs, in case the defaults are insufficient.\n  // \n  // In the <jQuery.fn.querystring> and <jQuery.fn.fragment> methods, this list\n  // is used to determine which attribute contains the URL to be modified, if\n  // an \"attr\" param is not specified.\n  // \n  // Default Tag-Attribute List:\n  // \n  //  a      - href\n  //  base   - href\n  //  iframe - src\n  //  img    - src\n  //  input  - src\n  //  form   - action\n  //  link   - href\n  //  script - src\n  // \n  // Usage:\n  // \n  // > jQuery.elemUrlAttr( [ tag_attr ] );\n  // \n  // Arguments:\n  // \n  //  tag_attr - (Object) An object containing a list of tag names and their\n  //    associated default attribute names in the format { tag: 'attr', ... } to\n  //    be merged into the internal tag-attribute list.\n  // \n  // Returns:\n  // \n  //  (Object) An object containing all stored tag-attribute values.\n  \n  // Only define function and set defaults if function doesn't already exist, as\n  // the urlInternal plugin will provide this method as well.\n  $[ str_elemUrlAttr ] || ($[ str_elemUrlAttr ] = function( obj ) {\n    return $.extend( elemUrlAttr_cache, obj );\n  })({\n    a: str_href,\n    base: str_href,\n    iframe: str_src,\n    img: str_src,\n    input: str_src,\n    form: 'action',\n    link: str_href,\n    script: str_src\n  });\n  \n  jq_elemUrlAttr = $[ str_elemUrlAttr ];\n  \n  // Method: jQuery.fn.querystring\n  // \n  // Update URL attribute in one or more elements, merging the current URL (with\n  // or without pre-existing query string params) plus any params object or\n  // string into a new URL, which is then set into that attribute. Like\n  // <jQuery.param.querystring (build url)>, but for all elements in a jQuery\n  // collection.\n  // \n  // Usage:\n  // \n  // > jQuery('selector').querystring( [ attr, ] params [, merge_mode ] );\n  // \n  // Arguments:\n  // \n  //  attr - (String) Optional name of an attribute that will contain a URL to\n  //    merge params or url into. See <jQuery.elemUrlAttr> for a list of default\n  //    attributes.\n  //  params - (Object) A params object to be merged into the URL attribute.\n  //  params - (String) A URL containing query string params, or params string\n  //    to be merged into the URL attribute.\n  //  merge_mode - (Number) Merge behavior defaults to 0 if merge_mode is not\n  //    specified, and is as-follows:\n  //    \n  //    * 0: params in the params argument will override any params in attr URL.\n  //    * 1: any params in attr URL will override params in the params argument.\n  //    * 2: params argument will completely replace any query string in attr\n  //         URL.\n  // \n  // Returns:\n  // \n  //  (jQuery) The initial jQuery collection of elements, but with modified URL\n  //  attribute values.\n  \n  // Method: jQuery.fn.fragment\n  // \n  // Update URL attribute in one or more elements, merging the current URL (with\n  // or without pre-existing fragment/hash params) plus any params object or\n  // string into a new URL, which is then set into that attribute. Like\n  // <jQuery.param.fragment (build url)>, but for all elements in a jQuery\n  // collection.\n  // \n  // Usage:\n  // \n  // > jQuery('selector').fragment( [ attr, ] params [, merge_mode ] );\n  // \n  // Arguments:\n  // \n  //  attr - (String) Optional name of an attribute that will contain a URL to\n  //    merge params into. See <jQuery.elemUrlAttr> for a list of default\n  //    attributes.\n  //  params - (Object) A params object to be merged into the URL attribute.\n  //  params - (String) A URL containing fragment (hash) params, or params\n  //    string to be merged into the URL attribute.\n  //  merge_mode - (Number) Merge behavior defaults to 0 if merge_mode is not\n  //    specified, and is as-follows:\n  //    \n  //    * 0: params in the params argument will override any params in attr URL.\n  //    * 1: any params in attr URL will override params in the params argument.\n  //    * 2: params argument will completely replace any fragment (hash) in attr\n  //         URL.\n  // \n  // Returns:\n  // \n  //  (jQuery) The initial jQuery collection of elements, but with modified URL\n  //  attribute values.\n  \n  function jq_fn_sub( mode, force_attr, params, merge_mode ) {\n    if ( !is_string( params ) && typeof params !== 'object' ) {\n      // force_attr not specified.\n      merge_mode = params;\n      params = force_attr;\n      force_attr = undefined;\n    }\n    \n    return this.each(function(){\n      var that = $(this),\n        \n        // Get attribute specified, or default specified via $.elemUrlAttr.\n        attr = force_attr || jq_elemUrlAttr()[ ( this.nodeName || '' ).toLowerCase() ] || '',\n        \n        // Get URL value.\n        url = attr && that.attr( attr ) || '';\n      \n      // Update attribute with new URL.\n      that.attr( attr, jq_param[ mode ]( url, params, merge_mode ) );\n    });\n    \n  };\n  \n  $.fn[ str_querystring ] = curry( jq_fn_sub, str_querystring );\n  $.fn[ str_fragment ]    = curry( jq_fn_sub, str_fragment );\n  \n  // Section: History, hashchange event\n  // \n  // Method: jQuery.bbq.pushState\n  // \n  // Adds a 'state' into the browser history at the current position, setting\n  // location.hash and triggering any bound <hashchange event> callbacks\n  // (provided the new state is different than the previous state).\n  // \n  // If no arguments are passed, an empty state is created, which is just a\n  // shortcut for jQuery.bbq.pushState( {}, 2 ).\n  // \n  // Usage:\n  // \n  // > jQuery.bbq.pushState( [ params [, merge_mode ] ] );\n  // \n  // Arguments:\n  // \n  //  params - (String) A serialized params string or a hash string beginning\n  //    with # to merge into location.hash.\n  //  params - (Object) A params object to merge into location.hash.\n  //  merge_mode - (Number) Merge behavior defaults to 0 if merge_mode is not\n  //    specified (unless a hash string beginning with # is specified, in which\n  //    case merge behavior defaults to 2), and is as-follows:\n  // \n  //    * 0: params in the params argument will override any params in the\n  //         current state.\n  //    * 1: any params in the current state will override params in the params\n  //         argument.\n  //    * 2: params argument will completely replace current state.\n  // \n  // Returns:\n  // \n  //  Nothing.\n  // \n  // Additional Notes:\n  // \n  //  * Setting an empty state may cause the browser to scroll.\n  //  * Unlike the fragment and querystring methods, if a hash string beginning\n  //    with # is specified as the params agrument, merge_mode defaults to 2.\n  \n  jq_bbq.pushState = jq_bbq_pushState = function( params, merge_mode ) {\n    if ( is_string( params ) && /^#/.test( params ) && merge_mode === undefined ) {\n      // Params string begins with # and merge_mode not specified, so completely\n      // overwrite window.location.hash.\n      merge_mode = 2;\n    }\n    \n    var has_args = params !== undefined,\n      // Merge params into window.location using $.param.fragment.\n      url = jq_param_fragment( location.href,\n        has_args ? params : {}, has_args ? merge_mode : 2 );\n    \n    // Set new window.location.href. Note that Safari 3 & Chrome barf on\n    // location.hash = '#' so the entire URL is set.\n    location.href = url;\n  };\n  \n  // Method: jQuery.bbq.getState\n  // \n  // Retrieves the current 'state' from the browser history, parsing\n  // location.hash for a specific key or returning an object containing the\n  // entire state, optionally coercing numbers, booleans, null and undefined\n  // values.\n  // \n  // Usage:\n  // \n  // > jQuery.bbq.getState( [ key ] [, coerce ] );\n  // \n  // Arguments:\n  // \n  //  key - (String) An optional state key for which to return a value.\n  //  coerce - (Boolean) If true, coerces any numbers or true, false, null, and\n  //    undefined to their actual value. Defaults to false.\n  // \n  // Returns:\n  // \n  //  (Anything) If key is passed, returns the value corresponding with that key\n  //    in the location.hash 'state', or undefined. If not, an object\n  //    representing the entire 'state' is returned.\n  \n  jq_bbq.getState = jq_bbq_getState = function( key, coerce ) {\n    return key === undefined || typeof key === 'boolean'\n      ? jq_deparam_fragment( key ) // 'key' really means 'coerce' here\n      : jq_deparam_fragment( coerce )[ key ];\n  };\n  \n  // Method: jQuery.bbq.removeState\n  // \n  // Remove one or more keys from the current browser history 'state', creating\n  // a new state, setting location.hash and triggering any bound\n  // <hashchange event> callbacks (provided the new state is different than\n  // the previous state).\n  // \n  // If no arguments are passed, an empty state is created, which is just a\n  // shortcut for jQuery.bbq.pushState( {}, 2 ).\n  // \n  // Usage:\n  // \n  // > jQuery.bbq.removeState( [ key [, key ... ] ] );\n  // \n  // Arguments:\n  // \n  //  key - (String) One or more key values to remove from the current state,\n  //    passed as individual arguments.\n  //  key - (Array) A single array argument that contains a list of key values\n  //    to remove from the current state.\n  // \n  // Returns:\n  // \n  //  Nothing.\n  // \n  // Additional Notes:\n  // \n  //  * Setting an empty state may cause the browser to scroll.\n  \n  jq_bbq.removeState = function( arr ) {\n    var state = {};\n    \n    // If one or more arguments is passed..\n    if ( arr !== undefined ) {\n      \n      // Get the current state.\n      state = jq_bbq_getState();\n      \n      // For each passed key, delete the corresponding property from the current\n      // state.\n      $.each( $.isArray( arr ) ? arr : arguments, function(i,v){\n        delete state[ v ];\n      });\n    }\n    \n    // Set the state, completely overriding any existing state.\n    jq_bbq_pushState( state, 2 );\n  };\n  \n  // Event: hashchange event (BBQ)\n  // \n  // Usage in jQuery 1.4 and newer:\n  // \n  // In jQuery 1.4 and newer, the event object passed into any hashchange event\n  // callback is augmented with a copy of the location.hash fragment at the time\n  // the event was triggered as its event.fragment property. In addition, the\n  // event.getState method operates on this property (instead of location.hash)\n  // which allows this fragment-as-a-state to be referenced later, even after\n  // window.location may have changed.\n  // \n  // Note that event.fragment and event.getState are not defined according to\n  // W3C (or any other) specification, but will still be available whether or\n  // not the hashchange event exists natively in the browser, because of the\n  // utility they provide.\n  // \n  // The event.fragment property contains the output of <jQuery.param.fragment>\n  // and the event.getState method is equivalent to the <jQuery.bbq.getState>\n  // method.\n  // \n  // > $(window).bind( 'hashchange', function( event ) {\n  // >   var hash_str = event.fragment,\n  // >     param_obj = event.getState(),\n  // >     param_val = event.getState( 'param_name' ),\n  // >     param_val_coerced = event.getState( 'param_name', true );\n  // >   ...\n  // > });\n  // \n  // Usage in jQuery 1.3.2:\n  // \n  // In jQuery 1.3.2, the event object cannot to be augmented as in jQuery 1.4+,\n  // so the fragment state isn't bound to the event object and must instead be\n  // parsed using the <jQuery.param.fragment> and <jQuery.bbq.getState> methods.\n  // \n  // > $(window).bind( 'hashchange', function( event ) {\n  // >   var hash_str = $.param.fragment(),\n  // >     param_obj = $.bbq.getState(),\n  // >     param_val = $.bbq.getState( 'param_name' ),\n  // >     param_val_coerced = $.bbq.getState( 'param_name', true );\n  // >   ...\n  // > });\n  // \n  // Additional Notes:\n  // \n  // * Due to changes in the special events API, jQuery BBQ v1.2 or newer is\n  //   required to enable the augmented event object in jQuery 1.4.2 and newer.\n  // * See <jQuery hashchange event> for more detailed information.\n  \n  special[ str_hashchange ] = $.extend( special[ str_hashchange ], {\n    \n    // Augmenting the event object with the .fragment property and .getState\n    // method requires jQuery 1.4 or newer. Note: with 1.3.2, everything will\n    // work, but the event won't be augmented)\n    add: function( handleObj ) {\n      var old_handler;\n      \n      function new_handler(e) {\n        // e.fragment is set to the value of location.hash (with any leading #\n        // removed) at the time the event is triggered.\n        var hash = e[ str_fragment ] = jq_param_fragment();\n        \n        // e.getState() works just like $.bbq.getState(), but uses the\n        // e.fragment property stored on the event object.\n        e.getState = function( key, coerce ) {\n          return key === undefined || typeof key === 'boolean'\n            ? jq_deparam( hash, key ) // 'key' really means 'coerce' here\n            : jq_deparam( hash, coerce )[ key ];\n        };\n        \n        old_handler.apply( this, arguments );\n      };\n      \n      // This may seem a little complicated, but it normalizes the special event\n      // .add method between jQuery 1.4/1.4.1 and 1.4.2+\n      if ( $.isFunction( handleObj ) ) {\n        // 1.4, 1.4.1\n        old_handler = handleObj;\n        return new_handler;\n      } else {\n        // 1.4.2+\n        old_handler = handleObj.handler;\n        handleObj.handler = new_handler;\n      }\n    }\n    \n  });\n  \n})(jQuery,this);\n\n/*!\n * jQuery hashchange event - v1.3 - 7/21/2010\n * http://benalman.com/projects/jquery-hashchange-plugin/\n * \n * Copyright (c) 2010 \"Cowboy\" Ben Alman\n * Dual licensed under the MIT and GPL licenses.\n * http://benalman.com/about/license/\n */\n\n// Script: jQuery hashchange event\n//\n// *Version: 1.3, Last updated: 7/21/2010*\n// \n// Project Home - http://benalman.com/projects/jquery-hashchange-plugin/\n// GitHub       - http://github.com/cowboy/jquery-hashchange/\n// Source       - http://github.com/cowboy/jquery-hashchange/raw/master/jquery.ba-hashchange.js\n// (Minified)   - http://github.com/cowboy/jquery-hashchange/raw/master/jquery.ba-hashchange.min.js (0.8kb gzipped)\n// \n// About: License\n// \n// Copyright (c) 2010 \"Cowboy\" Ben Alman,\n// Dual licensed under the MIT and GPL licenses.\n// http://benalman.com/about/license/\n// \n// About: Examples\n// \n// These working examples, complete with fully commented code, illustrate a few\n// ways in which this plugin can be used.\n// \n// hashchange event - http://benalman.com/code/projects/jquery-hashchange/examples/hashchange/\n// document.domain - http://benalman.com/code/projects/jquery-hashchange/examples/document_domain/\n// \n// About: Support and Testing\n// \n// Information about what version or versions of jQuery this plugin has been\n// tested with, what browsers it has been tested in, and where the unit tests\n// reside (so you can test it yourself).\n// \n// jQuery Versions - 1.2.6, 1.3.2, 1.4.1, 1.4.2\n// Browsers Tested - Internet Explorer 6-8, Firefox 2-4, Chrome 5-6, Safari 3.2-5,\n//                   Opera 9.6-10.60, iPhone 3.1, Android 1.6-2.2, BlackBerry 4.6-5.\n// Unit Tests      - http://benalman.com/code/projects/jquery-hashchange/unit/\n// \n// About: Known issues\n// \n// While this jQuery hashchange event implementation is quite stable and\n// robust, there are a few unfortunate browser bugs surrounding expected\n// hashchange event-based behaviors, independent of any JavaScript\n// window.onhashchange abstraction. See the following examples for more\n// information:\n// \n// Chrome: Back Button - http://benalman.com/code/projects/jquery-hashchange/examples/bug-chrome-back-button/\n// Firefox: Remote XMLHttpRequest - http://benalman.com/code/projects/jquery-hashchange/examples/bug-firefox-remote-xhr/\n// WebKit: Back Button in an Iframe - http://benalman.com/code/projects/jquery-hashchange/examples/bug-webkit-hash-iframe/\n// Safari: Back Button from a different domain - http://benalman.com/code/projects/jquery-hashchange/examples/bug-safari-back-from-diff-domain/\n// \n// Also note that should a browser natively support the window.onhashchange \n// event, but not report that it does, the fallback polling loop will be used.\n// \n// About: Release History\n// \n// 1.3   - (7/21/2010) Reorganized IE6/7 Iframe code to make it more\n//         \"removable\" for mobile-only development. Added IE6/7 document.title\n//         support. Attempted to make Iframe as hidden as possible by using\n//         techniques from http://www.paciellogroup.com/blog/?p=604. Added \n//         support for the \"shortcut\" format $(window).hashchange( fn ) and\n//         $(window).hashchange() like jQuery provides for built-in events.\n//         Renamed jQuery.hashchangeDelay to <jQuery.fn.hashchange.delay> and\n//         lowered its default value to 50. Added <jQuery.fn.hashchange.domain>\n//         and <jQuery.fn.hashchange.src> properties plus document-domain.html\n//         file to address access denied issues when setting document.domain in\n//         IE6/7.\n// 1.2   - (2/11/2010) Fixed a bug where coming back to a page using this plugin\n//         from a page on another domain would cause an error in Safari 4. Also,\n//         IE6/7 Iframe is now inserted after the body (this actually works),\n//         which prevents the page from scrolling when the event is first bound.\n//         Event can also now be bound before DOM ready, but it won't be usable\n//         before then in IE6/7.\n// 1.1   - (1/21/2010) Incorporated document.documentMode test to fix IE8 bug\n//         where browser version is incorrectly reported as 8.0, despite\n//         inclusion of the X-UA-Compatible IE=EmulateIE7 meta tag.\n// 1.0   - (1/9/2010) Initial Release. Broke out the jQuery BBQ event.special\n//         window.onhashchange functionality into a separate plugin for users\n//         who want just the basic event & back button support, without all the\n//         extra awesomeness that BBQ provides. This plugin will be included as\n//         part of jQuery BBQ, but also be available separately.\n\n(function($,window,undefined){\n  '$:nomunge'; // Used by YUI compressor.\n  \n  // Reused string.\n  var str_hashchange = 'hashchange',\n    \n    // Method / object references.\n    doc = document,\n    fake_onhashchange,\n    special = $.event.special,\n    \n    // Does the browser support window.onhashchange? Note that IE8 running in\n    // IE7 compatibility mode reports true for 'onhashchange' in window, even\n    // though the event isn't supported, so also test document.documentMode.\n    doc_mode = doc.documentMode,\n    supports_onhashchange = 'on' + str_hashchange in window && ( doc_mode === undefined || doc_mode > 7 );\n  \n  // Get location.hash (or what you'd expect location.hash to be) sans any\n  // leading #. Thanks for making this necessary, Firefox!\n  function get_fragment( url ) {\n    url = url || location.href;\n    return '#' + url.replace( /^[^#]*#?(.*)$/, '$1' );\n  };\n  \n  // Method: jQuery.fn.hashchange\n  // \n  // Bind a handler to the window.onhashchange event or trigger all bound\n  // window.onhashchange event handlers. This behavior is consistent with\n  // jQuery's built-in event handlers.\n  // \n  // Usage:\n  // \n  // > jQuery(window).hashchange( [ handler ] );\n  // \n  // Arguments:\n  // \n  //  handler - (Function) Optional handler to be bound to the hashchange\n  //    event. This is a \"shortcut\" for the more verbose form:\n  //    jQuery(window).bind( 'hashchange', handler ). If handler is omitted,\n  //    all bound window.onhashchange event handlers will be triggered. This\n  //    is a shortcut for the more verbose\n  //    jQuery(window).trigger( 'hashchange' ). These forms are described in\n  //    the <hashchange event> section.\n  // \n  // Returns:\n  // \n  //  (jQuery) The initial jQuery collection of elements.\n  \n  // Allow the \"shortcut\" format $(elem).hashchange( fn ) for binding and\n  // $(elem).hashchange() for triggering, like jQuery does for built-in events.\n  $.fn[ str_hashchange ] = function( fn ) {\n    return fn ? this.bind( str_hashchange, fn ) : this.trigger( str_hashchange );\n  };\n  \n  // Property: jQuery.fn.hashchange.delay\n  // \n  // The numeric interval (in milliseconds) at which the <hashchange event>\n  // polling loop executes. Defaults to 50.\n  \n  // Property: jQuery.fn.hashchange.domain\n  // \n  // If you're setting document.domain in your JavaScript, and you want hash\n  // history to work in IE6/7, not only must this property be set, but you must\n  // also set document.domain BEFORE jQuery is loaded into the page. This\n  // property is only applicable if you are supporting IE6/7 (or IE8 operating\n  // in \"IE7 compatibility\" mode).\n  // \n  // In addition, the <jQuery.fn.hashchange.src> property must be set to the\n  // path of the included \"document-domain.html\" file, which can be renamed or\n  // modified if necessary (note that the document.domain specified must be the\n  // same in both your main JavaScript as well as in this file).\n  // \n  // Usage:\n  // \n  // jQuery.fn.hashchange.domain = document.domain;\n  \n  // Property: jQuery.fn.hashchange.src\n  // \n  // If, for some reason, you need to specify an Iframe src file (for example,\n  // when setting document.domain as in <jQuery.fn.hashchange.domain>), you can\n  // do so using this property. Note that when using this property, history\n  // won't be recorded in IE6/7 until the Iframe src file loads. This property\n  // is only applicable if you are supporting IE6/7 (or IE8 operating in \"IE7\n  // compatibility\" mode).\n  // \n  // Usage:\n  // \n  // jQuery.fn.hashchange.src = 'path/to/file.html';\n  \n  $.fn[ str_hashchange ].delay = 50;\n  /*\n  $.fn[ str_hashchange ].domain = null;\n  $.fn[ str_hashchange ].src = null;\n  */\n  \n  // Event: hashchange event\n  // \n  // Fired when location.hash changes. In browsers that support it, the native\n  // HTML5 window.onhashchange event is used, otherwise a polling loop is\n  // initialized, running every <jQuery.fn.hashchange.delay> milliseconds to\n  // see if the hash has changed. In IE6/7 (and IE8 operating in \"IE7\n  // compatibility\" mode), a hidden Iframe is created to allow the back button\n  // and hash-based history to work.\n  // \n  // Usage as described in <jQuery.fn.hashchange>:\n  // \n  // > // Bind an event handler.\n  // > jQuery(window).hashchange( function(e) {\n  // >   var hash = location.hash;\n  // >   ...\n  // > });\n  // > \n  // > // Manually trigger the event handler.\n  // > jQuery(window).hashchange();\n  // \n  // A more verbose usage that allows for event namespacing:\n  // \n  // > // Bind an event handler.\n  // > jQuery(window).bind( 'hashchange', function(e) {\n  // >   var hash = location.hash;\n  // >   ...\n  // > });\n  // > \n  // > // Manually trigger the event handler.\n  // > jQuery(window).trigger( 'hashchange' );\n  // \n  // Additional Notes:\n  // \n  // * The polling loop and Iframe are not created until at least one handler\n  //   is actually bound to the 'hashchange' event.\n  // * If you need the bound handler(s) to execute immediately, in cases where\n  //   a location.hash exists on page load, via bookmark or page refresh for\n  //   example, use jQuery(window).hashchange() or the more verbose \n  //   jQuery(window).trigger( 'hashchange' ).\n  // * The event can be bound before DOM ready, but since it won't be usable\n  //   before then in IE6/7 (due to the necessary Iframe), recommended usage is\n  //   to bind it inside a DOM ready handler.\n  \n  // Override existing $.event.special.hashchange methods (allowing this plugin\n  // to be defined after jQuery BBQ in BBQ's source code).\n  special[ str_hashchange ] = $.extend( special[ str_hashchange ], {\n    \n    // Called only when the first 'hashchange' event is bound to window.\n    setup: function() {\n      // If window.onhashchange is supported natively, there's nothing to do..\n      if ( supports_onhashchange ) { return false; }\n      \n      // Otherwise, we need to create our own. And we don't want to call this\n      // until the user binds to the event, just in case they never do, since it\n      // will create a polling loop and possibly even a hidden Iframe.\n      $( fake_onhashchange.start );\n    },\n    \n    // Called only when the last 'hashchange' event is unbound from window.\n    teardown: function() {\n      // If window.onhashchange is supported natively, there's nothing to do..\n      if ( supports_onhashchange ) { return false; }\n      \n      // Otherwise, we need to stop ours (if possible).\n      $( fake_onhashchange.stop );\n    }\n    \n  });\n  \n  // fake_onhashchange does all the work of triggering the window.onhashchange\n  // event for browsers that don't natively support it, including creating a\n  // polling loop to watch for hash changes and in IE 6/7 creating a hidden\n  // Iframe to enable back and forward.\n  fake_onhashchange = (function(){\n    var self = {},\n      timeout_id,\n      \n      // Remember the initial hash so it doesn't get triggered immediately.\n      last_hash = get_fragment(),\n      \n      fn_retval = function(val){ return val; },\n      history_set = fn_retval,\n      history_get = fn_retval;\n    \n    // Start the polling loop.\n    self.start = function() {\n      timeout_id || poll();\n    };\n    \n    // Stop the polling loop.\n    self.stop = function() {\n      timeout_id && clearTimeout( timeout_id );\n      timeout_id = undefined;\n    };\n    \n    // This polling loop checks every $.fn.hashchange.delay milliseconds to see\n    // if location.hash has changed, and triggers the 'hashchange' event on\n    // window when necessary.\n    function poll() {\n      var hash = get_fragment(),\n        history_hash = history_get( last_hash );\n      \n      if ( hash !== last_hash ) {\n        history_set( last_hash = hash, history_hash );\n        \n        $(window).trigger( str_hashchange );\n        \n      } else if ( history_hash !== last_hash ) {\n        location.href = location.href.replace( /#.*/, '' ) + history_hash;\n      }\n      \n      timeout_id = setTimeout( poll, $.fn[ str_hashchange ].delay );\n    };\n    \n    // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n    // vvvvvvvvvvvvvvvvvvv REMOVE IF NOT SUPPORTING IE6/7/8 vvvvvvvvvvvvvvvvvvv\n    // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n    $.browser.msie && !supports_onhashchange && (function(){\n      // Not only do IE6/7 need the \"magical\" Iframe treatment, but so does IE8\n      // when running in \"IE7 compatibility\" mode.\n      \n      var iframe,\n        iframe_src;\n      \n      // When the event is bound and polling starts in IE 6/7, create a hidden\n      // Iframe for history handling.\n      self.start = function(){\n        if ( !iframe ) {\n          iframe_src = $.fn[ str_hashchange ].src;\n          iframe_src = iframe_src && iframe_src + get_fragment();\n          \n          // Create hidden Iframe. Attempt to make Iframe as hidden as possible\n          // by using techniques from http://www.paciellogroup.com/blog/?p=604.\n          iframe = $('<iframe tabindex=\"-1\" title=\"empty\"/>').hide()\n            \n            // When Iframe has completely loaded, initialize the history and\n            // start polling.\n            .one( 'load', function(){\n              iframe_src || history_set( get_fragment() );\n              poll();\n            })\n            \n            // Load Iframe src if specified, otherwise nothing.\n            .attr( 'src', iframe_src || 'javascript:0' )\n            \n            // Append Iframe after the end of the body to prevent unnecessary\n            // initial page scrolling (yes, this works).\n            .insertAfter( 'body' )[0].contentWindow;\n          \n          // Whenever `document.title` changes, update the Iframe's title to\n          // prettify the back/next history menu entries. Since IE sometimes\n          // errors with \"Unspecified error\" the very first time this is set\n          // (yes, very useful) wrap this with a try/catch block.\n          doc.onpropertychange = function(){\n            try {\n              if ( event.propertyName === 'title' ) {\n                iframe.document.title = doc.title;\n              }\n            } catch(e) {}\n          };\n          \n        }\n      };\n      \n      // Override the \"stop\" method since an IE6/7 Iframe was created. Even\n      // if there are no longer any bound event handlers, the polling loop\n      // is still necessary for back/next to work at all!\n      self.stop = fn_retval;\n      \n      // Get history by looking at the hidden Iframe's location.hash.\n      history_get = function() {\n        return get_fragment( iframe.location.href );\n      };\n      \n      // Set a new history item by opening and then closing the Iframe\n      // document, *then* setting its location.hash. If document.domain has\n      // been set, update that as well.\n      history_set = function( hash, history_hash ) {\n        var iframe_doc = iframe.document,\n          domain = $.fn[ str_hashchange ].domain;\n        \n        if ( hash !== history_hash ) {\n          // Update Iframe with any initial `document.title` that might be set.\n          iframe_doc.title = doc.title;\n          \n          // Opening the Iframe's document after it has been closed is what\n          // actually adds a history entry.\n          iframe_doc.open();\n          \n          // Set document.domain for the Iframe document as well, if necessary.\n          domain && iframe_doc.write( '<script>document.domain=\"' + domain + '\"</script>' );\n          \n          iframe_doc.close();\n          \n          // Update the Iframe's hash, for great justice.\n          iframe.location.hash = hash;\n        }\n      };\n      \n    })();\n    // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n    // ^^^^^^^^^^^^^^^^^^^ REMOVE IF NOT SUPPORTING IE6/7/8 ^^^^^^^^^^^^^^^^^^^\n    // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n    \n    return self;\n  })();\n  \n})(jQuery,this);\n", "/** @odoo-module **/\n\nimport Context from \"web.Context\";\nimport core from \"web.core\";\nimport { ComponentAdapter } from \"web.OwlCompatibility\";\nimport { objectToQuery } from \"../core/browser/router_service\";\nimport { useDebugCategory } from \"../core/debug/debug_context\";\nimport { Dialog } from \"../core/dialog/dialog\";\nimport { useEffect, useService } from \"@web/core/utils/hooks\";\nimport { ViewNotFoundError } from \"../webclient/actions/action_service\";\nimport { cleanDomFromBootstrap, wrapSuccessOrFail } from \"./utils\";\nimport { mapDoActionOptionAPI } from \"./backend_utils\";\n\nconst { Component, tags, hooks } = owl;\n\nconst warningDialogBodyTemplate = tags.xml`<p style=\"white-space:pre-wrap\" t-esc=\"props.message\"/>`;\n\nclass ActionAdapter extends ComponentAdapter {\n    setup() {\n        super.setup();\n        this.actionService = useService(\"action\");\n        this.router = useService(\"router\");\n        this.title = useService(\"title\");\n        this.notifications = useService(\"notification\");\n        this.dialogs = useService(\"dialog\");\n        this.wowlEnv = this.env;\n        // a legacy widget widget can push_state anytime including during its async rendering\n        // In Wowl, we want to have all states pushed during the same setTimeout.\n        // This is protected in legacy (backward compatibility) but should not e supported in Wowl\n        this.tempQuery = {};\n        let originalUpdateControlPanel;\n        useEffect(\n            () => {\n                const query = this.widget.getState();\n                Object.assign(query, this.tempQuery);\n                this.tempQuery = null;\n                this.__widget = this.widget;\n                if (!this.wowlEnv.inDialog) {\n                    this.pushState(query);\n                }\n                this.wowlEnv.bus.on(\"ACTION_MANAGER:UPDATE\", this, () => {\n                    this.env.bus.trigger(\"close_dialogs\");\n                    cleanDomFromBootstrap();\n                });\n                originalUpdateControlPanel = this.__widget.updateControlPanel.bind(this.__widget);\n                this.__widget.updateControlPanel = (newProps) => {\n                    this.trigger(\"controller-title-updated\", this.__widget.getTitle());\n                    return originalUpdateControlPanel(newProps);\n                };\n                core.bus.trigger(\"DOM_updated\");\n\n                return () => {\n                    this.__widget.updateControlPanel = originalUpdateControlPanel;\n                    this.wowlEnv.bus.off(\"ACTION_MANAGER:UPDATE\", this);\n                };\n            },\n            () => []\n        );\n        hooks.useExternalListener(window, \"click\", () => {\n            cleanDomFromBootstrap();\n        });\n    }\n\n    get actionId() {\n        throw new Error(\"Should be implement by specific adapters\");\n    }\n\n    pushState(state) {\n        if (this.wowlEnv.inDialog) {\n            return;\n        }\n        const query = objectToQuery(state);\n        if (this.tempQuery) {\n            Object.assign(this.tempQuery, query);\n            return;\n        }\n        if (this.widget) {\n            const actionTitle = this.widget.getTitle();\n            if (actionTitle) {\n                this.trigger(\"controller-title-updated\", actionTitle);\n            }\n        }\n        this.router.pushState(query);\n    }\n\n    _trigger_up(ev) {\n        const payload = ev.data;\n        if (ev.name === \"do_action\") {\n            if (payload.action.context) {\n                payload.action.context = new Context(payload.action.context).eval();\n            }\n            this.onReverseBreadcrumb = payload.options && payload.options.on_reverse_breadcrumb;\n            const legacyOptions = mapDoActionOptionAPI(payload.options);\n            wrapSuccessOrFail(this.actionService.doAction(payload.action, legacyOptions), payload);\n        } else if (ev.name === \"breadcrumb_clicked\") {\n            this.actionService.restore(payload.controllerID);\n        } else if (ev.name === \"push_state\") {\n            this.pushState(payload.state);\n        } else if (ev.name === \"set_title_part\") {\n            const { part, title } = payload;\n            this.title.setParts({ [part]: title || null });\n        } else if (ev.name === \"warning\") {\n            if (payload.type === \"dialog\") {\n                class WarningDialog extends Dialog {\n                    setup() {\n                        super.setup();\n                        this.title = this.props.title;\n                    }\n                }\n                WarningDialog.bodyTemplate = warningDialogBodyTemplate;\n                this.dialogs.add(WarningDialog, {\n                    title: payload.title,\n                    message: payload.message,\n                });\n            } else {\n                this.notifications.add(payload.message, {\n                    className: payload.className,\n                    sticky: payload.sticky,\n                    title: payload.title,\n                    type: \"warning\",\n                });\n            }\n        } else {\n            super._trigger_up(ev);\n        }\n    }\n\n    /**\n     * This function is called just before the component will be unmounted,\n     * because it will be replaced by another one. However, we need to keep it\n     * alive, because we might come back to this one later. We thus return the\n     * widget instance, and set this.widget to null so that it is not destroyed\n     * by the compatibility layer. That instance will be destroyed by the\n     * ActionManager service when it will be removed from the controller stack,\n     * and if we ever come back to that controller, the instance will be given\n     * in props so that we can re-use it.\n     */\n    exportState() {\n        this.widget = null;\n        return {\n            __legacy_widget__: this.__widget,\n            __on_reverse_breadcrumb__: this.onReverseBreadcrumb,\n        };\n    }\n\n    canBeRemoved() {\n        return this.__widget.canBeRemoved();\n    }\n\n    /**\n     * @override\n     */\n    willUnmount() {\n        if (this.__widget && this.__widget.on_detach_callback) {\n            this.__widget.on_detach_callback();\n        }\n        super.willUnmount();\n    }\n    __destroy() {\n        if (this.actionService.__legacy__isActionInStack(this.actionId)) {\n            this.widget = null;\n        }\n        super.__destroy(...arguments);\n    }\n}\n\nexport class ClientActionAdapter extends ActionAdapter {\n    setup() {\n        super.setup();\n        useDebugCategory(\"action\", { action: this.props.widgetArgs[0] });\n        owl.hooks.onMounted(() => {\n            const action = this.props.widgetArgs[0];\n            if (\"params\" in action) {\n                const newState = {};\n                Object.entries(action.params).forEach(([k, v]) => {\n                    if (typeof v === \"string\" || typeof v === \"number\") {\n                        newState[k] = v;\n                    }\n                });\n                this.wowlEnv.services.router.pushState(newState);\n            }\n        });\n        this.env = Component.env;\n    }\n\n    get actionId() {\n        return this.props.widgetArgs[0].jsId;\n    }\n\n    async willStart() {\n        if (this.props.widget) {\n            this.widget = this.props.widget;\n            this.widget.setParent(this);\n            if (this.props.onReverseBreadcrumb) {\n                await this.props.onReverseBreadcrumb();\n            }\n            return this.updateWidget();\n        }\n        return super.willStart();\n    }\n\n    /**\n     * @override\n     */\n    updateWidget() {\n        return this.widget.do_show();\n    }\n\n    do_push_state(state) {\n        this.pushState(state);\n    }\n}\n\nconst magicReloadSymbol = Symbol(\"magicReload\");\n\nfunction useMagicLegacyReload() {\n    const comp = Component.current;\n    if (comp.props.widget && comp.props.widget[magicReloadSymbol]) {\n        return comp.props.widget[magicReloadSymbol];\n    }\n    let legacyReloadProm = null;\n    const getReloadProm = () => legacyReloadProm;\n    let manualReload;\n    useEffect(\n        () => {\n            const widget = comp.widget;\n            const controllerReload = widget.reload;\n            widget.reload = function (...args) {\n                manualReload = true;\n                legacyReloadProm = controllerReload.call(widget, ...args);\n                return legacyReloadProm.finally(() => {\n                    if (manualReload) {\n                        legacyReloadProm = null;\n                        manualReload = false;\n                    }\n                });\n            };\n            const controllerUpdate = widget.update;\n            widget.update = function (...args) {\n                const updateProm = controllerUpdate.call(widget, ...args);\n                const manualUpdate = !manualReload;\n                if (manualUpdate) {\n                    legacyReloadProm = updateProm;\n                }\n                return updateProm.finally(() => {\n                    if (manualUpdate) {\n                        legacyReloadProm = null;\n                    }\n                });\n            };\n            widget[magicReloadSymbol] = getReloadProm;\n        },\n        () => []\n    );\n    return getReloadProm;\n}\n\nexport class ViewAdapter extends ActionAdapter {\n    setup() {\n        super.setup();\n        this.actionService = useService(\"action\");\n        this.vm = useService(\"view\");\n        this.shouldUpdateWidget = true;\n        this.magicReload = useMagicLegacyReload();\n        const debugContext = {\n            action: this.props.viewParams.action,\n            component: this,\n        };\n        useDebugCategory(\"action\", debugContext);\n        useDebugCategory(\"view\", debugContext);\n        if (this.props.viewInfo.type === \"form\") {\n            useDebugCategory(\"form\", debugContext);\n        }\n        this.env = Component.env;\n    }\n\n    get actionId() {\n        return this.props.viewParams.action.jsId;\n    }\n\n    async willStart() {\n        if (this.props.widget) {\n            this.widget = this.props.widget;\n            this.widget.setParent(this);\n            if (this.props.onReverseBreadcrumb) {\n                await this.props.onReverseBreadcrumb();\n            }\n            return this.updateWidget(this.props.viewParams);\n        } else {\n            const view = new this.props.View(this.props.viewInfo, this.props.viewParams);\n            this.widget = await view.getController(this);\n            if (this.__owl__.status === 5 /* DESTROYED */) {\n                // the component might have been destroyed meanwhile, but if so, `this.widget` wasn't\n                // destroyed by OwlCompatibility layer as it wasn't set yet, so destroy it now\n                if (!this.actionService.__legacy__isActionInStack(this.actionId)) {\n                    this.widget.destroy();\n                }\n                return Promise.resolve();\n            }\n            return this.widget._widgetRenderAndInsert(() => {});\n        }\n    }\n\n    /**\n     * @override\n     */\n    async updateWidget() {\n        const shouldUpdateWidget = this.shouldUpdateWidget;\n        this.shouldUpdateWidget = true;\n        if (!shouldUpdateWidget) {\n            return this.magicReload();\n        }\n        await this.widget.willRestore();\n        const options = Object.assign({}, this.props.viewParams, {\n            shouldUpdateSearchComponents: true,\n        });\n        if (!this.magicReload()) {\n            this.widget.reload(options);\n        }\n        return this.magicReload();\n    }\n\n    /**\n     * Override to add the state of the legacy controller in the exported state.\n     */\n    exportState() {\n        const state = super.exportState();\n        const widgetState = this.__widget.exportState();\n        return Object.assign({}, state, widgetState);\n    }\n\n    async loadViews(resModel, context, views) {\n        return (await this.vm.loadViews({ resModel, views, context }, {})).__legacy__.fields_views;\n    }\n\n    /**\n     * @private\n     * @param {OdooEvent} ev\n     */\n    async _trigger_up(ev) {\n        const payload = ev.data;\n        if (ev.name === \"switch_view\") {\n            try {\n                const props = {};\n                if (payload.mode) {\n                    props.mode = payload.mode;\n                }\n                // if (payload.res_id) {\n                // if make 'open a record, come back, and create a new record' crash\n                props.resId = payload.res_id;\n                // }\n                await this.actionService.switchView(payload.view_type, props);\n            } catch (e) {\n                if (e instanceof ViewNotFoundError) {\n                    return;\n                }\n                throw e;\n            }\n        } else if (ev.name === \"execute_action\") {\n            const buttonContext = new Context(payload.action_data.context).eval();\n            const envContext = new Context(payload.env.context).eval();\n            wrapSuccessOrFail(\n                this.actionService.doActionButton({\n                    args: payload.action_data.args,\n                    buttonContext: buttonContext,\n                    context: envContext,\n                    close: payload.action_data.close,\n                    resModel: payload.env.model,\n                    name: payload.action_data.name,\n                    resId: payload.env.currentID || null,\n                    resIds: payload.env.resIDs,\n                    special: payload.action_data.special,\n                    type: payload.action_data.type,\n                    onClose: payload.on_closed,\n                    effect: payload.action_data.effect,\n                }),\n                payload\n            );\n        } else {\n            super._trigger_up(ev);\n        }\n    }\n}\n", "/** @odoo-module **/\n\nimport { _lt } from \"@web/core/l10n/translation\";\nimport { Dialog } from \"@web/core/dialog/dialog\";\nimport { formatDateTime, parseDateTime } from \"@web/core/l10n/dates\";\nimport { formatMany2one } from \"@web/fields/formatters\";\nimport { registry } from \"@web/core/registry\";\n\nconst { hooks } = owl;\nconst { useState } = hooks;\n\nconst debugRegistry = registry.category(\"debug\");\n\nclass GetMetadataDialog extends Dialog {\n    setup() {\n        super.setup();\n        this.state = useState({});\n    }\n\n    async willStart() {\n        await this.getMetadata();\n    }\n\n    async toggleNoupdate() {\n        await this.env.services.orm.call(\"ir.model.data\", \"toggle_noupdate\", [\n            this.props.res_model,\n            this.state.id,\n        ]);\n        await this.getMetadata();\n    }\n\n    async getMetadata() {\n        const metadata = (\n            await this.env.services.orm.call(this.props.res_model, \"get_metadata\", [\n                this.props.selectedIds,\n            ])\n        )[0];\n        this.state.id = metadata.id;\n        this.state.xmlid = metadata.xmlid;\n        this.state.creator = formatMany2one(metadata.create_uid);\n        this.state.lastModifiedBy = formatMany2one(metadata.write_uid);\n        this.state.noupdate = metadata.noupdate;\n        this.state.create_date = formatDateTime(parseDateTime(metadata.create_date), { timezone: true });\n        this.state.write_date = formatDateTime(parseDateTime(metadata.write_date), { timezone: true });\n    }\n}\nGetMetadataDialog.bodyTemplate = \"web.DebugMenu.getMetadataBody\";\nGetMetadataDialog.title = _lt(\"View Metadata\");\nclass SetDefaultDialog extends Dialog {\n    setup() {\n        super.setup();\n        this.state = {\n            fieldToSet: \"\",\n            condition: \"\",\n            scope: \"self\",\n        };\n        this.dataWidgetState = this.getDataWidgetState();\n        this.defaultFields = this.getDefaultFields();\n        this.conditions = this.getConditions();\n    }\n\n    getDataWidgetState() {\n        const renderer = this.props.component.widget.renderer;\n        const state = renderer.state;\n        const fields = state.fields;\n        const fieldsInfo = state.fieldsInfo.form;\n        const fieldNamesInView = state.getFieldNames();\n        const fieldNamesOnlyOnView = [\"message_attachment_count\"];\n        const fieldsValues = state.data;\n        const modifierDatas = {};\n        fieldNamesInView.forEach((fieldName) => {\n            modifierDatas[fieldName] = renderer.allModifiersData.find((modifierdata) => {\n                return modifierdata.node.attrs.name === fieldName;\n            });\n        });\n        return {\n            fields,\n            fieldsInfo,\n            fieldNamesInView,\n            fieldNamesOnlyOnView,\n            fieldsValues,\n            modifierDatas,\n            stateId: state.id,\n        };\n    }\n\n    getDefaultFields() {\n        const {\n            fields,\n            fieldsInfo,\n            fieldNamesInView,\n            fieldNamesOnlyOnView,\n            fieldsValues,\n            modifierDatas,\n            stateId,\n        } = this.dataWidgetState;\n        return fieldNamesInView\n            .filter((fieldName) => !fieldNamesOnlyOnView.includes(fieldName))\n            .map((fieldName) => {\n                const modifierData = modifierDatas[fieldName];\n                let invisibleOrReadOnly;\n                if (modifierData) {\n                    const evaluatedModifiers = modifierData.evaluatedModifiers[stateId];\n                    invisibleOrReadOnly =\n                        evaluatedModifiers.invisible || evaluatedModifiers.readonly;\n                }\n                const fieldInfo = fields[fieldName];\n                const valueDisplayed = this.display(fieldInfo, fieldsValues[fieldName]);\n                const value = valueDisplayed[0];\n                const displayed = valueDisplayed[1];\n                // ignore fields which are empty, invisible, readonly, o2m\n                // or m2m\n                if (\n                    !value ||\n                    invisibleOrReadOnly ||\n                    fieldInfo.type === \"one2many\" ||\n                    fieldInfo.type === \"many2many\" ||\n                    fieldInfo.type === \"binary\" ||\n                    fieldsInfo[fieldName].options.isPassword ||\n                    fieldInfo.depends === undefined ||\n                    fieldInfo.depends.length !== 0\n                ) {\n                    return false;\n                }\n                return {\n                    name: fieldName,\n                    string: fieldInfo.string,\n                    value: value,\n                    displayed: displayed,\n                };\n            })\n            .filter((val) => val)\n            .sort((field) => field.string);\n    }\n\n    getConditions() {\n        const { fields, fieldNamesInView, fieldsValues } = this.dataWidgetState;\n        return fieldNamesInView\n            .filter((fieldName) => {\n                const fieldInfo = fields[fieldName];\n                return fieldInfo.change_default;\n            })\n            .map((fieldName) => {\n                const fieldInfo = fields[fieldName];\n                const valueDisplayed = this.display(fieldInfo, fieldsValues[fieldName]);\n                const value = valueDisplayed[0];\n                const displayed = valueDisplayed[1];\n                return {\n                    name: fieldName,\n                    string: fieldInfo.string,\n                    value: value,\n                    displayed: displayed,\n                };\n            });\n    }\n\n    display(fieldInfo, value) {\n        let displayed = value;\n        if (value && fieldInfo.type === \"many2one\") {\n            displayed = value.data.display_name;\n            value = value.data.id;\n        } else if (value && fieldInfo.type === \"selection\") {\n            displayed = fieldInfo.selection.find((option) => {\n                return option[0] === value;\n            })[1];\n        }\n        return [value, displayed];\n    }\n\n    async saveDefault() {\n        if (!this.state.fieldToSet) {\n            // TODO $defaults.parent().addClass('o_form_invalid');\n            // It doesn't work in web.\n            // Good solution: Create a FormView\n            return;\n        }\n        const fieldToSet = this.defaultFields.find((field) => {\n            return field.name === this.state.fieldToSet;\n        }).value;\n        await this.env.services.orm.call(\"ir.default\", \"set\", [\n            this.props.res_model,\n            this.state.fieldToSet,\n            fieldToSet,\n            this.state.scope === \"self\",\n            true,\n            this.state.condition || false,\n        ]);\n        this.trigger(\"dialog-closed\");\n    }\n}\nSetDefaultDialog.bodyTemplate = \"web.DebugMenu.setDefaultBody\";\nSetDefaultDialog.footerTemplate = \"web.DebugMenu.SetDefaultFooter\";\nSetDefaultDialog.title = _lt(\"Set Default\");\n\n// Form view items\n\nfunction setDefaults({ action, component, env }) {\n    return {\n        type: \"item\",\n        description: env._t(\"Set Defaults\"),\n        callback: () => {\n            env.services.dialog.add(SetDefaultDialog, {\n                res_model: action.res_model,\n                component,\n            });\n        },\n        sequence: 310,\n    };\n}\n\nfunction viewMetadata({ action, component, env }) {\n    const selectedIds = component.widget.getSelectedIds();\n    if (selectedIds.length !== 1) {\n        return null;\n    }\n    return {\n        type: \"item\",\n        description: env._t(\"View Metadata\"),\n        callback: () => {\n            env.services.dialog.add(GetMetadataDialog, {\n                res_model: action.res_model,\n                selectedIds,\n            });\n        },\n        sequence: 320,\n    };\n}\n\nfunction manageAttachments({ action, component, env }) {\n    const selectedIds = component.widget.getSelectedIds();\n    const description = env._t(\"Manage Attachments\");\n    if (selectedIds.length !== 1) {\n        return null;\n    }\n    return {\n        type: \"item\",\n        description,\n        callback: () => {\n            const selectedId = selectedIds[0];\n            env.services.action.doAction({\n                res_model: \"ir.attachment\",\n                name: description,\n                views: [\n                    [false, \"list\"],\n                    [false, \"form\"],\n                ],\n                type: \"ir.actions.act_window\",\n                domain: [\n                    [\"res_model\", \"=\", action.res_model],\n                    [\"res_id\", \"=\", selectedId],\n                ],\n                context: {\n                    default_res_model: action.res_model,\n                    default_res_id: selectedId,\n                },\n            });\n        },\n        sequence: 330,\n    };\n}\n\ndebugRegistry\n    .category(\"form\")\n    .add(\"setDefaults\", setDefaults)\n    .add(\"viewMetadata\", viewMetadata)\n    .add(\"manageAttachments\", manageAttachments);\n", "/** @odoo-module **/\n\nimport { bus } from \"web.core\";\nimport Context from \"web.Context\";\n\nimport { browser } from \"../core/browser/browser\";\nimport { registry } from \"../core/registry\";\nimport { mapDoActionOptionAPI } from \"./backend_utils\";\n\nexport const legacyServiceProvider = {\n    dependencies: [\"effect\", \"action\"],\n    start({ services }) {\n        browser.addEventListener(\"show-effect\", (ev) => {\n            services.effect.add(ev.detail);\n        });\n        bus.on(\"show-effect\", this, (payload) => {\n            services.effect.add(payload);\n        });\n\n        browser.addEventListener(\"do-action\", (ev) => {\n            const payload = ev.detail;\n            if (payload.action.context) {\n                payload.action.context = new Context(payload.action.context).eval();\n            }\n            const legacyOptions = mapDoActionOptionAPI(payload.options);\n            services.action.doAction(payload.action, legacyOptions);\n        });\n    },\n};\n\nregistry.category(\"services\").add(\"legacy_service_provider\", legacyServiceProvider);\n", "/** @odoo-module **/\n\nimport { registry } from \"@web/core/registry\";\nimport { useService } from \"@web/core/utils/hooks\";\nimport { action_registry as legacyActionRegistry } from \"web.core\";\nimport Widget from \"web.Widget\";\nimport { setScrollPosition } from \"../core/utils/scrolling\";\nimport { useSetupAction } from \"../webclient/actions/action_hook\";\nimport { ClientActionAdapter } from \"./action_adapters\";\nimport { breadcrumbsToLegacy } from \"./backend_utils\";\n\nconst { Component, hooks, tags } = owl;\nconst actionRegistry = registry.category(\"actions\");\n\nconst legacyClientActionTemplate = tags.xml`\n    <ClientActionAdapter Component=\"Widget\" widgetArgs=\"widgetArgs\" widget=\"widget\"\n                         onReverseBreadcrumb=\"onReverseBreadcrumb\" t-ref=\"controller\"\n                         t-on-scrollTo.stop=\"onScrollTo\"/>`;\n\n// registers an action from the legacy action registry to the wowl one, ensuring\n// that widget actions are actually Components\nfunction registerClientAction(name, action) {\n    if (action.prototype instanceof Widget) {\n        // the action is a widget, wrap it into a Component and register that component\n        class Action extends Component {\n            constructor() {\n                super(...arguments);\n                this.controllerRef = hooks.useRef(\"controller\");\n                this.Widget = action;\n                const options = {};\n                for (const key in this.props) {\n                    if (key === \"action\" || key === \"actionId\") {\n                        continue;\n                    } else {\n                        options[key] = this.props[key];\n                    }\n                }\n                if (this.env.config.breadcrumbs) {\n                    options.breadcrumbs = breadcrumbsToLegacy(this.env.config.breadcrumbs);\n                }\n\n                // always add user context to the action context\n                this.user = useService(\"user\");\n                const clientAction = Object.assign({}, this.props.action, {\n                    context: Object.assign({}, this.user.context, this.props.action.context),\n                });\n\n                this.widgetArgs = [clientAction, options];\n                this.widget = this.props.state && this.props.state.__legacy_widget__;\n                this.onReverseBreadcrumb =\n                    this.props.state && this.props.state.__on_reverse_breadcrumb__;\n                useSetupAction({\n                    beforeLeave: () => this.controllerRef.comp.__widget.canBeRemoved(),\n                    getLocalState: () => this.controllerRef.comp.exportState(),\n                });\n                this.onScrollTo = (ev) => {\n                    setScrollPosition(this, { left: ev.detail.left, top: ev.detail.top });\n                };\n            }\n        }\n        Action.template = legacyClientActionTemplate;\n        Action.components = { ClientActionAdapter };\n        Action.isLegacy = true;\n        Action.target = action.prototype.target;\n        actionRegistry.add(name, Action);\n    } else {\n        // the action is either a Component or a function, register it directly\n        actionRegistry.add(name, action);\n    }\n}\n\n// register action already in the legacy registry, and listens to future registrations\nfor (const [name, action] of Object.entries(legacyActionRegistry.entries())) {\n    if (!actionRegistry.contains(name)) {\n        registerClientAction(name, action);\n    }\n}\nlegacyActionRegistry.onAdd(registerClientAction);\n", "/** @odoo-module **/\n\nimport { Dialog } from \"../core/dialog/dialog\";\nimport { patch } from \"@web/core/utils/patch\";\nimport { useEffect } from \"@web/core/utils/hooks\";\nimport OwlDialog from \"web.OwlDialog\";\n\n/**\n * This is a patch of the new Dialog class.\n * Its purpose is to inform the old \"active/inactive\" mechanism.\n */\npatch(Dialog.prototype, \"Legacy Adapted Dialog\", {\n    setup() {\n        this._super();\n        useEffect(\n            () => {\n                OwlDialog.display(this);\n                return () => OwlDialog.hide(this);\n            },\n            () => []\n        );\n    },\n});\n", "/** @odoo-module **/\nconst { Component, hooks, tags } = owl;\n\nimport { useService } from \"@web/core/utils/hooks\";\nimport { useSetupAction } from \"../webclient/actions/action_hook\";\nimport legacyViewRegistry from \"web.view_registry\";\nimport { ViewAdapter } from \"./action_adapters\";\nimport Widget from \"web.Widget\";\nimport {\n    breadcrumbsToLegacy,\n    getGlobalState,\n    getLocalState,\n    searchModelStateToLegacy,\n} from \"./backend_utils\";\nimport { setScrollPosition } from \"../core/utils/scrolling\";\nimport { registry } from \"@web/core/registry\";\nimport { loadPublicAsset } from \"@web/core/assets\";\n\nconst viewRegistry = registry.category(\"views\");\n\nfunction getJsClassWidget(fieldsInfo) {\n    const parsedXML = new DOMParser().parseFromString(fieldsInfo.arch, \"text/xml\");\n    const key = parsedXML.documentElement.getAttribute(\"js_class\");\n    return legacyViewRegistry.get(key);\n}\n\nconst legacyViewTemplate = tags.xml`\n    <ViewAdapter Component=\"Widget\" View=\"View\" viewInfo=\"viewInfo\" viewParams=\"viewParams\"\n                 widget=\"widget\" onReverseBreadcrumb=\"onReverseBreadcrumb\" t-ref=\"controller\"\n                 t-on-scrollTo.stop=\"onScrollTo\"/>`;\n\n// registers a view from the legacy view registry to the wowl one, but wrapped\n// into an Owl Component\nfunction registerView(name, LegacyView) {\n    class Controller extends Component {\n        constructor() {\n            super(...arguments);\n            this.vm = useService(\"view\");\n            this.controllerRef = hooks.useRef(\"controller\");\n            this.Widget = Widget; // fool the ComponentAdapter with a simple Widget\n            this.View = LegacyView;\n            this.viewInfo = {};\n\n            let resIds;\n            let searchModel;\n            let searchPanel;\n            const { globalState } = this.props;\n            if (globalState) {\n                resIds = globalState.resIds;\n                searchModel = searchModelStateToLegacy(globalState.searchModel);\n                searchPanel = globalState.searchPanel;\n            }\n\n            // always add user context to the action context\n            this.user = useService(\"user\");\n            const action = Object.assign({}, this.props.action, {\n                context: Object.assign({}, this.user.context, this.props.action.context),\n            });\n\n            const { actionFlags, breadcrumbs = [] } = this.env.config;\n            this.viewParams = Object.assign({}, actionFlags, {\n                action,\n                // legacy views automatically add the last part of the breadcrumbs\n                breadcrumbs: breadcrumbsToLegacy(breadcrumbs),\n                modelName: this.props.resModel,\n                currentId: this.props.resId,\n                controllerState: {\n                    currentId:\n                        \"resId\" in this.props\n                            ? this.props.resId\n                            : this.props.state && this.props.state.currentId,\n                    resIds: this.props.resIds || resIds,\n                    searchModel,\n                    searchPanel,\n                },\n            });\n\n            // To open a new empty form view\n            // Legacy demands undefined ids, not False\n            if (this.viewParams.currentId === false) {\n                this.viewParams.currentId = undefined;\n                this.viewParams.controllerState.currentId = undefined;\n            }\n\n            // Only add mode to viewParams if it is specified to avoid overwriting the default mode in some view (eg graph)\n            if (this.props.mode) {\n                this.viewParams.mode = this.props.mode;\n            }\n            this.widget = this.props.state && this.props.state.__legacy_widget__;\n            this.onReverseBreadcrumb =\n                this.props.state && this.props.state.__on_reverse_breadcrumb__;\n            useSetupAction({\n                beforeLeave: () => this.controllerRef.comp.__widget.canBeRemoved(),\n                getGlobalState: () => getGlobalState(this.controllerRef.comp.exportState()),\n                getLocalState: () => getLocalState(this.controllerRef.comp.exportState()),\n            });\n            this.onScrollTo = (ev) => {\n                setScrollPosition(this, { left: ev.detail.left, top: ev.detail.top });\n            };\n        }\n\n        async willStart() {\n            const params = {\n                resModel: this.props.resModel,\n                views: this.props.views,\n                context: this.props.context,\n            };\n            const options = {\n                actionId: this.env.config.actionId,\n                loadActionMenus: this.props.loadActionMenus,\n                loadIrFilters: this.props.loadIrFilters,\n            };\n            const viewDescriptions = await this.vm.loadViews(params, options);\n            const result = viewDescriptions.__legacy__;\n            const fieldsInfo = result.fields_views[this.props.type];\n            const jsClass = getJsClassWidget(fieldsInfo);\n            this.View = jsClass || this.View;\n            this.viewInfo = Object.assign({}, fieldsInfo, {\n                fields: result.fields,\n                viewFields: fieldsInfo.fields,\n            });\n            let controlPanelFieldsView;\n            if (result.fields_views.search) {\n                controlPanelFieldsView = Object.assign({}, result.fields_views.search, {\n                    favoriteFilters: result.filters,\n                    fields: result.fields,\n                    viewFields: result.fields_views.search.fields,\n                });\n            }\n            const { viewSwitcherEntries = [] } = this.env.config;\n            const views = this.viewParams.action.views\n                .filter(([, vtype]) => vtype !== \"search\")\n                .map(([vid, vtype]) => {\n                    const view = viewSwitcherEntries.find((v) => v.type === vtype);\n                    if (view) {\n                        return Object.assign({}, view, { viewID: vid });\n                    } else {\n                        return {\n                            viewID: vid,\n                            type: vtype,\n                            multiRecord: !this.constructor.multiRecord,\n                        };\n                    }\n                });\n            this.viewParams.action = Object.assign({}, this.viewParams.action, {\n                controlPanelFieldsView,\n                _views: this.viewParams.action.views,\n                views,\n            });\n        }\n    }\n    Controller.template = legacyViewTemplate;\n\n    Controller.components = { ViewAdapter };\n    Controller.display_name = LegacyView.prototype.display_name;\n    Controller.icon = LegacyView.prototype.icon;\n    Controller.isMobileFriendly = LegacyView.prototype.mobile_friendly;\n    Controller.multiRecord = LegacyView.prototype.multi_record;\n    Controller.type = LegacyView.prototype.viewType;\n    Controller.accessKey = LegacyView.prototype.accesskey;\n    Controller.isLegacy = true;\n    if (!viewRegistry.contains(name)) {\n        viewRegistry.add(name, Controller);\n    }\n}\n\n// register views already in the legacy registry, and listens to future registrations\nfor (const [name, action] of Object.entries(legacyViewRegistry.entries())) {\n    registerView(name, action);\n}\nlegacyViewRegistry.onAdd(registerView);\n\nexport async function loadLegacyViews({ orm, rpc }) {\n    if (!orm && rpc) {\n        orm = {\n            call: (...callArgs) => {\n                const [model, method, args = [], kwargs = {}] = callArgs;\n                return rpc({ model, method, args, kwargs });\n            },\n        };\n    }\n    await loadPublicAsset(\"web.assets_backend_legacy_lazy\", orm);\n}\n", "/** @odoo-module **/\n\nimport { registry } from \"@web/core/registry\";\n\n/**\n * @typedef {import(\"../env\").OdooEnv} OdooEnv\n * @typedef {import(\"../core/errors/error_service\").UncaughtPromiseError} UncaughtPromiseError\n */\n\n// -----------------------------------------------------------------------------\n// Legacy Promise error handling\n// -----------------------------------------------------------------------------\n\n/**\n * @param {OdooEnv} env\n * @param {Error} error\n * @param {Error} originalError\n * @returns {boolean}\n */\nfunction legacyRejectPromiseHandler(env, error, originalError) {\n    if (error.name === \"UncaughtPromiseError\") {\n        const isLegitError = originalError && originalError instanceof Error;\n        const isLegacyRPC = originalError && originalError.legacy;\n        if (!isLegitError && !isLegacyRPC) {\n            // we consider that a code throwing something that is not an error is\n            // a case where it is meant as an asynchronous control flow (as legacy\n            // code is sadly doing). For now, we just want to consider this as a non\n            // error, so we prevent default it.\n            error.unhandledRejectionEvent.preventDefault();\n            return true;\n        }\n    }\n    return false;\n}\n\nregistry\n    .category(\"error_handlers\")\n    .add(\"legacyRejectPromiseHandler\", legacyRejectPromiseHandler, { sequence: 1 });\n", "/** @odoo-module **/\n\nimport { registry } from \"@web/core/registry\";\nimport { ConnectionLostError, RPCError } from \"../core/network/rpc_service\";\nimport { lostConnectionHandler, rpcErrorHandler } from \"@web/core/errors/error_handlers\";\n\nconst errorHandlerRegistry = registry.category(\"error_handlers\");\n\n/**\n * @typedef {import(\"../env\").OdooEnv} OdooEnv\n * @typedef {import(\"../core/errors/error_service\").UncaughtError} UncaughError\n */\n\n// -----------------------------------------------------------------------------\n// Legacy RPC error handling\n// -----------------------------------------------------------------------------\n\n/**\n * @param {OdooEnv} env\n * @param {Error} error\n * @param {Error} originalError\n * @returns {boolean}\n */\nfunction legacyRPCErrorHandler(env, error, originalError) {\n    if (\n        originalError &&\n        originalError.legacy &&\n        originalError.message &&\n        (originalError.message instanceof RPCError ||\n            originalError.message instanceof ConnectionLostError)\n    ) {\n        const event = originalError.event;\n        originalError = originalError.message;\n        if (event.isDefaultPrevented()) {\n            // in theory, here, event was already handled\n            error.unhandledRejectionEvent.preventDefault();\n            return true;\n        }\n        event.preventDefault();\n        if (originalError instanceof ConnectionLostError) {\n            return lostConnectionHandler(env, error, originalError);\n        }\n        return rpcErrorHandler(env, error, originalError);\n    }\n    return false;\n}\nerrorHandlerRegistry.add(\"legacyRPCErrorHandler\", legacyRPCErrorHandler, { sequence: 2 });\n", "odoo.define(\"root.widget\", function (require) {\n    require(\"web.legacySetup\");\n    const { ComponentAdapter } = require(\"web.OwlCompatibility\");\n\n    const { Component } = owl;\n\n    return new ComponentAdapter(null, { Component }); // for its method _trigger_up\n});\n", "odoo.define(\"web.SystrayMenu\", function () {\n    return { Items: [] };\n});\n", "/** @odoo-module  **/\n\nimport { ComponentAdapter } from \"web.OwlCompatibility\";\nimport * as legacySystrayMenu from \"web.SystrayMenu\";\nimport { registry } from \"../core/registry\";\n\nconst { Component, tags } = owl;\nconst systrayRegistry = registry.category(\"systray\");\n\nclass SystrayItemAdapter extends ComponentAdapter {\n    constructor() {\n        super(...arguments);\n        this.env = Component.env;\n    }\n}\n\n// registers the legacy systray menu items from the legacy systray registry\n// to the wowl one, but wrapped into Owl components\nconst legacySystrayMenuItems = legacySystrayMenu.Items;\nconst convertedItems = [];\nlet id = 1;\n\nconst legacySystrayItemTemplate = tags.xml`<SystrayItemAdapter Component=\"Widget\" />`;\n\nfunction addSystrayItem(Widget) {\n    const name = `_legacy_systray_item_${id++}`;\n\n    class SystrayItem extends Component {\n        constructor() {\n            super(...arguments);\n            this.Widget = Widget;\n        }\n    }\n    SystrayItem.template = legacySystrayItemTemplate;\n    SystrayItem.components = { SystrayItemAdapter };\n\n    systrayRegistry.add(name, { Component: SystrayItem }, { sequence: Widget.prototype.sequence });\n\n    convertedItems.push(Widget);\n}\n\nlegacySystrayMenuItems.forEach(addSystrayItem);\nconst push = legacySystrayMenuItems.push.bind(legacySystrayMenuItems);\nlegacySystrayMenuItems.push = function (Widget) {\n    push(Widget);\n    addSystrayItem(Widget);\n};\nconst splice = legacySystrayMenuItems.splice.bind(legacySystrayMenuItems);\nlegacySystrayMenuItems.splice = function () {\n    splice(...arguments);\n    legacySystrayMenuItems.forEach((Widget) => {\n        if (!convertedItems.includes(Widget)) {\n            addSystrayItem(Widget);\n        }\n    });\n};\n", "/** @odoo-module **/\n\nimport ActionModel from \"@web/legacy/js/views/action_model\";\nimport { makeContext } from \"@web/core/context\";\n\n/**\n * @param {string} state\n * @returns {string}\n */\nfunction searchModelStateFromLegacy(state) {\n    /**\n     * Possible problem if only one of ControlPanelModelExtension or SearchPanelModelExtension is installed.\n     * We might need to do something in SearchModel.\n     * @todo (DAM) check when search panel is reworked.\n     */\n    const parsedState = JSON.parse(state);\n    const newState = {};\n\n    if (parsedState.ControlPanelModelExtension) {\n        const {\n            query,\n            filters,\n            nextGroupId,\n            nextGroupNumber,\n            nextId,\n        } = parsedState.ControlPanelModelExtension;\n\n        newState.nextGroupId = nextGroupId;\n        newState.nextGroupNumber = nextGroupNumber;\n        newState.nextId = nextId;\n        newState.query = [];\n        newState.searchItems = {};\n\n        for (const queryElem of query) {\n            const filterId = queryElem.filterId;\n            const filter = filters[filterId];\n            const newQueryElem = { searchItemId: filterId };\n            switch (filter.type) {\n                case \"filter\":\n                    if (filter.hasOptions) {\n                        newQueryElem.generatorId = queryElem.optionId;\n                    }\n                    break;\n                case \"groupBy\":\n                    if (filter.hasOptions) {\n                        newQueryElem.intervalId = queryElem.optionId;\n                    }\n                    break;\n                case \"field\":\n                    newQueryElem.autocompleteValue = {\n                        value: queryElem.value,\n                        label: queryElem.label,\n                        operator: queryElem.operator,\n                    };\n                    break;\n            }\n            newState.query.push(newQueryElem);\n        }\n\n        for (const filter of Object.values(filters)) {\n            const item = Object.assign({}, filter);\n            switch (item.type) {\n                case \"groupBy\":\n                    if (filter.hasOptions) {\n                        item.type = \"dateGroupBy\";\n                        item.defaultIntervalId = item.defaultOptionId;\n                        delete item.hasOptions;\n                        delete item.defaultOptionId;\n                    }\n                    break;\n                case \"filter\":\n                    if (filter.hasOptions) {\n                        item.type = \"dateFilter\";\n                        item.defaultGeneratorId = item.defaultOptionId;\n                        delete item.hasOptions;\n                        delete item.isDateFilter;\n                        delete item.defaultOptionId;\n                    }\n                    break;\n                case \"favorite\":\n                    item.orderBy = item.orderedBy;\n                    delete item.orderedBy;\n                    break;\n            }\n            newState.searchItems[filter.id] = item;\n        }\n    }\n\n    if (parsedState.SearchPanelModelExtension) {\n        const { sections, searchPanelInfo } = parsedState.SearchPanelModelExtension;\n        newState.sections = sections;\n        //! Can be undefined. See search_model.__legacyParseSearchPanelArchAnyway\n        newState.searchPanelInfo = searchPanelInfo;\n    }\n\n    for (const [key, extension] of Object.entries(ActionModel.registry.entries())) {\n        if (\n            ![\"ControlPanel\", \"SearchPanel\"].includes(key) &&\n            parsedState[extension.name] !== undefined\n        ) {\n            newState[key] = parsedState[extension.name];\n        }\n    }\n\n    if (!Object.keys(newState).length) {\n        return;\n    }\n\n    return JSON.stringify(newState);\n}\n\n/**\n * @param {string} state\n * @returns {string}\n */\nexport function searchModelStateToLegacy(state) {\n    if (!state) {\n        return;\n    }\n\n    const parsedState = JSON.parse(state);\n    const query = [];\n    for (const queryElem of parsedState.query) {\n        const searchItemId = queryElem.searchItemId;\n        const searchItem = parsedState.searchItems[searchItemId];\n        const groupId = searchItem.groupId;\n        const legacyQueryElem = { filterId: searchItemId, groupId };\n        switch (searchItem.type) {\n            case \"dateFilter\":\n                legacyQueryElem.optionId = queryElem.generatorId;\n                break;\n            case \"dateGroupBy\":\n                legacyQueryElem.optionId = queryElem.intervalId;\n                break;\n            case \"comparison\":\n                legacyQueryElem.type = \"comparison\";\n                legacyQueryElem.dateFilterId = searchItem.dateFilterId;\n                break;\n            case \"field\":\n                legacyQueryElem.value = queryElem.autocompleteValue.value;\n                legacyQueryElem.label = queryElem.autocompleteValue.label;\n                legacyQueryElem.operator = queryElem.autocompleteValue.operator;\n                break;\n        }\n        query.push(legacyQueryElem);\n    }\n\n    const filters = {};\n    for (const item of Object.values(parsedState.searchItems)) {\n        const filter = Object.assign({}, item);\n        switch (item.type) {\n            case \"dateGroupBy\":\n                filter.type = \"groupBy\";\n                filter.hasOptions = true;\n                filter.defaultOptionId = item.defaultIntervalId;\n                delete filter.defaultIntervalId;\n                break;\n            case \"dateFilter\":\n                filter.type = \"filter\";\n                filter.isDateFilter = true;\n                filter.hasOptions = true;\n                filter.defaultOptionId = item.defaultGeneratorId;\n                delete filter.defaultGeneratorId;\n                break;\n            case \"favorite\":\n                filter.orderedBy = item.orderBy;\n                delete filter.orderBy;\n                break;\n            case \"filter\":\n                let context = item.context;\n                try {\n                    context = makeContext([context]);\n                } catch (e) {}\n                filter.context = context;\n        }\n        filters[item.id] = filter;\n    }\n\n    const { nextGroupId, nextGroupNumber, nextId, sections, searchPanelInfo } = parsedState;\n    const legacyState = {};\n    legacyState.ControlPanelModelExtension = {\n        query,\n        filters,\n        nextGroupId,\n        nextGroupNumber,\n        nextId,\n    };\n    legacyState.SearchPanelModelExtension = { sections, searchPanelInfo };\n\n    for (const [key, extension] of Object.entries(ActionModel.registry.entries())) {\n        if (![\"ControlPanel\", \"SearchPanel\"].includes(key) && parsedState[key] !== undefined) {\n            legacyState[extension.name] = parsedState[key];\n        }\n    }\n\n    return JSON.stringify(legacyState);\n}\n\nexport function getGlobalState(legacyControllerState) {\n    const { resIds, searchModel, searchPanel } = legacyControllerState;\n    const globalState = {};\n    if (searchPanel) {\n        globalState.searchPanel = searchPanel;\n    }\n    if (resIds) {\n        globalState.resIds = resIds;\n    }\n    const newSearchModel = searchModelStateFromLegacy(searchModel);\n    if (newSearchModel) {\n        globalState.searchModel = newSearchModel;\n    }\n    return globalState;\n}\n\nexport function getLocalState(legacyControllerState) {\n    const state = Object.assign({}, legacyControllerState);\n    delete state.searchModel;\n    delete state.searchPanel;\n    delete state.resIds;\n    return state;\n}\n\nexport function mapDoActionOptionAPI(legacyOptions) {\n    legacyOptions = legacyOptions || {};\n    // use camelCase instead of snake_case for some keys\n    Object.assign(legacyOptions, {\n        additionalContext: legacyOptions.additional_context,\n        clearBreadcrumbs: legacyOptions.clear_breadcrumbs,\n        viewType: legacyOptions.view_type,\n        onClose: legacyOptions.on_close,\n        props: Object.assign({ resId: legacyOptions.res_id }, legacyOptions.props),\n    });\n    if (legacyOptions.controllerState) {\n        legacyOptions.props.globalState = getGlobalState(legacyOptions.controllerState);\n    }\n    delete legacyOptions.additional_context;\n    delete legacyOptions.clear_breadcrumbs;\n    delete legacyOptions.view_type;\n    delete legacyOptions.res_id;\n    delete legacyOptions.on_close;\n    return legacyOptions;\n}\n\nexport function makeLegacyActionManagerService(legacyEnv) {\n    // add a service to redirect 'do-action' events triggered on the bus in the\n    // legacy env to the action-manager service in the wowl env\n    return {\n        dependencies: [\"action\"],\n        start(env) {\n            function do_action(action, options) {\n                const legacyOptions = mapDoActionOptionAPI(options);\n                return env.services.action.doAction(action, legacyOptions);\n            }\n            legacyEnv.bus.on(\"do-action\", null, (payload) => {\n                const { action, options } = payload;\n                do_action(action, options);\n            });\n            return { do_action };\n        },\n    };\n}\n\nexport function breadcrumbsToLegacy(breadcrumbs) {\n    if (!breadcrumbs) {\n        return;\n    }\n    return breadcrumbs.slice().map((bc) => {\n        return { title: bc.name, controllerID: bc.jsId };\n    });\n}\n", "/** @odoo-module **/\n\nimport { browser } from \"../core/browser/browser\";\nimport AbstractStorageService from \"web.AbstractStorageService\";\nimport {\n    ConnectionAbortedError,\n    RPCError,\n    makeErrorFromResponse,\n    ConnectionLostError,\n} from \"../core/network/rpc_service\";\nimport { ErrorDialog } from \"../core/errors/error_dialogs\";\n\nexport function makeLegacyRpcService(legacyEnv) {\n    return {\n        start(env) {\n            legacyEnv.bus.on(\"rpc_request\", null, (rpcId) => {\n                env.bus.trigger(\"RPC:REQUEST\", rpcId);\n            });\n            legacyEnv.bus.on(\"rpc_response\", null, (rpcId) => {\n                env.bus.trigger(\"RPC:RESPONSE\", rpcId);\n            });\n            legacyEnv.bus.on(\"rpc_response_failed\", null, (rpcId) => {\n                env.bus.trigger(\"RPC:RESPONSE\", rpcId);\n            });\n        },\n    };\n}\n\n/**\n * Returns a service that maps legacy dialogs\n * to new environment services behavior.\n *\n * @param {object} legacyEnv\n * @returns a wowl deployable service\n */\nexport function makeLegacyDialogMappingService(legacyEnv) {\n    return {\n        dependencies: [\"ui\", \"hotkey\"],\n        start(env) {\n            const { ui, hotkey } = env.services;\n\n            function getModalEl(dialog) {\n                return dialog.modalRef ? dialog.modalRef.el : dialog.$modal[0];\n            }\n\n            function getCloseCallback(dialog) {\n                return dialog.modalRef ? () => dialog._close() : () => dialog.$modal.modal(\"hide\");\n            }\n\n            const dialogHotkeyRemoveMap = new Map();\n\n            function onOpenDialog(dialog) {\n                ui.activateElement(getModalEl(dialog));\n                const remove = hotkey.add(\"escape\", getCloseCallback(dialog));\n                dialogHotkeyRemoveMap.set(dialog, remove);\n            }\n\n            function onCloseDialog(dialog) {\n                ui.deactivateElement(getModalEl(dialog));\n                if (dialogHotkeyRemoveMap.has(dialog)) {\n                    const removeHotkey = dialogHotkeyRemoveMap.get(dialog);\n                    removeHotkey();\n                    dialogHotkeyRemoveMap.delete(dialog);\n                }\n            }\n\n            legacyEnv.bus.on(\"legacy_dialog_opened\", null, onOpenDialog);\n            legacyEnv.bus.on(\"legacy_dialog_destroyed\", null, onCloseDialog);\n\n            legacyEnv.bus.on(\"owl_dialog_mounted\", null, onOpenDialog);\n            legacyEnv.bus.on(\"owl_dialog_willunmount\", null, onCloseDialog);\n        },\n    };\n}\n\n/**\n * Deploys a service allowing legacy to add/remove commands.\n *\n * @param {object} legacyEnv\n * @returns a wowl deployable service\n */\nexport function makeLegacyCommandService(legacyEnv) {\n    return {\n        dependencies: [\"command\"],\n        start(env) {\n            const { command } = env.services;\n\n            const commandRemoveMap = new Map();\n\n            function setLegacyCommand(uniqueId, getCommandDefinition) {\n                const { name, action, options } = getCommandDefinition(env);\n                removeLegacyCommand(uniqueId);\n                commandRemoveMap.set(uniqueId, command.add(name, action, options));\n            }\n\n            function removeLegacyCommand(uniqueId) {\n                if (commandRemoveMap.has(uniqueId)) {\n                    const removeCommand = commandRemoveMap.get(uniqueId);\n                    removeCommand();\n                    commandRemoveMap.delete(uniqueId);\n                }\n            }\n\n            legacyEnv.bus.on(\"set_legacy_command\", null, setLegacyCommand);\n            legacyEnv.bus.on(\"remove_legacy_command\", null, removeLegacyCommand);\n        },\n    };\n}\n\nexport function makeLegacyDropdownService(legacyEnv) {\n    return {\n        dependencies: [\"ui\", \"hotkey\"],\n        start(_, { ui, hotkey }) {\n            legacyEnv.services.ui = ui;\n            legacyEnv.services.hotkey = hotkey;\n        },\n    };\n}\n\nexport function makeLegacySessionService(legacyEnv, session) {\n    return {\n        dependencies: [\"user\"],\n        start(env) {\n            // userContext, Object.create is incompatible with legacy new Context\n            function mapContext() {\n                return Object.assign({}, env.services.user.context);\n            }\n            Object.defineProperty(legacyEnv.session, \"userContext\", {\n                get: () => mapContext(),\n            });\n            Object.defineProperty(session, \"user_context\", {\n                get: () => mapContext(),\n            });\n        },\n    };\n}\n\nexport function mapLegacyEnvToWowlEnv(legacyEnv, wowlEnv) {\n    // rpc\n    legacyEnv.session.rpc = (...args) => {\n        let rejection;\n        const prom = new Promise((resolve, reject) => {\n            const [route, params, settings = {}] = args;\n            // Add user context in kwargs if there are kwargs\n            if (params && params.kwargs) {\n                params.kwargs.context = Object.assign(\n                    {},\n                    legacyEnv.session.user_context,\n                    params.kwargs.context,\n                );\n            }\n            const jsonrpc = wowlEnv.services.rpc(route, params, {\n                silent: settings.shadow,\n                xhr: settings.xhr,\n            });\n            rejection = () => {\n                jsonrpc.abort();\n            };\n            jsonrpc.then(resolve).catch((reason) => {\n                if (reason instanceof RPCError || reason instanceof ConnectionLostError) {\n                    // we do not reject an error here because we want to pass through\n                    // the legacy guardedCatch code\n                    reject({ message: reason, event: $.Event(), legacy: true });\n                } else if (reason instanceof ConnectionAbortedError) {\n                    reject({ message: reason.message, event: $.Event(\"abort\") });\n                } else {\n                    reject(reason);\n                }\n            });\n        });\n        prom.abort = rejection;\n        return prom;\n    };\n    // Storages\n    function mapStorage(storage) {\n        const StorageService = AbstractStorageService.extend({ storage });\n        return new StorageService();\n    }\n\n    legacyEnv.services.local_storage = mapStorage(browser.localStorage);\n    legacyEnv.services.session_storage = mapStorage(browser.sessionStorage);\n    // map WebClientReady\n    wowlEnv.bus.on(\"WEB_CLIENT_READY\", null, () => {\n        legacyEnv.bus.trigger(\"web_client_ready\");\n    });\n\n    wowlEnv.bus.on(\"SCROLLER:ANCHOR_LINK_CLICKED\", null, (payload) => {\n        legacyEnv.bus.trigger(\"SCROLLER:ANCHOR_LINK_CLICKED\", payload);\n    });\n\n    legacyEnv.bus.on(\"clear_cache\", null, () => {\n        wowlEnv.bus.trigger(\"CLEAR-CACHES\");\n    });\n}\n\nconst reBSTooltip = /^bs-.*$/;\n\nexport function cleanDomFromBootstrap() {\n    const body = document.body;\n    // multiple bodies in tests\n    // Bootstrap tooltips\n    const tooltips = body.querySelectorAll(\"body .tooltip\");\n    for (const tt of tooltips) {\n        if (Array.from(tt.classList).find((cls) => reBSTooltip.test(cls))) {\n            tt.parentNode.removeChild(tt);\n        }\n    }\n}\n\nexport function makeLegacyNotificationService(legacyEnv) {\n    return {\n        dependencies: [\"notification\"],\n        start(env) {\n            let notifId = 0;\n            const idsToRemoveFn = {};\n\n            function notify({\n                title,\n                message,\n                subtitle,\n                buttons = [],\n                sticky,\n                type,\n                className,\n                onClose,\n            }) {\n                if (subtitle) {\n                    title = [title, subtitle].filter(Boolean).join(\" \");\n                }\n                if (!message && title) {\n                    message = title;\n                    title = undefined;\n                }\n\n                buttons = buttons.map((button) => {\n                    return {\n                        name: button.text,\n                        icon: button.icon,\n                        primary: button.primary,\n                        onClick: button.click,\n                    };\n                });\n\n                const removeFn = env.services.notification.add(_.escape(message), {\n                    sticky,\n                    title,\n                    type,\n                    className,\n                    onClose,\n                    buttons,\n                    messageIsHtml: true,\n                });\n                const id = ++notifId;\n                idsToRemoveFn[id] = removeFn;\n                return id;\n            }\n\n            function close(id, _, wait) {\n                //the legacy close method had 3 arguments : the notification id, silent and wait.\n                //the new close method only has 2 arguments : the notification id and wait.\n                const removeFn = idsToRemoveFn[id];\n                delete idsToRemoveFn[id];\n                if (wait) {\n                    browser.setTimeout(() => {\n                        removeFn(id);\n                    }, wait);\n                } else {\n                    removeFn(id);\n                }\n            }\n\n            legacyEnv.services.notification = { notify, close };\n        },\n    };\n}\n\nexport function makeLegacyCrashManagerService(legacyEnv) {\n    return {\n        dependencies: [\"dialog\"],\n        start(env) {\n            legacyEnv.services.crash_manager = {\n                show_message(message) {\n                    env.services.dialog.add(ErrorDialog, { traceback: message });\n                },\n                rpc_error(errorResponse) {\n                    // Will be handled by error_service\n                    Promise.reject(makeErrorFromResponse(errorResponse));\n                },\n            };\n        },\n    };\n}\n\nexport function wrapSuccessOrFail(promise, { on_success, on_fail } = {}) {\n    return promise.then(on_success || (() => {})).catch((reason) => {\n        let alreadyThrown = false;\n        if (on_fail) {\n            alreadyThrown = on_fail(reason) === \"alreadyThrown\";\n        }\n        if (reason instanceof Error && !alreadyThrown) {\n            throw reason;\n        }\n    });\n}\n\nexport function makeLegacyRainbowManService(legacyEnv) {\n    return {\n        dependencies: [\"effect\"],\n        start(env, { effect }) {\n            legacyEnv.bus.on(\"show-effect\", null, (payload) => {\n                effect.add(payload);\n            });\n        },\n    };\n}\n", "odoo.define(\"web.web_client\", function () {\n    return {};\n});\n\nodoo.define(\"web.pseudo_web_client\", function (require) {\n    const FakeWebClient = require(\"web.web_client\");\n\n    function makeLegacyWebClientService(legacyEnv) {\n        const legacyPseudoWebClient = {\n            dependencies: [\"title\", \"router\"],\n            start(env) {\n                function setTitlePart(part, title = null) {\n                    env.services.title.setParts({ [part]: title });\n                }\n                legacyEnv.bus.on(\"set_title_part\", null, (params) => {\n                    const { part, title } = params;\n                    setTitlePart(part, title || null);\n                });\n                Object.assign(FakeWebClient, {\n                    do_push_state(state) {\n                        if (\"title\" in state) {\n                            setTitlePart(\"action\", state.title);\n                            delete state.title;\n                        }\n                        env.services.router.pushState(state);\n                    },\n                    set_title(title) {\n                        setTitlePart(\"action\", title);\n                    },\n                });\n            },\n        };\n        return legacyPseudoWebClient;\n    }\n\n    return makeLegacyWebClientService;\n});\n", "////////////////////////////////////////////////////////////////////////////////\n// /!\\ DEPRECATED\n// \n// Legacy Field Widgets are added in this file when they are converted into\n// Owl Component.\n////////////////////////////////////////////////////////////////////////////////\n\nodoo.define('web.basic_fields.deprecated', function (require) {\n\"use strict\";\n\n/**\n * This module contains most of the basic (meaning: non relational) field\n * widgets. Field widgets are supposed to be used in views inheriting from\n * BasicView, so, they can work with the records obtained from a BasicModel.\n */\n\nvar AbstractField = require('web.AbstractField');\nvar core = require('web.core');\n\nvar _lt = core._lt;\n\nvar FieldBoolean = AbstractField.extend({\n    className: 'o_field_boolean',\n    description: _lt(\"Checkbox\"),\n    events: _.extend({}, AbstractField.prototype.events, {\n        change: '_onChange',\n    }),\n    supportedFieldTypes: ['boolean'],\n    isQuickEditable: true,\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Toggle the checkbox if it is activated due to a click on itself.\n     *\n     * @override\n     */\n    activate: function (options) {\n        var activated = this._super.apply(this, arguments);\n        // The formatValue of boolean fields renders HTML elements similar to\n        // the one rendered by the widget itself. Even though the event might\n        // have been fired on the non-widget version of this field, we can still\n        // test the presence of its custom class.\n        if (activated && options && options.event && $(options.event.target).closest('.custom-control.custom-checkbox').length) {\n            this._setValue(!this.value);  // Toggle the checkbox\n        }\n        return activated;\n    },\n\n    /**\n     * @override\n     * @returns {jQuery} the focusable checkbox input\n     */\n    getFocusableElement: function () {\n        return this.mode === 'readonly' ? $() : this.$input;\n    },\n    /**\n     * A boolean field is always set since false is a valid value.\n     *\n     * @override\n     */\n    isSet: function () {\n        return true;\n    },\n    /**\n     * When the checkbox is rerendered, we need to check if it was the actual\n     * origin of the reset. If it is, we need to activate it back so it looks\n     * like it was not rerendered but is still the same input.\n     *\n     * @override\n     */\n    reset: function (record, event) {\n        var rendered = this._super.apply(this, arguments);\n        if (event && event.target.name === this.name) {\n            this.activate();\n        }\n        return rendered;\n    },\n    /**\n     * Associates the 'for' attribute of the internal label.\n     *\n     * @override\n     */\n    setIDForLabel: function (id) {\n        this._super.apply(this, arguments);\n        this.$('.custom-control-label').attr('for', id);\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @override\n     * @params {Object} extraInfo\n     * @params {boolean} extraInfo.value\n     */\n    _quickEdit: function (extraInfo) {\n        this._super(...arguments);\n        // toggle if extraInfo.value === undefined (if clicked on label)\n        // otherwise force the new value\n        this._setValue(extraInfo.value === undefined ? !this.value : extraInfo.value);\n    },\n    /**\n     * @private\n     * @override\n     * @returns {Object}\n     */\n    _getQuickEditExtraInfo() {\n        return {\n            value: !this.value,\n        };\n    },\n    /**\n     * The actual checkbox is designed in css to have full control over its\n     * appearance, as opposed to letting the browser and the os decide how\n     * a checkbox should look. The actual input is disabled and hidden. In\n     * readonly mode, the checkbox is disabled.\n     *\n     * @override\n     * @private\n     */\n    _render: function () {\n        var $checkbox = this._formatValue(this.value);\n        this.$input = $checkbox.find('input');\n        this.$input.prop('disabled', this.hasReadonlyModifier && this.mode != 'edit');\n        this.$el.addClass($checkbox.attr('class'));\n        this.$el.empty().append($checkbox.contents());\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Properly update the value when the checkbox is (un)ticked to trigger\n     * possible onchanges.\n     *\n     * @private\n     */\n    _onChange: function () {\n        this._setValue(this.$input[0].checked);\n    },\n    /**\n     * Implement keyboard movements.  Mostly useful for its environment, such\n     * as a list view.\n     *\n     * @override\n     * @private\n     * @param {KeyEvent} ev\n     */\n    _onKeydown: function (ev) {\n        switch (ev.which) {\n            case $.ui.keyCode.ENTER:\n                // prevent subsequent 'click' event (see _onKeydown of AbstractField)\n                ev.preventDefault();\n                this.$input.prop('checked', !this.value);\n                this._setValue(!this.value);\n                return;\n            case $.ui.keyCode.UP:\n            case $.ui.keyCode.RIGHT:\n            case $.ui.keyCode.DOWN:\n            case $.ui.keyCode.LEFT:\n                ev.preventDefault();\n        }\n        this._super.apply(this, arguments);\n    },\n});\n\nreturn {\n    FieldBoolean: FieldBoolean,\n};\n\n});\n", "/** @odoo-module */\nimport Dialog from \"web.Dialog\";\nimport core from \"web.core\";\n\n/**\n * An extension of Dialog Widget to render warnings.\n */\nexport const WarningDialog = Dialog.extend({\n    template: 'web.LegacyWarningDialog',\n    /**\n     * @param {Object} error\n     * @param {string} error.message    the message in Warning Dialog\n     *\n     * @constructor\n     */\n    init: function (parent, options, error) {\n        options.size = options.size || \"medium\";\n        this._super.apply(this, [parent, options]);\n        this.message = error.message;\n        core.bus.off('close_dialogs', this);\n    },\n    /**\n     * Focuses the ok button.\n     *\n     * @override\n     */\n    open: function () {\n        this._super({shouldFocusButtons: true});\n    },\n});\n", "odoo.define('web.data', function (require) {\n\"use strict\";\n\nvar Class = require('web.Class');\nvar Context = require('web.Context');\nvar concurrency = require('web.concurrency');\nvar mixins = require('web.mixins');\nvar session = require('web.session');\nvar translation = require('web.translation');\nvar pyUtils = require('web.py_utils');\n\nvar _t = translation._t;\n\n/**\n * Serializes the sort criterion array of a dataset into a form which can be\n * consumed by OpenERP's RPC APIs.\n *\n * @param {Array} criterion array of fields, from first to last criteria, prefixed with '-' for reverse sorting\n * @returns {String} SQL-like sorting string (``ORDER BY``) clause\n */\nfunction serialize_sort(criterion) {\n    return _.map(criterion,\n        function (criteria) {\n            if (criteria[0] === '-') {\n                return criteria.slice(1) + ' DESC';\n            }\n            return criteria + ' ASC';\n        }).join(', ');\n}\n\n/**\n * Reverse of the serialize_sort function: convert an array of SQL-like sort\n * descriptors into a list of fields prefixed with '-' if necessary.\n */\nfunction deserialize_sort(criterion) {\n    return _.map(criterion, function (criteria) {\n        var split = _.without(criteria.split(' '), '');\n        return (split[1] && split[1].toLowerCase() === 'desc' ? '-' : '') + split[0];\n    });\n}\n\nvar Query = Class.extend({\n    init: function (model, fields) {\n        this._model = model;\n        this._fields = fields;\n        this._filter = [];\n        this._context = {};\n        this._lazy = true;\n        this._limit = false;\n        this._offset = 0;\n        this._order_by = [];\n    },\n    clone: function (to_set) {\n        to_set = to_set || {};\n        var q = new Query(this._model, this._fields);\n        q._context = this._context;\n        q._filter = this._filter;\n        q._lazy = this._lazy;\n        q._limit = this._limit;\n        q._offset = this._offset;\n        q._order_by = this._order_by;\n\n        for(var key in to_set) {\n            if (!to_set.hasOwnProperty(key)) { continue; }\n            switch(key) {\n            case 'filter':\n                q._filter = (q._filter || []).concat(to_set.filter || []);\n                break;\n            case 'context':\n                q._context = new Context(\n                        q._context, to_set.context);\n                break;\n            case 'lazy':\n            case 'limit':\n            case 'offset':\n            case 'order_by':\n                q['_' + key] = to_set[key];\n            }\n        }\n        return q;\n    },\n    _execute: function (options) {\n        var self = this;\n        options = options || {};\n        return session.rpc('/web/dataset/search_read', {\n            model: this._model.name,\n            fields: this._fields || false,\n            domain: pyUtils.eval('domains',\n                    [this._model.domain(this._filter)]),\n            context: pyUtils.eval('contexts',\n                    [this._model.context(this._context)]),\n            offset: this._offset,\n            limit: this._limit,\n            sort: serialize_sort(this._order_by)\n        }, options).then(function (results) {\n            self._count = results.length;\n            return results.records;\n        }, null);\n    },\n    /**\n     * Fetches the first record matching the query, or null\n     *\n     * @param {Object} [options] additional options for the rpc() method\n     * @returns {Promise<Object|null>}\n     */\n    first: function (options) {\n        var self = this;\n        return this.clone({limit: 1})._execute(options).then(function (records) {\n            delete self._count;\n            if (records.length) { return records[0]; }\n            return null;\n        });\n    },\n    /**\n     * Fetches all records matching the query\n     *\n     * @param {Object} [options] additional options for the rpc() method\n     * @returns {Promise<Array<>>}\n     */\n    all: function (options) {\n        return this._execute(options);\n    },\n    /**\n     * Fetches the number of records matching the query in the database\n     *\n     * @returns {Promise<Number>}\n     */\n    count: function () {\n        if (this._count !== undefined) { return Promise.resolve(this._count); }\n        return this._model.call(\n            'search_count', [this._filter], {\n                context: this._model.context(this._context)});\n    },\n    /**\n     * Performs a groups read according to the provided grouping criterion\n     *\n     * @param {String|Array<String>} grouping\n     * @returns {jQuery.Deferred<Array<openerp.web.QueryGroup>> | null}\n     */\n    group_by: function (grouping) {\n        var ctx = pyUtils.eval(\n            'context', this._model.context(this._context));\n\n        // undefined passed in explicitly (!)\n        if (_.isUndefined(grouping)) {\n            grouping = [];\n        }\n\n        if (!(grouping instanceof Array)) {\n            grouping = _.toArray(arguments);\n        }\n        if (_.isEmpty(grouping) && !ctx.group_by_no_leaf) {\n            return null;\n        }\n        var raw_fields = _.map(grouping.concat(this._fields || []), function (field) {\n            return field.split(':')[0];\n        });\n\n        var self = this;\n        return this._model.call('read_group', {\n            groupby: grouping,\n            fields: _.uniq(raw_fields),\n            domain: this._model.domain(this._filter),\n            context: ctx,\n            offset: this._offset,\n            lazy: this._lazy,\n            limit: this._limit,\n            orderby: serialize_sort(this._order_by) || false\n        }).then(function (results) {\n            return _(results).map(function (result) {\n                // FIX: querygroup initialization\n                result.__context = result.__context || {};\n                result.__context.group_by = result.__context.group_by || [];\n                _.defaults(result.__context, ctx);\n                var grouping_fields = self._lazy ? [grouping[0]] : grouping;\n                return new QueryGroup(\n                    self._model.name, grouping_fields, result);\n            });\n        });\n    },\n    /**\n     * Creates a new query with the union of the current query's context and\n     * the new context.\n     *\n     * @param context context data to add to the query\n     * @returns {openerp.web.Query}\n     */\n    context: function (context) {\n        if (!context) { return this; }\n        return this.clone({context: context});\n    },\n    /**\n     * Creates a new query with the union of the current query's filter and\n     * the new domain.\n     *\n     * @param domain domain data to AND with the current query filter\n     * @returns {openerp.web.Query}\n     */\n    filter: function (domain) {\n        if (!domain) { return this; }\n        return this.clone({filter: domain});\n    },\n    /**\n     * Creates a new query with the provided parameter lazy replacing the current\n     * query's own.\n     *\n     * @param {Boolean} lazy indicates if the read_group should return only the\n     * first level of groupby records, or should return the records grouped by\n     * all levels at once (so, it makes only 1 db request).\n     * @returns {openerp.web.Query}\n     */\n    lazy: function (lazy) {\n        return this.clone({lazy: lazy});\n    },\n    /**\n     * Creates a new query with the provided limit replacing the current\n     * query's own limit\n     *\n     * @param {Number} limit maximum number of records the query should retrieve\n     * @returns {openerp.web.Query}\n     */\n    limit: function (limit) {\n        return this.clone({limit: limit});\n    },\n    /**\n     * Creates a new query with the provided offset replacing the current\n     * query's own offset\n     *\n     * @param {Number} offset number of records the query should skip before starting its retrieval\n     * @returns {openerp.web.Query}\n     */\n    offset: function (offset) {\n        return this.clone({offset: offset});\n    },\n    /**\n     * Creates a new query with the provided ordering parameters replacing\n     * those of the current query\n     *\n     * @param {String...} fields ordering clauses\n     * @returns {openerp.web.Query}\n     */\n    order_by: function (fields) {\n        if (fields === undefined) { return this; }\n        if (!(fields instanceof Array)) {\n            fields = _.toArray(arguments);\n        }\n        if (_.isEmpty(fields)) { return this; }\n        return this.clone({order_by: fields});\n    }\n});\n\nvar QueryGroup = Class.extend({\n    init: function (model, grouping_fields, read_group_group) {\n        // In cases where group_by_no_leaf and no group_by, the result of\n        // read_group has aggregate fields but no __context or __domain.\n        // Create default (empty) values for those so that things don't break\n        var fixed_group = _.extend(\n            {__context: {group_by: []}, __domain: []},\n            read_group_group);\n\n        var count_key = (grouping_fields[0] && grouping_fields[0].split(':')[0]) + '_count';\n        var aggregates = {};\n        for (var key in fixed_group) {\n            if (fixed_group.hasOwnProperty(key)) {\n                if (!(key.indexOf('__') === 0\n                    || _.contains(grouping_fields, key)\n                    || (key === count_key))) {\n                    aggregates[key] = fixed_group[key] || 0;\n                }\n            }\n        }\n\n        this.model = new Model(\n            model, fixed_group.__context, fixed_group.__domain);\n\n        var group_size = fixed_group[count_key] || fixed_group.__count || 0;\n        var leaf_group = fixed_group.__context.group_by.length === 0;\n\n        var value = (grouping_fields.length === 1)\n                ? fixed_group[grouping_fields[0]]\n                : _.map(grouping_fields, function (field) { return fixed_group[field]; });\n        var grouped_on = (grouping_fields.length === 1)\n                ? grouping_fields[0]\n                : grouping_fields;\n        this.attributes = {\n            folded: !!(fixed_group.__fold),\n            grouped_on: grouped_on,\n            // if terminal group (or no group) and group_by_no_leaf => use group.__count\n            length: group_size,\n            value: value,\n            // A group is open-able if it's not a leaf in group_by_no_leaf mode\n            has_children: !(leaf_group && fixed_group.__context.group_by_no_leaf),\n\n            aggregates: aggregates\n        };\n    },\n    get: function (key) {\n        return this.attributes[key];\n    },\n    subgroups: function () {\n        return this.model.query().group_by(this.model.context().group_by);\n    },\n    query: function () {\n        return this.model.query.apply(this.model, arguments);\n    }\n});\n\nvar DataSet =  Class.extend(mixins.PropertiesMixin, {\n    /**\n     * Collection of OpenERP records, used to share records and the current selection between views.\n     *\n     * @constructs instance.web.DataSet\n     *\n     * @param {String} model the OpenERP model this dataset will manage\n     */\n    init: function (parent, model, context) {\n        mixins.PropertiesMixin.init.call(this);\n        this.setParent(parent);\n        this.model = model;\n        this.context = context || {};\n        this.index = null;\n        this._sort = [];\n        this._model = new Model(model, context);\n        this.orderer = new concurrency.DropMisordered();\n    },\n    previous: function () {\n        this.index -= 1;\n        if (!this.ids.length) {\n            this.index = null;\n        } else if (this.index < 0) {\n            this.index = this.ids.length - 1;\n        }\n        return this;\n    },\n    next: function () {\n        this.index += 1;\n        if (!this.ids.length) {\n            this.index = null;\n        } else if (this.index >= this.ids.length) {\n            this.index = 0;\n        }\n        return this;\n    },\n    select_id: function (id) {\n        var idx = this.get_id_index(id);\n        if (idx === null) {\n            return false;\n        } else {\n            this.index = idx;\n            return true;\n        }\n    },\n    get_id_index: function (id) {\n        for (var i=0, ii=this.ids.length; i<ii; i++) {\n            // Here we use type coercion because of the mess potentially caused by\n            // OpenERP ids fetched from the DOM as string. (eg: dhtmlxcalendar)\n            // OpenERP ids can be non-numeric too ! (eg: recursive events in calendar)\n            if (id == this.ids[i]) {\n                return i;\n            }\n        }\n        return null;\n    },\n    /**\n     * Read records.\n     *\n     * @param {Array} ids identifiers of the records to read\n     * @param {Array} [fields] fields to read and return, by default all fields are returned\n     * @param {Object} [options]\n     * @returns {Promise}\n     */\n    read_ids: function (ids, fields, options) {\n        if (_.isEmpty(ids)) {\n            return Promise.resolve([]);\n        }\n\n        options = options || {};\n        var method = 'read';\n        var ids_arg = ids;\n        var context = this.get_context(options.context);\n        if (options.check_access_rule === true){\n            method = 'search_read';\n            ids_arg = [['id', 'in', ids]];\n            context = new Context(context, {active_test: false});\n        }\n        return this._model.call(method,\n                [ids_arg, fields || false],\n                {context: context})\n            .then(function (records) {\n                if (records.length <= 1) { return records; }\n                var indexes = {};\n                for (var i = 0; i < ids.length; i++) {\n                    indexes[ids[i]] = i;\n                }\n                records.sort(function (a, b) {\n                    return indexes[a.id] - indexes[b.id];\n                });\n                return records;\n        });\n    },\n    /**\n     * Read a slice of the records represented by this DataSet, based on its\n     * domain and context.\n     *\n     * @param {Array} [fields] fields to read and return, by default all fields are returned\n     * @params {Object} [options]\n     * @param {Number} [options.offset=0] The index from which selected records should be returned\n     * @param {Number} [options.limit=null] The maximum number of records to return\n     * @returns {Promise}\n     */\n    read_slice: function (fields, options) {\n        var self = this;\n        options = options || {};\n        var query = this._model.query(fields)\n                .limit(options.limit || false)\n                .offset(options.offset || 0)\n                .all();\n        var prom = this.orderer.add(query);\n        prom.then(function (records) {\n            self.ids = _(records).pluck('id');\n        });\n        return prom;\n    },\n    /**\n     * Reads the current dataset record (from its index)\n     *\n     * @params {Array} [fields] fields to read and return, by default all fields are returned\n     * @param {Object} [options.context] context data to add to the request payload, on top of the DataSet's own context\n     * @returns {Promise}\n     */\n    read_index: function (fields, options) {\n        options = options || {};\n        return this.read_ids([this.ids[this.index]], fields, options).then(function (records) {\n            if (_.isEmpty(records)) { return Promise.reject(); }\n            return records[0];\n        });\n    },\n    /**\n     * Reads default values for the current model\n     *\n     * @param {Array} [fields] fields to get default values for, by default all defaults are read\n     * @param {Object} [options.context] context data to add to the request payload, on top of the DataSet's own context\n     * @returns {Promise}\n     */\n    default_get: function (fields, options) {\n        options = options || {};\n        return this._model.call('default_get',\n            [fields], {context: this.get_context(options.context)});\n    },\n    /**\n     * Creates a new record in db\n     *\n     * @param {Object} data field values to set on the new record\n     * @param {Object} options Dictionary that can contain the following keys:\n     *   - readonly_fields: Values from readonly fields that were updated by\n     *     on_changes. Only used by the BufferedDataSet to make the o2m work correctly.\n     * @returns {Promise}\n     */\n    create: function (data, options) {\n        var self = this;\n        var prom = this._model.call('create', [data], {\n            context: this.get_context()\n        });\n        prom.then(function () {\n            self.trigger('dataset_changed', data, options);\n        });\n        return prom;\n    },\n    /**\n     * Saves the provided data in an existing db record\n     *\n     * @param {Number|String} id identifier for the record to alter\n     * @param {Object} data field values to write into the record\n     * @param {Object} options Dictionary that can contain the following keys:\n     *   - context: The context to use in the server-side call.\n     *   - readonly_fields: Values from readonly fields that were updated by\n     *     on_changes. Only used by the BufferedDataSet to make the o2m work correctly.\n     * @returns {Promise}\n     */\n    write: function (id, data, options) {\n        options = options || {};\n        var self = this;\n        var prom = this._model.call('write', [[id], data], {\n            context: this.get_context(options.context)\n        });\n        prom.then(function () {\n            self.trigger('dataset_changed', id, data, options);\n        });\n        return prom;\n    },\n    /**\n     * Deletes an existing record from the database\n     *\n     * @param {Number|String} ids identifier of the record to delete\n     */\n    unlink: function (ids) {\n        var self = this;\n        var prom = this._model.call('unlink', [ids], {\n            context: this.get_context()\n        });\n        prom.then(function () {\n            self.trigger('dataset_changed', ids);\n        });\n        return prom;\n    },\n    /**\n     * Calls an arbitrary RPC method\n     *\n     * @param {String} method name of the method (on the current model) to call\n     * @param {Array} [args] arguments to pass to the method\n     * @param {Function} callback\n     * @param {Function} error_callback\n     * @returns {Promise}\n     */\n    call: function (method, args) {\n        return this._model.call(method, args);\n    },\n    /**\n     * Calls a button method, usually returning some sort of action\n     *\n     * @param {String} method\n     * @param {Array} [args]\n     * @returns {Promise}\n     */\n    call_button: function (method, args) {\n        return this._model.call_button(method, args);\n    },\n    /**\n     * Fetches the \"readable name\" for records, based on intrinsic rules\n     *\n     * @param {Array} ids\n     * @returns {Promise}\n     */\n    name_get: function (ids) {\n        return this._model.call('name_get', [ids], {context: this.get_context()});\n    },\n    /**\n     *\n     * @param {String} name name to perform a search for/on\n     * @param {Array} [domain=[]] filters for the objects returned, OpenERP domain\n     * @param {String} [operator='ilike'] matching operator to use with the provided name value\n     * @param {Number} [limit=0] maximum number of matches to return\n     * @param {Function} callback function to call with name_search result\n     * @returns {Promise}\n     */\n    name_search: function (name, domain, operator, limit) {\n        return this._model.call('name_search', {\n            name: name || '',\n            args: domain || false,\n            operator: operator || 'ilike',\n            context: this._model.context(),\n            limit: limit || 0\n        });\n    },\n    /**\n     * @param name\n     */\n    name_create: function (name, context) {\n        return this._model.call('name_create', [name], {context: this.get_context(context)});\n    },\n    get_context: function (request_context) {\n        return this._model.context(request_context);\n    },\n    /**\n     * Reads or changes sort criteria on the dataset.\n     *\n     * If not provided with any argument, serializes the sort criteria to\n     * an SQL-like form usable by OpenERP's ORM.\n     *\n     * If given a field, will set that field as first sorting criteria or,\n     * if the field is already the first sorting criteria, will reverse it.\n     *\n     * @param {String} [field] field to sort on, reverses it (toggle from ASC to DESC) if already the main sort criteria\n     * @param {Boolean} [force_reverse=false] forces inserting the field as DESC\n     * @returns {String|undefined}\n     */\n    sort: function (field, force_reverse) {\n        if (!field) {\n            return serialize_sort(this._sort);\n        }\n        var reverse = force_reverse || (this._sort[0] === field);\n        this._sort.splice.apply(\n            this._sort, [0, this._sort.length].concat(\n                _.without(this._sort, field, '-' + field)));\n\n        this._sort.unshift((reverse ? '-' : '') + field);\n        return undefined;\n    },\n    /**\n     * Set the sort criteria on the dataset.\n     *\n     * @param {Array} fields_list: list of fields order descriptors, as used by\n     * Odoo's ORM (such as 'name desc', 'product_id', 'order_date asc')\n     */\n    set_sort: function (fields_list) {\n        this._sort = deserialize_sort(fields_list);\n    },\n    size: function () {\n        return this.ids.length;\n    },\n    alter_ids: function (n_ids) {\n        this.ids = n_ids;\n    },\n    remove_ids: function (ids) {\n        this.alter_ids(_(this.ids).difference(ids));\n    },\n    add_ids: function (ids, at) {\n        var args = [at, 0].concat(_.difference(ids, this.ids));\n        this.ids.splice.apply(this.ids, args);\n    },\n    /**\n     * Resequence records.\n     *\n     * @param {Array} ids identifiers of the records to resequence\n     * @returns {Promise}\n     */\n    resequence: function (ids, options) {\n        options = options || {};\n        return session.rpc('/web/dataset/resequence', {\n            model: this.model,\n            ids: ids,\n            context: pyUtils.eval(\n                'context', this.get_context(options.context)),\n        }).then(function (results) {\n            return results;\n        });\n    },\n});\n\nvar DataSetStatic =  DataSet.extend({\n    init: function (parent, model, context, ids) {\n        this._super(parent, model, context);\n        // all local records\n        this.ids = ids || [];\n    },\n    read_slice: function (fields, options) {\n        options = options || {};\n        fields = fields || {};\n        var offset = options.offset || 0,\n            limit = options.limit || false;\n        var end_pos = limit && limit !== -1 ? offset + limit : this.ids.length;\n        return this.read_ids(this.ids.slice(offset, end_pos), fields, options);\n    },\n    set_ids: function (ids) {\n        this.ids = ids;\n        if (ids.length === 0) {\n            this.index = null;\n        } else if (this.index >= ids.length - 1) {\n            this.index = ids.length - 1;\n        }\n    },\n    unlink: function (ids) {\n        this.set_ids(_.without.apply(null, [this.ids].concat(ids)));\n        this.trigger('unlink', ids);\n        return Promise.resolve({result: true});\n    },\n});\n\nvar DataSetSearch = DataSet.extend({\n    /**\n     * @constructs instance.web.DataSetSearch\n     * @extends instance.web.DataSet\n     *\n     * @param {Object} parent\n     * @param {String} model\n     * @param {Object} context\n     * @param {Array} domain\n     */\n    init: function (parent, model, context, domain) {\n        this._super(parent, model, context);\n        this.domain = domain || [];\n        this._length = null;\n        this.ids = [];\n        this._model = new Model(model, context, domain);\n    },\n    /**\n     * Read a slice of the records represented by this DataSet, based on its\n     * domain and context.\n     *\n     * @params {Object} options\n     * @param {Array} [options.fields] fields to read and return, by default all fields are returned\n     * @param {Object} [options.context] context data to add to the request payload, on top of the DataSet's own context\n     * @param {Array} [options.domain] domain data to add to the request payload, ANDed with the dataset's domain\n     * @param {Number} [options.offset=0] The index from which selected records should be returned\n     * @param {Number} [options.limit=null] The maximum number of records to return\n     * @returns {Promise}\n     */\n    read_slice: function (fields, options) {\n        options = options || {};\n        var self = this;\n        var q = this._model.query(fields || false)\n            .filter(options.domain)\n            .context(options.context)\n            .offset(options.offset || 0)\n            .limit(options.limit || false);\n        q = q.order_by.apply(q, this._sort);\n\n        var prom = this.orderer.add(q.all());\n        prom.then(function (records) {\n            // FIXME: not sure about that one, *could* have discarded count\n            q.count().then(function (count) { self._length = count; });\n            self.ids = _(records).pluck('id');\n        });\n        return prom;\n    },\n    get_domain: function (other_domain) {\n        return this._model.domain(other_domain);\n    },\n    alter_ids: function (ids) {\n        this._super(ids);\n        if (this.index !== null && this.index >= this.ids.length) {\n            this.index = this.ids.length > 0 ? this.ids.length - 1 : 0;\n        }\n    },\n    remove_ids: function (ids) {\n        var before = this.ids.length;\n        this._super(ids);\n        if (this._length) {\n            this._length -= (before - this.ids.length);\n        }\n    },\n    add_ids: function (ids, at) {\n        var before = this.ids.length;\n        this._super(ids, at);\n        if(this._length){\n            this._length += (this.ids.length - before);\n        }\n    },\n    unlink: function (ids, callback, error_callback) {\n        var self = this;\n        var prom = this._super(ids);\n        prom.then(function () {\n            self.remove_ids( ids);\n            self.trigger(\"dataset_changed\", ids, callback, error_callback);\n        });\n        return prom;\n    },\n    size: function () {\n        if (this._length !== null) {\n            return this._length;\n        }\n        return this._super();\n    }\n});\n\nvar data = {\n    Query: Query,\n    DataSet: DataSet,\n    DataSetStatic: DataSetStatic,\n    DataSetSearch: DataSetSearch,\n    /** @type String */\n    noDisplayContent: \"<em class=\\\"text-warning\\\">\" + _t(\"Unnamed\") + \"</em>\",\n};\n\n\nvar Model = Class.extend({\n    /**\n    new openerp.web.Model(name[, context[, domain]])\n\n    @constructs instance.web.Model\n    @extends instance.web.Class\n\n    @param {String} name name of the OpenERP model this object is bound to\n    @param {Object} [context]\n    @param {Array} [domain]\n    */\n    init: function(name, context, domain) {\n        this.name = name;\n        this._context = context || {};\n        this._domain = domain || [];\n    },\n    /**\n     * @deprecated does not allow to specify kwargs, directly use call() instead\n     */\n    get_func: function (method_name) {\n        var self = this;\n        return function () {\n            return self.call(method_name, _.toArray(arguments));\n        };\n    },\n    /**\n     * Fetches a Query instance bound to this model, for searching\n     *\n     * @param {Array<String>} [fields] fields to ultimately fetch during the search\n     * @returns {instance.web.Query}\n     */\n    query: function (fields) {\n        return new data.Query(this, fields);\n    },\n    /**\n     * Fetches the model's domain, combined with the provided domain if any\n     *\n     * @param {Array} [domain] to combine with the model's internal domain\n     * @returns {Array} The model's internal domain, or the AND-ed union of the model's internal domain and the provided domain\n     */\n    domain: function (domain) {\n        if (!domain) { return this._domain; }\n        return this._domain.concat(domain);\n    },\n    /**\n     * Fetches the combination of the user's context and the domain context,\n     * combined with the provided context if any\n     *\n     * @param {Object} [context] to combine with the model's internal context\n     * @returns {web.Context} The union of the user's context and the model's internal context, as well as the provided context if any. In that order.\n     */\n    context: function (context) {\n        return new Context(session.user_context, this._context, context || {});\n    },\n    /**\n     * Call a method (over RPC) on the bound OpenERP model.\n     *\n     * @param {String} method name of the method to call\n     * @param {Array} [args] positipyEvalonal arguments\n     * @param {Object} [kwargs] keyword arguments\n     * @param {Object} [options] additional options for the rpc() method\n     * @returns {Promise<>} call result\n     */\n    call: function (method, args, kwargs, options) {\n        args = args || [];\n        kwargs = kwargs || {};\n        if (!_.isArray(args)) {\n            // call(method, kwargs)\n            kwargs = args;\n            args = [];\n        }\n        pyUtils.ensure_evaluated(args, kwargs);\n        var call_kw = '/web/dataset/call_kw/' + this.name + '/' + method;\n        return session.rpc(call_kw, {\n            model: this.name,\n            method: method,\n            args: args,\n            kwargs: kwargs\n        }, options);\n    },\n    call_button: function (method, args) {\n        pyUtils.ensure_evaluated(args, {});\n        // context should be the last argument\n        var context = (args || []).length > 0 ? args.pop() : {};\n        return session.rpc('/web/dataset/call_button', {\n            model: this.name,\n            method: method,\n            args: args || [],\n            kwargs: {context: context},\n        });\n    },\n});\n\n\nreturn data;\n\n});\n", "/** @odoo-module alias=web.AbstractAction **/\n\n/**\n * We define here the AbstractAction widget, which implements the ActionMixin.\n * All client actions must extend this widget.\n *\n * @module @web/chrome/abstract_action\n */\n\nimport ActionMixin from \"web.ActionMixin\";\nimport ActionModel from \"web.ActionModel\";\nimport ControlPanel from \"web.ControlPanel\";\nimport Widget from \"web.Widget\";\nimport { ComponentWrapper } from \"web.OwlCompatibility\";\n\nconst AbstractAction = Widget.extend(ActionMixin, {\n    config: {\n        ControlPanel: ControlPanel,\n    },\n\n    /**\n     * If this flag is set to true, the client action will create a control\n     * panel whenever it is created.\n     *\n     * @type boolean\n     */\n    hasControlPanel: false,\n\n    /**\n     * If true, this flag indicates that the client action should automatically\n     * fetch the <arch> of a search view (or control panel view).  Note that\n     * to do that, it also needs a specific modelName.\n     *\n     * For example, the Discuss application adds the following line in its\n     * constructor::\n     *\n     *      this.searchModelConfig.modelName = 'mail.message';\n     *\n     * @type boolean\n     */\n    loadControlPanel: false,\n\n    /**\n     * A client action might want to use a search bar in its control panel, or\n     * it could choose not to use it.\n     *\n     * Note that it only makes sense if hasControlPanel is set to true.\n     *\n     * @type boolean\n     */\n    withSearchBar: false,\n\n    /**\n     * This parameter can be set to customize the available sub menus in the\n     * controlpanel (Filters/Group By/Favorites).  This is basically a list of\n     * the sub menus that we want to use.\n     *\n     * Note that it only makes sense if hasControlPanel is set to true.\n     *\n     * For example, set ['filter', 'favorite'] to enable the Filters and\n     * Favorites menus.\n     *\n     * @type string[]\n     */\n    searchMenuTypes: [],\n\n    /**\n     * @override\n     *\n     * @param {Widget} parent\n     * @param {Object} action\n     * @param {Object} [options]\n     */\n    init: function (parent, action, options) {\n        this._super(parent);\n        this._title = action.display_name || action.name;\n\n        this.searchModelConfig = {\n            context: Object.assign({}, action.context),\n            domain: action.domain || [],\n            env: owl.Component.env,\n            searchMenuTypes: this.searchMenuTypes,\n        };\n        this.extensions = {};\n        if (this.hasControlPanel) {\n            this.extensions.ControlPanel = {\n                actionId: action.id,\n                withSearchBar: this.withSearchBar,\n            };\n\n            this.viewId = action.search_view_id && action.search_view_id[0];\n\n            this.controlPanelProps = {\n                action,\n                breadcrumbs: options && options.breadcrumbs,\n                withSearchBar: this.withSearchBar,\n                searchMenuTypes: this.searchMenuTypes,\n            };\n        }\n    },\n    /**\n     * The willStart method is actually quite complicated if the client action\n     * has a controlPanel, because it needs to prepare it.\n     *\n     * @override\n     */\n    willStart: async function () {\n        const superPromise = this._super(...arguments);\n        if (this.hasControlPanel) {\n            if (this.loadControlPanel) {\n                const { context, modelName } = this.searchModelConfig;\n                const options = { load_filters: this.searchMenuTypes.includes('favorite') };\n                const { arch, fields, favoriteFilters } = await this.loadFieldView(\n                    modelName,\n                    context || {},\n                    this.viewId,\n                    'search',\n                    options\n                );\n                const archs = { search: arch };\n                const { ControlPanel: controlPanelInfo } = ActionModel.extractArchInfo(archs);\n                Object.assign(this.extensions.ControlPanel, {\n                    archNodes: controlPanelInfo.children,\n                    favoriteFilters,\n                    fields,\n                });\n                this.controlPanelProps.fields = fields;\n            }\n        }\n        this.searchModel = new ActionModel(this.extensions, this.searchModelConfig);\n        if (this.hasControlPanel) {\n            this.controlPanelProps.searchModel = this.searchModel;\n        }\n        return Promise.all([\n            superPromise,\n            this.searchModel.load(),\n        ]);\n    },\n    /**\n     * @override\n     */\n    start: async function () {\n        await this._super(...arguments);\n        if (this.hasControlPanel) {\n            if ('title' in this.controlPanelProps) {\n                this._setTitle(this.controlPanelProps.title);\n            }\n            this.controlPanelProps.title = this.getTitle();\n            this._controlPanelWrapper = new ComponentWrapper(this, this.config.ControlPanel, this.controlPanelProps);\n            await this._controlPanelWrapper.mount(this.el, { position: 'first-child' });\n\n        }\n    },\n    /**\n     * @override\n     */\n    destroy: function() {\n        this._super.apply(this, arguments);\n        ActionMixin.destroy.call(this);\n    },\n    /**\n     * @override\n     */\n    on_attach_callback: function () {\n        ActionMixin.on_attach_callback.call(this);\n        this.searchModel.on('search', this, this._onSearch);\n        if (this.hasControlPanel) {\n            this.searchModel.on('get-controller-query-params', this, this._onGetOwnedQueryParams);\n        }\n    },\n    /**\n     * @override\n     */\n    on_detach_callback: function () {\n        ActionMixin.on_detach_callback.call(this);\n        this.searchModel.off('search', this);\n        if (this.hasControlPanel) {\n            this.searchModel.off('get-controller-query-params', this);\n        }\n    },\n\n    /**\n     * @private\n     * @param {Object} [searchQuery]\n     */\n    _onSearch: function () {},\n});\n\nexport default AbstractAction;\n", "odoo.define('web.ActionMixin', function (require) {\n    \"use strict\";\n\n    /**\n     * We define here the ActionMixin, the generic notion of action (from the point\n     * of view of the web client).  In short, an action is a widget which controls\n     * the main part of the screen (everything below the navbar).\n     *\n     * More precisely, the action manager is the component that coordinates a stack\n     * of actions.  Whenever the user navigates in the interface, switches views,\n     * open different menus, the action manager creates/updates/destroys special\n     * widgets which implements the ActionMixin.  These actions need to answer to a\n     * standardised API, which is the reason for this mixin.\n     *\n     * In practice, most actions are view controllers (coming from an\n     * ir.action.act_window).  However, some actions are 'client actions'.  They\n     * also need to implement the ActionMixin for a better cooperation with the\n     * action manager.\n     *\n     * @module web.ActionMixin\n     * @extends WidgetAdapterMixin\n     */\n\n    const core = require('web.core');\n    const { WidgetAdapterMixin } = require('web.OwlCompatibility');\n\n    const ActionMixin = Object.assign({}, WidgetAdapterMixin, {\n        template: 'Action',\n\n        /**\n         * The action mixin assumes that it is rendered with the 'Action' template.\n         * This template has a special zone ('.o_content') where the content should\n         * be added.  Actions that want to automatically render a template there\n         * should define the contentTemplate key.  In short, client actions should\n         * probably define a contentTemplate key, and not a template key.\n         */\n        contentTemplate: null,\n\n        /**\n         * Events built by and managed by Odoo Framework\n         *\n         * It is expected that any Widget Class implementing this mixin\n         * will also implement the ParentedMixin which actually manages those\n         */\n        custom_events: {\n            get_controller_query_params: '_onGetOwnedQueryParams',\n        },\n\n        /**\n         * If an action wants to use a control panel, it will be created and\n         * registered in this _controlPanel key (the widget).  The way this control\n         * panel is created is up to the implementation (so, view controllers or\n         * client actions may have different needs).\n         *\n         * Note that most of the time, this key should be set by the framework, not\n         * by the code of the client action.\n         */\n        _controlPanel: null,\n\n        /**\n         * String containing the title of the client action (which may be needed to\n         * display in the breadcrumbs zone of the control panel).\n         *\n         * @see _setTitle\n         */\n        _title: '',\n\n        /**\n         * @override\n         */\n        renderElement: function () {\n            this._super.apply(this, arguments);\n            if (this.contentTemplate) {\n                const content = core.qweb.render(this.contentTemplate, { widget: this });\n                this.$('.o_content').append(content);\n            }\n        },\n\n        /**\n         * Called by the action manager when action is restored (typically, when\n         * the user clicks on the action in the breadcrumb)\n         *\n         * @returns {Promise|undefined}\n         */\n        willRestore: function () { },\n\n        //---------------------------------------------------------------------\n        // Public\n        //---------------------------------------------------------------------\n\n        /**\n         * In some situations, we need confirmation from the controller that the\n         * current state can be destroyed without prejudice to the user.  For\n         * example, if the user has edited a form, maybe we should ask him if we\n         * can discard all his changes when we switch to another action.  In that\n         * case, the action manager will call this method.  If the returned\n         * promise is successfully resolved, then we can destroy the current action,\n         * otherwise, we need to stop.\n         *\n         * @returns {Promise} resolved if the action can be removed, rejected\n         *   otherwise\n         */\n        canBeRemoved: function () {\n            return Promise.resolve();\n        },\n\n        /**\n         * This function is called when the current state of the action\n         * should be known. For instance, if the action is a view controller,\n         * this may be useful to reinstantiate a view in the same state.\n         *\n         * Typically the state can (and should) be encoded in a query object of\n         * the form::\n         *\n         *     {\n         *          context: {...},\n         *          groupBy: [...],\n         *          domain = [...],\n         *          orderedBy = [...],\n         *     }\n         *\n         * where the context key can contain many information.\n         * This method is mainly called during the creation of a custom filter.\n         *\n         * @returns {Object}\n         */\n        getOwnedQueryParams: function () {\n            return {};\n        },\n\n        /**\n         * Returns a serializable state that will be pushed in the URL by\n         * the action manager, allowing the action to be restarted correctly\n         * upon refresh. This function should be overriden to add extra information.\n         * Note that some keys are reserved by the framework and will thus be\n         * ignored ('action', 'active_id', 'active_ids' and 'title', for all\n         * actions, and 'model' and 'view_type' for act_window actions).\n         *\n         * @returns {Object}\n         */\n        getState: function () {\n            return {};\n        },\n\n        /**\n         * Returns a title that may be displayed in the breadcrumb area.  For\n         * example, the name of the record (for a form view). This is actually\n         * important for the action manager: this is the way it is able to give\n         * the proper titles for other actions.\n         *\n         * @returns {string}\n         */\n        getTitle: function () {\n            return this._title;\n        },\n\n        /**\n         * Renders the buttons to append, in most cases, to the control panel (in\n         * the bottom left corner). When the action is rendered in a dialog, those\n         * buttons might be moved to the dialog's footer.\n         *\n         * @param {jQuery Node} $node\n         */\n        renderButtons: function ($node) { },\n\n        /**\n         * Method used to update the widget buttons state.\n         */\n        updateButtons: function () { },\n\n        /**\n         * The parameter newProps is used to update the props of\n         * the controlPanelWrapper before render it. The key 'cp_content'\n         * is not a prop of the control panel itself. One should if possible use\n         * the slot mechanism.\n         *\n         * @param {Object} [newProps={}]\n         * @returns {Promise}\n         */\n        updateControlPanel: async function (newProps = {}) {\n            if (!this.withControlPanel && !this.hasControlPanel) {\n                return;\n            }\n            const props = Object.assign({}, newProps); // Work with a clean new object\n            if ('title' in props) {\n                this._setTitle(props.title);\n                this.controlPanelProps.title = this.getTitle();\n                delete props.title;\n            }\n            if ('cp_content' in props) {\n                // cp_content has been updated: refresh it.\n                this.controlPanelProps.cp_content = Object.assign({},\n                    this.controlPanelProps.cp_content,\n                    props.cp_content,\n                );\n                delete props.cp_content;\n            }\n            // Update props state\n            Object.assign(this.controlPanelProps, props);\n            return this._controlPanelWrapper.update(this.controlPanelProps);\n        },\n\n        //---------------------------------------------------------------------\n        // Private\n        //---------------------------------------------------------------------\n\n        /**\n         * @private\n         * @param {string} title\n         */\n        _setTitle: function (title) {\n            this._title = title;\n        },\n\n        //---------------------------------------------------------------------\n        // Handlers\n        //---------------------------------------------------------------------\n\n        /**\n         * FIXME: this logic should be rethought\n         *\n         * Handles a context request: provides to the caller the state of the\n         * current controller.\n         *\n         * @private\n         * @param {function} callback used to send the requested state\n         */\n        _onGetOwnedQueryParams: function (callback) {\n            const state = this.getOwnedQueryParams();\n            callback(state || {});\n        },\n    });\n\n    return ActionMixin;\n});\n", "odoo.define('web.ActionMenus', function (require) {\n    \"use strict\";\n\n    const Context = require('web.Context');\n    const DropdownMenu = require('web.DropdownMenu');\n    const Registry = require('web.Registry');\n\n    const { Component } = owl;\n\n    let registryActionId = 1;\n\n    /**\n     * Action menus (or Action/Print bar, previously called 'Sidebar')\n     *\n     * The side bar is the group of dropdown menus located on the left side of the\n     * control panel. Its role is to display a list of items depending on the view\n     * type and selected records and to execute a set of actions on active records.\n     * It is made out of 2 dropdown menus: Print and Action.\n     *\n     * This component also provides a registry to use custom components in the ActionMenus's\n     * Action menu.\n     * @extends Component\n     */\n    class ActionMenus extends Component {\n        setup() {\n            this.actionButtonStrings = {\n                title: this.env._t(\"Action\"),\n                hotkey: this.env._t(\"Additional actions\"),\n            };\n            this.printButtonStrings = {\n                title: this.env._t(\"Print\"),\n                hotkey: this.env._t(\"Printing options\"),\n            };\n        }\n\n        async willStart() {\n            this.actionItems = await this._setActionItems(this.props);\n            this.printItems = await this._setPrintItems(this.props);\n        }\n\n        async willUpdateProps(nextProps) {\n            this.actionItems = await this._setActionItems(nextProps);\n            this.printItems = await this._setPrintItems(nextProps);\n        }\n\n        mounted() {\n            this._addTooltips();\n        }\n\n        patched() {\n            this._addTooltips();\n        }\n\n        //---------------------------------------------------------------------\n        // Private\n        //---------------------------------------------------------------------\n\n        /**\n         * Add the tooltips to the items\n         * @private\n         */\n        _addTooltips() {\n            $(this.el.querySelectorAll('[title]')).tooltip({\n                delay: { show: 500, hide: 0 }\n            });\n        }\n\n        /**\n         * @private\n         * @param {Object} props\n         * @returns {Promise<Object[]>}\n         */\n        async _setActionItems(props) {\n            // Callback based actions\n            const callbackActions = (props.items.other || []).map(\n                action => Object.assign({ key: `action-${action.description}` }, action)\n            );\n            // Action based actions\n            const actionActions = props.items.action || [];\n            const relateActions = props.items.relate || [];\n            const formattedActions = [...actionActions, ...relateActions].map(\n                action => ({ action, description: action.name, key: action.id })\n            );\n            // ActionMenus action registry components\n            const registryActions = [];\n            const rpc = this.rpc.bind(this);\n            for (const { Component, getProps } of this.constructor.registry.values()) {\n                const itemProps = await getProps(props, this.env, rpc);\n                if (itemProps) {\n                    registryActions.push({\n                        Component,\n                        key: `registry-action-${registryActionId++}`,\n                        props: itemProps,\n                    });\n                }\n            }\n\n            return [...callbackActions, ...formattedActions, ...registryActions];\n        }\n\n        /**\n         * @private\n         * @param {Object} props\n         * @returns {Promise<Object[]>}\n         */\n        async _setPrintItems(props) {\n            const printActions = props.items.print || [];\n            const printItems = printActions.map(\n                action => ({ action, description: action.name, key: action.id })\n            );\n            return printItems;\n        }\n\n        //---------------------------------------------------------------------\n        // Handlers\n        //---------------------------------------------------------------------\n\n        /**\n         * Perform the action for the item clicked after getting the data\n         * necessary with a trigger.\n         * @private\n         * @param {OwlEvent} ev\n         */\n        async _executeAction(action) {\n            let activeIds = this.props.activeIds;\n            if (this.props.isDomainSelected) {\n                activeIds = await this.rpc({\n                    model: this.env.action.res_model,\n                    method: 'search',\n                    args: [this.props.domain],\n                    kwargs: {\n                        limit: this.env.session.active_ids_limit,\n                        context: this.props.context,\n                    },\n                });\n            }\n            const activeIdsContext = {\n                active_id: activeIds[0],\n                active_ids: activeIds,\n                active_model: this.env.action.res_model,\n            };\n            if (this.props.domain) {\n                // keep active_domain in context for backward compatibility\n                // reasons, and to allow actions to bypass the active_ids_limit\n                activeIdsContext.active_domain = this.props.domain;\n            }\n\n            const context = new Context(this.props.context, activeIdsContext).eval();\n            const result = await this.rpc({\n                route: '/web/action/load',\n                params: { action_id: action.id, context },\n            });\n            result.context = new Context(result.context || {}, activeIdsContext)\n                .set_eval_context(context);\n            result.flags = result.flags || {};\n            result.flags.new_window = true;\n            this.trigger('do-action', {\n                action: result,\n                options: {\n                    on_close: () => this.trigger('reload'),\n                },\n            });\n        }\n\n        /**\n         * Handler used to determine which way must be used to execute a selected\n         * action: it will be either:\n         * - a callback (function given by the view controller);\n         * - an action ID (string);\n         * - an URL (string).\n         * @private\n         * @param {OwlEvent} ev\n         */\n        _onItemSelected(ev) {\n            ev.stopPropagation();\n            const { item } = ev.detail;\n            if (item.callback) {\n                item.callback([item]);\n            } else if (item.action) {\n                this._executeAction(item.action);\n            } else if (item.url) {\n                // Event has been prevented at its source: we need to redirect manually.\n                this.env.services.navigate(item.url);\n            }\n        }\n    }\n\n    ActionMenus.registry = new Registry();\n\n    ActionMenus.components = { DropdownMenu };\n    ActionMenus.props = {\n        activeIds: { type: Array, element: [Number, String] }, // virtual IDs are strings.\n        context: Object,\n        domain: { type: Array, optional: 1 },\n        isDomainSelected: { type: Boolean, optional: 1 },\n        items: {\n            type: Object,\n            shape: {\n                action: { type: Array, optional: 1 },\n                print: { type: Array, optional: 1 },\n                other: { type: Array, optional: 1 },\n            },\n        },\n    };\n    ActionMenus.template = 'web.ActionMenus';\n\n    return ActionMenus;\n});\n", "odoo.define('web.CustomCheckbox', function (require) {\n    \"use strict\";\n\n    const utils = require('web.utils');\n\n    const { Component } = owl;\n\n    /**\n     * Custom checkbox\n     * \n     * Component that can be used in templates to render the custom checkbox of Odoo.\n     * \n     * <CustomCheckbox\n     *     value=\"boolean\"\n     *     disabled=\"boolean\"\n     *     text=\"'Change the label text'\"\n     *     t-on-change=\"_onValueChange\"\n     *     />\n     * \n     * @extends Component\n     */\n    class CustomCheckbox extends Component {\n        /**\n         * @param {Object} [props]\n         * @param {string | number | null} [props.id]\n         * @param {boolean} [props.value=false]\n         * @param {boolean} [props.disabled=false]\n         * @param {string} [props.text]\n         */\n        constructor() {\n            super(...arguments);\n            this._id = `checkbox-comp-${utils.generateID()}`;\n        }\n    }\n\n    CustomCheckbox.props = {\n        id: {\n            type: [String, Number],\n            optional: 1,\n        },\n        disabled: {\n            type: Boolean,\n            optional: 1,\n        },\n        value: {\n            type: Boolean,\n            optional: 1,\n        },\n        text: {\n            type: String,\n            optional: 1,\n        },\n    };\n\n    CustomCheckbox.template = 'web.CustomCheckbox';\n\n    return CustomCheckbox;\n});\n", "odoo.define('web.CustomFileInput', function (require) {\n    \"use strict\";\n\n    const { Component, hooks } = owl;\n    const { useRef } = hooks;\n\n    /**\n     * Custom file input\n     *\n     * Component representing a customized input of type file. It takes a sub-template\n     * in its default t-slot and uses it as the trigger to open the file upload\n     * prompt.\n     * @extends Component\n     */\n    class CustomFileInput extends Component {\n        /**\n         * @param {Object} [props]\n         * @param {string} [props.accepted_file_extensions='*'] Comma-separated\n         *      list of authorized file extensions (default to all).\n         * @param {string} [props.action='/web/binary/upload'] Route called when\n         *      a file is uploaded in the input.\n         * @param {string} [props.id]\n         * @param {string} [props.model]\n         * @param {string} [props.multi_upload=false] Whether the input should allow\n         *      to upload multiple files at once.\n         */\n        constructor() {\n            super(...arguments);\n\n            this.fileInputRef = useRef('file-input');\n        }\n\n        //--------------------------------------------------------------------------\n        // Handlers\n        //--------------------------------------------------------------------------\n\n        /**\n         * Upload an attachment to the given action with the given parameters:\n         * - ufile: list of files contained in the file input\n         * - csrf_token: CSRF token provided by the odoo global object\n         * - model: a specific model which will be given when creating the attachment\n         * - id: the id of the model target instance\n         * @private\n         */\n        async _onFileInputChange() {\n            const { action, model, id } = this.props;\n            const params = {\n                csrf_token: odoo.csrf_token,\n                ufile: [...this.fileInputRef.el.files],\n            };\n            if (model) {\n                params.model = model;\n            }\n            if (id) {\n                params.id = id;\n            }\n            const fileData = await this.env.services.httpRequest(action, params, 'text');\n            const parsedFileData = JSON.parse(fileData);\n            if (parsedFileData.error) {\n                throw new Error(parsedFileData.error);\n            }\n            this.trigger('uploaded', { files: parsedFileData });\n        }\n\n        /**\n         * Redirect clicks from the trigger element to the input.\n         * @private\n         */\n        _onTriggerClicked() {\n            this.fileInputRef.el.click();\n        }\n    }\n    CustomFileInput.defaultProps = {\n        accepted_file_extensions: '*',\n        action: '/web/binary/upload',\n        multi_upload: false,\n    };\n    CustomFileInput.props = {\n        accepted_file_extensions: { type: String, optional: 1 },\n        action: { type: String, optional: 1 },\n        id: { type: Number, optional: 1 },\n        model: { type: String, optional: 1 },\n        multi_upload: { type: Boolean, optional: 1 },\n    };\n    CustomFileInput.template = 'web.CustomFileInput';\n\n    return CustomFileInput;\n});\n", "odoo.define('web.DatePickerOwl', function (require) {\n    \"use strict\";\n\n    const config = require('web.config');\n    const field_utils = require('web.field_utils');\n    const time = require('web.time');\n    const { useAutofocus } = require('web.custom_hooks');\n\n    const { Component, hooks } = owl;\n    const { useExternalListener, useRef, useState } = hooks;\n\n    let datePickerId = 0;\n\n    /**\n     * Date picker\n     *\n     * This component exposes the API of the tempusdominus datepicker library.\n     * As such, its template is a simple input that will open the TD datepicker\n     * when clicked on. The component will also synchronize any user-input value\n     * with the library widget and vice-vera.\n     *\n     * For further details regarding the implementation of the picker itself, please\n     * refer to the official tempusdominus documentation (note: all props given\n     * to this component will be passed as arguments to instantiate the picker widget).\n     * @extends Component\n     */\n    class DatePicker extends Component {\n        constructor() {\n            super(...arguments);\n\n            this.inputRef = useRef('input');\n            this.state = useState({ warning: false });\n\n            this.datePickerId = `o_datepicker_${datePickerId++}`;\n            this.typeOfDate = 'date';\n\n            useAutofocus();\n            useExternalListener(window, 'scroll', this._onWindowScroll);\n        }\n\n        mounted() {\n            $(this.el).on('show.datetimepicker', this._onDateTimePickerShow.bind(this));\n            $(this.el).on('hide.datetimepicker', this._onDateTimePickerHide.bind(this));\n            $(this.el).on('error.datetimepicker', () => false);\n\n            const pickerOptions = Object.assign({ format: this.defaultFormat }, this.props);\n            this._datetimepicker(pickerOptions);\n            this.inputRef.el.value = this._formatDate(this.props.date);\n        }\n\n        willUnmount() {\n            this._datetimepicker('destroy');\n        }\n\n        willUpdateProps(nextProps) {\n            for (const prop in nextProps) {\n                this._datetimepicker(prop, nextProps[prop]);\n            }\n            if (nextProps.date) {\n                this.inputRef.el.value = this._formatDate(nextProps.date);\n            }\n        }\n\n        //---------------------------------------------------------------------\n        // Private\n        //---------------------------------------------------------------------\n\n        /**\n         * @returns {string}\n         */\n        get defaultFormat() {\n            return time.getLangDateFormat();\n        }\n\n        //---------------------------------------------------------------------\n        // Private\n        //---------------------------------------------------------------------\n\n        /**\n         * Handle bootstrap datetimepicker calls.\n         * @private\n         * @param {...any} args anything that will be passed to the datetimepicker function.\n         */\n        _datetimepicker(...args) {\n            this.ignoreBootstrapEvents = true;\n            $(this.el).datetimepicker(...args);\n            this.ignoreBootstrapEvents = false;\n        }\n\n        /**\n         * @private\n         * @param {moment} date\n         * @returns {string}\n         */\n        _formatDate(date) {\n            try {\n                return field_utils.format[this.typeOfDate](date, null, { timezone: false });\n            } catch (err) {\n                return false;\n            }\n        }\n\n        /**\n         * @private\n         * @param {string|false} value\n         * @returns {moment}\n         */\n        _parseInput(inputValue) {\n            try {\n                return field_utils.parse[this.typeOfDate](inputValue, null, { timezone: false });\n            } catch (err) {\n                return false;\n            }\n        }\n\n        //---------------------------------------------------------------------\n        // Handlers\n        //---------------------------------------------------------------------\n\n        /**\n         * Reacts to the datetimepicker being hidden\n         * Used to unbind the scroll event from the datetimepicker\n         * @private\n         */\n        _onDateTimePickerHide() {\n            if (this.ignoreBootstrapEvents) {\n                return;\n            }\n            const date = this._parseInput(this.inputRef.el.value);\n            this.state.warning = date.format('YYYY-MM-DD') > moment().format('YYYY-MM-DD');\n            this.trigger('datetime-changed', { date });\n        }\n\n        /**\n         * Reacts to the datetimepicker being shown\n         * Could set/verify our widget value\n         * And subsequently update the datetimepicker\n         * @private\n         */\n        _onDateTimePickerShow() {\n            if (this.ignoreBootstrapEvents) {\n                return;\n            }\n            this.inputRef.el.select();\n        }\n\n        /**\n         * @private\n         */\n        _onInputClick() {\n            this._datetimepicker('toggle');\n        }\n\n        /**\n         * @private\n         */\n        _onInputChange() {\n            const date = this._parseInput(this.inputRef.el.value);\n            if (date) {\n                this.state.warning = date.format('YYYY-MM-DD') > moment().format('YYYY-MM-DD');\n                this.trigger('datetime-changed', { date });\n            } else {\n                this.inputRef.el.value = this._formatDate(this.props.date);\n            }\n        }\n\n        /**\n         * @private\n         */\n        _onWindowScroll(ev) {\n            if (!config.device.isIOS && ev.target !== this.inputRef.el) {\n                this._datetimepicker('hide');\n            }\n        }\n    }\n\n    DatePicker.defaultProps = {\n        calendarWeeks: true,\n        icons: {\n            clear: 'fa fa-delete',\n            close: 'fa fa-check primary',\n            date: 'fa fa-calendar',\n            down: 'fa fa-chevron-down',\n            next: 'fa fa-chevron-right',\n            previous: 'fa fa-chevron-left',\n            time: 'fa fa-clock-o',\n            today: 'fa fa-calendar-check-o',\n            up: 'fa fa-chevron-up',\n        },\n        get locale() {return moment.locale();},\n        maxDate: moment({ y: 9999, M: 11, d: 31 }),\n        minDate: moment({ y: 1000 }),\n        useCurrent: false,\n        widgetParent: 'body',\n    };\n    DatePicker.props = {\n        // Actual date value\n        date: moment,\n        // Other props\n        buttons: {\n            type: Object,\n            shape: {\n                showClear: Boolean,\n                showClose: Boolean,\n                showToday: Boolean,\n            },\n            optional: 1,\n        },\n        calendarWeeks: Boolean,\n        format: { type: String, optional: 1 },\n        icons: {\n            type: Object,\n            shape: {\n                clear: String,\n                close: String,\n                date: String,\n                down: String,\n                next: String,\n                previous: String,\n                time: String,\n                today: String,\n                up: String,\n            },\n        },\n        keyBinds: { validate: kb => typeof kb === 'object' || kb === null, optional: 1 },\n        locale: String,\n        maxDate: moment,\n        minDate: moment,\n        readonly: { type: Boolean, optional: 1 },\n        useCurrent: Boolean,\n        widgetParent: String,\n    };\n    DatePicker.template = \"web.Legacy.DatePicker\";\n\n    /**\n     * Date/time picker\n     *\n     * Similar to the DatePicker component, adding the handling of more specific\n     * time values: hour-minute-second.\n     *\n     * Once again, refer to the tempusdominus documentation for implementation\n     * details.\n     * @extends DatePicker\n     */\n    class DateTimePicker extends DatePicker {\n        constructor() {\n            super(...arguments);\n\n            this.typeOfDate = 'datetime';\n        }\n\n        /**\n         * @override\n         */\n        get defaultFormat() {\n            return time.getLangDatetimeFormat();\n        }\n    }\n\n    DateTimePicker.defaultProps = Object.assign(Object.create(DatePicker.defaultProps), {\n        buttons: {\n            showClear: false,\n            showClose: true,\n            showToday: false,\n        },\n    });\n\n    return {\n        DatePicker,\n        DateTimePicker,\n    };\n});\n", "odoo.define('web.DropdownMenu', function (require) {\n    \"use strict\";\n\n    const { _t } = require('web.core');\n    const DropdownMenuItem = require('web.DropdownMenuItem');\n\n    const { Component, hooks } = owl;\n    const { useExternalListener, useRef, useState } = hooks;\n\n    /**\n     * Dropdown menu\n     *\n     * Generic component used to generate a list of interactive items. It uses some\n     * bootstrap classes but most interactions are handled in here or in the dropdown\n     * menu item class definition, including some keyboard navigation and escaping\n     * system (click outside to close the dropdown).\n     *\n     * The layout of a dropdown menu is as following:\n     * > a Button (always rendered) with a `title` and an optional `icon`;\n     * > a Dropdown (rendered when open) containing a collection of given items.\n     *   These items must be objects and can have two shapes:\n     *   1. item.Component & item.props > will instantiate the given Component with\n     *      the given props. Any additional key will be useless.\n     *   2. any other shape > will instantiate a DropdownMenuItem with the item\n     *      object being its props. There is no props validation as this object\n     *      will be passed as-is when `selected` and can contain additional meta-keys\n     *      that will not affect the displayed item. For more information regarding\n     *      the behaviour of these items, @see DropdownMenuItem.\n     * @extends Component\n     */\n    class DropdownMenu extends Component {\n        constructor() {\n            super(...arguments);\n\n            this.dropdownMenu = useRef('dropdown');\n            this.state = useState({ open: false });\n\n            useExternalListener(window, 'click', this._onWindowClick, true);\n            useExternalListener(window, 'keydown', this._onWindowKeydown);\n        }\n\n        //---------------------------------------------------------------------\n        // Getters\n        //---------------------------------------------------------------------\n\n        /**\n         * In desktop, by default, we do not display a caret icon next to the\n         * dropdown.\n         * @returns {boolean}\n         */\n        get displayCaret() {\n            return false;\n        }\n\n        /**\n         * In mobile, by default, we display a chevron icon next to the dropdown\n         * button. Note that when 'displayCaret' is true, we display a caret\n         * instead of a chevron, no matter the value of 'displayChevron'.\n         * @returns {boolean}\n         */\n        get displayChevron() {\n            return this.env.device.isMobile;\n        }\n\n        /**\n         * In mobile, by default, we use the middle of the screen as a threshold value to choose\n         * the alignment of the open dropdown against its triggering button.\n         *\n         * FIXME: Needs to be adapted for desktop, current calculation are only relevant on mobile screen\n         *\n         * @return {string} Bootstrap's dropdown alignment class\n         */\n        get dropdownMenuAlignClass() {\n            if (this.env.device.isMobile) {\n                const threshold = document.documentElement.clientWidth / 2;\n                const { left, right } = this.el.getBoundingClientRect();\n                if (_t.database.parameters.direction === 'rtl') {\n                    return right > threshold ? 'dropdown-menu-left' : 'dropdown-menu-right';\n                }\n                return left > threshold ? 'dropdown-menu-right' : 'dropdown-menu-left';\n            }\n            return '';\n        }\n\n        /**\n         * Can be overriden to force an icon on an inheriting class.\n         * @returns {string} Font Awesome icon class\n         */\n        get icon() {\n            return this.props.icon;\n        }\n\n        /**\n         * Meant to be overriden to provide the list of items to display.\n         * @returns {Object[]}\n         */\n        get items() {\n            return this.props.items;\n        }\n\n        /**\n         * @returns {string}\n         */\n        get title() {\n            return this.props.title;\n        }\n\n        //---------------------------------------------------------------------\n        // Handlers\n        //---------------------------------------------------------------------\n\n        /**\n         * @private\n         * @param {KeyboardEvent} ev\n         */\n        _onButtonKeydown(ev) {\n            switch (ev.key) {\n                case 'ArrowLeft':\n                case 'ArrowRight':\n                case 'ArrowUp':\n                case 'ArrowDown':\n                    const firstItem = this.el.querySelector('.dropdown-item');\n                    if (firstItem) {\n                        ev.preventDefault();\n                        firstItem.focus();\n                    }\n            }\n        }\n\n        /**\n         * @private\n         * @param {OwlEvent} ev\n         */\n        _onItemSelected(/* ev */) {\n            if (this.props.closeOnSelected) {\n                this.state.open = false;\n            }\n        }\n\n        /**\n         * @private\n         * @param {MouseEvent} ev\n         */\n        _onWindowClick(ev) {\n            if (\n                this.state.open &&\n                !this.el.contains(ev.target) &&\n                !this.el.contains(document.activeElement)\n            ) {\n                if (document.body.classList.contains(\"modal-open\")) {\n                    // retrieve the active modal and check if the dropdown is a child of this modal\n                    const modal = this.el.closest(\".modal[role='dialog']:not(.o_inactive_modal)\")\n                    if (!modal) {\n                        return;\n                    }\n                }\n                // check for an active open bootstrap calendar like the filter dropdown inside the search panel)\n                if (document.querySelector('body > .bootstrap-datetimepicker-widget')) {\n                    return;\n                }\n                this.state.open = false;\n            }\n        }\n\n        /**\n         * @private\n         * @param {KeyboardEvent} ev\n         */\n        _onWindowKeydown(ev) {\n            if (this.state.open && ev.key === 'Escape') {\n                this.state.open = false;\n            }\n        }\n    }\n\n    DropdownMenu.components = { DropdownMenuItem };\n    DropdownMenu.defaultProps = { items: [] };\n    DropdownMenu.props = {\n        icon: { type: String, optional: 1 },\n        items: {\n            type: Array,\n            element: Object,\n            optional: 1,\n        },\n        title: { type: String, optional: 1 },\n        closeOnSelected: { type: Boolean, optional: 1 },\n        hotkey: { type: String, optional: 1 },\n        hotkeyTitle: { type: String, optional: 1 },\n    };\n    DropdownMenu.template = 'web.DropdownMenu';\n\n    return DropdownMenu;\n});\n", "odoo.define('web.DropdownMenuItem', function (require) {\n    \"use strict\";\n\n    const { useListener } = require('web.custom_hooks');\n\n    const { Component, hooks } = owl;\n    const { useExternalListener, useRef, useState } = hooks;\n\n    /**\n     * Dropdown menu item\n     *\n     * Generic component instantiated by a dropdown menu (@see DropdownMenu) in\n     * the absence of `Component` and `props` keys in a given item object.\n     *\n     * In its simplest form, a dropdown menu item will be given a description (optional,\n     * but highly recommended) and will trigger a 'select-item' when clicked on.\n     * Additionaly it can receive the following props:\n     * - isActive: will add a `checked` symbol on the left side of the item\n     * - removable: will add a `remove` trash icon on the right side of the item.\n     *              when clicked, will trigger a 'remove-item' event.\n     * - options: will change the behaviour of the item ; instead of triggering\n     *            an event, the item will act as a nested dropdown menu and display\n     *            its given options. These will have the same definition as another\n     *            dropdown item but cannot have options of their own.\n     *\n     * It is recommended to extend this class when defining a Component which will\n     * be put inside of a dropdown menu (@see CustomFilterItem as example).\n     * @extends Component\n     */\n    class DropdownMenuItem extends Component {\n        constructor() {\n            super(...arguments);\n\n            this.canBeOpened = Boolean(this.props.options && this.props.options.length);\n\n            this.fallbackFocusRef = useRef('fallback-focus');\n            this.state = useState({ open: false });\n\n            useExternalListener(window, 'click', this._onWindowClick);\n            useListener('keydown', this._onKeydown);\n        }\n\n        //---------------------------------------------------------------------\n        // Handlers\n        //---------------------------------------------------------------------\n\n        /**\n         * @private\n         * @param {KeyboardEvent} ev\n         */\n        _onKeydown(ev) {\n            if (['INPUT', 'TEXTAREA'].includes(document.activeElement.tagName)) {\n                return;\n            }\n            switch (ev.key) {\n                case 'ArrowLeft':\n                    if (this.canBeOpened && this.state.open) {\n                        ev.preventDefault();\n                        if (this.fallbackFocusRef.el) {\n                            this.fallbackFocusRef.el.focus();\n                        }\n                        this.state.open = false;\n                    }\n                    break;\n                case 'ArrowRight':\n                    if (this.canBeOpened && !this.state.open) {\n                        ev.preventDefault();\n                        this.state.open = true;\n                    }\n                    break;\n                case 'Escape':\n                    ev.target.blur();\n                    if (this.canBeOpened && this.state.open) {\n                        ev.preventDefault();\n                        ev.stopPropagation();\n                        if (this.fallbackFocusRef.el) {\n                            this.fallbackFocusRef.el.focus();\n                        }\n                        this.state.open = false;\n                    }\n            }\n        }\n\n        /**\n         * @private\n         * @param {MouseEvent} ev\n         */\n        _onWindowClick(ev) {\n            if (\n                this.state.open &&\n                !this.el.contains(ev.target) &&\n                !this.el.contains(document.activeElement)\n            ) {\n                this.state.open = false;\n            }\n        }\n    }\n\n    DropdownMenuItem.template = 'web.DropdownMenuItem';\n\n    return DropdownMenuItem;\n});\n", "odoo.define('web.Pager', function (require) {\n    \"use strict\";\n\n    const { useAutofocus } = require('web.custom_hooks');\n\n    const { Component, hooks } = owl;\n    const { useState } = hooks;\n\n    /**\n     * Pager\n     *\n     * The pager goes from 1 to size (included).\n     * The current value is currentMinimum if limit === 1 or the interval:\n     *      [currentMinimum, currentMinimum + limit[ if limit > 1].\n     * The value can be manually changed by clicking on the pager value and giving\n     * an input matching the pattern: min[,max] (in which the comma can be a dash\n     * or a semicolon).\n     * The pager also provides two buttons to quickly change the current page (next\n     * or previous).\n     * @extends Component\n     */\n    class Pager extends Component {\n        /**\n         * @param {Object} [props]\n         * @param {int} [props.size] the total number of elements\n         * @param {int} [props.currentMinimum] the first element of the current_page\n         * @param {int} [props.limit] the number of elements per page\n         * @param {boolean} [props.editable] editable feature of the pager\n         * @param {function} [props.validate] callback returning a Promise to\n         *   validate changes\n         * @param {boolean} [props.withAccessKey] can be disabled, for example,\n         *   for x2m widgets\n         */\n        constructor() {\n            super(...arguments);\n\n            this.state = useState({\n                disabled: false,\n                editing: false,\n            });\n\n            useAutofocus();\n        }\n\n        async willUpdateProps() {\n            this.state.editing = false;\n            this.state.disabled = false;\n        }\n\n        //---------------------------------------------------------------------\n        // Getters\n        //---------------------------------------------------------------------\n\n        /**\n         * @returns {number}\n         */\n        get maximum() {\n            return Math.min(this.props.currentMinimum + this.props.limit - 1, this.props.size);\n        }\n\n        /**\n         * @returns {boolean} true iff there is only one page\n         */\n        get singlePage() {\n            return (1 === this.props.currentMinimum) && (this.maximum === this.props.size);\n        }\n\n        /**\n         * @returns {number}\n         */\n        get value() {\n            return this.props.currentMinimum + (this.props.limit > 1 ? `-${this.maximum}` : '');\n        }\n\n        //---------------------------------------------------------------------\n        // Private\n        //---------------------------------------------------------------------\n\n        /**\n         * Update the pager's state according to a pager action\n         * @private\n         * @param {number} [direction] the action (previous or next) on the pager\n         */\n        async _changeSelection(direction) {\n            try {\n                await this.props.validate();\n            } catch (err) {\n                return;\n            }\n            const { limit, size } = this.props;\n\n            // Compute the new currentMinimum\n            let currentMinimum = (this.props.currentMinimum + limit * direction);\n            if (currentMinimum > size) {\n                currentMinimum = 1;\n            } else if ((currentMinimum < 1) && (limit === 1)) {\n                currentMinimum = size;\n            } else if ((currentMinimum < 1) && (limit > 1)) {\n                currentMinimum = size - ((size % limit) || limit) + 1;\n            }\n\n            // The re-rendering of the pager must be done before the trigger of\n            // event 'pager-changed' as the rendering may enable the pager\n            // (and a common use is to disable the pager when this event is\n            // triggered, and to re-enable it when the data have been reloaded).\n            this._updateAndDisable(currentMinimum, limit);\n        }\n\n        /**\n         * Save the state from the content of the input\n         * @private\n         * @param {string} value the new raw pager value\n         * @returns {Promise}\n         */\n        async _saveValue(value) {\n            try {\n                await this.props.validate();\n            } catch (err) {\n                return;\n            }\n            const [min, max] = value.trim().split(/\\s*[\\-\\s,;]\\s*/);\n\n            let currentMinimum = Math.max(Math.min(parseInt(min, 10), this.props.size), 1);\n            let maximum = max ? Math.max(Math.min(parseInt(max, 10), this.props.size), 1) : min;\n\n            if (\n                !isNaN(currentMinimum) &&\n                !isNaN(maximum) &&\n                currentMinimum <= maximum\n            ) {\n                const limit = Math.max(maximum - currentMinimum) + 1;\n                this._updateAndDisable(currentMinimum, limit);\n            }\n        }\n\n        /**\n         * Commits the current input value. There are two scenarios:\n         * - the value is the same: the pager toggles back to readonly\n         * - the value changed: the pager is disabled to prevent furtherchanges\n         * Either way the \"pager-changed\" event is triggered to reload the\n         * view.\n         * @private\n         * @param {number} currentMinimum\n         * @param {number} limit\n         */\n        _updateAndDisable(currentMinimum, limit) {\n            if (\n                currentMinimum !== this.props.currentMinimum ||\n                limit !== this.props.limit\n            ) {\n                this.state.disabled = true;\n            } else {\n                // In this case we want to trigger an update, but since it will\n                // not re-render the pager (current props === next props) we\n                // have to disable the edition manually here.\n                this.state.editing = false;\n            }\n            this.trigger('pager-changed', { currentMinimum, limit });\n        }\n\n        //---------------------------------------------------------------------\n        // Handlers\n        //---------------------------------------------------------------------\n\n        /**\n         * @private\n         */\n        _onEdit() {\n            if (\n                this.props.editable && // editable\n                !this.state.editing && // not already editing\n                !this.state.disabled // not being changed already\n            ) {\n                this.state.editing = true;\n            }\n        }\n\n        /**\n         * @private\n         * @param {InputEvent} ev\n         */\n        _onValueChange(ev) {\n            this._saveValue(ev.currentTarget.value);\n            if (!this.state.disabled) {\n                ev.preventDefault();\n            }\n        }\n\n        /**\n         * @private\n         * @param {KeyboardEvent} ev\n         */\n        _onValueKeydown(ev) {\n            switch (ev.key) {\n                case 'Enter':\n                    ev.preventDefault();\n                    ev.stopPropagation();\n                    this._saveValue(ev.currentTarget.value);\n                    break;\n                case 'Escape':\n                    ev.preventDefault();\n                    ev.stopPropagation();\n                    this.state.editing = false;\n                    break;\n            }\n        }\n    }\n\n    Pager.defaultProps = {\n        editable: true,\n        validate: async () => { },\n        withAccessKey: true,\n    };\n    Pager.props = {\n        currentMinimum: { type: Number, optional: 1 },\n        editable: Boolean,\n        limit: { validate: l => !isNaN(l), optional: 1 },\n        size: { type: Number, optional: 1 },\n        validate: Function,\n        withAccessKey: Boolean,\n    };\n    Pager.template = 'web.Pager';\n\n    return Pager;\n});\n", "odoo.define(\"web.ComparisonMenu\", function (require) {\n    \"use strict\";\n\n    const { FACET_ICONS } = require(\"web.searchUtils\");\n    const { useModel } = require(\"web.Model\");\n    const { SearchDropdownItem } = require(\"@web/search/search_dropdown_item/search_dropdown_item\");\n\n    const { Component } = owl;\n\n    class ComparisonMenu extends Component {\n        constructor() {\n            super(...arguments);\n            this.icon = FACET_ICONS.comparison;\n            this.model = useModel('searchModel');\n        }\n\n        /**\n         * @override\n         */\n        get items() {\n            return this.model.get('filters', f => f.type === 'comparison');\n        }\n\n        /**\n         * @private\n         * @param {OwlEvent} ev\n         */\n        onComparisonSelected(ev) {\n            const { itemId } = ev.detail.payload;\n            this.model.dispatch(\"toggleComparison\", itemId);\n        }\n    }\n    ComparisonMenu.template = \"web.ComparisonMenu\";\n    ComparisonMenu.components = { DropdownItem: SearchDropdownItem };\n\n    return ComparisonMenu;\n});\n", "odoo.define('web.ControlPanel', function (require) {\n    \"use strict\";\n\n    const ActionMenus = require('web.ActionMenus');\n    const ComparisonMenu = require('web.ComparisonMenu');\n    const ActionModel = require('web.ActionModel');\n    const FavoriteMenu = require('web.FavoriteMenu');\n    const FilterMenu = require('web.FilterMenu');\n    const GroupByMenu = require('web.GroupByMenu');\n    const Pager = require('web.Pager');\n    const SearchBar = require('web.SearchBar');\n    const { useModel } = require('web.Model');\n\n    const { Component, hooks } = owl;\n    const { useRef, useSubEnv } = hooks;\n\n    /**\n     * TODO: remove this whole mechanism as soon as `cp_content` is completely removed.\n     * Extract the 'cp_content' key of the given props and return them as well as\n     * the extracted content.\n     * @param {Object} props\n     * @returns {Object}\n     */\n    function getAdditionalContent(props) {\n        const additionalContent = {};\n        if ('cp_content' in props) {\n            const content = props.cp_content || {};\n            if ('$buttons' in content) {\n                additionalContent.buttons = content.$buttons;\n            }\n            if ('$searchview' in content) {\n                additionalContent.searchView = content.$searchview;\n            }\n            if ('$pager' in content) {\n                additionalContent.pager = content.$pager;\n            }\n            if ('$searchview_buttons' in content) {\n                additionalContent.searchViewButtons = content.$searchview_buttons;\n            }\n        }\n        return additionalContent;\n    }\n\n    /**\n     * Control panel\n     *\n     * The control panel of the action|view. In its standard form, it is composed of\n     * several sections/subcomponents. Here is a simplified graph representing the\n     * action|view and its control panel:\n     *\n     * \u250c View Controller | Action ----------------------------------------------------------\u2510\n     * | \u250c Control Panel \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 |\n     * | \u2502 \u250c Breadcrumbs \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u250c Search View \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 |\n     * | \u2502 \u2502 [1] / [2]               \u2502 \u2502 \u2502 [3] [ ================ 4 ================= ] \u2502 \u2502 |\n     * | \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 |\n     * | \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524 |\n     * | \u2502 \u250c Buttons \u2510 \u250c ActionMenus \u2510 \u2502 \u250c Search Menus \u2500\u2500\u2500\u2500\u2500\u2510 \u250c Pager \u2510\u250c View switcher \u2510 \u2502 |\n     * | \u2502 \u2502 [5]     \u2502 \u2502 [6]         \u2502 \u2502 \u2502 [7] [8] [9] [10]  \u2502 \u2502 [11]  \u2502\u2502 [12]          \u2502 \u2502 |\n     * | \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 |\n     * | \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 |\n     * | \u250c View Renderer | Action content \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 |\n     * | \u2502                                                                                \u2502 |\n     * | \u2502  ...                                                                           \u2502 |\n     * | \u2502                                                                                \u2502 |\n     * | \u2502                                                                                \u2502 |\n     * | \u2502                                                                                \u2502 |\n     * | \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 |\n     * \u2514------------------------------------------------------------------------------------\u2518\n     *\n     * 1. Breadcrumbs: list of links composed by the `props.breadcrumbs` collection.\n     * 2. Title: the title of the action|view. Can be empty and will yield 'Unnamed'.\n     * 3. Search facets: a collection of facet components generated by the `ControlPanelModel`\n     *    and handled by the `SearchBar` component. @see SearchFacet\n     * 4. SearchBar: @see SearchBar\n     * 5. Buttons: section in which the action|controller is meant to inject its control\n     *             buttons. The template provides a slot for this purpose.\n     * 6. Action menus: @see ActionMenus\n     * 7. Filter menu: @see FilterMenu\n     * 8. Group by menu: @see GroupByMenu\n     * 9. Comparison menu: @see ComparisonMenu\n     * 10. Favorite menu: @see FavoriteMenu\n     * 11. Pager: @see Pager\n     * 12. View switcher buttons: list of buttons composed by the `props.views` collection.\n     *\n     * Subcomponents (especially in the [Search Menus] section) will call\n     * the ControlPanelModel to get processed information about the current view|action.\n     * @see ControlPanelModel for more details.\n     *\n     * Note: an additional temporary (and ugly) mechanic allows to inject a jQuery element\n     * given in `props.cp_content` in a related section:\n     *      $buttons -> [Buttons]\n     *      $searchview -> [Search View]\n     *      $searchview_buttons -> [Search Menus]\n     *      $pager -> [Pager]\n     * This system must be replaced by proper slot usage and the static template\n     * inheritance mechanism when converting the views/actions.\n     * @extends Component\n     */\n    class ControlPanel extends Component {\n        constructor() {\n            super(...arguments);\n\n            this.additionalContent = getAdditionalContent(this.props);\n\n            useSubEnv({\n                action: this.props.action,\n                searchModel: this.props.searchModel,\n                view: this.props.view,\n            });\n\n            // Connect to the model\n            // TODO: move this in enterprise whenever possible\n            if (this.env.searchModel) {\n                this.model = useModel('searchModel');\n            }\n\n            // Reference hooks\n            this.contentRefs = {\n                buttons: useRef('buttons'),\n                pager: useRef('pager'),\n                searchView: useRef('searchView'),\n                searchViewButtons: useRef('searchViewButtons'),\n            };\n\n            this.fields = this._formatFields(this.props.fields);\n\n            this.sprintf = _.str.sprintf;\n        }\n\n        mounted() {\n            this._attachAdditionalContent();\n        }\n\n        patched() {\n            this._attachAdditionalContent();\n        }\n\n        async willUpdateProps(nextProps) {\n            // Note: action and searchModel are not likely to change during\n            // the lifespan of a ControlPanel instance, so we only need to update\n            // the view information.\n            if ('view' in nextProps) {\n                this.env.view = nextProps.view;\n            }\n            if ('fields' in nextProps) {\n                this.fields = this._formatFields(nextProps.fields);\n            }\n            this.additionalContent = getAdditionalContent(nextProps);\n        }\n\n        //---------------------------------------------------------------------\n        // Private\n        //---------------------------------------------------------------------\n\n        /**\n         * Attach additional content extracted from the props 'cp_content' key, if any.\n         * @private\n         */\n        _attachAdditionalContent() {\n            for (const key in this.additionalContent) {\n                if (this.additionalContent[key] && this.additionalContent[key].length) {\n                    const target = this.contentRefs[key].el;\n                    if (target) {\n                        target.innerHTML = \"\";\n                        target.append(...this.additionalContent[key]);\n                    }\n                }\n            }\n        }\n\n        /**\n         * Give `name` and `description` keys to the fields given to the control\n         * panel.\n         * @private\n         * @param {Object} fields\n         * @returns {Object}\n         */\n        _formatFields(fields) {\n            const formattedFields = {};\n            for (const fieldName in fields) {\n                formattedFields[fieldName] = Object.assign({\n                    description: fields[fieldName].string,\n                    name: fieldName,\n                }, fields[fieldName]);\n            }\n            return formattedFields;\n        }\n    }\n    ControlPanel.modelExtension = \"ControlPanel\";\n\n    ControlPanel.components = {\n        SearchBar,\n        ActionMenus, Pager,\n        ComparisonMenu, FilterMenu, GroupByMenu, FavoriteMenu,\n    };\n    ControlPanel.defaultProps = {\n        breadcrumbs: [],\n        fields: {},\n        searchMenuTypes: [],\n        views: [],\n        withBreadcrumbs: true,\n        withSearchBar: true,\n    };\n    ControlPanel.props = {\n        action: Object,\n        breadcrumbs: Array,\n        searchModel: ActionModel,\n        cp_content: { type: Object, optional: 1 },\n        fields: Object,\n        pager: { validate: p => typeof p === 'object' || p === null, optional: 1 },\n        searchMenuTypes: Array,\n        actionMenus: { validate: s => typeof s === 'object' || s === null, optional: 1 },\n        title: { type: String, optional: 1 },\n        view: { type: Object, optional: 1 },\n        views: Array,\n        withBreadcrumbs: Boolean,\n        withSearchBar: Boolean,\n    };\n    ControlPanel.template = 'web.Legacy.ControlPanel';\n\n    return ControlPanel;\n});\n", "odoo.define(\"web/static/src/js/control_panel/control_panel_model_extension.js\", function (require) {\n    \"use strict\";\n\n    const ActionModel = require(\"web.ActionModel\");\n    const Domain = require('web.Domain');\n    const pyUtils = require('web.py_utils');\n\n    const { DEFAULT_INTERVAL, DEFAULT_PERIOD,\n        getComparisonOptions, getIntervalOptions, getPeriodOptions,\n        constructDateDomain, rankInterval, yearSelected } = require('web.searchUtils');\n\n    const FAVORITE_PRIVATE_GROUP = 1;\n    const FAVORITE_SHARED_GROUP = 2;\n    const DISABLE_FAVORITE = \"search_disable_custom_filters\";\n\n    /**\n     * Control panel model\n     *\n     * The control panel model state is an object structured in the following way:\n     *\n     *  {\n     *      filters: Object{},\n     *      query: Object[],\n     *  }\n     *\n     *-------------------------------------------------------------------------\n     * Filters\n     *-------------------------------------------------------------------------\n     *\n     * The keys are stringified numbers called 'filter ids'.\n     * The values are objects called 'filters'.\n     *\n     * Each filter has the following properties:\n     *      @prop {number} id unique identifier, also the filter's corresponding key\n     *      @prop {number} groupId the id of some group, actually the group itself,\n     *                     the (active) 'groups' are reconstructed in _getGroups.\n     *      @prop {string} description the description of the filter\n     *      @prop {string} type 'filter'|'groupBy'|'comparison'|'field'|'favorite'\n     *\n     * Other properties can be present according to the corresponding filter type:\n     *\n     * \u2022 type 'comparison':\n     *      @prop {string} comparisonOptionId option identifier (@see COMPARISON_OPTIONS).\n     *      @prop {string} dateFilterId the id of a date filter (filter of type 'filter'\n     *                                      with isDateFilter=true)\n     *\n     * \u2022 type 'filter':\n     *      @prop {number} groupNumber used to separate items in the 'Filters' menu\n     *      @prop {string} [context] context\n     *      @prop {boolean} [invisible] determine if the filter is accessible in the interface\n     *      @prop {boolean} [isDefault]\n     *      @if isDefault = true:\n     *          > @prop {number} [defaultRank=-5] used to determine the order of\n     *          >                activation of default filters\n     *      @prop {boolean} [isDateFilter] true if the filter comes from an arch node\n     *                      with a valid 'date' attribute.\n     *      @if isDateFilter = true\n     *          > @prop {boolean} [hasOptions=true]\n     *          > @prop {string} defaultOptionId option identifier determined by\n     *          >                default_period attribute (@see PERIOD_OPTIONS).\n     *          >                Default set to DEFAULT_PERIOD.\n     *          > @prop {string} fieldName determined by the value of 'date' attribute\n     *          > @prop {string} fieldType 'date' or 'datetime', type of the corresponding field\n     *      @else\n     *          > @prop {string} domain\n     *\n     * \u2022 type 'groupBy':\n     *      @prop {string} fieldName\n     *      @prop {string} fieldType\n     *      @prop {number} groupNumber used to separate items in the 'Group by' menu\n     *      @prop {boolean} [isDefault]\n     *      @if isDefault = true:\n     *          > @prop {number} defaultRank used to determine the order of activation\n     *          >                of default filters\n     *      @prop {boolean} [invisible] determine if the filter is accessible in the interface\n     *      @prop {boolean} [hasOptions] true if field type is 'date' or 'datetime'\n     *      @if hasOptions=true\n     *          > @prop {string} defaultOptionId option identifier (see INTERVAL_OPTIONS)\n     *                           default set to DEFAULT_INTERVAL.\n     *\n     * \u2022 type 'field':\n     *      @prop {string} fieldName\n     *      @prop {string} fieldType\n     *      @prop {string} [context]\n     *      @prop {string} [domain]\n     *      @prop {string} [filterDomain]\n     *      @prop {boolean} [invisible] determine if the filter is accessible in the interface\n     *      @prop {boolean} [isDefault]\n     *      @prop {string} [operator]\n     *      @if isDefault = true:\n     *          > @prop {number} [defaultRank=-10] used to determine the order of\n     *          >                activation of filters\n     *          > @prop {Object} defaultAutocompleteValue of the form { value, label, operator }\n     *\n     * \u2022 type: 'favorite':\n     *      @prop {Object} [comparison] of the form {comparisonId, fieldName, fieldDescription,\n     *                      range, rangeDescription, comparisonRange, comparisonRangeDescription, }\n     *      @prop {Object} context\n     *      @prop {string} domain\n     *      @prop {string[]} groupBys\n     *      @prop {number} groupNumber 1 | 2, 2 if the favorite is shared\n     *      @prop {string[]} orderedBy\n     *      @prop {boolean} [removable=true] indicates that the favorite can be deleted\n     *      @prop {number} serverSideId\n     *      @prop {number} userId\n     *      @prop {boolean} [isDefault]\n     *\n     *-------------------------------------------------------------------------\n     * Query\n     *-------------------------------------------------------------------------\n     *\n     * The query elements are objects called 'query elements'.\n     *\n     * Each query element has the following properties:\n     *      @prop {number} filterId the id of some filter\n     *      @prop {number} groupId the id of some group (actually the group itself)\n     *\n     * Other properties must be defined according to the corresponding filter type.\n     *\n     * \u2022 type 'comparison':\n     *      @prop {string} dateFilterId the id of a date filter (filter of type 'filter'\n     *                                      with hasOptions=true)\n     *      @prop {string} type 'comparison', help when searching if a comparison is active\n     *\n     * \u2022 type 'filter' with hasOptions=true:\n     *      @prop {string} optionId option identifier (@see PERIOD_OPTIONS)\n     *\n     * \u2022 type 'groupBy' with hasOptions=true:\n     *      @prop {string} optionId option identifier (@see INTERVAL_OPTIONS)\n     *\n     * \u2022 type 'field':\n     *      @prop {string} label description put in the facet (can be temporarilly missing)\n     *      @prop {(string|number)} value used as the value of the generated domain\n     *      @prop {string} operator used as the operator of the generated domain\n     *\n     * The query elements indicates what are the active filters and 'how' they are active.\n     * The key groupId has been added for simplicity. It could have been removed from query elements\n     * since the information is available on the corresponding filters.\n     * @extends ActionModel.Extension\n     */\n    class ControlPanelModelExtension extends ActionModel.Extension {\n        /**\n         * @param {Object} config\n         * @param {(string|number)} config.actionId\n         * @param {Object} config.env\n         * @param {string} config.modelName\n         * @param {Object} [config.context={}]\n         * @param {Object[]} [config.archNodes=[]]\n         * @param {Object[]} [config.dynamicFilters=[]]\n         * @param {string[]} [config.searchMenuTypes=[]]\n         * @param {Object} [config.favoriteFilters={}]\n         * @param {Object} [config.fields={}]\n         * @param {boolean} [config.withSearchBar=true]\n         */\n        constructor() {\n            super(...arguments);\n\n            this.actionContext = Object.assign({}, this.config.context);\n            this.searchMenuTypes = this.config.searchMenuTypes || [];\n            this.favoriteFilters = this.config.favoriteFilters || [];\n            this.fields = this.config.fields || {};\n            this.searchDefaults = {};\n            for (const key in this.actionContext) {\n                const match = /^search_default_(.*)$/.exec(key);\n                if (match) {\n                    const val = this.actionContext[key];\n                    if (val) {\n                        this.searchDefaults[match[1]] = val;\n                    }\n                    delete this.actionContext[key];\n                }\n            }\n            this.labelPromises = [];\n\n            this.referenceMoment = moment();\n            this.optionGenerators = getPeriodOptions(this.referenceMoment);\n            this.intervalOptions = getIntervalOptions();\n            this.comparisonOptions = getComparisonOptions();\n        }\n\n        //---------------------------------------------------------------------\n        // Public\n        //---------------------------------------------------------------------\n\n        /**\n         * @override\n         * @returns {any}\n         */\n        get(property, ...args) {\n            switch (property) {\n                case \"context\": return this.getContext();\n                case \"domain\": return this.getDomain();\n                case \"facets\": return this._getFacets();\n                case \"filters\": return this._getFilters(...args);\n                case \"groupBy\": return this.getGroupBy();\n                case \"orderedBy\": return this.getOrderedBy();\n                case \"timeRanges\": return this.getTimeRanges();\n                case \"irFilterValues\": return this.getIrFilterValues({ type: \"favorite\" });\n            }\n        }\n\n        /**\n         * @override\n         */\n        async load() {\n            await Promise.all(this.labelPromises);\n        }\n\n        /**\n         * @override\n         */\n        prepareState() {\n            Object.assign(this.state, {\n                nextGroupId: 1,\n                nextGroupNumber: 1,\n                nextId: 1,\n                filters: {},\n                query: [],\n            });\n            if (this.config.withSearchBar !== false) {\n                this._addFilters();\n                this._activateDefaultFilters();\n            }\n        }\n\n        //---------------------------------------------------------------------\n        // Actions / Getters\n        //---------------------------------------------------------------------\n\n        /**\n         * @returns {Object | undefined}\n         */\n        get activeComparison() {\n            return this.state.query.find(queryElem => queryElem.type === 'comparison');\n        }\n\n        /**\n         * Activate a filter of type 'field' with given filterId with\n         * 'autocompleteValues' value, label, and operator.\n         * @param {Object}\n         */\n        addAutoCompletionValues({ filterId, label, value, operator }) {\n            const queryElem = this.state.query.find(queryElem =>\n                queryElem.filterId === filterId &&\n                queryElem.value === value &&\n                queryElem.operator === operator\n            );\n            if (!queryElem) {\n                const { groupId } = this.state.filters[filterId];\n                this.state.query.push({ filterId, groupId, label, value, operator });\n            } else {\n                queryElem.label = label;\n            }\n        }\n\n        /**\n         * Remove all the query elements from query.\n         */\n        clearQuery() {\n            this.state.query = [];\n        }\n\n        getIrFilterValues(preFilter) {\n            const groups = this._getGroups();\n\n            const userContext = this.env.session.user_context;\n            let controllerQueryParams;\n            this.config.trigger(\"get-controller-query-params\", params => {\n                controllerQueryParams = params;\n            });\n            controllerQueryParams = controllerQueryParams || {};\n            controllerQueryParams.context = controllerQueryParams.context || {};\n\n            const queryContext = this._getContext(groups);\n            const context = pyUtils.eval(\n                'contexts',\n                [userContext, controllerQueryParams.context, queryContext]\n            );\n            for (const key in userContext) {\n                delete context[key];\n            }\n\n            const requireEvaluation = false;\n            const domain = this._getDomain(groups);\n            const groupBys = this._getGroupBy(groups);\n            const timeRanges = this._getTimeRanges(requireEvaluation);\n            const orderedBy = controllerQueryParams.orderedBy ?\n                controllerQueryParams.orderedBy :\n                (this._getOrderedBy(groups) || []);\n\n            const userId = preFilter.isShared ? false : this.env.session.uid;\n            delete preFilter.isShared;\n\n            Object.assign(preFilter, {\n                context,\n                domain,\n                groupBys,\n                groupNumber: userId ? FAVORITE_PRIVATE_GROUP : FAVORITE_SHARED_GROUP,\n                orderedBy,\n                removable: true,\n                userId,\n            });\n            if (timeRanges) {\n                preFilter.comparison = timeRanges;\n            }\n            return this._favoriteToIrFilter(preFilter);\n        }\n\n        /**\n         * Create a new filter of type 'favorite' and activate it.\n         * A new group containing only that filter is created.\n         * The query is emptied before activating the new favorite.\n         * @param {Object} preFilter\n         * @returns {Promise}\n         */\n        async createNewFavorite(preFilter) {\n            const preFavorite = await this._saveQuery(preFilter);\n            this.clearQuery();\n            const filter = Object.assign(preFavorite, {\n                groupId: this.state.nextGroupId,\n                id: this.state.nextId,\n            });\n            this.state.filters[this.state.nextId] = filter;\n            this.state.query.push({ groupId: this.state.nextGroupId, filterId: this.state.nextId });\n            this.state.nextGroupId++;\n            this.state.nextId++;\n        }\n\n        /**\n         * Create new filters of type 'filter' and activate them.\n         * A new group containing only those filters is created.\n         * @param {Object[]} filters\n         * @returns {number[]}\n         */\n        createNewFilters(prefilters) {\n            if (!prefilters.length) {\n                return [];\n            }\n            const newFilterIdS = [];\n            prefilters.forEach(preFilter => {\n                const filter = Object.assign(preFilter, {\n                    groupId: this.state.nextGroupId,\n                    groupNumber: this.state.nextGroupNumber,\n                    id: this.state.nextId,\n                    type: 'filter',\n                });\n                this.state.filters[this.state.nextId] = filter;\n                this.state.query.push({ groupId: this.state.nextGroupId, filterId: this.state.nextId });\n                newFilterIdS.push(this.state.nextId);\n                this.state.nextId++;\n            });\n            this.state.nextGroupId++;\n            this.state.nextGroupNumber++;\n            return newFilterIdS;\n        }\n\n        /**\n         * Create a new filter of type 'groupBy' and activate it.\n         * It is added to the unique group of groupbys.\n         * @param {Object} field\n         */\n        createNewGroupBy(field) {\n            const groupBy = Object.values(this.state.filters).find(f => f.type === 'groupBy');\n            const filter = {\n                description: field.string || field.name,\n                fieldName: field.name,\n                fieldType: field.type,\n                groupId: groupBy ? groupBy.groupId : this.state.nextGroupId++,\n                groupNumber: this.state.nextGroupNumber,\n                id: this.state.nextId,\n                type: 'groupBy',\n                custom: true,\n            };\n            this.state.filters[this.state.nextId] = filter;\n            if (['date', 'datetime'].includes(field.type)) {\n                filter.hasOptions = true;\n                filter.defaultOptionId = DEFAULT_INTERVAL;\n                this.toggleFilterWithOptions(this.state.nextId);\n            } else {\n                this.toggleFilter(this.state.nextId);\n            }\n            this.state.nextGroupNumber++;\n            this.state.nextId++;\n        }\n\n        /**\n         * Deactivate a group with provided groupId, i.e. delete the query elements\n         * with given groupId.\n         * @param {number} groupId\n         */\n        deactivateGroup(groupId) {\n            this.state.query = this.state.query.filter(\n                queryElem => queryElem.groupId !== groupId\n            );\n            this._checkComparisonStatus();\n        }\n\n        /**\n         * Delete a filter of type 'favorite' with given filterId server side and\n         * in control panel model. Of course the filter is also removed\n         * from the search query.\n         * @param {number} filterId\n         */\n        async deleteFavorite(filterId) {\n            const { serverSideId } = this.state.filters[filterId];\n            await this.env.dataManager.delete_filter(serverSideId);\n            const index = this.state.query.findIndex(\n                queryElem => queryElem.filterId === filterId\n            );\n            delete this.state.filters[filterId];\n            if (index >= 0) {\n                this.state.query.splice(index, 1);\n            }\n        }\n\n        /**\n         * @returns {Object}\n         */\n        getContext() {\n            const groups = this._getGroups();\n            return this._getContext(groups);\n        }\n\n        /**\n         * @returns {Array[]}\n         */\n        getDomain() {\n            const groups = this._getGroups();\n            const userContext = this.env.session.user_context;\n            try {\n                return Domain.prototype.stringToArray(this._getDomain(groups), userContext);\n            } catch (err) {\n                throw new Error(\n                    `${this.env._t(\"Control panel model extension failed to evaluate domain\")}:/n${JSON.stringify(err)}`\n                );\n            }\n        }\n\n        /**\n         * @returns {string[]}\n         */\n        getGroupBy() {\n            const groups = this._getGroups();\n            return this._getGroupBy(groups);\n        }\n\n        /**\n         * @returns {string[]}\n         */\n        getOrderedBy() {\n            const groups = this._getGroups();\n            return this._getOrderedBy(groups);\n        }\n\n        /**\n         * @returns {Object}\n         */\n        getTimeRanges() {\n            const requireEvaluation = true;\n            return this._getTimeRanges(requireEvaluation);\n        }\n\n        /**\n         * Used to call dispatch and trigger a 'search'.\n         */\n        search() {\n            /* ... */\n        }\n\n        /**\n         * Activate/Deactivate a filter of type 'comparison' with provided id.\n         * At most one filter of type 'comparison' can be activated at every time.\n         * @param {string} filterId\n         */\n        toggleComparison(filterId) {\n            const { groupId, dateFilterId } = this.state.filters[filterId];\n            const queryElem = this.state.query.find(queryElem =>\n                queryElem.type === 'comparison' &&\n                queryElem.filterId === filterId\n            );\n            // make sure only one comparison can be active\n            this.state.query = this.state.query.filter(queryElem => queryElem.type !== 'comparison');\n            if (!queryElem) {\n                this.state.query.push({ groupId, filterId, dateFilterId, type: 'comparison', });\n            }\n        }\n\n        /**\n         * Activate or deactivate the simple filter with given filterId, i.e.\n         * add or remove a corresponding query element.\n         * @param {string} filterId\n         */\n        toggleFilter(filterId) {\n            const index = this.state.query.findIndex(\n                queryElem => queryElem.filterId === filterId\n            );\n            if (index >= 0) {\n                this.state.query.splice(index, 1);\n            } else {\n                const { groupId, type } = this.state.filters[filterId];\n                if (type === 'favorite') {\n                    this.state.query = [];\n                }\n                this.state.query.push({ groupId, filterId });\n            }\n        }\n\n        /**\n         * Used to toggle a query element { filterId, optionId, (groupId) }.\n         * This can impact the query in various form, e.g. add/remove other query elements\n         * in case the filter is of type 'filter'.\n         * @param {string} filterId\n         * @param {string} [optionId]\n         */\n        toggleFilterWithOptions(filterId, optionId) {\n            const filter = this.state.filters[filterId];\n            optionId = optionId || filter.defaultOptionId;\n            const option = this.optionGenerators.find(o => o.id === optionId);\n\n            const index = this.state.query.findIndex(\n                queryElem => queryElem.filterId === filterId && queryElem.optionId === optionId\n            );\n\n            if (index >= 0) {\n                this.state.query.splice(index, 1);\n                if (filter.type === 'filter' && !yearSelected(this._getSelectedOptionIds(filterId))) {\n                    // This is the case where optionId was the last option\n                    // of type 'year' to be there before being removed above.\n                    // Since other options of type 'month' or 'quarter' do\n                    // not make sense without a year we deactivate all options.\n                    this.state.query = this.state.query.filter(\n                        queryElem => queryElem.filterId !== filterId\n                    );\n                }\n            } else {\n                this.state.query.push({ groupId: filter.groupId, filterId, optionId });\n                if (filter.type === 'filter' && !yearSelected(this._getSelectedOptionIds(filterId))) {\n                    // Here we add 'this_year' as options if no option of type\n                    // year is already selected.\n                    this.state.query.push({\n                        groupId: filter.groupId,\n                        filterId,\n                        optionId: option.defaultYearId,\n                    });\n                }\n            }\n            if (filter.type === 'filter') {\n                this._checkComparisonStatus();\n            }\n        }\n\n        //---------------------------------------------------------------------\n        // Private\n        //---------------------------------------------------------------------\n\n        /**\n         * Activate the default favorite (if any) or all default filters.\n         * @private\n         */\n        _activateDefaultFilters() {\n            if (this.defaultFavoriteId) {\n                // Activate default favorite\n                this.toggleFilter(this.defaultFavoriteId);\n            } else {\n                // Activate default filters\n                Object.values(this.state.filters)\n                    .filter((f) => f.isDefault && f.type !== 'favorite')\n                    .sort((f1, f2) => (f1.defaultRank || 100) - (f2.defaultRank || 100))\n                    .forEach(f => {\n                        if (f.hasOptions) {\n                            this.toggleFilterWithOptions(f.id);\n                        } else if (f.type === 'field') {\n                            let { operator, label, value } = f.defaultAutocompleteValue;\n                            this.addAutoCompletionValues({\n                                filterId: f.id,\n                                value,\n                                operator,\n                                label,\n                            });\n                        } else {\n                            this.toggleFilter(f.id);\n                        }\n                    });\n            }\n        }\n\n        /**\n         * This function populates the 'filters' object at initialization.\n         * The filters come from:\n         *     - config.archNodes (types 'comparison', 'filter', 'groupBy', 'field'),\n         *     - config.dynamicFilters (type 'filter'),\n         *     - config.favoriteFilters (type 'favorite'),\n         *     - code itself (type 'timeRange')\n         * @private\n         */\n        _addFilters() {\n            this._createGroupOfFavorites();\n            this._createGroupOfFiltersFromArch();\n            this._createGroupOfDynamicFilters();\n        }\n\n        /**\n         * If a comparison is active, check if it should become inactive.\n         * The comparison should become inactive if the corresponding date filter has become\n         * inactive.\n         * @private\n         */\n        _checkComparisonStatus() {\n            const activeComparison = this.activeComparison;\n            if (!activeComparison) {\n                return;\n            }\n            const { dateFilterId } = activeComparison;\n            const dateFilterIsActive = this.state.query.some(\n                queryElem => queryElem.filterId === dateFilterId\n            );\n            if (!dateFilterIsActive) {\n                this.state.query = this.state.query.filter(\n                    queryElem => queryElem.type !== 'comparison'\n                );\n            }\n        }\n\n        /**\n         * Returns the active comparison timeRanges object.\n         * @private\n         * @param {Object} comparisonFilter\n         * @returns {Object | null}\n         */\n        _computeTimeRanges(comparisonFilter) {\n            const { filterId } = this.activeComparison;\n            if (filterId !== comparisonFilter.id) {\n                return null;\n            }\n            const { dateFilterId, comparisonOptionId } = comparisonFilter;\n            const {\n                fieldName,\n                fieldType,\n                description: dateFilterDescription,\n            } = this.state.filters[dateFilterId];\n\n            const selectedOptionIds = this._getSelectedOptionIds(dateFilterId);\n\n            // compute range and range description\n            const { domain: range, description: rangeDescription } = constructDateDomain(\n                this.referenceMoment, fieldName, fieldType, selectedOptionIds,\n            );\n\n            // compute comparisonRange and comparisonRange description\n            const {\n                domain: comparisonRange,\n                description: comparisonRangeDescription,\n            } = constructDateDomain(\n                this.referenceMoment, fieldName, fieldType, selectedOptionIds, comparisonOptionId\n            );\n\n            return {\n                comparisonId: comparisonOptionId,\n                fieldName,\n                fieldDescription: dateFilterDescription,\n                range,\n                rangeDescription,\n                comparisonRange,\n                comparisonRangeDescription,\n            };\n        }\n\n        /**\n         * Starting from the array of date filters, create the filters of type\n         * 'comparison'.\n         * @private\n         * @param {Object[]} dateFilters\n         */\n        _createGroupOfComparisons(dateFilters) {\n            const preFilters = [];\n            for (const dateFilter of dateFilters) {\n                for (const comparisonOption of this.comparisonOptions) {\n                    const { id: dateFilterId, description } = dateFilter;\n                    const preFilter = {\n                        type: 'comparison',\n                        comparisonOptionId: comparisonOption.id,\n                        description: `${description}: ${comparisonOption.description}`,\n                        dateFilterId,\n                    };\n                    preFilters.push(preFilter);\n                }\n            }\n            this._createGroupOfFilters(preFilters);\n        }\n\n        /**\n         * Add filters of type 'filter' determined by the key array dynamicFilters.\n         * @private\n         */\n        _createGroupOfDynamicFilters() {\n            const dynamicFilters = this.config.dynamicFilters || [];\n            const pregroup = dynamicFilters.map(filter => {\n                return {\n                    description: filter.description,\n                    domain: JSON.stringify(filter.domain),\n                    isDefault: true,\n                    type: 'filter',\n                };\n            });\n            this._createGroupOfFilters(pregroup);\n        }\n\n        /**\n         * Add filters of type 'favorite' determined by the array this.favoriteFilters.\n         * @private\n         */\n        _createGroupOfFavorites() {\n            const activateFavorite = DISABLE_FAVORITE in this.actionContext ?\n                !this.actionContext[DISABLE_FAVORITE] :\n                true;\n            this.favoriteFilters.forEach(irFilter => {\n                const favorite = this._irFilterToFavorite(irFilter);\n                this._createGroupOfFilters([favorite]);\n                if (activateFavorite && favorite.isDefault) {\n                    this.defaultFavoriteId = favorite.id;\n                }\n            });\n        }\n\n        /**\n         * Using a list (a 'pregroup') of 'prefilters', create new filters in `state.filters`\n         * for each prefilter. The new filters belong to a same new group.\n         * @private\n         * @param {Object[]} pregroup, list of 'prefilters'\n         * @param {string} type\n         */\n        _createGroupOfFilters(pregroup) {\n            pregroup.forEach(preFilter => {\n                const filter = Object.assign(preFilter, { groupId: this.state.nextGroupId, id: this.state.nextId });\n                this.state.filters[this.state.nextId] = filter;\n                if (!this.defaultFavoriteId && filter.isDefault && filter.type === 'field') {\n                    this._prepareDefaultLabel(filter);\n                }\n                this.state.nextId++;\n            });\n            this.state.nextGroupId++;\n        }\n\n        /**\n         * Parse the arch of a 'search' view and create corresponding filters and groups.\n         *\n         * A searchview arch may contain a 'searchpanel' node, but this isn't\n         * the concern of the ControlPanel (the SearchPanel will handle it).\n         * Ideally, this code should whitelist the tags to take into account\n         * instead of blacklisting the others, but with the current (messy)\n         * structure of a searchview arch, it's way simpler to do it that way.\n         * @private\n         */\n        _createGroupOfFiltersFromArch() {\n            const preFilters = this.config.archNodes.reduce(\n                (preFilters, child) => {\n                    if (child.tag === 'group') {\n                        return [...preFilters, ...child.children.map(c => this._evalArchChild(c))];\n                    } else {\n                        return [...preFilters, this._evalArchChild(child)];\n                    }\n                },\n                []\n            );\n            preFilters.push({ tag: 'separator' });\n\n            // create groups and filters\n            let currentTag;\n            let currentGroup = [];\n            let pregroupOfGroupBys = [];\n\n            preFilters.forEach(preFilter => {\n                if (\n                    preFilter.tag !== currentTag ||\n                    ['separator', 'field'].includes(preFilter.tag)\n                ) {\n                    if (currentGroup.length) {\n                        if (currentTag === 'groupBy') {\n                            pregroupOfGroupBys = [...pregroupOfGroupBys, ...currentGroup];\n                        } else {\n                            this._createGroupOfFilters(currentGroup);\n                        }\n                    }\n                    currentTag = preFilter.tag;\n                    currentGroup = [];\n                    this.state.nextGroupNumber++;\n                }\n                if (preFilter.tag !== 'separator') {\n                    const filter = {\n                        type: preFilter.tag,\n                        // we need to codify here what we want to keep from attrs\n                        // and how, for now I put everything.\n                        // In some sence, some filter are active (totally determined, given)\n                        // and others are passive (require input(s) to become determined)\n                        // What is the right place to process the attrs?\n                    };\n                    if (preFilter.attrs && JSON.parse(preFilter.attrs.modifiers || '{}').invisible) {\n                        filter.invisible = true;\n                        let preFilterFieldName = null;\n                        if (preFilter.tag === 'filter' && preFilter.attrs.date) {\n                            preFilterFieldName = preFilter.attrs.date;\n                        } else if (preFilter.tag === 'groupBy') {\n                            preFilterFieldName = preFilter.attrs.fieldName;\n                        }\n                        if (preFilterFieldName && !this.fields[preFilterFieldName]) {\n                            // In some case when a field is limited to specific groups\n                            // on the model, we need to ensure to discard related filter\n                            // as it may still be present in the view (in 'invisible' state)\n                            return;\n                        }\n                    }\n                    if (filter.type === 'filter' || filter.type === 'groupBy') {\n                        filter.groupNumber = this.state.nextGroupNumber;\n                    }\n                    this._extractAttributes(filter, preFilter.attrs);\n                    currentGroup.push(filter);\n                }\n            });\n\n            if (pregroupOfGroupBys.length) {\n                this._createGroupOfFilters(pregroupOfGroupBys);\n            }\n            const dateFilters = Object.values(this.state.filters).filter(\n                (filter) => filter.isDateFilter\n            );\n            if (dateFilters.length) {\n                this._createGroupOfComparisons(dateFilters);\n            }\n        }\n\n        /**\n         * Returns null or a copy of the provided filter with additional information\n         * used only outside of the control panel model, like in search bar or in the\n         * various menus. The value null is returned if the filter should not appear\n         * for some reason.\n         * @private\n         * @param {Object} filter\n         * @param {Object[]} filterQueryElements\n         * @returns {Object | null}\n         */\n        _enrichFilterCopy(filter, filterQueryElements) {\n            const isActive = Boolean(filterQueryElements.length);\n            const f = Object.assign({ isActive }, filter);\n\n            function _enrichOptions(options) {\n                return options.map(o => {\n                    const { description, id, groupNumber } = o;\n                    const isActive = filterQueryElements.some(a => a.optionId === id);\n                    return { description, id, groupNumber, isActive };\n                });\n            }\n\n            switch (f.type) {\n                case 'comparison': {\n                    const { dateFilterId } = filter;\n                    const dateFilterIsActive = this.state.query.some(\n                        queryElem => queryElem.filterId === dateFilterId\n                    );\n                    if (!dateFilterIsActive) {\n                        return null;\n                    }\n                    break;\n                }\n                case 'filter':\n                    if (f.hasOptions) {\n                        f.options = _enrichOptions(this.optionGenerators);\n                    }\n                    break;\n                case 'groupBy':\n                    if (f.hasOptions) {\n                        f.options = _enrichOptions(this.intervalOptions);\n                    }\n                    break;\n                case 'field':\n                    f.autoCompleteValues = filterQueryElements.map(\n                        ({ label, value, operator }) => ({ label, value, operator })\n                    );\n                    break;\n            }\n            return f;\n        }\n\n        /**\n         * Process a given arch node and enrich it.\n         * @private\n         * @param {Object} child\n         * @returns {Object}\n         */\n        _evalArchChild(child) {\n            if (child.attrs.context) {\n                try {\n                    const context = pyUtils.eval('context', child.attrs.context);\n                    child.attrs.context = context;\n                    if (context.group_by) {\n                        // let us extract basic data since we just evaluated context\n                        // and use a correct tag!\n                        child.attrs.fieldName = context.group_by.split(':')[0];\n                        child.attrs.defaultInterval = context.group_by.split(':')[1];\n                        child.tag = 'groupBy';\n                    }\n                } catch (e) { }\n            }\n            if (child.attrs.name in this.searchDefaults) {\n                child.attrs.isDefault = true;\n                let value = this.searchDefaults[child.attrs.name];\n                if (child.tag === 'field') {\n                    child.attrs.defaultValue = this.fields[child.attrs.name].type === 'many2one' && Array.isArray(value) ? value[0] : value;\n                } else if (child.tag === 'groupBy') {\n                    child.attrs.defaultRank = typeof value === 'number' ? value : 100;\n                }\n            }\n            return child;\n        }\n\n        /**\n         * Process the attributes set on an arch node and adds various keys to\n         * the given filter.\n         * @private\n         * @param {Object} filter\n         * @param {Object} attrs\n         */\n        _extractAttributes(filter, attrs) {\n            if (attrs.isDefault) {\n                filter.isDefault = attrs.isDefault;\n            }\n            filter.description = attrs.string || attrs.help || attrs.name || attrs.domain || '\u03a9';\n            switch (filter.type) {\n                case 'filter':\n                    if (attrs.context) {\n                        filter.context = attrs.context;\n                    }\n                    if (attrs.date) {\n                        filter.isDateFilter = true;\n                        filter.hasOptions = true;\n                        filter.fieldName = attrs.date;\n                        filter.fieldType = this.fields[attrs.date].type;\n                        filter.defaultOptionId = attrs.default_period || DEFAULT_PERIOD;\n                    } else {\n                        filter.domain = attrs.domain || '[]';\n                    }\n                    if (filter.isDefault) {\n                        filter.defaultRank = -5;\n                    }\n                    break;\n                case 'groupBy':\n                    filter.fieldName = attrs.fieldName;\n                    filter.fieldType = this.fields[attrs.fieldName].type;\n                    if (['date', 'datetime'].includes(filter.fieldType)) {\n                        filter.hasOptions = true;\n                        filter.defaultOptionId = attrs.defaultInterval || DEFAULT_INTERVAL;\n                    }\n                    if (filter.isDefault) {\n                        filter.defaultRank = attrs.defaultRank;\n                    }\n                    break;\n                case 'field': {\n                    const field = this.fields[attrs.name];\n                    filter.fieldName = attrs.name;\n                    filter.fieldType = field.type;\n                    if (attrs.domain) {\n                        filter.domain = attrs.domain;\n                    }\n                    if (attrs.filter_domain) {\n                        filter.filterDomain = attrs.filter_domain;\n                    } else if (attrs.operator) {\n                        filter.operator = attrs.operator;\n                    }\n                    if (attrs.context) {\n                        filter.context = attrs.context;\n                    }\n                    if (filter.isDefault) {\n                        let operator = filter.operator;\n                        if (!operator) {\n                            const type = attrs.widget || filter.fieldType;\n                            // Note: many2one as a default filter will have a\n                            // numeric value instead of a string => we want \"=\"\n                            // instead of \"ilike\".\n                            if ([\"char\", \"html\", \"many2many\", \"one2many\", \"text\"].includes(type)) {\n                                operator = \"ilike\";\n                            } else {\n                                operator = \"=\";\n                            }\n                        }\n                        filter.defaultRank = -10;\n                        filter.defaultAutocompleteValue = {\n                            operator,\n                            value: attrs.defaultValue,\n                        };\n                    }\n                    break;\n                }\n            }\n            if (filter.fieldName && !attrs.string) {\n                const { string } = this.fields[filter.fieldName];\n                filter.description = string;\n            }\n        }\n\n        /**\n         * Returns an object irFilter serving to create an ir_filte in db\n         * starting from a filter of type 'favorite'.\n         * @private\n         * @param {Object} favorite\n         * @returns {Object}\n         */\n        _favoriteToIrFilter(favorite) {\n            const irFilter = {\n                action_id: this.config.actionId,\n                model_id: this.config.modelName,\n            };\n\n            // ir.filter fields\n            if ('description' in favorite) {\n                irFilter.name = favorite.description;\n            }\n            if ('domain' in favorite) {\n                irFilter.domain = favorite.domain;\n            }\n            if ('isDefault' in favorite) {\n                irFilter.is_default = favorite.isDefault;\n            }\n            if ('orderedBy' in favorite) {\n                const sort = favorite.orderedBy.map(\n                    ob => ob.name + (ob.asc === false ? \" desc\" : \"\")\n                );\n                irFilter.sort = JSON.stringify(sort);\n            }\n            if ('serverSideId' in favorite) {\n                irFilter.id = favorite.serverSideId;\n            }\n            if ('userId' in favorite) {\n                irFilter.user_id = favorite.userId;\n            }\n\n            // Context\n            const context = Object.assign({}, favorite.context);\n            if ('groupBys' in favorite) {\n                context.group_by = favorite.groupBys;\n            }\n            if ('comparison' in favorite) {\n                context.comparison = favorite.comparison;\n            }\n            if (Object.keys(context).length) {\n                irFilter.context = context;\n            }\n\n            return irFilter;\n        }\n\n        /**\n         * Return the domain resulting from the combination of the auto-completion\n         * values of a filter of type 'field'.\n         * @private\n         * @param {Object} filter\n         * @param {Object[]} filterQueryElements\n         * @returns {string}\n         */\n        _getAutoCompletionFilterDomain(filter, filterQueryElements) {\n            const domains = filterQueryElements.map(({ label, value, operator }) => {\n                let domain;\n                if (filter.filterDomain) {\n                    domain = Domain.prototype.stringToArray(\n                        filter.filterDomain,\n                        {\n                            self: label,\n                            raw_value: value,\n                        }\n                    );\n                } else {\n                    // Create new domain\n                    domain = [[filter.fieldName, operator, value]];\n                }\n                return Domain.prototype.arrayToString(domain);\n            });\n            return pyUtils.assembleDomains(domains, 'OR');\n        }\n\n        /**\n         * Construct a single context from the contexts of\n         * filters of type 'filter', 'favorite', and 'field'.\n         * @private\n         * @returns {Object}\n         */\n        _getContext(groups) {\n            const types = ['filter', 'favorite', 'field'];\n            const contexts = groups.reduce(\n                (contexts, group) => {\n                    if (types.includes(group.type)) {\n                        contexts.push(...this._getGroupContexts(group));\n                    }\n                    return contexts;\n                },\n                []\n            );\n            const evaluationContext = this.env.session.user_context;\n            try {\n                return pyUtils.eval('contexts', contexts, evaluationContext);\n            } catch (err) {\n                throw new Error(\n                    this.env._t(\"Failed to evaluate search context\") + \":\\n\" +\n                    JSON.stringify(err)\n                );\n            }\n        }\n\n        /**\n         * Compute the string representation or the description of the current domain associated\n         * with a date filter starting from its corresponding query elements.\n         * @private\n         * @param {Object} filter\n         * @param {Object[]} filterQueryElements\n         * @param {'domain'|'description'} [key='domain']\n         * @returns {string}\n         */\n        _getDateFilterDomain(filter, filterQueryElements, key = 'domain') {\n            const { fieldName, fieldType } = filter;\n            const selectedOptionIds = filterQueryElements.map(queryElem => queryElem.optionId);\n            const dateFilterRange = constructDateDomain(\n                this.referenceMoment, fieldName, fieldType, selectedOptionIds,\n            );\n            return dateFilterRange[key];\n        }\n\n        /**\n         * Return the string or array representation of a domain created by combining\n         * appropriately (with an 'AND') the domains coming from the active groups\n         * of type 'filter', 'favorite', and 'field'.\n         * @private\n         * @param {Object[]} groups\n         * @returns {string}\n         */\n        _getDomain(groups) {\n            const types = ['filter', 'favorite', 'field'];\n            const domains = [];\n            for (const group of groups) {\n                if (types.includes(group.type)) {\n                    domains.push(this._getGroupDomain(group));\n                }\n            }\n            return pyUtils.assembleDomains(domains, 'AND');\n        }\n\n        /**\n         * Get the filter description to use in the search bar as a facet.\n         * @private\n         * @param {Object} activity\n         * @param {Object} activity.filter\n         * @param {Object[]} activity.filterQueryElements\n         * @returns {string}\n         */\n        _getFacetDescriptions(activities, type) {\n            const facetDescriptions = [];\n            if (type === 'field') {\n                for (const queryElem of activities[0].filterQueryElements) {\n                    facetDescriptions.push(queryElem.label);\n                }\n            } else if (type === 'groupBy') {\n                for (const { filter, filterQueryElements } of activities) {\n                    if (filter.hasOptions) {\n                        for (const queryElem of filterQueryElements) {\n                            const option = this.intervalOptions.find(\n                                o => o.id === queryElem.optionId\n                            );\n                            facetDescriptions.push(filter.description + ': ' + option.description);\n                        }\n                    } else {\n                        facetDescriptions.push(filter.description);\n                    }\n                }\n            } else {\n                let facetDescription;\n                for (const { filter, filterQueryElements } of activities) {\n                    // filter, favorite and comparison\n                    facetDescription = filter.description;\n                    if (filter.isDateFilter) {\n                        const description = this._getDateFilterDomain(\n                            filter, filterQueryElements, 'description'\n                        );\n                        facetDescription += `: ${description}`;\n                    }\n                    facetDescriptions.push(facetDescription);\n                }\n            }\n            return facetDescriptions;\n        }\n\n        /**\n         * @returns {Object[]}\n         */\n        _getFacets() {\n            const facets = this._getGroups().map(({ activities, type, id }) => {\n                const values = this._getFacetDescriptions(activities, type);\n                const title = activities[0].filter.description;\n                return { groupId: id, title, type, values };\n            });\n            return facets;\n        }\n\n        /**\n         * Return an array containing enriched copies of the filters of the provided type.\n         * @param {Function} predicate\n         * @returns {Object[]}\n         */\n        _getFilters(predicate) {\n            const filters = [];\n            Object.values(this.state.filters).forEach(filter => {\n                if ((!predicate || predicate(filter)) && !filter.invisible) {\n                    const filterQueryElements = this.state.query.filter(\n                        queryElem => queryElem.filterId === filter.id\n                    );\n                    const enrichedFilter = this._enrichFilterCopy(filter, filterQueryElements);\n                    if (enrichedFilter) {\n                        filters.push(enrichedFilter);\n                    }\n                }\n            });\n            if (filters.some(f => f.type === 'favorite')) {\n                filters.sort((f1, f2) => f1.groupNumber - f2.groupNumber);\n            }\n            return filters;\n        }\n\n        /**\n        * Return the context of the provided (active) filter.\n        * @private\n        * @param {Object} filter\n        * @param {Object[]} filterQueryElements\n        * @returns {Object}\n        */\n        _getFilterContext(filter, filterQueryElements) {\n            let context = filter.context || {};\n            // for <field> nodes, a dynamic context (like context=\"{'field1': self}\")\n            // should set {'field1': [value1, value2]} in the context\n            if (filter.type === 'field' && filter.context) {\n                context = pyUtils.eval('context',\n                    filter.context,\n                    { self: filterQueryElements.map(({ value }) => value) },\n                );\n            }\n            // the following code aims to remodel this:\n            // https://github.com/odoo/odoo/blob/12.0/addons/web/static/src/js/views/search/search_inputs.js#L498\n            // this is required for the helpdesk tour to pass\n            // this seems weird to only do that for m2o fields, but a test fails if\n            // we do it for other fields (my guess being that the test should simply\n            // be adapted)\n            if (filter.type === 'field' && filter.isDefault && filter.fieldType === 'many2one') {\n                context[`default_${filter.fieldName}`] = filter.defaultAutocompleteValue.value;\n            }\n            return context;\n        }\n\n        /**\n         * Return the domain of the provided filter.\n         * @private\n         * @param {Object} filter\n         * @param {Object[]} filterQueryElements\n         * @returns {string} domain, string representation of a domain\n         */\n        _getFilterDomain(filter, filterQueryElements) {\n            if (filter.type === 'filter' && filter.hasOptions) {\n                const { dateFilterId } = this.activeComparison || {};\n                if (this.searchMenuTypes.includes('comparison') && dateFilterId === filter.id) {\n                    return \"[]\";\n                }\n                return this._getDateFilterDomain(filter, filterQueryElements);\n            } else if (filter.type === 'field') {\n                return this._getAutoCompletionFilterDomain(filter, filterQueryElements);\n            }\n            return filter.domain;\n        }\n\n        /**\n         * Return the groupBys of the provided filter.\n         * @private\n         * @param {Object} filter\n         * @param {Object[]} filterQueryElements\n         * @returns {string[]} groupBys\n         */\n        _getFilterGroupBys(filter, filterQueryElements) {\n            if (filter.type === 'groupBy') {\n                const fieldName = filter.fieldName;\n                if (filter.hasOptions) {\n                    return filterQueryElements.map(\n                        ({ optionId }) => `${fieldName}:${optionId}`\n                    );\n                } else {\n                    return [fieldName];\n                }\n            } else {\n                return filter.groupBys;\n            }\n        }\n\n        /**\n         * Return the concatenation of groupBys comming from the active filters of\n         * type 'favorite' and 'groupBy'.\n         * The result respects the appropriate logic: the groupBys\n         * coming from an active favorite (if any) come first, then come the\n         * groupBys comming from the active filters of type 'groupBy' in the order\n         * defined in this.state.query. If no groupBys are found, one tries to\n         * find some grouBys in the action context.\n         * @private\n         * @param {Object[]} groups\n         * @returns {string[]}\n         */\n        _getGroupBy(groups) {\n            const groupBys = groups.reduce(\n                (groupBys, group) => {\n                    if (['groupBy', 'favorite'].includes(group.type)) {\n                        groupBys.push(...this._getGroupGroupBys(group));\n                    }\n                    return groupBys;\n                },\n                []\n            );\n            const groupBy = groupBys.length ? groupBys : (this.actionContext.group_by || []);\n            return typeof groupBy === 'string' ? [groupBy] : groupBy;\n        }\n\n        /**\n         * Return the list of the contexts of the filters active in the given\n         * group.\n         * @private\n         * @param {Object} group\n         * @returns {Object[]}\n         */\n        _getGroupContexts(group) {\n            const contexts = group.activities.reduce(\n                (ctx, qe) => [...ctx, this._getFilterContext(qe.filter, qe.filterQueryElements)],\n                []\n            );\n            return contexts;\n        }\n\n        /**\n         * Return the string representation of a domain created by combining\n         * appropriately (with an 'OR') the domains coming from the filters\n         * active in the given group.\n         * @private\n         * @param {Object} group\n         * @returns {string} string representation of a domain\n         */\n        _getGroupDomain(group) {\n            const domains = group.activities.map(({ filter, filterQueryElements }) => {\n                return this._getFilterDomain(filter, filterQueryElements);\n            });\n            return pyUtils.assembleDomains(domains, 'OR');\n        }\n\n        /**\n         * Return the groupBys coming form the filters active in the given group.\n         * @private\n         * @param {Object} group\n         * @returns {string[]}\n         */\n        _getGroupGroupBys(group) {\n            const groupBys = group.activities.reduce(\n                (gb, qe) => [...gb, ...this._getFilterGroupBys(qe.filter, qe.filterQueryElements)],\n                []\n            );\n            return groupBys;\n        }\n\n        /**\n         * Reconstruct the (active) groups from the query elements.\n         * @private\n         * @returns {Object[]}\n         */\n        _getGroups() {\n            const groups = this.state.query.reduce(\n                (groups, queryElem) => {\n                    const { groupId, filterId } = queryElem;\n                    let group = groups.find(group => group.id === groupId);\n                    const filter = this.state.filters[filterId];\n                    if (!group) {\n                        const { type } = filter;\n                        group = {\n                            id: groupId,\n                            type,\n                            activities: []\n                        };\n                        groups.push(group);\n                    }\n                    group.activities.push(queryElem);\n                    return groups;\n                },\n                []\n            );\n            groups.forEach(g => this._mergeActivities(g));\n            return groups;\n        }\n\n        /**\n         * Used to get the key orderedBy of the active favorite.\n         * @private\n         * @param {Object[]} groups\n         * @returns {string[]} orderedBy\n         */\n        _getOrderedBy(groups) {\n            return groups.reduce(\n                (orderedBy, group) => {\n                    if (group.type === 'favorite') {\n                        const favoriteOrderedBy = group.activities[0].filter.orderedBy;\n                        if (favoriteOrderedBy) {\n                            // Group order is reversed but inner order is kept\n                            orderedBy = [...favoriteOrderedBy, ...orderedBy];\n                        }\n                    }\n                    return orderedBy;\n                },\n                []\n            );\n        }\n\n        /**\n         * Starting from the id of a date filter, returns the array of option ids currently selected\n         * for the corresponding filter.\n         * @private\n         * @param {string} dateFilterId\n         * @returns {string[]}\n         */\n        _getSelectedOptionIds(dateFilterId) {\n            const selectedOptionIds = [];\n            for (const queryElem of this.state.query) {\n                if (queryElem.filterId === dateFilterId) {\n                    selectedOptionIds.push(queryElem.optionId);\n                }\n            }\n            return selectedOptionIds;\n        }\n\n        /**\n         * Returns the last timeRanges object found in the query.\n         * TimeRanges objects can be associated with filters of type 'favorite'\n         * or 'comparison'.\n         * @private\n         * @param {boolean} [evaluation=false]\n         * @returns {Object | null}\n         */\n        _getTimeRanges(evaluation) {\n            let timeRanges;\n            for (const queryElem of this.state.query.slice().reverse()) {\n                const filter = this.state.filters[queryElem.filterId];\n                if (filter.type === 'comparison') {\n                    timeRanges = this._computeTimeRanges(filter);\n                    break;\n                } else if (filter.type === 'favorite' && filter.comparison) {\n                    timeRanges = filter.comparison;\n                    break;\n                }\n            }\n            if (timeRanges) {\n                if (evaluation) {\n                    timeRanges.range = Domain.prototype.stringToArray(timeRanges.range);\n                    timeRanges.comparisonRange = Domain.prototype.stringToArray(timeRanges.comparisonRange);\n                }\n                return timeRanges;\n            }\n            return null;\n        }\n\n        /**\n         * Returns a filter of type 'favorite' starting from an ir_filter comming from db.\n         * @private\n         * @param {Object} irFilter\n         * @returns {Object}\n         */\n        _irFilterToFavorite(irFilter) {\n            let userId = irFilter.user_id || false;\n            if (Array.isArray(userId)) {\n                userId = userId[0];\n            }\n            const groupNumber = userId ? FAVORITE_PRIVATE_GROUP : FAVORITE_SHARED_GROUP;\n            const context = pyUtils.eval('context', irFilter.context, this.env.session.user_context);\n            let groupBys = [];\n            if (context.group_by) {\n                groupBys = context.group_by;\n                delete context.group_by;\n            }\n            let comparison;\n            if (context.comparison) {\n                comparison = context.comparison;\n                delete context.comparison;\n            }\n            let sort;\n            try {\n                sort = JSON.parse(irFilter.sort);\n            } catch (err) {\n                if (err instanceof SyntaxError) {\n                    sort = [];\n                } else {\n                    throw err;\n                }\n            }\n            const orderedBy = sort.map(order => {\n                let fieldName;\n                let asc;\n                const sqlNotation = order.split(' ');\n                if (sqlNotation.length > 1) {\n                    // regex: \\fieldName (asc|desc)?\\\n                    fieldName = sqlNotation[0];\n                    asc = sqlNotation[1] === 'asc';\n                } else {\n                    // legacy notation -- regex: \\-?fieldName\\\n                    fieldName = order[0] === '-' ? order.slice(1) : order;\n                    asc = order[0] === '-' ? false : true;\n                }\n                return {\n                    asc: asc,\n                    name: fieldName,\n                };\n            });\n            const favorite = {\n                context,\n                description: irFilter.name,\n                domain: irFilter.domain,\n                groupBys,\n                groupNumber,\n                orderedBy,\n                removable: true,\n                serverSideId: irFilter.id,\n                type: 'favorite',\n                userId,\n            };\n            if (irFilter.is_default) {\n                favorite.isDefault = irFilter.is_default;\n            }\n            if (comparison) {\n                favorite.comparison = comparison;\n            }\n            return favorite;\n        }\n\n        /**\n         * Group the query elements in group.activities by qe -> qe.filterId\n         * and changes the form of group.activities to make it more suitable for further\n         * computations.\n         * @private\n         * @param {Object} group\n         */\n        _mergeActivities(group) {\n            const { activities, type } = group;\n            let res = [];\n            switch (type) {\n                case 'filter':\n                case 'groupBy': {\n                    for (const activity of activities) {\n                        const { filterId } = activity;\n                        let a = res.find(({ filter }) => filter.id === filterId);\n                        if (!a) {\n                            a = {\n                                filter: this.state.filters[filterId],\n                                filterQueryElements: []\n                            };\n                            res.push(a);\n                        }\n                        a.filterQueryElements.push(activity);\n                    }\n                    break;\n                }\n                case 'favorite':\n                case 'field':\n                case 'comparison': {\n                    // all activities in the group have same filterId\n                    const { filterId } = group.activities[0];\n                    const filter = this.state.filters[filterId];\n                    res.push({\n                        filter,\n                        filterQueryElements: group.activities\n                    });\n                    break;\n                }\n            }\n            if (type === 'groupBy') {\n                res.forEach(activity => {\n                    activity.filterQueryElements.sort(\n                        (qe1, qe2) => rankInterval(qe1.optionId) - rankInterval(qe2.optionId)\n                    );\n                });\n            }\n            group.activities = res;\n        }\n\n        /**\n         * Set the key label in defaultAutocompleteValue used by default filters of\n         * type 'field'.\n         * @private\n         * @param {Object} filter\n         */\n        _prepareDefaultLabel(filter) {\n            const { id, fieldType, fieldName, defaultAutocompleteValue } = filter;\n            const { selection, context, relation } = this.fields[fieldName];\n            if (fieldType === 'selection') {\n                defaultAutocompleteValue.label = selection.find(\n                    sel => sel[0] === defaultAutocompleteValue.value\n                )[1];\n            } else if (fieldType === 'many2one') {\n                const updateLabel = label => {\n                    const queryElem = this.state.query.find(({ filterId }) => filterId === id);\n                    if (queryElem) {\n                        queryElem.label = label;\n                        defaultAutocompleteValue.label = label;\n                    }\n                };\n                const promise = this.env.services.rpc({\n                    args: [defaultAutocompleteValue.value],\n                    context: context,\n                    method: 'name_get',\n                    model: relation,\n                })\n                    .then(results => updateLabel(results[0][1]))\n                    .guardedCatch(() => updateLabel(defaultAutocompleteValue.value));\n                this.labelPromises.push(promise);\n            } else {\n                defaultAutocompleteValue.label = defaultAutocompleteValue.value;\n            }\n        }\n\n        /**\n         * Compute the search Query and save it as an ir_filter in db.\n         * No evaluation of domains is done in order to keep them dynamic.\n         * If the operation is successful, a new filter of type 'favorite' is\n         * created and activated.\n         * @private\n         * @param {Object} preFilter\n         * @returns {Promise<Object>}\n         */\n        async _saveQuery(preFilter) {\n            const irFilter = this.getIrFilterValues(preFilter);\n            const serverSideId = await this.env.dataManager.create_filter(irFilter);\n\n            preFilter.serverSideId = serverSideId;\n\n            return preFilter;\n        }\n\n        //---------------------------------------------------------------------\n        // Static\n        //---------------------------------------------------------------------\n\n        /**\n         * @override\n         * @returns {{ attrs: Object, children: Object[] }}\n         */\n        static extractArchInfo(archs) {\n            const { attrs, children } = archs.search;\n            const controlPanelInfo = {\n                attrs,\n                children: [],\n            };\n            for (const child of children) {\n                if (child.tag !== \"searchpanel\") {\n                    controlPanelInfo.children.push(child);\n                }\n            }\n            return controlPanelInfo;\n        }\n    }\n\n    ActionModel.registry.add(\"ControlPanel\", ControlPanelModelExtension, 10);\n\n    return ControlPanelModelExtension;\n});\n", "odoo.define('web.ControlPanelX2Many', function (require) {\n\n    const ControlPanel = require('web.ControlPanel');\n\n    /**\n     * Control panel (adaptation for x2many fields)\n     *\n     * Smaller version of the control panel with an abridged template (buttons and\n     * pager only). We still extend the main version for the injection of `cp_content`\n     * keys.\n     * The pager of this control panel is only displayed if the amount of records\n     * cannot be displayed in a single page.\n     * @extends ControlPanel\n     */\n    class ControlPanelX2Many extends ControlPanel {\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _shouldShowPager() {\n            if (!this.props.pager || !this.props.pager.limit) {\n                return false;\n            }\n            const { currentMinimum, limit, size } = this.props.pager;\n            const maximum = Math.min(currentMinimum + limit - 1, size);\n            const singlePage = (1 === currentMinimum) && (maximum === size);\n            return !singlePage;\n        }\n    }\n\n    ControlPanelX2Many.defaultProps = {};\n    ControlPanelX2Many.props = {\n        cp_content: { type: Object, optional: 1 },\n        pager: Object,\n    };\n    ControlPanelX2Many.template = 'web.Legacy.ControlPanelX2Many';\n\n    return ControlPanelX2Many;\n});\n", "odoo.define('web.CustomFavoriteItem', function (require) {\n    \"use strict\";\n\n    const FavoriteMenu = require('web.FavoriteMenu');\n    const { useAutofocus } = require('web.custom_hooks');\n    const { useModel } = require('web.Model');\n\n    const { Component, hooks, useState } = owl;\n    const { useRef } = hooks;\n\n    let favoriteId = 0;\n\n    /**\n     * Favorite generator menu\n     *\n     * This component is used to add a new favorite linked which will take every\n     * information out of the current context and save it to a new `ir.filter`.\n     *\n     * There are 3 additional inputs to modify the filter:\n     * - a text input (mandatory): the name of the favorite (must be unique)\n     * - 'use by default' checkbox: if checked, the favorite will be the default\n     *                              filter of the current model (and will bypass\n     *                              any existing default filter). Cannot be checked\n     *                              along with 'share with all users' checkbox.\n     * - 'share with all users' checkbox: if checked, the favorite will be available\n     *                                    with all users instead of the current\n     *                                    one.Cannot be checked along with 'use\n     *                                    by default' checkbox.\n     * Finally, there is a 'Save' button used to apply the current configuration\n     * and save the context to a new filter.\n     */\n    class CustomFavoriteItem extends Component {\n        constructor() {\n            super(...arguments);\n\n            const favId = favoriteId++;\n            this.useByDefaultId = `o_favorite_use_by_default_${favId}`;\n            this.shareAllUsersId = `o_favorite_share_all_users_${favId}`;\n\n            this.descriptionRef = useRef('description');\n            this.model = useModel('searchModel');\n            this.interactive = true;\n            this.state = useState({\n                description: this.env.action.name || \"\",\n                isDefault: false,\n                isShared: false,\n            });\n\n            useAutofocus();\n        }\n\n        //---------------------------------------------------------------------\n        // Private\n        //---------------------------------------------------------------------\n\n        /**\n         * @private\n         */\n        saveFavorite() {\n            if (!this.state.description.length) {\n                this.env.services.notification.notify({\n                    message: this.env._t(\"A name for your favorite filter is required.\"),\n                    type: 'danger',\n                });\n                return this.descriptionRef.el.focus();\n            }\n            const favorites = this.model.get('filters', f => f.type === 'favorite');\n            if (favorites.some(f => f.description === this.state.description)) {\n                this.env.services.notification.notify({\n                    message: this.env._t(\"Filter with same name already exists.\"),\n                    type: 'danger',\n                });\n                return this.descriptionRef.el.focus();\n            }\n            this.model.dispatch('createNewFavorite', {\n                type: 'favorite',\n                description: this.state.description,\n                isDefault: this.state.isDefault,\n                isShared: this.state.isShared,\n            });\n            // Reset state\n            Object.assign(this.state, {\n                description: this.env.action.name || \"\",\n                isDefault: false,\n                isShared: false,\n                open: false,\n            });\n        }\n\n        //---------------------------------------------------------------------\n        // Handlers\n        //---------------------------------------------------------------------\n\n        /**\n         * @private\n         * @param {Event} ev change Event\n         */\n        onDefaultCheckboxChange(ev) {\n            const { checked } = ev.target;\n            this.state.isDefault = checked;\n            if (checked) {\n                this.state.isShared = false;\n            }\n        }\n\n        /**\n         * @private\n         * @param {Event} ev change Event\n         */\n        onShareCheckboxChange(ev) {\n            const { checked } = ev.target;\n            this.state.isShared = checked;\n            if (checked) {\n                this.state.isDefault = false;\n            }\n        }\n\n        /**\n         * @private\n         * @param {jQueryEvent} ev\n         */\n        onInputKeydown(ev) {\n            switch (ev.key) {\n                case 'Enter':\n                    ev.preventDefault();\n                    this.saveFavorite();\n                    break;\n                case 'Escape':\n                    // Gives the focus back to the component.\n                    ev.preventDefault();\n                    ev.target.blur();\n                    break;\n            }\n        }\n\n        //---------------------------------------------------------------------\n        // Static\n        //---------------------------------------------------------------------\n\n        /**\n         * @param {Object} env\n         * @returns {boolean}\n         */\n        static shouldBeDisplayed(env) {\n            return true;\n        }\n    }\n\n    CustomFavoriteItem.props = {};\n    CustomFavoriteItem.template = \"web.CustomFavoriteItem\";\n    CustomFavoriteItem.groupNumber = 3; // have 'Save Current Search' in its own group\n\n    FavoriteMenu.registry.add('favorite-generator-menu', CustomFavoriteItem, 0);\n\n    return CustomFavoriteItem;\n});\n", "odoo.define('web.CustomFilterItem', function (require) {\n    \"use strict\";\n\n    const { DatePicker, DateTimePicker } = require('web.DatePickerOwl');\n    const Domain = require('web.Domain');\n    const { FIELD_OPERATORS, FIELD_TYPES } = require('web.searchUtils');\n    const field_utils = require('web.field_utils');\n    const { useModel } = require('web.Model');\n\n    const { Component, hooks } = owl;\n    const { useState } = hooks;\n\n    /**\n     * Filter generator menu\n     *\n     * Component which purpose is to generate new filters from a set of inputs.\n     * It is made of one or several `condition` objects that will be used to generate\n     * filters which will be added in the filter menu. Each condition is composed\n     * of 2, 3 or 4 inputs:\n     *\n     * 1. FIELD (select): the field used to form the base of the domain condition;\n     *\n     * 2. OPERATOR (select): the symbol determining the operator(s) of the domain\n     *                       condition, linking the field to one or several value(s).\n     *                       Some operators can have pre-defined values that will replace user inputs.\n     *                       @see searchUtils for the list of operators.\n     *\n     * 3. [VALUE] (input|select): the value of the domain condition. it will be parsed\n     *                            according to the selected field's type. Note that\n     *                            it is optional as some operators have defined values.\n     *                            The generated condition domain will be as following:\n     *                            [\n     *                                [field, operator, (operator_value|input_value)]\n     *                            ]\n     *\n     * 4. [VALUE] (input): for now, only date-typed fields with the 'between' operator\n     *                     allow for a second value. The given input values will then\n     *                     be taken as the borders of the date range (between x and y)\n     *                     and will be translated as the following domain form:\n     *                     [\n     *                         [date_field, '>=', x],\n     *                         [date_field, '<=', y],\n     *                     ]\n     */\n    class CustomFilterItem extends Component {\n        constructor() {\n            super(...arguments);\n\n            this.model = useModel('searchModel');\n\n            this.conditions = useState([]);\n            // Format, filter and sort the fields props\n            this.fields = Object.values(this.props.fields)\n                .filter(field => this._validateField(field))\n                .concat({ string: 'ID', type: 'id', name: 'id' })\n                .sort(({ string: a }, { string: b }) => a > b ? 1 : a < b ? -1 : 0);\n\n            // Give access to constants variables to the template.\n            this.DECIMAL_POINT = this.env._t.database.parameters.decimal_point;\n            this.OPERATORS = FIELD_OPERATORS;\n            this.FIELD_TYPES = FIELD_TYPES;\n\n            // Add first condition\n            this.addNewCondition();\n        }\n\n        //---------------------------------------------------------------------\n        // Private\n        //---------------------------------------------------------------------\n\n        /**\n         * Populate the conditions list with a new condition having as properties:\n         * - the last condition or the first available field\n         * - the last condition or the first available operator\n         * - a null or empty array value\n         * @private\n         */\n        addNewCondition() {\n            const lastCondition = [...this.conditions].pop();\n            const condition = lastCondition\n                ? Object.assign({}, lastCondition)\n                : {\n                    field: 0,\n                    operator: 0,\n                };\n            this._setDefaultValue(condition);\n            this.conditions.push(condition);\n        }\n\n        /**\n         * @private\n         * @param {Object} field\n         * @returns {boolean}\n         */\n        _validateField(field) {\n            return !field.deprecated &&\n                field.searchable &&\n                FIELD_TYPES[field.type] &&\n                field.name !== 'id';\n        }\n\n        /**\n         * @private\n         * @param {Object} condition\n         */\n        _setDefaultValue(condition) {\n            const fieldType = this.fields[condition.field].type;\n            const genericType = FIELD_TYPES[fieldType];\n            const operator = FIELD_OPERATORS[genericType][condition.operator];\n            // Logical value\n            switch (genericType) {\n                case 'id':\n                case 'number':\n                    condition.value = 0;\n                    break;\n                case 'date':\n                    condition.value = [moment()];\n                    if (operator.symbol === 'between') {\n                        condition.value.push(moment());\n                    }\n                    break;\n                case 'datetime':\n                    condition.value = [moment('00:00:00', 'hh:mm:ss').utcOffset(0, true)];\n                    if (operator.symbol === 'between') {\n                        condition.value.push(moment('23:59:59', 'hh:mm:ss').utcOffset(0, true));\n                    }\n                    break;\n                case 'selection':\n                    if (this.fields[condition.field].selection.length) {\n                        const [firstValue] = this.fields[condition.field].selection[0];\n                        condition.value = firstValue;\n                    }\n                    else {\n                        condition.value = \"\";\n                    }\n                    break;\n                default:\n                    condition.value = \"\";\n            }\n            // Displayed value\n            if ([\"float\", \"monetary\"].includes(fieldType)) {\n                condition.displayedValue = `0${this.DECIMAL_POINT}0`;\n            } else {\n                condition.displayedValue = String(condition.value);\n            }\n        }\n\n        //---------------------------------------------------------------------\n        // Handlers\n        //---------------------------------------------------------------------\n\n        /**\n         * Convert all conditions to prefilters.\n         * @private\n         */\n        onApply() {\n            const preFilters = this.conditions.map(condition => {\n                const field = this.fields[condition.field];\n                const type = this.FIELD_TYPES[field.type];\n                const operator = this.OPERATORS[type][condition.operator];\n                const descriptionArray = [field.string, operator.description];\n                const domainArray = [];\n                let domainValue;\n                // Field type specifics\n                if ('value' in operator) {\n                    domainValue = [operator.value];\n                    // No description to push here\n                } else if (['date', 'datetime'].includes(type)) {\n                    domainValue = condition.value.map(\n                        val => field_utils.parse[type](val, { type }, { timezone: true })\n                    );\n                    const dateValue = condition.value.map(\n                        val => field_utils.format[type](val, { type }, { timezone: false })\n                    );\n                    descriptionArray.push(`\"${dateValue.join(\" \" + this.env._t(\"and\") + \" \")}\"`);\n                } else if (type === \"selection\") {\n                    domainValue = [condition.value];\n                    const formattedValue = field_utils.format[type](condition.value, field);\n                    descriptionArray.push(`\"${formattedValue}\"`);\n                } else {\n                    domainValue = [condition.value];\n                    descriptionArray.push(`\"${condition.value}\"`);\n                }\n                // Operator specifics\n                if (operator.symbol === 'between') {\n                    domainArray.push(\n                        [field.name, '>=', domainValue[0]],\n                        [field.name, '<=', domainValue[1]]\n                    );\n                } else {\n                    domainArray.push([field.name, operator.symbol, domainValue[0]]);\n                }\n                const preFilter = {\n                    description: descriptionArray.join(\" \"),\n                    domain: Domain.prototype.arrayToString(domainArray),\n                    type: 'filter',\n                };\n                return preFilter;\n            });\n\n            this.model.dispatch('createNewFilters', preFilters);\n\n            // remove conditions\n            this.conditions.splice(0, this.conditions.length);\n\n            this.addNewCondition();\n        }\n\n        /**\n         * @private\n         * @param {Object} condition\n         * @param {number} valueIndex\n         * @param {OwlEvent} ev\n         */\n        onDateChanged(condition, valueIndex, ev) {\n            condition.value[valueIndex] = ev.detail.date;\n        }\n\n        /**\n         * @private\n         * @param {Object} condition\n         * @param {Event} ev\n         */\n        onFieldSelect(condition, ev) {\n            Object.assign(condition, {\n                field: ev.target.selectedIndex,\n                operator: 0,\n            });\n            this._setDefaultValue(condition);\n        }\n\n        /**\n         * @private\n         * @param {Object} condition\n         * @param {Event} ev\n         */\n        onOperatorSelect(condition, ev) {\n            condition.operator = ev.target.selectedIndex;\n            this._setDefaultValue(condition);\n        }\n\n        /**\n         * @private\n         * @param {Object} condition\n         */\n        onRemoveCondition(conditionIndex) {\n            this.conditions.splice(conditionIndex, 1);\n        }\n\n        /**\n         * @private\n         * @param {Object} condition\n         * @param {Event} ev\n         */\n        onValueChange(condition, ev) {\n            if (!ev.target.value) {\n                return this._setDefaultValue(condition);\n            }\n            let { type } = this.fields[condition.field];\n            if (type === \"id\") {\n                type = \"integer\";\n            }\n            if (FIELD_TYPES[type] === \"number\") {\n                try {\n                    // Write logical value into the 'value' property\n                    condition.value = field_utils.parse[type](ev.target.value);\n                    // Write displayed value in the input and 'displayedValue' property\n                    condition.displayedValue = ev.target.value;\n                } catch (err) {\n                    // Parsing error: reverts to previous value\n                    ev.target.value = condition.displayedValue;\n                }\n            } else {\n                condition.value = condition.displayedValue = ev.target.value;\n            }\n        }\n    }\n\n    CustomFilterItem.components = { DatePicker, DateTimePicker };\n    CustomFilterItem.props = { fields: Object };\n    CustomFilterItem.template = \"web.CustomFilterItem\";\n\n    return CustomFilterItem;\n});\n", "odoo.define('web.CustomGroupByItem', function (require) {\n    \"use strict\";\n\n    const { useModel } = require('web.Model');\n\n    const { Component, hooks } = owl;\n    const { useState } = hooks;\n\n    class CustomGroupByItem extends Component {\n        constructor() {\n            super(...arguments);\n\n            this.state = useState({\n                fieldName: this.props.fields[0].name,\n            });\n\n            this.model = useModel('searchModel');\n        }\n\n        //---------------------------------------------------------------------\n        // Handlers\n        //---------------------------------------------------------------------\n\n        /**\n         * @private\n         */\n        onApply() {\n            const field = this.props.fields.find(f => f.name === this.state.fieldName);\n            this.model.dispatch('createNewGroupBy', field);\n        }\n    }\n\n    CustomGroupByItem.template = \"web.CustomGroupByItem\";\n    CustomGroupByItem.props = {\n        fields: Array,\n    };\n\n    return CustomGroupByItem;\n});\n", "odoo.define('web.FavoriteMenu', function (require) {\n    \"use strict\";\n\n    const Dialog = require('web.OwlDialog');\n    const { FACET_ICONS } = require(\"web.searchUtils\");\n    const Registry = require('web.Registry');\n    const { useModel } = require('web.Model');\n    const { SearchDropdownItem } = require(\"@web/search/search_dropdown_item/search_dropdown_item\");\n    const { Component, useState } = owl;\n\n    /**\n     * 'Favorites' menu\n     *\n     * Simple rendering of the filters of type `favorites` given by the control panel\n     * model. It uses most of the behaviours implemented by the dropdown menu Component,\n     * with the addition of a submenu registry used to display additional components.\n     * Only the favorite generator (@see CustomFavoriteItem) is registered in\n     * the `web` module.\n     */\n    class FavoriteMenu extends Component {\n        constructor() {\n            super(...arguments);\n            this.icon = FACET_ICONS.favorite;\n            this.model = useModel('searchModel');\n            this.state = useState({ deletedFavorite: false });\n        }\n\n        //---------------------------------------------------------------------\n        // Getters\n        //---------------------------------------------------------------------\n\n        /**\n         * @override\n         */\n        get items() {\n            const favorites = this.model.get('filters', f => f.type === 'favorite');\n            const registryMenus = this.constructor.registry.values().reduce(\n                (menus, Component) => {\n                    if (Component.shouldBeDisplayed(this.env)) {\n                        menus.push({\n                            key: Component.name,\n                            groupNumber: Component.groupNumber,\n                            Component,\n                        });\n                    }\n                    return menus;\n                },\n                []\n            );\n            return [...favorites, ...registryMenus];\n        }\n\n        //---------------------------------------------------------------------\n        // Handlers\n        //---------------------------------------------------------------------\n\n        /**\n         * @private\n         * @param {int} id\n         */\n        openConfirmationDialog(id) {\n            const favorite = this.items.find(fav => fav.id === id);\n            this.state.deletedFavorite = favorite;\n        }\n\n        /**\n         * @private\n         * @param {OwlEvent} ev\n         */\n        onFavoriteSelected(ev) {\n            ev.stopPropagation();\n            this.model.dispatch('toggleFilter', ev.detail.payload.itemId);\n        }\n\n        /**\n         * @private\n         */\n        async _onRemoveFavorite() {\n            this.model.dispatch('deleteFavorite', this.state.deletedFavorite.id);\n            this.state.deletedFavorite = false;\n        }\n    }\n\n    FavoriteMenu.registry = new Registry();\n    FavoriteMenu.components = { Dialog, DropdownItem: SearchDropdownItem };\n    FavoriteMenu.template = 'web.Legacy.FavoriteMenu';\n\n    return FavoriteMenu;\n});\n", "odoo.define('web.FilterMenu', function (require) {\n    \"use strict\";\n\n    const CustomFilterItem = require('web.CustomFilterItem');\n    const { FACET_ICONS } = require(\"web.searchUtils\");\n    const { useModel } = require('web.Model');\n    const { SearchDropdownItem } = require(\"@web/search/search_dropdown_item/search_dropdown_item\");\n\n    const { Component } = owl;\n\n    /**\n     * 'Filters' menu\n     *\n     * Simple rendering of the filters of type `filter` given by the control panel\n     * model. It uses most of the behaviours implemented by the dropdown menu Component,\n     * with the addition of a filter generator (@see CustomFilterItem).\n     */\n    class FilterMenu extends Component {\n\n        constructor() {\n            super(...arguments);\n            this.icon = FACET_ICONS.filter;\n            this.model = useModel('searchModel');\n        }\n\n        //---------------------------------------------------------------------\n        // Getters\n        //---------------------------------------------------------------------\n\n        /**\n         * @override\n         */\n        get items() {\n            return this.model.get('filters', f => f.type === 'filter');\n        }\n\n        //---------------------------------------------------------------------\n        // Handlers\n        //---------------------------------------------------------------------\n\n        /**\n         * @private\n         * @param {OwlEvent} ev\n         */\n        onFilterSelected(ev) {\n            ev.stopPropagation();\n            const { itemId, optionId } = ev.detail.payload;\n            if (optionId) {\n                this.model.dispatch('toggleFilterWithOptions', itemId, optionId);\n            } else {\n                this.model.dispatch('toggleFilter', itemId);\n            }\n        }\n    }\n\n    FilterMenu.components = { CustomFilterItem, DropdownItem: SearchDropdownItem };\n    FilterMenu.props = { fields: Object };\n    FilterMenu.template = \"web.legacy.FilterMenu\";\n\n    return FilterMenu;\n});\n", "odoo.define('web.GroupByMenu', function (require) {\n    \"use strict\";\n\n    const CustomGroupByItem = require('web.CustomGroupByItem');\n    const { FACET_ICONS, GROUPABLE_TYPES } = require('web.searchUtils');\n    const { useModel } = require('web.Model');\n    const { SearchDropdownItem } = require(\"@web/search/search_dropdown_item/search_dropdown_item\");\n\n    const { Component } = owl;\n\n    class GroupByMenu extends Component {\n\n        constructor() {\n            super(...arguments);\n            this.icon = FACET_ICONS.groupBy;\n\n            this.fields = Object.values(this.props.fields)\n                .filter(field => this._validateField(field))\n                .sort(({ string: a }, { string: b }) => a > b ? 1 : a < b ? -1 : 0);\n\n            this.model = useModel('searchModel');\n        }\n\n        //---------------------------------------------------------------------\n        // Getters\n        //---------------------------------------------------------------------\n\n        /**\n         * @override\n         */\n        get items() {\n            return this.model.get('filters', f => f.type === 'groupBy');\n        }\n\n        //---------------------------------------------------------------------\n        // Private\n        //---------------------------------------------------------------------\n\n        /**\n         * @see {@link odoo/fields.py} Field._description_sortable\n         * @see {@link odoo/fields.py} Many2Many.groupable\n         * @private\n         * @param {Object} field\n         * @returns {boolean}\n         */\n        _validateField(field) {\n            return (field.type === \"many2many\" ? field.store : field.sortable) &&\n                field.name !== \"id\" &&\n                GROUPABLE_TYPES.includes(field.type);\n        }\n\n        //---------------------------------------------------------------------\n        // Handlers\n        //---------------------------------------------------------------------\n\n        /**\n         * @private\n         * @param {OwlEvent} ev\n         */\n        onGroupBySelected(ev) {\n            ev.stopPropagation();\n            const { itemId, optionId } = ev.detail.payload;\n            if (optionId) {\n                this.model.dispatch('toggleFilterWithOptions', itemId, optionId);\n            } else {\n                this.model.dispatch('toggleFilter', itemId);\n            }\n        }\n    }\n\n    GroupByMenu.components = { CustomGroupByItem, DropdownItem: SearchDropdownItem };\n    GroupByMenu.props = { fields: Object };\n    GroupByMenu.template = \"web.GroupByMenu\";\n\n    return GroupByMenu;\n});\n", "odoo.define('web.SearchBar', function (require) {\n    \"use strict\";\n\n    const Domain = require('web.Domain');\n    const field_utils = require('web.field_utils');\n    const { useAutofocus } = require('web.custom_hooks');\n    const { useModel } = require('web.Model');\n    const { fuzzyTest } = require('@web/core/utils/search');\n\n    const CHAR_FIELDS = ['char', 'html', 'many2many', 'many2one', 'one2many', 'text'];\n    const { Component, hooks } = owl;\n    const { useExternalListener, useRef, useState } = hooks;\n\n    let sourceId = 0;\n\n    /**\n     * Search bar\n     *\n     * This component has two main roles:\n     * 1) Display the current search facets\n     * 2) Create new search filters using an input and an autocompletion values\n     *    generator.\n     *\n     * For the first bit, the core logic can be found in the XML template of this\n     * component, searchfacet components or in the ControlPanelModel itself.\n     *\n     * The autocompletion mechanic works with transient subobjects called 'sources'.\n     * Sources contain the information that will be used to generate new search facets.\n     * A source is generated either:\n     * a. From an undetermined user input: the user will give a string and select\n     *    a field from the autocompletion dropdown > this will search the selected\n     *    field records with the given pattern (with an 'ilike' operator);\n     * b. From a given selection: when given an input by the user, the searchbar\n     *    will pre-fetch 'many2one' field records matching the input value and filter\n     *    'select' fields with the same value. If the user clicks on one of these\n     *    fetched/filtered values, it will generate a matching search facet targeting\n     *    records having this exact value.\n     * @extends Component\n     */\n    class SearchBar extends Component {\n        constructor() {\n            super(...arguments);\n\n            this.focusOnUpdate = useAutofocus();\n            this.inputRef = useRef('search-input');\n            this.model = useModel('searchModel');\n            this.state = useState({\n                sources: [],\n                focusedItem: 0,\n                inputValue: \"\",\n            });\n\n            this.autoCompleteSources = this.model.get('filters', f => f.type === 'field').map(\n                filter => this._createSource(filter)\n            );\n            this.noResultItem = [null, this.env._t(\"(no result)\")];\n\n            useExternalListener(window, 'click', this._onWindowClick);\n            useExternalListener(window, 'keydown', this._onWindowKeydown);\n        }\n\n        mounted() {\n            // 'search' will always patch the search bar, 'focus' will never.\n            this.env.searchModel.on('search', this, this.focusOnUpdate);\n            this.env.searchModel.on('focus-control-panel', this, () => {\n                this.inputRef.el.focus();\n            });\n        }\n\n        willUnmount() {\n            this.env.searchModel.off('search', this);\n            this.env.searchModel.off('focus-control-panel', this);\n        }\n\n        //---------------------------------------------------------------------\n        // Private\n        //---------------------------------------------------------------------\n\n        /**\n         * @private\n         */\n        _closeAutoComplete() {\n            this.state.sources = [];\n            this.state.focusedItem = 0;\n            this.state.inputValue = \"\";\n            this.inputRef.el.value = \"\";\n            this.focusOnUpdate();\n        }\n\n        /**\n         * @private\n         * @param {Object} filter\n         * @returns {Object}\n         */\n        _createSource(filter) {\n            const field = this.props.fields[filter.fieldName];\n            const type = field.type === \"reference\" ? \"char\" : field.type;\n            const source = {\n                active: true,\n                description: filter.description,\n                filterId: filter.id,\n                filterOperator: filter.operator,\n                id: sourceId ++,\n                operator: CHAR_FIELDS.includes(type) ? 'ilike' : '=',\n                parent: false,\n                type,\n            };\n            switch (type) {\n                case 'selection': {\n                    source.active = false;\n                    source.selection = field.selection || [];\n                    break;\n                }\n                case 'boolean': {\n                    source.active = false;\n                    source.selection = [\n                        [true, this.env._t(\"Yes\")],\n                        [false, this.env._t(\"No\")],\n                    ];\n                    break;\n                }\n                case 'many2one': {\n                    source.expand = true;\n                    source.expanded = false;\n                    source.context = field.context;\n                    source.relation = field.relation;\n                    if (filter.domain) {\n                        source.domain = filter.domain;\n                    }\n                }\n            }\n            return source;\n        }\n\n        /**\n         * @private\n         * @param {Object} source\n         * @param {[any, string]} values\n         * @param {boolean} [active=true]\n         */\n        _createSubSource(source, [value, label], active = true) {\n            const subSource = {\n                active,\n                filterId: source.filterId,\n                filterOperator: source.filterOperator,\n                id: sourceId ++,\n                label,\n                operator: '=',\n                parent: source,\n                value,\n            };\n            return subSource;\n        }\n\n        /**\n         * @private\n         * @param {Object} source\n         * @param {boolean} shouldExpand\n         */\n        async _expandSource(source, shouldExpand) {\n            source.expanded = shouldExpand;\n            if (shouldExpand) {\n                let args = source.domain;\n                if (typeof args === 'string') {\n                    try {\n                        args = Domain.prototype.stringToArray(args);\n                    } catch (err) {\n                        args = [];\n                    }\n                }\n                const results = await this.rpc({\n                    kwargs: {\n                        args,\n                        context: source.context,\n                        limit: 8,\n                        name: this.state.inputValue.trim(),\n                    },\n                    method: 'name_search',\n                    model: source.relation,\n                });\n                const options = results.map(result => this._createSubSource(source, result));\n                const parentIndex = this.state.sources.indexOf(source);\n                if (!options.length) {\n                    options.push(this._createSubSource(source, this.noResultItem, false));\n                }\n                this.state.sources.splice(parentIndex + 1, 0, ...options);\n            } else {\n                this.state.sources = this.state.sources.filter(src => src.parent !== source);\n            }\n        }\n\n        /**\n         * @private\n         * @param {string} query\n         */\n        _filterSources(query) {\n            return this.autoCompleteSources.reduce(\n                (sources, source) => {\n                    // Field selection or boolean.\n                    if (source.selection) {\n                        const options = [];\n                        source.selection.forEach(result => {\n                            if (fuzzyTest(query, result[1].toLowerCase())) {\n                                options.push(this._createSubSource(source, result));\n                            }\n                        });\n                        if (options.length) {\n                            sources.push(...options);\n                        }\n                    // Any other type.\n                    } else if (this._validateSource(query, source)) {\n                        sources.push(source);\n                    }\n                    // Fold any expanded item.\n                    if (source.expanded) {\n                        source.expanded = false;\n                    }\n                    return sources;\n                },\n                []\n            );\n        }\n\n        /**\n         * Focus the search facet at the designated index if any.\n         * @private\n         */\n        _focusFacet(index) {\n            const facets = this.el.getElementsByClassName('o_searchview_facet');\n            if (facets.length) {\n                facets[index].focus();\n            }\n        }\n\n        /**\n         * Try to parse the given rawValue according to the type of the given\n         * source field type. The returned formatted value is the one that will\n         * supposedly be sent to the server.\n         * @private\n         * @param {string} rawValue\n         * @param {Object} source\n         * @returns {string}\n         */\n        _parseWithSource(rawValue, { type }) {\n            const parser = field_utils.parse[type];\n            let parsedValue;\n            switch (type) {\n                case 'date':\n                case 'datetime': {\n                    const parsedDate = parser(rawValue, { type }, { timezone: true });\n                    const dateFormat = type === 'datetime' ? 'YYYY-MM-DD HH:mm:ss' : 'YYYY-MM-DD';\n                    const momentValue = moment(parsedDate, dateFormat);\n                    if (!momentValue.isValid()) {\n                        throw new Error('Invalid date');\n                    }\n                    parsedValue = parsedDate.toJSON();\n                    break;\n                }\n                case 'many2one': {\n                    parsedValue = rawValue;\n                    break;\n                }\n                default: {\n                    parsedValue = parser(rawValue);\n                }\n            }\n            return parsedValue;\n        }\n\n        /**\n         * @private\n         * @param {Object} source\n         */\n        _selectSource(source) {\n            // Inactive sources are:\n            // - Selection sources\n            // - \"no result\" items\n            if (source.active) {\n                const labelValue = source.label || this.state.inputValue.trim();\n                this.model.dispatch('addAutoCompletionValues', {\n                    filterId: source.filterId,\n                    value: \"value\" in source ? source.value : this._parseWithSource(labelValue, source),\n                    label: labelValue,\n                    operator: source.filterOperator || source.operator,\n                });\n            }\n            this._closeAutoComplete();\n        }\n\n        /**\n         * @private\n         * @param {string} query\n         * @param {Object} source\n         * @returns {boolean}\n         */\n        _validateSource(query, source) {\n            try {\n                this._parseWithSource(query, source);\n            } catch (err) {\n                return false;\n            }\n            return true;\n        }\n\n        //---------------------------------------------------------------------\n        // Handlers\n        //---------------------------------------------------------------------\n\n        /**\n         * @private\n         * @param {Object} facet\n         * @param {number} facetIndex\n         * @param {KeyboardEvent} ev\n         */\n        _onFacetKeydown(facet, facetIndex, ev) {\n            switch (ev.key) {\n                case 'ArrowLeft':\n                    if (facetIndex === 0) {\n                        this.inputRef.el.focus();\n                    } else {\n                        this._focusFacet(facetIndex - 1);\n                    }\n                    break;\n                case 'ArrowRight':\n                    const facets = this.el.getElementsByClassName('o_searchview_facet');\n                    if (facetIndex === facets.length - 1) {\n                        this.inputRef.el.focus();\n                    } else {\n                        this._focusFacet(facetIndex + 1);\n                    }\n                    break;\n                case 'Backspace':\n                    this._onFacetRemove(facet);\n                    break;\n            }\n        }\n\n        /**\n         * @private\n         * @param {Object} facet\n         */\n        _onFacetRemove(facet) {\n            this.model.dispatch('deactivateGroup', facet.groupId);\n        }\n\n        /**\n         * @private\n         * @param {KeyboardEvent} ev\n         */\n        _onSearchKeydown(ev) {\n            if (ev.isComposing) {\n                // This case happens with an IME for example: we let it handle all key events.\n                return;\n            }\n            const currentItem = this.state.sources[this.state.focusedItem] || {};\n            switch (ev.key) {\n                case 'ArrowDown':\n                    ev.preventDefault();\n                    if (Object.keys(this.state.sources).length) {\n                        let nextIndex = this.state.focusedItem + 1;\n                        if (nextIndex >= this.state.sources.length) {\n                            nextIndex = 0;\n                        }\n                        this.state.focusedItem = nextIndex;\n                    } else {\n                        this.env.bus.trigger('focus-view');\n                    }\n                    break;\n                case 'ArrowLeft':\n                    if (currentItem.expanded) {\n                        // Priority 1: fold expanded item.\n                        ev.preventDefault();\n                        this._expandSource(currentItem, false);\n                    } else if (currentItem.parent) {\n                        // Priority 2: focus parent item.\n                        ev.preventDefault();\n                        this.state.focusedItem = this.state.sources.indexOf(currentItem.parent);\n                        // Priority 3: Do nothing (navigation inside text).\n                    } else if (ev.target.selectionStart === 0) {\n                        // Priority 4: navigate to rightmost facet.\n                        this._focusFacet(this.model.get(\"facets\").length - 1);\n                    }\n                    break;\n                case 'ArrowRight':\n                    if (ev.target.selectionStart === this.state.inputValue.length) {\n                        // Priority 1: Do nothing (navigation inside text).\n                        if (currentItem.expand) {\n                            // Priority 2: go to first child or expand item.\n                            ev.preventDefault();\n                            if (currentItem.expanded) {\n                                this.state.focusedItem ++;\n                            } else {\n                                this._expandSource(currentItem, true);\n                            }\n                        } else if (ev.target.selectionStart === this.state.inputValue.length) {\n                            // Priority 3: navigate to leftmost facet.\n                            this._focusFacet(0);\n                        }\n                    }\n                    break;\n                case 'ArrowUp':\n                    ev.preventDefault();\n                    let previousIndex = this.state.focusedItem - 1;\n                    if (previousIndex < 0) {\n                        previousIndex = this.state.sources.length - 1;\n                    }\n                    this.state.focusedItem = previousIndex;\n                    break;\n                case 'Backspace':\n                    if (!this.state.inputValue.length) {\n                        const facets = this.model.get(\"facets\");\n                        if (facets.length) {\n                            this._onFacetRemove(facets[facets.length - 1]);\n                        }\n                    }\n                    break;\n                case 'Enter':\n                    if (!this.state.inputValue.length) {\n                        this.model.dispatch('search');\n                        break;\n                    }\n                    /* falls through */\n                case 'Tab':\n                    if (this.state.inputValue.length) {\n                        ev.preventDefault(); // keep the focus inside the search bar\n                        this._selectSource(currentItem);\n                    }\n                    break;\n                case 'Escape':\n                    if (this.state.sources.length) {\n                        this._closeAutoComplete();\n                    }\n                    break;\n            }\n        }\n\n        /**\n         * @private\n         * @param {InputEvent} ev\n         */\n        _onSearchInput(ev) {\n            this.state.inputValue = ev.target.value;\n            const wasVisible = this.state.sources.length;\n            const query = this.state.inputValue.trim().toLowerCase();\n            if (query.length) {\n                this.state.sources = this._filterSources(query);\n            } else if (wasVisible) {\n                this._closeAutoComplete();\n            }\n        }\n\n        /**\n         * Only handled if the user has moved its cursor at least once after the\n         * results are loaded and displayed.\n         * @private\n         * @param {number} resultIndex\n         */\n        _onSourceMousemove(resultIndex) {\n            this.state.focusedItem = resultIndex;\n        }\n\n        /**\n         * @private\n         * @param {MouseEvent} ev\n         */\n        _onWindowClick(ev) {\n            if (this.state.sources.length && !this.el.contains(ev.target)) {\n                this._closeAutoComplete();\n            }\n        }\n\n        /**\n         * @private\n         * @param {KeyboardEvent} ev\n         */\n        _onWindowKeydown(ev) {\n            if (ev.key === 'Escape' && this.state.sources.length) {\n                ev.preventDefault();\n                ev.stopPropagation();\n                this._closeAutoComplete();\n            }\n        }\n    }\n\n    SearchBar.defaultProps = {\n        fields: {},\n    };\n    SearchBar.props = {\n        fields: Object,\n    };\n    SearchBar.template = 'web.Legacy.SearchBar';\n\n    return SearchBar;\n});\n", "odoo.define('web.searchUtils', function (require) {\n    \"use strict\";\n\n    const { _lt, _t } = require('web.core');\n    const Domain = require('web.Domain');\n    const pyUtils = require('web.py_utils');\n\n    //-------------------------------------------------------------------------\n    // Constants\n    //-------------------------------------------------------------------------\n\n    // Filter menu parameters\n    const FIELD_OPERATORS = {\n        binary: [\n            { symbol: \"!=\", description: _lt(\"is set\"), value: false },\n            { symbol: \"=\", description: _lt(\"is not set\"), value: false },\n        ],\n        boolean: [\n            { symbol: \"=\", description: _lt(\"is true\"), value: true },\n            { symbol: \"!=\", description: _lt(\"is false\"), value: true },\n        ],\n        char: [\n            { symbol: \"ilike\", description: _lt(\"contains\") },\n            { symbol: \"not ilike\", description: _lt(\"doesn't contain\") },\n            { symbol: \"=\", description: _lt(\"is equal to\") },\n            { symbol: \"!=\", description: _lt(\"is not equal to\") },\n            { symbol: \"!=\", description: _lt(\"is set\"), value: false },\n            { symbol: \"=\", description: _lt(\"is not set\"), value: false },\n        ],\n        date: [\n            { symbol: \"=\", description: _lt(\"is equal to\") },\n            { symbol: \"!=\", description: _lt(\"is not equal to\") },\n            { symbol: \">\", description: _lt(\"is after\") },\n            { symbol: \"<\", description: _lt(\"is before\") },\n            { symbol: \">=\", description: _lt(\"is after or equal to\") },\n            { symbol: \"<=\", description: _lt(\"is before or equal to\") },\n            { symbol: \"between\", description: _lt(\"is between\") },\n            { symbol: \"!=\", description: _lt(\"is set\"), value: false },\n            { symbol: \"=\", description: _lt(\"is not set\"), value: false },\n        ],\n        datetime: [\n            { symbol: \"between\", description: _lt(\"is between\") },\n            { symbol: \"=\", description: _lt(\"is equal to\") },\n            { symbol: \"!=\", description: _lt(\"is not equal to\") },\n            { symbol: \">\", description: _lt(\"is after\") },\n            { symbol: \"<\", description: _lt(\"is before\") },\n            { symbol: \">=\", description: _lt(\"is after or equal to\") },\n            { symbol: \"<=\", description: _lt(\"is before or equal to\") },\n            { symbol: \"!=\", description: _lt(\"is set\"), value: false },\n            { symbol: \"=\", description: _lt(\"is not set\"), value: false },\n        ],\n        id: [\n            { symbol: \"=\", description: _lt(\"is\") },\n            { symbol: \"<=\", description: _lt(\"less than or equal to\")},\n            { symbol: \">\", description: _lt(\"greater than\")},\n        ],\n        number: [\n            { symbol: \"=\", description: _lt(\"is equal to\") },\n            { symbol: \"!=\", description: _lt(\"is not equal to\") },\n            { symbol: \">\", description: _lt(\"greater than\") },\n            { symbol: \"<\", description: _lt(\"less than\") },\n            { symbol: \">=\", description: _lt(\"greater than or equal to\") },\n            { symbol: \"<=\", description: _lt(\"less than or equal to\") },\n            { symbol: \"!=\", description: _lt(\"is set\"), value: false },\n            { symbol: \"=\", description: _lt(\"is not set\"), value: false },\n        ],\n        selection: [\n            { symbol: \"=\", description: _lt(\"is\") },\n            { symbol: \"!=\", description: _lt(\"is not\") },\n            { symbol: \"!=\", description: _lt(\"is set\"), value: false },\n            { symbol: \"=\", description: _lt(\"is not set\"), value: false },\n        ],\n    };\n    const FIELD_TYPES = {\n        binary: 'binary',\n        boolean: 'boolean',\n        char: 'char',\n        date: 'date',\n        datetime: 'datetime',\n        float: 'number',\n        id: 'id',\n        integer: 'number',\n        html: 'char',\n        many2many: 'char',\n        many2one: 'char',\n        monetary: 'number',\n        one2many: 'char',\n        text: 'char',\n        selection: 'selection',\n    };\n    const DEFAULT_PERIOD = 'this_month';\n    const QUARTERS = {\n        1: { description: _lt(\"Q1\"), coveredMonths: [0, 1, 2] },\n        2: { description: _lt(\"Q2\"), coveredMonths: [3, 4, 5] },\n        3: { description: _lt(\"Q3\"), coveredMonths: [6, 7, 8] },\n        4: { description: _lt(\"Q4\"), coveredMonths: [9, 10, 11] },\n    };\n    const MONTH_OPTIONS = {\n        this_month: {\n            id: 'this_month', groupNumber: 1, format: 'MMMM',\n            addParam: {}, granularity: 'month',\n        },\n        last_month: {\n            id: 'last_month', groupNumber: 1, format: 'MMMM',\n            addParam: { months: -1 }, granularity: 'month',\n        },\n        antepenultimate_month: {\n            id: 'antepenultimate_month', groupNumber: 1, format: 'MMMM',\n            addParam: { months: -2 }, granularity: 'month',\n        },\n    };\n    const QUARTER_OPTIONS = {\n        fourth_quarter: {\n            id: 'fourth_quarter', groupNumber: 1, description: QUARTERS[4].description,\n            setParam: { quarter: 4 }, granularity: 'quarter',\n        },\n        third_quarter: {\n            id: 'third_quarter', groupNumber: 1, description: QUARTERS[3].description,\n            setParam: { quarter: 3 }, granularity: 'quarter',\n        },\n        second_quarter: {\n            id: 'second_quarter', groupNumber: 1, description: QUARTERS[2].description,\n            setParam: { quarter: 2 }, granularity: 'quarter',\n        },\n        first_quarter: {\n            id: 'first_quarter', groupNumber: 1, description: QUARTERS[1].description,\n            setParam: { quarter: 1 }, granularity: 'quarter',\n        },\n    };\n    const YEAR_OPTIONS = {\n        this_year: {\n            id: 'this_year', groupNumber: 2, format: 'YYYY',\n            addParam: {}, granularity: 'year',\n        },\n        last_year: {\n            id: 'last_year', groupNumber: 2, format: 'YYYY',\n            addParam: { years: -1 }, granularity: 'year',\n        },\n        antepenultimate_year: {\n            id: 'antepenultimate_year', groupNumber: 2, format: 'YYYY',\n            addParam: { years: -2 }, granularity: 'year',\n        },\n    };\n    const PERIOD_OPTIONS = Object.assign({}, MONTH_OPTIONS, QUARTER_OPTIONS, YEAR_OPTIONS);\n\n    // GroupBy menu parameters\n    const GROUPABLE_TYPES = [\n        'boolean',\n        'char',\n        'date',\n        'datetime',\n        'integer',\n        'many2one',\n        'many2many',\n        'selection',\n    ];\n    const DEFAULT_INTERVAL = 'month';\n    const INTERVAL_OPTIONS = {\n        year: { description: _lt(\"Year\"), id: 'year', groupNumber: 1 },\n        quarter: { description: _lt(\"Quarter\"), id: 'quarter', groupNumber: 1 },\n        month: { description: _lt(\"Month\"), id: 'month', groupNumber: 1 },\n        week: { description: _lt(\"Week\"), id: 'week', groupNumber: 1 },\n        day: { description: _lt(\"Day\"), id: 'day', groupNumber: 1 }\n    };\n\n    // Comparison menu parameters\n    const COMPARISON_OPTIONS = {\n        previous_period: {\n            description: _lt(\"Previous Period\"), id: 'previous_period',\n        },\n        previous_year: {\n            description: _lt(\"Previous Year\"), id: 'previous_year', addParam: { years: -1 },\n        },\n    };\n    const PER_YEAR = {\n        year: 1,\n        quarter: 4,\n        month: 12,\n    };\n    // Search bar\n    const FACET_ICONS = {\n        filter: 'fa fa-filter',\n        groupBy: 'fa fa-bars',\n        favorite: 'fa fa-star',\n        comparison: 'fa fa-adjust',\n    };\n\n    //-------------------------------------------------------------------------\n    // Functions\n    //-------------------------------------------------------------------------\n\n    /**\n     * Constructs the string representation of a domain and its description. The\n     * domain is of the form:\n     *      ['|',..., '|', d_1,..., d_n]\n     * where d_i is a time range of the form\n     *      ['&', [fieldName, >=, leftBound_i], [fieldName, <=, rightBound_i]]\n     * where leftBound_i and rightBound_i are date or datetime computed accordingly\n     * to the given options and reference moment.\n     * (@see constructDateRange).\n     * @param {moment} referenceMoment\n     * @param {string} fieldName\n     * @param {string} fieldType\n     * @param {string[]} selectedOptionIds\n     * @param {string} [comparisonOptionId]\n     * @returns {{ domain: string, description: string }}\n     */\n    function constructDateDomain(\n        referenceMoment,\n        fieldName,\n        fieldType,\n        selectedOptionIds,\n        comparisonOptionId\n    ) {\n        let addParam;\n        let selectedOptions;\n        if (comparisonOptionId) {\n            [addParam, selectedOptions] = getComparisonParams(\n                referenceMoment,\n                selectedOptionIds,\n                comparisonOptionId);\n        } else {\n            selectedOptions = getSelectedOptions(referenceMoment, selectedOptionIds);\n        }\n\n        const yearOptions = selectedOptions.year;\n        const otherOptions = [\n            ...(selectedOptions.quarter || []),\n            ...(selectedOptions.month || [])\n        ];\n\n        sortPeriodOptions(yearOptions);\n        sortPeriodOptions(otherOptions);\n\n        const ranges = [];\n        for (const yearOption of yearOptions) {\n            const constructRangeParams = {\n                referenceMoment,\n                fieldName,\n                fieldType,\n                addParam,\n            };\n            if (otherOptions.length) {\n                for (const option of otherOptions) {\n                    const setParam = Object.assign({},\n                        yearOption.setParam,\n                        option ? option.setParam : {}\n                    );\n                    const { granularity } = option;\n                    const range = constructDateRange(Object.assign(\n                        { granularity, setParam },\n                        constructRangeParams\n                    ));\n                    ranges.push(range);\n                }\n            } else {\n                const { granularity, setParam } = yearOption;\n                const range = constructDateRange(Object.assign(\n                    { granularity, setParam },\n                    constructRangeParams\n                ));\n                ranges.push(range);\n            }\n        }\n\n        const domain = pyUtils.assembleDomains(ranges.map(range => range.domain), 'OR');\n        const description = ranges.map(range => range.description).join(\"/\");\n\n        return { domain, description };\n    }\n\n    /**\n     * Constructs the string representation of a domain and its description. The\n     * domain is a time range of the form:\n     *      ['&', [fieldName, >=, leftBound],[fieldName, <=, rightBound]]\n     * where leftBound and rightBound are some date or datetime determined by setParam,\n     * addParam, granularity and the reference moment.\n     * @param {Object} params\n     * @param {moment} params.referenceMoment\n     * @param {string} params.fieldName\n     * @param {string} params.fieldType\n     * @param {string} params.granularity\n     * @param {Object} params.setParam\n     * @param {Object} [params.addParam]\n     * @returns {{ domain: string, description: string }}\n     */\n    function constructDateRange({\n        referenceMoment,\n        fieldName,\n        fieldType,\n        granularity,\n        setParam,\n        addParam,\n    }) {\n        const date = referenceMoment.clone().set(setParam).add(addParam || {});\n\n        // compute domain\n        let leftBound = date.clone().locale('en').startOf(granularity);\n        let rightBound = date.clone().locale('en').endOf(granularity);\n        if (fieldType === 'date') {\n            leftBound = leftBound.format('YYYY-MM-DD');\n            rightBound = rightBound.format('YYYY-MM-DD');\n        } else {\n            leftBound = leftBound.utc().format('YYYY-MM-DD HH:mm:ss');\n            rightBound = rightBound.utc().format('YYYY-MM-DD HH:mm:ss');\n        }\n        const domain = Domain.prototype.arrayToString([\n            '&',\n            [fieldName, '>=', leftBound],\n            [fieldName, '<=', rightBound]\n        ]);\n\n        // compute description\n        const descriptions = [date.format(\"YYYY\")];\n        const method = _t.database.parameters.direction === \"rtl\" ? \"push\" : \"unshift\";\n        if (granularity === \"month\") {\n            descriptions[method](date.format(\"MMMM\"));\n        } else if (granularity === \"quarter\") {\n            descriptions[method](QUARTERS[date.quarter()].description);\n        }\n        const description = descriptions.join(\" \");\n\n        return { domain, description, };\n    }\n\n    /**\n     * Returns a version of the options in COMPARISON_OPTIONS with translated descriptions.\n     * @see getOptionsWithDescriptions\n     */\n    function getComparisonOptions() {\n        return getOptionsWithDescriptions(COMPARISON_OPTIONS);\n    }\n\n    /**\n     * Returns the params addParam and selectedOptions necessary for the computation\n     * of a comparison domain.\n     * @param {moment} referenceMoment\n     * @param {string{}} selectedOptionIds\n     * @param {string} comparisonOptionId\n     * @returns {Object[]}\n     */\n    function getComparisonParams(referenceMoment, selectedOptionIds, comparisonOptionId) {\n        const comparisonOption = COMPARISON_OPTIONS[comparisonOptionId];\n        const selectedOptions = getSelectedOptions(referenceMoment, selectedOptionIds);\n        let addParam = comparisonOption.addParam;\n        if (addParam) {\n            return [addParam, selectedOptions];\n        }\n        addParam = {};\n\n        let globalGranularity = 'year';\n        if (selectedOptions.month) {\n            globalGranularity = 'month';\n        } else if (selectedOptions.quarter) {\n            globalGranularity = 'quarter';\n        }\n        const granularityFactor = PER_YEAR[globalGranularity];\n        const years = selectedOptions.year.map(o => o.setParam.year);\n        const yearMin = Math.min(...years);\n        const yearMax = Math.max(...years);\n\n        let optionMin = 0;\n        let optionMax = 0;\n        if (selectedOptions.quarter) {\n            const quarters = selectedOptions.quarter.map(o => o.setParam.quarter);\n            if (globalGranularity === 'month') {\n                delete selectedOptions.quarter;\n                for (const quarter of quarters) {\n                    for (const month of QUARTERS[quarter].coveredMonths) {\n                        const monthOption = selectedOptions.month.find(\n                            o => o.setParam.month === month\n                        );\n                        if (!monthOption) {\n                            selectedOptions.month.push({\n                                setParam: { month, }, granularity: 'month',\n                            });\n                        }\n                    }\n                }\n            } else {\n                optionMin = Math.min(...quarters);\n                optionMax = Math.max(...quarters);\n            }\n        }\n        if (selectedOptions.month) {\n            const months = selectedOptions.month.map(o => o.setParam.month);\n            optionMin = Math.min(...months);\n            optionMax = Math.max(...months);\n        }\n\n        addParam[globalGranularity] = -1 +\n            granularityFactor * (yearMin - yearMax) +\n            optionMin - optionMax;\n\n        return [addParam, selectedOptions];\n    }\n\n    /**\n     * Returns a version of the options in INTERVAL_OPTIONS with translated descriptions.\n     * @see getOptionsWithDescriptions\n     */\n    function getIntervalOptions() {\n        return getOptionsWithDescriptions(INTERVAL_OPTIONS);\n    }\n\n    /**\n     * Returns a version of the options in PERIOD_OPTIONS with translated descriptions\n     * and a key defautlYearId used in the control panel model when toggling a period option.\n     * @param {moment} referenceMoment\n     * @returns {Object[]}\n     */\n    function getPeriodOptions(referenceMoment) {\n        const options = [];\n        for (const option of Object.values(PERIOD_OPTIONS)) {\n            const { id, groupNumber, description, } = option;\n            const res = { id, groupNumber, };\n            const date = referenceMoment.clone().set(option.setParam).add(option.addParam);\n            if (description) {\n                res.description = description.toString();\n            } else {\n                res.description = date.format(option.format.toString());\n            }\n            res.setParam = getSetParam(option, referenceMoment);\n            res.defaultYear = date.year();\n            options.push(res);\n        }\n        for (const option of options) {\n            const yearOption = options.find(\n                o => o.setParam && o.setParam.year === option.defaultYear\n            );\n            option.defaultYearId = yearOption.id;\n            delete option.defaultYear;\n            delete option.setParam;\n        }\n        return options;\n    }\n\n    /**\n     * Returns a version of the options in OPTIONS with translated descriptions (if any).\n     * @param {Object{}} OPTIONS\n     * @returns {Object[]}\n     */\n    function getOptionsWithDescriptions(OPTIONS) {\n        const options = [];\n        for (const option of Object.values(OPTIONS)) {\n            const { id, groupNumber, description, } = option;\n            const res = { id, };\n            if (description) {\n                res.description = description.toString();\n            }\n            if (groupNumber) {\n                res.groupNumber = groupNumber;\n            }\n            options.push(res);\n        }\n        return options;\n    }\n\n    /**\n     * Returns a version of the period options whose ids are in selectedOptionIds\n     * partitioned by granularity.\n     * @param {moment} referenceMoment\n     * @param {string[]} selectedOptionIds\n     * @param {Object}\n     */\n    function getSelectedOptions(referenceMoment, selectedOptionIds) {\n        const selectedOptions = { year: [] };\n        for (const optionId of selectedOptionIds) {\n            const option = PERIOD_OPTIONS[optionId];\n            const setParam = getSetParam(option, referenceMoment);\n            const granularity = option.granularity;\n            if (!selectedOptions[granularity]) {\n                selectedOptions[granularity] = [];\n            }\n            selectedOptions[granularity].push({ granularity, setParam });\n        }\n        return selectedOptions;\n    }\n\n    /**\n     * Returns the setParam object associated with the given periodOption and\n     * referenceMoment.\n     * @param {Object} periodOption\n     * @param {moment} referenceMoment\n     * @returns {Object}\n     */\n    function getSetParam(periodOption, referenceMoment) {\n        if (periodOption.setParam) {\n            return periodOption.setParam;\n        }\n        const date = referenceMoment.clone().add(periodOption.addParam);\n        const setParam = {};\n        setParam[periodOption.granularity] = date[periodOption.granularity]();\n        return setParam;\n    }\n\n    /**\n     * @param {string} intervalOptionId\n     * @returns {number} index\n     */\n    function rankInterval(intervalOptionId) {\n        return Object.keys(INTERVAL_OPTIONS).indexOf(intervalOptionId);\n    }\n\n    /**\n     * Sorts in place an array of 'period' options.\n     * @param {Object[]} options supposed to be of the form:\n     *                                      { granularity, setParam, }\n     */\n    function sortPeriodOptions(options) {\n        options.sort((o1, o2) => {\n            const granularity1 = o1.granularity;\n            const granularity2 = o2.granularity;\n            if (granularity1 === granularity2) {\n                return o1.setParam[granularity1] - o2.setParam[granularity1];\n            }\n            return granularity1 < granularity2 ? -1 : 1;\n        });\n    }\n\n    /**\n     * Checks if a year id is among the given array of period option ids.\n     * @param {string[]} selectedOptionIds\n     * @returns {boolean}\n     */\n    function yearSelected(selectedOptionIds) {\n        return selectedOptionIds.some(optionId => !!YEAR_OPTIONS[optionId]);\n    }\n\n    return {\n        COMPARISON_OPTIONS,\n        DEFAULT_INTERVAL,\n        DEFAULT_PERIOD,\n        FACET_ICONS,\n        FIELD_OPERATORS,\n        FIELD_TYPES,\n        GROUPABLE_TYPES,\n        INTERVAL_OPTIONS,\n        PERIOD_OPTIONS,\n\n        constructDateRange,\n        constructDateDomain,\n        getComparisonOptions,\n        getIntervalOptions,\n        getPeriodOptions,\n        rankInterval,\n        yearSelected,\n    };\n});\n", "odoo.define(\"web.Domain\", function (require) {\n\"use strict\";\n\nvar collections = require(\"web.collections\");\nvar pyUtils = require(\"web.py_utils\");\nvar py = window.py; // look py.js\n\nconst TRUE_LEAF = [1, '=', 1];\nconst FALSE_LEAF = [0, '=', 1];\nconst TRUE_DOMAIN = [TRUE_LEAF];\nconst FALSE_DOMAIN = [FALSE_LEAF];\n\nfunction compare(a, b) {\n    return JSON.stringify(a) === JSON.stringify(b);\n}\n\n/**\n * The Domain Class allows to work with a domain as a tree and provides tools\n * to manipulate array and string representations of domains.\n */\nvar Domain = collections.Tree.extend({\n    /**\n     * @constructor\n     * @param {string|Array|boolean|undefined} domain\n     *        The given domain can be:\n     *            * a string representation of the Python prefix-array\n     *              representation of the domain.\n     *            * a JS prefix-array representation of the domain.\n     *            * a boolean where the \"true\" domain match all records and the\n     *              \"false\" domain does not match any records.\n     *            * undefined, considered as the false boolean.\n     *            * a number, considered as true except 0 considered as false.\n     * @param {Object} [evalContext] - in case the given domain is a string, an\n     *                               evaluation context might be needed\n     */\n    init: function (domain, evalContext) {\n        this._super.apply(this, arguments);\n        if (_.isArray(domain) || _.isString(domain)) {\n            this._parse(this.normalizeArray(_.clone(this.stringToArray(domain, evalContext))));\n        } else {\n            this._data = !!domain;\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Evaluates the domain with a set of values.\n     *\n     * @param {Object} values - a mapping {fieldName -> fieldValue} (note: all\n     *                        the fields used in the domain should be given a\n     *                        value otherwise the computation will break)\n     * @returns {boolean}\n     */\n    compute: function (values) {\n        if (this._data === true || this._data === false) {\n            // The domain is a always-true or a always-false domain\n            return this._data;\n        } else if (_.isArray(this._data)) {\n            // The domain is a [name, operator, value] entity\n            // First check if we have the field value in the field values set\n            // and if the first part of the domain contains 'parent.field'\n            // get the value from the parent record.\n            var isParentField = false;\n            var fieldName = this._data[0];\n            // We split the domain first part and check if it's a match\n            // for the syntax 'parent.field'.\n\n            let fieldValue;\n            if (compare(this._data, FALSE_LEAF) || compare(this._data, TRUE_LEAF)) {\n                fieldValue = this._data[0];\n            } else {\n                var parentField = this._data[0].split('.');\n                if ('parent' in values && parentField.length === 2) {\n                    fieldName = parentField[1];\n                    isParentField = parentField[0] === 'parent' &&\n                        fieldName in values.parent;\n                }\n                if (!(this._data[0] in values) && !(isParentField)) {\n                    throw new Error(_.str.sprintf(\n                        \"Unknown field %s in domain\",\n                        this._data[0]\n                    ));\n                }\n                fieldValue = isParentField ? values.parent[fieldName] : values[fieldName];\n            }\n\n            switch (this._data[1]) {\n                case \"=\":\n                case \"==\":\n                    return _.isEqual(fieldValue, this._data[2]);\n                case \"!=\":\n                case \"<>\":\n                    return !_.isEqual(fieldValue, this._data[2]);\n                case \"<\":\n                    return (fieldValue < this._data[2]);\n                case \">\":\n                    return (fieldValue > this._data[2]);\n                case \"<=\":\n                    return (fieldValue <= this._data[2]);\n                case \">=\":\n                    return (fieldValue >= this._data[2]);\n                case \"in\":\n                    return _.intersection(\n                        _.isArray(this._data[2]) ? this._data[2] : [this._data[2]],\n                        _.isArray(fieldValue) ? fieldValue : [fieldValue],\n                    ).length !== 0;\n                case \"not in\":\n                    return _.intersection(\n                        _.isArray(this._data[2]) ? this._data[2] : [this._data[2]],\n                        _.isArray(fieldValue) ? fieldValue : [fieldValue],\n                    ).length === 0;\n                case \"like\":\n                    if (fieldValue === false) {\n                        return false;\n                    }\n                    return (fieldValue.indexOf(this._data[2]) >= 0);\n                case \"=like\":\n                    if (fieldValue === false) {\n                        return false;\n                    }\n                    return new RegExp(this._data[2].replace(/%/g, '.*')).test(fieldValue);\n                case \"ilike\":\n                    if (fieldValue === false) {\n                        return false;\n                    }\n                    return (fieldValue.toLowerCase().indexOf(this._data[2].toLowerCase()) >= 0);\n                case \"=ilike\":\n                    if (fieldValue === false) {\n                        return false;\n                    }\n                    return new RegExp(this._data[2].replace(/%/g, '.*'), 'i').test(fieldValue);\n                default:\n                    throw new Error(_.str.sprintf(\n                        \"Domain %s uses an unsupported operator\",\n                        this._data\n                    ));\n            }\n        } else { // The domain is a set of [name, operator, value] entitie(s)\n            switch (this._data) {\n                case \"&\":\n                    return _.every(this._children, function (child) {\n                        return child.compute(values);\n                    });\n                case \"|\":\n                    return _.some(this._children, function (child) {\n                        return child.compute(values);\n                    });\n                case \"!\":\n                    return !this._children[0].compute(values);\n            }\n        }\n    },\n    /**\n     * Return the JS prefix-array representation of this domain. Note that all\n     * domains that use the \"false\" domain cannot be represented as such.\n     *\n     * @returns {Array} JS prefix-array representation of this domain\n     */\n    toArray: function () {\n        if (this._data === false) {\n            throw new Error(\"'false' domain cannot be converted to array\");\n        } else if (this._data === true) {\n            return [];\n        } else {\n            var arr = [this._data];\n            return arr.concat.apply(arr, _.map(this._children, function (child) {\n                return child.toArray();\n            }));\n        }\n    },\n    /**\n     * @returns {string} representation of the Python prefix-array\n     *                   representation of the domain\n     */\n    toString: function () {\n        return Domain.prototype.arrayToString(this.toArray());\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Initializes the tree representation of the domain according to its given\n     * JS prefix-array representation. Note: the given array is considered\n     * already normalized.\n     *\n     * @private\n     * @param {Array} domain - normalized JS prefix-array representation of\n     *                       the domain\n     */\n    _parse: function (domain) {\n        this._data = (domain.length === 0 ? true : domain[0]);\n        if (domain.length <= 1) return;\n\n        var expected = 1;\n        for (var i = 1 ; i < domain.length ; i++) {\n            if (domain[i] === \"&\" || domain[i] === \"|\") {\n                expected++;\n            } else if (domain[i] !== \"!\") {\n                expected--;\n            }\n\n            if (!expected) {\n                i++;\n                this._addSubdomain(domain.slice(1, i));\n                this._addSubdomain(domain.slice(i));\n                break;\n            }\n        }\n    },\n\n    /**\n     * Adds a domain as a child (e.g. if the current domain is [\"|\", A, B],\n     * using this method with a [\"&\", C, D] domain will result in a\n     * [\"|\", \"|\", A, B, \"&\", C, D]).\n     * Note: the internal tree representation is automatically simplified.\n     *\n     * @param {Array} domain - normalized JS prefix-array representation of a\n     *                       domain to add\n     */\n    _addSubdomain: function (domain) {\n        if (!domain.length) return;\n        var subdomain = new Domain(domain);\n\n        if (!subdomain._children.length || subdomain._data !== this._data) {\n            this._children.push(subdomain);\n        } else {\n            var self = this;\n            _.each(subdomain._children, function (childDomain) {\n                self._children.push(childDomain);\n            });\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Static\n    //--------------------------------------------------------------------------\n\n    /**\n     * Converts JS prefix-array representation of a domain to a string\n     * representation of the Python prefix-array representation of this domain.\n     *\n     * @static\n     * @param {Array|string|undefined} domain\n     * @returns {string}\n     */\n    arrayToString: function (domain) {\n        if (_.isString(domain)) return domain;\n\n        function jsToPy(p) {\n            switch (p) {\n                case null: return \"None\";\n                case true: return \"True\";\n                case false: return \"False\";\n                default:\n                    if (Array.isArray(p)) {\n                        return `[${p.map(jsToPy)}]`;\n                    }\n                    return JSON.stringify(p);\n            }\n        }\n\n        return `[${(domain || []).map(jsToPy)}]`;\n    },\n    /**\n     * Converts a string representation of the Python prefix-array\n     * representation of a domain to a JS prefix-array representation of this\n     * domain.\n     *\n     * @static\n     * @param {string|Array} domain\n     * @param {Object} [evalContext]\n     * @returns {Array}\n     */\n    stringToArray: function (domain, evalContext) {\n        if (!_.isString(domain)) return _.clone(domain);\n        return pyUtils.eval(\"domain\", domain ? domain.replace(/%%/g, '%') : \"[]\", evalContext);\n    },\n    /**\n     * Makes implicit \"&\" operators explicit in the given JS prefix-array\n     * representation of domain (e.g [A, B] -> [\"&\", A, B])\n     *\n     * @static\n     * @param {Array} domain - the JS prefix-array representation of the domain\n     *                       to normalize (! will be normalized in-place)\n     * @returns {Array} the normalized JS prefix-array representation of the\n     *                  given domain\n     * @throws {Error} if the domain is invalid and can't be normalised\n     */\n    normalizeArray: function (domain) {\n        if (domain.length === 0) { return domain; }\n        var expected = 1;\n        _.each(domain, function (item) {\n            if (item === \"&\" || item === \"|\") {\n                expected++;\n            } else if (item !== \"!\") {\n                expected--;\n            }\n        });\n        if (expected < 0) {\n            domain.unshift.apply(domain, _.times(Math.abs(expected), _.constant(\"&\")));\n        } else if (expected > 0) {\n            throw new Error(_.str.sprintf(\n                \"invalid domain %s (missing %d segment(s))\",\n                JSON.stringify(domain), expected\n            ));\n        }\n        return domain;\n    },\n    /**\n     * Converts JS prefix-array representation of a domain to a python condition\n     *\n     * @static\n     * @param {Array} domain\n     * @returns {string}\n     */\n    domainToCondition: function (domain) {\n        if (!domain.length) {\n            return 'True';\n        }\n        var self = this;\n        function consume(stack) {\n            var len = stack.length;\n            if (len <= 1) {\n                return stack;\n            } else if (stack[len-1] === '|' || stack[len-1] === '&' || stack[len-2] === '|' || stack[len-2] === '&') {\n                return stack;\n            } else if (len == 2) {\n                stack.splice(-2, 2, stack[len-2] + ' and ' + stack[len-1]);\n            } else if (stack[len-3] == '|') {\n                if (len === 3) {\n                    stack.splice(-3, 3, stack[len-2] + ' or ' + stack[len-1]);\n                } else {\n                    stack.splice(-3, 3, '(' + stack[len-2] + ' or ' + stack[len-1] + ')');\n                }\n            } else {\n                stack.splice(-3, 3, stack[len-2] + ' and ' + stack[len-1]);\n            }\n            consume(stack);\n        }\n\n        var stack = [];\n        _.each(domain, function (dom) {\n            if (dom === '|' || dom === '&') {\n                stack.push(dom);\n            } else {\n                var operator = dom[1] === '=' ? '==' : dom[1];\n                if (!operator) {\n                    throw new Error('Wrong operator for this domain');\n                }\n                if (operator === '!=' && dom[2] === false) { // the field is set\n                    stack.push(dom[0]);\n                } else if (dom[2] === null || dom[2] === true || dom[2] === false) {\n                    stack.push(dom[0] + ' ' + (operator === '!=' ? 'is not ' : 'is ') + (dom[2] === null ? 'None' : (dom[2] ? 'True' : 'False')));\n                } else {\n                    stack.push(dom[0] + ' ' + operator + ' ' + JSON.stringify(dom[2]));\n                }\n                consume(stack);\n            }\n        });\n\n        if (stack.length !== 1) {\n            throw new Error('Wrong domain');\n        }\n\n        return stack[0];\n    },\n    /**\n     * Converts python condition to a JS prefix-array representation of a domain\n     *\n     * @static\n     * @param {string} condition\n     * @returns {Array}\n     */\n    conditionToDomain: function (condition) {\n        if (!condition || condition.match(/^\\s*(True)?\\s*$/)) {\n            return [];\n        }\n\n        var ast = py.parse(py.tokenize(condition));\n\n\n        function astToStackValue (node) {\n            switch (node.id) {\n                case '(name)': return node.value;\n                case '.': return astToStackValue(node.first) + '.' + astToStackValue(node.second);\n                case '(string)': return node.value;\n                case '(number)': return node.value;\n                case '(constant)': return node.value === 'None' ? null : node.value === 'True' ? true : false;\n                case '(':\n                case '[': return _.map(node.first, function (node) {return astToStackValue(node);});\n            }\n        }\n        function astToStack (node) {\n            switch (node.id) {\n                case '(name)': return [[astToStackValue(node), '!=', false]];\n                case '.': return [[astToStackValue(node.first) + '.' + astToStackValue(node.second), '!=', false]];\n                case 'not': return [[astToStackValue(node.first), '=', false]];\n\n                case 'or': return ['|'].concat(astToStack(node.first)).concat(astToStack(node.second));\n                case 'and': return ['&'].concat(astToStack(node.first)).concat(astToStack(node.second));\n                case '(comparator)':\n                    if (node.operators.length !== 1) {\n                        throw new Error('Wrong condition to convert in domain');\n                    }\n                    var right = astToStackValue(node.expressions[0]);\n                    var left = astToStackValue(node.expressions[1]);\n                    var operator = node.operators[0];\n                    switch (operator) {\n                        case 'is': operator = '='; break;\n                        case 'is not': operator = '!='; break;\n                        case '==': operator = '='; break;\n                    }\n                    return [[right, operator, left]];\n                default:\n                    throw \"Condition cannot be transformed into domain\";\n            }\n        }\n\n        return astToStack(ast);\n    },\n});\n\nDomain.TRUE_LEAF = TRUE_LEAF;\nDomain.FALSE_LEAF = FALSE_LEAF;\nDomain.TRUE_DOMAIN = TRUE_DOMAIN;\nDomain.FALSE_DOMAIN = FALSE_DOMAIN;\n\nreturn Domain;\n});\n", "odoo.define('web.mvc', function (require) {\n\"use strict\";\n\n/**\n * This file contains a 'formalization' of a MVC pattern, applied to Odoo\n * idioms.\n *\n * For a simple widget/component, this is definitely overkill.  However, when\n * working on complex systems, such as Odoo views (or the control panel, or some\n * client actions), it is useful to clearly separate the code in concerns.\n *\n * We define here 4 classes: Factory, Model, Renderer, Controller.  Note that\n * for various historical reasons, we use the term Renderer instead of View. The\n * main issue is that the term 'View' is used way too much in Odoo land, and\n * adding it would increase the confusion.\n *\n * In short, here are the responsabilities of the four classes:\n * - Model: this is where the main state of the system lives.  This is the part\n *     that will talk to the server, process the results and is the owner of the\n *     state\n * - Renderer: this is the UI code: it should only be concerned with the look\n *     and feel of the system: rendering, binding handlers, ...\n * - Controller: coordinates the model with the renderer and the parents widgets.\n *     This is more a 'plumbing' widget.\n * - Factory: setting up the MRC components is a complex task, because each of\n *     them needs the proper arguments/options, it needs to be extensible, they\n *     needs to be created in the proper order, ...  The job of the factory is\n *     to process all the various arguments, and make sure each component is as\n *     simple as possible.\n */\n\nvar ajax = require('web.ajax');\nvar Class = require('web.Class');\nvar mixins = require('web.mixins');\nvar ServicesMixin = require('web.ServicesMixin');\nvar Widget = require('web.Widget');\n\n\n/**\n * Owner of the state, this component is tasked with fetching data, processing\n * it, updating it, ...\n *\n * Note that this is not a widget: it is a class which has not UI representation.\n *\n * @class Model\n */\nvar Model = Class.extend(mixins.EventDispatcherMixin, ServicesMixin, {\n    /**\n     * @param {Widget} parent\n     * @param {Object} params\n     */\n    init: function (parent, params) {\n        mixins.EventDispatcherMixin.init.call(this);\n        this.setParent(parent);\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * This method should return the complete state necessary for the renderer\n     * to display the current data.\n     *\n     * @returns {*}\n     */\n    get: function () {\n    },\n    /**\n     * The load method is called once in a model, when we load the data for the\n     * first time.  The method returns (a promise that resolves to) some kind\n     * of token/handle.  The handle can then be used with the get method to\n     * access a representation of the data.\n     *\n     * @param {Object} params\n     * @returns {Promise} The promise resolves to some kind of handle\n     */\n    load: function () {\n        return Promise.resolve();\n    },\n});\n\n/**\n * Only responsibility of this component is to display the user interface, and\n * react to user changes.\n *\n * @class Renderer\n */\nvar Renderer = Widget.extend({\n    /**\n     * @override\n     * @param {any} state\n     * @param {Object} params\n     */\n    init: function (parent, state, params) {\n        this._super(parent);\n        this.state = state;\n    },\n});\n\n/**\n * The controller has to coordinate between parent, renderer and model.\n *\n * @class Controller\n */\nvar Controller = Widget.extend({\n    /**\n     * @override\n     * @param {Model} model\n     * @param {Renderer} renderer\n     * @param {Object} params\n     * @param {any} [params.handle=null]\n     */\n    init: function (parent, model, renderer, params) {\n        this._super.apply(this, arguments);\n        this.handle = params.handle || null;\n        this.model = model;\n        this.renderer = renderer;\n    },\n    /**\n     * @returns {Promise}\n     */\n    start: function () {\n        return Promise.all(\n            [this._super.apply(this, arguments),\n            this._startRenderer()]\n        );\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Appends the renderer in the $el. To override to insert it elsewhere.\n     *\n     * @private\n     */\n    _startRenderer: function () {\n        return this.renderer.appendTo(this.$el);\n    },\n});\n\nvar Factory = Class.extend({\n    config: {\n        Model: Model,\n        Renderer: Renderer,\n        Controller: Controller,\n    },\n    /**\n     * @override\n     */\n    init: function () {\n        this.rendererParams = {};\n        this.controllerParams = {};\n        this.modelParams = {};\n        this.loadParams = {};\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Main method of the Factory class. Create a controller, and make sure that\n     * data and libraries are loaded.\n     *\n     * There is a unusual thing going in this method with parents: we create\n     * renderer/model with parent as parent, then we have to reassign them at\n     * the end to make sure that we have the proper relationships.  This is\n     * necessary to solve the problem that the controller needs the model and\n     * the renderer to be instantiated, but the model need a parent to be able\n     * to load itself, and the renderer needs the data in its constructor.\n     *\n     * @param {Widget} parent the parent of the resulting Controller (most\n     *      likely an action manager)\n     * @returns {Promise<Controller>}\n     */\n    getController: function (parent) {\n        var self = this;\n        var model = this.getModel(parent);\n        return Promise.all([this._loadData(model), ajax.loadLibs(this)]).then(function (result) {\n            const { state, handle } = result[0];\n            var renderer = self.getRenderer(parent, state);\n            var Controller = self.Controller || self.config.Controller;\n            const initialState = model.get(handle);\n            var controllerParams = _.extend({\n                initialState,\n                handle,\n            }, self.controllerParams);\n            var controller = new Controller(parent, model, renderer, controllerParams);\n            model.setParent(controller);\n            renderer.setParent(controller);\n            return controller;\n        });\n    },\n    /**\n     * Returns a new model instance\n     *\n     * @param {Widget} parent the parent of the model\n     * @returns {Model} instance of the model\n     */\n    getModel: function (parent) {\n        var Model = this.config.Model;\n        return new Model(parent, this.modelParams);\n    },\n    /**\n     * Returns a new renderer instance\n     *\n     * @param {Widget} parent the parent of the renderer\n     * @param {Object} state the information related to the rendered data\n     * @returns {Renderer} instance of the renderer\n     */\n    getRenderer: function (parent, state) {\n        var Renderer = this.config.Renderer;\n        return new Renderer(parent, state, this.rendererParams);\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Loads initial data from the model\n     *\n     * @private\n     * @param {Model} model a Model instance\n     * @param {Object} [options={}]\n     * @param {boolean} [options.withSampleData=true]\n     * @returns {Promise<*>} a promise that resolves to the value returned by\n     *   the get method from the model\n     * @todo: get rid of loadParams (use modelParams instead)\n     */\n    _loadData: function (model, options = {}) {\n        options.withSampleData = 'withSampleData' in options ? options.withSampleData : true;\n        return model.load(this.loadParams).then(function (handle) {\n            return { state: model.get(handle, options), handle };\n        });\n    },\n});\n\n\nreturn {\n    Factory: Factory,\n    Model: Model,\n    Renderer: Renderer,\n    Controller: Controller,\n};\n\n});\n", "odoo.define('web.py_utils', function (require) {\n\"use strict\";\n\nvar core = require('web.core');\n\nvar _t = core._t;\nvar py = window.py; // to silence linters\n\n// recursively wraps JS objects passed into the context to attributedicts\n// which jsonify back to JS objects\nfunction wrap(value) {\n    if (value === null) { return py.None; }\n\n    switch (typeof value) {\n    case 'undefined': throw new Error(\"No conversion for undefined\");\n    case 'boolean': return py.bool.fromJSON(value);\n    case 'number': return py.float.fromJSON(value);\n    case 'string': return py.str.fromJSON(value);\n    }\n\n    switch(value.constructor) {\n    case Object: return wrapping_dict.fromJSON(value);\n    case Array: return wrapping_list.fromJSON(value);\n    }\n\n    throw new Error(\"ValueError: unable to wrap \" + value);\n}\n\nvar wrapping_dict = py.type('wrapping_dict', null, {\n    __init__: function () {\n        this._store = {};\n    },\n    __getitem__: function (key) {\n        var k = key.toJSON();\n        if (!(k in this._store)) {\n            throw new Error(\"KeyError: '\" + k + \"'\");\n        }\n        return wrap(this._store[k]);\n    },\n    __getattr__: function (key) {\n        return this.__getitem__(py.str.fromJSON(key));\n    },\n    __len__: function () {\n        return Object.keys(this._store).length;\n    },\n    __nonzero__: function () {\n        return py.PY_size(this) > 0 ? py.True : py.False;\n    },\n    get: function () {\n        var args = py.PY_parseArgs(arguments, ['k', ['d', py.None]]);\n\n        if (!(args.k.toJSON() in this._store)) { return args.d; }\n        return this.__getitem__(args.k);\n    },\n    fromJSON: function (d) {\n        var instance = py.PY_call(wrapping_dict);\n        instance._store = d;\n        return instance;\n    },\n    toJSON: function () {\n        return this._store;\n    },\n});\n\nvar wrapping_list = py.type('wrapping_list', null, {\n    __init__: function () {\n        this._store = [];\n    },\n    __getitem__: function (index) {\n        return wrap(this._store[index.toJSON()]);\n    },\n    __len__: function () {\n        return this._store.length;\n    },\n    __nonzero__: function () {\n        return py.PY_size(this) > 0 ? py.True : py.False;\n    },\n    fromJSON: function (ar) {\n        var instance = py.PY_call(wrapping_list);\n        instance._store = ar;\n        return instance;\n    },\n    toJSON: function () {\n        return this._store;\n    },\n});\n\nfunction wrap_context(context) {\n    for (var k in context) {\n        if (!context.hasOwnProperty(k)) { continue; }\n        var val = context[k];\n        // Don't add a test case like ``val === undefined``\n        // this is intended to prevent letting crap pass\n        // on the context without even knowing it.\n        // If you face an issue from here, try to sanitize\n        // the context upstream instead\n        if (val === null) { continue; }\n        if (val.constructor === Array) {\n            context[k] = wrapping_list.fromJSON(val);\n        } else if (val.constructor === Object\n                   && !py.PY_isInstance(val, py.object)) {\n            context[k] = wrapping_dict.fromJSON(val);\n        }\n    }\n    return context;\n}\n\nfunction eval_contexts(contexts, evaluation_context) {\n    evaluation_context = _.extend(pycontext(), evaluation_context || {});\n    return _(contexts).reduce(function (result_context, ctx) {\n        // __eval_context evaluations can lead to some of `contexts`'s\n        // values being null, skip them as well as empty contexts\n        if (_.isEmpty(ctx)) { return result_context; }\n        if (_.isString(ctx)) {\n            // wrap raw strings in context\n            ctx = { __ref: 'context', __debug: ctx };\n        }\n        var evaluated = ctx;\n        switch(ctx.__ref) {\n        case 'context':\n            evaluation_context.context = evaluation_context;\n            evaluated = py.eval(ctx.__debug, wrap_context(evaluation_context));\n            break;\n        case 'compound_context':\n            var eval_context = eval_contexts([ctx.__eval_context]);\n            evaluated = eval_contexts(\n                ctx.__contexts, _.extend({}, evaluation_context, eval_context));\n            break;\n        }\n        // add newly evaluated context to evaluation context for following\n        // siblings\n        _.extend(evaluation_context, evaluated);\n        return _.extend(result_context, evaluated);\n    }, {});\n}\n\nfunction eval_domains(domains, evaluation_context) {\n    evaluation_context = _.extend(pycontext(), evaluation_context || {});\n    var result_domain = [];\n    // Normalize only if the first domain is the array [\"|\"] or [\"!\"]\n    var need_normalization = (\n        domains &&\n        domains.length > 0 &&\n        domains[0].length === 1 &&\n        (domains[0][0] === \"|\" || domains[0][0] === \"!\")\n    );\n    _(domains).each(function (domain) {\n        if (_.isString(domain)) {\n            // wrap raw strings in domain\n            domain = { __ref: 'domain', __debug: domain };\n        }\n        var domain_array_to_combine;\n        switch(domain.__ref) {\n        case 'domain':\n            evaluation_context.context = evaluation_context;\n            domain_array_to_combine = py.eval(domain.__debug, wrap_context(evaluation_context));\n            break;\n        default:\n            domain_array_to_combine = domain;\n        }\n        if (need_normalization) {\n            domain_array_to_combine = get_normalized_domain(domain_array_to_combine);\n        }\n        result_domain.push.apply(result_domain, domain_array_to_combine);\n    });\n    return result_domain;\n}\n\n/**\n * Returns a normalized copy of the given domain array. Normalization is\n * is making the implicit \"&\" at the start of the domain explicit, e.g.\n * [A, B, C] would become [\"&\", \"&\", A, B, C].\n *\n * @param {Array} domain_array\n * @returns {Array} normalized copy of the given array\n */\nfunction get_normalized_domain(domain_array) {\n    var expected = 1; // Holds the number of expected domain expressions\n    _.each(domain_array, function (item) {\n        if (item === \"&\" || item === \"|\") {\n            expected++;\n        } else if (item !== \"!\") {\n            expected--;\n        }\n    });\n    var new_explicit_ands = _.times(-expected, _.constant(\"&\"));\n    return new_explicit_ands.concat(domain_array);\n}\n\nfunction eval_groupbys(contexts, evaluation_context) {\n    evaluation_context = _.extend(pycontext(), evaluation_context || {});\n    var result_group = [];\n    _(contexts).each(function (ctx) {\n        if (_.isString(ctx)) {\n            // wrap raw strings in context\n            ctx = { __ref: 'context', __debug: ctx };\n        }\n        var group;\n        var evaluated = ctx;\n        switch(ctx.__ref) {\n        case 'context':\n            evaluation_context.context = evaluation_context;\n            evaluated = py.eval(ctx.__debug, wrap_context(evaluation_context));\n            break;\n        case 'compound_context':\n            var eval_context = eval_contexts([ctx.__eval_context]);\n            evaluated = eval_contexts(\n                ctx.__contexts, _.extend({}, evaluation_context, eval_context));\n            break;\n        }\n        group = evaluated.group_by;\n        if (!group) { return; }\n        if (typeof group === 'string') {\n            result_group.push(group);\n        } else if (group instanceof Array) {\n            result_group.push.apply(result_group, group);\n        } else {\n            throw new Error('Got invalid groupby {{'\n                    + JSON.stringify(group) + '}}');\n        }\n        _.extend(evaluation_context, evaluated);\n    });\n    return result_group;\n}\n\n/**\n * Returns the current local date, which means the date on the client (which can be different\n * compared to the date of the server).\n *\n * @return {datetime.date}\n */\nfunction context_today() {\n    var d = new Date();\n    return py.PY_call(\n        py.extras.datetime.date, [d.getFullYear(), d.getMonth() + 1, d.getDate()]);\n}\n\n/**\n * Returns a timedelta object which represents the timezone offset between the\n * local timezone and the UTC time.\n *\n * This is very useful to generate datetime strings which are 'timezone'\n * dependant.  For example, we can now write this to generate the correct\n * datetime string representing \"this morning in the user timezone\":\n *\n * \"datetime.datetime.now().replace(hour=0,minute=0,second=0) + tz_offset()).strftime('%Y-%m-%d %H:%M:%S')\"\n * @returns {datetime.timedelta}\n */\nfunction tz_offset() {\n    var offset= new Date().getTimezoneOffset();\n    var kwargs = {minutes: py.float.fromJSON(offset)};\n    return py.PY_call(py.extras.datetime.timedelta,[],kwargs);\n}\n\n\nfunction pycontext() {\n    const d = new Date();\n    const today = `${\n        String(d.getFullYear()).padStart(4, \"0\")}-${\n        String(d.getMonth() + 1).padStart(2, \"0\")}-${\n        String(d.getDate()).padStart(2, \"0\")}`;\n    const now = `${\n        String(d.getUTCFullYear()).padStart(4, \"0\")}-${\n        String(d.getUTCMonth() + 1).padStart(2, \"0\")}-${\n        String(d.getUTCDate()).padStart(2, \"0\")} ${\n        String(d.getUTCHours()).padStart(2, \"0\")}:${\n        String(d.getUTCMinutes()).padStart(2, \"0\")}:${\n        String(d.getUTCSeconds()).padStart(2, \"0\")}`;\n\n    const { datetime, relativedelta, time } = py.extras;\n    return {\n        current_date: today,\n        datetime,\n        time,\n        now,\n        today,\n        relativedelta,\n        context_today,\n        tz_offset,\n    };\n}\n\n/**\n * @param {String} type \"domains\", \"contexts\" or \"groupbys\"\n * @param {Array} object domains or contexts to evaluate\n * @param {Object} [context] evaluation context\n */\nfunction pyeval(type, object, context) {\n    context = _.extend(pycontext(), context || {});\n\n    //noinspection FallthroughInSwitchStatementJS\n    switch(type) {\n    case 'context':\n    case 'contexts':\n        if (type === 'context') {\n            object = [object];\n        }\n        return eval_contexts(object, context);\n    case 'domain':\n    case 'domains':\n        if (type === 'domain')\n            object = [object];\n        return eval_domains(object, context);\n    case 'groupbys':\n        return eval_groupbys(object, context);\n    }\n    throw new Error(\"Unknow evaluation type \" + type);\n}\n\nfunction eval_arg(arg) {\n    if (typeof arg !== 'object' || !arg.__ref) { return arg; }\n    switch(arg.__ref) {\n    case 'domain':\n        return pyeval('domains', [arg]);\n    case 'context': case 'compound_context':\n        return pyeval('contexts', [arg]);\n    default:\n        throw new Error(_t(\"Unknown nonliteral type \") + ' ' + arg.__ref);\n    }\n}\n\n/**\n * If args or kwargs are unevaluated contexts or domains (compound or not),\n * evaluated them in-place.\n *\n * Potentially mutates both parameters.\n *\n * @param args\n * @param kwargs\n */\nfunction ensure_evaluated(args, kwargs) {\n    for (var i=0; i<args.length; ++i) {\n        args[i] = eval_arg(args[i]);\n    }\n    for (var k in kwargs) {\n        if (!kwargs.hasOwnProperty(k)) { continue; }\n        kwargs[k] = eval_arg(kwargs[k]);\n    }\n}\n\nfunction eval_domains_and_contexts(source) {\n    // see Session.eval_context in Python\n    return {\n        context: pyeval('contexts', source.contexts || [], source.eval_context),\n        domain: pyeval('domains', source.domains, source.eval_context),\n        group_by: pyeval('groupbys', source.group_by_seq || [], source.eval_context),\n    };\n}\n\nfunction py_eval(expr, context) {\n    return py.eval(expr, _.extend({}, context || {}, {\"true\": true, \"false\": false, \"null\": null}));\n}\n\n/**\n * Assemble domains into a single domains using an 'OR' or an 'AND' operator.\n *\n * .. note:\n *\n *      - this function does not evaluate anything inside the domain.  This\n *        is actually quite critical because this allows the manipulation of\n *        unevaluated (dynamic) domains.\n *      - this function gives a normalized domain as result,\n *      - applied on a list of length 1, it returns the domain normalized.\n *\n * @param {string[]} domains list of string representing domains\n * @param {\"AND\" | \"OR\"} operator used to combine domains (default \"AND\")\n * @returns {string} normalized domain\n */\nfunction assembleDomains(domains, operator) {\n    var ASTs = domains.map(_getPyJSAST);\n    if (operator === \"OR\") {\n        operator = py.tokenize(\"'|'\")[0];\n    } else {\n        operator = py.tokenize(\"'&'\")[0];\n    }\n    var result = _getPyJSAST(\"[]\");\n    var normalizedDomains = ASTs\n                .filter(function (AST) {\n                    return AST.first.length > 0;\n                })\n                .map(_normalizeDomainAST);\n    if (normalizedDomains.length > 0) {\n        result.first = normalizedDomains.reduce(function (acc, ast) {\n            return acc.concat(ast.first);\n        },\n        _.times(normalizedDomains.length - 1, _.constant(operator))\n        );\n    }\n    return _formatAST(result);\n}\n/**\n * Normalize a domain via its string representation.\n *\n * Note: this function does not evaluate anything inside the domain.  This is\n * actually quite critical because this allows the manipulation of unevaluated\n * (dynamic) domains.\n *\n * @param {string} domain string representing a domain\n * @returns {string} normalized domain\n */\nfunction normalizeDomain (domain) {\n    return _formatAST(_normalizeDomainAST(_getPyJSAST(domain)));\n}\n\n//--------------------------------------------------------------------------\n// Private\n//--------------------------------------------------------------------------\n\n// Binding power for prefix operator is not accessible in the AST generated by\n// py.js, so we have to hardcode some values here\nvar BINDING_POWERS = {\n    or: 30,\n    and: 40,\n    not: 50,\n};\n\n/**\n * @private\n * Convert a python AST (generated by py.js) to a string form, which should\n * represent the same AST.\n *\n * @param {Object} ast a valid AST obtained by py.js, which represent a python\n *   expression\n * @param {integer} [lbp=0] a binding power. This is necessary to be able to\n *   format sub expressions: the + sub expression in \"3 * (a + 2)\" should be\n *   formatted with parenthesis, because its binding power is lower than the\n *   binding power of *.\n * @returns {string}\n */\nfunction _formatAST(ast, lbp) {\n    lbp = lbp || 0;\n    switch (ast.id) {\n        // basic values\n        case \"(number)\":\n            return String(ast.value);\n        case \"(string)\":\n            return JSON.stringify(ast.value);\n        case \"(constant)\":\n            return ast.value;\n        case \"(name)\":\n            return ast.value;\n        case \"[\":\n            if (ast.second) {\n                // read a value in a dictionary: d['a']\n                return _formatAST(ast.first) + '[' + _formatAST(ast.second) + ']';\n            } else {\n                // list: [1, 2]\n                var values = ast.first.map(_formatAST);\n                return '[' + values.join(', ') + ']';\n            }\n        case \"{\":\n            var keyValues = ast.first.map(function (kv) {\n                return _formatAST(kv[0]) + ': ' + _formatAST(kv[1]);\n            });\n            return '{' + keyValues.join(', ') + '}';\n\n        // relations\n        case \"=\":\n            return _formatAST(ast.first) + ' ' + ast.id + ' ' + _formatAST(ast.second);\n        // operators\n        case \"-\":\n        case \"+\":\n        case \"~\":\n        case \"*\":\n        case \"**\":\n        case \"%\":\n        case \"//\":\n        case \"and\":\n        case \"or\":\n            if (ast.second) {\n                // infix\n                var r = _formatAST(ast.first, ast.lbp) + ' ' + ast.id + ' ' + _formatAST(ast.second, ast.lbp);\n                if (ast.lbp < lbp) {\n                    r = '(' + r + ')';\n                }\n                return r;\n            }\n            // prefix\n            // real lbp is not accessible, it is inside a closure\n            var actualBP = BINDING_POWERS[ast.id] || 130;\n            return ast.id + _formatAST(ast.first, actualBP);\n        case \"if\":\n            var t = _formatAST(ast.ifTrue)\n                + ' if ' + _formatAST(ast.condition)\n                + ' else ' + _formatAST(ast.ifFalse);\n            return ast.lbp < lbp ? '(' + t + ')' : t;\n        case \".\":\n            return _formatAST(ast.first, ast.lbp) + '.' + _formatAST(ast.second);\n        case \"not\":\n            return \"not \" + _formatAST(ast.first);\n        case \"(comparator)\":\n            var operator = ast.operators[0];\n            return _formatAST(ast.expressions[0]) + ' ' + operator + ' ' + _formatAST(ast.expressions[1]);\n\n        // function call\n        case \"(\":\n            if (ast.second) {\n                // this is a function call: f(a, b)\n                return _formatAST(ast.first) + '(' + ast.second.map(_formatAST).join(', ') + ')';\n            } else {\n                // this is a tuple\n                return '(' + ast.first.map(_formatAST).join(', ') + ')';\n            }\n    }\n    throw new Error(\"Unimplemented python construct\");\n}\n\n/**\n * @private\n * Get the PyJs AST representing a domain starting from is string representation\n *\n * @param {string} domain string representing a domain\n * @returns {PyJS AST} PyJS AST representation of domain\n */\nfunction _getPyJSAST(domain) {\n    return py.parse(py.tokenize(domain));\n}\n\n/**\n * @private\n *\n * Normalize a domain, at the level of the AST.\n *\n * Note: this function does not evaluate anything inside the domain.  This is\n * actually quite critical because this allows the manipulation of unevaluated\n * (dynamic) domains.\n *\n * @param {PyJS AST} domain valid AST representing a domain\n * @returns {PyJS AST} normalized domain AST\n */\nfunction _normalizeDomainAST(domain) {\n    var expected = 1;\n    for (var i = 0; i < domain.first.length; i++) {\n        var value = domain.first[i].value;\n        if (value === '&' || value === '|') {\n            expected++;\n        } else if (value !== '!') {\n            expected--;\n        }\n    }\n    var andOperator = py.tokenize(\"'&'\")[0];\n\n    if (expected < 0) {\n        domain.first.unshift.apply(domain.first, _.times(Math.abs(expected), _.constant(andOperator)));\n    }\n\n    return domain;\n}\n\nreturn {\n    context: pycontext,\n    ensure_evaluated: ensure_evaluated,\n    eval: pyeval,\n    eval_domains_and_contexts: eval_domains_and_contexts,\n    py_eval: py_eval,\n    normalizeDomain: normalizeDomain,\n    assembleDomains: assembleDomains,\n    _getPyJSAST: _getPyJSAST,\n    _formatAST: _formatAST,\n    _normalizeDomainAST: _normalizeDomainAST,\n};\n});\n", "odoo.define('web.Context', function (require) {\n\"use strict\";\n\nvar Class = require('web.Class');\nvar pyUtils = require('web.py_utils');\n\nvar Context = Class.extend({\n    init: function () {\n        this.__ref = \"compound_context\";\n        this.__contexts = [];\n        this.__eval_context = null;\n        var self = this;\n        _.each(arguments, function (x) {\n            self.add(x);\n        });\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    add: function (context) {\n        this.__contexts.push(context);\n        return this;\n    },\n    eval: function () {\n        return pyUtils.eval('context', this);\n    },\n    /**\n     * Set the evaluation context to be used when we actually eval.\n     *\n     * @param {Object} evalContext\n     * @returns {Context}\n     */\n    set_eval_context: function (evalContext) {\n        // a special case needs to be done for moment objects.  Dates are\n        // internally represented by a moment object, but they need to be\n        // converted to the server format before being sent. We call the toJSON\n        // method, because it returns the date with the format required by the\n        // server\n        for (var key in evalContext) {\n            if (evalContext[key] instanceof moment) {\n                evalContext[key] = evalContext[key].toJSON();\n            }\n        }\n        this.__eval_context = evalContext;\n        return this;\n    },\n});\n\nreturn Context;\n\n});\n", "odoo.define('web.dataComparisonUtils', function (require) {\n\"use strict\";\n\nvar fieldUtils = require('web.field_utils');\nvar Class = require('web.Class');\n\nvar DateClasses = Class.extend({\n    /**\n     * This small class offers a light API to manage equivalence classes of\n     * dates. Two dates in different dateSets are declared equivalent when\n     * their indexes are equal.\n     *\n     * @param  {Array[]} dateSets, a list of list of dates\n     */\n    init: function (dateSets) {\n        // At least one dateSet must be non empty.\n        // The completion of the first inhabited dateSet will serve as a reference set.\n        // The reference set elements will be the default representatives for the classes.\n        this.dateSets = dateSets;\n        this.referenceIndex = null;\n        for (var i = 0; i < dateSets.length; i++) {\n            var dateSet = dateSets[i];\n            if (dateSet.length && this.referenceIndex === null) {\n                this.referenceIndex = i;\n            }\n        }\n    },\n\n    //----------------------------------------------------------------------\n    // Public\n    //----------------------------------------------------------------------\n\n    /**\n     * Returns the index of a date in a given datesetIndex. This can be considered\n     * as the date class itself.\n     *\n     * @param  {number} datesetIndex\n     * @param  {string} date\n     * @return {number}\n     */\n    dateClass: function (datesetIndex, date) {\n        return this.dateSets[datesetIndex].indexOf(date);\n    },\n    /**\n     * returns the dates occuring in a given class\n     *\n     * @param  {number} dateClass\n     * @return {string[]}\n     */\n    dateClassMembers: function (dateClass) {\n        return _.uniq(_.compact(this.dateSets.map(function (dateSet) {\n            return dateSet[dateClass];\n        })));\n    },\n    /**\n     * return the representative of a date class from a date set specified by an\n     * index.\n     *\n     * @param  {number} dateClass\n     * @param  {number} [index]\n     * @return {string}\n     */\n    representative: function (dateClass, index) {\n        index = index === undefined ? this.referenceIndex : index;\n        return this.dateSets[index][dateClass];\n    },\n});\n/**\n * @param {Number} value\n * @param {Number} comparisonValue\n * @returns {Number}\n */\nfunction computeVariation(value, comparisonValue) {\n    if (isNaN(value) || isNaN(comparisonValue)) {\n        return NaN;\n    }\n    if (comparisonValue === 0) {\n        if (value === 0) {\n            return 0;\n        } else if (value > 0) {\n            return 1;\n        } else {\n            return -1;\n        }\n    }\n    return (value - comparisonValue) / Math.abs(comparisonValue);\n}\n/**\n * @param {Number} variation\n * @param {Object} field\n * @param {Object} options\n * @returns {Object}\n */\nfunction renderVariation(variation, field, options) {\n    var className = 'o_variation';\n    var value;\n    if (!isNaN(variation)) {\n        if (variation > 0) {\n            className += ' o_positive text-success';\n        } else if (variation < 0) {\n            className += ' o_negative text-danger';\n        } else {\n            className += ' o_null';\n        }\n        value = fieldUtils.format.percentage(variation, field, options);\n    } else {\n        value = '-';\n    }\n    return $('<div>', {class: className, html: value});\n}\n/**\n * @param {JQuery} $node\n * @param {Number} value\n * @param {Number} comparisonValue\n * @param {Number} variation\n * @param {function} formatter\n * @param {Object} field\n * @param {Object} options\n * @returns {Object}\n */\nfunction renderComparison($node, value, comparisonValue, variation, formatter, field, options) {\n    var $variation = renderVariation(variation, field, options);\n    $node.append($variation);\n    if (!isNaN(variation)) {\n        $node.append(\n            $('<div>', {class: 'o_comparison'})\n            .html(formatter(value, field, options) + ' <span>vs</span> ' + formatter(comparisonValue, field, options))\n        );\n    }\n}\n\nreturn {\n    computeVariation: computeVariation,\n    DateClasses: DateClasses,\n    renderComparison: renderComparison,\n    renderVariation: renderVariation,\n};\n\n});\n", "odoo.define('web.framework', function (require) {\n\"use strict\";\n\nvar core = require('web.core');\nvar ajax = require('web.ajax');\nvar Widget = require('web.Widget');\nconst {sprintf} = require('web.utils')\n\nvar _t = core._t;\n\nvar messages_by_seconds = function() {\n    return [\n        [0, _t(\"Loading...\")],\n        [20, _t(\"Still loading...\")],\n        [60, _t(\"Still loading...<br />Please be patient.\")],\n        [120, _t(\"Don't leave yet,<br />it's still loading...\")],\n        [300, _t(\"You may not believe it,<br />but the application is actually loading...\")],\n        [420, _t(\"Take a minute to get a coffee,<br />because it's loading...\")],\n        [3600, _t(\"Maybe you should consider reloading the application by pressing F5...\")]\n    ];\n};\n\nvar Throbber = Widget.extend({\n    template: \"Throbber\",\n    start: function() {\n        this.start_time = new Date().getTime();\n        this.act_message();\n    },\n    act_message: function() {\n        var self = this;\n        setTimeout(function() {\n            if (self.isDestroyed())\n                return;\n            var seconds = (new Date().getTime() - self.start_time) / 1000;\n            var mes;\n            _.each(messages_by_seconds(), function(el) {\n                if (seconds >= el[0])\n                    mes = el[1];\n            });\n            self.$(\".oe_throbber_message\").html(mes);\n            self.act_message();\n        }, 1000);\n    },\n});\n\n/** Setup blockui */\nif ($.blockUI) {\n    $.blockUI.defaults.baseZ = 1100;\n    $.blockUI.defaults.message = '<div class=\"openerp oe_blockui_spin_container\" style=\"background-color: transparent;\">';\n    $.blockUI.defaults.css.border = '0';\n    $.blockUI.defaults.css[\"background-color\"] = '';\n}\n\n\n/**\n * Remove the \"accesskey\" attributes to avoid the use of the access keys\n * while the blockUI is enable.\n */\n\nfunction blockAccessKeys() {\n    var elementWithAccessKey = [];\n    elementWithAccessKey = document.querySelectorAll('[accesskey]');\n    _.each(elementWithAccessKey, function (elem) {\n        elem.setAttribute(\"data-accesskey\",elem.getAttribute('accesskey'));\n        elem.removeAttribute('accesskey');\n    });\n}\n\nfunction unblockAccessKeys() {\n    var elementWithDataAccessKey = [];\n    elementWithDataAccessKey = document.querySelectorAll('[data-accesskey]');\n    _.each(elementWithDataAccessKey, function (elem) {\n        elem.setAttribute('accesskey', elem.getAttribute('data-accesskey'));\n        elem.removeAttribute('data-accesskey');\n    });\n}\n\nvar throbbers = [];\n\nfunction blockUI() {\n    var tmp = $.blockUI.apply($, arguments);\n    var throbber = new Throbber();\n    throbbers.push(throbber);\n    throbber.appendTo($(\".oe_blockui_spin_container\"));\n    $(document.body).addClass('o_ui_blocked');\n    blockAccessKeys();\n    return tmp;\n}\n\nfunction unblockUI() {\n    _.invoke(throbbers, 'destroy');\n    throbbers = [];\n    $(document.body).removeClass('o_ui_blocked');\n    unblockAccessKeys();\n    return $.unblockUI.apply($, arguments);\n}\n\n/**\n * Redirect to url by replacing window.location\n * If wait is true, sleep 1s and wait for the server i.e. after a restart.\n */\nfunction redirect (url, wait) {\n    var load = function() {\n        var old = \"\" + window.location;\n        var old_no_hash = old.split(\"#\")[0];\n        var url_no_hash = url.split(\"#\")[0];\n        location.assign(url);\n        if (old_no_hash === url_no_hash) {\n            location.reload(true);\n        }\n    };\n\n    var wait_server = function() {\n        ajax.rpc(\"/web/webclient/version_info\", {}).then(load).guardedCatch(function () {\n            setTimeout(wait_server, 250);\n        });\n    };\n\n    if (wait) {\n        setTimeout(wait_server, 1000);\n    } else {\n        load();\n    }\n}\n\n//  * Client action to reload the whole interface.\n//  * If params.menu_id, it opens the given menu entry.\n//  * If params.wait, reload will wait the openerp server to be reachable before reloading\n\nfunction Reload(parent, action) {\n    var params = action.params || {};\n    var menu_id = params.menu_id || false;\n    var l = window.location;\n\n    var sobj = $.deparam(l.search.substr(1));\n    if (params.url_search) {\n        sobj = _.extend(sobj, params.url_search);\n    }\n    var search = '?' + $.param(sobj);\n\n    var hash = l.hash;\n    if (menu_id) {\n        hash = \"#menu_id=\" + menu_id;\n    }\n    var url = l.protocol + \"//\" + l.host + l.pathname + search + hash;\n\n    // Clear cache\n    core.bus.trigger('clear_cache');\n\n    redirect(url, params.wait);\n}\n\ncore.action_registry.add(\"reload\", Reload);\n\n\n/**\n * Client action to go back home.\n */\nfunction Home (parent, action) {\n    var url = '/' + (window.location.search || '');\n    redirect(url, action && action.params && action.params.wait);\n}\ncore.action_registry.add(\"home\", Home);\n\nfunction login() {\n    redirect('/web/login');\n}\ncore.action_registry.add(\"login\", login);\n\nfunction logout() {\n    redirect('/web/session/logout');\n}\ncore.action_registry.add(\"logout\", logout);\n\n/**\n * @param {ActionManager} parent\n * @param {Object} action\n * @param {Object} action.params notification params\n * @see ServiceMixin.displayNotification\n */\nfunction displayNotification(parent, action) {\n    let {title='', message='', links=[], type='info', sticky=false, next} = action.params || {};\n    links = links.map(({url, label}) => `<a href=\"${_.escape(url)}\" target=\"_blank\">${_.escape(label)}</a>`)\n    parent.displayNotification({\n        title, // no escape for the title because it is done in the template\n        message: sprintf(_.escape(message), ...links),\n        type,\n        sticky,\n        messageIsHtml: true, // dynamic parts of the message are escaped above\n    });\n    return next;\n}\ncore.action_registry.add(\"display_notification\", displayNotification);\n\n/**\n * Client action to refresh the session context (making sure\n * HTTP requests will have the right one) then reload the\n * whole interface.\n */\nfunction ReloadContext (parent, action) {\n    // side-effect of get_session_info is to refresh the session context\n    ajax.rpc(\"/web/session/get_session_info\", {}).then(function() {\n        Reload(parent, action);\n    });\n}\ncore.action_registry.add(\"reload_context\", ReloadContext);\n\n// In Internet Explorer, document doesn't have the contains method, so we make a\n// polyfill for the method in order to be compatible.\nif (!document.contains) {\n    document.contains = function contains (node) {\n        if (!(0 in arguments)) {\n            throw new TypeError('1 argument is required');\n        }\n\n        do {\n            if (this === node) {\n                return true;\n            }\n        } while (node = node && node.parentNode);\n\n        return false;\n    };\n}\n\nreturn {\n    blockUI: blockUI,\n    unblockUI: unblockUI,\n    redirect: redirect,\n};\n\n});\n", "/** @odoo-module **/\n\n/* eslint-disable comma-dangle */\n\nimport registry from \"web.field_registry\";\nimport basicFfields from \"web.basic_fields\";\nimport core from \"web.core\";\nconst qweb = core.qweb;\n\n/**\n * This widget is intended to be used on Text fields. It will provide Ace Editor\n * for display XML and Python profiling.\n */\nconst ProfilingQwebView = basicFfields.AceEditor.extend({\n    template: \"web.ProfilingQwebView\",\n    xmlDependencies: [\"/web/static/src/xml/debug.xml\"],\n    events: _.extend({}, basicFfields.AceEditor.prototype.events, {\n        \"click .dropdown-menu a\": \"_onSelectView\",\n    }),\n    /**\n     * @override\n     * @params parent {Widget}\n     */\n    init: function () {\n        this._super.apply(this, arguments);\n        // {template, xpath, directive, time, duration, query }[]\n        const results = (this.value && JSON.parse(this.value)[0].results) || {\n            archs: {},\n            data: [],\n        };\n        this.profileLines = results.data;\n        this.viewArch = results.archs;\n        this.viewIDs = Array.from(new Set(this.profileLines.map((line) => line.view_id)));\n        for (const line of this.profileLines) {\n            line.xpath = line.xpath.replace(/([^\\]])\\//g, \"$1[1]/\").replace(/([^\\]])$/g, \"$1[1]\");\n        }\n        this.viewID = this.profileLines.length ? this.profileLines[0].view_id : 0;\n        this.mode = \"readonly\";\n    },\n    /**\n     * Search xml view\n     *\n     * @override\n     * @returns {Promise}\n     */\n    willStart: async function () {\n        const _super = this._super;\n        this.views = await this._rpc({\n            model: \"ir.ui.view\",\n            method: \"search_read\",\n            fields: [\"id\", \"display_name\", \"key\"],\n            domain: [[\"id\", \"in\", this.viewIDs]],\n        });\n        for (const view of this.views) {\n            view.delay = 0;\n            view.query = 0;\n            const lines = this.profileLines.filter((l) => l.view_id === view.id);\n            const root = lines.find((l) => l.xpath === \"\");\n            if (root) {\n                view.delay += root.delay;\n                view.query += root.query;\n            } else {\n                view.delay = lines.map((l) => l.delay).reduce((a, b) => a + b);\n                view.query = lines.map((l) => l.query).reduce((a, b) => a + b);\n            }\n            view.delay = Math.ceil(view.delay * 10) / 10;\n        }\n        await _super.call(this);\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Set view to render\n     *\n     * @override\n     * @returns {Promise}\n     */\n    _render: function () {\n        this.view = this.views.find((view) => view.id === this.viewID);\n        if (this.view) {\n            const content = this.$(\".dropdown-menu a[data-id=\" + this.view.id + \"]\").html();\n            this.$(\".dropdown-toggle\").empty().append(content);\n            const arch = this.viewArch[this.view.id] || \"\";\n            if (this.aceSession.getValue() !== arch) {\n                this.aceSession.setValue(arch);\n            }\n        } else {\n            this.aceSession.setValue(\"\");\n        }\n    },\n    _renderProfilingInformation: function () {\n        let flat = {};\n        let arch = [{ xpath: \"\", children: [] }];\n        const $rows = this.$(\".ace_gutter .ace_gutter-cell\");\n        $rows.find(\".o_info\").remove();\n\n        this.$(\".ace_tag-open, .ace_end-tag-close, .ace_end-tag-open, .ace_qweb\").each(\n            (i, node) => {\n                const $node = $(node);\n                const parent = arch[arch.length - 1];\n                let xpath = parent.xpath;\n                if ($node.hasClass(\"ace_end-tag-close\")) {\n                    // Close tag.\n                    const tag = $node.prevAll(\".ace_tag-name:first\").text();\n                    if (parent.tag === tag) {\n                        // can be different when scroll because ace does not display the previous lines.\n                        arch.pop();\n                    }\n                } else if ($node.hasClass(\"ace_end-tag-open\")) {\n                    // Auto close tag.\n                    const tag = $node.next().text();\n                    if (parent.tag === tag) {\n                        // can be different when scroll because ace does not display the previous lines.\n                        arch.pop();\n                    }\n                } else if ($node.hasClass(\"ace_qweb\")) {\n                    // QWeb attribute.\n                    const directive = $node.text();\n                    parent.directive.push({\n                        el: node,\n                        directive: directive,\n                    });\n\n                    // Compute delay and query number.\n                    let delay = 0;\n                    let query = 0;\n                    for (const line of this.profileLines) {\n                        if (\n                            line.view_id === this.viewID &&\n                            line.xpath === xpath &&\n                            line.directive.includes(directive)\n                        ) {\n                            delay += line.delay;\n                            query += line.query;\n                        }\n                    }\n\n                    // Render delay and query number in span visible on hover.\n                    if ((delay || query) && !$node.children(\".o_info\").length) {\n                        $(\n                            qweb.render(\"web.ProfilingQwebView.hover\", {\n                                delay: this._formatDelay(delay),\n                                query: query,\n                            })\n                        ).prependTo($node);\n                    }\n                } else if ($node.hasClass(\"ace_tag-open\")) {\n                    // Open tag.\n                    const $tag = $node.next(\".ace_tag-name\");\n                    const tag = $tag.text();\n                    const $row = $($rows[$tag.parent(\".ace_line\").index()]);\n\n                    // Add a children to the arch and compute the xpath.\n                    xpath += \"/\" + tag;\n                    let i = 1;\n                    while (flat[xpath + \"[\" + i + \"]\"]) {\n                        i++;\n                    }\n                    xpath += \"[\" + i + \"]\";\n                    flat[xpath] = { xpath: xpath, tag: tag, children: [], directive: [] };\n                    arch.push(flat[xpath]);\n                    parent.children.push(flat[xpath]);\n\n                    // Compute delay and query number.\n                    const closed = !!$row.find(\".ace_closed\").length;\n                    const delays = [];\n                    const querys = [];\n                    const groups = {};\n                    let displayDetail = false;\n                    for (const line of this.profileLines) {\n                        if (\n                            line.view_id === this.viewID &&\n                            (closed ? line.xpath.startsWith(xpath) : line.xpath === xpath)\n                        ) {\n                            delays.push(line.delay);\n                            querys.push(line.query);\n                            const directive = line.directive.split(\"=\")[0];\n                            if (!groups[directive]) {\n                                groups[directive] = {\n                                    delays: [],\n                                    querys: [],\n                                };\n                            } else {\n                                displayDetail = true;\n                            }\n                            groups[directive].delays.push(this._formatDelay(line.delay));\n                            groups[directive].querys.push(line.query);\n                        }\n                    }\n\n                    // Display delay and query number in front of the line.\n                    if (delays.length && !$row.children(\".o_info\").length) {\n                        $(\n                            qweb.render(\"web.ProfilingQwebView.info\", {\n                                delay: this._formatDelay(delays.reduce((a, b) => a + b, 0)),\n                                query: querys.reduce((a, b) => a + b, 0) || \".\",\n                                detail: displayDetail,\n                                groups: groups,\n                            })\n                        ).prependTo($row);\n                    }\n                }\n                $node.attr(\"data-xpath\", xpath);\n            }\n        );\n    },\n    _formatDelay: function (delay) {\n        return delay ? _.str.sprintf(\"%.1f\", Math.ceil(delay * 10) / 10) : \".\";\n    },\n    /**\n     * Starts the ace library on the given DOM element. This initializes the\n     * ace editor in readonly mode.\n     *\n     * @private\n     * @param {Node} node - the DOM element the ace library must initialize on\n     */\n    _startAce: function (node) {\n        this.aceEditor = window.ace.edit(node);\n        this.aceEditor.setOptions({\n            maxLines: Infinity,\n            showPrintMargin: false,\n            highlightActiveLine: false,\n            highlightGutterLine: true,\n            readOnly: true,\n        });\n        this.aceEditor.renderer.setOptions({\n            displayIndentGuides: true,\n            showGutter: true,\n        });\n        this.aceEditor.renderer.$cursorLayer.element.style.display = \"none\";\n\n        this.aceEditor.$blockScrolling = true;\n        this.aceSession = this.aceEditor.getSession();\n        this.aceSession.setOptions({\n            useWorker: false,\n            mode: \"ace/mode/qweb\",\n            tabSize: 2,\n            useSoftTabs: true,\n        });\n\n        // Ace render 3 times when change the value and 1 time per click.\n        this.aceEditor.renderer.on(\"afterRender\", this._renderProfilingInformation.bind(this));\n    },\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onSelectView: function (ev) {\n        ev.preventDefault();\n        this.viewID = +$(ev.currentTarget).data(\"id\");\n        this._render();\n    },\n});\n\nregistry.add(\"profiling_qweb_view\", ProfilingQwebView);\n", "odoo.define('web.AbstractField', function (require) {\n\"use strict\";\n\n/**\n * This is the basic field widget used by all the views to render a field in a view.\n * These field widgets are mostly common to all views, in particular form and list\n * views.\n *\n * The responsabilities of a field widget are mainly:\n * - render a visual representation of the current value of a field\n * - that representation is either in 'readonly' or in 'edit' mode\n * - notify the rest of the system when the field has been changed by\n *   the user (in edit mode)\n *\n * Notes\n * - the widget is not supposed to be able to switch between modes.  If another\n *   mode is required, the view will take care of instantiating another widget.\n * - notify the system when its value has changed and its mode is changed to 'readonly'\n * - notify the system when some action has to be taken, such as opening a record\n * - the Field widget should not, ever, under any circumstance, be aware of\n *   its parent.  The way it communicates changes with the rest of the system is by\n *   triggering events (with trigger_up).  These events bubble up and are interpreted\n *   by the most appropriate parent.\n *\n * Also, in some cases, it may not be practical to have the same widget for all\n * views. In that situation, you can have a 'view specific widget'.  Just register\n * the widget in the registry prefixed by the view type and a dot.  So, for example,\n * a form specific many2one widget should be registered as 'form.many2one'.\n *\n * @module web.AbstractField\n */\n\nvar field_utils = require('web.field_utils');\nvar Widget = require('web.Widget');\n\nvar AbstractField = Widget.extend({\n    events: {\n        'keydown': '_onKeydown',\n    },\n    custom_events: {\n        navigation_move: '_onNavigationMove',\n    },\n\n    /**\n     * Determines if the field can be quick editable which means that when\n     * the field is clicked and if it's quick editable, it will trigger an event\n     * to the form view to switch into edit mode and then it'll perform\n     * some action (@see quickEdit)\n     */\n    isQuickEditable: false,\n    /**\n     * List of selectors matching elements that must never trigger the 'quick_edit'\n     * event when being clicked on.\n     */\n    quickEditExclusion: [],\n    /**\n    * An object representing fields to be fetched by the model eventhough not present in the view\n    * This object contains \"field name\" as key and an object as value.\n    * That value object must contain the key \"type\"\n    * see FieldBinaryImage for an example.\n    */\n    fieldDependencies: {},\n\n    /**\n     * If this flag is set to true, the field widget will be reset on every\n     * change which is made in the view (if the view supports it). This is\n     * currently a form view feature.\n     */\n    resetOnAnyFieldChange: false,\n    /**\n     * If this flag is given a string, the related BasicModel will be used to\n     * initialize specialData the field might need. This data will be available\n     * through this.record.specialData[this.name].\n     *\n     * @see BasicModel._fetchSpecialData\n     */\n    specialData: false,\n    /**\n     * to override to indicate which field types are supported by the widget\n     *\n     * @type Array<String>\n     */\n    supportedFieldTypes: [],\n\n    /**\n     * To override to give a user friendly name to the widget.\n     *\n     * @type <string>\n     */\n    description: \"\",\n    /**\n     * Currently only used in list view.\n     * If this flag is set to true, the list column name will be empty.\n     */\n    noLabel: false,\n    /**\n     * Currently only used in list view.\n     * If set, this value will be displayed as column name.\n     */\n    label: '',\n    /**\n     * Abstract field class\n     *\n     * @constructor\n     * @param {Widget} parent\n     * @param {string} name The field name defined in the model\n     * @param {Object} record A record object (result of the get method of\n     *   a basic model)\n     * @param {Object} [options]\n     * @param {string} [options.mode=readonly] should be 'readonly' or 'edit'\n     */\n    init: function (parent, name, record, options) {\n        this._super(parent);\n        options = options || {};\n\n        // 'name' is the field name displayed by this widget\n        this.name = name;\n\n        // the datapoint fetched from the model\n        this.record = record;\n\n        // the 'field' property is a description of all the various field properties,\n        // such as the type, the comodel (relation), ...\n        this.field = record.fields[name];\n\n        // the 'viewType' is the type of the view in which the field widget is\n        // instantiated. For standalone widgets, a 'default' viewType is set.\n        this.viewType = options.viewType || 'default';\n\n        // the 'attrs' property contains the attributes of the xml 'field' tag,\n        // the inner views...\n        var fieldsInfo = record.fieldsInfo[this.viewType];\n        this.attrs = options.attrs || (fieldsInfo && fieldsInfo[name]) || {};\n\n        // the 'additionalContext' property contains the attributes to pass through the context.\n        this.additionalContext = options.additionalContext || {};\n\n        // this property tracks the current (parsed if needed) value of the field.\n        // Note that we don't use an event system anymore, using this.get('value')\n        // is no longer valid.\n        this.value = record.data[name];\n\n        // recordData tracks the values for the other fields for the same record.\n        // note that it is expected to be mostly a readonly property, you cannot\n        // use this to try to change other fields value, this is not how it is\n        // supposed to work. Also, do not use this.recordData[this.name] to get\n        // the current value, this could be out of sync after a _setValue.\n        this.recordData = record.data;\n\n        // the 'string' property is a human readable (and translated) description\n        // of the field. Mostly useful to be displayed in various places in the\n        // UI, such as tooltips or create dialogs.\n        this.string = this.attrs.string || this.field.string || this.name;\n\n        // Widget can often be configured in the 'options' attribute in the\n        // xml 'field' tag.  These options are saved (and evaled) in nodeOptions\n        this.nodeOptions = this.attrs.options || {};\n\n        // dataPointID is the id corresponding to the current record in the model.\n        // Its intended use is to be able to tag any messages going upstream,\n        // so the view knows which records was changed for example.\n        this.dataPointID = record.id;\n\n        // this is the res_id for the record in database.  Obviously, it is\n        // readonly.  Also, when the user is creating a new record, there is\n        // no res_id.  When the record will be created, the field widget will\n        // be destroyed (when the form view switches to readonly mode) and a new\n        // widget with a res_id in mode readonly will be created.\n        this.res_id = record.res_id;\n\n        // useful mostly to trigger rpcs on the correct model\n        this.model = record.model;\n\n        // a widget can be in two modes: 'edit' or 'readonly'.  This mode should\n        // never be changed, if a view changes its mode, it will destroy and\n        // recreate a new field widget.\n        this.mode = options.mode || \"readonly\";\n\n        // the widget can be readonly because of a modifier\n        this.hasReadonlyModifier = options.hasReadonlyModifier || false;\n\n        // this flag tracks if the widget is in a valid state, meaning that the\n        // current value represented in the DOM is a value that can be parsed\n        // and saved.  For example, a float field can only use a number and not\n        // a string.\n        this._isValid = true;\n\n        // this is the last value that was set by the user, unparsed.  This is\n        // used to avoid setting the value twice in a row with the exact value.\n        this.lastSetValue = undefined;\n\n        // formatType is used to determine which format (and parse) functions\n        // to call to format the field's value to insert into the DOM (typically\n        // put into a span or an input), and to parse the value from the input\n        // to send it to the server. These functions are chosen according to\n        // the 'widget' attrs if is is given, and if it is a valid key, with a\n        // fallback on the field type, ensuring that the value is formatted and\n        // displayed according to the chosen widget, if any.\n        this.formatType = this.attrs.widget in field_utils.format ?\n                            this.attrs.widget :\n                            this.field.type;\n        // formatOptions (resp. parseOptions) is a dict of options passed to\n        // calls to the format (resp. parse) function.\n        this.formatOptions = {};\n        this.parseOptions = {};\n\n        // if we add decorations, we need to reevaluate the field whenever any\n        // value from the record is changed\n        if (this.attrs.decorations) {\n            this.resetOnAnyFieldChange = true;\n        }\n        this._canQuickEdit = this.isQuickEditable;\n    },\n    /**\n     * When a field widget is appended to the DOM, its start method is called,\n     * and will automatically call render. Most widgets should not override this.\n     *\n     * @returns {Promise}\n     */\n    start: function () {\n        var self = this;\n        return this._super.apply(this, arguments).then(function () {\n            self.$el.attr('name', self.name);\n            self.$el.addClass('o_field_widget');\n            self.$el.toggleClass('o_quick_editable', self._canQuickEdit);\n            if (self.viewType === 'form') {\n                self.$el.on('click', self._onClick.bind(self));\n            }\n            return self._render();\n        });\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Activates the field widget. By default, activation means focusing and\n     * selecting (if possible) the associated focusable element. The selecting\n     * part can be disabled.  In that case, note that the focused input/textarea\n     * will have the cursor at the very end.\n     *\n     * @param {Object} [options]\n     * @param {boolean} [options.noselect=false] if false and the input\n     *   is of type text or textarea, the content will also be selected\n     * @param {Event} [options.event] the event which fired this activation\n     * @returns {boolean} true if the widget was activated, false if the\n     *                    focusable element was not found or invisible\n     */\n    activate: function (options) {\n        if (this.isFocusable()) {\n            var $focusable = this.getFocusableElement();\n            $focusable.focus();\n            if ($focusable.is('input[type=\"text\"], textarea')) {\n                $focusable[0].selectionStart = $focusable[0].selectionEnd = $focusable[0].value.length;\n                if (options && !options.noselect) {\n                    $focusable.select();\n                }\n            }\n            return true;\n        }\n        return false;\n    },\n    /**\n     * This function should be implemented by widgets that are not able to\n     * notify their environment when their value changes (maybe because their\n     * are not aware of the changes) or that may have a value in a temporary\n     * state (maybe because some action should be performed to validate it\n     * before notifying it). This is typically called before trying to save the\n     * widget's value, so it should call _setValue() to notify the environment\n     * if the value changed but was not notified.\n     *\n     * @abstract\n     * @returns {Promise|undefined}\n     */\n    commitChanges: function () {},\n    /**\n     * This function is called when the form view auto focus a field for\n     * quick editing. Some fields have a special behaviour for the quick edit\n     * like the checkbox: when we click on checkbox to quick-edit it,\n     * it toggles its value as we've already been in edit mode.\n     *\n     * @param {any} extraInfo info to change the behaviour\n     */\n    quickEdit: function (extraInfo) {\n        if (this._canQuickEdit && this.mode !== \"readonly\") {\n            this._quickEdit(extraInfo);\n        }\n    },\n    /**\n     * Returns the main field's DOM element (jQuery form) which can be focused\n     * by the browser.\n     *\n     * @returns {jQuery} main focusable element inside the widget\n     */\n    getFocusableElement: function () {\n        return $();\n    },\n    /**\n     * Returns whether or not the field is empty and can thus be hidden. This\n     * method is typically called when the widget is in readonly, to hide it\n     * (and its label) if it is empty.\n     *\n     * @returns {boolean}\n     */\n    isEmpty: function () {\n        return !this.isSet();\n    },\n    /**\n     * Returns true iff the widget has a visible element that can take the focus\n     *\n     * @returns {boolean}\n     */\n    isFocusable: function () {\n        var $focusable = this.getFocusableElement();\n        return $focusable.length && $focusable.is(':visible');\n    },\n    /**\n     * this method is used to determine if the field value is set to a meaningful\n     * value.  This is useful to determine if a field should be displayed as empty\n     *\n     * @returns {boolean}\n     */\n    isSet: function () {\n        return !!this.value;\n    },\n    /**\n     * A field widget is valid if it was checked as valid the last time its\n     * value was changed by the user. This is checked before saving a record, by\n     * the view.\n     *\n     * Note: this is the responsibility of the view to check that required\n     * fields have a set value.\n     *\n     * @returns {boolean} true/false if the widget is valid\n     */\n    isValid: function () {\n        return this._isValid;\n    },\n    /**\n     * this method is supposed to be called from the outside of field widgets.\n     * The typical use case is when an onchange has changed the widget value.\n     * It will reset the widget to the values that could have changed, then will\n     * rerender the widget.\n     *\n     * @param {any} record\n     * @param {OdooEvent} [event] an event that triggered the reset action. It\n     *   is optional, and may be used by a widget to share information from the\n     *   moment a field change event is triggered to the moment a reset\n     *   operation is applied.\n     * @returns {Promise} A promise, which resolves when the widget rendering\n     *   is complete\n     */\n    reset: function (record, event) {\n        this._reset(record, event);\n        return this._render() || Promise.resolve();\n    },\n    /**\n     * Remove the invalid class on a field\n     */\n    removeInvalidClass: function () {\n        this.$el.removeClass('o_field_invalid');\n        this.$el.removeAttr('aria-invalid');\n    },\n    /**\n     * Sets the given id on the focusable element of the field and as 'for'\n     * attribute of potential internal labels.\n     *\n     * @param {string} id\n     */\n    setIDForLabel: function (id) {\n        this.getFocusableElement().attr('id', id);\n    },\n    /**\n     * add the invalid class on a field\n     */\n    setInvalidClass: function () {\n        this.$el.addClass('o_field_invalid');\n        this.$el.attr('aria-invalid', 'true');\n    },\n    /**\n     * Update the modifiers with the newest value.\n     * Now this.attrs.modifiersValue can be used consistantly even with\n     * conditional modifiers inside field widgets, and without needing new\n     * events or synchronization between the widgets, renderer and controller\n     *\n     * @param {Object | null} modifiers  the updated modifiers\n     * @override\n     */\n    updateModifiersValue: function(modifiers) {\n        this.attrs.modifiersValue = modifiers || {};\n    },\n\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Apply field decorations (only if field-specific decorations have been\n     * defined in an attribute).\n     *\n     * @private\n     */\n    _applyDecorations: function () {\n        var self = this;\n        this.attrs.decorations.forEach(function (dec) {\n            var isToggled = py.PY_isTrue(\n                py.evaluate(dec.expression, self.record.evalContext)\n            );\n            const className = self._getClassFromDecoration(dec.name);\n            self.$el.toggleClass(className, isToggled);\n        });\n    },\n    /**\n     * @private\n     * @see quickEdit\n     * @param {any} extraInfo info to change the behaviour\n     */\n    _quickEdit: function (extraInfo) {\n        this.activate({noAutomaticCreate: true});\n    },\n    /**\n     * Converts the value from the field to a string representation.\n     *\n     * @private\n     * @param {any} value (from the field type)\n     * @param {string} [formatType=this.formatType] the formatter to use\n     * @returns {string}\n     */\n    _formatValue: function (value, formatType) {\n        formatType = formatType || this.formatType;\n        if (!formatType) {\n            throw new Error(`Missing format type for '${this.name}' value from the '${this.model}' model`);\n        }\n        var options = _.extend({}, this.nodeOptions, { data: this.recordData }, this.formatOptions);\n        return field_utils.format[formatType](value, this.field, options);\n    },\n    /**\n     * Returns the className corresponding to a given decoration. A\n     * decoration is of the form 'decoration-%s'. By default, replaces\n     * 'decoration' by 'text'.\n     *\n     * @private\n     * @param {string} decoration must be of the form 'decoration-%s'\n     * @returns {string}\n     */\n    _getClassFromDecoration: function (decoration) {\n        return `text-${decoration.split('-')[1]}`;\n    },\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     * @returns {Object}\n     */\n    _getQuickEditExtraInfo(ev) {\n        return {};\n    },\n    /**\n     * Compares the given value with the last value that has been set.\n     * Note that we compare unparsed values. Handles the special case where no\n     * value has been set yet, and the given value is the empty string.\n     *\n     * @private\n     * @param {any} value\n     * @returns {boolean} true iff values are the same\n     */\n    _isLastSetValue: function (value) {\n        return this.lastSetValue === value || (this.value === false && value === '');\n    },\n    /**\n     * This method check if a value is the same as the current value of the\n     * field.  For example, a fieldDate widget might want to use the moment\n     * specific value isSame instead of ===.\n     *\n     * This method is used by the _setValue method.\n     *\n     * @private\n     * @param {any} value\n     * @returns {boolean}\n     */\n    _isSameValue: function (value) {\n        return this.value === value;\n    },\n    /**\n     * Converts a string representation to a valid value.\n     *\n     * @private\n     * @param {string} value\n     * @returns {any}\n     */\n    _parseValue: function (value) {\n        return field_utils.parse[this.formatType](value, this.field, this.parseOptions);\n    },\n    /**\n     * main rendering function.  Override this if your widget has the same render\n     * for each mode.  Note that this function is supposed to be idempotent:\n     * the result of calling 'render' twice is the same as calling it once.\n     * Also, the user experience will be better if your rendering function is\n     * synchronous.\n     *\n     * @private\n     * @returns {Promise|undefined}\n     */\n    _render: function () {\n        if (this.attrs.decorations) {\n            this._applyDecorations();\n        }\n        if (this.mode === 'edit') {\n            return this._renderEdit();\n        } else if (this.mode === 'readonly') {\n            return this._renderReadonly();\n        }\n    },\n    /**\n     * Render the widget in edit mode.  The actual implementation is left to the\n     * concrete widget.\n     *\n     * @private\n     * @returns {Promise|undefined}\n     */\n    _renderEdit: function () {\n    },\n    /**\n     * Render the widget in readonly mode.  The actual implementation is left to\n     * the concrete widget.\n     *\n     * @private\n     * @returns {Promise|undefined}\n     */\n    _renderReadonly: function () {\n    },\n    /**\n     * pure version of reset, can be overridden, called before render()\n     *\n     * @private\n     * @param {any} record\n     * @param {OdooEvent} event the event that triggered the change\n     */\n    _reset: function (record, event) {\n        this.lastSetValue = undefined;\n        this.record = record;\n        this.value = record.data[this.name];\n        this.recordData = record.data;\n    },\n    /**\n     * this method is called by the widget, to change its value and to notify\n     * the outside world of its new state.  This method also validates the new\n     * value.  Note that this method does not rerender the widget, it should be\n     * handled by the widget itself, if necessary.\n     *\n     * @private\n     * @param {any} value\n     * @param {Object} [options]\n     * @param {boolean} [options.doNotSetDirty=false] if true, the basic model\n     *   will not consider that this field is dirty, even though it was changed.\n     *   Please do not use this flag unless you really need it.  Our only use\n     *   case is currently the pad widget, which does a _setValue in the\n     *   renderEdit method.\n     * @param {boolean} [options.notifyChange=true] if false, the basic model\n     *   will not notify and not trigger the onchange, even though it was changed.\n     * @param {boolean} [options.forceChange=false] if true, the change event will be\n     *   triggered even if the new value is the same as the old one\n     * @returns {Promise}\n     */\n    _setValue: function (value, options) {\n        // we try to avoid doing useless work, if the value given has not changed.\n        if (this._isLastSetValue(value)) {\n            return Promise.resolve();\n        }\n        this.lastSetValue = value;\n        try {\n            value = this._parseValue(value);\n            this._isValid = true;\n        } catch (e) {\n            this._isValid = false;\n            this.trigger_up('set_dirty', {dataPointID: this.dataPointID});\n            return Promise.reject({message: \"Value set is not valid\"});\n        }\n        if (!(options && options.forceChange) && this._isSameValue(value)) {\n            return Promise.resolve();\n        }\n        var self = this;\n        return new Promise(function (resolve, reject) {\n            var changes = {};\n            changes[self.name] = value;\n            self.trigger_up('field_changed', {\n                dataPointID: self.dataPointID,\n                changes: changes,\n                viewType: self.viewType,\n                doNotSetDirty: options && options.doNotSetDirty,\n                notifyChange: !options || options.notifyChange !== false,\n                allowWarning: options && options.allowWarning,\n                onSuccess: resolve,\n                onFailure: reject,\n            });\n        });\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Triggers quick edit only if the field is authorized to do it.\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClick: function (ev) {\n        if (!this.hasReadonlyModifier && this._canQuickEdit && this.mode === 'readonly' &&\n            !this.quickEditExclusion.some(x => ev.target.closest(x))\n        ) {\n            this.trigger_up('quick_edit', {\n                fieldName: this.name,\n                target: this.el,\n                extraInfo: this._getQuickEditExtraInfo(ev),\n            });\n        }\n    },\n    /**\n     * Intercepts navigation keyboard events to prevent their default behavior\n     * and notifies the view so that it can handle it its own way.\n     *\n     * Note: the navigation keyboard events are stopped so that potential parent\n     * abstract field does not trigger the navigation_move event a second time.\n     * However, this might be controversial, we might wanna let the event\n     * continue its propagation and flag it to say that navigation has already\n     * been handled (TODO ?).\n     *\n     * @private\n     * @param {KeyEvent} ev\n     */\n    _onKeydown: function (ev) {\n        switch (ev.which) {\n            case $.ui.keyCode.TAB:\n                var event = this.trigger_up('navigation_move', {\n                    direction: ev.shiftKey ? 'previous' : 'next',\n                });\n                if (event.is_stopped()) {\n                    ev.preventDefault();\n                    ev.stopPropagation();\n                }\n                break;\n            case $.ui.keyCode.ENTER:\n                // We preventDefault the ENTER key because of two coexisting behaviours:\n                // - In HTML5, pressing ENTER on a <button> triggers two events: a 'keydown' AND a 'click'\n                // - When creating and opening a dialog, the focus is automatically given to the primary button\n                // The end result caused some issues where a modal opened by an ENTER keypress (e.g. saving\n                // changes in multiple edition) confirmed the modal without any intentionnal user input.\n                ev.preventDefault();\n                ev.stopPropagation();\n                this.trigger_up('navigation_move', {direction: 'next_line'});\n                break;\n            case $.ui.keyCode.ESCAPE:\n                this.trigger_up('navigation_move', {direction: 'cancel', originalEvent: ev});\n                break;\n            case $.ui.keyCode.UP:\n                ev.stopPropagation();\n                this.trigger_up('navigation_move', {direction: 'up'});\n                break;\n            case $.ui.keyCode.RIGHT:\n                ev.stopPropagation();\n                this.trigger_up('navigation_move', {direction: 'right'});\n                break;\n            case $.ui.keyCode.DOWN:\n                ev.stopPropagation();\n                this.trigger_up('navigation_move', {direction: 'down'});\n                break;\n            case $.ui.keyCode.LEFT:\n                ev.stopPropagation();\n                this.trigger_up('navigation_move', {direction: 'left'});\n                break;\n        }\n    },\n    /**\n     * Updates the target data value with the current AbstractField instance.\n     * This allows to consider the parent field in case of nested fields. The\n     * field which triggered the event is still accessible through ev.target.\n     *\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onNavigationMove: function (ev) {\n        ev.data.target = this;\n    },\n});\n\nreturn AbstractField;\n\n});\n", "odoo.define('web.AbstractFieldOwl', function (require) {\n    \"use strict\";\n\n    const field_utils = require('web.field_utils');\n    const { useListener } = require('web.custom_hooks');\n    const { useEffect } = require(\"@web/core/utils/hooks\");\n\n    /**\n     * This file defines the Owl version of the AbstractField. Specific fields\n     * written in Owl should override this component.\n     *\n     * =========================================================================\n     *\n     * /!\\ This api works almost exactly like the legacy one but\n     * /!\\ it still could change! There are already a few methods that will be\n     * /!\\ removed like setIdForLabel, setInvalidClass, etc..\n     *\n     * =========================================================================\n     *\n     * This is the basic field component used by all the views to render a field in a view.\n     * These field components are mostly common to all views, in particular form and list\n     * views.\n     *\n     * The responsabilities of a field component are mainly:\n     * - render a visual representation of the current value of a field\n     * - that representation is either in 'readonly' or in 'edit' mode\n     * - notify the rest of the system when the field has been changed by\n     *   the user (in edit mode)\n     *\n     * Notes\n     * - the component is not supposed to be able to switch between modes. If another\n     *   mode is required, the view will take care of instantiating another component.\n     * - notify the system when its value has changed and its mode is changed to 'readonly'\n     * - notify the system when some action has to be taken, such as opening a record\n     * - the Field component should not, ever, under any circumstance, be aware of\n     *   its parent. The way it communicates changes with the rest of the system is by\n     *   triggering events. These events bubble up and are interpreted\n     *   by the most appropriate parent.\n     *\n     * Also, in some cases, it may not be practical to have the same component for all\n     * views. In that situation, you can have a 'view specific component'. Just register\n     * the component in the registry prefixed by the view type and a dot. So, for example,\n     * a form specific many2one component should be registered as 'form.many2one'.\n     *\n     * @module web.AbstractFieldOwl\n     */\n    class AbstractField extends owl.Component {\n        /**\n         * Abstract field class\n         *\n         * @constructor\n         * @param {Component} parent\n         * @param {Object} props\n         * @param {string} props.fieldName The field name defined in the model\n         * @param {Object} props.record A record object (result of the get method\n         *      of a basic model)\n         * @param {Object} [props.options]\n         * @param {string} [props.options.mode=readonly] should be 'readonly' or 'edit'\n         * @param {string} [props.options.viewType=default]\n         */\n        constructor() {\n            super(...arguments);\n\n            this._canQuickEdit = this.constructor.isQuickEditable;\n            this._isValid = true;\n            // this is the last value that was set by the user, unparsed. This is\n            // used to avoid setting the value twice in a row with the exact value.\n            this._lastSetValue = undefined;\n\n            useListener('click', this._onClick);\n            useListener('keydown', this._onKeydown);\n            useListener('navigation-move', this._onNavigationMove);\n            useEffect(() => this._applyDecorations());\n        }\n        /**\n         * Hack: studio tries to find the field with a selector base on its\n         * name, before it is mounted into the DOM. Ideally, this should be\n         * done in the onMounted hook, but in this case we are too late, and\n         * Studio finds nothing. As a consequence, the field can't be edited\n         * by clicking on its label (or on the row formed by the pair label-field).\n         *\n         * TODO: move this to mounted at some point?\n         *\n         * @override\n         */\n        __patch() {\n            const res = super.__patch(...arguments);\n            this.el.setAttribute('name', this.name);\n            this.el.classList.add('o_field_widget');\n            this.el.classList.toggle('o_quick_editable', this._canQuickEdit);\n            return res;\n        }\n        /**\n         * @async\n         * @param {Object} [nextProps]\n         * @returns {Promise}\n         */\n        async willUpdateProps(nextProps) {\n            this._lastSetValue = undefined;\n            return super.willUpdateProps(nextProps);\n        }\n\n        //----------------------------------------------------------------------\n        // Getters\n        //----------------------------------------------------------------------\n\n        /**\n         * This contains the attributes to pass through the context.\n         *\n         * @returns {Object}\n         */\n        get additionalContext() {\n            return this.options.additionalContext || {};\n        }\n        /**\n         * This contains the attributes of the xml 'field' tag, the inner views...\n         *\n         * @returns {Object}\n         */\n        get attrs() {\n            const fieldsInfo = this.record.fieldsInfo[this.viewType];\n            return this.options.attrs || (fieldsInfo && fieldsInfo[this.name]) || {};\n        }\n        /**\n         * Id corresponding to the current record in the model.\n         * Its intended use is to be able to tag any messages going upstream,\n         * so the view knows which records was changed for example.\n         *\n         * @returns {string}\n         */\n        get dataPointId() {\n            return this.record.id;\n        }\n        /**\n         * This is a description of all the various field properties,\n         * such as the type, the comodel (relation), ...\n         *\n         * @returns {string}\n         */\n        get field() {\n            return this.record.fields[this.name];\n        }\n        /**\n         * Returns the main field's DOM element which can be focused by the browser.\n         *\n         * @returns {HTMLElement|null} main focusable element inside the component\n         */\n        get focusableElement() {\n            return null;\n        }\n        /**\n         * Returns the additional options pass to the format function.\n         * Override this getter to add options.\n         *\n         * @returns {Object}\n         */\n        get formatOptions() {\n            return {};\n        }\n        /**\n         * Used to determine which format (and parse) functions\n         * to call to format the field's value to insert into the DOM (typically\n         * put into a span or an input), and to parse the value from the input\n         * to send it to the server. These functions are chosen according to\n         * the 'widget' attrs if is is given, and if it is a valid key, with a\n         * fallback on the field type, ensuring that the value is formatted and\n         * displayed according to the chosen widget, if any.\n         *\n         * @returns {string}\n         */\n        get formatType() {\n            return this.attrs.widget in field_utils.format ?\n                this.attrs.widget : this.field.type;\n        }\n        /**\n         * Returns true if the component is readonly from a modifier\n         *\n         * @returns {boolean}\n         */\n        get hasReadonlyModifier() {\n            return this.options.hasReadonlyModifier || false;\n        }\n        /**\n         * Returns whether or not the field is empty and can thus be hidden. This\n         * method is typically called when the component is in readonly, to hide it\n         * (and its label) if it is empty.\n         *\n         * @returns {boolean}\n         */\n        get isEmpty() {\n            return !this.isSet;\n        }\n        /**\n         * Returns true if the component has a visible element that can take the focus\n         *\n         * @returns {boolean}\n         */\n        get isFocusable() {\n            const focusable = this.focusableElement;\n            // check if element is visible\n            return focusable && !!(focusable.offsetWidth ||\n                focusable.offsetHeight || focusable.getClientRects().length);\n        }\n        /**\n         * Determines if the field value is set to a meaningful\n         * value. This is useful to determine if a field should be displayed as empty\n         *\n         * @returns {boolean}\n         */\n        get isSet() {\n            return !!this.value;\n        }\n        /**\n         * Tracks if the component is in a valid state, meaning that the current\n         * value represented in the DOM is a value that can be parsed and saved.\n         * For example, a float field can only use a number and not a string.\n         *\n         * @returns {boolean}\n         */\n        get isValid() {\n            return this._isValid;\n        }\n        /**\n         * Fields can be in two modes: 'edit' or 'readonly'.\n         *\n         * @returns {string}\n         */\n        get mode() {\n            return this.options.mode || \"readonly\";\n        }\n        /**\n         * Useful mostly to trigger rpcs on the correct model.\n         *\n         * @returns {string}\n         */\n        get model() {\n            return this.record.model;\n        }\n        /**\n         * The field name displayed by this component.\n         *\n         * @returns {string}\n         */\n        get name() {\n            return this.props.fieldName;\n        }\n        /**\n         * Component can often be configured in the 'options' attribute in the\n         * xml 'field' tag. These options are saved (and evaled) in nodeOptions.\n         *\n         * @returns {Object}\n         */\n        get nodeOptions() {\n            return this.attrs.options || {};\n        }\n        /**\n         * @returns {Object}\n         */\n        get options() {\n            return this.props.options || {};\n        }\n        /**\n         * Returns the additional options passed to the parse function.\n         * Override this getter to add options.\n         *\n         * @returns {Object}\n         */\n        get parseOptions() {\n            return {};\n        }\n        /**\n         * The datapoint fetched from the model.\n         *\n         * @returns {Object}\n         */\n        get record() {\n            return this.props.record;\n        }\n        /**\n         * Tracks the values for the other fields for the same record.\n         * note that it is expected to be mostly a readonly property, you cannot\n         * use this to try to change other fields value, this is not how it is\n         * supposed to work. Also, do not use this.recordData[this.name] to get\n         * the current value, this could be out of sync after a _setValue.\n         *\n         * @returns {Object}\n         */\n        get recordData() {\n            return this.record.data;\n        }\n        /**\n         * If this flag is set to true, the field component will be reset on\n         * every change which is made in the view (if the view supports it).\n         * This is currently a form view feature.\n         *\n         * /!\\ This getter could be removed when basic views (form, list, kanban)\n         * are converted.\n         *\n         * @returns {boolean}\n         */\n        get resetOnAnyFieldChange() {\n            return !!this.attrs.decorations;\n        }\n        /**\n         * The res_id of the record in database.\n         * When the user is creating a new record, there is no res_id.\n         * When the record will be created, the field component will\n         * be destroyed (when the form view switches to readonly mode) and a\n         * new component with a res_id in mode readonly will be created.\n         *\n         * @returns {Number}\n         */\n        get resId() {\n            return this.record.res_id;\n        }\n        /**\n         * Human readable (and translated) description of the field.\n         * Mostly useful to be displayed in various places in the\n         * UI, such as tooltips or create dialogs.\n         *\n         * @returns {string}\n         */\n        get string() {\n            return this.attrs.string || this.field.string || this.name;\n        }\n        /**\n         * Tracks the current (parsed if needed) value of the field.\n         *\n         * @returns {any}\n         */\n        get value() {\n            return this.record.data[this.name];\n        }\n        /**\n         * The type of the view in which the field component is instantiated.\n         * For standalone components, a 'default' viewType is set.\n         *\n         * @returns {string}\n         */\n        get viewType() {\n            return this.options.viewType || 'default';\n        }\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        /**\n         * Activates the field component. By default, activation means focusing and\n         * selecting (if possible) the associated focusable element. The selecting\n         * part can be disabled. In that case, note that the focused input/textarea\n         * will have the cursor at the very end.\n         *\n         * @param {Object} [options]\n         * @param {boolean} [options.noselect=false] if false and the input\n         *   is of type text or textarea, the content will also be selected\n         * @param {Event} [options.event] the event which fired this activation\n         * @returns {boolean} true if the component was activated, false if the\n         *                    focusable element was not found or invisible\n         */\n        activate(options) {\n            if (this.isFocusable) {\n                const focusable = this.focusableElement;\n                focusable.focus();\n                if (focusable.matches('input[type=\"text\"], textarea')) {\n                    focusable.selectionStart = focusable.selectionEnd = focusable.value.length;\n                    if (options && !options.noselect) {\n                        focusable.select();\n                    }\n                }\n                return true;\n            }\n            return false;\n        }\n        /**\n         * This function should be implemented by components that are not able to\n         * notify their environment when their value changes (maybe because their\n         * are not aware of the changes) or that may have a value in a temporary\n         * state (maybe because some action should be performed to validate it\n         * before notifying it). This is typically called before trying to save the\n         * component's value, so it should call _setValue() to notify the environment\n         * if the value changed but was not notified.\n         *\n         * @abstract\n         * @returns {Promise|undefined}\n         */\n        commitChanges() {}\n        /**\n         * This function is called when the form view auto focus a field for\n         * quick editing. Some fields have a special behaviour for the quick edit\n         * like the checkbox: when we click on checkbox to quick-edit it,\n         * it toggles its value as we've already been in edit mode.\n         *\n         * @param {any} extraInfo info to change the behaviour\n         */\n        quickEdit(extraInfo) {\n            if (this._canQuickEdit && this.mode !== 'readonly') {\n                this._quickEdit(extraInfo);\n            }\n        }\n        /**\n         * Remove the invalid class on a field\n         *\n         * This function should be removed when BasicRenderer will be rewritten in owl\n         */\n        removeInvalidClass() {\n            this.el.classList.remove('o_field_invalid');\n            this.el.removeAttribute('aria-invalid');\n        }\n        /**\n         * Sets the given id on the focusable element of the field and as 'for'\n         * attribute of potential internal labels.\n         *\n         * This function should be removed when BasicRenderer will be rewritten in owl\n         *\n         * @param {string} id\n         */\n        setIdForLabel(id) {\n            if (this.focusableElement) {\n                this.focusableElement.setAttribute('id', id);\n            }\n        }\n        /**\n         * add the invalid class on a field\n         *\n         * This function should be removed when BasicRenderer will be rewritten in owl\n         */\n        setInvalidClass() {\n            this.el.classList.add('o_field_invalid');\n            this.el.setAttribute('aria-invalid', 'true');\n        }\n\n        //----------------------------------------------------------------------\n        // Private\n        //----------------------------------------------------------------------\n\n        /**\n         * Apply field decorations (only if field-specific decorations have been\n         * defined in an attribute).\n         *\n         * This function should be removed when BasicRenderer will be rewritten in owl\n         *\n         * @private\n         */\n        _applyDecorations() {\n            for (const dec of this.attrs.decorations || []) {\n                const isToggled = py.PY_isTrue(\n                    py.evaluate(dec.expression, this.record.evalContext)\n                );\n                const className = this._getClassFromDecoration(dec.name);\n                this.el.classList.toggle(className, isToggled);\n            }\n        }\n        /**\n         * @private\n         * @see quickEdit\n         * @param {any} extraInfo info to change the behaviour\n         */\n        _quickEdit(extraInfo) {\n            this.activate({noAutomaticCreate: true});\n        }\n        /**\n         * Converts the value from the field to a string representation.\n         *\n         * @private\n         * @param {any} value (from the field type)\n         * @returns {string}\n         */\n        _formatValue(value) {\n            const options = Object.assign({}, this.nodeOptions,\n                { data: this.recordData }, this.formatOptions);\n            return field_utils.format[this.formatType](value, this.field, options);\n        }\n        /**\n         * Returns the className corresponding to a given decoration. A\n         * decoration is of the form 'decoration-%s'. By default, replaces\n         * 'decoration' by 'text'.\n         *\n         * @private\n         * @param {string} decoration must be of the form 'decoration-%s'\n         * @returns {string}\n         */\n        _getClassFromDecoration(decoration) {\n            return `text-${decoration.split('-')[1]}`;\n        }\n        /**\n         * @private\n         * @param {MouseEvent} ev\n         * @returns {Object}\n         */\n        _getQuickEditExtraInfo(ev) {\n            return {};\n        }\n        /**\n         * Compares the given value with the last value that has been set.\n         * Note that we compare unparsed values. Handles the special case where no\n         * value has been set yet, and the given value is the empty string.\n         *\n         * @private\n         * @param {any} value\n         * @returns {boolean} true iff values are the same\n         */\n        _isLastSetValue(value) {\n            return this._lastSetValue === value || (this.value === false && value === '');\n        }\n        /**\n         * This method check if a value is the same as the current value of the\n         * field. For example, a fieldDate component might want to use the moment\n         * specific value isSame instead of ===.\n         *\n         * This method is used by the _setValue method.\n         *\n         * @private\n         * @param {any} value\n         * @returns {boolean}\n         */\n        _isSameValue(value) {\n            return this.value === value;\n        }\n        /**\n         * Converts a string representation to a valid value.\n         *\n         * @private\n         * @param {string} value\n         * @returns {any}\n         */\n        _parseValue(value) {\n            return field_utils.parse[this.formatType](value, this.field, this.parseOptions);\n        }\n        /**\n         * This method is called by the component, to change its value and to notify\n         * the outside world of its new state. This method also validates the new\n         * value. Note that this method does not rerender the component, it should be\n         * handled by the component itself, if necessary.\n         *\n         * @private\n         * @param {any} value\n         * @param {Object} [options]\n         * @param {boolean} [options.doNotSetDirty=false] if true, the basic model\n         *   will not consider that this field is dirty, even though it was changed.\n         *   Please do not use this flag unless you really need it. Our only use\n         *   case is currently the pad component, which does a _setValue in the\n         *   renderEdit method.\n         * @param {boolean} [options.notifyChange=true] if false, the basic model\n         *   will not notify and not trigger the onchange, even though it was changed.\n         * @param {boolean} [options.forceChange=false] if true, the change event will be\n         *   triggered even if the new value is the same as the old one\n         * @returns {Promise}\n         */\n        _setValue(value, options) {\n            // we try to avoid doing useless work, if the value given has not changed.\n            if (this._isLastSetValue(value)) {\n                return Promise.resolve();\n            }\n            this._lastSetValue = value;\n            try {\n                value = this._parseValue(value);\n                this._isValid = true;\n            } catch (e) {\n                this._isValid = false;\n                this.trigger('set-dirty', {dataPointID: this.dataPointId});\n                return Promise.reject({message: \"Value set is not valid\"});\n            }\n            if (!(options && options.forceChange) && this._isSameValue(value)) {\n                return Promise.resolve();\n            }\n            return new Promise((resolve, reject) => {\n                const changes = {};\n                changes[this.name] = value;\n                this.trigger('field-changed', {\n                    dataPointID: this.dataPointId,\n                    changes: changes,\n                    viewType: this.viewType,\n                    doNotSetDirty: options && options.doNotSetDirty,\n                    notifyChange: !options || options.notifyChange !== false,\n                    allowWarning: options && options.allowWarning,\n                    onSuccess: resolve,\n                    onFailure: reject,\n                });\n            });\n        }\n\n        //----------------------------------------------------------------------\n        // Handlers\n        //----------------------------------------------------------------------\n\n        /**\n         * Triggers quick edit only if the field is authorized to do it.\n         *\n         * @private\n         * @param {MouseEvent} ev\n         */\n        _onClick(ev) {\n            if (this._canQuickEdit &&\n                !this.constructor.quickEditExclusion.some(x => ev.target.closest(x))\n            ) {\n                this.trigger('quick-edit', {\n                    fieldName: this.name,\n                    target: this.el,\n                    extraInfo: this._getQuickEditExtraInfo(ev),\n                });\n            }\n        }\n        /**\n         * Intercepts navigation keyboard events to prevent their default behavior\n         * and notifies the view so that it can handle it its own way.\n         *\n         * @private\n         * @param {KeyEvent} ev\n         */\n        _onKeydown(ev) {\n            switch (ev.which) {\n                case $.ui.keyCode.TAB:\n                    this.trigger('navigation-move', {\n                        direction: ev.shiftKey ? 'previous' : 'next',\n                        originalEvent: ev,\n                    });\n                    break;\n                case $.ui.keyCode.ENTER:\n                    // We preventDefault the ENTER key because of two coexisting behaviours:\n                    // - In HTML5, pressing ENTER on a <button> triggers two events: a 'keydown' AND a 'click'\n                    // - When creating and opening a dialog, the focus is automatically given to the primary button\n                    // The end result caused some issues where a modal opened by an ENTER keypress (e.g. saving\n                    // changes in multiple edition) confirmed the modal without any intentionnal user input.\n                    ev.preventDefault();\n                    ev.stopPropagation();\n                    this.trigger('navigation-move', {direction: 'next_line'});\n                    break;\n                case $.ui.keyCode.ESCAPE:\n                    this.trigger('navigation-move', {direction: 'cancel', originalEvent: ev});\n                    break;\n                case $.ui.keyCode.UP:\n                    ev.stopPropagation();\n                    this.trigger('navigation-move', {direction: 'up'});\n                    break;\n                case $.ui.keyCode.RIGHT:\n                    ev.stopPropagation();\n                    this.trigger('navigation-move', {direction: 'right'});\n                    break;\n                case $.ui.keyCode.DOWN:\n                    ev.stopPropagation();\n                    this.trigger('navigation-move', {direction: 'down'});\n                    break;\n                case $.ui.keyCode.LEFT:\n                    ev.stopPropagation();\n                    this.trigger('navigation-move', {direction: 'left'});\n                    break;\n            }\n        }\n        /**\n         * Updates the target data value with the current AbstractField instance.\n         * This allows to consider the parent field in case of nested fields. The\n         * field which triggered the event is still accessible through ev.target.\n         *\n         * @private\n         * @param {CustomEvent} ev\n         */\n        _onNavigationMove(ev) {\n            ev.detail.target = this;\n        }\n    }\n\n    /**\n     * An object representing fields to be fetched by the model even though not\n     * present in the view.\n     * This object contains \"field name\" as key and an object as value.\n     * That value object must contain the key \"type\"\n     * @see FieldBinaryImage for an example.\n     */\n    AbstractField.fieldDependencies = {};\n    /**\n     * If this flag is given a string, the related BasicModel will be used to\n     * initialize specialData the field might need. This data will be available\n     * through this.record.specialData[this.name].\n     *\n     * @see BasicModel._fetchSpecialData\n     */\n    AbstractField.specialData = false;\n    /**\n     * to override to indicate which field types are supported by the component\n     *\n     * @type Array<string>\n     */\n    AbstractField.supportedFieldTypes = [];\n    /**\n     * To override to give a user friendly name to the component.\n     *\n     * @type string\n     */\n    AbstractField.description = \"\";\n    /**\n     * Currently only used in list view.\n     * If this flag is set to true, the list column name will be empty.\n     */\n    AbstractField.noLabel = false;\n    /**\n     * Currently only used in list view.\n     * If set, this value will be displayed as column name.\n     */\n    AbstractField.label = \"\";\n    /**\n     * Determines if the field can be quick editable which means that when\n     * the field is clicked and if it's quick editable, it will trigger an event\n     * to the form view to switch into edit mode and then it'll perform\n     * some action (@see quickEdit)\n     */\n    AbstractField.isQuickEditable = false;\n    /**\n     * List of selectors matching elements that must never trigger the 'quick_edit'\n     * event when being clicked on.\n     */\n    AbstractField.quickEditExclusion = [];\n\n    return AbstractField;\n});\n", "/* global ace */\nodoo.define('web.basic_fields', function (require) {\n\"use strict\";\n\n/**\n * This module contains most of the basic (meaning: non relational) field\n * widgets. Field widgets are supposed to be used in views inheriting from\n * BasicView, so, they can work with the records obtained from a BasicModel.\n */\n\nvar AbstractField = require('web.AbstractField');\nvar config = require('web.config');\nvar core = require('web.core');\nvar datepicker = require('web.datepicker');\nvar deprecatedFields = require('web.basic_fields.deprecated');\nvar dom = require('web.dom');\nvar Domain = require('web.Domain');\nvar DomainSelector = require('web.DomainSelector');\nvar DomainSelectorDialog = require('web.DomainSelectorDialog');\nvar framework = require('web.framework');\nvar py_utils = require('web.py_utils');\nvar session = require('web.session');\nvar utils = require('web.utils');\nvar view_dialogs = require('web.view_dialogs');\nvar field_utils = require('web.field_utils');\nvar time = require('web.time');\nconst {ColorpickerDialog} = require('web.Colorpicker');\nconst { hidePDFJSButtons } = require('@web/legacy/js/libs/pdfjs');\n\nlet FieldBoolean = deprecatedFields.FieldBoolean;\n\nrequire(\"web.zoomodoo\");\n\nvar qweb = core.qweb;\nvar _t = core._t;\nvar _lt = core._lt;\n\nvar TranslatableFieldMixin = {\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @returns {jQuery}\n     */\n    _renderTranslateButton: function () {\n        if (_t.database.multi_lang && this.field.translate) {\n            var lang = _t.database.parameters.code.split('_')[0].toUpperCase();\n            return $(`<span class=\"o_field_translate btn btn-link\">${lang}</span>`)\n                .on('click', this._onTranslate.bind(this));\n        }\n        return $();\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * open the translation view for the current field\n     *\n     * @param {MouseEvent} ev\n     * @private\n     */\n    _onTranslate: function (ev) {\n        ev.preventDefault();\n        this.trigger_up('translate', {\n            fieldName: this.name,\n            id: this.dataPointID,\n            isComingFromTranslationAlert: false,\n        });\n    },\n};\n\nvar DebouncedField = AbstractField.extend({\n    /**\n     * For field widgets that may have a large number of field changes quickly,\n     * it could be a good idea to debounce the changes. In that case, this is\n     * the suggested value.\n     */\n    DEBOUNCE: 1000000000,\n\n    /**\n     * Override init to debounce the field \"_doAction\" method (by creating a new\n     * one called \"_doDebouncedAction\"). By default, this method notifies the\n     * current value of the field and we do not want that to happen for each\n     * keystroke. Note that this is done here and not on the prototype, so that\n     * each DebouncedField has its own debounced function to work with. Also, if\n     * the debounce value is set to 0, no debouncing is done, which is really\n     * useful for the unit tests.\n     *\n     * @constructor\n     * @override\n     */\n    init: function () {\n        this._super.apply(this, arguments);\n\n        // _isDirty is used to detect that the user interacted at least\n        // once with the widget, so that we can prevent it from triggering a\n        // field_changed in commitChanges if the user didn't change anything\n        this._isDirty = false;\n        if (this.mode === 'edit') {\n            if (this.DEBOUNCE) {\n                this._doDebouncedAction = _.debounce(this._doAction, this.DEBOUNCE);\n            } else {\n                this._doDebouncedAction = this._doAction;\n            }\n\n            var self = this;\n            var debouncedFunction = this._doDebouncedAction;\n            this._doDebouncedAction = function () {\n                self._isDirty = true;\n                debouncedFunction.apply(self, arguments);\n            };\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * This field main action is debounced and might sets the field's value.\n     * When the changes are asked to be commited, the debounced action has to\n     * be done immediately.\n     *\n     * @override\n     */\n    commitChanges: function () {\n        if (this._isDirty && this.mode === 'edit') {\n            return this._doAction();\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * By default, notifies the outside world of the new value (checked from the\n     * DOM). This method has an automatically-created (@see init) associated\n     * debounced version called _doDebouncedAction.\n     *\n     * @private\n     */\n    _doAction: function () {\n        // as _doAction may be debounced, it may happen that it is called after\n        // the widget has been destroyed, and in this case, we don't want it to\n        // do anything (commitChanges ensures that if it has local changes, they\n        // are triggered up before the widget is destroyed, if necessary).\n        if (!this.isDestroyed()) {\n            return this._setValue(this._getValue());\n        }\n    },\n    /**\n     * Should return the current value of the field, in the DOM (for example,\n     * the content of the input)\n     *\n     * @abstract\n     * @private\n     * @returns {*}\n     */\n    _getValue: function () {},\n    /**\n     * Should make an action on lost focus.\n     *\n     * @abstract\n     * @private\n     * @returns {*}\n     */\n    _onBlur: function () {},\n});\n\nvar InputField = DebouncedField.extend({\n    custom_events: _.extend({}, DebouncedField.prototype.custom_events, {\n        field_changed: '_onFieldChanged',\n    }),\n    events: _.extend({}, DebouncedField.prototype.events, {\n        'input': '_onInput',\n        'change': '_onChange',\n        'blur' : '_onBlur',\n    }),\n\n    /**\n     * Prepares the rendering so that it creates an element the user can type\n     * text into in edit mode.\n     *\n     * @override\n     */\n    init: function () {\n        this._super.apply(this, arguments);\n        this.nodeOptions.isPassword = 'password' in this.attrs;\n        if (this.mode === 'edit') {\n            this.tagName = 'input';\n        }\n        // We need to know if the widget is dirty (i.e. if the user has changed\n        // the value, and those changes haven't been acknowledged yet by the\n        // environment), to prevent erasing that new value on a reset (e.g.\n        // coming by an onchange on another field)\n        this.isDirty = false;\n        this.lastChangeEvent = undefined;\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Returns the associated <input/> element.\n     *\n     * @override\n     */\n    getFocusableElement: function () {\n        return this.$input || $();\n    },\n    /**\n     * Re-renders the widget if it isn't dirty. The widget is dirty if the user\n     * changed the value, and that change hasn't been acknowledged yet by the\n     * environment. For example, another field with an onchange has been updated\n     * and this field is updated before the onchange returns. Two '_setValue'\n     * are done (this is sequential), the first one returns and this widget is\n     * reset. However, it has pending changes, so we don't re-render.\n     *\n     * @override\n     */\n    reset: function (record, event) {\n        this._reset(record, event);\n        if (!event || event === this.lastChangeEvent) {\n            this.isDirty = false;\n        }\n        if (this.isDirty || (event && event.target === this &&\n            event.data.changes &&\n            event.data.changes[this.name] === this.value)) {\n            if (this.attrs.decorations) {\n                // if a field is modified, then it could have triggered an onchange\n                // which changed some of its decorations. Since we bypass the\n                // render function, we need to apply decorations here to make\n                // sure they are recomputed.\n                this._applyDecorations();\n            }\n            return Promise.resolve();\n        } else {\n            return this._render();\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     * @returns {string} the content of the input\n     */\n    _getValue: function () {\n        return this.$input.val();\n    },\n    /**\n     * By default this only calls a debounced method to notify the outside world\n     * of the changes if the actual value is not the same than the previous one.\n     * @see _doDebouncedAction\n     */\n    _notifyChanges() {\n        this.isDirty = !this._isLastSetValue(this.$input.val());\n        this._doDebouncedAction();\n    },\n    /**\n     * Formats an input element for edit mode. This is in a separate function so\n     * extending widgets can use it on their input without having input as tagName.\n     *\n     * @private\n     * @param {jQuery|undefined} $input\n     *        The <input/> element to prepare and save as the $input attribute.\n     *        If no element is given, the <input/> is created.\n     * @returns {jQuery} the prepared this.$input element\n     */\n    _prepareInput: function ($input) {\n        this.$input = $input || $(\"<input/>\");\n        this.$input.addClass('o_input');\n\n        var inputAttrs = { placeholder: this.attrs.placeholder || \"\" };\n        var inputVal;\n        if (this.nodeOptions.isPassword) {\n            inputAttrs = _.extend(inputAttrs, { type: 'password', autocomplete: this.attrs.autocomplete || 'new-password' });\n            inputVal = this.value || '';\n        } else {\n            inputAttrs = _.extend(inputAttrs, { type: 'text', autocomplete: this.attrs.autocomplete || 'off'});\n            inputVal = this._formatValue(this.value);\n        }\n\n        this.$input.attr(inputAttrs);\n        this.$input.val(inputVal);\n\n        return this.$input;\n    },\n    /**\n     * Formats the HTML input tag for edit mode and stores selection status.\n     *\n     * @override\n     * @private\n     */\n    _renderEdit: function () {\n        // Keep a reference to the input so $el can become something else\n        // without losing track of the actual input.\n        this._prepareInput(this.$el);\n    },\n    /**\n     * Resets the content to the formated value in readonly mode.\n     *\n     * @override\n     * @private\n     */\n    _renderReadonly: function () {\n        this.$el.text(this._formatValue(this.value));\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * We immediately notify the outside world when this field confirms its\n     * changes.\n     *\n     * @private\n     */\n    _onChange: function () {\n        this._doAction();\n    },\n    /**\n     * Listens to events 'field_changed' to keep track of the last event that\n     * has been trigerred. This allows to detect that all changes have been\n     * acknowledged by the environment.\n     *\n     * @param {OdooEvent} event 'field_changed' event\n     */\n    _onFieldChanged: function (event) {\n        this.lastChangeEvent = event;\n    },\n    /**\n     * Called when the user is typing text\n     * @see _notifyChanges\n     *\n     * @private\n     */\n    _onInput() {\n        this._notifyChanges();\n    },\n    /**\n     * Stops the left/right navigation move event if the cursor is not at the\n     * start/end of the input element.\n     *\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onNavigationMove: function (ev) {\n        this._super.apply(this, arguments);\n\n        // the following code only makes sense in edit mode, with an input\n        if (this.mode === 'edit' && ev.data.direction !== 'cancel') {\n            var input = this.$input[0];\n            var selecting = (input.selectionEnd !== input.selectionStart);\n            if ((ev.data.direction === \"left\" && (selecting || input.selectionStart !== 0))\n                || (ev.data.direction === \"right\" && (selecting || input.selectionStart !== input.value.length))) {\n                ev.stopPropagation();\n            }\n            if (ev.data.direction ==='next' &&\n                this.attrs.modifiersValue &&\n                this.attrs.modifiersValue.required &&\n                this.viewType !== 'list') {\n                if (!this.$input.val()){\n                    this.setInvalidClass();\n                    ev.stopPropagation();\n                } else {\n                    this.removeInvalidClass();\n                }\n            }\n        }\n    },\n});\n\nvar NumericField = InputField.extend({\n    tagName: 'span',\n\n    /**\n     * @override\n     */\n    init() {\n        this._super.apply(this, arguments);\n        this.shouldFormat = Boolean(\n            JSON.parse('format' in this.nodeOptions ? this.nodeOptions.format : true)\n        );\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * For numeric fields, 0 is a valid value.\n     *\n     * @override\n     */\n    isSet: function () {\n        return this.value === 0 || this._super.apply(this, arguments);\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Evaluate a string representing a simple formula,\n     * a formula is composed of numbers and arithmetic operations\n     * (ex: 4+3*2)\n     *\n     * Supported arithmetic operations: + - * / ^ ( )\n     * Since each number in the formula can be expressed in user locale,\n     * we parse each float value inside the formula using the user context\n     * This function uses py_eval to safe eval the formula.\n     * We assume that this function is used as a calculator so operand ^ (xor)\n     * is replaced by operand ** (power) so that users that are used to\n     * excel or libreoffice are not confused\n     *\n     * @private\n     * @param expr\n     * @return a float representing the result of the evaluated formula\n     * @throws error if formula can't be evaluated\n     */\n    _evalFormula: function (expr, context) {\n        // remove extra space\n        var val = expr.replace(new RegExp(/( )/g), '');\n        var safeEvalString = '';\n        for (let v of val.split(new RegExp(/([-+*/()^])/g))) {\n            if (!['+','-','*','/','(',')','^'].includes(v) && v.length) {\n                // check if this is a float and take into account user delimiter preference\n                v = field_utils.parse.float(v);\n            }\n            if (v === '^') {\n                v = '**';\n            }\n            safeEvalString += v;\n        };\n        return py_utils.py_eval(safeEvalString, context);\n    },\n\n    /**\n     * Format numerical value (integer or float)\n     *\n     * Note: We have to overwrite this method to skip the format if we are into\n     * edit mode on a input type number.\n     *\n     * @override\n     * @private\n     */\n    _formatValue: function (value) {\n        if (!this.shouldFormat || (this.mode === 'edit' && this.nodeOptions.type === 'number')) {\n            return value;\n        }\n        return this._super.apply(this, arguments);\n    },\n\n    /**\n     * Parse numerical value (integer or float)\n     *\n     * Note: We have to overwrite this method to skip the format if we are into\n     * edit mode on a input type number.\n     *\n     * @override\n     * @private\n     */\n    _parseValue: function (value) {\n        if (this.mode === 'edit' && this.nodeOptions.type === 'number') {\n            return Number(value);\n        }\n        return this._super.apply(this, arguments);\n    },\n\n    /**\n     * Formats an input element for edit mode. This is in a separate function so\n     * extending widgets can use it on their input without having input as tagName.\n     *\n     * Note: We have to overwrite this method to set the input's type to number if\n     * option setted into the field.\n     *\n     * @override\n     * @private\n     */\n    _prepareInput: function ($input) {\n        var result = this._super.apply(this, arguments);\n        if (this.nodeOptions.type === 'number') {\n            this.$input.attr({type: 'number'});\n        }\n        if (this.nodeOptions.step) {\n            this.$input.attr({step: this.nodeOptions.step});\n        }\n        return result;\n    },\n\n    /**\n     * Evaluate value set by user if starts with =\n     *\n     * @override\n     * @private\n     * @param {any} value\n     * @param {Object} [options]\n     */\n    _setValue: function (value, options) {\n        var originalValue = value;\n        value = value.trim();\n        if (value.startsWith('=')) {\n            try {\n                // Evaluate the formula\n                value = this._evalFormula(value.substr(1));\n                // Format back the value in user locale\n                value = this._formatValue(value);\n                // Set the computed value in the input\n                this.$input.val(value);\n            } catch (err) {\n                // in case of exception, set value as the original value\n                // that way the Webclient will show an error as\n                // it is expecting a numeric value.\n                value = originalValue;\n            }\n        }\n        return this._super(value, options);\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Replace the decimal separator of the numpad decimal key\n     * by the decimal separator from the user's language setting.\n     *\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onKeydown(ev) {\n        const kbdEvt = ev.originalEvent;\n        if (kbdEvt && utils.isNumpadDecimalSeparatorKey(kbdEvt)) {\n            const inputField = this.$input[0];\n            if (inputField.type === 'number') {\n                return this._super(...arguments);\n            }\n            const curVal = inputField.value;\n            const from = inputField.selectionStart;\n            const to = inputField.selectionEnd;\n            const point = _t.database.parameters.decimal_point;\n\n            // Make sure the correct decimal separator\n            // from the user's settings is inserted\n            inputField.value = curVal.slice(0, from) + point + curVal.slice(to);\n\n            // Put the user caret at the right place\n            inputField.selectionStart = inputField.selectionEnd = from + point.length;\n\n            // Tell the world we made some changes and\n            // return preventing event default behaviour.\n            this._notifyChanges();\n            kbdEvt.preventDefault();\n            return;\n        }\n\n        return this._super(...arguments);\n    },\n});\n\nvar FieldChar = InputField.extend(TranslatableFieldMixin, {\n    description: _lt(\"Text\"),\n    className: 'o_field_char',\n    tagName: 'span',\n    supportedFieldTypes: ['char'],\n    isQuickEditable: true,\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Add translation button\n     *\n     * @override\n     * @private\n     */\n    _renderEdit: function () {\n        var def = this._super.apply(this, arguments);\n        if (this.field.size && this.field.size > 0) {\n            this.$el.attr('maxlength', this.field.size);\n        }\n        if (this.field.translate) {\n            this.$el = this.$el.add(this._renderTranslateButton());\n            this.$el.addClass('o_field_translate');\n        }\n        return def;\n    },\n    /**\n     * Trim the value input by the user.\n     *\n     * @override\n     * @private\n     * @param {any} value\n     * @param {Object} [options]\n     */\n    _setValue: function (value, options) {\n        if (this.field.trim) {\n            value = value.trim();\n        }\n        return this._super(value, options);\n    },\n});\n\nvar LinkButton = AbstractField.extend({\n    events: _.extend({}, AbstractField.prototype.events, {\n        'click': '_onClick'\n    }),\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Display button\n     * @override\n     * @private\n     */\n    _render: function () {\n        if (this.value) {\n            var className = this.attrs.icon || 'fa-globe';\n\n            this.$el.html(\"<span role='img'/>\");\n            this.$el.addClass(\"fa \"+ className);\n            this.$el.attr('title', this.value);\n            this.$el.attr('aria-label', this.value);\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Open link button\n     *\n     * @private\n     * @param {MouseEvent} event\n     */\n    _onClick: function (event) {\n        event.stopPropagation();\n        window.open(this.value, '_blank');\n    },\n});\n\nvar FieldDateRange = InputField.extend({\n    className: 'o_field_date_range',\n    tagName: 'span',\n    jsLibs: [\n        '/web/static/lib/daterangepicker/daterangepicker.js',\n        '/web/static/src/legacy/js/libs/daterangepicker.js',\n    ],\n    supportedFieldTypes: ['date', 'datetime'],\n    isQuickEditable: true,\n    /**\n     * @override\n     */\n    init: function () {\n        this._super.apply(this, arguments);\n        this.isDateField = this.formatType === 'date';\n        this.dateRangePickerOptions = _.defaults(\n            {},\n            this.nodeOptions.picker_options || {},\n            {\n                timePicker: !this.isDateField,\n                timePicker24Hour: _t.database.parameters.time_format.search('%H') !== -1,\n                autoUpdateInput: false,\n                timePickerIncrement: 5,\n                locale: {\n                    applyLabel: _t('Apply'),\n                    cancelLabel: _t('Cancel'),\n                    format: this.isDateField ? time.getLangDateFormat() : time.getLangDatetimeFormat(),\n                },\n            }\n        );\n        this.relatedEndDate = this.nodeOptions.related_end_date;\n        this.relatedStartDate = this.nodeOptions.related_start_date;\n    },\n    /**\n     * @override\n     */\n    destroy: function () {\n        if (this.$pickerContainer) {\n            this.$pickerContainer.remove();\n        }\n        if (this._onScroll) {\n            window.removeEventListener('scroll', this._onScroll, true);\n        }\n        this._super.apply(this, arguments);\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Field widget is valid if value entered can convered to date/dateime value\n     * while parsing input value to date/datetime throws error then widget considered\n     * invalid\n     *\n     * @override\n     */\n    isValid: function () {\n        const value = this.mode === \"readonly\" ? this.value : this.$input.val();\n        try {\n            return field_utils.parse[this.formatType](value, this.field, { timezone: true }) || true;\n        } catch (error) {\n            return false;\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Return the date written in the input, in UTC.\n     *\n     * @private\n     * @returns {Moment|false}\n     */\n    _getValue: function () {\n        try {\n            // user may enter manual value in input and it may not be parsed as date/datetime value\n            this.removeInvalidClass();\n            return field_utils.parse[this.formatType](this.$input.val(), this.field, { timezone: true });\n        } catch (error) {\n            this.setInvalidClass();\n            return false;\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {Event} ev\n     * @param {Object} picker\n     */\n    _applyChanges: function (ev, picker) {\n        var changes = {};\n        var displayStartDate = field_utils.format[this.formatType](picker.startDate, {}, {timezone: false});\n        var displayEndDate = field_utils.format[this.formatType](picker.endDate, {}, {timezone: false});\n        var changedStartDate = picker.startDate;\n        var changedEndDate = picker.endDate;\n        if (this.isDateField) {\n            // In date mode, the library will give moment object of start and end date having\n            // time at 00:00:00. So, Odoo will consider it as UTC. To fix this added browser\n            // timezone offset in dates to get a correct selected date.\n            changedStartDate = picker.startDate.add(session.getTZOffset(picker.startDate), 'minutes');\n            changedEndDate = picker.endDate.startOf('day').add(session.getTZOffset(picker.endDate), 'minutes');\n        }\n        if (this.relatedEndDate) {\n            this.$el.val(displayStartDate);\n            changes[this.name] = this._parseValue(changedStartDate);\n            changes[this.relatedEndDate] = this._parseValue(changedEndDate);\n        }\n        if (this.relatedStartDate) {\n            this.$el.val(displayEndDate);\n            changes[this.name] = this._parseValue(changedEndDate);\n            changes[this.relatedStartDate] = this._parseValue(changedStartDate);\n        }\n        this.trigger_up('field_changed', {\n            dataPointID: this.dataPointID,\n            viewType: this.viewType,\n            changes: changes,\n        });\n    },\n    /**\n     * @override\n     */\n    _renderEdit: function () {\n        this._super.apply(this, arguments);\n        var self = this;\n        const [startDate, endDate] = this._getDateRangeFromInputField();\n        this.dateRangePickerOptions.startDate = startDate || moment();\n        this.dateRangePickerOptions.endDate = endDate || moment();\n\n        this.$el.daterangepicker(this.dateRangePickerOptions);\n        this.$el.on('apply.daterangepicker', this._applyChanges.bind(this));\n        this.$el.on('show.daterangepicker', this._onDateRangePickerShow.bind(this));\n        this.$el.on('hide.daterangepicker', this._onDateRangePickerHide.bind(this));\n        this.$el.off('keyup.daterangepicker');\n        this.$pickerContainer = this.$el.data('daterangepicker').container;\n\n        // Prevent from leaving the edition of a row in editable list view\n        this.$pickerContainer.on('click', function (ev) {\n            ev.stopPropagation();\n            if ($(ev.target).hasClass('applyBtn')) {\n                self.$el.data('daterangepicker').hide();\n            }\n        });\n\n        // Prevent bootstrap from focusing on modal (which breaks hours drop-down in firefox)\n        this.$pickerContainer.on('focusin.bs.modal', 'select', function (ev) {\n            ev.stopPropagation();\n        });\n    },\n\n    /**\n     * @private\n     * @override\n     */\n     _quickEdit: function () {\n        if (this.$el) {\n            this.$el.click()\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Unbind the scroll event handler when the daterangepicker is closed.\n     *\n     * @private\n     */\n    _onDateRangePickerHide() {\n        if (this._onScroll) {\n            window.removeEventListener('scroll', this._onScroll, true);\n        }\n    },\n    /**\n     * Bind the scroll event handle when the daterangepicker is open.\n     * Update the begin and end date with the dates from the input values\n     *\n     * @private\n     */\n    _onDateRangePickerShow() {\n        const daterangepicker = this.$el.data('daterangepicker');\n        this._onScroll = ev => {\n            if (!config.device.isMobile && !this.$pickerContainer.get(0).contains(ev.target)) {\n                daterangepicker.hide();\n            }\n        };\n        window.addEventListener('scroll', this._onScroll, true);\n        const [startDate, endDate] = this._getDateRangeFromInputField();\n        daterangepicker.setStartDate(startDate? startDate.utcOffset(session.getTZOffset(startDate)): moment());\n        daterangepicker.setEndDate(endDate? endDate.utcOffset(session.getTZOffset(endDate)): moment());\n        daterangepicker.updateView();\n    },\n    /**\n     * Get the startDate and endDate of the daterangepicker from the input fields\n     * @returns [Date (moment object), Date (moment object)]\n     * @private\n     */\n    _getDateRangeFromInputField() {\n        let startDate, endDate;\n        if (this.relatedEndDate) {\n            startDate = this._getValue();\n            endDate = field_utils.parse[this.formatType](this.recordData[this.relatedEndDate]);\n        }\n        if (this.relatedStartDate) {\n            startDate = field_utils.parse[this.formatType](this.recordData[this.relatedStartDate]);\n            endDate = this._getValue();\n        }\n        return [startDate, endDate];\n    },\n});\n\nvar FieldDate = InputField.extend({\n    description: _lt(\"Date\"),\n    className: \"o_field_date\",\n    tagName: \"span\",\n    supportedFieldTypes: ['date', 'datetime'],\n    isQuickEditable: true,\n    // we don't need to listen on 'input' nor 'change' events because the\n    // datepicker widget is already listening, and will correctly notify changes\n    events: AbstractField.prototype.events,\n\n    /**\n     * @override\n     */\n    init: function () {\n        this._super.apply(this, arguments);\n        // use the session timezone when formatting dates\n        this.formatOptions.timezone = true;\n        this.datepickerOptions = _.defaults(\n            {},\n            this.nodeOptions.datepicker || {},\n            {defaultDate: this.value}\n        );\n    },\n    /**\n     * In edit mode, instantiates a DateWidget datepicker and listen to changes.\n     *\n     * @override\n     */\n    start: function () {\n        var self = this;\n        var prom;\n        if (this.mode === 'edit') {\n            this.datewidget = this._makeDatePicker();\n            this.datewidget.on('datetime_changed', this, function () {\n                var value = this._getValue();\n                if ((!value && this.value) || (value && !this._isSameValue(value))) {\n                    this._setValue(value);\n                }\n            });\n            prom = this.datewidget.appendTo('<div>').then(function () {\n                self.datewidget.$el.addClass(self.$el.attr('class'));\n                self._prepareInput(self.datewidget.$input);\n                self._replaceElement(self.datewidget.$el);\n            });\n        }\n        return Promise.resolve(prom).then(this._super.bind(this));\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Asks the datepicker widget to activate the input, instead of doing it\n     * ourself, such that 'input' events triggered by the lib are correctly\n     * intercepted, and don't produce unwanted 'field_changed' events.\n     *\n     * @override\n     */\n    activate: function () {\n        if (this.isFocusable() && this.datewidget) {\n            this.datewidget.$input.focus();\n            this.datewidget.$input.select();\n            return true;\n        }\n        return false;\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     * @private\n     */\n    _doDebouncedAction: function () {\n        this.datewidget.changeDatetime();\n    },\n    /**\n     * @private\n     * @override\n     */\n    _quickEdit: function () {\n        if (this.datewidget) {\n            this.datewidget.$input.click();\n        }\n    },\n\n    /**\n     * return the datepicker value\n     *\n     * @private\n     */\n    _getValue: function () {\n        return this.datewidget.getValue();\n    },\n    /**\n     * @override\n     * @private\n     * @param {Moment|false} value\n     * @returns {boolean}\n     */\n    _isSameValue: function (value) {\n        if (this.value === false || value === false) {\n            return this.value === value;\n        }\n        return value.isSame(this.value, 'day');\n    },\n    /**\n     * Instantiates a new DateWidget datepicker.\n     *\n     * @private\n     */\n    _makeDatePicker: function () {\n        return new datepicker.DateWidget(this, this.datepickerOptions);\n    },\n\n    /**\n     * Set the datepicker to the right value rather than the default one.\n     *\n     * @override\n     * @private\n     */\n    _renderEdit: function () {\n        this.datewidget.setValue(this.value);\n        this.$input = this.datewidget.$input;\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Confirm the value on hit enter and re-render\n     * It will also remove the offset to get the UTC value\n     *\n     * @private\n     * @override\n     * @param {KeyboardEvent} ev\n     */\n    async _onKeydown(ev) {\n        this._super(...arguments);\n        if (ev.which === $.ui.keyCode.ENTER) {\n            let value = this.$input.val();\n            try {\n                value = this._parseValue(value);\n                if (this.datewidget.type_of_date === \"datetime\") {\n                    value.add(-this.getSession().getTZOffset(value), \"minutes\");\n                }\n            } catch (err) {}\n            await this._setValue(value);\n            this._render();\n        }\n    },\n});\n\nvar FieldDateTime = FieldDate.extend({\n    description: _lt(\"Date & Time\"),\n    supportedFieldTypes: ['datetime'],\n    isQuickEditable: true,\n\n    /**\n     * @override\n     */\n    init: function () {\n        this._super.apply(this, arguments);\n        if (this.value) {\n            var offset = this.getSession().getTZOffset(this.value);\n            var displayedValue = this.value.clone().add(offset, 'minutes');\n            this.datepickerOptions.defaultDate = displayedValue;\n        }\n    },\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * return the datepicker value\n     *\n     * @private\n     */\n    _getValue: function () {\n        var value = this.datewidget.getValue();\n        return value && value.add(-this.getSession().getTZOffset(value), 'minutes');\n    },\n    /**\n     * @override\n     * @private\n     */\n    _isSameValue: function (value) {\n        if (this.value === false || value === false) {\n            return this.value === value;\n        }\n        return value.isSame(this.value);\n    },\n    /**\n     * Instantiates a new DateTimeWidget datepicker rather than DateWidget.\n     *\n     * @override\n     * @private\n     */\n    _makeDatePicker: function () {\n        return new datepicker.DateTimeWidget(this, this.datepickerOptions);\n    },\n    /**\n     * Set the datepicker to the right value rather than the default one.\n     *\n     * @override\n     * @private\n     */\n    _renderEdit: function () {\n        var value = this.value && this.value.clone().add(this.getSession().getTZOffset(this.value), 'minutes');\n        this.datewidget.setValue(value);\n        this.$input = this.datewidget.$input;\n    },\n});\n\nconst RemainingDays = AbstractField.extend({\n    description: _lt(\"Remaining Days\"),\n    supportedFieldTypes: ['date', 'datetime'],\n\n    /**\n     * @override\n     */\n    init() {\n        this._super(...arguments);\n        // use the session timezone when formatting dates\n        this.formatOptions.timezone = true;\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Returns the associated <input/> element.\n     *\n     * @override\n     */\n    getFocusableElement() {\n        return this.datewidget && this.datewidget.$input || $();\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     * @returns {string} the content of the input\n     */\n    _getValue() {\n        let value = this.datewidget.getValue();\n        if (this.field.type === \"datetime\") {\n            value = value && value.add(-this.getSession().getTZOffset(value), 'minutes');\n        }\n        return value;\n    },\n    /**\n     * Instantiates a new DateWidget datepicker.\n     *\n     * @private\n     */\n    _makeDatePicker() {\n        this.datepickerOptions = _.defaults({}, { defaultDate: this.value });\n        if (this.field.type === \"datetime\" && this.value) {\n            const offset = this.getSession().getTZOffset(this.value);\n            const displayedValue = this.value.clone().add(offset, 'minutes');\n            this.datepickerOptions.defaultDate = displayedValue;\n        }\n        if (this.field.type === \"date\") {\n            return new datepicker.DateWidget(this, this.datepickerOptions);\n        }\n        return new datepicker.DateTimeWidget(this, this.datepickerOptions);\n    },\n    /**\n     * Displays date/datetime picker in edit mode.\n     *\n     * @override\n     */\n    async _renderEdit() {\n        await this._super(...arguments);\n        if (this.datewidget) {\n            this.datewidget.destroy();\n        }\n\n        this.datewidget = this._makeDatePicker();\n        this.datewidget.on('datetime_changed', this, () => {\n            const value = this._getValue();\n            if ((!value && this.value) || (value && !this._isSameValue(value))) {\n                this._setValue(value);\n            }\n        });\n\n        await this.datewidget.appendTo('<div>');\n        this.$el.append(this.datewidget.$el);\n    },\n\n    /**\n     * Displays the delta (in days) between the value of the field and today. If\n     * the delta is larger than 99 days, displays the date as usual (without\n     * time).\n     *\n     * @override\n     */\n    _renderReadonly() {\n        if (this.value === false) {\n            this.$el.removeClass('font-weight-bold text-danger text-warning');\n            return;\n        }\n        // compare the value (in the user timezone) with now (also in the user\n        // timezone), to get a meaningful delta for the user\n        const nowUTC = moment().utc();\n        const nowUserTZ = nowUTC.clone().add(session.getTZOffset(nowUTC), 'minutes');\n        const fieldValue = this.field.type == \"datetime\" ? this.value.clone().add(session.getTZOffset(this.value), 'minutes') : this.value;\n        const diffDays = fieldValue.startOf('day').diff(nowUserTZ.startOf('day'), 'days');\n        let text;\n        if (Math.abs(diffDays) > 99) {\n            text = this._formatValue(this.value, 'date');\n        } else if (diffDays === 0) {\n            text = _t(\"Today\");\n        } else if (diffDays < 0) {\n            text = diffDays === -1 ? _t(\"Yesterday\") : _.str.sprintf(_t('%s days ago'), -diffDays);\n        } else {\n            text = diffDays === 1 ? _t(\"Tomorrow\") : _.str.sprintf(_t('In %s days'), diffDays);\n        }\n        this.$el.text(text).attr('title', this._formatValue(this.value, 'date'));\n        this.$el.toggleClass('font-weight-bold', diffDays <= 0);\n        this.$el.toggleClass('text-danger', diffDays < 0);\n        this.$el.toggleClass('text-warning', diffDays === 0);\n    },\n});\n\nvar FieldMonetary = NumericField.extend({\n    description: _lt(\"Monetary\"),\n    className: 'o_field_monetary o_field_number',\n    tagName: 'span',\n    supportedFieldTypes: ['float', 'monetary'],\n    resetOnAnyFieldChange: true, // Have to listen to currency changes\n    isQuickEditable: true,\n\n    /**\n     * Float fields using a monetary widget have an additional currency_field\n     * parameter which defines the name of the field from which the currency\n     * should be read.\n     *\n     * They are also displayed differently than other inputs in\n     * edit mode. They are a div containing a span with the currency symbol and\n     * the actual input.\n     *\n     * If no currency field is given or the field does not exist, we fallback\n     * to the default input behavior instead.\n     *\n     * @override\n     */\n    init: function () {\n        this._super.apply(this, arguments);\n\n        this._setCurrency();\n\n        if (this.mode === 'edit') {\n            this.tagName = 'div';\n            this.className += ' o_input';\n\n            // do not display currency symbol in edit\n            this.formatOptions.noSymbol = true;\n        }\n\n        this.formatOptions.currency = this.currency;\n        this.formatOptions.digits = [16, 2];\n        this.formatOptions.field_digits = this.nodeOptions.field_digits;\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * For monetary fields, 0 is a valid value.\n     *\n     * @override\n     */\n    isSet: function () {\n        return this.value === 0 || this._super.apply(this, arguments);\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * For monetary fields, the input is inside a div, alongside a span\n     * containing the currency symbol.\n     *\n     * @override\n     * @private\n     */\n    _renderEdit: function () {\n        this.$el.empty();\n\n        // Prepare and add the input\n        var def = this._prepareInput(this.$input).appendTo(this.$el);\n\n        if (this.currency) {\n            // Prepare and add the currency symbol\n            var $currencySymbol = $('<span>', {text: this.currency.symbol});\n            if (this.currency.position === \"after\") {\n                this.$el.append($currencySymbol);\n            } else {\n                this.$el.prepend($currencySymbol);\n            }\n        }\n        return def;\n    },\n    /**\n     * @override\n     * @private\n     */\n    _renderReadonly: function () {\n        this.$el.html(this._formatValue(this.value));\n    },\n    /**\n     * Re-gets the currency as its value may have changed.\n     * @see FieldMonetary.resetOnAnyFieldChange\n     *\n     * @override\n     * @private\n     */\n    _reset: function () {\n        this._super.apply(this, arguments);\n        this._setCurrency();\n    },\n    /**\n     * Deduces the currency description from the field options and view state.\n     * The description is then available at this.currency.\n     *\n     * @private\n     */\n    _setCurrency: function () {\n        var currencyField = this.nodeOptions.currency_field || this.field.currency_field || 'currency_id';\n        var currencyID = this.record.data[currencyField] && this.record.data[currencyField].res_id;\n        this.currency = session.get_currency(currencyID);\n        this.formatOptions.currency = this.currency; // _formatValue() uses formatOptions\n    },\n});\n\nvar FieldInteger = NumericField.extend({\n    description: _lt(\"Integer\"),\n    className: 'o_field_integer o_field_number',\n    supportedFieldTypes: ['integer'],\n    isQuickEditable: true,\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Format integer value\n     *\n     * Note: We have to overwrite this method to allow virtual ids. A virtual id\n     * is a character string composed of an integer and has a dash and other\n     * information.\n     * E.g: in calendar, the recursive event have virtual id linked to a real id\n     * virtual event id \"23-20170418020000\" is linked to the event id 23\n     *\n     * @override\n     * @private\n     * @param {integer|string} value\n     * @returns {string}\n     */\n    _formatValue: function (value) {\n        if (typeof value === 'string') {\n            if (!/^[0-9]+-/.test(value)) {\n                throw new Error('\"' + value + '\" is not an integer or a virtual id');\n            }\n            return value;\n        }\n        return this._super.apply(this, arguments);\n    },\n});\n\nvar FieldFloat = NumericField.extend({\n    description: _lt(\"Decimal\"),\n    className: 'o_field_float o_field_number',\n    supportedFieldTypes: ['float'],\n    isQuickEditable: true,\n\n    /**\n     * Float fields have an additional precision parameter that is read from\n     * either the field node in the view or the field python definition itself.\n     *\n     * @override\n     */\n    init: function () {\n        this._super.apply(this, arguments);\n        if (this.attrs.digits) {\n            this.nodeOptions.digits = JSON.parse(this.attrs.digits);\n        }\n    },\n});\n\nvar FieldFloatTime = FieldFloat.extend({\n    description: _lt(\"Time\"),\n    // this is not strictly necessary, as for this widget to be used, the 'widget'\n    // attrs must be set to 'float_time', so the formatType is automatically\n    // 'float_time', but for the sake of clarity, we explicitely define a\n    // FieldFloatTime widget with formatType = 'float_time'.\n    formatType: 'float_time',\n    isQuickEditable: true,\n\n    init: function () {\n        this._super.apply(this, arguments);\n        this.formatType = 'float_time';\n    },\n    /**\n     * Ensure the widget is re-rendered after being edited s.t. the value is\n     * directly formatted (without waiting for the record to be saved, as we do\n     * by default).\n     *\n     * See InputField@reset: we skip the call to _render if this widget initiated\n     * the change.\n     *\n     * Note: the default behavior could be changed s.t. all fields are formatted\n     * directly on blur.\n     *\n     * @override\n     */\n    async reset() {\n        await this._super(...arguments);\n        if (!this.isDirty) {\n            await this._render();\n        }\n    },\n});\n\nvar FieldFloatFactor = FieldFloat.extend({\n    supportedFieldTypes: ['float'],\n    className: 'o_field_float_factor',\n    formatType: 'float_factor',\n    isQuickEditable: true,\n\n    /**\n     * @constructor\n     */\n    init: function () {\n        this._super.apply(this, arguments);\n        // default values\n        if (!this.nodeOptions.factor){\n            this.nodeOptions.factor = 1;\n        }\n        // use as format and parse options\n        this.parseOptions = this.nodeOptions;\n    }\n});\n\n/**\n * The goal of this widget is to replace the input field by a button containing a\n * range of possible values (given in the options). Each click allows the user to loop\n * in the range. The purpose here is to restrict the field value to a predefined selection.\n * Also, the widget support the factor conversion as the *float_factor* widget (Range values\n * should be the result of the conversion).\n **/\nvar FieldFloatToggle = AbstractField.extend({\n    supportedFieldTypes: ['float'],\n    formatType: 'float_factor',\n    className: 'o_field_float_toggle',\n    tagName: 'span',\n    events: {\n        click: '_onClick'\n    },\n\n    /**\n     * @constructor\n     */\n    init: function () {\n        this._super.apply(this, arguments);\n\n        this.formatType = 'float_factor';\n\n        // force the button to work in readonly mode\n        if (this.mode === 'edit' || this.nodeOptions.force_button) {\n            this.tagName = 'button';\n        }\n\n        // we don't inherit Float Field\n        if (this.attrs.digits) {\n            this.nodeOptions.digits = JSON.parse(this.attrs.digits);\n        }\n        // default values\n        if (!this.nodeOptions.factor){\n            this.nodeOptions.factor = 1;\n        }\n        if (!this.nodeOptions.range){\n            this.nodeOptions.range = [0.0, 0.5, 1.0];\n        }\n\n        // use as format and parse options\n        this.parseOptions = this.nodeOptions;\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Get the display value but in real type to use it in calculations\n     *\n     * @private\n     * @returns {float} The current formatted value\n     */\n    _getDisplayedValue: function () {\n        // this.value is a plain float\n        // Matches what is in Database\n        var usrFormatValue = this._formatValue(this.value);\n        // usrFormatValue is string\n        // contains a float represented in a user specific format\n        // the float is the fraction by [this.factor] of this.value\n        return field_utils.parse['float'](usrFormatValue);\n    },\n    /**\n     * Formats the HTML input tag for edit mode and stores selection status.\n     *\n     * @override\n     * @private\n     */\n    _renderEdit: function () {\n        // Keep a reference to the input so $el can become something else\n        // without losing track of the actual input.\n        this.$el.text(this._formatValue(this.value));\n    },\n    /**\n     * Resets the content to the formated value in readonly mode.\n     *\n     * @override\n     * @private\n     */\n    _renderReadonly: function () {\n        this.$el.text(this._formatValue(this.value));\n    },\n    /**\n     * Get the next value in the range, from the current one. If the current\n     * one is not in the range, the next value of the closest one will be chosen.\n     *\n     * @private\n     * @returns {number} The next value in the range\n     */\n    _nextValue: function () {\n        var range = this.nodeOptions.range;\n        var val =  utils.closestNumber(this._getDisplayedValue(), range);\n        var index = _.indexOf(range, val);\n        if (index !== -1) {\n            if (index + 1 < range.length) {\n                return range[index + 1];\n            }\n        }\n        return range[0];\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Clicking on the button triggers the change of value; the next one of\n     * the range will be displayed.\n     *\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onClick: function(ev) {\n        // force the button to work in readonly mode\n        if (this.mode === 'edit' || this.nodeOptions.force_button) {\n            ev.stopPropagation();\n            var next_val = this._nextValue();\n            next_val = field_utils.format['float'](next_val);\n            this._setValue(next_val); // will be parsed in _setValue\n        }\n    },\n    /**\n     * For float toggle fields, 0 is a valid value.\n     *\n     * @override\n     */\n    isSet: function () {\n        return this.value === 0 || this._super(...arguments);\n    },\n});\n\nvar FieldPercentage = FieldFloat.extend({\n    className: 'o_field_float_percentage o_field_number',\n    description: _lt(\"Percentage\"),\n\n    /**\n     * @constructor\n     */\n    init() {\n        this._super(...arguments);\n        if (this.mode === 'edit') {\n            this.tagName = 'div';\n            this.className += ' o_input';\n\n            // do not display % in the input in edit\n            this.formatOptions.noSymbol = true;\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * For percentage widget, the input is inside a div, alongside a span\n     * containing the percentage(%) symbol.\n     *\n     * @override\n     * @private\n     */\n    _renderEdit() {\n        this.$el.empty();\n        // Prepare and add the input\n        this._prepareInput(this.$input).appendTo(this.$el);\n        const $percentageSymbol = $('<span>', { text: '%' });\n        this.$el.append($percentageSymbol);\n    },\n});\n\nvar FieldText = InputField.extend(TranslatableFieldMixin, {\n    description: _lt(\"Multiline Text\"),\n    className: 'o_field_text',\n    supportedFieldTypes: ['text', 'html'],\n    tagName: 'span',\n    isQuickEditable: true,\n\n    /**\n     * @constructor\n     */\n    init: function () {\n        this._super.apply(this, arguments);\n\n        if (this.mode === 'edit') {\n            this.tagName = 'textarea';\n        }\n        this.autoResizeOptions = {parent: this};\n    },\n    /**\n     * As it it done in the start function, the autoresize is done only once.\n     *\n     * @override\n     */\n    start: function () {\n        if (this.mode === 'edit') {\n            dom.autoresize(this.$el, this.autoResizeOptions);\n            if (this.field.translate) {\n                this.$el = this.$el.add(this._renderTranslateButton());\n                this.$el.addClass('o_field_translate');\n            }\n        }\n        return this._super();\n    },\n    /**\n     * Override to force a resize of the textarea when its value has changed\n     *\n     * @override\n     */\n    reset: function () {\n        var self = this;\n        return Promise.resolve(this._super.apply(this, arguments)).then(function () {\n            if (self.mode === 'edit') {\n                self.$input.trigger('change');\n            }\n        });\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n    \n    /**\n     * @private\n     * @override\n     */\n    _quickEdit: function () {\n        this.activate({noselect: true, noAutomaticCreate: true});\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Stops the enter navigation in a text area.\n     *\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onKeydown: function (ev) {\n        if (ev.which === $.ui.keyCode.ENTER) {\n            ev.stopPropagation();\n            return;\n        }\n        this._super.apply(this, arguments);\n    },\n});\n\nvar ListFieldText = FieldText.extend({\n    /**\n     * @override\n     */\n    init: function () {\n        this._super.apply(this, arguments);\n        this.autoResizeOptions.min_height = 0;\n    },\n});\n\n/**\n * Displays a handle to modify the sequence.\n */\nvar HandleWidget = AbstractField.extend({\n    description: _lt(\"Handle\"),\n    noLabel: true,\n    className: 'o_row_handle fa fa-sort ui-sortable-handle',\n    widthInList: '33px',\n    tagName: 'span',\n    supportedFieldTypes: ['integer'],\n\n    /*\n     * @override\n     */\n    isSet: function () {\n        return true;\n    },\n});\n\nvar FieldEmail = InputField.extend({\n    description: _lt(\"Email\"),\n    className: 'o_field_email',\n    events: _.extend({}, InputField.prototype.events, {\n        'click': '_onClickLink',\n    }),\n    prefix: 'mailto',\n    supportedFieldTypes: ['char'],\n    isQuickEditable: true,\n\n    /**\n     * In readonly, emails should be a link, not a span.\n     *\n     * @override\n     */\n    init: function () {\n        this._super.apply(this, arguments);\n        this.tagName = this.mode === 'readonly' ? 'div' : 'input';\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Returns the associated link.\n     *\n     * @override\n     */\n    getFocusableElement: function () {\n        return this.mode === 'readonly' ? this.$el.find('a') : this._super.apply(this, arguments);\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * In readonly, emails should be a mailto: link with proper formatting.\n     *\n     * @override\n     * @private\n     */\n    _renderReadonly: function () {\n        if (this.value) {\n            this.el.innerHTML = '';\n            this.el.classList.add(\"o_form_uri\", \"o_text_overflow\");\n            const anchorEl = Object.assign(document.createElement('a'), {\n                text: this.value,\n                href: `${this.prefix}:${this.value}`,\n            });\n            this.el.appendChild(anchorEl);\n        }\n    },\n    /**\n     * Trim the value input by the user.\n     *\n     * @override\n     * @private\n     * @param {any} value\n     * @param {Object} [options]\n     */\n    _setValue: function (value, options) {\n        if (this.field.trim) {\n            value = value.trim();\n        }\n        return this._super(value, options);\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Prevent the URL click from opening the record (when used on a list).\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickLink: function (ev) {\n        if (ev.target.matches(\"a\")) {\n            ev.stopImmediatePropagation();\n        }\n    },\n});\n\nvar FieldPhone = FieldEmail.extend({\n    description: _lt(\"Phone\"),\n    className: 'o_field_phone',\n    prefix: 'tel',\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     * @private\n     */\n    _renderReadonly: function () {\n        if (this.value) {\n            this.el.innerHTML = '';\n            this.el.classList.add(\"o_form_uri\", \"o_text_overflow\");\n            const anchorEl = Object.assign(document.createElement('a'), {\n                text: this.value,\n                href: `${this.prefix}:${this.value.replace(/\\s+/g, \"\")}`,\n            });\n            this.el.appendChild(anchorEl);\n        }\n\n        // This class should technically be there in case of a very very long\n        // phone number, but it breaks the o_row mechanism, which is more\n        // important right now.\n        this.$el.removeClass('o_text_overflow');\n    },\n});\n\nvar UrlWidget = InputField.extend({\n    description: _lt(\"URL\"),\n    className: 'o_field_url',\n    events: _.extend({}, InputField.prototype.events, {\n        'click': '_onClick',\n    }),\n    supportedFieldTypes: ['char'],\n    isQuickEditable: true,\n\n    /**\n     * Urls are links in readonly mode.\n     *\n     * @override\n     */\n    init: function () {\n        this._super.apply(this, arguments);\n        this.tagName = this.mode === 'readonly' ? 'div' : 'input';\n        this.websitePath = this.nodeOptions.website_path || false;\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Returns the associated link.\n     *\n     * @override\n     */\n    getFocusableElement: function () {\n        return this.mode === 'readonly' ? this.$el.find('a') : this._super.apply(this, arguments);\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * In readonly, the widget needs to be a link with proper href and proper\n     * support for the design, which is achieved by the added classes.\n     *\n     * @override\n     * @private\n     */\n    _renderReadonly: function () {\n        if (!this.value) {\n            return;\n        }\n        let href = this.value;\n        if (this.value && !this.websitePath) {\n            const regex = /^((ftp|http)s?:\\/)?\\//i; // http(s)://... ftp(s)://... /...\n            href = !regex.test(this.value) ? `http://${href}` : href;\n        }\n        this.el.classList.add(\"o_form_uri\", \"o_text_overflow\");\n        const anchorEl = Object.assign(document.createElement('a'), {\n            text: this.attrs.text || this.value,\n            href: href,\n            target: '_blank',\n        });\n        this.el.textContent = '';\n        this.el.appendChild(anchorEl);\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Prevent the URL click from opening the record (when used on a list).\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClick: function (ev) {\n        ev.stopPropagation();\n    },\n});\n\nvar CopyClipboard = {\n    quickEditExclusion: [\n        '.o_clipboard_button',\n    ],\n\n    /**\n     * @override\n     */\n    destroy: function () {\n        this._super.apply(this, arguments);\n        if (this.clipboard) {\n            this.clipboard.destroy();\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Instatiates the Clipboad lib.\n     */\n    _initClipboard: function () {\n        var self = this;\n        var $clipboardBtn = this.$('.o_clipboard_button');\n        $clipboardBtn.tooltip({title: _t('Copied !'), trigger: 'manual', placement: 'right'});\n        this.clipboard = new ClipboardJS($clipboardBtn[0], {\n            text: function () {\n                return self.value.trim();\n            },\n            // Container added because of Bootstrap modal that give the focus to another element.\n            // We need to give to correct focus to ClipboardJS (see in ClipboardJS doc)\n            // https://github.com/zenorocha/clipboard.js/issues/155\n            container: self.$el[0]\n        });\n        this.clipboard.on('success', function () {\n            _.defer(function () {\n                $clipboardBtn.tooltip('show');\n                _.delay(function () {\n                    $clipboardBtn.tooltip('hide');\n                }, 800);\n            });\n        });\n    },\n    /**\n     * @override\n     */\n    _renderReadonly: function () {\n        this._super.apply(this, arguments);\n        if (this.value) {\n            this.$el.append($(qweb.render(this.clipboardTemplate)));\n            this._initClipboard();\n        }\n    }\n};\n\nvar TextCopyClipboard = FieldText.extend(CopyClipboard, {\n    description: _lt(\"Copy to Clipboard\"),\n    clipboardTemplate: 'CopyClipboardText',\n    className: \"o_field_copy\",\n});\n\nvar CharCopyClipboard = FieldChar.extend(CopyClipboard, {\n    description: _lt(\"Copy to Clipboard\"),\n    clipboardTemplate: 'CopyClipboardChar',\n    className: 'o_field_copy o_text_overflow',\n});\n\nvar URLCopyClipboard = FieldChar.extend(CopyClipboard, {\n    description: _lt(\"Copy to Clipboard\"),\n    clipboardTemplate: 'CopyClipboardChar',\n    className: 'o_field_copy o_text_overflow o_field_copy_url',\n    events: _.extend({}, FieldChar.prototype.events, {\n        'click': '_onClick',\n    }),\n\n    _onClick: function(ev) {\n        if(ev.target.className.includes('o_field_copy_url')) {\n            ev.stopPropagation();\n\n            window.open(this.value, '_blank');\n        }\n    }\n});\n\nvar AbstractFieldBinary = AbstractField.extend({\n    events: _.extend({}, AbstractField.prototype.events, {\n        'change .o_input_file': 'on_file_change',\n        'click .o_select_file_button': function () {\n            this.$('.o_input_file').click();\n        },\n        'click .o_clear_file_button': '_onClearClick',\n    }),\n    init: function (parent, name, record) {\n        this._super.apply(this, arguments);\n        this.fields = record.fields;\n        this.useFileAPI = !!window.FileReader;\n        this.max_upload_size = session.max_file_upload_size || 128 * 1024 * 1024;\n        this.accepted_file_extensions = (this.nodeOptions && this.nodeOptions.accepted_file_extensions) || this.accepted_file_extensions || '*';\n        if (!this.useFileAPI) {\n            var self = this;\n            this.fileupload_id = _.uniqueId('o_fileupload');\n            $(window).on(this.fileupload_id, function () {\n                var args = [].slice.call(arguments).slice(1);\n                self.on_file_uploaded.apply(self, args);\n            });\n        }\n    },\n    destroy: function () {\n        if (this.fileupload_id) {\n            $(window).off(this.fileupload_id);\n        }\n        this._super.apply(this, arguments);\n    },\n    on_file_change: function (e) {\n        var self = this;\n        var file_node = e.target;\n        if ((this.useFileAPI && file_node.files.length) || (!this.useFileAPI && $(file_node).val() !== '')) {\n            if (this.useFileAPI) {\n                var file = file_node.files[0];\n                if (file.size > this.max_upload_size) {\n                    var msg = _t(\"The selected file exceed the maximum file size of %s.\");\n                    this.displayNotification({ title: _t(\"File upload\"), message: _.str.sprintf(msg, utils.human_size(this.max_upload_size)), type: 'danger' });\n                    return false;\n                }\n                utils.getDataURLFromFile(file).then(function (data) {\n                    data = data.split(',')[1];\n                    self.on_file_uploaded(file.size, file.name, file.type, data);\n                });\n            } else {\n                this.$('form.o_form_binary_form').submit();\n            }\n            this.$('.o_form_binary_progress').show();\n            this.$('button').hide();\n        }\n    },\n    on_file_uploaded: function (size, name) {\n        if (size === false) {\n            this.displayNotification({ message: _t(\"There was a problem while uploading your file\"), type: 'danger' });\n            console.warn(\"Error while uploading file : \", name);\n        } else {\n            this.on_file_uploaded_and_valid.apply(this, arguments);\n        }\n        this.$('.o_form_binary_progress').hide();\n        this.$('button').show();\n    },\n    on_file_uploaded_and_valid: function (size, name, content_type, file_base64) {\n        this.set_filename(name);\n        this._setValue(file_base64);\n        this._render();\n    },\n    /**\n     * We need to update another field.  This method is so deprecated it is not\n     * even funny.  We need to replace this with the mechanism of field widgets\n     * declaring statically that they need to listen to every changes in other\n     * fields\n     *\n     * @deprecated\n     *\n     * @param {any} value\n     */\n    set_filename: function (value) {\n        var filename = this.attrs.filename;\n        if (filename && filename in this.fields) {\n            var changes = {};\n            changes[filename] = value;\n            this.trigger_up('field_changed', {\n                dataPointID: this.dataPointID,\n                changes: changes,\n                viewType: this.viewType,\n            });\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n    /**\n     * Clear the file input\n     *\n     * @private\n     */\n    _clearFile: function (){\n        var self = this;\n        this.$('.o_input_file').val('');\n        this.set_filename('');\n        if (!this.isDestroyed()) {\n            this._setValue(false).then(function() {\n                self._render();\n            });\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n    /**\n     * On \"clear file\" button click\n     *\n     * @param {MouseEvent} ev\n     * @private\n     */\n    _onClearClick: function (ev) {\n        this._clearFile();\n    },\n});\n\nvar FieldBinaryImage = AbstractFieldBinary.extend({\n    description: _lt(\"Image\"),\n    fieldDependencies: _.extend({}, AbstractFieldBinary.prototype.fieldDependencies, {\n        __last_update: {type: 'datetime'},\n    }),\n\n    template: 'FieldBinaryImage',\n    placeholder: \"/web/static/img/placeholder.png\",\n    events: _.extend({}, AbstractFieldBinary.prototype.events, {\n        'click img': function () {\n            if (this.mode === \"readonly\") {\n                this.trigger_up('bounce_edit');\n            }\n        },\n    }),\n    supportedFieldTypes: ['binary'],\n    file_type_magic_word: {\n        '/': 'jpg',\n        'R': 'gif',\n        'i': 'png',\n        'P': 'svg+xml',\n    },\n    accepted_file_extensions: 'image/*',\n    /**\n     * Returns the image URL from a model.\n     *\n     * @private\n     * @param {string} model    model from which to retrieve the image\n     * @param {string} res_id   id of the record\n     * @param {string} field    name of the image field\n     * @param {string} unique   an unique integer for the record, usually __last_update\n     * @returns {string} URL of the image\n     */\n    _getImageUrl: function (model, res_id, field, unique) {\n        return session.url('/web/image', {\n            model: model,\n            id: JSON.stringify(res_id),\n            field: field,\n            // unique forces a reload of the image when the record has been updated\n            unique: field_utils.format.datetime(unique).replace(/[^0-9]/g, ''),\n        });\n    },\n    _render: function () {\n        var self = this;\n        var url = this.placeholder;\n        if (this.value) {\n            if (!utils.is_bin_size(this.value)) {\n                // Use magic-word technique for detecting image type\n                url = 'data:image/' + (this.file_type_magic_word[this.value[0]] || 'png') + ';base64,' + this.value;\n            } else {\n                var field = this.nodeOptions.preview_image || this.name;\n                var unique = this.recordData.__last_update;\n                url = this._getImageUrl(this.model, this.res_id, field, unique);\n            }\n        }\n        var $img = $(qweb.render(\"FieldBinaryImage-img\", {widget: this, url: url}));\n        // override css size attributes (could have been defined in css files)\n        // if specified on the widget\n        var width = this.nodeOptions.size ? this.nodeOptions.size[0] : this.attrs.width;\n        var height = this.nodeOptions.size ? this.nodeOptions.size[1] : this.attrs.height;\n        if (width) {\n            $img.attr('width', width);\n            $img.css('max-width', width + 'px');\n            if (!height) {\n                $img.css('height', 'auto');\n                $img.css('max-height', '100%');\n            }\n        }\n        if (height) {\n            $img.attr('height', height);\n            $img.css('max-height', height + 'px');\n            if (!width) {\n                $img.css('width', 'auto');\n                $img.css('max-width', '100%');\n            }\n        }\n        this.$('> img').remove();\n        this.$el.prepend($img);\n\n        $img.one('error', function () {\n            $img.attr('src', self.placeholder);\n            self.displayNotification({ message: _t(\"Could not display the selected image\"), type: 'danger' });\n        });\n\n        return this._super.apply(this, arguments);\n    },\n    /**\n     * Only enable the zoom on image in read-only mode, and if the option is enabled.\n     *\n     * @override\n     * @private\n     */\n    _renderReadonly: function () {\n        this._super.apply(this, arguments);\n\n        var unique = this.recordData.__last_update;\n        var url = this._getImageUrl(this.model, this.res_id, 'image_1920', unique);\n        var $img;\n        var imageField = _.find(Object.keys(this.recordData), function(o) {\n            return o.startsWith('image_');\n        });\n\n        if(this.nodeOptions.background)\n        {\n            if('tag' in this.nodeOptions) {\n                this.tagName = this.nodeOptions.tag;\n            }\n\n            if('class' in this.attrs) {\n                this.$el.addClass(this.attrs.class);\n            }\n\n            var urlThumb = this._getImageUrl(this.model, this.res_id, this.name, unique);\n\n            this.$el.empty();\n            $img = this.$el;\n            $img.css('backgroundImage', 'url(' + urlThumb + ')');\n        } else {\n            $img = this.$('img');\n        }\n        if(this.nodeOptions.zoom) {\n            var zoomDelay = 0;\n            if (this.nodeOptions.zoom_delay) {\n                zoomDelay = this.nodeOptions.zoom_delay;\n            }\n            if(this.recordData[imageField]) {\n                $img.attr('data-zoom', 1);\n                $img.attr('data-zoom-image', url);\n\n                $img.zoomOdoo({\n                    event: 'mouseenter',\n                    timer: zoomDelay,\n                    attach: '.o_content',\n                    attachToTarget: true,\n                    disabledOnMobile: false,\n                    onShow: function () {\n                        var zoomHeight = Math.ceil(this.$zoom.height());\n                        var zoomWidth = Math.ceil(this.$zoom.width());\n                        if( zoomHeight < 128 && zoomWidth < 128) {\n                            this.hide();\n                        }\n                        core.bus.on('keydown', this, this.hide);\n                        core.bus.on('click', this, this.hide);\n                    },\n                    beforeAttach: function () {\n                        this.$flyout.css({ width: '512px', height: '512px' });\n                    },\n                    preventClicks: this.nodeOptions.preventClicks,\n                });\n            }\n        }\n    },\n});\n\nvar CharImageUrl = AbstractField.extend({\n    className: 'o_field_image',\n    description: _lt(\"Image\"),\n    supportedFieldTypes: ['char'],\n    placeholder: \"/web/static/img/placeholder.png\",\n\n    _renderReadonly: function () {\n        var self = this;\n        const url = this.value;\n        if (url) {\n            var $img = $(qweb.render(\"FieldBinaryImage-img\", {widget: this, url: url}));\n            // override css size attributes (could have been defined in css files)\n            // if specified on the widget\n            const width = this.nodeOptions.size ? this.nodeOptions.size[0] : this.attrs.width;\n            const height = this.nodeOptions.size ? this.nodeOptions.size[1] : this.attrs.height;\n            if (width) {\n                $img.attr('width', width);\n                $img.css('max-width', width + 'px');\n                if (!height) {\n                    $img.css('height', 'auto');\n                    $img.css('max-height', '100%');\n                }\n            }\n            if (height) {\n                $img.attr('height', height);\n                $img.css('max-height', height + 'px');\n                if (!width) {\n                    $img.css('width', 'auto');\n                    $img.css('max-width', '100%');\n                }\n            }\n            this.$('> img').remove();\n            this.$el.prepend($img);\n\n            $img.one('error', function () {\n                $img.attr('src', self.placeholder);\n                self.displayNotification({\n                    type: 'info',\n                    message: _t(\"Could not display the specified image url.\"),\n                });\n            });\n        }\n\n        return this._super.apply(this, arguments);\n    },\n});\n\nvar KanbanFieldBinaryImage = FieldBinaryImage.extend({\n    // In kanban views, there is a weird logic to determine whether or not a\n    // click on a card should open the record in a form view.  This logic checks\n    // if the clicked element has click handlers bound on it, and if so, does\n    // not open the record (assuming that the click will be handle by someone\n    // else).  In the case of this widget, there are clicks handler but they\n    // only apply in edit mode, which is never the case in kanban views, so we\n    // simply remove them.\n    events: {},\n});\n\nvar KanbanCharImageUrl = CharImageUrl.extend({\n    // In kanban views, there is a weird logic to determine whether or not a\n    // click on a card should open the record in a form view.  This logic checks\n    // if the clicked element has click handlers bound on it, and if so, does\n    // not open the record (assuming that the click will be handled by someone\n    // else).  In the case of this widget, there are clicks handler but they\n    // only apply in edit mode, which is never the case in kanban views, so we\n    // simply remove them.\n    events: {},\n});\n\nvar FieldBinaryFile = AbstractFieldBinary.extend({\n    description: _lt(\"File\"),\n    template: 'FieldBinaryFile',\n    events: _.extend({}, AbstractFieldBinary.prototype.events, {\n        'click': function (event) {\n            if (this.mode === 'readonly' && this.value && this.recordData.id) {\n                this.on_save_as(event);\n            }\n        },\n        'click .o_input': function () { // eq[0]\n            this.$('.o_input_file').click();\n        },\n    }),\n    supportedFieldTypes: ['binary'],\n    init: function () {\n        this._super.apply(this, arguments);\n        this.filename_value = this.recordData[this.attrs.filename];\n    },\n    _renderReadonly: function () {\n        var visible = !!(this.value && this.res_id);\n        this.$el.empty().css('cursor', 'not-allowed');\n        this.do_toggle(visible);\n        if (visible) {\n            this.$el.css('cursor', 'pointer')\n                    .text(this.filename_value || '')\n                    .prepend($('<span class=\"fa fa-download\"/>'), ' ');\n        }\n    },\n    _renderEdit: function () {\n        if (this.value) {\n            this.$el.children().removeClass('o_hidden');\n            this.$('.o_select_file_button').first().addClass('o_hidden');\n            this.$('.o_input').eq(0).val(this.filename_value || this.value);\n        } else {\n            this.$el.children().addClass('o_hidden');\n            this.$('.o_select_file_button').first().removeClass('o_hidden');\n        }\n    },\n    set_filename: function (value) {\n        this._super.apply(this, arguments);\n        this.filename_value = value; // will be used in the re-render\n        // the filename being edited but not yet saved, if the user clicks on\n        // download, he'll get the file corresponding to the current value\n        // stored in db, which isn't the one whose filename is displayed in the\n        // input, so we disable the download button\n        this.$('.o_save_file_button').prop('disabled', true);\n    },\n    on_save_as: function (ev) {\n        if (!this.value) {\n            this.displayNotification({ message: _t(\"The field is empty, there's nothing to save.\"), type: 'danger' });\n            ev.stopPropagation();\n        } else if (this.res_id) {\n            framework.blockUI();\n            var filename_fieldname = this.attrs.filename;\n            this.getSession().get_file({\n                complete: framework.unblockUI,\n                data: {\n                    'model': this.model,\n                    'id': this.res_id,\n                    'field': this.name,\n                    'filename_field': filename_fieldname,\n                    'filename': this.recordData[filename_fieldname] || \"\",\n                    'download': true,\n                    'data': utils.is_bin_size(this.value) ? null : this.value,\n                },\n                error: (error) => this.call('crash_manager', 'rpc_error', error),\n                url: '/web/content',\n            });\n            ev.stopPropagation();\n        }\n    },\n});\n\nvar FieldPdfViewer = FieldBinaryFile.extend({\n    description: _lt(\"PDF Viewer\"),\n    supportedFieldTypes: ['binary'],\n    template: 'FieldPdfViewer',\n    accepted_file_extensions: 'application/pdf',\n    /**\n     * @override\n     */\n    init: function () {\n        this._super.apply(this, arguments);\n        this.PDFViewerApplication = false;\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {string} [fileURI] file URI if specified\n     * @returns {string} the pdf viewer URI\n     */\n    _getURI: function (fileURI) {\n        var page = this.recordData[this.name + '_page'] || 1;\n        if (!fileURI) {\n            var queryObj = {\n                model: this.model,\n                field: this.name,\n                id: this.res_id,\n            };\n            var queryString = $.param(queryObj);\n            fileURI = '/web/content?' + queryString;\n        }\n        fileURI = encodeURIComponent(fileURI);\n        var viewerURL = '/web/static/lib/pdfjs/web/viewer.html?file=';\n        return viewerURL + fileURI + '#page=' + page;\n    },\n    /**\n     * @private\n     * @override\n     */\n    _render: function () {\n        var self = this;\n        var $pdfViewer = this.$('.o_form_pdf_controls').children().add(this.$('.o_pdfview_iframe'));\n        var $selectUpload = this.$('.o_select_file_button').first();\n        var $iFrame = this.$('.o_pdfview_iframe');\n\n        $iFrame.on('load', function () {\n            self.PDFViewerApplication = this.contentWindow.window.PDFViewerApplication;\n        });\n        if (this.mode === \"readonly\" && this.value) {\n            $iFrame.attr('src', this._getURI());\n        } else {\n            if (this.value) {\n                var binSize = utils.is_bin_size(this.value);\n                $pdfViewer.removeClass('o_hidden');\n                $selectUpload.addClass('o_hidden');\n                if (binSize) {\n                    $iFrame.attr('src', this._getURI());\n                }\n            } else {\n                $pdfViewer.addClass('o_hidden');\n                $selectUpload.removeClass('o_hidden');\n            }\n        }\n        hidePDFJSButtons($iFrame[0]);\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     * @private\n     * @param {Event} ev\n     */\n    on_file_change: function (ev) {\n        this._super.apply(this, arguments);\n        var files = ev.target.files;\n        if (!files || files.length === 0) {\n            return;\n        }\n        // TOCheck: is there requirement to fallback on FileReader if browser don't support URL\n        var fileURI = URL.createObjectURL(files[0]);\n        if (this.PDFViewerApplication) {\n            this.PDFViewerApplication.open(fileURI, 0);\n        } else {\n            this.$('.o_pdfview_iframe').attr('src', this._getURI(fileURI));\n        }\n    },\n    /**\n     * Remove the behaviour of on_save_as in FieldBinaryFile.\n     *\n     * @override\n     * @private\n     * @param {MouseEvent} ev\n     */\n    on_save_as: function (ev) {\n        ev.stopPropagation();\n    },\n\n});\n\nvar PriorityWidget = AbstractField.extend({\n    description: _lt(\"Priority\"),\n    // the current implementation of this widget makes it\n    // only usable for fields of type selection\n    className: \"o_priority\",\n    attributes: {\n        'role': 'radiogroup',\n    },\n    events: {\n        'mouseover > a': '_onMouseOver',\n        'mouseout > a': '_onMouseOut',\n        'click > a': '_onPriorityClick',\n        'keydown > a': '_onKeydown',\n    },\n    supportedFieldTypes: ['selection'],\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Like boolean fields, this widget always has a value, since the default\n     * value is already a valid value.\n     *\n     * @override\n     */\n    isSet: function () {\n        return true;\n    },\n\n    /**\n     * Returns the currently-checked star, or the first one if no star is\n     * checked.\n     *\n     * @override\n     */\n    getFocusableElement: function () {\n        var checked = this.$(\"[aria-checked='true']\");\n        return checked.length ? checked : this.$(\"[data-index='1']\");\n    },\n\n    on_attach_callback() {\n        const self = this;\n        if (self.viewType === \"form\") {\n            let provide = () => {\n                return self.field.selection.map((value) => ({\n                    name: value[1],\n                    action: () => {\n                        this._setValue(value[0]);\n                    }\n                }))\n            }\n            let getCommandDefinition = (env) => ({\n                name: env._t(\"Set priority...\"),\n                options: {\n                    activeElement: env.services.ui.getActiveElementOf(self.el),\n                    category: \"smart_action\",\n                    hotkey: \"alt+r\",\n                },\n                action() {\n                    return env.services.command.openPalette({\n                        placeholder: env._t(\"Set a priority...\"),\n                        providers: [{ provide }],\n                    })\n                },\n            });\n            core.bus.trigger(\"set_legacy_command\", \"web.PriorityWidget.setPriority\", getCommandDefinition);\n        }\n    },\n\n    on_detach_callback() {\n        core.bus.trigger(\"remove_legacy_command\", \"web.PriorityWidget.setPriority\");\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Renders a star for each possible value, readonly or edit mode doesn't matter.\n     *\n     * @override\n     * @private\n     */\n    _render: function () {\n        var self = this;\n        var index_value = this.value ? _.findIndex(this.field.selection, function (v) {\n            return v[0] === self.value;\n        }) : 0;\n        this.$el.empty();\n        this.empty_value = this.field.selection[0][0];\n        this.$el.attr('aria-label', this.string);\n        const isReadonly = this.record.evalModifiers(this.attrs.modifiers).readonly;\n        _.each(this.field.selection.slice(1), function (choice, index) {\n            const tag = isReadonly ? '<span>' : '<a href=\"#\">';\n            self.$el.append(self._renderStar(tag, index_value >= index + 1, index + 1, choice[1], index_value));\n        });\n    },\n\n    /**\n     * Renders a star representing a particular value for this field.\n     *\n     * @param {string} tag html tag to be passed to jquery to hold the star\n     * @param {boolean} isFull whether the star is a full star or not\n     * @param {integer} index the index of the star in the series\n     * @param {string} tip tooltip for this star's meaning\n     * @param {integer} indexValue the index of the last full star or 0\n     * @private\n     */\n    _renderStar: function (tag, isFull, index, tip, indexValue) {\n        var isChecked = indexValue === index;\n        var defaultFocus = indexValue === 0 && index === 1;\n        return $(tag)\n            .attr('role', 'radio')\n            .attr('aria-checked', isChecked)\n            .attr('title', tip)\n            .attr('aria-label', tip)\n            .attr('tabindex', isChecked || defaultFocus ? 0 : -1)\n            .attr('data-index', index)\n            .addClass('o_priority_star fa')\n            .toggleClass('fa-star', isFull)\n            .toggleClass('fa-star-o', !isFull);\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Update the value of the field based on which star the user clicked on.\n     *\n     * @param {MouseEvent} event\n     * @private\n     */\n    _onPriorityClick: function (event) {\n        event.preventDefault();\n        event.stopPropagation();\n        var index = $(event.currentTarget).data('index');\n        var newValue = this.field.selection[index][0];\n        if (newValue === this.value) {\n            newValue = this.empty_value;\n        }\n        this._setValue(newValue);\n    },\n\n    /**\n     * Reset the star display status.\n     *\n     * @private\n     */\n    _onMouseOut: function () {\n        clearTimeout(this.hoverTimer);\n        var self = this;\n        this.hoverTimer = setTimeout(function () {\n            self._render();\n        }, 200);\n    },\n\n    /**\n     * Colors the stars to show the user the result when clicking on it.\n     *\n     * @param {MouseEvent} event\n     * @private\n     */\n    _onMouseOver: function (event) {\n        clearTimeout(this.hoverTimer);\n        this.$('.o_priority_star').removeClass('fa-star-o').addClass('fa-star');\n        $(event.currentTarget).nextAll().removeClass('fa-star').addClass('fa-star-o');\n    },\n\n    /**\n     * Runs the default behavior when <enter> is pressed over a star\n     * (the same as if it was clicked); otherwise forwards event to the widget.\n     *\n     * @param {KeydownEvent} event\n     * @private\n     */\n    _onKeydown: function (event) {\n        if (event.which === $.ui.keyCode.ENTER) {\n            return;\n        }\n        this._super.apply(this, arguments);\n    },\n\n    _onNavigationMove: function (ev) {\n        var $curControl = this.$('a:focus');\n        var $nextControl;\n        if (ev.data.direction === 'right' || ev.data.direction === 'down') {\n            $nextControl = $curControl.next('a');\n        } else if (ev.data.direction === 'left' || ev.data.direction === 'up') {\n            $nextControl = $curControl.prev('a');\n        }\n        if ($nextControl && $nextControl.length) {\n            ev.stopPropagation();\n            $nextControl.focus();\n            return;\n        }\n        this._super.apply(this, arguments);\n    },\n});\n\nvar AttachmentImage = AbstractField.extend({\n    className: 'o_attachment_image',\n    // Remove event handlers on this widget to ensure that the kanban 'global\n    // click' opens the clicked record, click on abstractField is useful in\n    // Form and List view only.\n    events: _.omit(AbstractField.prototype.events, 'click'),\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Reset cover image when widget value change\n     *\n     * @private\n     */\n    _render: function () {\n        if (this.value) {\n            this.$el.empty().append($('<img>/', {\n                src: \"/web/image/\" + this.value.data.id + \"?unique=1\",\n                title: this.value.data.display_name,\n                alt: _t(\"Image\")\n            }));\n        }\n    }\n});\n\nvar StateSelectionWidget = AbstractField.extend({\n    template: 'FormSelection',\n    events: {\n        'click .dropdown-item': '_setSelection',\n    },\n    supportedFieldTypes: ['selection'],\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Returns the drop down button.\n     *\n     * @override\n     */\n    getFocusableElement: function () {\n        return this.$(\"a[data-toggle='dropdown']\");\n    },\n\n    on_attach_callback() {\n        const self = this;\n        if (self.viewType === \"form\") {\n            let provide = () => {\n                return self.field.selection.map((value) => ({\n                    name: value[1],\n                    action: () => {\n                        this._setValue(value[0]);\n                    }\n                }))\n            }\n            let getCommandDefinition = (env) => ({\n                name: env._t(\"Set kanban state...\"),\n                options: {\n                    activeElement: env.services.ui.getActiveElementOf(self.el),\n                    category: \"smart_action\",\n                    hotkey: \"alt+shift+r\",\n                 },\n                action() {\n                    return env.services.command.openPalette({\n                        placeholder: env._t(\"Set a kanban state...\"),\n                        providers: [{ provide }],\n                    })\n                },\n            });\n            core.bus.trigger(\"set_legacy_command\", \"web.StateSelectionWidget.setKanbanState\", getCommandDefinition);\n        }\n    },\n\n    on_detach_callback() {\n        core.bus.trigger(\"remove_legacy_command\", \"web.StateSelectionWidget.setKanbanState\");\n    },\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Prepares the state values to be rendered using the FormSelection.Items template.\n     *\n     * @private\n     */\n    _prepareDropdownValues: function () {\n        var self = this;\n        var _data = [];\n        var current_stage_id = self.recordData.stage_id && self.recordData.stage_id[0];\n        var stage_data = {\n            id: current_stage_id,\n            legend_normal: this.recordData.legend_normal || undefined,\n            legend_blocked : this.recordData.legend_blocked || undefined,\n            legend_done: this.recordData.legend_done || undefined,\n        };\n        _.map(this.field.selection || [], function (selection_item) {\n            var value = {\n                'name': selection_item[0],\n                'tooltip': selection_item[1],\n            };\n            if (selection_item[0] === 'normal') {\n                value.state_name = stage_data.legend_normal ? stage_data.legend_normal : selection_item[1];\n            } else if (selection_item[0] === 'done') {\n                value.state_class = 'o_status_green';\n                value.state_name = stage_data.legend_done ? stage_data.legend_done : selection_item[1];\n            } else {\n                value.state_class = 'o_status_red';\n                value.state_name = stage_data.legend_blocked ? stage_data.legend_blocked : selection_item[1];\n            }\n            _data.push(value);\n        });\n        return _data;\n    },\n\n    /**\n     * This widget uses the FormSelection template but needs to customize it a bit.\n     *\n     * @private\n     * @override\n     */\n    _render: function () {\n        var states = this._prepareDropdownValues();\n        // Adapt \"FormSelection\"\n        // Like priority, default on the first possible value if no value is given.\n        var currentState = _.findWhere(states, {name: this.value}) || states[0];\n        this.$('.o_status')\n            .removeClass('o_status_red o_status_green')\n            .addClass(currentState.state_class)\n            .prop('special_click', true)\n            .parent().attr('title', currentState.state_name)\n            .attr('aria-label', this.string + \": \" + currentState.state_name);\n\n        // Render \"FormSelection.Items\" and move it into \"FormSelection\"\n        var $items = $(qweb.render('FormSelection.items', {\n            states: _.without(states, currentState)\n        }));\n        var $dropdown = this.$('.dropdown-menu');\n        $dropdown.children().remove(); // remove old items\n        $items.appendTo($dropdown);\n\n        // Disable edition if the field is readonly\n        var isReadonly = this.record.evalModifiers(this.attrs.modifiers).readonly;\n        this.$('a[data-toggle=dropdown]').toggleClass('disabled', isReadonly || false);\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Intercepts the click on the FormSelection.Item to set the widget value.\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _setSelection: function (ev) {\n        ev.preventDefault();\n        if (this.mode !== 'edit') {\n            ev.stopPropagation();\n        }\n        var $item = $(ev.currentTarget);\n        var value = String($item.data('value'));\n        this._setValue(value);\n        if (this.mode === 'edit') {\n            this._render();\n        }\n    },\n});\n\nconst ListStateSelectionWidget = StateSelectionWidget.extend({\n    /**\n     * display the label next to the icon\n     * @override\n     */\n    _render() {\n        this._super.apply(this, arguments);\n\n        const hideLabel = utils.toBoolElse(this.nodeOptions.hide_label || '', false);\n        if (!hideLabel) {\n            const states = this._prepareDropdownValues();\n            const currentState = states.find(state => state.name === this.value) || states[0];\n            const statusEL = this.el.querySelector('.o_status_label');\n            if (statusEL) {\n                statusEL.innerText = currentState.state_name;\n            } else {\n                const labelEL = Object.assign(document.createElement('span'), {\n                    innerText: currentState.state_name,\n                    className: 'o_status_label align-middle',\n                });\n                this.el.appendChild(labelEL);\n            }\n        }\n    },\n});\n\nvar FavoriteWidget = AbstractField.extend({\n    className: 'o_favorite',\n    events: {\n        'click': '_setFavorite'\n    },\n    supportedFieldTypes: ['boolean'],\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * A boolean field is always set since false is a valid value.\n     *\n     * @override\n     */\n    isSet: function () {\n        return true;\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Render favorite icon based on state\n     *\n     * @override\n     * @private\n     */\n    _render: function () {\n        var tip = this.value ? _t('Remove from Favorites') : _t('Add to Favorites');\n        var template = this.attrs.nolabel ? '<a href=\"#\"><i class=\"fa %s\" title=\"%s\" aria-label=\"%s\" role=\"img\"></i></a>' : '<a href=\"#\"><i class=\"fa %s\" role=\"img\" aria-label=\"%s\"></i> %s</a>';\n        this.$el.empty().append(_.str.sprintf(template, this.value ? 'fa-star' : 'fa-star-o', tip, tip));\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Toggle favorite state\n     *\n     * @private\n     * @param {MouseEvent} event\n     */\n    _setFavorite: function (event) {\n        event.preventDefault();\n        event.stopPropagation();\n        this._setValue(!this.value);\n    },\n});\n\nvar LabelSelection = AbstractField.extend({\n    supportedFieldTypes: ['selection'],\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * This widget renders a simple non-editable label. Color classes can be set\n     * using the 'classes' key from the options tag, such as:\n     * <field [...] options=\"{'classes': {'value': 'className', ...}}\"/>\n     *\n     * @private\n     * @override\n     */\n    _render: function () {\n        this.classes = this.nodeOptions && this.nodeOptions.classes || {};\n        var labelClass = this.classes[this.value] || 'primary';\n        this.$el.addClass('badge badge-' + labelClass).text(this._formatValue(this.value));\n    },\n});\n\nvar BooleanToggle = FieldBoolean.extend({\n    description: _lt(\"Toggle\"),\n    className: FieldBoolean.prototype.className + ' o_boolean_toggle',\n    isQuickEditable: true,\n    events: {\n        'click': '_onClick'\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Adds the icon fa-check-circle if value is true else adds icon\n     * fa-times-circle\n     *\n     * The boolean_toggle should only be disabled when there is a readonly modifier\n     * not when the view is in readonly mode\n     *\n     * @override\n     */\n    async _render() {\n        await this._super(...arguments);\n        const classToApply = this.value ? 'fa-check-circle' : 'fa-times-circle';\n        if (this.el.querySelector('i')) {\n            this.el.querySelector('i').remove();\n        }\n        const i = document.createElement(\"i\");\n        i.setAttribute('class', `fa ${classToApply}`);\n        this.el.querySelector('label').appendChild(i);\n        const isReadonly = this.record.evalModifiers(this.attrs.modifiers).readonly || false;\n        this.$input.prop('disabled', isReadonly);\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Toggle active value\n     *\n     * @private\n     * @param {MouseEvent} event\n     */\n    _onClick: async function (event) {\n        event.stopPropagation();\n        if (!this.$input.prop('disabled')) {\n            await this._setValue(!this.value);\n            this._render();\n        }\n    },\n});\n\nvar StatInfo = AbstractField.extend({\n    supportedFieldTypes: ['integer', 'float'],\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * StatInfo widgets are always set since they basically only display info.\n     *\n     * @override\n     */\n    isSet: function () {\n        return true;\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Renders the field value using the StatInfo template. The text part of the\n     * widget is either the string attribute of this node in the view or the\n     * label of the field itself if no string attribute is given.\n     *\n     * @override\n     * @private\n     */\n    _render: function () {\n        var options = {\n            value: this._formatValue(this.value || 0),\n        };\n        if (! this.attrs.nolabel) {\n            if (this.nodeOptions.label_field && this.recordData[this.nodeOptions.label_field]) {\n                options.text = this.recordData[this.nodeOptions.label_field];\n            } else {\n                options.text = this.string;\n            }\n        }\n        this.$el.html(qweb.render(\"StatInfo\", options));\n        this.$el.addClass('o_stat_info');\n    },\n});\n\nvar FieldPercentPie = AbstractField.extend({\n    description: _lt(\"Percentage Pie\"),\n    template: 'FieldPercentPie',\n    supportedFieldTypes: ['integer', 'float'],\n    isQuickEditable: true,\n\n    /**\n     * Register some useful references for later use throughout the widget.\n     *\n     * @override\n     */\n    start: function () {\n        this.$leftMask = this.$('.o_mask').first();\n        this.$rightMask = this.$('.o_mask').last();\n        this.$pieValue = this.$('.o_pie_value');\n        return this._super();\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * PercentPie widgets are always set since they basically only display info.\n     *\n     * @override\n     */\n    isSet: function () {\n        return true;\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * This widget template needs javascript to apply the transformation\n     * associated with the rotation of the pie chart.\n     *\n     * @override\n     * @private\n     */\n    _render: function () {\n        var value = this.value || 0;\n        var degValue = 360*value/100;\n\n        this.$rightMask.toggleClass('o_full', degValue >= 180);\n\n        var leftDeg = 'rotate(' + ((degValue < 180)? 180 : degValue) + 'deg)';\n        var rightDeg = 'rotate(' + ((degValue < 180)? degValue : 0) + 'deg)';\n        this.$leftMask.css({transform: leftDeg, msTransform: leftDeg, mozTransform: leftDeg, webkitTransform: leftDeg});\n        this.$rightMask.css({transform: rightDeg, msTransform: rightDeg, mozTransform: rightDeg, webkitTransform: rightDeg});\n\n        this.$pieValue.text(Math.round(value) + '%');\n    },\n});\n\n/**\n * Node options:\n *\n * - title: title of the bar, displayed on top of the bar options\n * - editable: boolean if value is editable\n * - current_value: get the current_value from the field that must be present in the view\n * - max_value: get the max_value from the field that must be present in the view\n * - edit_max_value: boolean if the max_value is editable\n * - title: title of the bar, displayed on top of the bar --> not translated,  use parameter \"title\" instead\n */\nvar FieldProgressBar = AbstractField.extend({\n    description: _lt(\"Progress Bar\"),\n    template: \"ProgressBar\",\n    events: {\n        'change input': 'on_change_input',\n        'input input': 'on_change_input',\n        'keyup input': function (e) {\n            if (e.which === $.ui.keyCode.ENTER) {\n                this.on_change_input(e);\n            }\n        },\n    },\n    supportedFieldTypes: ['integer', 'float'],\n    init: function () {\n        this._super.apply(this, arguments);\n\n        // the progressbar needs the values and not the field name, passed in options\n        if (this.recordData[this.nodeOptions.current_value]) {\n            this.value = this.recordData[this.nodeOptions.current_value];\n        }\n\n        // The few next lines determine if the widget can write on the record or not\n        this.editable_readonly = !!this.nodeOptions.editable_readonly;\n        // \"hard\" readonly\n        this.readonly = this.nodeOptions.readonly || !this.nodeOptions.editable;\n\n        this.canWrite = !this.readonly && (\n            this.mode === 'edit' ||\n            (this.editable_readonly && this.mode === 'readonly') ||\n            (this.viewType === 'kanban') // Keep behavior before commit\n        );\n\n        // Boolean to toggle if we edit the numerator (value) or the denominator (max_value)\n        this.edit_max_value = !!this.nodeOptions.edit_max_value;\n        this.max_value = this.recordData[this.nodeOptions.max_value] || 100;\n\n        this.title = _t(this.attrs.title || this.nodeOptions.title) || '';\n\n        // Ability to edit the field through the bar\n        // /!\\ this feature is disabled\n        this.enableBarAsInput = false;\n        this.edit_on_click = this.enableBarAsInput && this.mode === 'readonly' && !this.edit_max_value;\n\n        this.write_mode = false;\n    },\n    _render: function () {\n        var self = this;\n        this._render_value();\n\n        if (this.canWrite) {\n            if (this.edit_on_click) {\n                this.$el.on('click', '.o_progress', function (e) {\n                    var $target = $(e.currentTarget);\n                    var numValue = Math.floor((e.pageX - $target.offset().left) / $target.outerWidth() * self.max_value);\n                    self.on_update(numValue);\n                    self._render_value();\n                });\n            } else {\n                this.$el.on('click', function () {\n                    if (!self.write_mode) {\n                        var $input = $('<input>', {type: 'text', class: 'o_progressbar_value o_input'});\n                        $input.on('blur', self.on_change_input.bind(self));\n                        self.$('.o_progressbar_value').replaceWith($input);\n                        self.write_mode = true;\n                        self._render_value();\n                    }\n                });\n            }\n        }\n        return this._super();\n    },\n    /**\n     * Updates the widget with value\n     *\n     * @param {Number} value\n     */\n    on_update: function (value) {\n        if (this.edit_max_value) {\n            this.max_value = value;\n            this._isValid = true;\n            var changes = {};\n            changes[this.nodeOptions.max_value] = this.max_value;\n            this.trigger_up('field_changed', {\n                dataPointID: this.dataPointID,\n                changes: changes,\n            });\n        } else {\n            // _setValues accepts string and will parse it\n            var formattedValue = this._formatValue(value);\n            this._setValue(formattedValue);\n        }\n    },\n    on_change_input: function (e) {\n        var $input = $(e.target);\n        if (e.type === 'change' && !$input.is(':focus')) {\n            return;\n        }\n\n        var parsedValue;\n        try {\n            // Cover all numbers with parseFloat\n            parsedValue = field_utils.parse.float($input.val());\n        } catch (error) {\n            this.displayNotification({ message: _t(\"Please enter a numerical value\"), type: 'danger' });\n        }\n\n        if (parsedValue !== undefined) {\n            if (e.type === 'input') { // ensure what has just been typed in the input is a number\n                // returns NaN if not a number\n                this._render_value(parsedValue);\n                if (parsedValue === 0) {\n                    $input.select();\n                }\n            } else { // Implicit type === 'blur': we commit the value\n                if (this.edit_max_value) {\n                    parsedValue = parsedValue || 100;\n                }\n\n                var $div = $('<div>', {class: 'o_progressbar_value'});\n                this.$('.o_progressbar_value').replaceWith($div);\n                this.write_mode = false;\n\n                this.on_update(parsedValue);\n                this._render_value();\n            }\n        }\n    },\n    /**\n     * Renders the value\n     *\n     * @private\n     * @param {Number} v\n     */\n    _render_value: function (v) {\n        var value = this.value;\n        var max_value = this.max_value;\n        if (!isNaN(v)) {\n            if (this.edit_max_value) {\n                max_value = v;\n            } else {\n                value = v;\n            }\n        }\n        value = value || 0;\n        max_value = max_value || 0;\n\n        var widthComplete;\n        if (value <= max_value) {\n            widthComplete = value/max_value * 100;\n        } else {\n            widthComplete = 100;\n        }\n\n        this.$('.o_progress').toggleClass('o_progress_overflow', value > max_value)\n            .attr('aria-valuemin', '0')\n            .attr('aria-valuemax', max_value)\n            .attr('aria-valuenow', value);\n        this.$('.o_progressbar_complete').css('width', widthComplete + '%');\n\n        if (!this.write_mode) {\n            if (max_value !== 100) {\n                this.$('.o_progressbar_value').text(utils.human_number(value) + \" / \" + utils.human_number(max_value));\n            } else {\n                this.$('.o_progressbar_value').text(utils.human_number(value) + \"%\");\n            }\n        } else if (isNaN(v)) {\n            this.$('.o_progressbar_value').val(this.edit_max_value ? max_value : value);\n            this.$('.o_progressbar_value').focus().select();\n        }\n    },\n    /**\n     * The progress bar has more than one field/value to deal with\n     * i.e. max_value\n     *\n     * @override\n     * @private\n     */\n    _reset: function () {\n        this._super.apply(this, arguments);\n        var new_max_value = this.recordData[this.nodeOptions.max_value];\n        this.max_value =  new_max_value !== undefined ? new_max_value : this.max_value;\n    },\n    isSet: function () {\n        return true;\n    },\n});\n\n/**\n * This widget is intended to be used on boolean fields. It toggles a button\n * switching between a green bullet / gray bullet.\n*/\nvar FieldToggleBoolean = AbstractField.extend({\n    description: _lt(\"Button\"),\n    template: \"toggle_button\",\n    events: {\n        'click': '_onToggleButton'\n    },\n    supportedFieldTypes: ['boolean'],\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * A boolean field is always set since false is a valid value.\n     *\n     * @override\n     */\n    isSet: function () {\n        return true;\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     * @private\n     */\n    _render: function () {\n        this.$('i')\n            .toggleClass('o_toggle_button_success', !!this.value)\n            .toggleClass('text-muted', !this.value);\n        const isReadonly = this.record.evalModifiers(this.attrs.modifiers).readonly;\n        if (isReadonly) {\n            this.el.setAttribute('disabled', isReadonly);\n        }\n        var title = this.value ? this.attrs.options.active : this.attrs.options.inactive;\n        this.$el.attr('title', title);\n        this.$el.attr('aria-pressed', this.value);\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Toggle the button\n     *\n     * @private\n     * @param {MouseEvent} event\n     */\n    _onToggleButton: function (event) {\n        event.stopPropagation();\n        this._setValue(!this.value);\n    },\n});\n\nvar JournalDashboardGraph = AbstractField.extend({\n    className: \"o_dashboard_graph\",\n    jsLibs: [\n        '/web/static/lib/Chart/Chart.js',\n    ],\n    init: function () {\n        this._super.apply(this, arguments);\n        this.graph_type = this.attrs.graph_type;\n        this.data = JSON.parse(this.value);\n    },\n    /**\n     * The widget view uses the ChartJS lib to render the graph. This lib\n     * requires that the rendering is done directly into the DOM (so that it can\n     * correctly compute positions). However, the views are always rendered in\n     * fragments, and appended to the DOM once ready (to prevent them from\n     * flickering). We here use the on_attach_callback hook, called when the\n     * widget is attached to the DOM, to perform the rendering. This ensures\n     * that the rendering is always done in the DOM.\n     */\n    on_attach_callback: function () {\n        this._isInDOM = true;\n        this._renderInDOM();\n    },\n    /**\n     * Called when the field is detached from the DOM.\n     */\n    on_detach_callback: function () {\n        this._isInDOM = false;\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Render the widget only when it is in the DOM.\n     *\n     * @override\n     * @private\n     */\n    _render: function () {\n        if (this._isInDOM) {\n            return this._renderInDOM();\n        }\n        return Promise.resolve();\n    },\n    /**\n     * Render the widget. This function assumes that it is attached to the DOM.\n     *\n     * @private\n     */\n    _renderInDOM: function () {\n        this.$el.empty();\n        var config, cssClass;\n        if (this.graph_type === 'line') {\n            config = this._getLineChartConfig();\n            cssClass = 'o_graph_linechart';\n        } else if (this.graph_type === 'bar') {\n            config = this._getBarChartConfig();\n            cssClass = 'o_graph_barchart';\n        }\n        this.$canvas = $('<canvas/>');\n        this.$el.addClass(cssClass);\n        this.$el.empty();\n        this.$el.append(this.$canvas);\n        var context = this.$canvas[0].getContext('2d');\n        this.chart = new Chart(context, config);\n    },\n    _getLineChartConfig: function () {\n        var labels = this.data[0].values.map(function (pt) {\n            return pt.x;\n        });\n        var borderColor = this.data[0].is_sample_data ? '#dddddd' : '#875a7b';\n        var backgroundColor = this.data[0].is_sample_data ? '#ebebeb' : '#dcd0d9';\n        return {\n            type: 'line',\n            data: {\n                labels: labels,\n                datasets: [{\n                    data: this.data[0].values,\n                    fill: 'start',\n                    label: this.data[0].key,\n                    backgroundColor: backgroundColor,\n                    borderColor: borderColor,\n                    borderWidth: 2,\n                }]\n            },\n            options: {\n                legend: {display: false},\n                scales: {\n                    yAxes: [{display: false}],\n                    xAxes: [{display: false}]\n                },\n                maintainAspectRatio: false,\n                elements: {\n                    line: {\n                        tension: 0.000001\n                    }\n                },\n                tooltips: {\n                    intersect: false,\n                    position: 'nearest',\n                    caretSize: 0,\n                },\n            },\n        };\n    },\n    _getBarChartConfig: function () {\n        var data = [];\n        var labels = [];\n        var backgroundColor = [];\n\n        this.data[0].values.forEach(function (pt) {\n            data.push(pt.value);\n            labels.push(pt.label);\n            var color = pt.type === 'past' ? '#ccbdc8' : (pt.type === 'future' ? '#a5d8d7' : '#ebebeb');\n            backgroundColor.push(color);\n        });\n        return {\n            type: 'bar',\n            data: {\n                labels: labels,\n                datasets: [{\n                    data: data,\n                    fill: 'start',\n                    label: this.data[0].key,\n                    backgroundColor: backgroundColor,\n                }]\n            },\n            options: {\n                legend: {display: false},\n                scales: {\n                    yAxes: [{display: false}],\n                },\n                maintainAspectRatio: false,\n                tooltips: {\n                    intersect: false,\n                    position: 'nearest',\n                    caretSize: 0,\n                },\n                elements: {\n                    line: {\n                        tension: 0.000001\n                    }\n                },\n            },\n        };\n    },\n});\n\n/**\n * The \"Domain\" field allows the user to construct a technical-prefix domain\n * thanks to a tree-like interface and see the selected records in real time.\n * In debug mode, an input is also there to be able to enter the prefix char\n * domain directly (or to build advanced domains the tree-like interface does\n * not allow to).\n */\nvar FieldDomain = AbstractField.extend({\n    resetOnAnyFieldChange: true,\n    events: _.extend({}, AbstractField.prototype.events, {\n        \"click .o_domain_show_selection_button\": \"_onShowSelectionButtonClick\",\n        \"click .o_field_domain_dialog_button\": \"_onDialogEditButtonClick\",\n        \"click .o_refresh_count\": \"_onRefreshCountClick\",\n    }),\n    custom_events: _.extend({}, AbstractField.prototype.custom_events, {\n        domain_changed: \"_onDomainSelectorValueChange\",\n        domain_selected: \"_onDomainSelectorDialogValueChange\",\n        open_record: \"_onOpenRecord\",\n    }),\n    /**\n     * @constructor\n     * @override init from AbstractField\n     */\n    init: function () {\n        this._super.apply(this, arguments);\n\n        this.inDialog = !!this.nodeOptions.in_dialog;\n        this.fsFilters = this.nodeOptions.fs_filters || {};\n\n        this.className = \"o_field_domain\";\n        if (this.mode === \"edit\") {\n            this.className += \" o_edit_mode\";\n        }\n        if (!this.inDialog) {\n            this.className += \" o_inline_mode\";\n        }\n\n        this._setState();\n\n        this._isValidForModel = true;\n        this.nbRecords = null;\n        this.lastCountFetchKey = null; // used to prevent from unnecessary fetching the count\n        this.debugEdition = false; // true iff the domain was edited with the textarea (in debug only)\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * The record is about to be saved, we need to ensure that the current\n     * domain is valid, if we manually edited it with the textarea. To do so,\n     * we perform a search_count with that domain.\n     *\n     * @override\n     * @returns {Promise|undefined}\n     */\n    commitChanges() {\n        if (this.debugEdition) {\n            return this._fetchCount();\n        }\n    },\n    /**\n     * A domain field is always set since the false value is considered to be\n     * equal to \"[]\" (match all records).\n     *\n     * @override\n     */\n    isSet: function () {\n        return true;\n    },\n    /**\n     * @override isValid from AbstractField.isValid\n     * Parsing the char value is not enough for this field. It is considered\n     * valid if the internal domain selector was built correctly and that the\n     * query to the model to test the domain did not fail.\n     *\n     * @returns {boolean}\n     */\n    isValid: function () {\n        return (\n            this._super.apply(this, arguments)\n            && (!this.domainSelector || this.domainSelector.isValid())\n            && this._isValidForModel\n        );\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Fetches the number of records matching the current domain.\n     *\n     * @private\n     * @param {boolean} [force=false] if true, performs the rpc, even if the\n     *   domain is the same as before\n     * @returns {Promise}\n     */\n     _fetchCount(force = false) {\n        if (!this._domainModel) {\n            this._isValidForModel = true;\n            this.nbRecords = 0;\n            return Promise.resolve();\n        }\n\n        // do not re-fetch the count if nothing has changed\n        const value = this.value || \"[]\"; // false stands for the empty domain\n        const key = `${this._domainModel}/${value}`;\n        if (!force && this.lastCountFetchKey === key) {\n            return this.lastCountFetchProm;\n        }\n        this.lastCountFetchKey = key;\n\n        this.nbRecords = null;\n\n        const context = this.record.getContext({ fieldName: this.name });\n        this.lastCountFetchProm = new Promise((resolve) => {\n            this._rpc({\n                model: this._domainModel,\n                method: 'search_count',\n                args: [Domain.prototype.stringToArray(value, this.record.evalContext)],\n                context: context\n            }, { shadow: true }).then((nbRecords) => {\n                this._isValidForModel = true;\n                this.nbRecords = nbRecords;\n                resolve();\n            }).guardedCatch((reason) => {\n                reason.event.preventDefault(); // prevent traceback (the search_count might be intended to break)\n                this._isValidForModel = false;\n                this.nbRecords = 0;\n                resolve();\n            });\n        });\n        return this.lastCountFetchProm;\n    },\n    /**\n     * @private\n     * @override _render from AbstractField\n     * @returns {Promise}\n     */\n    _render: async function () {\n        // If there is no model, only change the non-domain-selector content\n        if (!this._domainModel) {\n            this._replaceContent();\n            return Promise.resolve();\n        }\n\n        // Convert char value to array value\n        var value = this.value || \"[]\";\n\n        // Create the domain selector or change the value of the current one...\n        var def;\n        if (!this.domainSelector) {\n            this.domainSelector = new DomainSelector(this, this._domainModel, value, {\n                readonly: this.mode === \"readonly\" || this.inDialog,\n                filters: this.fsFilters,\n                debugMode: config.isDebug(),\n            });\n            def = this.domainSelector.prependTo(this.$el);\n        } else if (!this.debugEdition) {\n            // do not update the domainSelector if we edited the domain with the textarea\n            // as we don't want it to format what we just wrote\n            def = this.domainSelector.setDomain(value);\n        }\n\n        // ... then replace the other content (matched records, etc)\n        await Promise.resolve(def);\n        this._replaceContent();\n\n        // Finally, fetch the number of records matching the domain, but do not\n        // wait for it to render the field widget (simply update the number of\n        // records when we know it)\n        if (!this.debugEdition) {\n            // do not automatically recompute the count if we're editing the\n            // domain with the textarea\n            this._fetchCount().then(() => this._replaceContent());\n        }\n    },\n    /**\n     * Render the field DOM except for the domain selector part. The full field\n     * DOM is composed of a DIV which contains the domain selector widget,\n     * followed by other content. This other content is handled by this method.\n     *\n     * @private\n     */\n    _replaceContent: function () {\n        if (this._$content) {\n            this._$content.remove();\n        }\n        this._$content = $(qweb.render(\"FieldDomain.content\", {\n            hasModel: !!this._domainModel,\n            isValid: !!this._isValidForModel,\n            nbRecords: this.nbRecords,\n            inDialog: this.inDialog,\n            editMode: this.mode === \"edit\",\n            isDebug: config.isDebug(),\n        }));\n        this._$content.appendTo(this.$el);\n    },\n    /**\n     * @override _reset from AbstractField\n     * Check if the model the field works with has (to be) changed.\n     *\n     * @private\n     */\n    _reset: function (record, ev) {\n        this._super.apply(this, arguments);\n        var oldDomainModel = this._domainModel;\n        this._setState();\n        if (this.domainSelector && this._domainModel !== oldDomainModel) {\n            // If the model has changed, destroy the current domain selector\n            this.domainSelector.destroy();\n            this.domainSelector = null;\n        }\n        if (!ev || ev.target !== this) {\n            this.debugEdition = false;\n        }\n    },\n    /**\n     * Sets the model the field must work with and whether or not the current\n     * domain value is valid for this particular model. This is inferred from\n     * the received special data.\n     *\n     * @private\n     */\n    _setState: function () {\n        let domainModel = this.nodeOptions.model;\n        if (Object.prototype.hasOwnProperty.call(this.record.data, domainModel)) {\n            domainModel = this.record.data[domainModel];\n        }\n        this._domainModel = domainModel;\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Recompute the number of records matching the domain when the user clicks\n     * on the refresh button. Useful after manually editing the domain through\n     * the textarea in debug mode, as in this case, the count isn't automatically\n     * recomputed.\n     *\n     * @param {MouseEvent} ev\n     */\n    async _onRefreshCountClick(ev) {\n        ev.stopPropagation();\n        ev.currentTarget.setAttribute(\"disabled\", \"disabled\");\n        await this._fetchCount(true);\n        this._replaceContent();\n    },\n    /**\n     * Called when the \"Show selection\" button is clicked\n     * -> Open a modal to see the matched records\n     *\n     * @param {Event} e\n     */\n    _onShowSelectionButtonClick: function (e) {\n        e.preventDefault();\n        new view_dialogs.SelectCreateDialog(this, {\n            title: _t(\"Selected records\"),\n            res_model: this._domainModel,\n            context: this.record.getContext({fieldName: this.name, viewType: this.viewType}),\n            domain: this.value || \"[]\",\n            no_create: true,\n            readonly: true,\n            disable_multiple_selection: true,\n        }).open();\n    },\n    /**\n     * Called when the \"Edit domain\" button is clicked (when using the in_dialog\n     * option) -> Open a DomainSelectorDialog to edit the value\n     *\n     * @param {Event} e\n     */\n    _onDialogEditButtonClick: function (e) {\n        e.preventDefault();\n        new DomainSelectorDialog(this, this._domainModel, this.value || \"[]\", {\n            readonly: this.mode === \"readonly\",\n            filters: this.fsFilters,\n            debugMode: config.isDebug(),\n        }).open();\n    },\n    /**\n     * Called when the domain selector value is changed\n     * -> Adapt the internal value state\n     *\n     * @param {OdooEvent} e\n     * @param {Domain} e.data.domain\n     */\n    _onDomainSelectorValueChange: function (e) {\n        // we don't want to recompute the count if the domain has been edited\n        // from the debug textarea (for performance reasons, as it might be costly)\n        this.debugEdition = !!e.data.debug;\n        this._setValue(e.data.domain);\n    },\n    /**\n     * Called when the in-dialog domain selector value is confirmed\n     * -> Adapt the internal value state\n     *\n     * @param {OdooEvent} e\n     */\n    _onDomainSelectorDialogValueChange: function (e) {\n        this._setValue(Domain.prototype.arrayToString(e.data.domain));\n    },\n    /**\n     * Stops the propagation of the 'open_record' event, as we don't want the\n     * user to be able to open records from the list opened in a dialog.\n     *\n     * @param {OdooEvent} event\n     */\n    _onOpenRecord: function (event) {\n        event.stopPropagation();\n    },\n    /**\n     * Stops the enter navigation in a DomainSelector's textarea.\n     *\n     * @private\n     * @param {OdooEvent} ev\n     */\n     _onKeydown: function (ev) {\n        if (ev.which === $.ui.keyCode.ENTER && ev.target.tagName === \"TEXTAREA\") {\n            ev.stopPropagation();\n            return;\n        }\n        this._super.apply(this, arguments);\n    },\n});\n\n/**\n * This widget is intended to be used on Text fields. It will provide Ace Editor\n * for editing XML and Python.\n */\nvar AceEditor = DebouncedField.extend({\n    template: \"AceEditor\",\n    jsLibs: [\n        '/web/static/lib/ace/ace.js',\n        [\n            '/web/static/lib/ace/mode-python.js',\n            '/web/static/lib/ace/mode-xml.js',\n            '/web/static/lib/ace/mode-qweb.js'\n        ]\n    ],\n    events: {}, // events are triggered manually for this debounced widget\n    /**\n     * @override start from AbstractField (Widget)\n     *\n     * @returns {Promise}\n     */\n    start: function () {\n        this._startAce(this.$('.ace-view-editor')[0]);\n        return this._super.apply(this, arguments);\n    },\n    /**\n     * @override destroy from AbstractField (Widget)\n     */\n    destroy: function () {\n        if (this.aceEditor) {\n            this.aceEditor.destroy();\n        }\n        this._super.apply(this, arguments);\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Format value\n     *\n     * Note: We have to overwrite this method to always return a string.\n     * AceEditor works with string and not boolean value.\n     *\n     * @override\n     * @private\n     * @param {boolean|string} value\n     * @returns {string}\n     */\n    _formatValue: function (value) {\n        return this._super.apply(this, arguments) || '';\n    },\n\n    /**\n     * @override\n     * @private\n     */\n    _getValue: function () {\n        return this.aceSession.getValue();\n    },\n    /**\n     * @override _render from AbstractField\n     * The rendering is the same for edit and readonly mode: changing the ace\n     * session value. This is only done if the value in the ace editor is not\n     * already the new one (prevent losing focus / retriggering changes / empty\n     * the undo stack / ...).\n     *\n     * @private\n     */\n    _render: function () {\n        var newValue = this._formatValue(this.value);\n        if (this.aceSession.getValue() !== newValue) {\n            this.aceSession.setValue(newValue);\n        }\n    },\n\n    /**\n     * Starts the ace library on the given DOM element. This initializes the\n     * ace editor option according to the edit/readonly mode and binds ace\n     * editor events.\n     *\n     * @private\n     * @param {Node} node - the DOM element the ace library must initialize on\n     */\n    _startAce: function (node) {\n        this.aceEditor = ace.edit(node);\n        this.aceEditor.setOptions({\n            maxLines: Infinity,\n            showPrintMargin: false,\n        });\n        if (this.mode === 'readonly') {\n            this.aceEditor.renderer.setOptions({\n                displayIndentGuides: false,\n                showGutter: false,\n            });\n            this.aceEditor.setOptions({\n                highlightActiveLine: false,\n                highlightGutterLine: false,\n                readOnly: true,\n            });\n            this.aceEditor.renderer.$cursorLayer.element.style.display = \"none\";\n        }\n        this.aceEditor.$blockScrolling = true;\n        this.aceSession = this.aceEditor.getSession();\n        const mode = this.nodeOptions.mode || 'qweb';\n        this.aceSession.setOptions({\n            useWorker: false,\n            mode: \"ace/mode/\" + (mode === 'xml' ? 'qweb' : mode),\n            tabSize: 2,\n            useSoftTabs: true,\n        });\n        if (this.mode === \"edit\") {\n            this.aceEditor.on(\"change\", this._doDebouncedAction.bind(this));\n            this.aceEditor.on(\"blur\", this._doAction.bind(this));\n        }\n    },\n});\n\n\n/**\n * The FieldColor widget give a visual representation of a color\n * Clicking on it bring up an instance of ColorpickerDialog\n */\nvar FieldColor = AbstractField.extend({\n    template: 'FieldColor',\n    events: _.extend({}, AbstractField.prototype.events, {\n        'click .o_field_color': '_onColorClick',\n    }),\n    custom_events: _.extend({}, AbstractField.prototype.custom_events, {\n        'colorpicker:saved': '_onColorpickerSaved',\n    }),\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     */\n    getFocusableElement: function () {\n        return this.$('.o_field_color');\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n    * @override\n    * @private\n    */\n    _render: function () {\n        this.$('.o_field_color').data('value', this.value)\n            .css('background-color', this.value)\n            .attr('title', this.value);\n        return this._super.apply(this, arguments);\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n    * @private\n    */\n    _onColorClick: function () {\n        if (this.mode === 'edit') {\n            const dialog = new ColorpickerDialog(this, {\n                defaultColor: this.value,\n                noTransparency: true,\n            }).open();\n            dialog.on('closed', this, () => {\n                // we need to wait for the modal to execute its whole close function.\n                Promise.resolve().then(() => {\n                    this.getFocusableElement().focus();\n                });\n            });\n        }\n    },\n\n    /**\n    * @private\n    * @param {OdooEvent} ev\n    */\n    _onColorpickerSaved: function (ev) {\n        this._setValue(ev.data.hex);\n    },\n\n    /**\n     * @override\n     * @private\n     */\n    _onKeydown: function (ev) {\n        if (ev.which === $.ui.keyCode.ENTER) {\n            ev.preventDefault();\n            ev.stopPropagation();\n            this._onColorClick(ev);\n        } else {\n            this._super.apply(this, arguments);\n        }\n    },\n});\n\nvar FieldColorPicker = FieldInteger.extend({\n    RECORD_COLORS: [\n        _t('No color'),\n        _t('Red'),\n        _t('Orange'),\n        _t('Yellow'),\n        _t('Light blue'),\n        _t('Dark purple'),\n        _t('Salmon pink'),\n        _t('Medium blue'),\n        _t('Dark blue'),\n        _t('Fushia'),\n        _t('Green'),\n        _t('Purple'),\n    ],\n    widthInList: '1',\n    /**\n     * Prepares the rendering, since we are based on an input but not using it\n     * setting tagName after parent init force the widget to not render an input\n     *\n     * @override\n     */\n    init: function () {\n        this._super.apply(this, arguments);\n        this.tagName = 'div';\n    },\n    /**\n     * Render the widget when it is edited.\n     *\n     * @override\n     */\n    _renderEdit: function () {\n        this.$el.html(qweb.render('ColorPicker'));\n        this._setupColorPicker();\n        this._highlightSelectedColor();\n    },\n    /**\n     * Render the widget when it is NOT edited.\n     *\n     * @override\n     */\n    _renderReadonly: function () {\n        var selectedColorName = this.RECORD_COLORS[this.value];\n        this.$el.html(qweb.render('ColorPickerReadonly', { active_color: this.value, name_color: selectedColorName }));\n        this.$el.on('click', 'a', function(ev){ ev.preventDefault(); });\n    },\n    /**\n     * Render the kanban colors inside first ul element.\n     * This is the same template as in KanbanRecord.\n     *\n     * <a> elements click are bound to _onColorChanged\n     *\n     */\n    _setupColorPicker: function () {\n        var $colorpicker = this.$('ul');\n        if (!$colorpicker.length) {\n            return;\n        }\n        $colorpicker.html(qweb.render('KanbanColorPicker', { colors: this.RECORD_COLORS }));\n        $colorpicker.on('click', 'a', this._onColorChanged.bind(this));\n    },\n    /**\n     * Returns the widget value.\n     * Since NumericField is based on an input, but we don't use it,\n     * we override this function to use the internal value of the widget.\n     *\n     *\n     * @override\n     * @returns {string}\n     */\n    _getValue: function (){\n        return this.value;\n    },\n    /**\n     * Listener in edit mode for click on a color.\n     * The actual color can be found in the data-color\n     * attribute of the target element.\n     *\n     * We re-render the widget after the update because\n     * the selected color has changed and it should\n     * be reflected in the ui.\n     *\n     * @param ev\n     */\n    _onColorChanged: function(ev) {\n        ev.preventDefault();\n        var color = null;\n        if(ev.currentTarget && ev.currentTarget.dataset && ev.currentTarget.dataset.color){\n            color = ev.currentTarget.dataset.color;\n        }\n        if(color){\n            this.value = color;\n            this._onChange();\n            this._renderEdit();\n        }\n    },\n    /**\n     * Helper to modify the active color's style\n     * while in edit mode.\n     *\n     */\n    _highlightSelectedColor: function(){\n        try{\n            $(this.$('li')[parseInt(this.value)]).css('border', '2px solid teal');\n        } catch(err) {\n\n        }\n    },\n    _onNavigationMove() {\n        // disable navigation from FieldInput, to prevent a crash\n    }\n});\n\nreturn {\n    TranslatableFieldMixin: TranslatableFieldMixin,\n    DebouncedField: DebouncedField,\n    FieldEmail: FieldEmail,\n    FieldBinaryFile: FieldBinaryFile,\n    FieldPdfViewer: FieldPdfViewer,\n    AbstractFieldBinary: AbstractFieldBinary,\n    FieldBinaryImage: FieldBinaryImage,\n    KanbanFieldBinaryImage: KanbanFieldBinaryImage,\n    CharImageUrl: CharImageUrl,\n    KanbanCharImageUrl: KanbanCharImageUrl,\n    FieldBoolean: FieldBoolean,\n    BooleanToggle: BooleanToggle,\n    FieldChar: FieldChar,\n    LinkButton: LinkButton,\n    FieldDate: FieldDate,\n    FieldDateTime: FieldDateTime,\n    FieldDateRange: FieldDateRange,\n    RemainingDays: RemainingDays,\n    FieldDomain: FieldDomain,\n    FieldFloat: FieldFloat,\n    FieldFloatTime: FieldFloatTime,\n    FieldFloatFactor: FieldFloatFactor,\n    FieldFloatToggle: FieldFloatToggle,\n    FieldPercentage: FieldPercentage,\n    FieldInteger: FieldInteger,\n    FieldMonetary: FieldMonetary,\n    FieldPercentPie: FieldPercentPie,\n    FieldPhone: FieldPhone,\n    FieldProgressBar: FieldProgressBar,\n    FieldText: FieldText,\n    ListFieldText: ListFieldText,\n    FieldToggleBoolean: FieldToggleBoolean,\n    HandleWidget: HandleWidget,\n    InputField: InputField,\n    NumericField: NumericField,\n    AttachmentImage: AttachmentImage,\n    LabelSelection: LabelSelection,\n    StateSelectionWidget: StateSelectionWidget,\n    ListStateSelectionWidget: ListStateSelectionWidget,\n    FavoriteWidget: FavoriteWidget,\n    PriorityWidget: PriorityWidget,\n    StatInfo: StatInfo,\n    UrlWidget: UrlWidget,\n    TextCopyClipboard: TextCopyClipboard,\n    CharCopyClipboard: CharCopyClipboard,\n    URLCopyClipboard: URLCopyClipboard,\n    JournalDashboardGraph: JournalDashboardGraph,\n    AceEditor: AceEditor,\n    FieldColor: FieldColor,\n    FieldColorPicker: FieldColorPicker,\n};\n\n});\n", "odoo.define('web.basic_fields_owl', function (require) {\n    \"use strict\";\n\n    const AbstractField = require('web.AbstractFieldOwl');\n    const CustomCheckbox = require('web.CustomCheckbox');\n    const { _lt } = require('web.translation');\n\n\n    /**\n     * FieldBadge displays the field's value inside a bootstrap pill badge.\n     * The supported field's types are 'char', 'selection' and 'many2one'.\n     *\n     * By default, the background color of the badge is a light gray, but it can\n     * be customized by setting a 'decoration-xxx' attribute on the field.\n     * For instance,\n     *   <field name=\"some_field\" widget=\"badge\" decoration-danger=\"state == 'cancel'\"/>\n     * renders a badge with a red background on records matching the condition.\n     */\n    class FieldBadge extends AbstractField {\n        _getClassFromDecoration(decoration) {\n            return `bg-${decoration.split('-')[1]}-light`;\n        }\n    }\n    FieldBadge.description = _lt(\"Badge\");\n    FieldBadge.supportedFieldTypes = ['selection', 'many2one', 'char'];\n    FieldBadge.template = 'web.FieldBadge';\n\n\n    class FieldBoolean extends AbstractField {\n        patched() {\n            super.patched();\n            if (this.props.event && this.props.event.target === this) {\n                this.activate();\n            }\n        }\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        /**\n         * @override\n         * @returns {HTMLElement|null} the focusable checkbox input\n         */\n        get focusableElement() {\n            return this.mode === 'readonly' ? null : this.el.querySelector('input');\n        }\n        /**\n         * A boolean field is always set since false is a valid value.\n         *\n         * @override\n         */\n        get isSet() {\n            return true;\n        }\n        /**\n         * Toggle the checkbox if it is activated due to a click on itself.\n         *\n         * @override\n         * @param {Object} [options]\n         * @param {Event} [options.event] the event which fired this activation\n         * @returns {boolean} true if the component was activated, false if the\n         *                    focusable element was not found or invisible\n         */\n        activate(options) {\n            const activated = super.activate(options);\n            // The event might have been fired on the non field version of\n            // this field, we can still test the presence of its custom class.\n            if (activated && options && options.event && options.event.target\n                .closest('.custom-control.custom-checkbox')) {\n                this._setValue(!this.value);  // Toggle the checkbox\n            }\n            return activated;\n        }\n        /**\n         * Associates the 'for' attribute of the internal label.\n         *\n         * @override\n         */\n        setIdForLabel(id) {\n            super.setIdForLabel(id);\n            this.el.querySelector('label').setAttribute('for', id);\n        }\n\n        //----------------------------------------------------------------------\n        // Private\n        //----------------------------------------------------------------------\n\n        /**\n         * @private\n         * @override\n         * @param {Object} extraInfo\n         * @param {boolean} extraInfo.value\n         */\n        _quickEdit(extraInfo) {\n            super._quickEdit(...arguments);\n            // toggle if extraInfo.value === undefined (if clicked on label)\n            // otherwise force the new value\n            this._setValue(extraInfo.value === undefined ? !this.value : extraInfo.value);\n        }\n        /**\n         * @private\n         * @override\n         * @returns {Object}\n         */\n        _getQuickEditExtraInfo() {\n            return {\n                value: !this.value,\n            };\n        }\n\n        //----------------------------------------------------------------------\n        // Handlers\n        //----------------------------------------------------------------------\n\n        /**\n         * Properly update the value when the checkbox is (un)ticked to trigger\n         * possible onchanges.\n         *\n         * @private\n         */\n        _onChange(ev) {\n            this._setValue(ev.target.checked);\n        }\n        /**\n         * Implement keyboard movements. Mostly useful for its environment, such\n         * as a list view.\n         *\n         * @override\n         * @private\n         * @param {KeyEvent} ev\n         */\n        _onKeydown(ev) {\n            switch (ev.which) {\n                case $.ui.keyCode.ENTER:\n                    // prevent subsequent 'click' event (see _onKeydown of AbstractField)\n                    ev.preventDefault();\n                    this._setValue(!this.value);\n                    return;\n                case $.ui.keyCode.UP:\n                case $.ui.keyCode.RIGHT:\n                case $.ui.keyCode.DOWN:\n                case $.ui.keyCode.LEFT:\n                    ev.preventDefault();\n            }\n            super._onKeydown(ev);\n        }\n    }\n    FieldBoolean.components = { CustomCheckbox };\n    FieldBoolean.description = _lt(\"Checkbox\");\n    FieldBoolean.supportedFieldTypes = ['boolean'];\n    FieldBoolean.template = 'web.FieldBoolean';\n    FieldBoolean.isQuickEditable = true;\n\n\n    return {\n        FieldBadge,\n        FieldBoolean,\n    };\n});\n", "odoo.define('web.field_registry', function (require) {\n    \"use strict\";\n\n    const Registry = require('web.Registry');\n\n    return new Registry(\n        null,\n        (value) => !(value.prototype instanceof owl.Component)\n    );\n});\n\nodoo.define('web._field_registry', function (require) {\n\"use strict\";\n\nvar AbstractField = require('web.AbstractField');\nvar basic_fields = require('web.basic_fields');\nvar relational_fields = require('web.relational_fields');\nvar registry = require('web.field_registry');\nvar special_fields = require('web.special_fields');\n\n\n// Basic fields\nregistry\n    .add('abstract', AbstractField)\n    .add('input', basic_fields.InputField)\n    .add('integer', basic_fields.FieldInteger)\n    .add('boolean', basic_fields.FieldBoolean)\n    .add('date', basic_fields.FieldDate)\n    .add('datetime', basic_fields.FieldDateTime)\n    .add('daterange', basic_fields.FieldDateRange)\n    .add('remaining_days', basic_fields.RemainingDays)\n    .add('domain', basic_fields.FieldDomain)\n    .add('text', basic_fields.FieldText)\n    .add('list.text', basic_fields.ListFieldText)\n    .add('html', basic_fields.FieldText)\n    .add('float', basic_fields.FieldFloat)\n    .add('char', basic_fields.FieldChar)\n    .add('link_button', basic_fields.LinkButton)\n    .add('handle', basic_fields.HandleWidget)\n    .add('email', basic_fields.FieldEmail)\n    .add('phone', basic_fields.FieldPhone)\n    .add('url', basic_fields.UrlWidget)\n    .add('CopyClipboardText', basic_fields.TextCopyClipboard)\n    .add('CopyClipboardChar', basic_fields.CharCopyClipboard)\n    .add('CopyClipboardURL', basic_fields.URLCopyClipboard)\n    .add('image', basic_fields.FieldBinaryImage)\n    .add('image_url', basic_fields.CharImageUrl)\n    .add('kanban.image', basic_fields.KanbanFieldBinaryImage)\n    .add('kanban.image_url', basic_fields.KanbanCharImageUrl)\n    .add('binary', basic_fields.FieldBinaryFile)\n    .add('pdf_viewer', basic_fields.FieldPdfViewer)\n    .add('monetary', basic_fields.FieldMonetary)\n    .add('percentage', basic_fields.FieldPercentage)\n    .add('priority', basic_fields.PriorityWidget)\n    .add('attachment_image', basic_fields.AttachmentImage)\n    .add('label_selection', basic_fields.LabelSelection)\n    .add('kanban_label_selection', basic_fields.LabelSelection) // deprecated, use label_selection\n    .add('state_selection', basic_fields.StateSelectionWidget)\n    .add('list.state_selection', basic_fields.ListStateSelectionWidget)\n    .add('kanban_state_selection', basic_fields.StateSelectionWidget) // deprecated, use state_selection\n    .add('boolean_favorite', basic_fields.FavoriteWidget)\n    .add('boolean_toggle', basic_fields.BooleanToggle)\n    .add('statinfo', basic_fields.StatInfo)\n    .add('percentpie', basic_fields.FieldPercentPie)\n    .add('float_time', basic_fields.FieldFloatTime)\n    .add('float_factor', basic_fields.FieldFloatFactor)\n    .add('float_toggle', basic_fields.FieldFloatToggle)\n    .add('progressbar', basic_fields.FieldProgressBar)\n    .add('toggle_button', basic_fields.FieldToggleBoolean)\n    .add('dashboard_graph', basic_fields.JournalDashboardGraph)\n    .add('ace', basic_fields.AceEditor)\n    .add('color', basic_fields.FieldColor)\n    .add('many2one_reference', basic_fields.FieldInteger)\n    .add('color_picker', basic_fields.FieldColorPicker);\n\n// Relational fields\nregistry\n    .add('selection', relational_fields.FieldSelection)\n    .add('radio', relational_fields.FieldRadio)\n    .add('selection_badge', relational_fields.FieldSelectionBadge)\n    .add('many2one', relational_fields.FieldMany2One)\n    .add('many2one_barcode', relational_fields.Many2oneBarcode)\n    .add('list.many2one', relational_fields.ListFieldMany2One)\n    .add('kanban.many2one', relational_fields.KanbanFieldMany2One)\n    .add('many2one_avatar', relational_fields.Many2OneAvatar)\n    .add('many2many', relational_fields.FieldMany2Many)\n    .add('many2many_binary', relational_fields.FieldMany2ManyBinaryMultiFiles)\n    .add('many2many_tags', relational_fields.FieldMany2ManyTags)\n    .add('many2many_tags_avatar', relational_fields.FieldMany2ManyTagsAvatar)\n    .add('kanban.many2many_tags_avatar', relational_fields.KanbanMany2ManyTagsAvatar)\n    .add('list.many2many_tags_avatar', relational_fields.ListMany2ManyTagsAvatar)\n    .add('form.many2many_tags', relational_fields.FormFieldMany2ManyTags)\n    .add('kanban.many2many_tags', relational_fields.KanbanFieldMany2ManyTags)\n    .add('many2many_checkboxes', relational_fields.FieldMany2ManyCheckBoxes)\n    .add('one2many', relational_fields.FieldOne2Many)\n    .add('statusbar', relational_fields.FieldStatus)\n    .add('reference', relational_fields.FieldReference)\n    .add('font', relational_fields.FieldSelectionFont);\n\n// Special fields\nregistry\n    .add('timezone_mismatch', special_fields.FieldTimezoneMismatch)\n    .add('report_layout', special_fields.FieldReportLayout)\n    .add('iframe_wrapper', special_fields.IframeWrapper)\n});\n", "odoo.define('web.field_registry_owl', function (require) {\n    \"use strict\";\n\n    const Registry = require('web.Registry');\n\n    return new Registry(\n        null,\n        (value) => value.prototype instanceof owl.Component\n    );\n});\n\nodoo.define('web._field_registry_owl', function (require) {\n    \"use strict\";\n\n    /**\n     * This module registers field components (specifications of the AbstractField Component)\n     */\n\n    const basicFields = require('web.basic_fields_owl');\n    const registry = require('web.field_registry_owl');\n\n    // Basic fields\n    registry\n        .add('badge', basicFields.FieldBadge)\n        .add('boolean', basicFields.FieldBoolean);\n});\n", "odoo.define('web.field_utils', function (require) {\n\"use strict\";\n\n/**\n * Field Utils\n *\n * This file contains two types of functions: formatting functions and parsing\n * functions.\n *\n * Each field type has to display in string form at some point, but it should be\n * stored in memory with the actual value.  For example, a float value of 0.5 is\n * represented as the string \"0.5\" but is kept in memory as a float.  A date\n * (or datetime) value is always stored as a Moment.js object, but displayed as\n * a string.  This file contains all sort of functions necessary to perform the\n * conversions.\n */\n\nvar core = require('web.core');\nvar dom = require('web.dom');\nvar session = require('web.session');\nvar time = require('web.time');\nvar utils = require('web.utils');\n\nvar _t = core._t;\n\nconst NBSP = \"\\u00a0\";\n\n//------------------------------------------------------------------------------\n// Formatting\n//------------------------------------------------------------------------------\n\n/**\n * Convert binary to bin_size\n *\n * @param {string} [value] base64 representation of the binary (might be already a bin_size!)\n * @param {Object} [field]\n *        a description of the field (note: this parameter is ignored)\n * @param {Object} [options] additional options (note: this parameter is ignored)\n *\n * @returns {string} bin_size (which is human-readable)\n */\nfunction formatBinary(value, field, options) {\n    if (!value) {\n        return '';\n    }\n    return utils.binaryToBinsize(value);\n}\n\n/**\n * @todo Really? it returns a jQuery element...  We should try to avoid this and\n * let DOM utility functions handle this directly. And replace this with a\n * function that returns a string so we can get rid of the forceString.\n *\n * @param {boolean} value\n * @param {Object} [field]\n *        a description of the field (note: this parameter is ignored)\n * @param {Object} [options] additional options\n * @param {boolean} [options.forceString=false] if true, returns a string\n*    representation of the boolean rather than a jQueryElement\n * @returns {jQuery|string}\n */\nfunction formatBoolean(value, field, options) {\n    if (options && options.forceString) {\n        return value ? _t('True') : _t('False');\n    }\n    return dom.renderCheckbox({\n        prop: {\n            checked: value,\n            disabled: true,\n        },\n    });\n}\n\n/**\n * Returns a string representing a char.  If the value is false, then we return\n * an empty string.\n *\n * @param {string|false} value\n * @param {Object} [field]\n *        a description of the field (note: this parameter is ignored)\n * @param {Object} [options] additional options\n * @param {boolean} [options.escape=false] if true, escapes the formatted value\n * @param {boolean} [options.isPassword=false] if true, returns '********'\n *   instead of the formatted value\n * @returns {string}\n */\nfunction formatChar(value, field, options) {\n    value = typeof value === 'string' ? value : '';\n    if (options && options.isPassword) {\n        return _.str.repeat('*', value ? value.length : 0);\n    }\n    if (options && options.escape) {\n        value = _.escape(value);\n    }\n    return value;\n}\n\n/**\n * Returns a string representing a date.  If the value is false, then we return\n * an empty string. Note that this is dependant on the localization settings\n *\n * @param {Moment|false} value\n * @param {Object} [field]\n *        a description of the field (note: this parameter is ignored)\n * @param {Object} [options] additional options\n * @param {boolean} [options.timezone=true] use the user timezone when formating the\n *        date\n * @returns {string}\n */\nfunction formatDate(value, field, options) {\n    if (value === false || isNaN(value)) {\n        return \"\";\n    }\n    if (field && field.type === 'datetime') {\n        if (!options || !('timezone' in options) || options.timezone) {\n            value = value.clone().add(session.getTZOffset(value), 'minutes');\n        }\n    }\n    var date_format = time.getLangDateFormat();\n    return value.format(date_format);\n}\n\n/**\n * Returns a string representing a datetime.  If the value is false, then we\n * return an empty string.  Note that this is dependant on the localization\n * settings\n *\n * @params {Moment|false}\n * @param {Object} [field]\n *        a description of the field (note: this parameter is ignored)\n * @param {Object} [options] additional options\n * @param {boolean} [options.timezone=true] use the user timezone when formating the\n *        date\n * @returns {string}\n */\nfunction formatDateTime(value, field, options) {\n    if (value === false) {\n        return \"\";\n    }\n    if (!options || !('timezone' in options) || options.timezone) {\n        value = value.clone().add(session.getTZOffset(value), 'minutes');\n    }\n    return value.format(time.getLangDatetimeFormat());\n}\n\n/**\n * Returns a string representing a float.  The result takes into account the\n * user settings (to display the correct decimal separator).\n *\n * @param {float|false} value the value that should be formatted\n * @param {Object} [field] a description of the field (returned by fields_get\n *   for example).  It may contain a description of the number of digits that\n *   should be used.\n * @param {Object} [options] additional options to override the values in the\n *   python description of the field.\n * @param {integer[]} [options.digits] the number of digits that should be used,\n *   instead of the default digits precision in the field.\n * @param {function} [options.humanReadable] if returns true,\n *   formatFloat acts like utils.human_number\n * @returns {string}\n */\nfunction formatFloat(value, field, options) {\n    options = options || {};\n    if (value === false) {\n        return \"\";\n    }\n    if (options.humanReadable && options.humanReadable(value)) {\n        return utils.human_number(value, options.decimals, options.minDigits, options.formatterCallback);\n    }\n    var l10n = core._t.database.parameters;\n    var precision;\n    if (options.digits) {\n        precision = options.digits[1];\n    } else if (field && field.digits) {\n        precision = field.digits[1];\n    } else {\n        precision = 2;\n    }\n    var formatted = _.str.sprintf('%.' + precision + 'f', value || 0).split('.');\n    formatted[0] = utils.insert_thousand_seps(formatted[0]);\n    return formatted.join(l10n.decimal_point);\n}\n\n\n/**\n * Returns a string representing a float value, from a float converted with a\n * factor.\n *\n * @param {number} value\n * @param {number} [options.factor]\n *          Conversion factor, default value is 1.0\n * @returns {string}\n */\nfunction formatFloatFactor(value, field, options) {\n    var factor = options.factor || 1;\n    return formatFloat(value * factor, field, options);\n}\n\n/**\n * Returns a string representing a time value, from a float.  The idea is that\n * we sometimes want to display something like 1:45 instead of 1.75, or 0:15\n * instead of 0.25.\n *\n * @param {float} value\n * @param {Object} [field]\n *        a description of the field (note: this parameter is ignored)\n * @param {Object} [options]\n * @param {boolean} [options.noLeadingZeroHour] if true, format like 1:30\n *        otherwise, format like 01:30\n * @returns {string}\n */\nfunction formatFloatTime(value, field, options) {\n    options = options || {};\n    var pattern = options.noLeadingZeroHour ? '%1d:%02d' : '%02d:%02d';\n    if (value < 0) {\n        value = Math.abs(value);\n        pattern = '-' + pattern;\n    }\n    var hour = Math.floor(value);\n    var min = Math.round((value % 1) * 60);\n    if (min === 60){\n        min = 0;\n        hour = hour + 1;\n    }\n    return _.str.sprintf(pattern, hour, min);\n}\n\n/**\n * Returns a string representing an integer.  If the value is false, then we\n * return an empty string.\n *\n * @param {integer|false} value\n * @param {Object} [field]\n *        a description of the field (note: this parameter is ignored)\n * @param {Object} [options] additional options\n * @param {boolean} [options.isPassword=false] if true, returns '********'\n * @param {function} [options.humanReadable] if returns true,\n *   formatFloat acts like utils.human_number\n * @returns {string}\n */\nfunction formatInteger(value, field, options) {\n    options = options || {};\n    if (options.isPassword) {\n        return _.str.repeat('*', String(value).length);\n    }\n    if (!value && value !== 0) {\n        // previously, it returned 'false'. I don't know why.  But for the Pivot\n        // view, I want to display the concept of 'no value' with an empty\n        // string.\n        return \"\";\n    }\n    if (options.humanReadable && options.humanReadable(value)) {\n        return utils.human_number(value, options.decimals, options.minDigits, options.formatterCallback);\n    }\n    return utils.insert_thousand_seps(_.str.sprintf('%d', value));\n}\n\n/**\n * Returns a string representing an many2one.  If the value is false, then we\n * return an empty string.  Note that it accepts two types of input parameters:\n * an array, in that case we assume that the many2one value is of the form\n * [id, nameget], and we return the nameget, or it can be an object, and in that\n * case, we assume that it is a record datapoint from a BasicModel.\n *\n * @param {Array|Object|false} value\n * @param {Object} [field]\n *        a description of the field (note: this parameter is ignored)\n * @param {Object} [options] additional options\n * @param {boolean} [options.escape=false] if true, escapes the formatted value\n * @returns {string}\n */\nfunction formatMany2one(value, field, options) {\n    if (!value) {\n        value = '';\n    } else if (_.isArray(value)) {\n        // value is a pair [id, nameget]\n        value = value[1];\n    } else {\n        // value is a datapoint, so we read its display_name field, which\n        // may in turn be a datapoint (if the name field is a many2one)\n        while (value.data) {\n            value = value.data.display_name || '';\n        }\n    }\n    if (options && options.escape) {\n        value = _.escape(value);\n    }\n    return value;\n}\n\n/**\n * Returns a string indicating the number of records in the relation.\n *\n * @param {Object} value a valid element from a BasicModel, that represents a\n *   list of values\n * @returns {string}\n */\nfunction formatX2Many(value) {\n    if (value.data.length === 0) {\n        return _t('No records');\n    } else if (value.data.length === 1) {\n        return _t('1 record');\n    } else {\n        return value.data.length + _t(' records');\n    }\n}\n\n/**\n * Returns a string representing a monetary value. The result takes into account\n * the user settings (to display the correct decimal separator, currency, ...).\n *\n * @param {float|false} value the value that should be formatted\n * @param {Object} [field]\n *        a description of the field (returned by fields_get for example). It\n *        may contain a description of the number of digits that should be used.\n * @param {Object} [options]\n *        additional options to override the values in the python description of\n *        the field.\n * @param {Object} [options.currency] the description of the currency to use\n * @param {integer} [options.currency_id]\n *        the id of the 'res.currency' to use (ignored if options.currency)\n * @param {string} [options.currency_field]\n *        the name of the field whose value is the currency id\n *        (ignore if options.currency or options.currency_id)\n *        Note: if not given it will default to the field currency_field value\n *        or to 'currency_id'.\n * @param {Object} [options.data]\n *        a mapping of field name to field value, required with\n *        options.currency_field\n * @param {integer[]} [options.digits]\n *        the number of digits that should be used, instead of the default\n *        digits precision in the field. Note: if the currency defines a\n *        precision, the currency's one is used.\n * @param {boolean} [options.forceString=false]\n *        if true, returns a string with regular whitespace. Otherwise it uses\n *        non-breaking whitespace unicode character. The option is presented for\n *        historical reason and will be removed in master. Previous\n *        implementation used html entity `&nbsp;`, which doesn't work in html\n *        attributes. With new implementation we can always use the unicode\n *        character and the option is not needed anymore.\n * @returns {string | _Markup}\n */\nfunction formatMonetary(value, field, options) {\n    if (value === false) {\n        return \"\";\n    }\n    options = Object.assign({ forceString: false }, options);\n\n    var currency = options.currency;\n    if (!currency) {\n        var currency_id = options.currency_id;\n        if (!currency_id && options.data) {\n            var currency_field = options.currency_field || field.currency_field || 'currency_id';\n            currency_id = options.data[currency_field] && options.data[currency_field].res_id;\n        }\n        currency = session.get_currency(currency_id);\n    }\n\n    var digits = (currency && currency.digits) || options.digits;\n    if (options.field_digits === true) {\n        digits = field.digits || digits;\n    }\n    var formatted_value = formatFloat(value, field,\n        _.extend({}, options , {digits: digits})\n    );\n\n    if (!currency || options.noSymbol) {\n        return formatted_value;\n    }\n    const val = currency.position === 'after'\n        ? [formatted_value, currency.symbol]\n        : [currency.symbol, formatted_value];\n    if (options.forceString) {\n        return val.join(' ');\n    }\n    return utils.Markup(val.map((v) => _.escape(v)).join(NBSP));\n}\n/**\n * Returns a string representing the given value (multiplied by 100)\n * concatenated with '%'.\n *\n * @param {number | false} value\n * @param {Object} [field]\n * @param {Object} [options]\n * @param {function} [options.humanReadable] if returns true, parsing is avoided\n * @returns {string}\n */\nfunction formatPercentage(value, field, options) {\n    options = options || {};\n    let result = formatFloat(value * 100, field, options) || '0';\n    if (!options.humanReadable || !options.humanReadable(value * 100)) {\n        result = parseFloat(result).toString().replace('.', _t.database.parameters.decimal_point);\n    }\n    return result + (options.noSymbol ? '' : '%');\n}\n/**\n * Returns a string representing the value of the selection.\n *\n * @param {string|false} value\n * @param {Object} [field]\n *        a description of the field (note: this parameter is ignored)\n * @param {Object} [options] additional options\n * @param {boolean} [options.escape=false] if true, escapes the formatted value\n */\nfunction formatSelection(value, field, options) {\n    var val = _.find(field.selection, function (option) {\n        return option[0] === value;\n    });\n    if (!val) {\n        return '';\n    }\n    value = val[1];\n    if (options && options.escape) {\n        value = _.escape(value);\n    }\n    return value;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Parse\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Smart date inputs are shortcuts to write dates quicker.\n * These shortcuts should respect the format ^[+-]\\d+[dmwy]?$\n * \n * e.g.\n *   \"+1d\" or \"+1\" will return now + 1 day\n *   \"-2w\" will return now - 2 weeks\n *   \"+3m\" will return now + 3 months\n *   \"-4y\" will return now + 4 years\n *\n * @param {string} value\n * @returns {Moment|false} Moment date object\n */\nfunction parseSmartDateInput(value) {\n    const units = {\n        d: 'days',\n        m: 'months',\n        w: 'weeks',\n        y: 'years',\n    };\n    const re = new RegExp(`^([+-])(\\\\d+)([${Object.keys(units).join('')}]?)$`);\n    const match = re.exec(value);\n    if (match) {\n        let date = moment();\n        const offset = parseInt(match[2], 10);\n        const unit = units[match[3] || 'd'];\n        if (match[1] === '+') {\n            date.add(offset, unit);\n        } else {\n            date.subtract(offset, unit);\n        }\n        return date;\n    }\n    return false;\n}\n\n/**\n * Create an Date object\n * The method toJSON return the formated value to send value server side\n *\n * @param {string} value\n * @param {Object} [field]\n *        a description of the field (note: this parameter is ignored)\n * @param {Object} [options] additional options\n * @param {boolean} [options.isUTC] the formatted date is utc\n * @param {boolean} [options.timezone=false] format the date after apply the timezone\n *        offset\n * @returns {Moment|false} Moment date object\n */\nfunction parseDate(value, field, options) {\n    if (!value) {\n        return false;\n    }\n    var datePattern = time.getLangDateFormat();\n    var datePatternWoZero = time.getLangDateFormatWoZero();\n    var date;\n    const smartDate = parseSmartDateInput(value);\n    if (smartDate) {\n        date = smartDate;\n    } else {\n        if (options && options.isUTC) {\n            value = value.padStart(10, \"0\"); // server may send \"932-10-10\" for \"0932-10-10\" on some OS\n            date = moment.utc(value);\n        } else {\n            date = moment.utc(value, [datePattern, datePatternWoZero, moment.ISO_8601]);\n        }\n    }\n    if (date.isValid()) {\n        if (date.year() === 0) {\n            date.year(moment.utc().year());\n        }\n        if (date.year() >= 1000){\n            date.toJSON = function () {\n                return this.clone().locale('en').format('YYYY-MM-DD');\n            };\n            return date;\n        }\n    }\n    throw new Error(_.str.sprintf(core._t(\"'%s' is not a correct date\"), value));\n}\n\n/**\n * Create an Date object\n * The method toJSON return the formated value to send value server side\n *\n * @param {string} value\n * @param {Object} [field]\n *        a description of the field (note: this parameter is ignored)\n * @param {Object} [options] additional options\n * @param {boolean} [options.isUTC] the formatted date is utc\n * @param {boolean} [options.timezone=false] format the date after apply the timezone\n *        offset\n * @returns {Moment|false} Moment date object\n */\nfunction parseDateTime(value, field, options) {\n    if (!value) {\n        return false;\n    }\n    const datePattern = time.getLangDateFormat();\n    const timePattern = time.getLangTimeFormat();\n    const datePatternWoZero = time.getLangDateFormatWoZero();\n    const timePatternWoZero = time.getLangTimeFormatWoZero();\n    var pattern1 = datePattern + ' ' + timePattern;\n    var pattern2 = datePatternWoZero + ' ' + timePatternWoZero;\n    var datetime;\n    const smartDate = parseSmartDateInput(value);\n    if (smartDate) {\n        datetime = smartDate;\n    } else {\n        if (options && options.isUTC) {\n            value = value.padStart(19, \"0\"); // server may send \"932-10-10\" for \"0932-10-10\" on some OS\n            // phatomjs crash if we don't use this format\n            datetime = moment.utc(value.replace(' ', 'T') + 'Z');\n        } else {\n            datetime = moment.utc(value, [pattern1, pattern2, moment.ISO_8601]);\n            if (options && options.timezone) {\n                datetime.add(-session.getTZOffset(datetime), 'minutes');\n            }\n        }\n    }\n    if (datetime.isValid()) {\n        if (datetime.year() === 0) {\n            datetime.year(moment.utc().year());\n        }\n        if (datetime.year() >= 1000) {\n            datetime.toJSON = function () {\n                return this.clone().locale('en').format('YYYY-MM-DD HH:mm:ss');\n            };\n            return datetime;\n        }\n    }\n    throw new Error(_.str.sprintf(core._t(\"'%s' is not a correct datetime\"), value));\n}\n\n/**\n * Parse a String containing number in language formating\n *\n * @param {string} value\n *                The string to be parsed with the setting of thousands and\n *                decimal separator\n * @returns {float|NaN} the number value contained in the string representation\n */\nfunction parseNumber(value) {\n    if (core._t.database.parameters.thousands_sep) {\n        var escapedSep = _.str.escapeRegExp(core._t.database.parameters.thousands_sep);\n        value = value.replace(new RegExp(escapedSep, 'g'), '');\n    }\n    if (core._t.database.parameters.decimal_point) {\n        value = value.replace(core._t.database.parameters.decimal_point, '.');\n    }\n    return Number(value);\n}\n\n/**\n * Parse a String containing float in language formating\n *\n * @param {string} value\n *                The string to be parsed with the setting of thousands and\n *                decimal separator\n * @returns {float}\n * @throws {Error} if no float is found respecting the language configuration\n */\nfunction parseFloat(value) {\n    var parsed = parseNumber(value);\n    if (isNaN(parsed)) {\n        throw new Error(_.str.sprintf(core._t(\"'%s' is not a correct float\"), value));\n    }\n    return parsed;\n}\n\n/**\n * Parse a String containing currency symbol and returns amount\n *\n * @param {string} value\n *                The string to be parsed\n *                We assume that a monetary is always a pair (symbol, amount) separated\n *                by a non breaking space. A simple float can also be accepted as value\n * @param {Object} [field]\n *        a description of the field (returned by fields_get for example).\n * @param {Object} [options] additional options.\n * @param {Object} [options.currency] - the description of the currency to use\n * @param {integer} [options.currency_id]\n *        the id of the 'res.currency' to use (ignored if options.currency)\n * @param {string} [options.currency_field]\n *        the name of the field whose value is the currency id\n *        (ignore if options.currency or options.currency_id)\n *        Note: if not given it will default to the field currency_field value\n *        or to 'currency_id'.\n * @param {Object} [options.data]\n *        a mapping of field name to field value, required with\n *        options.currency_field\n *\n * @returns {float} the float value contained in the string representation\n * @throws {Error} if no float is found or if parameter does not respect monetary condition\n */\nfunction parseMonetary(value, field, options) {\n    if (!value.includes(NBSP) && !value.includes('&nbsp;')) {\n        return parseFloat(value);\n    }\n    options = options || {};\n    var currency = options.currency;\n    if (!currency) {\n        var currency_id = options.currency_id;\n        if (!currency_id && options.data) {\n            var currency_field = options.currency_field || field.currency_field || 'currency_id';\n            currency_id = options.data[currency_field] && options.data[currency_field].res_id;\n        }\n        currency = session.get_currency(currency_id);\n    }\n    if (!currency) {\n        return parseFloat(value);\n    }\n    if (!value.includes(currency.symbol)) {\n        throw new Error(_.str.sprintf(core._t(\"'%s' is not a correct monetary field\"), value));\n    }\n    if (currency.position === 'after') {\n        return parseFloat(value\n            .replace(`${ NBSP }${ currency.symbol }`, '')\n            .replace(`&nbsp;${ currency.symbol }`, ''));\n    } else {\n        return parseFloat(value\n            .replace(`${ currency.symbol }${ NBSP }`, '')\n            .replace(`${ currency.symbol }&nbsp;`, ''));\n    }\n}\n\n/**\n * Parse a String containing float and unconvert it with a conversion factor\n *\n * @param {number} [options.factor]\n *          Conversion factor, default value is 1.0\n */\nfunction parseFloatFactor(value, field, options) {\n    var parsed = parseFloat(value);\n    var factor = options.factor || 1.0;\n    return parsed / factor;\n}\n\nfunction parseFloatTime(value) {\n    var factor = 1;\n    if (value[0] === '-') {\n        value = value.slice(1);\n        factor = -1;\n    }\n    var float_time_pair = value.split(\":\");\n    if (float_time_pair.length !== 2)\n        return factor * parseFloat(value);\n    var hours = parseInteger(float_time_pair[0]);\n    var minutes = parseInteger(float_time_pair[1]);\n    return factor * (hours + (minutes / 60));\n}\n\n/**\n * Parse a String containing float and unconvert it with a conversion factor\n * of 100. The percentage can be a regular xx.xx float or a xx%.\n *\n * @param {string} value\n *                The string to be parsed\n * @returns {float}\n * @throws {Error} if the value couldn't be converted to float\n */\nfunction parsePercentage(value) {\n    return parseFloat(value) / 100;\n}\n\n/**\n * Parse a String containing integer with language formating\n *\n * @param {string} value\n *                The string to be parsed with the setting of thousands and\n *                decimal separator\n * @returns {integer}\n * @throws {Error} if no integer is found respecting the language configuration\n */\nfunction parseInteger(value) {\n    var parsed = parseNumber(value);\n    // do not accept not numbers or float values\n    if (isNaN(parsed) || parsed % 1 || parsed < -2147483648 || parsed > 2147483647) {\n        throw new Error(_.str.sprintf(core._t(\"'%s' is not a correct integer\"), value));\n    }\n    return parsed;\n}\n\n/**\n * Creates an object with id and display_name.\n *\n * @param {Array|number|string|Object} value\n *        The given value can be :\n *        - an array with id as first element and display_name as second element\n *        - a number or a string representing the id (the display_name will be\n *          returned as undefined)\n *        - an object, simply returned untouched\n * @returns {Object} (contains the id and display_name)\n *                   Note: if the given value is not an array, a string or a\n *                   number, the value is returned untouched.\n */\nfunction parseMany2one(value) {\n    if (_.isArray(value)) {\n        return {\n            id: value[0],\n            display_name: value[1],\n        };\n    }\n    if (_.isNumber(value) || _.isString(value)) {\n        return {\n            id: parseInt(value, 10),\n        };\n    }\n    return value;\n}\n\nreturn {\n    format: {\n        binary: formatBinary,\n        boolean: formatBoolean,\n        char: formatChar,\n        date: formatDate,\n        datetime: formatDateTime,\n        float: formatFloat,\n        float_factor: formatFloatFactor,\n        float_time: formatFloatTime,\n        html: _.identity, // todo\n        integer: formatInteger,\n        many2many: formatX2Many,\n        many2one: formatMany2one,\n        many2one_reference: formatInteger,\n        monetary: formatMonetary,\n        one2many: formatX2Many,\n        percentage: formatPercentage,\n        reference: formatMany2one,\n        selection: formatSelection,\n        text: formatChar,\n    },\n    parse: {\n        binary: _.identity,\n        boolean: _.identity, // todo\n        char: _.identity, // todo\n        date: parseDate, // todo\n        datetime: parseDateTime, // todo\n        float: parseFloat,\n        float_factor: parseFloatFactor,\n        float_time: parseFloatTime,\n        html: _.identity, // todo\n        integer: parseInteger,\n        many2many: _.identity, // todo\n        many2one: parseMany2one,\n        many2one_reference: parseInteger,\n        monetary: parseMonetary,\n        one2many: _.identity,\n        percentage: parsePercentage,\n        reference: parseMany2one,\n        selection: _.identity, // todo\n        text: _.identity, // todo\n    },\n};\n\n});\n", "odoo.define('web.FieldWrapper', function (require) {\n    \"use strict\";\n\n    const { ComponentWrapper } = require('web.OwlCompatibility');\n    const field_utils = require('web.field_utils');\n\n    /**\n     * This file defines the FieldWrapper component, an extension of ComponentWrapper,\n     * needed to instanciate Owl fields inside legacy widgets. This component\n     * will be no longer necessary as soon as all legacy widgets using fields will\n     * be rewritten in Owl.\n     */\n    class FieldWrapper extends ComponentWrapper {\n        constructor() {\n            super(...arguments);\n\n            this._data = {};\n\n            const options = this.props.options || {};\n            const record = this.props.record;\n            this._data.name = this.props.fieldName;\n            this._data.record = record;\n            this._data.field = record.fields[this._data.name];\n            this._data.viewType = options.viewType || 'default';\n            const fieldsInfo = record.fieldsInfo[this._data.viewType];\n            this._data.attrs = options.attrs || (fieldsInfo && fieldsInfo[this._data.name]) || {};\n            this._data.additionalContext = options.additionalContext || {};\n            this._data.value = record.data[this._data.name];\n            this._data.recordData = record.data;\n            this._data.string = this._data.attrs.string || this._data.field.string || this._data.name;\n            this._data.nodeOptions = this._data.attrs.options || {};\n            this._data.dataPointID = record.id;\n            this._data.res_id = record.res_id;\n            this._data.model = record.model;\n            this._data.mode = options.mode || \"readonly\";\n            this._data.formatType = this._data.attrs.widget in field_utils.format ?\n                                this._data.attrs.widget :\n                                this._data.field.type;\n            this._data.formatOptions = {};\n            this._data.parseOptions = {};\n            if (this._data.attrs.decorations) {\n                this._data.resetOnAnyFieldChange = true;\n            }\n\n            for (let key in this._data) {\n                Object.defineProperty(this, key, {\n                    get: () => {\n                        if (this.el) {\n                            if (key === 'dataPointID') {\n                                return this.componentRef.comp.dataPointId;\n                            } else if (key === 'res_id') {\n                                return this.componentRef.comp.resId;\n                            }\n                        }\n                        return (this.el ? this.componentRef.comp : this._data)[key];\n                    },\n                });\n            }\n        }\n\n        /**\n         * Renderers set the '__node' attribute on fields they instantiate. It\n         * is used for instance to evaluate modifiers on multi-edition. In this\n         * case, the controller reads this property on the target of the event.\n         * However, with Owl field Components, it is set on the FieldWrapper,\n         * not the real field Component, which triggers the 'field-changed'\n         * event. This function writes the attribute on that field Component.\n         */\n        mounted() {\n            super.mounted(...arguments);\n            this.componentRef.comp.__node = this.__node;\n        }\n\n        //----------------------------------------------------------------------\n        // Getters\n        //----------------------------------------------------------------------\n\n        get fieldDependencies() {\n            return this.Component.fieldDependencies;\n        }\n        get specialData() {\n            return this.Component.specialData;\n        }\n        get supportedFieldTypes() {\n            return this.Component.supportedFieldTypes;\n        }\n        get description() {\n            return this.Component.description;\n        }\n        get noLabel() {\n            return this.Component.noLabel;\n        }\n        get isQuickEditable() {\n            return this.Component.isQuickEditable;\n        }\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        activate() {\n            return this.componentRef.comp.activate(...arguments);\n        }\n        commitChanges() {\n            return this.componentRef.comp.commitChanges(...arguments);\n        }\n        quickEdit() {\n            return this.componentRef.comp.quickEdit(...arguments);\n        }\n        getFocusableElement() {\n            return $(this.componentRef.comp.focusableElement);\n        }\n        isEmpty() {\n            return this.componentRef.comp.isEmpty;\n        }\n        isFocusable() {\n            return this.componentRef.comp.isFocusable;\n        }\n        isSet() {\n            if (this.componentRef.comp) {\n                return this.componentRef.comp.isSet;\n            }\n            // because of the willStart, the real field component may not be\n            // instantiated yet when the renderer first asks if it is set\n            // (only the wrapper is instantiated), so we instantiate one\n            // with the same props, get its 'isSet' status, and destroy it.\n            const c = new this.Component(null, this.props);\n            const isSet = c.isSet;\n            c.destroy();\n            return isSet;\n        }\n        isValid() {\n            if (this.componentRef.comp) {\n                return this.componentRef.comp.isValid;\n            }\n            // because of the willStart, the real field component may not be\n            // instantiated yet when the renderer first asks if it is set\n            // (only the wrapper is instantiated), so we instantiate one\n            // with the same props, get its 'isValid' status, and destroy it.\n            const c = new this.Component(null, this.props);\n            const isValid = c.isValid;\n            c.destroy();\n            return isValid;\n        }\n        removeInvalidClass() {\n            return this.componentRef.comp.removeInvalidClass(...arguments);\n        }\n        reset(record, event) {\n            return this.update({record, event});\n        }\n        setIDForLabel() {\n            return this.componentRef.comp.setIdForLabel(...arguments);\n        }\n        setInvalidClass() {\n            return this.componentRef.comp.setInvalidClass(...arguments);\n        }\n        updateModifiersValue(modifiers) {\n            if (this.props.options.attrs) {\n                this.props.options.attrs.modifiersValue = modifiers || {};\n            } else {\n                const viewType = this.props.options.viewType || 'default';\n                const fieldsInfo = this.props.record.fieldsInfo[viewType];\n                fieldsInfo[this.props.fieldName].modifiersValue = modifiers || {};\n            }\n            this.componentRef.comp.props = this.props;\n        }\n    }\n\n    return FieldWrapper;\n});\n", "odoo.define('web.relational_fields', function (require) {\n\"use strict\";\n\n/**\n * Relational Fields\n *\n * In this file, we have a collection of various relational field widgets.\n * Relational field widgets are more difficult to use/manipulate, because the\n * relations add a level of complexity: a value is not a basic type, it can be\n * a collection of other records.\n *\n * Also, the way relational fields are edited is more complex.  We can change\n * the corresponding record(s), or alter some of their fields.\n */\n\nvar AbstractField = require('web.AbstractField');\nvar basicFields = require('web.basic_fields');\nvar concurrency = require('web.concurrency');\nconst ControlPanelX2Many = require('web.ControlPanelX2Many');\nvar core = require('web.core');\nvar data = require('web.data');\nvar Dialog = require('web.Dialog');\nvar dialogs = require('web.view_dialogs');\nvar dom = require('web.dom');\nconst Domain = require('web.Domain');\nvar KanbanRecord = require('web.KanbanRecord');\nvar KanbanRenderer = require('web.KanbanRenderer');\nvar ListRenderer = require('web.ListRenderer');\nconst { ComponentWrapper, WidgetAdapterMixin } = require('web.OwlCompatibility');\nconst { sprintf, toBoolElse } = require(\"web.utils\");\n\nconst { escape } = owl.utils;\nvar _t = core._t;\nvar _lt = core._lt;\nvar qweb = core.qweb;\n\n//------------------------------------------------------------------------------\n// Many2one widgets\n//------------------------------------------------------------------------------\n\nvar M2ODialog = Dialog.extend({\n    template: \"M2ODialog\",\n    init: function (parent, name, value) {\n        this.name = name;\n        this.value = value;\n        this._super(parent, {\n            title: _.str.sprintf(_t(\"New %s\"), this.name),\n            size: 'medium',\n            buttons: [{\n                text: _t('Create'),\n                classes: 'btn-primary',\n                close: true,\n                click: function () {\n                    this.trigger_up('quick_create', { value: this.value });\n                },\n            }, {\n                text: _t('Discard'),\n                close: true,\n            }],\n        });\n    },\n    /**\n     * @override\n     * @param {boolean} isSet\n     */\n    close: function (isSet) {\n        this.isSet = isSet;\n        this._super.apply(this, arguments);\n    },\n    /**\n     * @override\n     */\n    destroy: function () {\n        if (!this.isSet) {\n            this.trigger_up('closed_unset');\n        }\n        this._super.apply(this, arguments);\n    },\n});\n\nvar FieldMany2One = AbstractField.extend({\n    description: _lt(\"Many2one\"),\n    supportedFieldTypes: ['many2one'],\n    template: 'FieldMany2One',\n    custom_events: _.extend({}, AbstractField.prototype.custom_events, {\n        'closed_unset': '_onDialogClosedUnset',\n        'field_changed': '_onFieldChanged',\n        'quick_create': '_onQuickCreate',\n    }),\n    events: _.extend({}, AbstractField.prototype.events, {\n        'click input': '_onInputClick',\n        'click': '_onLinkClick',\n        'focusout input': '_onInputFocusout',\n        'keyup input': '_onInputKeyup',\n        'click .o_external_button': '_onExternalButtonClick',\n    }),\n    quickEditExclusion: [\n        '.o_form_uri',\n    ],\n    AUTOCOMPLETE_DELAY: 200,\n    SEARCH_MORE_LIMIT: 320,\n    isQuickEditable: true,\n\n    /**\n     * @override\n     * @param {boolean} [options.noOpen=false] if true, there is no external\n     *   button to open the related record in a dialog\n     * @param {boolean} [options.noCreate=false] if true, the many2one does not\n     *   allow to create records\n     */\n    init: function (parent, name, record, options) {\n        options = options || {};\n        this._super.apply(this, arguments);\n        this.limit = 7;\n        this.orderer = new concurrency.DropMisordered();\n\n        // should normally be set, except in standalone M20\n        const canCreate = 'can_create' in this.attrs ? JSON.parse(this.attrs.can_create) : true;\n        this.can_create = canCreate && !this.nodeOptions.no_create && !options.noCreate;\n        this.can_write = 'can_write' in this.attrs ? JSON.parse(this.attrs.can_write) : true;\n\n        this.nodeOptions = _.defaults(this.nodeOptions, {\n            quick_create: true,\n        });\n        this.noOpen = 'noOpen' in options ? options.noOpen : this.nodeOptions.no_open;\n        this.m2o_value = this._formatValue(this.value);\n        // 'recordParams' is a dict of params used when calling functions\n        // 'getDomain' and 'getContext' on this.record\n        this.recordParams = {fieldName: this.name, viewType: this.viewType};\n        // We need to know if the widget is dirty (i.e. if the user has changed\n        // the value, and those changes haven't been acknowledged yet by the\n        // environment), to prevent erasing that new value on a reset (e.g.\n        // coming by an onchange on another field)\n        this.isDirty = false;\n        this.lastChangeEvent = undefined;\n\n        // List of autocomplete sources\n        this._autocompleteSources = [];\n        // Add default search method for M20 (name_search)\n        this._addAutocompleteSource(this._search, {placeholder: _t('Loading...'), order: 1});\n\n        // list of last autocomplete suggestions\n        this.suggestions = [];\n\n        // flag used to prevent from selecting the highlighted item in the autocomplete\n        // dropdown when the user leaves the many2one by pressing Tab (unless he\n        // manually selected the item using UP/DOWN keys)\n        this.ignoreTabSelect = false;\n\n        // use a DropPrevious to properly handle related record quick creations,\n        // and store a createDef to be able to notify the environment that there\n        // is pending quick create operation\n        this.dp = new concurrency.DropPrevious();\n        this.createDef = undefined;\n    },\n    start: function () {\n        // booleean indicating that the content of the input isn't synchronized\n        // with the current m2o value (for instance, the user is currently\n        // typing something in the input, and hasn't selected a value yet).\n        this.floating = false;\n\n        this.$input = this.$('input');\n        this.$external_button = this.$('.o_external_button');\n        return this._super.apply(this, arguments);\n    },\n    /**\n     * @override\n     */\n    destroy: function () {\n        if (this._onScroll) {\n            window.removeEventListener('scroll', this._onScroll, true);\n        }\n        this._super.apply(this, arguments);\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Override to make the caller wait for potential ongoing record creation.\n     * This ensures that the correct many2one value is set when the main record\n     * is saved.\n     *\n     * @override\n     * @returns {Promise} resolved as soon as there is no longer record being\n     *   (quick) created\n     */\n    commitChanges: function () {\n        return Promise.resolve(this.createDef);\n    },\n    /**\n     * @override\n     * @returns {jQuery}\n     */\n    getFocusableElement: function () {\n        return this.mode === 'edit' && this.$input || this.$el;\n    },\n    /**\n     * TODO\n     */\n    reinitialize: function (value) {\n        this.isDirty = false;\n        this.floating = false;\n        return this._setValue(value);\n    },\n    /**\n     * Re-renders the widget if it isn't dirty. The widget is dirty if the user\n     * changed the value, and that change hasn't been acknowledged yet by the\n     * environment. For example, another field with an onchange has been updated\n     * and this field is updated before the onchange returns. Two '_setValue'\n     * are done (this is sequential), the first one returns and this widget is\n     * reset. However, it has pending changes, so we don't re-render.\n     *\n     * @override\n     */\n    reset: function (record, event) {\n        this._reset(record, event);\n        if (!event || event === this.lastChangeEvent) {\n            this.isDirty = false;\n        }\n        if (this.isDirty) {\n            return Promise.resolve();\n        } else {\n            return this._render();\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Add a source to the autocomplete results\n     *\n     * @param {function} method : A function that returns a list of results. If async source, the function should return a promise\n     * @param {Object} params : Parameters containing placeholder/validation/order\n     * @private\n     */\n    _addAutocompleteSource: function (method, params) {\n        this._autocompleteSources.push({\n            method: method,\n            placeholder: (params.placeholder ? _t(params.placeholder) : _t('Loading...')) + '<i class=\"fa fa-spin fa-circle-o-notch pull-right\"></i>' ,\n            validation: params.validation,\n            loading: false,\n            order: params.order || 999\n        });\n\n        this._autocompleteSources = _.sortBy(this._autocompleteSources, 'order');\n    },\n    /**\n     * @private\n     */\n    _bindAutoComplete: function () {\n        var self = this;\n        // avoid ignoring autocomplete=\"off\" by obfuscating placeholder, see #30439\n        if ($.browser.chrome && this.$input.attr('placeholder')) {\n            this.$input.attr('placeholder', function (index, val) {\n                return val.split('').join('\\ufeff');\n            });\n        }\n        this.$input.autocomplete({\n            source: function (req, resp) {\n                self.suggestions = [];\n                _.each(self._autocompleteSources, function (source) {\n                    // Resets the results for this source\n                    source.results = [];\n\n                    // Check if this source should be used for the searched term\n                    const search = req.term.trim();\n                    if (!source.validation || source.validation.call(self, search)) {\n                        source.loading = true;\n\n                        // Wrap the returned value of the source.method with a promise\n                        // So event if the returned value is not async, it will work\n                        Promise.resolve(source.method.call(self, search)).then(function (results) {\n                            source.results = results;\n                            source.loading = false;\n                            self.suggestions = self._concatenateAutocompleteResults();\n                            resp(self.suggestions);\n                        });\n                    }\n                });\n            },\n            select: function (event, ui) {\n                // do not select anything if the input is empty and the user\n                // presses Tab (except if he manually highlighted an item with\n                // up/down keys)\n                if (!self.floating && event.key === \"Tab\" && self.ignoreTabSelect) {\n                    return false;\n                }\n\n                if (event.key === \"Enter\") {\n                    // on Enter we do not want any additional effect, such as\n                    // navigating to another field\n                    event.stopImmediatePropagation();\n                    event.preventDefault();\n                }\n\n                var item = ui.item;\n                self.floating = false;\n                if (item.id) {\n                    self.reinitialize({id: item.id, display_name: item.name});\n                } else if (item.action) {\n                    item.action();\n                }\n                return false;\n            },\n            focus: function (event) {\n                event.preventDefault(); // don't automatically select values on focus\n                if (event.key === \"ArrowUp\" || event.key === \"ArrowDown\") {\n                    // the user manually selected an item by pressing up/down keys,\n                    // so select this item if he presses tab later on\n                    self.ignoreTabSelect = false;\n                }\n            },\n            open: function (event) {\n                self._onScroll = function (ev) {\n                    if (ev.target !== self.$input.get(0) && self.$input.hasClass('ui-autocomplete-input')) {\n                        if (ev.target.id === self.$input.autocomplete('widget').get(0).id) {\n                            ev.stopPropagation();\n                            return;\n                        }\n                        self.$input.autocomplete('close');\n                    }\n                };\n                window.addEventListener('scroll', self._onScroll, true);\n            },\n            close: function (event) {\n                self.ignoreTabSelect = false;\n                // it is necessary to prevent ESC key from propagating to field\n                // root, to prevent unwanted discard operations.\n                if (event.which === $.ui.keyCode.ESCAPE) {\n                    event.stopPropagation();\n                }\n                if (self._onScroll) {\n                    window.removeEventListener('scroll', self._onScroll, true);\n                }\n            },\n            autoFocus: true,\n            html: true,\n            minLength: 0,\n            delay: this.AUTOCOMPLETE_DELAY,\n            classes: {\n                \"ui-autocomplete\": \"dropdown-menu\",\n            },\n            create: function() {\n                $(this).data('ui-autocomplete')._renderMenu = function(ulWrapper, entries) {\n                  var render = this;\n                  $.each(entries, function(index, entry) {\n                    render._renderItemData(ulWrapper, entry);\n                  });\n                  $(ulWrapper).find( \"li > a\" ).addClass( \"dropdown-item\" );\n                }\n            },\n        });\n        this.$input.autocomplete(\"option\", \"position\", { my : \"left top\", at: \"left bottom\" });\n        this.autocomplete_bound = true;\n    },\n    /**\n     * Concatenate async results for autocomplete.\n     *\n     * @returns {Array}\n     * @private\n     */\n    _concatenateAutocompleteResults: function () {\n        var results = [];\n        _.each(this._autocompleteSources, function (source) {\n            if (source.results && source.results.length) {\n                results = results.concat(source.results);\n            } else if (source.loading) {\n                results.push({\n                    label: source.placeholder\n                });\n            }\n        });\n        return results;\n    },\n    /**\n     * @private\n     * @param {string} [name]\n     * @returns {Object}\n     */\n    _createContext: function (name) {\n        var tmp = {};\n        var field = this.nodeOptions.create_name_field;\n        if (field === undefined) {\n            field = \"name\";\n        }\n        if (field !== false && name && this.nodeOptions.quick_create !== false) {\n            tmp[\"default_\" + field] = name;\n        }\n        return tmp;\n    },\n    /**\n     * @private\n     * @override\n     */\n    _quickEdit: function () {\n        this._super(...arguments);\n        this._toggleAutoComplete();\n    },\n    /**\n     * @private\n     * @returns {Array}\n     */\n    _getSearchBlacklist: function () {\n        return [];\n    },\n    /**\n    * Returns the display_name from a string which contains it but was altered\n    * as a result of the show_address option using a horrible hack.\n    *\n    * @private\n    * @param {string} value\n    * @returns {string} display_name without show_address mess\n    */\n    _getDisplayName: function (value) {\n        return value.split('\\n')[0];\n    },\n    /**\n     * Prepares and returns options for SelectCreateDialog\n     *\n     * @private\n     */\n    _getSearchCreatePopupOptions: function(view, ids, context, dynamicFilters) {\n        var self = this;\n        return {\n            res_model: this.field.relation,\n            domain: this.record.getDomain({fieldName: this.name}),\n            context: _.extend({}, this.record.getContext(this.recordParams), context || {}),\n            _createContext: this._createContext.bind(this),\n            dynamicFilters: dynamicFilters || [],\n            title: _.str.sprintf((view === 'search' ? _t(\"Search: %s\") : _t(\"Create: %s\")), this.string),\n            initial_ids: ids,\n            initial_view: view,\n            disable_multiple_selection: true,\n            no_create: !self.can_create,\n            kanban_view_ref: this.attrs.kanban_view_ref,\n            on_selected: function (records) {\n                self.reinitialize(records[0]);\n            },\n            on_closed: function () {\n                self.activate();\n            },\n        };\n    },\n    /**\n     * @private\n     * @param {Object} values\n     * @param {string} search_val\n     * @param {Object} domain\n     * @param {Object} context\n     * @returns {Object}\n     */\n    _manageSearchMore: function (values, search_val, domain, context) {\n        var self = this;\n        values = values.slice(0, this.limit);\n        values.push({\n            label: _t(\"Search More...\"),\n            action: function () {\n                var prom;\n                if (search_val !== '') {\n                    prom = self._rpc({\n                        model: self.field.relation,\n                        method: 'name_search',\n                        kwargs: {\n                            name: search_val,\n                            args: domain,\n                            operator: \"ilike\",\n                            limit: self.SEARCH_MORE_LIMIT,\n                            context: context,\n                        },\n                    });\n                }\n                Promise.resolve(prom).then(function (results) {\n                    var dynamicFilters;\n                    if (results) {\n                        var ids = _.map(results, function (x) {\n                            return x[0];\n                        });\n                        dynamicFilters = [{\n                            description: _.str.sprintf(_t('Quick search: %s'), search_val),\n                            domain: [['id', 'in', ids]],\n                        }];\n                    }\n                    self._searchCreatePopup(\"search\", false, {}, dynamicFilters);\n                });\n            },\n            classname: 'o_m2o_dropdown_option',\n        });\n        return values;\n    },\n    /**\n     * @private\n     */\n    _toggleAutoComplete: function () {\n        if (this.$input.autocomplete(\"widget\").is(\":visible\")) {\n            this.$input.autocomplete(\"close\");\n        } else if (this.floating) {\n            this.$input.autocomplete(\"search\"); // search with the input's content\n        } else {\n            this.$input.autocomplete(\"search\", ''); // search with the empty string\n        }\n    },\n    /**\n     * Listens to events 'field_changed' to keep track of the last event that\n     * has been trigerred. This allows to detect that all changes have been\n     * acknowledged by the environment.\n     *\n     * @param {OdooEvent} event 'field_changed' event\n     */\n    _onFieldChanged: function (event) {\n        this.lastChangeEvent = event;\n    },\n    /**\n     * @private\n     * @param {string} name\n     * @returns {Promise} resolved after the name_create or when the slowcreate\n     *                     modal is closed.\n     */\n    _quickCreate: function (name) {\n        var self = this;\n        var createDone;\n\n        var def = new Promise(function (resolve, reject) {\n            self.createDef = new Promise(function (innerResolve) {\n                // called when the record has been quick created, or when the dialog has\n                // been closed (in the case of a 'slow' create), meaning that the job is\n                // done\n                createDone = function () {\n                    innerResolve();\n                    resolve();\n                    self.createDef = undefined;\n                };\n            });\n\n            // called if the quick create is disabled on this many2one, or if the\n            // quick creation failed (probably because there are mandatory fields on\n            // the model)\n            var slowCreate = function () {\n                var dialog = self._searchCreatePopup(\"form\", false, self._createContext(name));\n                dialog.on('closed', self, createDone);\n            };\n            if (self.nodeOptions.quick_create) {\n                const prom = self.reinitialize({id: false, display_name: name});\n                prom.guardedCatch(reason => {\n                    reason.event.preventDefault();\n                    slowCreate();\n                });\n                self.dp.add(prom).then(createDone).guardedCatch(reject);\n            } else {\n                slowCreate();\n            }\n        });\n\n        return def;\n    },\n    /**\n     * @private\n     */\n    _renderEdit: function () {\n        var value = this.m2o_value;\n\n        this.$('.o_field_many2one_extra').html(this._renderValueLines(false));\n\n        // this is a stupid hack necessary to support the always_reload flag.\n        // the field value has been reread by the basic model.  We use it to\n        // display the full address of a partner, separated by \\n.  This is\n        // really a bad way to do it.  Now, we need to remove the extra lines\n        // and hope for the best that no one tries to uses this mechanism to do\n        // something else.\n        if (this.nodeOptions.always_reload) {\n            value = this._getDisplayName(value);\n        }\n        this.$input.val(value);\n        if (!this.autocomplete_bound) {\n            this._bindAutoComplete();\n        }\n        this._updateExternalButton();\n    },\n    /**\n     * @private\n     * @param {boolean} needFirstLine\n     * @returns {string} escaped html of value lines\n     */\n    _renderValueLines: function (needFirstLine) {\n        const escapedValue = _.escape((this.m2o_value || \"\").trim());\n        const lines = escapedValue.split('\\n');\n        if (!needFirstLine) {\n            lines.shift();\n        }\n        return lines.map((line) => `<span>${line}</span>`).join('<br/>');\n    },\n    /**\n     * @private\n     */\n    _renderReadonly: function () {\n        this.$el.html(this._renderValueLines(true));\n        if (!this.noOpen && this.value) {\n            this.$el.attr('href', _.str.sprintf('#id=%s&model=%s', this.value.res_id, this.field.relation));\n            this.$el.addClass('o_form_uri');\n        }\n    },\n    /**\n     * @private\n     */\n    _reset: function () {\n        this._super.apply(this, arguments);\n        this.floating = false;\n        this.m2o_value = this._formatValue(this.value);\n    },\n    /**\n     * Executes a 'name_search' and returns a list of formatted objects meant to\n     * be displayed in the autocomplete widget dropdown. These items are either:\n     * - a formatted version of a 'name_search' result\n     * - an option meant to display additional information or perform an action\n     *\n     * @private\n     * @param {string} [searchValue=\"\"]\n     * @returns {Promise<{\n     *      label: string,\n     *      id?: number,\n     *      name?: string,\n     *      value?: string,\n     *      classname?: string,\n     *      action?: () => Promise<any>,\n     * }[]>}\n     */\n    _search: async function (searchValue = \"\") {\n        const value = searchValue.trim();\n        const domain = this.record.getDomain(this.recordParams);\n        const context = Object.assign(\n            this.record.getContext(this.recordParams),\n            this.additionalContext\n        );\n\n        // Exclude black-listed ids from the domain\n        const blackListedIds = this._getSearchBlacklist();\n        if (blackListedIds.length) {\n            domain.push(['id', 'not in', blackListedIds]);\n        }\n\n        if (this.lastNameSearch) {\n            this.lastNameSearch.catch((reason) => {\n                // the last rpc name_search will be aborted, so we want to ignore its rejection\n                reason.event.preventDefault();\n            })\n            this.lastNameSearch.abort(false)\n        }\n        this.lastNameSearch = this._rpc({\n            model: this.field.relation,\n            method: \"name_search\",\n            kwargs: {\n                name: value,\n                args: domain,\n                operator: \"ilike\",\n                limit: this.limit + 1,\n                context,\n            }\n        });\n        const results = await this.orderer.add(this.lastNameSearch);\n\n        // Format results to fit the options dropdown\n        let values = results.map((result) => {\n            const [id, fullName] = result;\n            const displayName = this._getDisplayName(fullName).trim();\n            result[1] = displayName;\n            return {\n                id,\n                label: escape(displayName) || data.noDisplayContent,\n                value: displayName,\n                name: displayName,\n            };\n        });\n\n        // Add \"Search more...\" option if results count is higher than the limit\n        if (this.limit < values.length) {\n            values = this._manageSearchMore(values, value, domain, context);\n        }\n\n        // Additional options...\n        const canQuickCreate = this.can_create && !this.nodeOptions.no_quick_create;\n        const canCreateEdit = this.can_create && !this.nodeOptions.no_create_edit;\n        if (value.length) {\n            // \"Quick create\" option\n            const nameExists = results.some((result) => result[1] === value);\n            if (canQuickCreate && !nameExists) {\n                values.push({\n                    label: sprintf(\n                        _t(`Create \"<strong>%s</strong>\"`),\n                        escape(value)\n                    ),\n                    action: () => this._quickCreate(value),\n                    classname: 'o_m2o_dropdown_option'\n                });\n            }\n            // \"Create and Edit\" option\n            if (canCreateEdit) {\n                const valueContext = this._createContext(value);\n                values.push({\n                    label: _t(\"Create and Edit...\"),\n                    action: () => {\n                        // Input value is cleared and the form popup opens\n                        this.el.querySelector(':scope input').value = \"\";\n                        return this._searchCreatePopup('form', false, valueContext);\n                    },\n                    classname: 'o_m2o_dropdown_option',\n                });\n            }\n            // \"No results\" option\n            if (!values.length) {\n                values.push({\n                    label: _t(\"No records\"),\n                    classname: 'o_m2o_no_result',\n                });\n            }\n        } else if (!this.value && (canQuickCreate || canCreateEdit)) {\n            // \"Start typing\" option\n            values.push({\n                label: _t(\"Start typing...\"),\n                classname: 'o_m2o_start_typing',\n            });\n        }\n\n        return values;\n    },\n    /**\n     * all search/create popup handling\n     *\n     * TODO: ids argument is no longer used, remove it in master (as well as\n     * initial_ids param of the dialog)\n     *\n     * @private\n     * @param {any} view\n     * @param {any} ids\n     * @param {any} context\n     * @param {Object[]} [dynamicFilters=[]] filters to add to the search view\n     *   in the dialog (each filter has keys 'description' and 'domain')\n     */\n    _searchCreatePopup: function (view, ids, context, dynamicFilters) {\n        var options = this._getSearchCreatePopupOptions(view, ids, context, dynamicFilters);\n        return new dialogs.SelectCreateDialog(this, _.extend({}, this.nodeOptions, options)).open();\n    },\n    /**\n     * @private\n     */\n    _updateExternalButton: function () {\n        var has_external_button = !this.noOpen && !this.floating && this.isSet();\n        this.$external_button.toggle(has_external_button);\n        this.$el.toggleClass('o_with_button', has_external_button); // Should not be required anymore but kept for compatibility\n    },\n\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @override\n     * @param {MouseEvent} event\n     */\n    _onLinkClick: function (event) {\n        var self = this;\n        if (this.mode === 'readonly') {\n            event.preventDefault();\n            if (!this.noOpen) {\n                event.stopPropagation();\n                this._rpc({\n                    model: this.field.relation,\n                    method: 'get_formview_action',\n                    args: [[this.value.res_id]],\n                    context: this.record.getContext(this.recordParams),\n                }).then(function (action) {\n                    self.trigger_up('do_action', {action: action});\n                });\n            }\n        }\n    },\n\n    /**\n     * Reset the input as dialog has been closed without m2o creation.\n     *\n     * @private\n     */\n    _onDialogClosedUnset: function () {\n        this.isDirty = false;\n        this.floating = false;\n        this._render();\n    },\n    /**\n     * @private\n     */\n    _onExternalButtonClick: function () {\n        if (!this.value) {\n            this.activate();\n            return;\n        }\n        var self = this;\n        var context = this.record.getContext(this.recordParams);\n        this._rpc({\n                model: this.field.relation,\n                method: 'get_formview_id',\n                args: [[this.value.res_id]],\n                context: context,\n            })\n            .then(function (view_id) {\n                new dialogs.FormViewDialog(self, {\n                    res_model: self.field.relation,\n                    res_id: self.value.res_id,\n                    context: context,\n                    title: _t(\"Open: \") + self.string,\n                    view_id: view_id,\n                    readonly: !self.can_write,\n                    on_saved: function (record, changed) {\n                        if (changed) {\n                            const _setValue = self._setValue.bind(self, self.value.data, {\n                                forceChange: true,\n                            });\n                            self.trigger_up('reload', {\n                                db_id: self.value.id,\n                                onSuccess: _setValue,\n                                onFailure: _setValue,\n                            });\n                        }\n                    },\n                }).open();\n            });\n    },\n    /**\n     * @private\n     */\n    _onInputClick: function () {\n        if (this.autocomplete_bound && !this.$input.autocomplete(\"widget\").is(\":visible\")) {\n            this.ignoreTabSelect = true;\n        }\n        this._toggleAutoComplete();\n    },\n    /**\n     * @private\n     */\n    _onInputFocusout: function () {\n        if (!this.floating || this.$input.val() === \"\") {\n            return;\n        }\n        const firstValue = this.suggestions.find(s => s.id);\n        if (firstValue) {\n            this.reinitialize({ id: firstValue.id, display_name: firstValue.name });\n        } else if (this.can_create) {\n            new M2ODialog(this, this.string, this.$input.val()).open();\n        } else {\n            this.$input.val(\"\");\n        }\n    },\n    /**\n     * @private\n     *\n     * @param {OdooEvent} ev\n     */\n    _onInputKeyup: function (ev) {\n        const $autocomplete = this.$input.autocomplete(\"widget\");\n        // close autocomplete if no autocomplete item is selected and user presses TAB\n        // s.t. we properly move to the next field in this case\n        if (ev.which === $.ui.keyCode.TAB &&\n                $autocomplete.is(\":visible\") &&\n                !$autocomplete.find('.ui-menu-item .ui-state-active').length) {\n            this.$input.autocomplete(\"close\");\n        }\n        if (ev.which === $.ui.keyCode.ENTER || ev.which === $.ui.keyCode.TAB) {\n            // If we pressed enter or tab, we want to prevent _onInputFocusout from\n            // executing since it would open a M2O dialog to request\n            // confirmation that the many2one is not properly set.\n            // It's a case that is already handled by the autocomplete lib.\n            return;\n        }\n        this.isDirty = true;\n        if (this.$input.val() === \"\") {\n            if (ev.key === \"Backspace\" || ev.key === \"Delete\") { // Backspace or Delete\n                this.ignoreTabSelect = true;\n            }\n            this.reinitialize(false);\n        } else if (this._getDisplayName(this.m2o_value) !== this.$input.val()) {\n            this.floating = true;\n            this._updateExternalButton();\n        }\n    },\n    /**\n     * @private\n     * @param {OdooEvent} event\n     */\n    _onQuickCreate: function (event) {\n        this._quickCreate(event.data.value);\n    },\n});\n\nvar Many2oneBarcode = FieldMany2One.extend({\n    // We don't require this widget to be displayed in studio sidebar in\n    // non-debug mode hence just extended it from its original widget, so that\n    // description comes from parent and hasOwnProperty based condition fails\n});\n\nvar ListFieldMany2One = FieldMany2One.extend({\n    events: _.extend({}, FieldMany2One.prototype.events, {\n        'focusin input': '_onInputFocusin',\n    }),\n\n    /**\n     * Should never be allowed to be opened while in readonly mode in a list\n     *\n     * @override\n     */\n    init: function () {\n        this._super.apply(this, arguments);\n        // when we empty the input, we delay the setValue to prevent from\n        // triggering the 'fieldChanged' event twice when the user wants set\n        // another m2o value ; the following attribute is used to determine when\n        // we skipped the setValue, s.t. we can perform it later on if the user\n        // didn't select another value\n        this.mustSetValue = false;\n        this.m2oDialogFocused = false;\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * If in readonly, will never be considered as an active widget.\n     *\n     * @override\n     */\n    activate: function () {\n        if (this.mode === 'readonly') {\n            return false;\n        }\n        return this._super.apply(this, arguments);\n    },\n    /**\n     * @override\n     */\n    reinitialize: function () {\n        this.mustSetValue = false;\n        return this._super.apply(this, arguments);\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     */\n    _renderReadonly: function () {\n        this.$el.text(this.m2o_value);\n    },\n    /**\n     * @override\n     * @private\n     */\n    _searchCreatePopup: function () {\n        this.m2oDialogFocused = true;\n        return this._super.apply(this, arguments);\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     */\n    _onInputFocusin: function () {\n        this.m2oDialogFocused = false;\n    },\n    /**\n     * In case the focus is lost from a mousedown, we want to prevent the click occuring on the\n     * following mouseup since it might trigger some unwanted list functions.\n     * If it's not the case, we want to remove the added handler on the next mousedown.\n     * @see list_editable_renderer._onWindowClicked()\n     *\n     * Also, in list views, we don't want to try to trigger a fieldChange when the field\n     * is being emptied. Instead, it will be triggered as the user leaves the field\n     * while it is empty.\n     *\n     * @override\n     * @private\n     */\n    _onInputFocusout: function () {\n        if (this.can_create && this.floating) {\n            // In case the focus out is due to a mousedown, we want to prevent the next click\n            var attachedEvents = ['click', 'mousedown'];\n            var stopNextClick = (function (ev) {\n                ev.stopPropagation();\n                attachedEvents.forEach(function (eventName) {\n                    window.removeEventListener(eventName, stopNextClick, true);\n                });\n            }).bind(this);\n            attachedEvents.forEach(function (eventName) {\n                window.addEventListener(eventName, stopNextClick, true);\n            });\n        }\n        this._super.apply(this, arguments);\n        if (!this.m2oDialogFocused && this.$input.val() === \"\" && this.mustSetValue) {\n            this.reinitialize(false);\n        }\n    },\n    /**\n     * Prevents the triggering of an immediate _onFieldChanged when emptying the field.\n     *\n     * @override\n     * @private\n     */\n    _onInputKeyup: function () {\n        if (this.$input.val() !== \"\") {\n            this._super.apply(this, arguments);\n        } else {\n            this.mustSetValue = true;\n        }\n    },\n});\n\nvar KanbanFieldMany2One = AbstractField.extend({\n    tagName: 'span',\n    init: function () {\n        this._super.apply(this, arguments);\n        this.m2o_value = this._formatValue(this.value);\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     */\n    _render: function () {\n        this.$el.text(this.m2o_value);\n    },\n});\n\n/**\n * Widget Many2OneAvatar is only supported on many2one fields pointing to a\n * model which inherits from 'image.mixin'. In readonly, it displays the\n * record's image next to the display_name. In edit, it behaves exactly like a\n * regular many2one widget.\n */\nconst Many2OneAvatar = FieldMany2One.extend({\n    _template: 'web.Many2OneAvatar',\n\n    init() {\n        this._super.apply(this, arguments);\n        if (this.mode === 'readonly') {\n            this.template = null;\n            this.tagName = 'div';\n            // disable the redirection to the related record on click, in readonly\n            this.noOpen = true;\n        }\n    },\n    start() {\n        this.el.classList.add('o_field_many2one_avatar');\n        return this._super(...arguments);\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Adds avatar image to before many2one value.\n     *\n     * @override\n     */\n    _render() {\n        const m2oAvatar = qweb.render(this._template, {\n            url: `/web/image/${this.field.relation}/${this.value.res_id}/avatar_128`,\n            value: this.m2o_value,\n            widget: this,\n        });\n        if (this.mode === 'edit') {\n            this._super(...arguments);\n            if (this.el.querySelector('.o_m2o_avatar')) {\n                this.el.querySelector('.o_m2o_avatar').remove();\n            }\n            dom.prepend(this.$('.o_field_many2one_selection'), m2oAvatar);\n        }\n        if (this.mode === 'readonly') {\n            this.$el.empty();\n            dom.append(this.$el, m2oAvatar);\n        }\n    },\n});\n\n//------------------------------------------------------------------------------\n// X2Many widgets\n//------------------------------------------------------------------------------\n\nvar FieldX2Many = AbstractField.extend(WidgetAdapterMixin, {\n    tagName: 'div',\n    custom_events: _.extend({}, AbstractField.prototype.custom_events, {\n        add_record: '_onAddRecord',\n        discard_changes: '_onDiscardChanges',\n        edit_line: '_onEditLine',\n        field_changed: '_onFieldChanged',\n        open_record: '_onOpenRecord',\n        kanban_record_delete: '_onRemoveRecord',\n        list_record_remove: '_onRemoveRecord',\n        resequence_records: '_onResequenceRecords',\n        save_line: '_onSaveLine',\n        toggle_column_order: '_onToggleColumnOrder',\n        activate_next_widget: '_onActiveNextWidget',\n        navigation_move: '_onNavigationMove',\n        save_optional_fields: '_onSaveOrLoadOptionalFields',\n        load_optional_fields: '_onSaveOrLoadOptionalFields',\n        pager_changed: '_onPagerChanged',\n    }),\n\n    // We need to trigger the reset on every changes to be aware of the parent changes\n    // and then evaluate the 'column_invisible' modifier in case a evaluated value\n    // changed.\n    resetOnAnyFieldChange: true,\n\n    /**\n     * useSubview is used in form view to load view of the related model of the x2many field\n     */\n    useSubview: true,\n    isQuickEditable: true,\n    quickEditExclusion: [\n        '.o_x2m_control_panel',\n        'thead',\n        '.o_widget',\n    ],\n\n    /**\n     * @override\n     */\n    init: function (parent, name, record, options) {\n        this._super.apply(this, arguments);\n        this.createText = this.attrs['add-label'] || _t('Add');\n        this.operations = [];\n        this.isReadonly = this.mode === 'readonly';\n        this.view = this.attrs.views[this.attrs.mode];\n        this.isMany2Many = this.field.type === 'many2many' || this.attrs.widget === 'many2many';\n        this.activeActions = {};\n        this.recordParams = {fieldName: this.name, viewType: this.viewType};\n        // The limit is fixed so it cannot be changed by adding/removing lines in\n        // the widget. It will only change through a hard reload or when manually\n        // changing the pager (see _onPagerChanged).\n        this.pagingState = {\n            currentMinimum: this.value.offset + 1,\n            limit: this.value.limit,\n            size: this.value.count,\n            validate: () => {\n                // TODO: we should have some common method in the basic renderer...\n                return this.view.arch.tag === 'tree' ?\n                    this.renderer.unselectRow() :\n                    Promise.resolve();\n            },\n            withAccessKey: false,\n        };\n        var arch = this.view && this.view.arch;\n        if (arch) {\n            this.activeActions.create = arch.attrs.create ?\n                                            !!JSON.parse(arch.attrs.create) :\n                                            true;\n            this.activeActions.delete = arch.attrs.delete ?\n                                            !!JSON.parse(arch.attrs.delete) :\n                                            true;\n            this.editable = arch.attrs.editable;\n            this._canQuickEdit = arch.tag === 'tree';\n        } else {\n            this._canQuickEdit = false;\n        }\n        this._computeAvailableActions(record);\n        if (this.attrs.columnInvisibleFields) {\n            this._processColumnInvisibleFields();\n        }\n    },\n    /**\n     * @override\n     */\n    start: async function () {\n        const _super = this._super.bind(this);\n        if (this.view) {\n            this._renderButtons();\n            this._controlPanelWrapper = new ComponentWrapper(this, ControlPanelX2Many, {\n                cp_content: { $buttons: this.$buttons },\n                pager: this.pagingState,\n            });\n            await this._controlPanelWrapper.mount(this.el, { position: 'first-child' });\n        }\n        return _super(...arguments);\n    },\n    destroy: function () {\n        WidgetAdapterMixin.destroy.call(this);\n        this._super();\n    },\n    /**\n     * For the list renderer to properly work, it must know if it is in the DOM,\n     * and be notified when it is attached to the DOM.\n     */\n    on_attach_callback: function () {\n        this.isInDOM = true;\n        WidgetAdapterMixin.on_attach_callback.call(this);\n        if (this.renderer) {\n            this.renderer.on_attach_callback();\n        }\n    },\n    /**\n     * For the list renderer to properly work, it must know if it is in the DOM.\n     */\n    on_detach_callback: function () {\n        this.isInDOM = false;\n        WidgetAdapterMixin.on_detach_callback.call(this);\n        if (this.renderer) {\n            this.renderer.on_detach_callback();\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * A x2m field can only be saved if it finished the edition of all its rows.\n     * On parent view saving, we have to ask the x2m fields to commit their\n     * changes, that is confirming the save of the in-edition row or asking the\n     * user if he wants to discard it if necessary.\n     *\n     * @override\n     * @returns {Promise}\n     */\n    commitChanges: function () {\n        var self = this;\n        var inEditionRecordID =\n            this.renderer &&\n            this.renderer.viewType === \"list\" &&\n            this.renderer.getEditableRecordID();\n        if (inEditionRecordID) {\n            return this.renderer.commitChanges(inEditionRecordID).then(function () {\n                return self._saveLine(inEditionRecordID);\n            });\n        }\n        return this._super.apply(this, arguments);\n    },\n    /**\n     * @override\n     */\n    isSet: function () {\n        return true;\n    },\n    /**\n     * @override\n     * @param {Object} record\n     * @param {OdooEvent} [ev] an event that triggered the reset action\n     * @param {Boolean} [fieldChanged] if true, the widget field has changed\n     * @returns {Promise}\n     */\n    reset: function (record, ev, fieldChanged) {\n        // re-evaluate available actions\n        const oldCanCreate = this.canCreate;\n        const oldCanDelete = this.canDelete;\n        const oldCanLink = this.canLink;\n        const oldCanUnlink = this.canUnlink;\n        this._computeAvailableActions(record);\n        const actionsChanged =\n            this.canCreate !== oldCanCreate ||\n            this.canDelete !== oldCanDelete ||\n            this.canLink !== oldCanLink ||\n            this.canUnlink !== oldCanUnlink;\n\n        // If 'fieldChanged' is false, it means that the reset was triggered by\n        // the 'resetOnAnyFieldChange' mechanism. If it is the case, if neither\n        // the modifiers (so the visible columns) nor the available actions\n        // changed, the reset is skipped.\n        if (!fieldChanged && !actionsChanged) {\n            var newEval = this._evalColumnInvisibleFields();\n            if (_.isEqual(this.currentColInvisibleFields, newEval)) {\n                this._reset(record, ev); // update the internal state, but do not re-render\n                return Promise.resolve();\n            }\n        } else if (ev && ev.target === this && ev.data.changes && this.view.arch.tag === 'tree') {\n            var command = ev.data.changes[this.name];\n            // Here, we only consider 'UPDATE' commands with data, which occur\n            // with editable list view. In order to keep the current line in\n            // edition, we call confirmUpdate which will try to reset the widgets\n            // of the line being edited, and rerender the rest of the list.\n            // 'UPDATE' commands with no data can be ignored: they occur in\n            // one2manys when the record is updated from a dialog and in this\n            // case, we can re-render the whole subview.\n            if (command && command.operation === 'UPDATE' && command.data) {\n                var state = record.data[this.name];\n                var fieldNames = state.getFieldNames({ viewType: 'list' });\n                this._reset(record, ev);\n                return this.renderer.confirmUpdate(state, command.id, fieldNames, ev.initialEvent);\n            }\n        }\n        return this._super.apply(this, arguments);\n    },\n\n    /**\n     * @override\n     * @returns {jQuery}\n     */\n    getFocusableElement: function () {\n       return (this.mode === 'edit' && this.$input) || this.$el;\n    },\n\n    /**\n     * @override\n     * @param {Object|undefined} [options={}]\n     * @param {boolean} [options.noAutomaticCreate=false]\n     */\n    activate: function (options) {\n        if (!this.activeActions.create || this.isReadonly || !this.$el.is(\":visible\")) {\n            return false;\n        }\n        if (this.view.type === 'kanban') {\n            this.$buttons.find(\".o-kanban-button-new\").focus();\n        }\n        if (this.view.arch.tag === 'tree') {\n            if (options && options.noAutomaticCreate) {\n                this.renderer.$('.o_field_x2many_list_row_add a:first').focus();\n            } else {\n                this.renderer.$('.o_field_x2many_list_row_add a:first').click();\n            }\n        }\n        return true;\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {Object} record\n     */\n    _computeAvailableActions: function (record) {\n        const evalContext = record.evalContext;\n        this.canCreate = 'create' in this.nodeOptions ?\n            new Domain(this.nodeOptions.create, evalContext).compute(evalContext) :\n            true;\n        this.canDelete = 'delete' in this.nodeOptions ?\n            new Domain(this.nodeOptions.delete, evalContext).compute(evalContext) :\n            true;\n        this.canLink = 'link' in this.nodeOptions ?\n            new Domain(this.nodeOptions.link, evalContext).compute(evalContext) :\n            true;\n        this.canUnlink = 'unlink' in this.nodeOptions ?\n            new Domain(this.nodeOptions.unlink, evalContext).compute(evalContext) :\n            true;\n    },\n    /**\n     * @private\n     * @override\n     * @param {Object} extraInfo\n     * @param {string} [extraInfo.type]\n     * @param {string} [extraInfo.row]\n     * @param {string} [extraInfo.subFieldName]\n     * @param {number} [extraInfo.recordId]\n     */\n    _quickEdit: function (extraInfo) {\n        if (extraInfo.type === 'remove') {\n            this._removeRecord(extraInfo.recordId);\n        } else if (extraInfo.type === 'edit') {\n            const parts = [];\n            if (extraInfo.row) {\n                parts.push(`.o_data_row[data-id=\"${extraInfo.row}\"]`);\n            }\n            if (extraInfo.subFieldName) {\n                parts.push(`[name=\"${extraInfo.subFieldName}\"]`);\n            }\n    \n            if (parts.length) {\n                const el = this.el.querySelector(parts.join(' '));\n                if (el) {\n                    el.click();\n                }\n            }\n        }\n    },\n    /**\n     * Evaluates the 'column_invisible' modifier for the parent record.\n     *\n     * @return {Object} Object containing fieldName as key and the evaluated\n     *                         column_invisible modifier\n     */\n    _evalColumnInvisibleFields: function () {\n        var self = this;\n        return _.mapObject(this.columnInvisibleFields, function (domains) {\n            return self.record.evalModifiers({\n                column_invisible: domains,\n             }).column_invisible;\n        });\n    },\n    /**\n     * Returns qweb context to render buttons.\n     *\n     * @private\n     * @returns {Object}\n     */\n    _getButtonsRenderingContext() {\n        return {\n            btnClass: 'btn-secondary',\n            create_text: this.createText,\n        };\n    },\n    /**\n     * @private\n     * @override\n     * @param {MouseEvent} ev\n     * @returns {Object}\n     */\n    _getQuickEditExtraInfo: function (ev) {\n        const row = ev.target.closest('.o_data_row');\n        const field = ev.target.closest('.o_data_row .o_field_widget') ||\n            ev.target.closest('.o_field_cell');\n\n        return {\n            type: 'edit',\n            row: row && row.dataset.id,\n            subFieldName: row && field && field.getAttribute('name'),\n        };\n    },\n    /**\n     * Computes the default renderer to use depending on the view type.\n     * We create this as a method so we can override it if we want to use\n     * another renderer instead (eg. section_and_note_one2many).\n     *\n     * @private\n     * @returns {Object} The renderer to use\n     */\n    _getRenderer: function () {\n        if (this.view.arch.tag === 'tree') {\n            return ListRenderer;\n        }\n        if (this.view.arch.tag === 'kanban') {\n            return KanbanRenderer;\n        }\n    },\n    /**\n     * @private\n     * @returns {boolean} true iff the list should contain a 'create' line.\n     */\n    _hasCreateLine: function () {\n        return !this.hasReadonlyModifier && (\n            (!this.isMany2Many && this.activeActions.create && this.canCreate) ||\n            (this.isMany2Many && this.canLink)\n        );\n    },\n    /**\n     * @private\n     * @returns {boolean} true iff the list should add a trash icon on each row.\n     */\n    _hasTrashIcon: function () {\n        return !this.hasReadonlyModifier && (\n            (!this.isMany2Many && this.activeActions.delete && this.canDelete) ||\n            (this.isMany2Many && this.canUnlink)\n        );\n    },\n    /**\n     * Removes the given record from the relation.\n     *\n     * @private\n     * @param {number} recordId\n     */\n    _removeRecord: function (recordId) {\n        this._setValue({\n            operation: this.isMany2Many ? 'FORGET' : 'DELETE',\n            ids: [recordId],\n        });\n    },\n    /**\n     * Instanciates or updates the adequate renderer.\n     *\n     * @override\n     * @private\n     * @returns {Promise|undefined}\n     */\n    _render: function () {\n        var self = this;\n        if (!this.view) {\n            return this._super();\n        }\n\n        if (this.renderer) {\n            this.currentColInvisibleFields = this._evalColumnInvisibleFields();\n            return this.renderer.updateState(this.value, {\n                addCreateLine: this._hasCreateLine(),\n                addTrashIcon: this._hasTrashIcon(),\n                columnInvisibleFields: this.currentColInvisibleFields,\n                keepWidths: true,\n            }).then(() => {\n                return this._updateControlPanel({ size: this.value.count });\n            });\n        }\n        var arch = this.view.arch;\n        var viewType;\n        var rendererParams = {\n            arch: arch,\n        };\n\n        if (arch.tag === 'tree') {\n            viewType = 'list';\n            this.currentColInvisibleFields = this._evalColumnInvisibleFields();\n            _.extend(rendererParams, {\n                editable: this.mode === 'edit' && arch.attrs.editable,\n                addCreateLine: this._hasCreateLine(),\n                addTrashIcon: this._hasTrashIcon(),\n                isMany2Many: this.isMany2Many,\n                no_open: ((this.isReadonly && !this.hasReadonlyModifier) &&\n                    this._canQuickEdit) || toBoolElse(arch.attrs.no_open || '', false),\n                columnInvisibleFields: this.currentColInvisibleFields,\n            });\n        }\n\n        if (arch.tag === 'kanban') {\n            viewType = 'kanban';\n            var record_options = {\n                editable: false,\n                deletable: false,\n                read_only_mode: this.isReadonly,\n            };\n            _.extend(rendererParams, {\n                record_options: record_options,\n                readOnlyMode: this.isReadonly,\n            });\n        }\n\n        _.extend(rendererParams, {\n            viewType: viewType,\n        });\n        var Renderer = this._getRenderer();\n        this.renderer = new Renderer(this, this.value, rendererParams);\n\n        this.$el.addClass('o_field_x2many o_field_x2many_' + viewType);\n        if (this.renderer) {\n            return this.renderer.appendTo(document.createDocumentFragment()).then(function () {\n                dom.append(self.$el, self.renderer.$el, {\n                    in_DOM: self.isInDOM,\n                    callbacks: [{widget: self.renderer}],\n                });\n            });\n        } else {\n            return this._super();\n        }\n    },\n    /**\n     * Renders the buttons and sets this.$buttons.\n     *\n     * @private\n     */\n    _renderButtons: function () {\n        if (!this.isReadonly && this.view.arch.tag === 'kanban') {\n            const renderingContext = this._getButtonsRenderingContext();\n            this.$buttons = $(qweb.render('KanbanView.buttons', renderingContext));\n            this.$buttons.on('click', 'button.o-kanban-button-new', this._onAddRecord.bind(this));\n        }\n    },\n    /**\n     * Saves the line associated to the given recordID. If the line is valid,\n     * it only has to be switched to readonly mode as all the line changes have\n     * already been notified to the model so that they can be saved in db if the\n     * parent view is actually saved. If the line is not valid, the line is to\n     * be discarded if the user agrees (this behavior is not a list editable\n     * one but a x2m one as it is made to replace the \"discard\" button which\n     * exists for list editable views).\n     *\n     * @private\n     * @param {string} recordID\n     * @returns {Promise} resolved if the line was properly saved or discarded.\n     *                     rejected if the line could not be saved and the user\n     *                     did not agree to discard.\n     */\n    _saveLine: function (recordID) {\n        var self = this;\n        return new Promise(function (resolve, reject) {\n            var fieldNames = self.renderer.canBeSaved(recordID);\n            if (fieldNames.length) {\n                self.trigger_up('discard_changes', {\n                    recordID: recordID,\n                    onSuccess: resolve,\n                    onFailure: reject,\n                });\n            } else {\n                self.renderer.setRowMode(recordID, 'readonly').then(resolve);\n            }\n        }).then(async function () {\n            self._updateControlPanel({ size: self.value.count });\n            var newEval = self._evalColumnInvisibleFields();\n            if (!_.isEqual(self.currentColInvisibleFields, newEval)) {\n                self.currentColInvisibleFields = newEval;\n                self.renderer.updateState(self.value, {\n                    columnInvisibleFields: self.currentColInvisibleFields,\n                });\n            }\n        });\n    },\n    /**\n     * Re-renders buttons and updates the control panel. This method is called\n     * when the widget is reset, as the available buttons might have changed.\n     * The only mutable element in X2Many fields will be the pager.\n     *\n     * @private\n     */\n    _updateControlPanel: function (pagingState) {\n        if (this._controlPanelWrapper) {\n            this._renderButtons();\n            const pagerProps = Object.assign(this.pagingState, pagingState, {\n                // sometimes, we temporarily want to increase the pager limit\n                // (for instance, when we add a new record on a page that already\n                // contains the maximum number of records)\n                limit: Math.max(this.value.limit, this.value.data.length),\n            });\n            const newProps = {\n                cp_content: { $buttons: this.$buttons },\n                pager: pagerProps,\n            };\n            return this._controlPanelWrapper.update(newProps);\n        }\n    },\n    /**\n     * Parses the 'columnInvisibleFields' attribute to search for the domains\n     * containing the key 'parent'. If there are such domains, the string\n     * 'parent.field' is replaced with 'field' in order to be evaluated\n     * with the right field name in the parent context.\n     *\n     * @private\n     */\n    _processColumnInvisibleFields: function () {\n        var columnInvisibleFields = {};\n        _.each(this.attrs.columnInvisibleFields, function (domains, fieldName) {\n            if (_.isArray(domains)) {\n                columnInvisibleFields[fieldName] = _.map(domains, function (domain) {\n                    // We check if the domain is an array to avoid processing\n                    // the '|' and '&' cases\n                    if (_.isArray(domain)) {\n                        return [domain[0].split('.')[1]].concat(domain.slice(1));\n                    }\n                    return domain;\n                });\n            }\n        });\n        this.columnInvisibleFields = columnInvisibleFields;\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Called when the user clicks on the 'Add a line' link (list case) or the\n     * 'Add' button (kanban case).\n     *\n     * @abstract\n     * @private\n     */\n    _onAddRecord: function () {\n        // to implement\n    },\n    /**\n     * Removes the given record from the relation.\n     * Stops the propagation of the event to prevent it from being handled again\n     * by the parent controller.\n     *\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onRemoveRecord: function (ev) {\n        ev.stopPropagation();\n        if (this._canQuickEdit && this.isReadonly) {\n            this.trigger_up('quick_edit', {\n                fieldName: this.name,\n                target: this.el,\n                extraInfo: {\n                    type: 'remove',\n                    recordId: ev.data.id,\n                },\n            });\n        } else {\n            this._removeRecord(ev.data.id);\n        }\n    },\n    /**\n     * When the discard_change event go through this field, we can just decorate\n     * the data with the name of the field.  The origin field ignore this\n     * information (it is a subfield in a o2m), and the controller will need to\n     * know which field needs to be handled.\n     *\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onDiscardChanges: function (ev) {\n        if (ev.target !== this) {\n            ev.stopPropagation();\n            this.trigger_up('discard_changes', _.extend({}, ev.data, {fieldName: this.name}));\n        }\n    },\n    /**\n     * Called when the renderer asks to edit a line, in that case simply tells\n     * him back to toggle the mode of this row.\n     *\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onEditLine: function (ev) {\n        ev.stopPropagation();\n        this.trigger_up('edited_list', { id: this.value.id });\n        this.renderer.setRowMode(ev.data.recordId, 'edit')\n            .then(ev.data.onSuccess);\n    },\n    /**\n     * Updates the given record with the changes.\n     *\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onFieldChanged: function (ev) {\n        if (ev.target === this) {\n            ev.initialEvent = this.lastInitialEvent;\n            return;\n        }\n        ev.stopPropagation();\n        // changes occured in an editable list\n        var changes = ev.data.changes;\n        // save the initial event triggering the field_changed, as it will be\n        // necessary when the field triggering this event will be reset (to\n        // prevent it from re-rendering itself, formatting its value, loosing\n        // the focus... while still being edited)\n        this.lastInitialEvent = undefined;\n        if (Object.keys(changes).length) {\n            this.lastInitialEvent = ev;\n            this._setValue({\n                operation: 'UPDATE',\n                id: ev.data.dataPointID,\n                data: changes,\n            }).then(function () {\n                if (ev.data.onSuccess) {\n                    ev.data.onSuccess();\n                }\n            }).guardedCatch(function (reason) {\n                if (ev.data.onFailure) {\n                    ev.data.onFailure(reason);\n                }\n            });\n        }\n    },\n    /**\n     * Override to handle the navigation inside editable list controls\n     *\n     * @override\n     * @private\n     */\n    _onNavigationMove: function (ev) {\n        if (this.view.arch.tag === 'tree') {\n            var $curControl = this.renderer.$('.o_field_x2many_list_row_add a:focus');\n            if ($curControl.length) {\n                var $nextControl;\n                if (ev.data.direction === 'right') {\n                    $nextControl = $curControl.next('a');\n                } else if (ev.data.direction === 'left') {\n                    $nextControl = $curControl.prev('a');\n                }\n                if ($nextControl && $nextControl.length) {\n                    ev.stopPropagation();\n                    $nextControl.focus();\n                    return;\n                }\n            }\n        }\n        this._super.apply(this, arguments);\n    },\n    /**\n     * Called when the user clicks on a relational record.\n     *\n     * @abstract\n     * @private\n     */\n    _onOpenRecord: function () {\n        // to implement\n    },\n    /**\n     * We re-render the pager immediately with the new event values to allow\n     * it to request another pager change while another one is still ongoing.\n     * @see field_manager_mixin for concurrency handling.\n     *\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onPagerChanged: function (ev) {\n        ev.stopPropagation();\n        const { currentMinimum, limit } = ev.data;\n        this._updateControlPanel({ currentMinimum, limit });\n        this.trigger_up('load', {\n            id: this.value.id,\n            limit,\n            offset: currentMinimum - 1,\n            on_success: value => {\n                this.value = value;\n                this.pagingState.limit = value.limit;\n                this.pagingState.size = value.count;\n                this._render();\n            },\n        });\n    },\n    /**\n     * Called when the renderer ask to save a line (the user tries to leave it)\n     * -> Nothing is to \"save\" here, the model was already notified of the line\n     * changes; if the row could be saved, we make the row readonly. Otherwise,\n     * we trigger a new event for the view to tell it to discard the changes\n     * made to that row.\n     * Note that we do that in the controller mutex to ensure that the check on\n     * the row (whether or not it can be saved) is done once all potential\n     * onchange RPCs are done (those RPCs being executed in the same mutex).\n     * This particular handling is done in this handler, instead of in the\n     * _saveLine function directly, because _saveLine is also called from\n     * the controller (via commitChanges), and in this case, it is already\n     * executed in the mutex.\n     *\n     * @private\n     * @param {OdooEvent} ev\n     * @param {string} ev.recordID\n     * @param {function} ev.onSuccess success callback (see '_saveLine')\n     * @param {function} ev.onFailure fail callback (see '_saveLine')\n     */\n    _onSaveLine: function (ev) {\n        var self = this;\n        ev.stopPropagation();\n        this.renderer.commitChanges(ev.data.recordID).then(function () {\n            self.trigger_up('mutexify', {\n                action: function () {\n                    return self._saveLine(ev.data.recordID)\n                        .then(ev.data.onSuccess)\n                        .guardedCatch(ev.data.onFailure);\n                },\n            });\n        });\n    },\n    /**\n     * Add necessary key parts for the basic controller to compute the local\n     * storage key. The event will be properly handled by the basic controller.\n     *\n     * @param {OdooEvent} ev\n     * @private\n     */\n    _onSaveOrLoadOptionalFields: function (ev) {\n        ev.data.keyParts.relationalField = this.name;\n        ev.data.keyParts.subViewId = this.view.view_id;\n        ev.data.keyParts.subViewType = this.view.type;\n    },\n    /**\n     * Forces a resequencing of the records.\n     *\n     * @private\n     * @param {OdooEvent} ev\n     * @param {string[]} ev.data.recordIds\n     * @param {integer} ev.data.offset\n     * @param {string} ev.data.handleField\n     */\n    _onResequenceRecords: function (ev) {\n        ev.stopPropagation();\n        var self = this;\n        if (this.view.arch.tag === 'tree') {\n            this.trigger_up('edited_list', { id: this.value.id });\n        }\n        var handleField = ev.data.handleField;\n        var offset = ev.data.offset;\n        var recordIds = ev.data.recordIds.slice();\n        // trigger an update of all records but the last one with option\n        // 'notifyChanges' set to false, and once all those changes have been\n        // validated by the model, trigger the change on the last record\n        // (without the option, s.t. the potential onchange on parent record\n        // is triggered)\n        var recordId = recordIds.pop();\n        var proms = recordIds.map(function (recordId, index) {\n            var data = {};\n            data[handleField] = offset + index;\n            return self._setValue({\n                operation: 'UPDATE',\n                id: recordId,\n                data: data,\n            }, {\n                notifyChange: false,\n            });\n        });\n        Promise.all(proms).then(function () {\n            function always() {\n                if (self.view.arch.tag === 'tree') {\n                    self.trigger_up('toggle_column_order', {\n                        id: self.value.id,\n                        name: handleField,\n                    });\n                }\n            }\n            var data = {};\n            data[handleField] = offset + recordIds.length;\n            self._setValue({\n                operation: 'UPDATE',\n                id: recordId,\n                data: data,\n            }).then(always).guardedCatch(always);\n        });\n    },\n    /**\n     * Adds field name information to the event, so that the view upstream is\n     * aware of which widgets it has to redraw.\n     *\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onToggleColumnOrder: function (ev) {\n        ev.data.field = this.name;\n    },\n    /*\n    * Move to next widget.\n    *\n    * @private\n    */\n    _onActiveNextWidget: function (e) {\n        e.stopPropagation();\n        this.renderer.unselectRow();\n        this.trigger_up('navigation_move', {\n            direction: e.data.direction || 'next',\n        });\n    },\n});\n\nvar One2ManyKanbanRecord = KanbanRecord.extend({\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Apply same logic as in the ListRenderer: buttons with type=\"object\"\n     * are disabled for no saved yet records, as calling the python method\n     * with no id would make no sense.\n     *\n     * To avoid to expose this logic inside all Kanban views, we define\n     * a specific KanbanRecord Class for the One2many case.\n     *\n     * This could be refactored to prevent from duplicating this logic in\n     * list and kanban views.\n     *\n     * @private\n     */\n    _postProcessObjectButtons: function () {\n        var self = this;\n        // if the res_id is defined, it's already correctly handled by the Kanban record global event click\n        if (!this.state.res_id) {\n            this.$('.oe_kanban_action[data-type=object]').each(function (index, button) {\n                var $button = $(button);\n                if ($button.attr('warn')) {\n                    $button.on('click', function (e) {\n                        e.stopPropagation();\n                        self.displayNotification({ message: _t('Please click on the \"save\" button first'), type: 'danger' });\n                    });\n                } else {\n                    $button.attr('disabled', 'disabled');\n                }\n            });\n        }\n    },\n    /**\n     * @override\n     * @private\n     */\n    _render: function () {\n        var self = this;\n        return this._super.apply(this, arguments).then(function () {\n            self._postProcessObjectButtons();\n        });\n    },\n});\n\nvar One2ManyKanbanRenderer = KanbanRenderer.extend({\n    config: _.extend({}, KanbanRenderer.prototype.config, {\n        KanbanRecord: One2ManyKanbanRecord,\n    }),\n});\n\nvar FieldOne2Many = FieldX2Many.extend({\n    description: _lt(\"One2many\"),\n    className: 'o_field_one2many',\n    supportedFieldTypes: ['one2many'],\n\n    /**\n     * @override\n     */\n    init: function () {\n        this._super.apply(this, arguments);\n\n        // boolean used to prevent concurrent record creation\n        this.creatingRecord = false;\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     * @param {Object} record\n     * @param {OdooEvent} [ev] an event that triggered the reset action\n     * @returns {Promise}\n     */\n    reset: function (record, ev) {\n        var self = this;\n        return this._super.apply(this, arguments).then(() => {\n            if (ev && ev.target === self && ev.data.changes && self.view.arch.tag === 'tree') {\n                if (ev.data.changes[self.name] && ev.data.changes[self.name].operation === 'CREATE') {\n                    var index = 0;\n                    if (self.editable !== 'top') {\n                        index = self.value.data.length - 1;\n                    }\n                    var newID = self.value.data[index].id;\n                    return self.renderer.editRecord(newID);\n                }\n            }\n        });\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {*} data \n     */\n    _addCreateRecordRow(data) {\n        const self = this;\n        if (this.editable || data.forceEditable) {\n            if (!this.activeActions.create) {\n                if (data.onFail) {\n                    data.onFail();\n                }\n            } else if (!this.creatingRecord) {\n                this.creatingRecord = true;\n                this.trigger_up('edited_list', { id: this.value.id });\n                this._setValue({\n                    operation: 'CREATE',\n                    position: this.editable || data.forceEditable,\n                    context: data.context,\n                    isDirty: data.isDirty,\n                }, {\n                    allowWarning: data.allowWarning\n                }).then(function () {\n                    self.creatingRecord = false;\n                }).then(function (){\n                    if (data.onSuccess){\n                        data.onSuccess();\n                    }\n                }).guardedCatch(function() {\n                    self.creatingRecord = false;\n                });\n            }\n        } else {\n            this._openFormDialog({\n                context: data.context && data.context[0],\n                disable_multiple_selection: data.disable_multiple_selection,\n                on_saved: function (record) {\n                    self._setValue({ operation: 'ADD', id: record.id });\n                },\n            });\n        }\n    },\n    /**\n     * @private\n     * @override\n     * @param {Object} extraInfo\n     * @param {string} [extraInfo.type]\n     * @param {Object} [extraInfo.data]\n     */\n    _quickEdit: function (extraInfo) {\n        if (extraInfo.type === 'add') {\n            this._addCreateRecordRow(extraInfo.data);\n        } else {\n            this._super(...arguments);\n        }\n    },\n    /**\n     * @override\n     * @private\n     */\n    _getButtonsRenderingContext() {\n        const renderingContext = this._super(...arguments);\n        renderingContext.noCreate = !this.canCreate;\n        return renderingContext;\n    },\n    /**\n      * @override\n      * @private\n      */\n    _getRenderer: function () {\n        if (this.view.arch.tag === 'kanban') {\n            return One2ManyKanbanRenderer;\n        }\n        return this._super.apply(this, arguments);\n    },\n    /**\n     * Overrides to only render the buttons if the 'create' action is available.\n     *\n     * @override\n     * @private\n     */\n    _renderButtons: function () {\n        if (this.activeActions.create) {\n            return this._super(...arguments);\n        }\n    },\n    /**\n     * Trigger the event to open a dialog containing the corresponding Form view for the current record.\n     * If the options 'no_open' is specified, the dialog will not be opened.\n     *\n     * @private\n     * @param {Object} params\n     * @param {Object} [params.context] We allow additional context, this is\n     *   used for example to define default values when adding new lines to\n     *   a one2many with control/create tags.\n     */\n    _openFormDialog: function (params) {\n        var context = this.record.getContext(_.extend({},\n            this.recordParams,\n            { additionalContext: params.context }\n        ));\n\n        if (this.nodeOptions.no_open) {\n            return;\n        }\n\n        this.trigger_up('open_one2many_record', _.extend(params, {\n            domain: this.record.getDomain(this.recordParams),\n            context: context,\n            field: this.field,\n            fields_view: this.attrs.views && this.attrs.views.form,\n            parentID: this.value.id,\n            viewInfo: this.view,\n            deletable: this.activeActions.delete && params.deletable && this.canDelete,\n            editable: !this.hasReadonlyModifier,\n            disable_multiple_selection: params.disable_multiple_selection,\n        }));\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Opens a FormViewDialog to allow creating a new record for a one2many.\n     *\n     * @override\n     * @private\n     * @param {OdooEvent|MouseEvent} ev this event comes either from the 'Add\n     *   record' link in the list editable renderer, or from the 'Create' button\n     *   in the kanban view\n     * @param {Array} ev.data.context additional context for the added records,\n     *   if several contexts are provided, multiple records will be added\n     *   (form dialog will only use the context at index 0 if provided)\n     * @param {boolean} ev.data.forceEditable this is used to bypass the dialog opening\n     *   in case you want to add record(s) to a list\n     * @param {function} ev.data.onSuccess called when the records are correctly created\n     *   (not supported by form dialog)\n     * @param {boolean} ev.data.allowWarning defines if the records can be added\n     *   to the list even if warnings are triggered (e.g: stock warning for product availability)\n     */\n    _onAddRecord: function (ev) {\n        const data = ev.data || {};\n\n        // we don't want interference with the components upstream.\n        ev.stopPropagation();\n\n        if (this._canQuickEdit && this.isReadonly) {\n            this.trigger_up('quick_edit', {\n                fieldName: this.name,\n                target: this.el,\n                extraInfo: { type: 'add', data },\n            });\n        } else {\n            this._addCreateRecordRow(data);\n        }\n    },\n    /**\n     * Overrides the handler to set a specific 'on_save' callback as the o2m\n     * sub-records aren't saved directly when the user clicks on 'Save' in the\n     * dialog. Instead, the relational record is changed in the local data, and\n     * this change is saved in DB when the user clicks on 'Save' in the main\n     * form view.\n     *\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onOpenRecord: function (ev) {\n        // we don't want interference with the components upstream.\n        var self = this;\n        ev.stopPropagation();\n\n        var id = ev.data.id;\n        var onSaved = function (record) {\n            if (_.some(self.value.data, {id: record.id})) {\n                // the record already exists in the relation, so trigger an\n                // empty 'UPDATE' operation when the user clicks on 'Save' in\n                // the dialog, to notify the main record that a subrecord of\n                // this relational field has changed (those changes will be\n                // already stored on that subrecord, thanks to the 'Save').\n                self._setValue({ operation: 'UPDATE', id: record.id });\n            } else {\n                // the record isn't in the relation yet, so add it ; this can\n                // happen if the user clicks on 'Save & New' in the dialog (the\n                // opened record will be updated, and other records will be\n                // created)\n                self._setValue({ operation: 'ADD', id: record.id });\n            }\n        };\n        this._openFormDialog({\n            id: id,\n            on_saved: onSaved,\n            on_remove: function () {\n                self._setValue({operation: 'DELETE', ids: [id]});\n            },\n            deletable: this.activeActions.delete && this.view.arch.tag !== 'tree' && this.canDelete,\n            readonly: this.mode === 'readonly',\n        });\n    },\n});\n\nvar FieldMany2Many = FieldX2Many.extend({\n    description: _lt(\"Many2many\"),\n    className: 'o_field_many2many',\n    supportedFieldTypes: ['many2many'],\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n    /**\n     * Opens a SelectCreateDialog\n     */\n    onAddRecordOpenDialog: function () {\n        var self = this;\n        var domain = this.record.getDomain({fieldName: this.name});\n\n        new dialogs.SelectCreateDialog(this, {\n            res_model: this.field.relation,\n            domain: domain.concat([\"!\", [\"id\", \"in\", this.value.res_ids]]),\n            context: this.record.getContext(this.recordParams),\n            title: _t(\"Add: \") + this.string,\n            no_create: this.nodeOptions.no_create || !this.activeActions.create || !this.canCreate,\n            fields_view: this.attrs.views.form,\n            kanban_view_ref: this.attrs.kanban_view_ref,\n            on_selected: function (records) {\n                var resIDs = _.pluck(records, 'id');\n                var newIDs = _.difference(resIDs, self.value.res_ids);\n                if (newIDs.length) {\n                    var values = _.map(newIDs, function (id) {\n                        return {id: id};\n                    });\n                    self._setValue({\n                        operation: 'ADD_M2M',\n                        ids: values,\n                    });\n                }\n            }\n        }).open();\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     * @private\n     */\n    _getButtonsRenderingContext() {\n        const renderingContext = this._super(...arguments);\n        renderingContext.noCreate = !this.canLink;\n        return renderingContext;\n    },\n    /**\n     * @private\n     * @override\n     * @param {Object} extraInfo\n     * @param {string} [extraInfo.type]\n     */\n    _quickEdit: function (extraInfo) {\n        if (extraInfo.type === 'add') {\n            this.onAddRecordOpenDialog();\n        } else {\n            this._super(...arguments);\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Opens a SelectCreateDialog.\n     *\n     * @override\n     * @private\n     * @param {OdooEvent|MouseEvent} ev this event comes either from the 'Add\n     *   record' link in the list editable renderer, or from the 'Create' button\n     *   in the kanban view\n     */\n    _onAddRecord: function (ev) {\n        ev.stopPropagation();\n\n        if (this._canQuickEdit && this.isReadonly) {\n            this.trigger_up('quick_edit', {\n                fieldName: this.name,\n                target: this.el,\n                extraInfo: { type: 'add' },\n            });\n        } else {\n            this.onAddRecordOpenDialog();\n        }\n    },\n\n    /**\n     * Intercepts the 'open_record' event to edit its data and lets it bubble up\n     * to the form view.\n     *\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onOpenRecord: function (ev) {\n        var self = this;\n        _.extend(ev.data, {\n            context: this.record.getContext(this.recordParams),\n            domain: this.record.getDomain(this.recordParams),\n            fields_view: this.attrs.views && this.attrs.views.form,\n            on_saved: function () {\n                self._setValue({operation: 'TRIGGER_ONCHANGE'}, {forceChange: true})\n                    .then(function () {\n                        self.trigger_up('reload', {db_id: ev.data.id});\n                    });\n            },\n            on_remove: function () {\n                self._setValue({operation: 'FORGET', ids: [ev.data.id]});\n            },\n            readonly: this.mode === 'readonly',\n            deletable: this.activeActions.delete && this.view.arch.tag !== 'tree' && this.canDelete,\n            string: this.string,\n        });\n    },\n});\n\n/**\n * Widget to upload or delete one or more files at the same time.\n */\nvar FieldMany2ManyBinaryMultiFiles = AbstractField.extend({\n    template: \"FieldBinaryFileUploader\",\n    template_files: \"FieldBinaryFileUploader.files\",\n    supportedFieldTypes: ['many2many'],\n    fieldsToFetch: {\n        name: {type: 'char'},\n        mimetype: {type: 'char'},\n    },\n    events: {\n        'click .o_attach': '_onAttach',\n        'click .o_attachment_delete': '_onDelete',\n        'change .o_input_file': '_onFileChanged',\n    },\n    /**\n     * @constructor\n     */\n    init: function () {\n        this._super.apply(this, arguments);\n\n        if (this.field.type !== 'many2many' || this.field.relation !== 'ir.attachment') {\n            var msg = _t(\"The type of the field '%s' must be a many2many field with a relation to 'ir.attachment' model.\");\n            throw _.str.sprintf(msg, this.field.string);\n        }\n\n        this.uploadedFiles = {};\n        this.uploadingFiles = [];\n        this.fileupload_id = _.uniqueId('oe_fileupload_temp');\n        this.accepted_file_extensions = (this.nodeOptions && this.nodeOptions.accepted_file_extensions) || this.accepted_file_extensions || '*';\n        $(window).on(this.fileupload_id, this._onFileLoaded.bind(this));\n\n        this.metadata = {};\n    },\n\n    destroy: function () {\n        this._super();\n        $(window).off(this.fileupload_id);\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Compute the URL of an attachment.\n     *\n     * @private\n     * @param {Object} attachment\n     * @returns {string} URL of the attachment\n     */\n    _getFileUrl: function (attachment) {\n        return '/web/content/' + attachment.id + '?download=true';\n    },\n    /**\n     * Process the field data to add some information (url, etc.).\n     *\n     * @private\n     */\n    _generatedMetadata: function () {\n        var self = this;\n        _.each(this.value.data, function (record) {\n            // tagging `allowUnlink` ascertains if the attachment was user\n            // uploaded or was an existing or system generated attachment\n            self.metadata[record.id] = {\n                allowUnlink: self.uploadedFiles[record.data.id] || false,\n                url: self._getFileUrl(record.data),\n            };\n        });\n    },\n    /**\n     * @private\n     * @override\n     */\n    _render: function () {\n        // render the attachments ; as the attachments will changes after each\n        // _setValue, we put the rendering here to ensure they will be updated\n        this._generatedMetadata();\n        this.$('.oe_placeholder_files, .o_attachments')\n            .replaceWith($(qweb.render(this.template_files, {\n                widget: this,\n            })));\n        this.$('.oe_fileupload').show();\n\n        // display image thumbnail\n        this.$('.o_image[data-mimetype^=\"image\"]').each(function () {\n            var $img = $(this);\n            if (/gif|jpe|jpg|png/.test($img.data('mimetype')) && $img.data('src')) {\n                $img.css('background-image', \"url('\" + $img.data('src') + \"')\");\n            }\n        });\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     */\n    _onAttach: function () {\n        // This widget uses a hidden form to upload files. Clicking on 'Attach'\n        // will simulate a click on the related input.\n        this.$('.o_input_file').click();\n    },\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onDelete: function (ev) {\n        ev.preventDefault();\n        ev.stopPropagation();\n\n        var fileID = $(ev.currentTarget).data('id');\n        var record = _.findWhere(this.value.data, {res_id: fileID});\n        if (record) {\n            this._setValue({\n                operation: 'FORGET',\n                ids: [record.id],\n            });\n            var metadata = this.metadata[record.id];\n            if (!metadata || metadata.allowUnlink) {\n                this._rpc({\n                    model: 'ir.attachment',\n                    method: 'unlink',\n                    args: [record.res_id],\n                });\n            }\n        }\n    },\n    /**\n     * @private\n     * @param {Event} ev\n     */\n    _onFileChanged: function (ev) {\n        var self = this;\n        ev.stopPropagation();\n\n        var files = ev.target.files;\n        var attachment_ids = this.value.res_ids;\n\n        // Don't create an attachment if the upload window is cancelled.\n        if(files.length === 0)\n            return;\n\n        _.each(files, function (file) {\n            var record = _.find(self.value.data, function (attachment) {\n                return attachment.data.name === file.name;\n            });\n            if (record) {\n                var metadata = self.metadata[record.id];\n                if (!metadata || metadata.allowUnlink) {\n                    // there is a existing attachment with the same name so we\n                    // replace it\n                    attachment_ids = _.without(attachment_ids, record.res_id);\n                    self._rpc({\n                        model: 'ir.attachment',\n                        method: 'unlink',\n                        args: [record.res_id],\n                    });\n                }\n            }\n            self.uploadingFiles.push(file);\n        });\n\n        this._setValue({\n            operation: 'REPLACE_WITH',\n            ids: attachment_ids,\n        });\n\n        this.$('form.o_form_binary_form').submit();\n        this.$('.oe_fileupload').hide();\n        ev.target.value = \"\";\n    },\n    /**\n     * @private\n     */\n    _onFileLoaded: function () {\n        var self = this;\n        // the first argument isn't a file but the jQuery.Event\n        var files = Array.prototype.slice.call(arguments, 1);\n        // files has been uploaded, clear uploading\n        this.uploadingFiles = [];\n\n        var attachment_ids = this.value.res_ids;\n        _.each(files, function (file) {\n            if (file.error) {\n                self.displayNotification({ title: _t('Uploading Error'), message: file.error, type: 'danger' });\n            } else {\n                attachment_ids.push(file.id);\n                self.uploadedFiles[file.id] = true;\n            }\n        });\n\n        this._setValue({\n            operation: 'REPLACE_WITH',\n            ids: attachment_ids,\n        });\n    },\n});\n\nvar FieldMany2ManyTags = AbstractField.extend({\n    description: _lt(\"Tags\"),\n    tag_template: \"FieldMany2ManyTag\",\n    className: \"o_field_many2manytags\",\n    supportedFieldTypes: ['many2many'],\n    custom_events: _.extend({}, AbstractField.prototype.custom_events, {\n        field_changed: '_onFieldChanged',\n    }),\n    events: _.extend({}, AbstractField.prototype.events, {\n        'click .o_delete': '_onDeleteTag',\n    }),\n    fieldsToFetch: {\n        display_name: {type: 'char'},\n    },\n    limit: 1000,\n\n    /**\n     * @constructor\n     */\n    init: function () {\n        this._super.apply(this, arguments);\n\n        if (this.mode === 'edit') {\n            this.className += ' o_input';\n        }\n\n        this.colorField = this.nodeOptions.color_field;\n        this.hasDropdown = false;\n\n        this._computeAvailableActions(this.record);\n        // have listen to react to other fields changes to re-evaluate 'create' option\n        this.resetOnAnyFieldChange = this.resetOnAnyFieldChange || 'create' in this.nodeOptions;\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     */\n    activate: function () {\n        return this.many2one ? this.many2one.activate() : false;\n    },\n    /**\n     * @override\n     * @returns {jQuery}\n     */\n    getFocusableElement: function () {\n        return this.many2one ? this.many2one.getFocusableElement() : $();\n    },\n    /**\n     * @override\n     * @returns {boolean}\n     */\n    isSet: function () {\n        return !!this.value && this.value.count;\n    },\n    /**\n     * Reset the focus on this field if it was the origin of the onchange call.\n     *\n     * @override\n     */\n    reset: function (record, event) {\n        var self = this;\n        this._computeAvailableActions(record);\n        return this._super.apply(this, arguments).then(function () {\n            if (event && event.target === self) {\n                self.activate();\n            }\n        });\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {any} data\n     * @returns {Promise}\n     */\n    _addTag: function (data) {\n        if (!_.contains(this.value.res_ids, data.id)) {\n            return this._setValue({\n                operation: 'ADD_M2M',\n                ids: data\n            });\n        }\n        return Promise.resolve();\n    },\n    /**\n     * @private\n     * @param {Object} record\n     */\n    _computeAvailableActions: function (record) {\n        const evalContext = record.evalContext;\n        this.canCreate = 'create' in this.nodeOptions ?\n            new Domain(this.nodeOptions.create, evalContext).compute(evalContext) :\n            true;\n    },\n    /**\n     * Get the QWeb rendering context used by the tag template; this computation\n     * is placed in a separate function for other tags to override it.\n     *\n     * @private\n     * @returns {Object}\n     */\n    _getRenderTagsContext: function () {\n        var elements = this.value ? _.pluck(this.value.data, 'data') : [];\n        return {\n            colorField: this.colorField,\n            elements: elements,\n            hasDropdown: this.hasDropdown,\n            readonly: this.mode === \"readonly\",\n        };\n    },\n    /**\n     * @private\n     * @param {any} id\n     */\n    _removeTag: function (id) {\n        var record = _.findWhere(this.value.data, {res_id: id});\n        this._setValue({\n            operation: 'FORGET',\n            ids: [record.id],\n        });\n    },\n    /**\n     * @private\n     */\n    _renderEdit: function () {\n        var self = this;\n        this._renderTags();\n        if (this.many2one) {\n            this.many2one.destroy();\n        }\n        this.many2one = new FieldMany2One(this, this.name, this.record, {\n            mode: 'edit',\n            noOpen: true,\n            noCreate: !this.canCreate,\n            viewType: this.viewType,\n            attrs: this.attrs,\n        });\n        // to prevent the M2O to take the value of the M2M\n        this.many2one.value = false;\n        // to prevent the M2O to take the relational values of the M2M\n        this.many2one.m2o_value = '';\n\n        this.many2one._getSearchBlacklist = function () {\n            return self.value.res_ids;\n        };\n        var _getSearchCreatePopupOptions = this.many2one._getSearchCreatePopupOptions;\n        this.many2one._getSearchCreatePopupOptions = function (view, ids, context, dynamicFilters) {\n            var options = _getSearchCreatePopupOptions.apply(this, arguments);\n            var domain = this.record.getDomain({fieldName: this.name});\n            var m2mRecords = [];\n            return _.extend({}, options, {\n                domain: domain.concat([\"!\", [\"id\", \"in\", self.value.res_ids]]),\n                disable_multiple_selection: false,\n                on_selected: function (records) {\n                    m2mRecords.push(...records);\n                },\n                on_closed: function () {\n                    self.many2one.reinitialize(m2mRecords);\n                },\n            });\n        };\n        return this.many2one.appendTo(this.$el);\n    },\n    /**\n     * @private\n     */\n    _renderReadonly: function () {\n        this._renderTags();\n    },\n    /**\n     * @private\n     */\n    _renderTags: function () {\n        this.$el.html(qweb.render(this.tag_template, this._getRenderTagsContext()));\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {MouseEvent} event\n     */\n    _onDeleteTag: function (event) {\n        event.preventDefault();\n        event.stopPropagation();\n        this._removeTag($(event.target).parent().data('id'));\n    },\n    /**\n     * Controls the changes made in the internal m2o field.\n     *\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onFieldChanged: function (ev) {\n        if (ev.target !== this.many2one) {\n            return;\n        }\n        ev.stopPropagation();\n        var newValue = ev.data.changes[this.name];\n        if (newValue) {\n            this._addTag(newValue)\n                .then(ev.data.onSuccess || function () {})\n                .guardedCatch(ev.data.onFailure || function () {});\n            this.many2one.reinitialize(false);\n        }\n    },\n    /**\n     * @private\n     * @param {KeyboardEvent} ev\n     */\n    _onKeydown: function (ev) {\n        if (ev.which === $.ui.keyCode.BACKSPACE && this.$('input').val() === \"\") {\n            var $badges = this.$('.badge');\n            if ($badges.length) {\n                this._removeTag($badges.last().data('id'));\n                return;\n            }\n        }\n        this._super.apply(this, arguments);\n    },\n    /**\n     * @private\n     * @param {OdooEvent} event\n     */\n    _onQuickCreate: function (event) {\n        this._quickCreate(event.data.value);\n    },\n});\n\nvar FieldMany2ManyTagsAvatar = FieldMany2ManyTags.extend({\n    tag_template: 'FieldMany2ManyTagAvatar',\n    className: 'o_field_many2manytags avatar',\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     * @private\n     */\n    _getRenderTagsContext: function () {\n        var result = this._super.apply(this, arguments);\n        result.avatarModel = this.nodeOptions.avatarModel || this.field.relation;\n        result.avatarField = this.nodeOptions.avatarField || 'avatar_128';\n        return result;\n    },\n});\n\n\n// Remove event handlers on this widget to ensure that the kanban 'global\n// click' opens the clicked record\nconst { click, ...M2MAvatarMixinEvents } = AbstractField.prototype.events;\nconst M2MAvatarMixin = {\n    visibleAvatarCount: 3, // number of visible avatar\n    events: M2MAvatarMixinEvents,\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Open tooltip on empty avatar clicked\n     *\n     * @private\n     */\n    _bindPopover(ev) {\n        this.$('.o_m2m_avatar_empty').popover({\n            container: this.$el,\n            trigger: 'hover',\n            html: true,\n            placement: 'auto',\n            content: () => {\n                const elements = this.value ? _.pluck(this.value.data, 'data') : [];\n                return qweb.render('Many2ManyTagAvatarPopover', {\n                    elements: elements.slice(this.visibleAvatarCount - 1),\n                });\n            },\n        });\n    },\n    /**\n     * @override\n     */\n    _getRenderTagsContext() {\n        const result = this._super(...arguments);\n        result['widget'] = this;\n        return result;\n    },\n    /**\n     * @override\n     */\n    _renderReadonly() {\n        this.$el.addClass('o_field_many2manytags_multi');\n        return this._super(...arguments);\n    },\n    /**\n     * Override to bind popover\n     *\n     * @override\n     */\n    _renderTags() {\n        this._super(...arguments);\n        this._bindPopover();\n    },\n}\n\nconst KanbanMany2ManyTagsAvatar = FieldMany2ManyTagsAvatar.extend(M2MAvatarMixin, {\n    tag_template: 'KanbanMany2ManyTagAvatar',\n});\n\nconst ListMany2ManyTagsAvatar = FieldMany2ManyTagsAvatar.extend(M2MAvatarMixin, {\n    tag_template: 'ListMany2ManyTagAvatar',\n    visibleAvatarCount: 5,\n});\n\nvar FormFieldMany2ManyTags = FieldMany2ManyTags.extend({\n    events: _.extend({}, FieldMany2ManyTags.prototype.events, {\n        'click .dropdown-toggle': '_onOpenColorPicker',\n        'mousedown .o_colorpicker a': '_onUpdateColor',\n        'mousedown .o_colorpicker .o_hide_in_kanban': '_onUpdateColor',\n    }),\n    isQuickEditable: true,\n    quickEditExclusion: ['.dropdown-toggle'],\n    /**\n     * @override\n     */\n    init: function () {\n        this._super.apply(this, arguments);\n\n        this.hasDropdown = !!this.colorField;\n        this._canQuickEdit = !this.nodeOptions.no_edit_color;\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @override\n     */\n    _quickEdit: function () {\n        this._super(...arguments);\n        this.many2one.$input.click();\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onOpenColorPicker: function (ev) {\n        ev.preventDefault();\n        if (this.nodeOptions.no_edit_color) {\n            ev.stopPropagation();\n            return;\n        }\n        var tagID = $(ev.currentTarget).parent().data('id');\n        var tagColor = $(ev.currentTarget).parent().data('color');\n        var tag = _.findWhere(this.value.data, { res_id: tagID });\n        if (tag && this.colorField in tag.data) { // if there is a color field on the related model\n            this.$color_picker = $(qweb.render('FieldMany2ManyTag.colorpicker', {\n                'widget': this,\n                'tag_id': tagID,\n            }));\n\n            $(ev.currentTarget).after(this.$color_picker);\n            this.$color_picker.dropdown();\n            this.$color_picker.attr(\"tabindex\", 1).focus();\n            if (!tagColor) {\n                this.$('.custom-checkbox input').prop('checked', true);\n            }\n        }\n    },\n    /**\n     * Update color based on target of ev\n     * either by clicking on a color item or\n     * by toggling the 'Hide in Kanban' checkbox.\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onUpdateColor: function (ev) {\n        ev.preventDefault();\n        var $target = $(ev.currentTarget);\n        var color = $target.data('color');\n        var id = $target.data('id');\n        var $tag = this.$(\".badge[data-id='\" + id + \"']\");\n        var currentColor = $tag.data('color');\n        var changes = {};\n\n        if ($target.is('.o_hide_in_kanban')) {\n            var $checkbox = $('.o_hide_in_kanban .custom-checkbox input');\n            $checkbox.prop('checked', !$checkbox.prop('checked')); // toggle checkbox\n            this.prevColors = this.prevColors ? this.prevColors : {};\n            if ($checkbox.is(':checked')) {\n                this.prevColors[id] = currentColor;\n            } else {\n                color = this.prevColors[id] ? this.prevColors[id] : 1;\n            }\n        } else if ($target.is('[class^=\"o_tag_color\"]')) { // $target.is('o_tag_color_')\n            if (color === currentColor) { return; }\n        }\n\n        changes[this.colorField] = color;\n\n        this.trigger_up('field_changed', {\n            dataPointID: _.findWhere(this.value.data, {res_id: id}).id,\n            changes: changes,\n            force_save: true,\n        });\n    },\n});\n\nvar KanbanFieldMany2ManyTags = FieldMany2ManyTags.extend({\n    // Remove event handlers on this widget to ensure that the kanban 'global\n    // click' opens the clicked record, even if the click is done on a tag\n    // This is necessary because of the weird 'global click' logic in\n    // KanbanRecord, which should definitely be cleaned.\n    // Anyway, those handlers are only necessary in Form and List views, so we\n    // can removed them here.\n    events: _.omit(AbstractField.prototype.events, 'click'),\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     * @private\n     */\n    _render: function () {\n        var self = this;\n\n        if (this.$el) {\n            this.$el.empty().addClass('o_field_many2manytags o_kanban_tags');\n        }\n\n        _.each(this.value.data, function (m2m) {\n            if (self.colorField in m2m.data && !m2m.data[self.colorField]) {\n                // When a color field is specified and that color is the default\n                // one, the kanban tag is not rendered.\n                return;\n            }\n\n            $('<span>', {\n                class: 'o_tag o_tag_color_' + (m2m.data[self.colorField] || 0),\n                text: m2m.data.display_name,\n            })\n            .prepend('<span>')\n            .appendTo(self.$el);\n        });\n    },\n});\n\nvar FieldMany2ManyCheckBoxes = AbstractField.extend({\n    description: _lt(\"Checkboxes\"),\n    template: 'FieldMany2ManyCheckBoxes',\n    events: _.extend({}, AbstractField.prototype.events, {\n        change: '_onChange',\n    }),\n    specialData: \"_fetchSpecialRelation\",\n    supportedFieldTypes: ['many2many'],\n    isQuickEditable: true,\n    // set an arbitrary high limit to ensure that all data returned by the server\n    // are processed by the BasicModel (otherwise it would be 40)\n    limit: 100000,\n    init: function () {\n        this._super.apply(this, arguments);\n        this.m2mValues = this.record.specialData[this.name];\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     * @returns {jQuery}\n     */\n    getFocusableElement: function () {\n        return this.$el;\n    },\n    isSet: function () {\n        return true;\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     * @private\n     * @param {MouseEvent} e\n     * @returns {Object}\n     */\n    _getQuickEditExtraInfo(e) {\n        const ids = new Set(this.value.res_ids);\n\n        let input = $(e.target);\n        if (e.target.matches('label')) {\n            input = this.$(`input#${e.target.getAttribute('for')}`);\n        }\n        const id = input.data('record-id');\n        if (ids.has(id)) {\n            ids.delete(id);\n        } else {\n            ids.add(id);\n        }\n\n        return {\n            ids: Array.from(ids),\n        };\n    },\n    /**\n     * @override\n     * @private\n     * @param {Object} extraInfo\n     * @param {number[]} [extraInfo.ids]\n     */\n    _quickEdit(extraInfo) {\n        if (extraInfo.hasOwnProperty('ids')) {\n            this._setValue({\n                operation: 'REPLACE_WITH',\n                ids: extraInfo.ids,\n            });\n        }\n    },\n    /**\n     * @override\n     * @private\n     */\n    _render: function () {\n        var self = this;\n        this.m2mValues = this.record.specialData[this.name];\n        this.$el.html(qweb.render(this.template, {widget: this}));\n        _.each(this.value.res_ids, function (id) {\n            self.$('input[data-record-id=\"' + id + '\"]').prop('checked', true);\n        });\n        this.$(\"input\").prop(\"disabled\", this.hasReadonlyModifier);\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     */\n    _onChange: function () {\n        if (this.mode !== 'readonly') {\n            // Get the list of selected ids\n            var ids = _.map(this.$('input:checked'), function (input) {\n                return $(input).data(\"record-id\");\n            });\n            // The number of displayed checkboxes is limited to 100 (name_search\n            // limit, server-side), to prevent extreme cases where thousands of\n            // records are fetched/displayed. If not all values are displayed, it may\n            // happen that some values that are in the relation aren't available in the\n            // widget. In this case, when the user (un)selects a value, we don't\n            // want to remove those non displayed values from the relation. For that\n            // reason, we manually add those values to the list of ids.\n            const displayedIds = this.m2mValues.map(v => v[0]);\n            const idsInRelation = this.value.res_ids;\n            ids = ids.concat(idsInRelation.filter(a => !displayedIds.includes(a)));\n            this._setValue({\n                operation: 'REPLACE_WITH',\n                ids: ids,\n            });\n        }\n    },\n});\n\n//------------------------------------------------------------------------------\n// Widgets handling both basic and relational fields (selection and Many2one)\n//------------------------------------------------------------------------------\n\nvar FieldStatus = AbstractField.extend({\n    className: 'o_statusbar_status',\n    events: {\n        'click button:not(.dropdown-toggle)': '_onClickStage',\n    },\n    specialData: \"_fetchSpecialStatus\",\n    supportedFieldTypes: ['selection', 'many2one'],\n    /**\n     * @override init from AbstractField\n     */\n    init: function () {\n        this._super.apply(this, arguments);\n        this._setState();\n        this._onClickStage = _.debounce(this._onClickStage, 300, true); // TODO maybe not useful anymore ?\n\n        // Retro-compatibility: clickable used to be defined in the field attrs\n        // instead of options.\n        // If not set, the statusbar is not clickable.\n        try {\n            this.isClickable = !!JSON.parse(this.attrs.clickable);\n        } catch (_) {\n            this.isClickable = !!this.nodeOptions.clickable;\n        }\n\n        const isReadonly = this.record.evalModifiers(this.attrs.modifiers).readonly;\n        this.isClickable = this.isClickable && !isReadonly;\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Returns false to force the statusbar to be always visible (even the field\n     * it not set).\n     *\n     * @override\n     * @returns {boolean} always false\n     */\n    isEmpty: function () {\n        return false;\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override _reset from AbstractField\n     * @private\n     */\n    _reset: function () {\n        this._super.apply(this, arguments);\n        this._setState();\n    },\n    /**\n     * Prepares the rendering data from the field and record data.\n     * @private\n     */\n    _setState: function () {\n        var self = this;\n        if (this.field.type === 'many2one') {\n            this.status_information = _.map(this.record.specialData[this.name], function (info) {\n                return _.extend({\n                    selected: info.id === self.value.res_id,\n                }, info);\n            });\n        } else {\n            var selection = this.field.selection;\n            if (this.attrs.statusbar_visible) {\n                var restriction = this.attrs.statusbar_visible.split(\",\");\n                selection = _.filter(selection, function (val) {\n                    return _.contains(restriction, val[0]) || val[0] === self.value;\n                });\n            }\n            this.status_information = _.map(selection, function (val) {\n                return { id: val[0], display_name: val[1], selected: val[0] === self.value, fold: false };\n            });\n        }\n    },\n    /**\n     * @override _render from AbstractField\n     * @private\n     */\n    _render: function () {\n        var selections = _.partition(this.status_information, function (info) {\n            return (info.selected || !info.fold);\n        });\n        this.$el.html(qweb.render(\"FieldStatus.content\", {\n            selection_unfolded: selections[0],\n            selection_folded: selections[1],\n            clickable: this.isClickable,\n        }));\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Called when on status stage is clicked -> sets the field value.\n     *\n     * @private\n     * @param {MouseEvent} e\n     */\n    _onClickStage: function (e) {\n        this._setValue($(e.currentTarget).data(\"value\"));\n    },\n});\n\n/**\n * The FieldSelection widget is a simple select tag with a dropdown menu to\n * allow the selection of a range of values.  It is designed to work with fields\n * of type 'selection' and 'many2one'.\n */\nvar FieldSelection = AbstractField.extend({\n    description: _lt(\"Selection\"),\n    template: 'FieldSelection',\n    specialData: \"_fetchSpecialRelation\",\n    supportedFieldTypes: ['selection'],\n    events: _.extend({}, AbstractField.prototype.events, {\n        'change': '_onChange',\n    }),\n    isQuickEditable: true,\n    /**\n     * @override\n     */\n    init: function () {\n        this._super.apply(this, arguments);\n        this._setValues();\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     * @returns {jQuery}\n     */\n    getFocusableElement: function () {\n        return this.$el && this.$el.is('select') ? this.$el : $();\n    },\n    /**\n     * @override\n     */\n    isSet: function () {\n        return this.value !== false;\n    },\n    /**\n     * Listen to modifiers updates to hide/show the falsy value in the dropdown\n     * according to the required modifier.\n     *\n     * @override\n     */\n    updateModifiersValue: function () {\n        this._super.apply(this, arguments);\n        if (!this.attrs.modifiersValue.invisible && this.mode !== 'readonly') {\n            this._setValues();\n            this._render();\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     * @private\n     */\n    _renderEdit: function () {\n        this.$el.empty();\n        var required = this.attrs.modifiersValue && this.attrs.modifiersValue.required;\n        for (var i = 0 ; i < this.values.length ; i++) {\n            var disabled = required && this.values[i][0] === false;\n\n            this.$el.append($('<option/>', {\n                value: JSON.stringify(this.values[i][0]),\n                text: this.values[i][1],\n                style: disabled ? \"display: none\" : \"\",\n            }));\n        }\n        this.$el.val(JSON.stringify(this._getRawValue()));\n    },\n    /**\n     * @override\n     * @private\n     */\n    _renderReadonly: function () {\n        this.$el.empty().text(this._formatValue(this.value));\n        this.$el.attr('raw-value', this._getRawValue());\n    },\n    _getRawValue: function() {\n        var raw_value = this.value;\n        if (this.field.type === 'many2one' && raw_value) {\n            raw_value = raw_value.data.id;\n        }\n        return raw_value;\n    },\n    /**\n     * @override\n     */\n    _reset: function () {\n        this._super.apply(this, arguments);\n        this._setValues();\n    },\n    /**\n     * Sets the possible field values. If the field is a many2one, those values\n     * may change during the lifecycle of the widget if the domain change (an\n     * onchange may change the domain).\n     *\n     * @private\n     */\n    _setValues: function () {\n        if (this.field.type === 'many2one') {\n            this.values = this.record.specialData[this.name];\n            this.formatType = 'many2one';\n        } else {\n            this.values = _.reject(this.field.selection, function (v) {\n                return v[0] === false && v[1] === '';\n            });\n        }\n        this.values = [[false, this.attrs.placeholder || '']].concat(this.values);\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * The small slight difficulty is that we have to set the value differently\n     * depending on the field type.\n     *\n     * @private\n     */\n    _onChange: function () {\n        var res_id = JSON.parse(this.$el.val());\n        if (this.field.type === 'many2one') {\n            var value = _.find(this.values, function (val) {\n                return val[0] === res_id;\n            });\n            this._setValue({id: res_id, display_name: value[1]});\n        } else {\n            this._setValue(res_id);\n        }\n    },\n});\n\nvar FieldRadio = FieldSelection.extend({\n    description: _lt(\"Radio\"),\n    template: null,\n    className: 'o_field_radio',\n    tagName: 'div',\n    specialData: \"_fetchSpecialMany2ones\",\n    supportedFieldTypes: ['selection', 'many2one'],\n    events: _.extend({}, AbstractField.prototype.events, {\n        'click input': '_onInputClick',\n    }),\n    isQuickEditable: true,\n    /**\n     * @constructs FieldRadio\n     */\n    init: function () {\n        this._super.apply(this, arguments);\n        this.className += this.nodeOptions.horizontal ? ' o_horizontal' : ' o_vertical';\n        this.unique_id = _.uniqueId(\"radio\");\n        this._setValues();\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     * @returns {boolean} always true\n     */\n    isSet: function () {\n        return true;\n    },\n\n    /**\n     * Returns the currently-checked radio button, or the first one if no radio\n     * button is checked.\n     *\n     * @override\n     */\n    getFocusableElement: function () {\n        var checked = this.$(\"[checked='true']\");\n        return checked.length ? checked : this.$(\"[data-index='0']\");\n    },\n\n    /**\n     * Associates the 'for' attribute to the radiogroup, instead of the selected\n     * radio button.\n     *\n     * @param {string} id\n     */\n    setIDForLabel: function (id) {\n        this.$el.attr('id', id);\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     * @returns {Object}\n     */\n    _getQuickEditExtraInfo: function (ev) {\n        // can be either the input or the label\n        const $target = ev.target.nodeName === 'INPUT'\n            ? $(ev.target)\n            : $(ev.target).siblings('input');\n\n        const index = $target.data('index');\n        const value = this.values[index];\n        return {value};\n    },\n\n    /**\n     * @private\n     * @override\n     * @params {Object} extraInfo\n     */\n    _quickEdit: function (extraInfo) {\n        if (extraInfo.value) {\n            this._saveValue(extraInfo.value);\n        }\n        return this._super.apply(this, arguments);\n    },\n\n    /**\n     * @private\n     * @override\n     */\n    _render: function () {\n        var self = this;\n        var currentValue;\n        if (this.field.type === 'many2one') {\n            currentValue = this.value && this.value.data.id;\n        } else {\n            currentValue = this.value;\n        }\n        this.$el.empty();\n        this.$el.attr('role', 'radiogroup')\n            .attr('aria-label', this.string);\n        _.each(this.values, function (value, index) {\n            self.$el.append(qweb.render('FieldRadio.button', {\n                checked: value[0] === currentValue,\n                id: self.unique_id + '_' + value[0],\n                index: index,\n                name: self.unique_id,\n                value: value,\n                disabled: self.hasReadonlyModifier && self.mode != 'edit',\n            }));\n        });\n    },\n    /**\n     * @override\n     */\n    _reset: function () {\n        this._super.apply(this, arguments);\n        this._setValues();\n    },\n    /**\n     * Sets the possible field values. If the field is a many2one, those values\n     * may change during the lifecycle of the widget if the domain change (an\n     * onchange may change the domain).\n     *\n     * @private\n     */\n    _setValues: function () {\n        if (this.field.type === 'selection') {\n            this.values = this.field.selection || [];\n        } else if (this.field.type === 'many2one') {\n            this.values = _.map(this.record.specialData[this.name], function (val) {\n                return [val.id, val.display_name];\n            });\n        }\n    },\n\n    /**\n     * @private\n     * @param {Array} new value, [value] for a selection field,\n     *                           [id, display_name] for a Many2One\n     */\n    _saveValue: function (value) {\n        if (this.field.type === 'many2one') {\n            this._setValue({id: value[0], display_name: value[1]});\n        } else {\n            this._setValue(value[0]);\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {MouseEvent} event\n     */\n    _onInputClick: function (event) {\n        if (this.mode === 'readonly') {\n            this._onClick(...arguments);\n        } else {\n            const index = $(event.currentTarget).data('index');\n            const value = this.values[index];\n            this._saveValue(value);\n        }\n    },\n});\n\n\nvar FieldSelectionBadge = FieldSelection.extend({\n    description: _lt(\"Badges\"),\n    template: null,\n    className: 'o_field_selection_badge',\n    tagName: 'span',\n    specialData: \"_fetchSpecialMany2ones\",\n    events: _.extend({}, AbstractField.prototype.events, {\n        'click span.o_selection_badge': '_onBadgeClicked',\n    }),\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @override\n     */\n    _renderEdit: function () {\n        this.currentValue = this.value;\n\n        if (this.field.type === 'many2one') {\n            this.currentValue = this.value && this.value.data.id;\n        }\n        this.$el.empty();\n        this.$el.html(qweb.render('FieldSelectionBadge', {'values': this.values, 'current_value': this.currentValue}));\n    },\n    /**\n     * Sets the possible field values. If the field is a many2one, those values\n     * may change during the life cycle of the widget if the domain change (an\n     * onchange may change the domain).\n     *\n     * @private\n     * @override\n     */\n    _setValues: function () {\n        // Note: We can make abstract widget for common code in radio and selection badge\n        if (this.field.type === 'selection') {\n            this.values = this.field.selection || [];\n        } else if (this.field.type === 'many2one') {\n            this.values = _.map(this.record.specialData[this.name], function (val) {\n                return [val.id, val.display_name];\n            });\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {MouseEvent} event\n     */\n    _onBadgeClicked: function (event) {\n        var index = $(event.target).data('index');\n        var value = this.values[index];\n        if (value[0] !== this.currentValue) {\n            if (this.field.type === 'many2one') {\n                this._setValue({id: value[0], display_name: value[1]});\n            } else {\n                this._setValue(value[0]);\n            }\n        } else {\n            this._setValue(false);\n        }\n    },\n});\n\nvar FieldSelectionFont = FieldSelection.extend({\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Changes CSS for all options according to their value.\n     * Also removes empty labels.\n     *\n     * @private\n     * @override\n     */\n    _renderEdit: function () {\n        this._super.apply(this, arguments);\n\n        this.$('option').each(function (i, option) {\n            if (! option.label) {\n                $(option).remove();\n            }\n            $(option).css('font-family', option.value);\n        });\n        this.$el.css('font-family', this.value);\n    },\n});\n\n/**\n * The FieldReference is a combination of a select (for the model) and\n * a FieldMany2one for its value.\n * Its intern representation is similar to the many2one (a datapoint with a\n * `name_get` as data).\n * Note that there is some logic to support char field because of one use in our\n * codebase, but this use should be removed along with this note.\n */\nvar FieldReference = FieldMany2One.extend({\n    specialData: \"_fetchSpecialReference\",\n    supportedFieldTypes: ['reference'],\n    template: 'FieldReference',\n    events: _.extend({}, FieldMany2One.prototype.events, {\n        'change select': '_onSelectionChange',\n    }),\n    /**\n     * @override\n     */\n    init: function () {\n        this._super.apply(this, arguments);\n\n        // needs to be copied as it is an unmutable object\n        this.field = _.extend({}, this.field);\n\n        this.resetOnAnyFieldChange = this.resetOnAnyFieldChange || this.nodeOptions.model_field;\n        this._setState(false);\n    },\n    /**\n     * @override\n     */\n    start: function () {\n        this.modelName = this.field.relation;\n        if (this.el.querySelector('select')) {\n            this.el.querySelector('select').value = this.modelName;\n        }\n        return this._super.apply(this, arguments);\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     * @returns {jQuery}\n     */\n    getFocusableElement: function () {\n        if (this.mode === 'edit' && !this.field.relation) {\n            return this.$('select');\n        }\n        return this._super.apply(this, arguments);\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Get the encompassing record's display_name\n     *\n     * @override\n     */\n    _formatValue: function () {\n        var value;\n        if (this.field.type === 'char') {\n            value = this.record.specialData[this.name];\n        } else {\n            value = this.value;\n        }\n        return value && value.data && value.data.display_name || '';\n    },\n    /**\n     * Apply the model contained in the option model_field\n     * and re-initialize the record if the model change.\n     * @param {boolean} initRecord :true, re-initialize the record if the model changes.\n     *                              Necessary for wizards.\n     */\n    _applyModelField: function (initRecord) {\n        let resourceRef = this.record.specialData[this.name];\n        if (resourceRef) {\n            if (initRecord && resourceRef.hasChanged && resourceRef.modelName !== this.modelName) {\n                this.reinitialize(false);\n            }\n            this.modelName = resourceRef.modelName;\n        }\n    },\n    /**\n     * Add a select in edit mode (for the model).\n     *\n     * @override\n     */\n    _renderEdit: function () {\n        this._super.apply(this, arguments);\n\n        if (this.modelName) {\n            this.$('.o_input_dropdown').show();\n            if (!this.nodeOptions.model_field) {\n                // this class is used to display the two components (select & input) on the same line\n                if (this.nodeOptions.hide_model) {\n                    this.$el.addClass('o_row');\n                }\n                this.$el.find('.o_field_many2one_selection').addClass('o_row');\n            }\n        } else {\n            // hide the many2one if the selection is empty\n            this.$('.o_input_dropdown').hide();\n        }\n    },\n    /**\n     * @override\n     * @private\n     */\n    _reset: function () {\n        this._super.apply(this, arguments);\n        this._setState(true);\n        if (this.el.querySelector('select')) {\n            this.el.querySelector('select').value = this.modelName;\n        }\n    },\n    /**\n     * Set `relation` key in field properties.\n     *\n     * @private\n     * @param {string} model\n     */\n    _setRelation: function (model) {\n        // used to generate the search in many2one\n        this.field.relation = model;\n    },\n    /**\n     * @private\n     */\n    _setState: function (initRecord) {\n        if (this.field.type === 'char') {\n            // in this case, the value is stored in specialData instead\n            this.value = this.record.specialData[this.name];\n        }\n        if (this.nodeOptions.model_field) {\n            this._applyModelField(initRecord);\n        }\n        if (this.value && this.value.model) {\n            this.modelName = this.value.model;\n        }\n        if (this.modelName) {\n            this._setRelation(this.modelName);\n        }\n    },\n    /**\n     * @override\n     * @private\n     */\n    _setValue: function (value, options) {\n        value = value || {};\n        // we need to specify the model for the change in basic_model\n        // the value is then now a dict with id, display_name and model\n        value.model = this.modelName;\n        return this._super(value, options);\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * When the selection (model) changes, the many2one is reset.\n     *\n     * @private\n     */\n    _onSelectionChange: function () {\n        this.modelName = this.el.querySelector('select').value || '';\n        this.reinitialize(false);\n        this._setRelation(this.modelName);\n    },\n});\n\nreturn {\n    FieldMany2One: FieldMany2One,\n    Many2oneBarcode: Many2oneBarcode,\n    KanbanFieldMany2One: KanbanFieldMany2One,\n    ListFieldMany2One: ListFieldMany2One,\n    Many2OneAvatar: Many2OneAvatar,\n\n    FieldX2Many: FieldX2Many,\n    FieldOne2Many: FieldOne2Many,\n\n    FieldMany2Many: FieldMany2Many,\n    FieldMany2ManyBinaryMultiFiles: FieldMany2ManyBinaryMultiFiles,\n    FieldMany2ManyCheckBoxes: FieldMany2ManyCheckBoxes,\n    FieldMany2ManyTags: FieldMany2ManyTags,\n    FieldMany2ManyTagsAvatar: FieldMany2ManyTagsAvatar,\n    KanbanMany2ManyTagsAvatar: KanbanMany2ManyTagsAvatar,\n    ListMany2ManyTagsAvatar: ListMany2ManyTagsAvatar,\n    FormFieldMany2ManyTags: FormFieldMany2ManyTags,\n    KanbanFieldMany2ManyTags: KanbanFieldMany2ManyTags,\n\n    FieldRadio: FieldRadio,\n    FieldSelectionBadge: FieldSelectionBadge,\n    FieldSelection: FieldSelection,\n    FieldStatus: FieldStatus,\n    FieldSelectionFont: FieldSelectionFont,\n\n    FieldReference: FieldReference,\n};\n\n});\n", "odoo.define('web.Signature', function (require) {\n    \"use strict\";\n\n    var AbstractFieldBinary = require('web.basic_fields').AbstractFieldBinary;\n    var core = require('web.core');\n    var field_utils = require('web.field_utils');\n    var registry = require('web.field_registry');\n    var session = require('web.session');\n    const SignatureDialog = require('web.signature_dialog');\n    var utils = require('web.utils');\n\n\n    var qweb = core.qweb;\n    var _t = core._t;\n    var _lt = core._lt;\n\nvar FieldBinarySignature = AbstractFieldBinary.extend({\n    description: _lt(\"Signature\"),\n    fieldDependencies: _.extend({}, AbstractFieldBinary.prototype.fieldDependencies, {\n        __last_update: {type: 'datetime'},\n    }),\n    resetOnAnyFieldChange: true,\n    custom_events: _.extend({}, AbstractFieldBinary.prototype.custom_events, {\n        upload_signature: '_onUploadSignature',\n    }),\n    events: _.extend({}, AbstractFieldBinary.prototype.events, {\n        'click .o_signature': '_onClickSignature',\n    }),\n    template: null,\n    supportedFieldTypes: ['binary'],\n    file_type_magic_word: {\n        '/': 'jpg',\n        'R': 'gif',\n        'i': 'png',\n        'P': 'svg+xml',\n    },\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * This widget must always have render even if there are no signature.\n     * In edit mode, the real value is return to manage required fields.\n     *\n     * @override\n     */\n    isSet: function () {\n        return this.value;\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Renders an empty signature or the saved signature. Both must have the same size.\n     *\n     * @override\n     * @private\n     */\n\n    _render: function () {\n        var self = this;\n        var displaySignatureRatio = 3;\n        var url;\n        var $img;\n        var width = this.nodeOptions.size ? this.nodeOptions.size[0] : this.attrs.width;\n        var height = this.nodeOptions.size ? this.nodeOptions.size[1] : this.attrs.height;\n        if (this.value) {\n            if (!utils.is_bin_size(this.value)) {\n                // Use magic-word technique for detecting image type\n                url = 'data:image/' + (this.file_type_magic_word[this.value[0]] || 'png') + ';base64,' + this.value;\n            } else {\n                url = session.url('/web/image', {\n                    model: this.model,\n                    id: JSON.stringify(this.res_id),\n                    field: this.nodeOptions.preview_image || this.name,\n                    // unique forces a reload of the image when the record has been updated\n                    unique: field_utils.format.datetime(this.recordData.__last_update).replace(/[^0-9]/g, ''),\n                });\n            }\n            $img = $(qweb.render(\"FieldBinarySignature-img\", {widget: this, url: url}));\n        } else {\n            $img = $('<div class=\"o_signature o_signature_empty\"><svg></svg><p>' + _t('SIGNATURE') + '</p></div>');\n            if (width && height) {\n                width = Math.min(width, displaySignatureRatio * height);\n                height = width / displaySignatureRatio;\n            } else if (width) {\n                height = width / displaySignatureRatio;\n            } else if (height) {\n                width = height * displaySignatureRatio;\n            }\n        }\n        if (width) {\n            $img.attr('width', width);\n            $img.css('max-width', width + 'px');\n        }\n        if (height) {\n            $img.attr('height', height);\n            $img.css('max-height', height + 'px');\n        }\n        this.$('> div').remove();\n        this.$('> img').remove();\n\n        this.$el.prepend($img);\n\n        $img.on('error', function () {\n            self._clearFile();\n            $img.attr('src', self.placeholder);\n            self.displayNotification({ message: _t(\"Could not display the selected image\"), type: 'danger' });\n        });\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * If the view is in edit mode, open dialog to sign.\n     *\n     * @private\n     */\n    _onClickSignature: function () {\n        var self = this;\n        if (this.mode === 'edit') {\n\n            var nameAndSignatureOptions = {\n                mode: 'draw',\n                displaySignatureRatio: 3,\n                signatureType: 'signature',\n                noInputName: true,\n            };\n\n            if (this.nodeOptions.full_name) {\n                var signName;\n                if (this.fields[this.nodeOptions.full_name].type === 'many2one') {\n                    // If m2o is empty, it will have falsy value in recordData\n                    signName = this.recordData[this.nodeOptions.full_name] && this.recordData[this.nodeOptions.full_name].data.display_name;\n                } else {\n                     signName = this.recordData[this.nodeOptions.full_name];\n                 }\n                nameAndSignatureOptions.defaultName = (signName === '') ? undefined : signName;\n            }\n\n            nameAndSignatureOptions.defaultFont = this.nodeOptions.default_font || '';\n            this.signDialog = new SignatureDialog(self, {nameAndSignatureOptions: nameAndSignatureOptions});\n\n            this.signDialog.open();\n        }\n    },\n\n    /**\n     * Upload the signature image if valid and close the dialog.\n     *\n     * @private\n     */\n    _onUploadSignature: function (ev) {\n        var signatureImage = ev.data.signatureImage;\n        if (signatureImage !== this.signDialog.emptySignature) {\n            var data = signatureImage[1];\n            var type = signatureImage[0].split('/')[1];\n            this.on_file_uploaded(data.length, ev.data.name, type, data);\n        }\n        this.signDialog.close();\n    }\n});\n\nregistry.add('signature', FieldBinarySignature);\n\n});\n", "odoo.define('web.special_fields', function (require) {\n\"use strict\";\n\nvar core = require('web.core');\nvar field_utils = require('web.field_utils');\nvar relational_fields = require('web.relational_fields');\nvar AbstractField = require('web.AbstractField');\n\nvar FieldSelection = relational_fields.FieldSelection;\nvar _t = core._t;\nvar _lt = core._lt;\n\n\n/**\n * This widget is intended to display a warning near a label of a 'timezone' field\n * indicating if the browser timezone is identical (or not) to the selected timezone.\n * This widget depends on a field given with the param 'tz_offset_field', which contains\n * the time difference between UTC time and local time, in minutes.\n */\nvar FieldTimezoneMismatch = FieldSelection.extend({\n    /**\n     * @override\n     */\n    start: function () {\n        var interval = navigator.platform.toUpperCase().indexOf('MAC') >= 0 ? 60000 : 1000;\n        this._datetime = setInterval(this._renderDateTimeTimezone.bind(this), interval);\n        return this._super.apply(this, arguments);\n    },\n    /**\n     * @override\n     */\n    destroy: function () {\n        clearInterval(this._datetime);\n        return this._super();\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     * @private\n     */\n    _render: function () {\n        this._super.apply(this, arguments);\n        this._renderTimezoneMismatch();\n    },\n    /**\n     * Display the time in the user timezone (reload each second)\n     *\n     * @private\n     */\n    _renderDateTimeTimezone: function () {\n        if (!this.mismatch || !this.$option.html()) {\n            return;\n        }\n        var offset = this.recordData.tz_offset.match(/([+-])([0-9]{2})([0-9]{2})/);\n        offset = (offset[1] === '-' ? -1 : 1) * (parseInt(offset[2])*60 + parseInt(offset[3]));\n        var datetime = field_utils.format.datetime(moment.utc().add(offset, 'minutes'), this.field, {timezone: false});\n        var content = this.$option.html().split(' ')[0];\n        content += '    ('+ datetime + ')';\n        this.$option.html(content);\n    },\n    /**\n     * Display the timezone alert\n     *\n     * Note: timezone alert is a span that is added after $el, and $el is now a\n     * set of two elements\n     *\n     * @private\n     */\n    _renderTimezoneMismatch: function () {\n        // we need to clean the warning to have maximum one alert\n        this.$el.last().filter('.o_tz_warning').remove();\n        this.$el = this.$el.first();\n        var value = this.$el.val();\n        var $span = $('<span class=\"fa fa-exclamation-triangle o_tz_warning\"/>');\n\n        if (this.$option && this.$option.html()) {\n            this.$option.html(this.$option.html().split(' ')[0]);\n        }\n\n        var userOffset = this.recordData.tz_offset;\n        this.mismatch = false;\n        if (userOffset && value !== \"\" && value !== \"false\") {\n            var offset = -(new Date().getTimezoneOffset());\n            var browserOffset = (offset < 0) ? \"-\" : \"+\";\n            browserOffset += _.str.sprintf(\"%02d\", Math.abs(offset / 60));\n            browserOffset += _.str.sprintf(\"%02d\", Math.abs(offset % 60));\n            this.mismatch = (browserOffset !== userOffset);\n        }\n\n        if (this.mismatch){\n            $span.insertAfter(this.$el);\n            if (this.nodeOptions.mismatch_title) {\n                $span.attr('title', this.nodeOptions.mismatch_title);    \n            }\n            else {\n                $span.attr('title', _t(\"Timezone Mismatch : This timezone is different from that of your browser.\\nPlease, set the same timezone as your browser's to avoid time discrepancies in your system.\"));\n            }\n            this.$el = this.$el.add($span);\n\n            this.$option = this.$('option').filter(function () {\n                return $(this).attr('value') === value;\n            });\n            this._renderDateTimeTimezone();\n        } else if (value == \"false\") {\n            $span.insertAfter(this.$el);\n            $span.attr('title', _t(\"Set a timezone on your user\"));\n            this.$el = this.$el.add($span);\n        }\n    },\n    /**\n     * @override\n     * @private\n     * this.$el can have other elements than select\n     * that should not be touched\n     */\n    _renderEdit: function () {\n        // FIXME: hack to handle multiple root elements\n        // in this.$el , which is a bad idea\n        // In master we should make this.$el a wrapper\n        // around multiple subelements\n        var $otherEl = this.$el.not('select');\n        this.$el = this.$el.first();\n\n        this._super.apply(this, arguments);\n\n        $otherEl.insertAfter(this.$el);\n        this.$el = this.$el.add($otherEl);\n    },\n});\n\nvar FieldReportLayout = relational_fields.FieldMany2One.extend({\n    // this widget is not generic, so we disable its studio use\n    // supportedFieldTypes: ['many2one', 'selection'],\n    events: _.extend({}, relational_fields.FieldMany2One.prototype.events, {\n        'click img': '_onImgClicked',\n    }),\n\n    willStart: function () {\n        var self = this;\n        this.previews = {};\n        return this._super()\n            .then(function () {\n                return self._rpc({\n                    model: 'report.layout',\n                    method: \"search_read\"\n                }).then(function (values) {\n                    self.previews = values;\n                });\n            });\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     * @private\n     */\n    _render: function () {\n        var self = this;\n        this.$el.empty();\n        var value = _.isObject(this.value) ? this.value.data.id : this.value;\n        _.each(this.previews, function (val) {\n            var $container = $('<div>').addClass('col-3 text-center');\n            var $img = $('<img>')\n                .addClass('img img-fluid img-thumbnail ml16')\n                .toggleClass('btn-info', val.view_id[0] === value)\n                .attr('src', val.image)\n                .data('key', val.view_id[0]);\n            $container.append($img);\n            if (val.pdf) {\n                var $previewLink = $('<a>')\n                    .text('Example')\n                    .attr('href', val.pdf)\n                    .attr('target', '_blank');\n                $container.append($previewLink);\n            }\n            self.$el.append($container);\n        });\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     * @private\n     * @param {MouseEvent} event\n     */\n    _onImgClicked: function (event) {\n        this._setValue($(event.currentTarget).data('key'));\n    },\n});\n\n\nconst IframeWrapper = AbstractField.extend({\n    description: _lt(\"Wrap raw html within an iframe\"),\n\n    // If HTML, don't forget to adjust the sanitize options to avoid stripping most of the metadata\n    supportedFieldTypes: ['text', 'html'],\n\n    template: \"web.IframeWrapper\",\n\n    _render() {\n\n        const spinner = this.el.querySelector('.o_iframe_wrapper_spinner');\n        const iframe = this.el.querySelector('.o_preview_iframe');\n\n        iframe.style.display = 'none';\n        spinner.style.display = 'block';\n\n        // Promise for tests\n        let resolver;\n        $(iframe).data('ready', new Promise((resolve) => {\n            resolver = resolve;\n        }));\n\n        /**\n         * Certain browser don't trigger onload events of iframe for particular cases.\n         * In our case, chrome and safari could be problematic depending on version and environment.\n         * This rather unorthodox solution replace the onload event handler. (jquery on('load') doesn't fix it)\n         */\n        const onloadReplacement = setInterval(() => {\n            const iframeDoc = iframe.contentDocument;\n            if (iframeDoc && (iframeDoc.readyState === 'complete' || iframeDoc.readyState === 'interactive')) {\n\n                /**\n                 * The document.write is not recommended. It is better to manipulate the DOM through $.appendChild and\n                 * others. In our case though, we deal with an iframe without src attribute and with metadata to put in\n                 * head tag. If we use the usual dom methods, the iframe is automatically created with its document\n                 * component containing html > head & body. Therefore, if we want to make it work that way, we would\n                 * need to receive each piece at a time to  append it to this document (with this.record.data and extra\n                 * model fields or with an rpc). It also cause other difficulties getting attribute on the most parent\n                 * nodes, parsing to HTML complex elements, etc.\n                 * Therefore, document.write makes it much more trivial in our situation.\n                 */\n                iframeDoc.open();\n                iframeDoc.write(this.value);\n                iframeDoc.close();\n\n                iframe.style.display = 'block';\n                spinner.style.display = 'none';\n\n                resolver();\n\n                clearInterval(onloadReplacement);\n            }\n        }, 100);\n\n    }\n\n});\n\n\nreturn {\n    FieldTimezoneMismatch: FieldTimezoneMismatch,\n    FieldReportLayout: FieldReportLayout,\n    IframeWrapper,\n};\n\n});\n", "odoo.define('web_enterprise.apps', function (require) {\n\"use strict\";\n\nvar Apps = require('web.Apps');\n\nApps.include({\n    // Do nothing on update count as needactions have been removed in enterprise\n    _on_update_count: function() {},\n});\n\n});\n", "odoo.define('report.utils', function (require) {\n'use strict';\n\nfunction get_protocol_from_url (url) {\n    var a = document.createElement('a');\n    a.href = url;\n    return a.protocol;\n}\n\nfunction get_host_from_url (url) {\n    var a = document.createElement('a');\n    a.href = url;\n    return a.host;\n}\n\nfunction build_origin (protocol, host) {\n    return protocol + '//' + host;\n}\n\nreturn {\n    'get_protocol_from_url': get_protocol_from_url,\n    'get_host_from_url': get_host_from_url,\n    'build_origin': build_origin,\n};\n\n});\n", "odoo.define('report.client_action', function (require) {\n'use strict';\n\nvar AbstractAction = require('web.AbstractAction');\nvar core = require('web.core');\nvar session = require('web.session');\nvar utils = require('report.utils');\n\nvar QWeb = core.qweb;\n\n\nvar AUTHORIZED_MESSAGES = [\n    'report:do_action',\n];\n\nvar ReportAction = AbstractAction.extend({\n    hasControlPanel: true,\n    contentTemplate: 'report.client_action',\n\n    init: function (parent, action, options) {\n        this._super.apply(this, arguments);\n\n        options = options || {};\n\n        this.action_manager = parent;\n        this._title = options.display_name || options.name;\n\n        this.report_url = options.report_url;\n\n        // Extra info that will be useful to build a qweb-pdf action.\n        this.report_name = options.report_name;\n        this.report_file = options.report_file;\n        this.data = options.data || {};\n        this.context = options.context || {};\n    },\n\n    start: function () {\n        var self = this;\n        this.iframe = this.$('iframe')[0];\n        this.$buttons = $(QWeb.render('report.client_action.ControlButtons', {}));\n        this.$buttons.on('click', '.o_report_print', this.on_click_print);\n        this.controlPanelProps.cp_content = {\n            $buttons: this.$buttons,\n        };\n        return Promise.all([this._super.apply(this, arguments), session.is_bound]).then(async function () {\n            var web_base_url = window.origin;\n            var trusted_host = utils.get_host_from_url(web_base_url);\n            var trusted_protocol = utils.get_protocol_from_url(web_base_url);\n            self.trusted_origin = utils.build_origin(trusted_protocol, trusted_host);\n\n            // Load the report in the iframe. Note that we use a relative URL.\n            self.iframe.src = self.report_url;\n        });\n    },\n\n    on_attach_callback: function () {\n        // Register now the postMessage event handler. We only want to listen to ~trusted\n        // messages and we can only filter them by their origin, so we chose to ignore the\n        // messages that do not come from `web.base.url`.\n        $(window).on('message', this, this.on_message_received);\n        this._super();\n    },\n\n    on_detach_callback: function () {\n        $(window).off('message', this.on_message_received);\n        this._super();\n    },\n\n    /**\n     * Event handler of the message post. We only handle them if they're from\n     * `web.base.url` host and protocol and if they're part of `AUTHORIZED_MESSAGES`.\n     */\n    on_message_received: function (ev) {\n        // Check the origin of the received message.\n        var message_origin = utils.build_origin(ev.originalEvent.source.location.protocol, ev.originalEvent.source.location.host);\n        if (message_origin === this.trusted_origin) {\n\n            // Check the syntax of the received message.\n            var message = ev.originalEvent.data;\n            if (_.isObject(message)) {\n                message = message.message;\n            }\n            if (! _.isString(message) || (_.isString(message) && ! _.contains(AUTHORIZED_MESSAGES, message))) {\n                return;\n            }\n\n            switch(message) {\n                case 'report:do_action':\n                    return this.do_action(ev.originalEvent.data.action);\n                default:\n            }\n        }\n    },\n\n    /**\n     * Helper allowing to send a message to the `this.el` iframe's window and\n     * seting the `targetOrigin` as `this.trusted_origin` (which is the\n     * `web.base.url` ir.config_parameter key) - in other word, only when using\n     * this method we only send the message to a trusted domain.\n     */\n    _post_message: function (message) {\n        this.iframe.contentWindow.postMessage(message, this.trusted_origin);\n    },\n\n    on_click_print: function () {\n        var action = {\n            'type': 'ir.actions.report',\n            'report_type': 'qweb-pdf',\n            'report_name': this.report_name,\n            'report_file': this.report_file,\n            'data': this.data,\n            'context': this.context,\n            'display_name': this.title,\n        };\n        return this.do_action(action);\n    },\n\n});\n\ncore.action_registry.add('report.client_action', ReportAction);\n\nreturn ReportAction;\n\n});\n", "odoo.define('web.DataManager', function (require) {\n\"use strict\";\n\nvar config = require('web.config');\nvar core = require('web.core');\nvar rpc = require('web.rpc');\nvar session = require('web.session');\nvar utils = require('web.utils');\n\nreturn core.Class.extend({\n    init: function () {\n        this._init_cache();\n        core.bus.on('clear_cache', this, this.invalidate.bind(this));\n    },\n\n    _init_cache: function () {\n        this._cache = {\n            actions: {},\n            filters: {},\n            views: {},\n        };\n    },\n\n    /**\n     * Invalidates the whole cache. Only works when not triggered by itself.\n     * Suggestion: could be refined to invalidate some part of the cache\n     *\n     * @param {Object} [dataManager]\n     */\n    invalidate: function (dataManager) {\n        if (dataManager === this) {\n            return;\n        }\n        session.invalidateCacheKey('load_menus');\n        this._init_cache();\n    },\n\n    /**\n     * Loads an action from its id or xmlid.\n     *\n     * @param {int|string} [action_id] the action id or xmlid\n     * @param {Object} [additional_context] used to load the action\n     * @return {Promise} resolved with the action whose id or xmlid is action_id\n     */\n    load_action: function (action_id, additional_context) {\n        var self = this;\n        var key = this._gen_key(action_id, additional_context || {});\n\n        if (config.isDebug('assets') || !this._cache.actions[key]) {\n            this._cache.actions[key] = rpc.query({\n                route: \"/web/action/load\",\n                params: {\n                    action_id: action_id,\n                    additional_context: additional_context,\n                },\n            }).then(function (action) {\n                self._cache.actions[key] = action.no_cache ? null : self._cache.actions[key];\n                return action;\n            }).guardedCatch(() => this._invalidate('actions', key));\n        }\n\n        return this._cache.actions[key].then(function (action) {\n            return $.extend(true, {}, action);\n        });\n    },\n\n    /**\n     * Loads various information concerning views: fields_view for each view,\n     * the fields of the corresponding model, and optionally the filters.\n     *\n     * @param {Object} params\n     * @param {String} params.model\n     * @param {Object} params.context\n     * @param {Array} params.views_descr array of [view_id, view_type]\n     * @param {Object} [options={}] dictionary of various options:\n     *     - options.load_filters: whether or not to load the filters,\n     *     - options.action_id: the action_id (required to load filters),\n     *     - options.toolbar: whether or not a toolbar will be displayed,\n     * @return {Promise} resolved with the requested views information\n     */\n    load_views: async function ({ model, context, views_descr } , options = {}) {\n        const viewsKey = this._gen_key(model, views_descr, options, context);\n        const filtersKey = this._gen_key(model, options.action_id);\n        const withFilters = Boolean(options.load_filters);\n        const shouldLoadViews = config.isDebug('assets') || !this._cache.views[viewsKey];\n        const shouldLoadFilters = config.isDebug('assets') || (\n            withFilters && !this._cache.filters[filtersKey]\n        );\n        if (shouldLoadViews) {\n            // Views info should be loaded\n            options.load_filters = shouldLoadFilters;\n            this._cache.views[viewsKey] = rpc.query({\n                args: [],\n                kwargs: { context, options, views: views_descr },\n                model,\n                method: 'load_views',\n            }).then(result => {\n                // Freeze the fields dict as it will be shared between views and\n                // no one should edit it\n                utils.deepFreeze(result.fields);\n                for (const [viewId, viewType] of views_descr) {\n                    const fvg = result.fields_views[viewType];\n                    fvg.viewFields = fvg.fields;\n                    fvg.fields = result.fields;\n                }\n\n                // Insert filters, if any, into the filters cache\n                if (shouldLoadFilters) {\n                    this._cache.filters[filtersKey] = Promise.resolve(result.filters);\n                }\n                return result.fields_views;\n            }).guardedCatch(() => this._invalidate('views', viewsKey));\n        }\n        const result = await this._cache.views[viewsKey];\n        if (withFilters && result.search) {\n            if (shouldLoadFilters) {\n                await this.load_filters({\n                    actionId: options.action_id,\n                    context,\n                    forceReload: false,\n                    modelName: model,\n                });\n            }\n            result.search.favoriteFilters = await this._cache.filters[filtersKey];\n        }\n        return result;\n    },\n\n    /**\n     * Loads the filters of a given model and optional action id.\n     *\n     * @param {Object} params\n     * @param {number} params.actionId\n     * @param {Object} params.context\n     * @param {boolean} [params.forceReload=true] can be set to false to prevent forceReload\n     * @param {string} params.modelName\n     * @return {Promise} resolved with the requested filters\n     */\n    load_filters: function (params) {\n        const key = this._gen_key(params.modelName, params.actionId);\n        const forceReload = params.forceReload !== false && config.isDebug('assets');\n        if (forceReload || !this._cache.filters[key]) {\n            this._cache.filters[key] = rpc.query({\n                args: [params.modelName, params.actionId],\n                kwargs: {\n                    context: params.context || {},\n                    // get_context() de dataset\n                },\n                model: 'ir.filters',\n                method: 'get_filters',\n            }).guardedCatch(() => this._invalidate('filters', key));\n        }\n        return this._cache.filters[key];\n    },\n\n    /**\n     * Calls 'create_or_replace' on 'ir_filters'.\n     *\n     * @param {Object} [filter] the filter description\n     * @return {Promise} resolved with the id of the created or replaced filter\n     */\n    create_filter: function (filter) {\n        return rpc.query({\n                args: [filter],\n                model: 'ir.filters',\n                method: 'create_or_replace',\n            })\n            .then(filterId => {\n                const filtersKey = this._gen_key(filter.model_id, filter.action_id);\n                this._invalidate('filters', filtersKey);\n                return filterId;\n            });\n    },\n\n    /**\n     * Calls 'unlink' on 'ir_filters'.\n     *\n     * @param {integer} filterId Id of the filter to remove\n     * @return {Promise}\n     */\n    delete_filter: function (filterId) {\n        return rpc.query({\n                args: [filterId],\n                model: 'ir.filters',\n                method: 'unlink',\n            })\n            // Invalidate the whole cache since we have no idea where the filter came from.\n            .then(() => this._invalidate('filters'));\n    },\n\n    /**\n     * Private function that generates a cache key from its arguments\n     */\n    _gen_key: function () {\n        return _.map(Array.prototype.slice.call(arguments), function (arg) {\n            if (!arg) {\n                return false;\n            }\n            return _.isObject(arg) ? JSON.stringify(arg) : arg;\n        }).join(',');\n    },\n\n    /**\n     * Invalidate a cache entry or a whole cache section.\n     *\n     * @private\n     * @param {string} section\n     * @param {string} key\n     */\n    _invalidate(section, key) {\n        core.bus.trigger(\"clear_cache\", this);\n        if (key) {\n            delete this._cache[section][key];\n        } else {\n            this._cache[section] = {};\n        }\n    },\n});\n\n});\n\nodoo.define('web.data_manager', function (require) {\n\"use strict\";\n\nvar DataManager = require('web.DataManager');\n\nvar data_manager = new DataManager();\n\nreturn data_manager;\n\n});\n", "odoo.define('web.ReportService', function (require) {\n\"use strict\";\n\n/**\n * This file defines the service for the report generation in Odoo.\n */\n\nvar AbstractService = require('web.AbstractService');\nvar core = require('web.core');\n\nvar ReportService = AbstractService.extend({\n    dependencies: ['ajax'],\n\n    /**\n     * Checks the state of the installation of wkhtmltopdf on the server.\n     * Implements an internal cache to do the request only once.\n     *\n     * @returns {Promise} resolved with the state of wkhtmltopdf on the server\n     *   (possible values are 'ok', 'broken', 'install', 'upgrade', 'workers').\n     */\n    checkWkhtmltopdf: function () {\n        if (!this.wkhtmltopdfState) {\n            this.wkhtmltopdfState = this._rpc({\n                route:'/report/check_wkhtmltopdf'\n            });\n        }\n        return this.wkhtmltopdfState;\n    },\n});\n\ncore.serviceRegistry.add('report', ReportService);\n\nreturn ReportService;\n\n});\n", "odoo.define('web.session', function (require) {\n\"use strict\";\n\nvar Session = require('web.Session');\n\nvar session = new Session(undefined, undefined, {use_cors: false});\nsession.is_bound = session.session_bind();\n\nreturn session;\n\n});\n", "odoo.define('web.tools', function (require) {\n\"use strict\";\n\n/**\n * Wrapper for deprecated functions that display a warning message.\n *\n * @param {Function} fn the deprecated function\n * @param {string} [message=''] optional message to display\n * @returns {Function}\n */\nfunction deprecated(fn, message) {\n    return function () {\n        console.warn(message || (fn.name + ' is deprecated.'));\n        return fn.apply(this, arguments);\n    };\n}\n\nreturn {\n    deprecated: deprecated,\n};\n\n});\n", "/** @odoo-module alias=web.AbstractController **/\n\n/**\n * The Controller class is the class coordinating the model and the renderer.\n * It is the C in MVC, and is what was formerly known in Odoo as a View.\n *\n * Its role is to listen to events bubbling up from the model/renderer, and call\n * the appropriate methods if necessary.  It also render control panel buttons,\n * and react to changes in the search view.  Basically, all interactions from\n * the renderer/model with the outside world (meaning server/reading in session/\n * reading localstorage, ...) has to go through the controller.\n */\n\nimport ActionMixin from 'web.ActionMixin';\nimport ajax from 'web.ajax';\nimport concurrency from 'web.concurrency';\nimport { ComponentWrapper } from 'web.OwlCompatibility';\nimport mvc from 'web.mvc';\nimport session from 'web.session';\n\n\nvar AbstractController = mvc.Controller.extend(ActionMixin, {\n    custom_events: _.extend({}, ActionMixin.custom_events, {\n        navigation_move: '_onNavigationMove',\n        open_record: '_onOpenRecord',\n        switch_view: '_onSwitchView',\n    }),\n    events: {\n        'click a[type=\"action\"]': '_onActionClicked',\n    },\n\n    /**\n     * @param {Object} param\n     * @param {Object[]} params.actionViews\n     * @param {string} params.activeActions\n     * @param {string} params.bannerRoute\n     * @param {Object} [params.controlPanel]\n     * @param {string} params.controllerID an id to ease the communication with\n     *      upstream components\n     * @param {string} params.displayName\n     * @param {Object} params.initialState\n     * @param {string} params.modelName\n     * @param {ActionModel} [params.searchModel]\n     * @param {string} [params.searchPanel]\n     * @param {string} params.viewType\n     * @param {boolean} [params.withControlPanel]\n     * @param {boolean} [params.withSearchPanel]\n     */\n    init: function (parent, model, renderer, params) {\n        this._super.apply(this, arguments);\n        this._title = params.displayName;\n        this.modelName = params.modelName;\n        this.activeActions = params.activeActions;\n        this.controllerID = params.controllerID;\n        this.initialState = params.initialState;\n        this.bannerRoute = params.bannerRoute;\n        this.actionViews = params.actionViews;\n        this.viewType = params.viewType;\n        // use a DropPrevious to correctly handle concurrent updates\n        this.dp = new concurrency.DropPrevious();\n\n        this.withControlPanel = params.withControlPanel;\n        this.withSearchPanel = params.withSearchPanel;\n        if (params.searchModel) {\n            this.searchModel = params.searchModel;\n        }\n        if (this.withControlPanel) {\n            const { Component, props } = params.controlPanel;\n            this.ControlPanel = Component;\n            this.controlPanelProps = props;\n        }\n        if (this.withSearchPanel) {\n            const { Component, props } = params.searchPanel;\n            this.SearchPanel = Component;\n            this.searchPanelProps = props;\n        }\n    },\n\n    /**\n     * Simply renders and updates the url.\n     *\n     * @returns {Promise}\n     */\n    start: async function () {\n        this.$el.addClass('o_view_controller');\n        this.renderButtons();\n        const promises = [this._super(...arguments)];\n        if (this.withControlPanel) {\n            this._updateControlPanelProps(this.initialState);\n            this._controlPanelWrapper = new ComponentWrapper(this, this.ControlPanel, this.controlPanelProps);\n            this._controlPanelWrapper.env.bus.on('focus-view', this, () => this._giveFocus());\n            promises.push(this._controlPanelWrapper.mount(this.el, { position: 'first-child' }));\n        }\n        if (this.withSearchPanel) {\n            this._searchPanelWrapper = new ComponentWrapper(this, this.SearchPanel, this.searchPanelProps);\n            const content = this.el.querySelector(':scope .o_content');\n            content.classList.add('o_controller_with_searchpanel');\n            promises.push(this._searchPanelWrapper.mount(content, { position: 'first-child' }));\n        }\n        await Promise.all(promises);\n        await this._update(this.initialState, { shouldUpdateSearchComponents: false });\n        this.updateButtons();\n        this.el.classList.toggle('o_view_sample_data', this.model.isInSampleMode());\n    },\n    /**\n     * @override\n     */\n    destroy: function () {\n        if (this.$buttons) {\n            this.$buttons.off();\n        }\n        ActionMixin.destroy.call(this);\n        this._super.apply(this, arguments);\n    },\n    /**\n     * Called each time the controller is attached into the DOM.\n     */\n    on_attach_callback: function () {\n        ActionMixin.on_attach_callback.call(this);\n        this.searchModel.on('search', this, this._onSearch);\n        if (this.withControlPanel) {\n            this.searchModel.on('get-controller-query-params', this, this._onGetOwnedQueryParams);\n        }\n        if (!(this.renderer instanceof owl.Component)) {\n            this.renderer.on_attach_callback();\n        }\n    },\n    /**\n     * Called each time the controller is detached from the DOM.\n     */\n    on_detach_callback: function () {\n        ActionMixin.on_detach_callback.call(this);\n        this.searchModel.off('search', this);\n        if (this.withControlPanel) {\n            this.searchModel.off('get-controller-query-params', this);\n        }\n        if (!(this.renderer instanceof owl.Component)) {\n            this.renderer.on_detach_callback();\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Discards the changes made on the record associated to the given ID, or\n     * all changes made by the current controller if no recordID is given. For\n     * example, when the user opens the 'home' screen, the action manager calls\n     * this method on the active view to make sure it is ok to open the home\n     * screen (and lose all current state).\n     *\n     * Note that it returns a Promise, because the view could choose to ask the\n     * user if he agrees to discard.\n     *\n     * @param {string} [recordID]\n     *        if not given, we consider all the changes made by the controller\n     * @param {Object} [options]\n     * @returns {Promise} resolved if properly discarded, rejected otherwise\n     */\n    discardChanges: function (recordID, options) {\n        return Promise.resolve();\n    },\n    /**\n     * Export the state of the controller containing information that is shared\n     * between different controllers of a same action (like the current search\n     * model state or the states of some components).\n     *\n     * @returns {Object}\n     */\n    exportState() {\n        const exported = {\n            searchModel: this.searchModel.exportState(),\n        };\n        if (this.withSearchPanel) {\n            const searchPanel = this._searchPanelWrapper.componentRef.comp;\n            exported.searchPanel = searchPanel.exportState();\n        }\n        return exported;\n    },\n    /**\n     * Parses and imports a previously exported state.\n     *\n     * @param {Object} state\n     */\n    importState(state) {\n        this.searchModel.importState(state.searchModel);\n        if (this.withSearchPanel) {\n            const searchPanel = this._searchPanelWrapper.componentRef.comp;\n            searchPanel.importState(state.searchPanel);\n        }\n    },\n    /**\n     * The use of this method is discouraged.  It is still snakecased, because\n     * it currently is used in many templates, but we will move to a simpler\n     * mechanism as soon as we can.\n     *\n     * @deprecated\n     * @param {string} action type of action, such as 'create', 'read', ...\n     * @returns {boolean}\n     */\n    is_action_enabled: function (action) {\n        return this.activeActions[action];\n    },\n    /**\n     * Short helper method to reload the view\n     *\n     * @param {Object} [params={}]\n     * @param {Object} [params.controllerState={}]\n     * @returns {Promise}\n     */\n    reload: async function (params = {}) {\n        if (params.controllerState) {\n            this.importState(params.controllerState);\n            Object.assign(params, this.searchModel.get('query'));\n        }\n        return this.update(params, {});\n    },\n    /**\n     * This is the main entry point for the controller.  Changes from the search\n     * view arrive in this method, and internal changes can sometimes also call\n     * this method.  It is basically the way everything notifies the controller\n     * that something has changed.\n     *\n     * The update method is responsible for fetching necessary data, then\n     * updating the renderer and wait for the rendering to complete.\n     *\n     * @param {Object} params will be given to the model and to the renderer\n     * @param {Object} [options={}]\n     * @param {boolean} [options.reload=true] if true, the model will reload data\n     * @returns {Promise}\n     */\n    async update(params, options = {}) {\n        const shouldReload = 'reload' in options ? options.reload : true;\n        if (shouldReload) {\n            this.handle = await this.dp.add(this.model.reload(this.handle, params));\n        }\n        const localState = this.renderer.getLocalState();\n        const state = this.model.get(this.handle, { withSampleData: true });\n        const promises = [\n            this._updateRendererState(state, params).then(() => {\n                this.renderer.setLocalState(localState);\n            }),\n            this._update(this.model.get(this.handle), params)\n        ];\n        await this.dp.add(Promise.all(promises));\n        this.updateButtons();\n        this.el.classList.toggle('o_view_sample_data', this.model.isInSampleMode());\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n\n    /**\n     * Meant to be overriden to return a proper object.\n     * @private\n     * @param {Object} [state]\n     * @return {(Object|null)}\n     */\n    _getPagingInfo: function (state) {\n        return null;\n    },\n    /**\n     * Meant to be overriden to return a proper object.\n     * @private\n     * @param {Object} [state]\n     * @return {(Object|null)}\n     */\n    _getActionMenuItems: function (state) {\n        return null;\n    },\n    /**\n     * Gives the focus to the renderer if not in sample mode.\n     *\n     * @private\n     */\n    _giveFocus() {\n        if (!this.model.isInSampleMode()) {\n            this.renderer.giveFocus();\n        }\n    },\n    /**\n     * This method is the way a view can notifies the outside world that\n     * something has changed.  The main use for this is to update the url, for\n     * example with a new id.\n     *\n     * @private\n     */\n    _pushState: function () {\n        this.trigger_up('push_state', {\n            controllerID: this.controllerID,\n            state: this.getState(),\n        });\n    },\n    /**\n     * @private\n     * @param {function} callback function to execute before removing classname\n     *   'o_view_sample_data' (may be async). This allows to reload and/or\n     *   rerender before removing the className, thus preventing the view from\n     *   flickering.\n     */\n    async _removeSampleData(callback) {\n        this.model.leaveSampleMode();\n        if (callback) {\n            await callback();\n        }\n        this.el.classList.remove('o_view_sample_data');\n    },\n    /**\n     * Renders the html provided by the route specified by the\n     * bannerRoute attribute on the controller (banner_route in the template).\n     * Renders it before the view output and add a css class 'o_has_banner' to it.\n     * There can be only one banner displayed at a time.\n     *\n     * If the banner contains stylesheet links or js files, they are moved to <head>\n     * (and will only be fetched once).\n     *\n     * Route example:\n     * @http.route('/module/hello', auth='user', type='json')\n     * def hello(self):\n     *     return {'html': '<h1>hello, world</h1>'}\n     *\n     * @private\n     * @returns {Promise}\n     */\n    _renderBanner: async function () {\n        if (this.bannerRoute !== undefined) {\n            const response = await this._rpc({\n                route: this.bannerRoute,\n                params: {context: session.user_context},\n            });\n            if (!response.html) {\n                this.$el.removeClass('o_has_banner');\n                return Promise.resolve();\n            }\n            this.$el.addClass('o_has_banner');\n            var $banner = $(response.html);\n            // we should only display one banner at a time\n            if (this._$banner && this._$banner.remove) {\n                this._$banner.remove();\n            }\n            // Css and js are moved to <head>\n            var defs = [];\n            $('link[rel=\"stylesheet\"]', $banner).each(function (i, link) {\n                defs.push(ajax.loadCSS(link.href));\n                link.remove();\n            });\n            $('script[type=\"text/javascript\"]', $banner).each(function (i, js) {\n                defs.push(ajax.loadJS(js.src));\n                js.remove();\n            });\n            await Promise.all(defs);\n            $banner.insertBefore(this.$('> .o_content'));\n            this._$banner = $banner;\n        }\n    },\n    /**\n     * @override\n     * @private\n     */\n    _startRenderer: function () {\n        if (this.renderer instanceof owl.Component) {\n            return this.renderer.mount(this.$('.o_content')[0]);\n        }\n        return this.renderer.appendTo(this.$('.o_content'));\n    },\n    /**\n     * This method is called after each update or when the start method is\n     * completed.\n     *\n     * Its primary use is to be used as a hook to update all parts of the UI,\n     * besides the renderer.  For example, it may be used to enable/disable\n     * some buttons in the control panel, such as the current graph type for a\n     * graph view.\n     *\n     * FIXME: this hook should be synchronous, and called once async rendering\n     * has been done.\n     *\n     * @private\n     * @param {Object} state the state given by the model\n     * @param {Object} [params={}]\n     * @param {Array} [params.breadcrumbs]\n     * @param {Object} [params.shouldUpdateSearchComponents]\n     * @returns {Promise}\n     */\n    async _update(state, params) {\n        // AAB: update the control panel -> this will be moved elsewhere at some point\n        if (!this.$buttons) {\n            this.renderButtons();\n        }\n        const promises = [this._renderBanner()];\n        if (params.shouldUpdateSearchComponents !== false) {\n            if (this.withControlPanel) {\n                this._updateControlPanelProps(state);\n                if (params.breadcrumbs) {\n                    this.controlPanelProps.breadcrumbs = params.breadcrumbs;\n                }\n                promises.push(this.updateControlPanel());\n            }\n            if (this.withSearchPanel) {\n                this._updateSearchPanel();\n            }\n        }\n        this._pushState();\n        await Promise.all(promises);\n    },\n    /**\n     * Can be used to update the key 'cp_content'. This method is called in start and _update methods.\n     *\n     * @private\n     * @param {Object} state the state given by the model\n     */\n     _updateControlPanelProps(state) {\n        if (!this.controlPanelProps.cp_content) {\n            this.controlPanelProps.cp_content = {};\n        }\n        if (this.$buttons) {\n            this.controlPanelProps.cp_content.$buttons = this.$buttons;\n        }\n        Object.assign(this.controlPanelProps, {\n            actionMenus: this._getActionMenuItems(state),\n            pager: this._getPagingInfo(state),\n            title: this.getTitle(),\n        });\n    },\n    /**\n     * @private\n     * @param {Object} state\n     * @param {Object} newProps\n     * @returns {Promise}\n     */\n    _updatePaging: async function (state, newProps) {\n        const pagingInfo = this._getPagingInfo(state);\n        if (pagingInfo) {\n            Object.assign(pagingInfo, newProps);\n            return this.updateControlPanel({ pager: pagingInfo });\n        }\n    },\n    /**\n     * Updates the state of the renderer (handle both Widget and Component\n     * renderers).\n     *\n     * @private\n     * @param {Object} state the model state\n     * @param {Object} [params={}] will be given to the model and to the renderer\n     * @return {Promise}\n     */\n    _updateRendererState(state, params = {}) {\n        if (this.renderer instanceof owl.Component) {\n            return this.renderer.update(state);\n        }\n        return this.renderer.updateState(state, params);\n    },\n    /**\n     * @private\n     * @param {Object} [newProps={}]\n     * @return {Promise}\n     */\n    async _updateSearchPanel(newProps) {\n        Object.assign(this.searchPanelProps, newProps);\n        await this._searchPanelWrapper.update(this.searchPanelProps);\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * When a user clicks on an <a> link with type=\"action\", we need to actually\n     * do the action. This kind of links is used a lot in no-content helpers.\n     *\n     * * if the link has both data-model and data-method attributes, the\n     *   corresponding method is called, chained to any action it would\n     *   return. An optional data-reload-on-close (set to a non-falsy value)\n     *   also causes th underlying view to be reloaded after the dialog is\n     *   closed.\n     * * if the link has a name attribute, invoke the action with that\n     *   identifier (see :class:`ActionManager.doAction` to not get the\n     *   details)\n     * * otherwise an *action descriptor* is built from the link's data-\n     *   attributes (model, res-id, views, domain and context)\n     *\n     * @private\n     * @param ev\n     */\n    _onActionClicked: function (ev) { // FIXME: maybe this should also work on <button> tags?\n        ev.preventDefault();\n        var $target = $(ev.currentTarget);\n        var self = this;\n        var data = $target.data();\n\n        if (data.method !== undefined && data.model !== undefined) {\n            var options = {};\n            if (data.reloadOnClose) {\n                options.on_close = function () {\n                    self.trigger_up('reload');\n                };\n            }\n            this.dp.add(this._rpc({\n                model: data.model,\n                method: data.method,\n                context: session.user_context,\n            })).then(function (action) {\n                if (action !== undefined) {\n                    self.do_action(action, options);\n                }\n            });\n        } else if ($target.attr('name')) {\n            this.do_action(\n                $target.attr('name'),\n                data.context && {additional_context: data.context}\n            );\n        } else {\n            this.do_action({\n                name: $target.attr('title') || _.str.strip($target.text()),\n                type: 'ir.actions.act_window',\n                res_model: data.model || this.modelName,\n                res_id: data.resId,\n                target: 'current', // TODO: make customisable?\n                views: data.views || (data.resId ? [[false, 'form']] : [[false, 'list'], [false, 'form']]),\n                domain: data.domain || [],\n            }, {\n                additional_context: _.extend({}, data.context)\n            });\n        }\n    },\n    /**\n     * Called either from the control panel to focus the controller\n     * or from the view to focus the search bar\n     *\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onNavigationMove: function (ev) {\n        switch (ev.data.direction) {\n            case 'up':\n                ev.stopPropagation();\n                this.searchModel.trigger('focus-control-panel');\n                break;\n            case 'down':\n                ev.stopPropagation();\n                this._giveFocus();\n                break;\n        }\n    },\n    /**\n     * When an Odoo event arrives requesting a record to be opened, this method\n     * gets the res_id, and request a switch view in the appropriate mode\n     *\n     * Note: this method seems wrong, it relies on the model being a basic model,\n     * to get the res_id.  It should receive the res_id in the event data\n     * @todo move this to basic controller?\n     *\n     * @private\n     * @param {OdooEvent} ev\n     * @param {number} ev.data.id The local model ID for the record to be\n     *   opened\n     * @param {string} [ev.data.mode='readonly']\n     */\n    _onOpenRecord: function (ev) {\n        ev.stopPropagation();\n        var record = this.model.get(ev.data.id, {raw: true});\n        this.trigger_up('switch_view', {\n            view_type: 'form',\n            res_id: record.res_id,\n            mode: ev.data.mode || 'readonly',\n            model: this.modelName,\n        });\n    },\n    /**\n     * Called when there is a change in the search view, so the current action's\n     * environment needs to be updated with the new domain, context, groupby,...\n     *\n     * @private\n     * @param {Object} searchQuery\n     */\n    _onSearch: function (searchQuery) {\n        this.reload(_.extend({ offset: 0, groupsOffset: 0 }, searchQuery));\n    },\n    /**\n     * Intercepts the 'switch_view' event to add the controllerID into the data,\n     * and lets the event bubble up.\n     *\n     * @param {OdooEvent} ev\n     */\n    _onSwitchView: function (ev) {\n        ev.data.controllerID = this.controllerID;\n    },\n});\n\nexport default AbstractController;\n", "/** @odoo-module alias=web.AbstractModel **/\n\n/**\n * An AbstractModel is the M in MVC.  We tend to think of MVC more on the server\n * side, but we are talking here on the web client side.\n *\n * The duties of the Model are to fetch all relevant data, and to make them\n * available for the rest of the view.  Also, every modification to that data\n * should pass through the model.\n *\n * Note that the model is not a widget, it does not need to be rendered or\n * appended to the dom.  However, it inherits from the EventDispatcherMixin,\n * in order to be able to notify its parent by bubbling events up.\n *\n * The model is able to generate sample (fake) data when there is no actual data\n * in database.  This feature can be activated by instantiating the model with\n * param \"useSampleModel\" set to true.  In this case, the model instantiates a\n * duplicated version of itself, parametrized to call a SampleServer (JS)\n * instead of doing RPCs.  Here is how it works: the main model first load the\n * data normally (from database), and then checks whether the result is empty or\n * not.  If it is, it asks the sample model to load with the exact same params,\n * and it thus enters in \"sample\" mode.  The model keeps doing this at reload,\n * but only if the (re)load params haven't changed: as soon as a param changes,\n * the \"sample\" mode is left, and it never enters it again in the future (in the\n * lifetime of the model instance).  To access those sample data from the outside,\n * 'get' must be called with the the option \"withSampleData\" set to true.  In\n * this case, if the main model is in \"sample\" mode, it redirects the call to the\n * sample model.\n */\n\nimport fieldUtils from 'web.field_utils';\nimport mvc from 'web.mvc';\nimport SampleServer from 'web.SampleServer';\n\n\nvar AbstractModel = mvc.Model.extend({\n    /**\n     * @param {Widget} parent\n     * @param {Object} [params={}]\n     * @param {Object} [params.fields]\n     * @param {string} [params.modelName]\n     * @param {boolean} [params.isSampleModel=false] if true, will fetch data\n     *   from a SampleServer instead of doing RPCs\n     * @param {boolean} [params.useSampleModel=false] if true, will use a sample\n     *   model to generate sample data when there is no \"real\" data in database\n     * @param {AbstractModel} [params.SampleModel] the AbstractModel class\n     *   to instantiate as sample model. This model won't do any rpc, but will\n     *   rather call a SampleServer that will generate sample data. This param\n     *   must be set when params.useSampleModel is true.\n     */\n    init(parent, params = {}) {\n        this._super(...arguments);\n        this.useSampleModel = params.useSampleModel || false;\n        if (params.isSampleModel) {\n            this.isSampleModel = true;\n            this.sampleServer = new SampleServer(params.modelName, params.fields);\n        } else if (this.useSampleModel) {\n            const sampleModelParams = Object.assign({}, params, {\n                isSampleModel: true,\n                SampleModel: null,\n                useSampleModel: false,\n            });\n            this.sampleModel = new params.SampleModel(this, sampleModelParams);\n            this._isInSampleMode = false;\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Override to call get on the sampleModel when we are in sample mode, and\n     * option 'withSampleData' is set to true.\n     *\n     * @override\n     * @param {any} _\n     * @param {Object} [options]\n     * @param {boolean} [options.withSampleData=false]\n     */\n    get(_, options) {\n        let state;\n        if (options && options.withSampleData && this._isInSampleMode) {\n            state = this.sampleModel.__get(...arguments);\n        } else {\n            state = this.__get(...arguments);\n        }\n        return state;\n    },\n    /**\n     * Under some conditions, the model is designed to generate sample data if\n     * there is no real data in database. This function returns a boolean which\n     * indicates the mode of the model: if true, we are in \"sample\" mode.\n     *\n     * @returns {boolean}\n     */\n    isInSampleMode() {\n        return !!this._isInSampleMode;\n    },\n    /**\n     * Disables the sample data (forever) on this model instance.\n     */\n    leaveSampleMode() {\n        if (this.useSampleModel) {\n            this.useSampleModel = false;\n            this._isInSampleMode = false;\n            this.sampleModel.destroy();\n        }\n    },\n    /**\n     * Override to check if we need to call the sample model (and if so, to do\n     * it) after loading the data, in the case where there is no real data to\n     * display.\n     *\n     * @override\n     */\n    async load(params) {\n        this.loadParams = params;\n        const handle = await this.__load(...arguments);\n        await this._callSampleModel('__load', handle, ...arguments);\n        return handle;\n    },\n    /**\n     * When something changes, the data may need to be refetched.  This is the\n     * job for this method: reloading (only if necessary) all the data and\n     * making sure that they are ready to be redisplayed.\n     * Sometimes, we reload the data with the \"same\" params as the initial load\n     * params (see '_haveParamsChanged'). When we do, if we were in \"sample\" mode,\n     * we call again the sample server after the reload if there is still no data\n     * to display. When the parameters change, we automatically leave \"sample\"\n     * mode.\n     *\n     * @param {any} _\n     * @param {Object} [params]\n     * @returns {Promise}\n     */\n    async reload(_, params) {\n        const handle = await this.__reload(...arguments);\n        if (this._isInSampleMode) {\n            if (!this._haveParamsChanged(params)) {\n                await this._callSampleModel('__reload', handle, ...arguments);\n            } else {\n                this.leaveSampleMode();\n            }\n        }\n        return handle;\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {string} method\n     * @param {any} handle\n     * @param  {...any} args\n     * @returns {Promise}\n     */\n    async _callSampleModel(method, handle, ...args) {\n        if (this.useSampleModel && this._isEmpty(handle)) {\n            try {\n                if (method === '__load') {\n                    await this.sampleModel.__load(...args);\n                } else if (method === '__reload') {\n                    await this.sampleModel.__reload(...args);\n                }\n                this._isInSampleMode = true;\n            } catch (error) {\n                if (error instanceof SampleServer.UnimplementedRouteError) {\n                    this.leaveSampleMode();\n                } else {\n                    throw error;\n                }\n            }\n        } else {\n            this.leaveSampleMode();\n        }\n    },\n    /**\n     * @private\n     * @returns {Object}\n     */\n    __get() {\n        return {};\n    },\n    /**\n     * This function can be overriden to determine if the result of a load or\n     * a reload is empty. In the affirmative, we will try to generate sample\n     * data to prevent from having an empty state to display.\n     *\n     * @private\n     * @params {any} handle, the value returned by a load or a reload\n     * @returns {boolean}\n     */\n    _isEmpty(/* handle */) {\n        return false;\n    },\n    /**\n     * To override to do the initial load of the data (this function is supposed\n     * to be called only once).\n     *\n     * @private\n     * @returns {Promise}\n     */\n    async __load() {\n        return Promise.resolve();\n    },\n    /**\n     * Processes date(time) and selection field values sent by the server.\n     * Converts data(time) values to moment instances.\n     * Converts false values of selection fields to 0 if 0 is a valid key,\n     * because the server doesn't make a distinction between false and 0, and\n     * always sends false when value is 0.\n     *\n     * @param {Object} field the field description\n     * @param {*} value\n     * @returns {*} the processed value\n     */\n    _parseServerValue: function (field, value) {\n        if (field.type === 'date' || field.type === 'datetime') {\n            // process date(time): convert into a moment instance\n            value = fieldUtils.parse[field.type](value, field, {isUTC: true});\n        } else if (field.type === 'selection' && value === false) {\n            // process selection: convert false to 0, if 0 is a valid key\n            var hasKey0 = _.find(field.selection, function (option) {\n                return option[0] === 0;\n            });\n            value = hasKey0 ? 0 : value;\n        }\n        return value;\n    },\n    /**\n     * To override to reload data (this function may be called several times,\n     * after the initial load has been done).\n     *\n     * @private\n     * @returns {Promise}\n     */\n    async __reload() {\n        return Promise.resolve();\n    },\n    /**\n     * Determines whether or not the given params (reload params) differ from\n     * the initial ones (this.loadParams). This is used to leave \"sample\" mode\n     * as soon as a parameter (e.g. domain) changes.\n     *\n     * @private\n     * @param {Object} [params={}]\n     * @param {Object} [params.context]\n     * @param {Array[]} [params.domain]\n     * @param {Object} [params.timeRanges]\n     * @param {string[]} [params.groupBy]\n     * @returns {boolean}\n     */\n    _haveParamsChanged(params = {}) {\n        for (const key of ['context', 'domain', 'timeRanges']) {\n            if (key in params) {\n                const diff = JSON.stringify(params[key]) !== JSON.stringify(this.loadParams[key]);\n                if (diff) {\n                    return true;\n                }\n            }\n        }\n        if (this.useSampleModel && 'groupBy' in params) {\n            return JSON.stringify(params.groupBy) !== JSON.stringify(this.loadParams.groupedBy);\n        }\n    },\n    /**\n     * Override to redirect all rpcs to the SampleServer if this.isSampleModel\n     * is true.\n     *\n     * @override\n     */\n    async _rpc() {\n        if (this.isSampleModel) {\n            return this.sampleServer.mockRpc(...arguments);\n        }\n        return this._super(...arguments);\n    },\n});\n\nexport default AbstractModel;\n", "/** @odoo-module alias=web.AbstractRenderer **/\n\n/**\n * The renderer should not handle pagination, data loading, or coordination\n * with the control panel. It is only concerned with rendering.\n *\n */\n\nimport * as mvc from 'web.mvc';\n\n// Renderers may display sample data when there is no real data to display. In\n// this case the data is displayed with opacity and can't be clicked. Moreover,\n// we also want to prevent the user from accessing DOM elements with TAB\n// navigation. This is the list of elements we won't allow to focus.\nconst FOCUSABLE_ELEMENTS = [\n    // focusable by default\n    'a', 'button', 'input', 'select', 'textarea',\n    // manually set\n    '[tabindex=\"0\"]'\n].map((sel) => `:scope ${sel}`).join(', ');\n\n/**\n * @class AbstractRenderer\n */\nexport default mvc.Renderer.extend({\n    // Defines the elements suppressed when in demo data. This must be a list\n    // of DOM selectors matching view elements that will:\n    // 1. receive the 'o_sample_data_disabled' class (greyd out & no user events)\n    // 2. have themselves and any of their focusable children removed from the\n    //    tab navigation\n    sampleDataTargets: [],\n\n    /**\n     * @override\n     * @param {string} [params.noContentHelp]\n     */\n    init: function (parent, state, params) {\n        this._super.apply(this, arguments);\n        this.arch = params.arch;\n        this.noContentHelp = params.noContentHelp;\n        this.withSearchPanel = params.withSearchPanel;\n    },\n    /**\n     * The rendering is asynchronous. The start\n     * method simply makes sure that we render the view.\n     *\n     * @returns {Promise}\n     */\n    async start() {\n        this.$el.addClass(this.arch.attrs.class);\n        if (this.withSearchPanel) {\n            this.$el.addClass('o_renderer_with_searchpanel');\n        }\n        await Promise.all([this._render(), this._super()]);\n    },\n    /**\n     * Called each time the renderer is attached into the DOM.\n     */\n    on_attach_callback: function () {},\n    /**\n     * Called each time the renderer is detached from the DOM.\n     */\n    on_detach_callback: function () {},\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Returns any relevant state that the renderer might want to keep.\n     *\n     * The idea is that a renderer can be destroyed, then be replaced by another\n     * one instantiated with the state from the model and the localState from\n     * the renderer, and the end result should be the same.\n     *\n     * The kind of state that we expect the renderer to have is mostly DOM state\n     * such as the scroll position, the currently active tab page, ...\n     *\n     * This method is called before each updateState, by the controller.\n     *\n     * @see setLocalState\n     * @returns {any}\n     */\n    getLocalState: function () {\n    },\n    /**\n     * Order to focus to be given to the content of the current view\n     */\n    giveFocus: function () {\n    },\n    /**\n     * Resets state that renderer keeps, state may contains scroll position,\n     * the currently active tab page, ...\n     *\n     * @see getLocalState\n     * @see setLocalState\n     */\n    resetLocalState() {\n    },\n    /**\n     * This is the reverse operation from getLocalState.  With this method, we\n     * expect the renderer to restore all DOM state, if it is relevant.\n     *\n     * This method is called after each updateState, by the controller.\n     *\n     * @see getLocalState\n     * @param {any} localState the result of a call to getLocalState\n     */\n    setLocalState: function (localState) {\n    },\n    /**\n     * Updates the state of the view. It retriggers a full rerender, unless told\n     * otherwise (for optimization for example).\n     *\n     * @param {any} state\n     * @param {Object} params\n     * @param {boolean} [params.noRender=false]\n     *        if true, the method only updates the state without rerendering\n     * @returns {Promise}\n     */\n    async updateState(state, params) {\n        this._setState(state);\n        if (!params.noRender) {\n            await this._render();\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Renders the widget. This method can be overriden to perform actions\n     * before or after the view has been rendered.\n     *\n     * @private\n     * @returns {Promise}\n     */\n    async _render() {\n        await this._renderView();\n        this._suppressFocusableElements();\n    },\n    /**\n     * @private\n     * @param {Object} [context]\n     */\n    _renderNoContentHelper: function (context) {\n        let templateName;\n        if (!context && this.noContentHelp) {\n            templateName = \"web.ActionHelper\";\n            context = { noContentHelp: this.noContentHelp };\n        } else {\n            templateName = \"web.NoContentHelper\";\n        }\n        const template = document.createElement('template');\n        // FIXME: retrieve owl qweb instance via the env set on Component s.t.\n        // it also works in the tests (importing 'web.env' wouldn't). This\n        // won't be necessary as soon as this will be written in owl.\n        const owlQWeb = owl.Component.env.qweb;\n        template.innerHTML = owlQWeb.renderToString(templateName, context);\n        this.el.append(template.content.firstChild);\n    },\n    /**\n     * Actual rendering. This method is meant to be overridden by concrete\n     * renderers.\n     *\n     * @abstract\n     * @private\n     * @returns {Promise}\n     */\n    async _renderView() { },\n    /**\n     * Assigns a new state to the renderer if not false.\n     *\n     * @private\n     * @param {any} [state=false]\n     */\n    _setState(state = false) {\n        if (state !== false) {\n            this.state = state;\n        }\n    },\n    /**\n     * Suppresses 'tabindex' property on any focusable element located inside\n     * root elements defined in the `this.sampleDataTargets` object and assigns\n     * the 'o_sample_data_disabled' class to these root elements.\n     *\n     * @private\n     * @see sampleDataTargets\n     */\n    _suppressFocusableElements() {\n        if (!this.state.isSample || this.isEmbedded) {\n            return;\n        }\n        const rootEls = [];\n        for (const selector of this.sampleDataTargets) {\n            rootEls.push(...this.el.querySelectorAll(`:scope ${selector}`));\n        }\n        const focusableEls = new Set(rootEls);\n        for (const rootEl of rootEls) {\n            rootEl.classList.add('o_sample_data_disabled');\n            for (const focusableEl of rootEl.querySelectorAll(FOCUSABLE_ELEMENTS)) {\n                focusableEls.add(focusableEl);\n            }\n        }\n        for (const focusableEl of focusableEls) {\n            focusableEl.setAttribute('tabindex', -1);\n            if (focusableEl.classList.contains('dropdown-item')) {\n                // Tells Bootstrap to ignore the dropdown item in keynav\n                focusableEl.classList.add('disabled');\n            }\n        }\n    },\n});\n", "/** @odoo-module alias=web.AbstractRendererOwl **/\n\n// Renderers may display sample data when there is no real data to display. In\n// this case the data is displayed with opacity and can't be clicked. Moreover,\n// we also want to prevent the user from accessing DOM elements with TAB\n// navigation. This is the list of elements we won't allow to focus.\nconst FOCUSABLE_ELEMENTS = [\n    // focusable by default\n    'a', 'button', 'input', 'select', 'textarea',\n    // manually set\n    '[tabindex=\"0\"]'\n].map((sel) => `:scope ${sel}`).join(', ');\n\nclass AbstractRenderer extends owl.Component {\n\n    constructor() {\n        super(...arguments);\n        // Defines the elements suppressed when in demo data. This must be a list\n        // of DOM selectors matching view elements that will:\n        // 1. receive the 'o_sample_data_disabled' class (greyd out & no user events)\n        // 2. have themselves and any of their focusable children removed from the\n        //    tab navigation\n        this.sampleDataTargets = [];\n    }\n\n    mounted() {\n        this._suppressFocusableElements();\n    }\n\n    patched() {\n        this._suppressFocusableElements();\n    }\n\n    /**\n     * Suppresses 'tabindex' property on any focusable element located inside\n     * root elements defined in the `this.sampleDataTargets` object and assigns\n     * the 'o_sample_data_disabled' class to these root elements.\n     *\n     * @private\n     * @see sampleDataTargets\n     */\n    _suppressFocusableElements() {\n        if (!this.props.isSample || this.props.isEmbedded) {\n            const disabledEls = this.el.querySelectorAll(`.o_sample_data_disabled`);\n            disabledEls.forEach(el => el.classList.remove('o_sample_data_disabled'));\n            return;\n        }\n        const rootEls = [];\n        for (const selector of this.sampleDataTargets) {\n            rootEls.push(...this.el.querySelectorAll(`:scope ${selector}`));\n        }\n        const focusableEls = new Set(rootEls);\n        for (const rootEl of rootEls) {\n            rootEl.classList.add('o_sample_data_disabled');\n            for (const focusableEl of rootEl.querySelectorAll(FOCUSABLE_ELEMENTS)) {\n                focusableEls.add(focusableEl);\n            }\n        }\n        for (const focusableEl of focusableEls) {\n            focusableEl.setAttribute('tabindex', -1);\n            if (focusableEl.classList.contains('dropdown-item')) {\n                // Tells Bootstrap to ignore the dropdown item in keynav\n                focusableEl.classList.add('disabled');\n            }\n        }\n    }\n}\n\nexport default AbstractRenderer;\n", "/** @odoo-module alias=web.AbstractView **/\n\n/**\n * This is the base class inherited by all (JS) views. Odoo JS views are the\n * widgets used to display information in the main area of the web client\n * (note: the search view is not a \"JS view\" in that sense).\n *\n * The abstract view role is to take a set of fields, an arch (the xml\n * describing the view in db), and some params, and then, to create a\n * controller, a renderer and a model.  This is the classical MVC pattern, but\n * the word 'view' has historical significance in Odoo code, so we replaced the\n * V in MVC by the 'renderer' word.\n *\n * JS views are supposed to be used like this:\n * 1. instantiate a view with some arch, fields and params\n * 2. call the getController method on the view instance. This returns a\n *    controller (with a model and a renderer as sub widgets)\n * 3. append the controller somewhere\n *\n * Note that once a controller has been instantiated, the view class is no\n * longer useful (unless you want to create another controller), and will be\n * in most case discarded.\n */\n\nimport ActionModel from \"web.ActionModel\";\nimport AbstractModel from './abstract_model';\nimport AbstractRenderer from './abstract_renderer';\nimport AbstractController from './abstract_controller';\nimport ControlPanel from 'web.ControlPanel';\nimport SearchPanel from \"web.searchPanel\";\nimport mvc from 'web.mvc';\nimport viewUtils from 'web.viewUtils';\n\nconst { Component } = owl;\n\nvar Factory = mvc.Factory;\n\nvar AbstractView = Factory.extend({\n    // name displayed in view switchers\n    display_name: '',\n    // indicates whether or not the view is mobile-friendly\n    mobile_friendly: false,\n    // icon is the font-awesome icon to display in the view switcher\n    icon: 'fa-question',\n    // multi_record is used to distinguish views displaying a single record\n    // (e.g. FormView) from those that display several records (e.g. ListView)\n    multi_record: true,\n    // viewType is the type of the view, like 'form', 'kanban', 'list'...\n    viewType: undefined,\n    // determines if a search bar is available\n    withSearchBar: true,\n    // determines the search menus available and their orders\n    searchMenuTypes: ['filter', 'groupBy', 'favorite'],\n    // determines if a control panel should be instantiated\n    withControlPanel: true,\n    // determines if a search panel could be instantiated\n    withSearchPanel: true,\n    // determines the MVC components to use\n    config: _.extend({}, Factory.prototype.config, {\n        Model: AbstractModel,\n        Renderer: AbstractRenderer,\n        Controller: AbstractController,\n        ControlPanel,\n        SearchPanel,\n    }),\n\n    /**\n     * The constructor function is supposed to set 3 variables: rendererParams,\n     * controllerParams and loadParams.  These values will be used to initialize\n     * the model, renderer and controllers.\n     *\n     * @constructs AbstractView\n     *\n     * @param {Object} viewInfo\n     * @param {Object|string} viewInfo.arch\n     * @param {Object} viewInfo.fields\n     * @param {Object} viewInfo.fieldsInfo\n     * @param {Object} params\n     * @param {string} [params.modelName]\n     * @param {Object} [params.action={}]\n     * @param {Object} [params.context={}]\n     * @param {string} [params.controllerID]\n     * @param {number} [params.count]\n     * @param {number} [params.currentId]\n     * @param {Object} [params.controllerState]\n     * @param {string} [params.displayName]\n     * @param {Array[]} [params.domain=[]]\n     * @param {Object[]} [params.dynamicFilters] transmitted to the\n     *   ControlPanel\n     * @param {boolean} [params.editable]\n     * @param {number[]} [params.ids]\n     * @param {boolean} [params.isEmbedded=false]\n     * @param {Object} [params.searchQuery={}]\n     * @param {Object} [params.searchQuery.context={}]\n     * @param {Array[]} [params.searchQuery.domain=[]]\n     * @param {string[]} [params.searchQuery.groupBy=[]]\n     * @param {Object} [params.userContext={}]\n     * @param {boolean} [params.useSampleModel]\n     * @param {boolean} [params.withControlPanel=AbstractView.prototype.withControlPanel]\n     * @param {boolean} [params.withSearchPanel=AbstractView.prototype.withSearchPanel]\n     */\n    init: function (viewInfo, params) {\n        this._super.apply(this, arguments);\n\n        var action = params.action || {};\n        params = _.defaults(params, this._extractParamsFromAction(action));\n\n        // in general, the fieldsView has to be processed by the View (e.g. the\n        // arch is a string that needs to be parsed) ; the only exception is for\n        // inline form views inside form views, as they are processed alongside\n        // the main view, but they are opened in a FormViewDialog which\n        // instantiates another FormView (unlike kanban or list subviews for\n        // which only a Renderer is instantiated)\n        if (typeof viewInfo.arch === 'string') {\n            this.fieldsView = this._processFieldsView(viewInfo);\n        } else {\n            this.fieldsView = viewInfo;\n        }\n        this.arch = this.fieldsView.arch;\n        this.fields = this.fieldsView.viewFields;\n        this.userContext = params.userContext || {};\n\n        // the boolean parameter 'isEmbedded' determines if the view should be\n        // considered as a subview. For now this is only used by the graph\n        // controller that appends a 'Group By' button beside the 'Measures'\n        // button when the graph view is embedded.\n        var isEmbedded = params.isEmbedded || false;\n\n        // The noContentHelper's message can be empty, i.e. either a real empty string\n        // or an empty html tag. In both cases, we consider the helper empty.\n        var help = params.noContentHelp || \"\";\n        var htmlHelp = document.createElement(\"div\");\n        htmlHelp.innerHTML = help;\n        this.rendererParams = {\n            arch: this.arch,\n            isEmbedded: isEmbedded,\n            noContentHelp: htmlHelp.innerText.trim() ? help : \"\",\n        };\n\n        this.controllerParams = {\n            actionViews: params.actionViews,\n            activeActions: {\n                edit: typeof params.editable === 'boolean' ? params.editable : this.arch.attrs.edit ? !!JSON.parse(this.arch.attrs.edit) : true,\n                create: this.arch.attrs.create ? !!JSON.parse(this.arch.attrs.create) : true,\n                delete: this.arch.attrs.delete ? !!JSON.parse(this.arch.attrs.delete) : true,\n                duplicate: this.arch.attrs.duplicate ? !!JSON.parse(this.arch.attrs.duplicate) : true,\n            },\n            bannerRoute: this.arch.attrs.banner_route,\n            controllerID: params.controllerID,\n            displayName: params.displayName,\n            isEmbedded: isEmbedded,\n            modelName: params.modelName,\n            viewType: this.viewType,\n        };\n\n        var controllerState = params.controllerState || {};\n        var currentId = controllerState.currentId || params.currentId;\n        this.loadParams = {\n            context: params.context,\n            count: params.count || ((this.controllerParams.ids !== undefined) &&\n                   this.controllerParams.ids.length) || 0,\n            domain: params.domain,\n            modelName: params.modelName,\n            res_id: currentId,\n            res_ids: controllerState.resIds || params.ids || (currentId ? [currentId] : undefined),\n        };\n\n        const useSampleModel = 'useSampleModel' in params ?\n                                params.useSampleModel :\n                                !!(this.arch.attrs.sample && JSON.parse(this.arch.attrs.sample));\n\n        this.modelParams = {\n            fields: this.fields,\n            modelName: params.modelName,\n            useSampleModel,\n        };\n        if (useSampleModel) {\n            this.modelParams.SampleModel = this.config.Model;\n        }\n\n        var defaultOrder = this.arch.attrs.default_order;\n        if (defaultOrder) {\n            this.loadParams.orderedBy = _.map(defaultOrder.split(','), function (order) {\n                order = order.trim().split(' ');\n                return {name: order[0], asc: order[1] !== 'desc'};\n            });\n        }\n        if (params.searchQuery) {\n            this._updateMVCParams(params.searchQuery);\n        }\n\n        this.withControlPanel = this.withControlPanel && params.withControlPanel;\n        this.withSearchPanel = this.withSearchPanel &&\n            this.multi_record && params.withSearchPanel &&\n            !('search_panel' in params.context && !params.search_panel);\n\n        const searchModelParams = Object.assign({}, params, { action });\n        if (this.withControlPanel || this.withSearchPanel) {\n            const { arch, fields, favoriteFilters } = params.controlPanelFieldsView || {};\n            const archInfo = ActionModel.extractArchInfo({ search: arch }, this.viewType);\n            const controlPanelInfo = archInfo[this.config.ControlPanel.modelExtension];\n            const searchPanelInfo = archInfo[this.config.SearchPanel.modelExtension];\n            this.withSearchPanel = this.withSearchPanel && Boolean(searchPanelInfo);\n            Object.assign(searchModelParams, {\n                fields,\n                favoriteFilters,\n                controlPanelInfo,\n                searchPanelInfo,\n            });\n        }\n        const searchModel = this._createSearchModel(searchModelParams);\n        this.controllerParams.searchModel = searchModel;\n        if (this.controllerParams.controlPanel) {\n            this.controllerParams.controlPanel.props.searchModel = searchModel;\n        }\n        if (this.controllerParams.searchPanel) {\n            this.controllerParams.searchPanel.props.searchModel = searchModel;\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @param {Object} params\n     * @param {Object} extraExtensions\n     * @returns {ActionModel}\n     */\n    _createSearchModel: function (params, extraExtensions) {\n        // Search model + common config\n        const { fields, favoriteFilters, controlPanelInfo, searchPanelInfo } = params;\n        const extensions = Object.assign({}, extraExtensions);\n        const importedState = params.controllerState || {};\n\n        // Control panel params\n        if (this.withControlPanel) {\n            // Control panel (Model)\n            const ControlPanelComponent = this.config.ControlPanel;\n            if (this.withSearchBar) {\n                extensions[ControlPanelComponent.modelExtension] = {\n                    actionId: params.action.id,\n                    // control initialization\n                    activateDefaultFavorite: params.activateDefaultFavorite,\n                    archNodes: controlPanelInfo.children,\n                    dynamicFilters: params.dynamicFilters,\n                    favoriteFilters,\n                    withSearchBar: params.withSearchBar,\n                };\n            }\n            this.controllerParams.withControlPanel = true;\n            // Control panel (Component)\n            const controlPanelProps = {\n                action: params.action,\n                breadcrumbs: params.breadcrumbs,\n                fields,\n                searchMenuTypes: params.searchMenuTypes,\n                view: this.fieldsView,\n                views: params.action.views && params.action.views.filter(\n                    v => v.multiRecord === this.multi_record\n                ),\n                withBreadcrumbs: params.withBreadcrumbs,\n                withSearchBar: params.withSearchBar,\n            };\n            this.controllerParams.controlPanel = {\n                Component: ControlPanelComponent,\n                props: controlPanelProps,\n            };\n        }\n\n        // Search panel params\n        if (this.withSearchPanel) {\n            // Search panel (Model)\n            const SearchPanelComponent = this.config.SearchPanel;\n            extensions[SearchPanelComponent.modelExtension] = {\n                archNodes: searchPanelInfo.children,\n            };\n            this.controllerParams.withSearchPanel = true;\n            this.rendererParams.withSearchPanel = true;\n            // Search panel (Component)\n            const searchPanelProps = {\n                importedState: importedState.searchPanel,\n            };\n            if (searchPanelInfo.attrs.class) {\n                searchPanelProps.className = searchPanelInfo.attrs.class;\n            }\n            this.controllerParams.searchPanel = {\n                Component: SearchPanelComponent,\n                props: searchPanelProps,\n            };\n        }\n\n        const searchModel = new ActionModel(extensions, {\n            env: Component.env,\n            modelName: params.modelName,\n            context: Object.assign({}, this.loadParams.context),\n            domain: this.loadParams.domain || [],\n            importedState: importedState.searchModel,\n            searchMenuTypes: params.searchMenuTypes,\n            searchQuery: params.searchQuery,\n            fields,\n        });\n\n        return searchModel;\n    },\n\n    /**\n     * @override\n     */\n    getController: async function () {\n        const _super = this._super.bind(this);\n        const { searchModel } = this.controllerParams;\n        await searchModel.load();\n        this._updateMVCParams(searchModel.get(\"query\"));\n        // get the parent of the model if it already exists, as _super will\n        // set the new controller as parent, which we don't want\n        const modelParent = this.model && this.model.getParent();\n        const [controller] = await Promise.all([\n            _super(...arguments),\n            searchModel.isReady(),\n        ]);\n        if (modelParent) {\n            // if we already add a model, restore its parent\n            this.model.setParent(modelParent);\n        }\n        return controller;\n    },\n    /**\n     * Ensures that only one instance of AbstractModel is created\n     *\n     * @override\n     */\n    getModel: function () {\n        if (!this.model) {\n            this.model = this._super.apply(this, arguments);\n        }\n        return this.model;\n    },\n    /**\n     * This is useful to customize the actual class to use before calling\n     * createView.\n     *\n     * @param {Controller} Controller\n     */\n    setController: function (Controller) {\n        this.Controller = Controller;\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {Object} [action]\n     * @param {Object} [action.context || {}]\n     * @param {boolean} [action.context.no_breadcrumbs=false]\n     * @param {integer} [action.context.active_id]\n     * @param {integer[]} [action.context.active_ids]\n     * @param {Object} [action.controlPanelFieldsView]\n     * @param {string} [action.display_name]\n     * @param {Array[]} [action.domain=[]]\n     * @param {string} [action.help]\n     * @param {integer} [action.id]\n     * @param {integer} [action.limit]\n     * @param {string} [action.name]\n     * @param {string} [action.res_model]\n     * @param {string} [action.target]\n     * @param {boolean} [action.useSampleModel]\n     * @returns {Object}\n     */\n    _extractParamsFromAction: function (action) {\n        action = action || {};\n        var context = action.context || {};\n        var inline = action.target === 'inline';\n        const params = {\n            actionId: action.id || false,\n            actionViews: action.views || [],\n            activateDefaultFavorite: !context.active_id && !context.active_ids,\n            context: action.context || {},\n            controlPanelFieldsView: action.controlPanelFieldsView,\n            currentId: action.res_id ? action.res_id : undefined,  // load returns 0\n            displayName: action.display_name || action.name,\n            domain: action.domain || [],\n            limit: action.limit,\n            modelName: action.res_model,\n            noContentHelp: action.help,\n            searchMenuTypes: inline ? [] : this.searchMenuTypes,\n            withBreadcrumbs: 'no_breadcrumbs' in context ? !context.no_breadcrumbs : true,\n            withControlPanel: this.withControlPanel,\n            withSearchBar: inline ? false : this.withSearchBar,\n            withSearchPanel: this.withSearchPanel,\n        };\n        if ('useSampleModel' in action) {\n            params.useSampleModel = action.useSampleModel;\n        }\n        return params;\n    },\n    /**\n     * Processes a fieldsView. In particular, parses its arch.\n     *\n     * @private\n     * @param {Object} fieldsView\n     * @param {string} fieldsView.arch\n     * @returns {Object} the processed fieldsView\n     */\n    _processFieldsView: function (fieldsView) {\n        var fv = _.extend({}, fieldsView);\n        fv.arch = viewUtils.parseArch(fv.arch);\n        fv.viewFields = _.defaults({}, fv.viewFields, fv.fields);\n        return fv;\n    },\n    /**\n     * Hook to update the renderer, controller and load params with the result\n     * of a search (i.e. a context, a domain and a groupBy).\n     *\n     * @private\n     * @param {Object} searchQuery\n     * @param {Object} searchQuery.context\n     * @param {Object} [searchQuery.timeRanges]\n     * @param {Array[]} searchQuery.domain\n     * @param {string[]} searchQuery.groupBy\n     */\n    _updateMVCParams: function (searchQuery) {\n        this.loadParams = _.extend(this.loadParams, {\n            context: searchQuery.context,\n            domain: searchQuery.domain,\n            groupedBy: searchQuery.groupBy,\n        });\n        this.loadParams.orderedBy = Array.isArray(searchQuery.orderedBy) && searchQuery.orderedBy.length ?\n                                        searchQuery.orderedBy :\n                                        this.loadParams.orderedBy;\n        if (searchQuery.timeRanges) {\n            this.loadParams.timeRanges = searchQuery.timeRanges;\n            this.rendererParams.timeRanges = searchQuery.timeRanges;\n        }\n    },\n});\n\nexport default AbstractView;\n", "/** @odoo-module alias=web.ActionModel **/\n\n    import Domain from \"web.Domain\";\n    import { FACET_ICONS } from \"web.searchUtils\";\n    import { Model } from \"web.Model\";\n    import { parseArch } from \"web.viewUtils\";\n    import pyUtils from \"web.py_utils\";\n    import Registry from \"web.Registry\";\n\n    const isNotNull = (value) => value !== null && value !== undefined;\n    const isObject = (obj) => typeof obj === \"object\" && obj !== null;\n\n    /**\n     * @extends Model.Extension\n     */\n    class ActionModelExtension extends Model.Extension {\n\n        //---------------------------------------------------------------------\n        // Public\n        //---------------------------------------------------------------------\n\n        /**\n         * Initiates the asynchronous tasks of the extension and returns a\n         * promise resolved as soon as all the informations necessary to build\n         * the search query are ready.\n         * @returns {Promise}\n         */\n        async callLoad() {\n            this.loadPromise = super.callLoad(...arguments);\n            await this.loadPromise;\n        }\n\n        /**\n         * Returns a promise resolved when the extension is completely ready.\n         * @returns {Promise}\n         */\n        async isReady() {\n            await this.loadPromise;\n        }\n\n        //---------------------------------------------------------------------\n        // Static\n        //---------------------------------------------------------------------\n\n        /**\n         * @abstract\n         * @param {Object} archs\n         * @param {string | null} [viewType=null]\n         * @returns {null}\n         */\n        static extractArchInfo() {\n            return null;\n        }\n    }\n\n    /**\n     * @extends Model\n     */\n    class ActionModel extends Model {\n\n        //---------------------------------------------------------------------\n        // Public\n        //---------------------------------------------------------------------\n\n        /**\n         * @override\n         */\n        get(property) {\n            switch (property) {\n                case \"query\": return this.config.searchQuery || this._getQuery();\n                case \"facets\": return this._getFacets();\n            }\n            return super.get(...arguments);\n        }\n\n        /**\n         * Returns a promise resolved when all extensions are completely ready.\n         * @returns {Promise}\n         */\n        async isReady() {\n            await this._awaitExtensions();\n        }\n\n        //---------------------------------------------------------------------\n        // Private\n        //---------------------------------------------------------------------\n\n        /**\n         * @private\n         * @returns {Promise}\n         */\n        async _awaitExtensions() {\n            await Promise.all(this.extensions.flat().map(\n                (extension) => extension.isReady()\n            ));\n        }\n\n        /**\n         * @override\n         */\n        __get(excluded, property) {\n            const results = super.__get(...arguments);\n            switch (property) {\n                case \"domain\": return [this.config.domain, ...results];\n                case \"context\": return [this.config.context, ...results];\n            }\n            return results;\n        }\n\n        /**\n         * Validates and formats all facets given by the extensions. This is\n         * done here rather than in the search bar because the searchMenuTypes\n         * are available only to the model.\n         * @private\n         * @returns {Object[]}\n         */\n        _getFacets() {\n            const types = this.config.searchMenuTypes || [];\n            const isValidType = (type) => (\n                !['groupBy', 'comparison'].includes(type) || types.includes(type)\n            );\n            const facets = [];\n            for (const extension of this.extensions.flat()) {\n                for (const facet of extension.get(\"facets\") || []) {\n                    if (!isValidType(facet.type)) {\n                        continue;\n                    }\n                    facet.separator = facet.type === 'groupBy' ? \">\" : this.env._t(\"or\");\n                    if (facet.type in FACET_ICONS) {\n                        facet.icon = FACET_ICONS[facet.type];\n                    }\n                    facets.push(facet);\n                }\n            }\n            return facets;\n        }\n\n        /**\n         * @typedef TimeRanges\n         * @property {string} fieldName\n         * @property {string} comparisonRangeId\n         * @property {Array[]} range\n         * @property {string} rangeDescription\n         * @property {Array[]} comparisonRange\n         * @property {string} comparisonRangeDescription\n         */\n        /**\n         * @typedef Query\n         * @property {Object} context\n         * @property {Array[]} domain\n         * @property {string[]} groupBy\n         * @property {string[]} orderedBy\n         * @property {TimeRanges?} timeRanges\n         */\n        /**\n         * @private\n         * @returns {Query}\n         */\n        _getQuery() {\n            const evalContext = this.env.session.user_context;\n            const contexts = this.__get(null, \"context\");\n            const domains = this.__get(null, \"domain\");\n            const query = {\n                context: pyUtils.eval(\"contexts\", contexts, evalContext),\n                domain: Domain.prototype.normalizeArray(\n                    pyUtils.eval(\"domains\", domains, evalContext)\n                ),\n                orderedBy: this.get(\"orderedBy\") || [],\n            };\n            const searchMenuTypes = this.config.searchMenuTypes || [];\n            if (searchMenuTypes.includes(\"groupBy\")) {\n                query.groupBy = this.get(\"groupBy\") || [];\n            } else {\n                query.groupBy = [];\n            }\n            if (searchMenuTypes.includes(\"comparison\")) {\n                query.timeRanges = this.get(\"timeRanges\") || {};\n            }\n            return query;\n        }\n\n        /**\n         * Overridden to trigger a \"search\" event as soon as the query data\n         * are ready.\n         * @override\n         */\n        async _loadExtensions({ isInitialLoad }) {\n            await super._loadExtensions(...arguments);\n            if (!isInitialLoad) {\n                this.trigger(\"search\", this.get(\"query\"));\n                await this._awaitExtensions();\n            }\n        }\n\n        //---------------------------------------------------------------------\n        // Static\n        //---------------------------------------------------------------------\n\n        /**\n         * @param {Object} archs\n         * @param {string | null} [viewType=null]\n         * @returns {Object}\n         */\n        static extractArchInfo(archs, viewType = null) {\n            const parsedArchs = {};\n            if (!archs.search) {\n                archs.search = \"<search/>\";\n            }\n            for (const key in archs) {\n                const { attrs, children } = parseArch(archs[key]);\n                const objectChildren = children.filter(isObject);\n                parsedArchs[key] = {\n                    attrs,\n                    children: objectChildren,\n                };\n            }\n            const archInfo = {};\n            for (const key of this.registry.keys()) {\n                const extension = this.registry.get(key);\n                const result = extension.extractArchInfo(parsedArchs, viewType);\n                if (isNotNull(result)) {\n                    archInfo[key] = result;\n                }\n            }\n            return archInfo;\n        }\n    }\n\n    ActionModel.Extension = ActionModelExtension;\n    ActionModel.registry = new Registry(null,\n        (value) => value.prototype instanceof ActionModel.Extension\n    );\n\n    export default ActionModel;\n", "odoo.define('web.BasicController', function (require) {\n\"use strict\";\n\n/**\n * The BasicController is mostly here to share code between views that will use\n * a BasicModel (or a subclass).  Currently, the BasicViews are the form, list\n * and kanban views.\n */\n\nvar AbstractController = require('web.AbstractController');\nvar core = require('web.core');\nvar Dialog = require('web.Dialog');\nvar FieldManagerMixin = require('web.FieldManagerMixin');\nvar {Markup} = require('web.utils');\nvar TranslationDialog = require('web.TranslationDialog');\n\nvar _t = core._t;\n\nvar BasicController = AbstractController.extend(FieldManagerMixin, {\n    events: Object.assign({}, AbstractController.prototype.events, {\n        'click .o_content': '_onContentClicked',\n    }),\n    custom_events: _.extend({}, AbstractController.prototype.custom_events, FieldManagerMixin.custom_events, {\n        discard_changes: '_onDiscardChanges',\n        pager_changed: '_onPagerChanged',\n        reload: '_onReload',\n        resequence_records: '_onResequenceRecords',\n        set_dirty: '_onSetDirty',\n        load_optional_fields: '_onLoadOptionalFields',\n        save_optional_fields: '_onSaveOptionalFields',\n        translate: '_onTranslate',\n    }),\n    /**\n     * @override\n     * @param {Object} params\n     * @param {boolean} params.archiveEnabled\n     * @param {boolean} params.confirmOnDelete\n     * @param {boolean} params.hasButtons\n     */\n    init: function (parent, model, renderer, params) {\n        this._super.apply(this, arguments);\n        this.archiveEnabled = params.archiveEnabled;\n        this.confirmOnDelete = params.confirmOnDelete;\n        this.hasButtons = params.hasButtons;\n        FieldManagerMixin.init.call(this, this.model);\n        this.mode = params.mode || 'readonly';\n        // savingDef is used to ensure that we always wait for pending save\n        // operations to complete before checking if there are changes to\n        // discard when discardChanges is called\n        this.savingDef = Promise.resolve();\n        this.viewId = params.viewId;\n\n        // In this controller, '_applyChanges' is overridden s.t. '_notifyChanges'\n        // of the model is called in a mutex. The following structure is used to\n        // accumulate change requests that haven't been sent to the model yet,\n        // because of the mutex. This is useful when we want to quickly save a\n        // record before leaving Odoo (see @_urgentSave).\n        this.pendingChanges = [];\n    },\n    /**\n     * @override\n     * @returns {Promise}\n     */\n    start: async function () {\n        // add classname to reflect the (absence of) access rights (used to\n        // correctly display the nocontent helper)\n        this.$el.toggleClass('o_cannot_create', !this.activeActions.create);\n        await this._super(...arguments);\n    },\n    /**\n     * @override\n     */\n    destroy: function () {\n        this._super(...arguments);\n        if (this._boundOnBeforeUnload) {\n            window.removeEventListener(\"beforeunload\", this._boundOnBeforeUnload);\n        }\n    },\n    /**\n     * @override\n     */\n    on_attach_callback: function () {\n        this._super(...arguments);\n        this._boundOnBeforeUnload = this._onBeforeUnload.bind(this);\n        window.addEventListener(\"beforeunload\", this._boundOnBeforeUnload);\n    },\n    /**\n     * @override\n     */\n    on_detach_callback: function () {\n        this._super(...arguments);\n        if (this._boundOnBeforeUnload) {\n            window.removeEventListener(\"beforeunload\", this._boundOnBeforeUnload);\n        }\n        this.renderer.resetLocalState();\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     * @returns {Promise}\n     */\n    canBeRemoved: function () {\n        return this.saveChanges(this.handle);\n    },\n    /**\n     * Determines if we can discard the current changes. If the model is not\n     * dirty, that is not a problem. However, if it is dirty, we have to ask\n     * the user for confirmation.\n     *\n     * @override\n     * @param {string} [recordID] - default to main recordID\n     * @returns {Promise<boolean>}\n     *          resolved if can be discarded, a boolean value is given to tells\n     *          if there is something to discard or not\n     *          rejected otherwise\n     */\n    canBeDiscarded: function (recordID) {\n        return Promise.resolve(true);\n    },\n    /**\n     * Ask the renderer if all associated field widget are in a valid state for\n     * saving (valid value and non-empty value for required fields). If this is\n     * not the case, this notifies the user with a warning containing the names\n     * of the invalid fields.\n     *\n     * Note: changing the style of invalid fields is the renderer's job.\n     *\n     * @param {string} [recordID] - default to main recordID\n     * @return {boolean}\n     */\n    canBeSaved: function (recordID) {\n        var fieldNames = this.renderer.canBeSaved(recordID || this.handle);\n        if (fieldNames.length) {\n            this._notifyInvalidFields(fieldNames);\n            return false;\n        }\n        return true;\n    },\n    /**\n     * Waits for the mutex to be unlocked and for changes to be saved, then\n     * calls _.discardChanges.\n     * This ensures that the confirm dialog isn't displayed directly if there is\n     * a pending 'write' rpc.\n     *\n     * @see _.discardChanges\n     */\n    discardChanges: function (recordID, options) {\n        return Promise.all([this.mutex.getUnlockedDef(), this.savingDef])\n            .then(this._discardChanges.bind(this, recordID || this.handle, options));\n    },\n    /**\n     * Method that will be overridden by the views with the ability to have selected ids\n     *\n     * @returns {Array}\n     */\n    getSelectedIds: function () {\n        return [];\n    },\n    /**\n     * Returns true iff the given recordID (or the main recordID) is dirty.\n     *\n     * @param {string} [recordID] - default to main recordID\n     * @returns {boolean}\n     */\n    isDirty: function (recordID) {\n        return this.model.isDirty(recordID || this.handle);\n    },\n    /**\n     * Saves the record if it's dirty.\n     *\n     * @param {string} [recordId] - default to main recordId\n     * @return {Promise}\n     */\n    saveChanges: async function (recordId) {\n        // waits for _applyChanges to finish\n        await this.mutex.getUnlockedDef();\n\n        recordId = recordId || this.handle;\n        if (this.isDirty(recordId)) {\n            await this.savingDef;\n            await this.saveRecord(recordId, {\n                stayInEdit: true,\n                reload: false,\n            });\n        }\n    },\n    /**\n     * Saves the record whose ID is given if necessary (@see _saveRecord).\n     *\n     * @param {string} [recordID] - default to main recordID\n     * @param {Object} [options]\n     * @returns {Promise}\n     *        Resolved with the list of field names (whose value has been modified)\n     *        Rejected if the record can't be saved\n     */\n    saveRecord: function (recordID, options) {\n        var self = this;\n        // Some field widgets can't detect (all) their changes immediately or\n        // may have to validate them before notifying them, so we ask them to\n        // commit their current value before saving. This has to be done outside\n        // of the mutex protection of saving because commitChanges will trigger\n        // changes and these are also protected. However, we must wait for the\n        // mutex to be idle to ensure that onchange RPCs returned before asking\n        // field widgets to commit their value (and validate it, for instance\n        // for one2many with required fields). So the actual saving has to be\n        // done after these changes. Also the commitChanges operation might not\n        // be synchronous for other reason (e.g. the x2m fields will ask the\n        // user if some discarding has to be made). This operation must also be\n        // mutex-protected as commitChanges function of x2m has to be aware of\n        // all final changes made to a row.\n        var unlockedMutex = this.mutex.getUnlockedDef()\n            .then(function () {\n                return self.renderer.commitChanges(recordID || self.handle);\n            })\n            .then(function () {\n                return self.mutex.exec(self._saveRecord.bind(self, recordID, options));\n            });\n        this.savingDef = new Promise(function (resolve) {\n            unlockedMutex.then(resolve).guardedCatch(resolve);\n        });\n\n        return unlockedMutex;\n    },\n    /**\n     * @override\n     * @returns {Promise}\n     */\n    update: async function (params, options) {\n        this.mode = params.mode || this.mode;\n        return this._super(params, options);\n    },\n    /**\n     * @override\n     */\n    reload: function (params) {\n        if (params && params.controllerState) {\n            if (params.controllerState.currentId) {\n                params.currentId = params.controllerState.currentId;\n            }\n            params.ids = params.controllerState.resIds;\n        }\n        return this._super.apply(this, arguments);\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Does the necessary action when trying to \"abandon\" a given record (e.g.\n     * when trying to make a new record readonly without having saved it). By\n     * default, if the abandoned record is the main view one, the only possible\n     * action is to leave the current view. Otherwise, it is a x2m line, ask the\n     * model to remove it.\n     *\n     * @private\n     * @param {string} [recordID] - default to main recordID\n     */\n    _abandonRecord: function (recordID) {\n        recordID = recordID || this.handle;\n        if (recordID === this.handle) {\n            this.trigger_up('history_back');\n        } else {\n            this.model.removeLine(recordID);\n        }\n    },\n    /**\n     * We override applyChanges (from the field manager mixin) to protect it\n     * with a mutex. As we do so, we need to accumulate change requests that\n     * haven't been sent to the model yet, just in case we would leave Odoo\n     * (close tab/browser). If this happens, we will bypass the mutex and notify\n     * the model directly of those changes, to save them if possible (see\n     * @_urgentSave).\n     *\n     * @override\n     */\n    _applyChanges: function (dataPointID, changes, event) {\n        this.pendingChanges.push({ dataPointID, changes, event });\n        var _super = FieldManagerMixin._applyChanges.bind(this);\n        return this.mutex.exec(() => {\n            this.pendingChanges.shift();\n            return _super(dataPointID, changes, event);\n        });\n    },\n    /**\n     * Archive the current selection\n     *\n     * @private\n     * @param {number[]} ids\n     * @param {boolean} archive\n     * @returns {Promise}\n     */\n    _archive: async function (ids, archive) {\n        if (ids.length === 0) {\n            return Promise.resolve();\n        }\n        if (archive) {\n            await this.model.actionArchive(ids, this.handle);\n        } else {\n            await this.model.actionUnarchive(ids, this.handle);\n        }\n        return this.update({}, {reload: false});\n    },\n    /**\n     * When the user clicks on a 'action button', this function determines what\n     * should happen.\n     *\n     * @private\n     * @param {Object} attrs the attrs of the button clicked\n     * @param {Object} [record] the current state of the view\n     * @returns {Promise}\n     */\n    _callButtonAction: function (attrs, record) {\n        record = record || this.model.get(this.handle);\n        const actionData = Object.assign({}, attrs, {\n            context: record.getContext({additionalContext: attrs.context || {}})\n        });\n        const recordData = {\n            context: record.getContext(),\n            currentID: record.data.id,\n            model: record.model,\n            resIDs: record.res_ids,\n        };\n        return this._executeButtonAction(actionData, recordData);\n    },\n    /**\n     * Called by the field manager mixin to confirm that a change just occured\n     * (after that potential onchanges have been applied).\n     *\n     * Basically, this only relays the notification to the renderer with the\n     * new state.\n     *\n     * @param {string} id - the id of one of the view's records\n     * @param {string[]} fields - the changed fields\n     * @param {OdooEvent} e - the event that triggered the change\n     * @returns {Promise}\n     */\n    _confirmChange: function (id, fields, e) {\n        if (e.name === 'discard_changes' && e.target.reset) {\n            // the target of the discard event is a field widget.  In that\n            // case, we simply want to reset the specific field widget,\n            // not the full view\n            return  e.target.reset(this.model.get(e.target.dataPointID), e, true);\n        }\n\n        var state = this.model.get(this.handle);\n        return this.renderer.confirmChange(state, id, fields, e);\n    },\n    /**\n     * Ask the user to confirm he wants to save the record\n     * @private\n     */\n    _confirmSaveNewRecord: function () {\n        var self = this;\n        var def = new Promise(function (resolve, reject) {\n            var message = _t(\"You need to save this new record before editing the translation. Do you want to proceed?\");\n            var dialog = Dialog.confirm(self, message, {\n                title: _t(\"Warning\"),\n                confirm_callback: resolve.bind(self, true),\n                cancel_callback: reject,\n            });\n            dialog.on('closed', self, reject);\n        });\n        return def;\n    },\n    /**\n     * Delete records (and ask for confirmation if necessary)\n     *\n     * @param {string[]} ids list of local record ids\n     */\n    _deleteRecords: function (ids) {\n        var self = this;\n        function doIt() {\n            return self.model\n                .deleteRecords(ids, self.modelName)\n                .then(self._onDeletedRecords.bind(self, ids));\n        }\n        if (this.confirmOnDelete) {\n            const message = ids.length > 1 ?\n                            _t(\"Are you sure you want to delete these records?\") :\n                            _t(\"Are you sure you want to delete this record?\");\n            let dialog;\n            const confirmCallback = () => {\n                doIt().guardedCatch(() => dialog.destroy());\n            };\n            dialog = Dialog.confirm(this, message, { confirm_callback: confirmCallback });\n        } else {\n            doIt();\n        }\n    },\n    /**\n     * Disables buttons so that they can't be clicked anymore.\n     *\n     * @private\n     */\n    _disableButtons: function () {\n        if (this.$buttons) {\n            this.$buttons.find('button').attr('disabled', true);\n        }\n    },\n    /**\n     * Discards the changes made to the record whose ID is given, if necessary.\n     * Automatically leaves to default mode for the given record.\n     *\n     * @private\n     * @param {string} [recordID] - default to main recordID\n     * @param {Object} [options]\n     * @param {boolean} [options.readonlyIfRealDiscard=false]\n     *        After discarding record changes, the usual option is to make the\n     *        record readonly. However, the action manager calls this function\n     *        at inappropriate times in the current code and in that case, we\n     *        don't want to go back to readonly if there is nothing to discard\n     *        (e.g. when switching record in edit mode in form view, we expect\n     *        the new record to be in edit mode too, but the view manager calls\n     *        this function as the URL changes...) @todo get rid of this when\n     *        the webclient/action_manager's hashchange mechanism is improved.\n     * @param {boolean} [options.noAbandon=false]\n     * @returns {Promise}\n     */\n    _discardChanges: function (recordID, options) {\n        var self = this;\n        recordID = recordID || this.handle;\n        options = options || {};\n        return this.canBeDiscarded(recordID)\n            .then(function (needDiscard) {\n                if (options.readonlyIfRealDiscard && !needDiscard) {\n                    return;\n                }\n                self.model.discardChanges(recordID);\n                if (options.noAbandon) {\n                    return;\n                }\n                if (self.model.canBeAbandoned(recordID)) {\n                    self._abandonRecord(recordID);\n                    return;\n                }\n                return self._confirmSave(recordID);\n            });\n    },\n    /**\n     * Enables buttons so they can be clicked again.\n     *\n     * @private\n     */\n    _enableButtons: function () {\n        if (this.$buttons) {\n            this.$buttons.find('button').removeAttr('disabled');\n        }\n    },\n    /**\n     * Executes the action associated with a button\n     *\n     * @private\n     * @param {Object} actionData: the descriptor of the action\n     * @param {string} actionData.type: the button's action's type, accepts \"object\" or \"action\"\n     * @param {string} actionData.name: the button's action's name\n     *    either the model method's name for type \"object\"\n     *    or the action's id in database, or xml_id\n     * @param {string} actionData.context: the action's execution context\n     *\n     * @param {Object} recordData: basic information on the current record(s)\n     * @param {number[]} recordData.resIDs: record ids:\n     *     - on which an object method applies\n     *     - that will be used as active_ids to load an action\n     * @param {string} recordData.model: model name\n     * @param {Object} recordData.context: the records' context, will be used to load\n     *     the action, and merged into actionData.context at execution time\n     *\n     * @returns {Promise}\n     */\n    async _executeButtonAction(actionData, recordData) {\n        const prom = new Promise((resolve, reject) => {\n            this.trigger_up('execute_action', {\n                action_data: actionData,\n                env: recordData,\n                on_closed: () => this.isDestroyed() ? Promise.resolve() : this.reload(),\n                on_success: resolve,\n                on_fail: () => this.update({}, { reload: false }).then(reject).guardedCatch(reject)\n            });\n        });\n        return this.alive(prom);\n    },\n    /**\n     * Override to add the current record ID (currentId) and the list of ids\n     * (resIds) in the current dataPoint to the exported state.\n     *\n     * @override\n     */\n    exportState: function () {\n        var state = this._super.apply(this, arguments);\n        var env = this.model.get(this.handle, {env: true});\n        return _.extend(state, {\n            currentId: env.currentId,\n            resIds: env.ids,\n        });\n    },\n    /**\n     * Compute the optional fields local storage key using the given parts.\n     *\n     * @param {Object} keyParts\n     * @param {string} keyParts.viewType view type\n     * @param {string} [keyParts.relationalField] name of the field with subview\n     * @param {integer} [keyParts.subViewId] subview id\n     * @param {string} [keyParts.subViewType] type of the subview\n     * @param {Object} keyParts.fields fields\n     * @param {string} keyParts.fields.name field name\n     * @param {string} keyParts.fields.type field type\n     * @returns {string} local storage key for optional fields in this view\n     * @private\n     */\n    _getOptionalFieldsLocalStorageKey: function (keyParts) {\n        keyParts.model = this.modelName;\n        keyParts.viewType = this.viewType;\n        keyParts.viewId = this.viewId;\n\n        var parts = [\n            'model',\n            'viewType',\n            'viewId',\n            'relationalField',\n            'subViewType',\n            'subViewId',\n        ];\n\n        var viewIdentifier = parts.reduce(function (identifier, partName) {\n            if (partName in keyParts) {\n                return identifier + ',' + keyParts[partName];\n            }\n            return identifier;\n        }, 'optional_fields');\n\n        viewIdentifier =\n            keyParts.fields.sort(this._nameSortComparer)\n                           .reduce(function (identifier, field) {\n                                return identifier + ',' + field.name;\n                            }, viewIdentifier);\n\n        return viewIdentifier;\n    },\n    /**\n     * Return the params (currentMinimum, limit and size) to pass to the pager,\n     * according to the current state.\n     *\n     * @private\n     * @returns {Object}\n     */\n    _getPagingInfo: function (state) {\n        const isGrouped = state.groupedBy && state.groupedBy.length;\n        return {\n            currentMinimum: (isGrouped ? state.groupsOffset : state.offset) + 1,\n            limit: isGrouped ? state.groupsLimit : state.limit,\n            size: isGrouped ? state.groupsCount : state.count,\n        };\n    },\n    /**\n     * Return the new actionMenus props.\n     *\n     * @override\n     * @private\n     */\n    _getActionMenuItems: function (state) {\n        return {\n            activeIds: this.getSelectedIds(),\n            context: state.getContext(),\n        };\n    },\n    /**\n     *  Sort function used to sort the fields by names, to compute the optional fields keys\n     *\n     *  @param {Object} left\n     *  @param {Object} right\n     *  @private\n      */\n    _nameSortComparer: function(left, right) {\n        return left.name < right.name ? -1 : 1;\n    },\n    /**\n     * Helper function to display a warning that some fields have an invalid\n     * value. This is used when a save operation cannot be completed.\n     *\n     * @private\n     * @param {string[]} invalidFields - list of field names\n     */\n    _notifyInvalidFields: function (invalidFields) {\n        var record = this.model.get(this.handle, {raw: true});\n        var fields = record.fields;\n        var warnings = invalidFields.map(function (fieldName) {\n            var fieldStr = fields[fieldName].string;\n            return _.str.sprintf('<li>%s</li>', _.escape(fieldStr));\n        });\n        warnings.unshift('<ul>');\n        warnings.push('</ul>');\n        this.displayNotification({\n            title: _t(\"Invalid fields:\"),\n            message: Markup(warnings.join('')),\n            type: 'danger',\n        });\n    },\n    /**\n     * Hook method, called when record(s) has been deleted.\n     *\n     * @see _deleteRecord\n     * @param {string[]} ids list of deleted ids (basic model local handles)\n     */\n    _onDeletedRecords: function (ids) {\n        this.update({});\n    },\n    /**\n     * Saves the record whose ID is given, if necessary. Automatically leaves\n     * edit mode for the given record, unless told otherwise.\n     *\n     * @param {string} [recordID] - default to main recordID\n     * @param {Object} [options]\n     * @param {boolean} [options.stayInEdit=false]\n     *        if true, leave the record in edit mode after save\n     * @param {boolean} [options.reload=true]\n     *        if true, reload the record after (real) save\n     * @param {boolean} [options.savePoint=false]\n     *        if true, the record will only be 'locally' saved: its changes\n     *        will move from the _changes key to the data key\n     * @returns {Promise}\n     *        Resolved with the list of field names (whose value has been modified)\n     *        Rejected if the record can't be saved\n     */\n    _saveRecord: function (recordID, options) {\n        recordID = recordID || this.handle;\n        options = _.defaults(options || {}, {\n            stayInEdit: false,\n            reload: true,\n            savePoint: false,\n        });\n\n        // Check if the view is in a valid state for saving\n        // Note: it is the model's job to do nothing if there is nothing to save\n        if (this.canBeSaved(recordID)) {\n            var self = this;\n            var saveDef = this.model.save(recordID, { // Save then leave edit mode\n                reload: options.reload,\n                savePoint: options.savePoint,\n                viewType: options.viewType,\n            });\n            if (!options.stayInEdit) {\n                saveDef = saveDef.then(function (fieldNames) {\n                    var def = fieldNames.length ? self._confirmSave(recordID) : self._setMode('readonly', recordID);\n                    return def.then(function () {\n                        return fieldNames;\n                    });\n                });\n            }\n            return saveDef;\n        } else {\n            return Promise.reject(\"SaveRecord: this.canBeSave is false\"); // Cannot be saved\n        }\n    },\n    /**\n     * Change the mode for the record associated to the given ID.\n     * If the given recordID is the view's main one, then the whole view mode is\n     * changed (@see BasicController.update).\n     *\n     * @private\n     * @param {string} mode - 'readonly' or 'edit'\n     * @param {string} [recordID]\n     * @returns {Promise}\n     */\n    _setMode: function (mode, recordID) {\n        if ((recordID || this.handle) === this.handle) {\n            return this.update({mode: mode}, {reload: false}).then(function () {\n                // necessary to allow all sub widgets to use their dimensions in\n                // layout related activities, such as autoresize on fieldtexts\n                core.bus.trigger('DOM_updated');\n            });\n        }\n        return Promise.resolve();\n    },\n    /**\n     * To override such that it returns true iff the primary action button must\n     * bounce when the user clicked on the given element, according to the\n     * current state of the view.\n     *\n     * @private\n     * @param {HTMLElement} element the node the user clicked on\n     * @returns {boolean}\n     */\n    _shouldBounceOnClick: function (/* element */) {\n        return false;\n    },\n    /**\n     * Helper method, to get the current environment variables from the model\n     * and notifies the component chain (by bubbling an event up)\n     *\n     * @private\n     * @param {Object} [newProps={}]\n     */\n    _updateControlPanel: function (newProps = {}) {\n        const state = this.model.get(this.handle);\n        const props = Object.assign(newProps, {\n            actionMenus: this._getActionMenuItems(state),\n            pager: this._getPagingInfo(state),\n            title: this.getTitle(),\n        });\n        return this.updateControlPanel(props);\n    },\n    /**\n     * To be called **only** when Odoo is about to be closed, and we want to\n     * save potential changes on a given record.\n     *\n     * We can't follow the normal flow (onchange(s) + save, mutexified),\n     * because the 'beforeunload' handler must be *almost* sync (< 10 ms\n     * setTimeout seems fine, but an rpc roundtrip is definitely too long),\n     * so here we bypass the standard mechanism of notifying changes and\n     * saving them:\n     *  - we ask the model to bypass its mutex for upcoming 'notifyChanges' and\n     *   'save' requests\n     *  - we ask all widgets to commit their changes (in case there would\n     *    be a focused field with a fresh value)\n     *  - we take all pendingChanges (changes that have been reported to the\n     *    controller, but not yet sent to the model because of the mutex),\n     *    and directly notify the model about them\n     *  - we reset the widgets with all those changes, s.t. a further call\n     *    to 'canBeRemoved' uses the correct data (it asks the widgets if\n     *    they are set/valid, based on their internal state)\n     *  - if the record is dirty, we save directly\n     *\n     * @param {string} recordID\n     * @private\n     */\n    _urgentSave(recordID) {\n        this.model.executeDirectly(() => {\n            this.renderer.commitChanges(recordID);\n            for (const key in this.pendingChanges) {\n                const { changes, dataPointID, event } = this.pendingChanges[key];\n                const options = {\n                    context: event.data.context,\n                    viewType: event.data.viewType,\n                    notifyChange: false,\n                };\n                this.model.notifyChanges(dataPointID, changes, options);\n                this._confirmChange(dataPointID, Object.keys(changes), event);\n            }\n            if (this.isDirty()) {\n                this._saveRecord(recordID, { reload: false, stayInEdit: true });\n            }\n        });\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Called when the user clicks on the 'content' part of the controller\n     * (typically the renderer area). Makes the first primary button in the\n     * control panel bounce, in some situations (see _shouldBounceOnClick).\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onContentClicked(ev) {\n        if (this.$buttons && this._shouldBounceOnClick(ev.target)) {\n            this.$buttons.find('.btn-primary:visible:first').odooBounce();\n        }\n    },\n    /**\n     * Called when a list element asks to discard the changes made to one of\n     * its rows.  It can happen with a x2many (if we are in a form view) or with\n     * a list view.\n     *\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onDiscardChanges: function (ev) {\n        var self = this;\n        ev.stopPropagation();\n        var recordID = ev.data.recordID;\n        this._discardChanges(recordID)\n            .then(function () {\n                // TODO this will tell the renderer to rerender the widget that\n                // asked for the discard but will unfortunately lose the click\n                // made on another row if any\n                self._confirmChange(recordID, [ev.data.fieldName], ev)\n                    .then(ev.data.onSuccess).guardedCatch(ev.data.onSuccess);\n            })\n            .guardedCatch(ev.data.onFailure);\n    },\n    /**\n     * Forces to save directly the changes if the controller is in readonly,\n     * because in that case the changes come from widgets that are editable even\n     * in readonly (e.g. Priority).\n     *\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onFieldChanged: function (ev) {\n        if (this.mode === 'readonly' && !('force_save' in ev.data)) {\n            ev.data.force_save = true;\n        }\n        FieldManagerMixin._onFieldChanged.apply(this, arguments);\n    },\n    /**\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onPagerChanged: async function (ev) {\n        ev.stopPropagation();\n        const { currentMinimum, limit } = ev.data;\n        const state = this.model.get(this.handle, { raw: true });\n        const reloadParams = state.groupedBy && state.groupedBy.length ? {\n                groupsLimit: limit,\n                groupsOffset: currentMinimum - 1,\n            } : {\n                limit,\n                offset: currentMinimum - 1,\n            };\n        await this.reload(reloadParams);\n        // reset the scroll position to the top on page changed only\n        if (state.limit === limit) {\n            this.trigger_up('scrollTo', { top: 0 });\n        }\n    },\n    /**\n     * Called when the user closes the tab or browser. To be overriden by\n     * specific controllers to execute some code (e.g. save pending changes)\n     * just before leaving Odoo.\n     *\n     * @abstract\n     * @private\n     */\n    _onBeforeUnload: function () {\n    },\n    /**\n     * When a reload event triggers up, we need to reload the full view.\n     * For example, after a form view dialog saved some data.\n     *\n     * @todo: rename db_id into handle\n     *\n     * @param {OdooEvent} ev\n     * @param {Object} ev.data\n     * @param {string} [ev.data.db_id] handle of the data to reload and\n     *   re-render (reload the whole form by default)\n     * @param {string[]} [ev.data.fieldNames] list of the record's fields to\n     *   reload\n     * @param {Function} [ev.data.onSuccess] callback executed after reload is resolved\n     * @param {Function} [ev.data.onFailure] callback executed when reload is rejected\n     */\n    _onReload: function (ev) {\n        ev.stopPropagation(); // prevent other controllers from handling this request\n        var data = ev && ev.data || {};\n        var handle = data.db_id;\n        var prom;\n        if (handle) {\n            // reload the relational field given its db_id\n            prom = this.model.reload(handle).then(this._confirmSave.bind(this, handle));\n        } else {\n            // no db_id given, so reload the main record\n            prom = this.reload({\n                fieldNames: data.fieldNames,\n                keepChanges: data.keepChanges || false,\n            });\n        }\n        prom.then(ev.data.onSuccess).guardedCatch(ev.data.onFailure);\n    },\n    /**\n     * Resequence records in the given order.\n     *\n     * @private\n     * @param {OdooEvent} ev\n     * @param {string[]} ev.data.recordIds\n     * @param {integer} ev.data.offset\n     * @param {string} ev.data.handleField\n     */\n    _onResequenceRecords: function (ev) {\n        ev.stopPropagation(); // prevent other controllers from handling this request\n        this.trigger_up('mutexify', {\n            action: async () => {\n                let state = this.model.get(this.handle);\n                const resIDs = ev.data.recordIds\n                    .map(recordID => state.data.find(d => d.id === recordID).res_id);\n                const options = {\n                    offset: ev.data.offset,\n                    field: ev.data.handleField,\n                };\n                await this.model.resequence(this.modelName, resIDs, this.handle, options);\n                this._updateControlPanel();\n                state = this.model.get(this.handle);\n                return this._updateRendererState(state, { noRender: true });\n            },\n        });\n    },\n    /**\n     * Load the optional columns settings in local storage for this view\n     *\n     * @param {OdooEvent} ev\n     * @param {Object} ev.data.keyParts see _getLocalStorageKey\n     * @param {function} ev.data.callback function to call with the result\n     * @private\n     */\n    _onLoadOptionalFields: function (ev) {\n        var res = this.call(\n            'local_storage',\n            'getItem',\n            this._getOptionalFieldsLocalStorageKey(ev.data.keyParts)\n        );\n        ev.data.callback(res);\n    },\n    /**\n     * Save the optional columns settings in local storage for this view\n     *\n     * @param {OdooEvent} ev\n     * @param {Object} ev.data.keyParts see _getLocalStorageKey\n     * @param {Array<string>} ev.data.optionalColumnsEnabled list of optional\n     *   field names that have been enabled\n     * @private\n     */\n    _onSaveOptionalFields: function (ev) {\n        this.call(\n            'local_storage',\n            'setItem',\n            this._getOptionalFieldsLocalStorageKey(ev.data.keyParts),\n            ev.data.optionalColumnsEnabled\n        );\n    },\n    /**\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onSetDirty: function (ev) {\n        ev.stopPropagation(); // prevent other controllers from handling this request\n        this.model.setDirty(ev.data.dataPointID);\n    },\n    /**\n     * open the translation view for the current field\n     *\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onTranslate: async function (ev) {\n        ev.stopPropagation();\n\n        if (this.model.isNew(ev.data.id)) {\n            await this._confirmSaveNewRecord();\n            var updatedFields = await this.saveRecord(ev.data.id, { stayInEdit: true });\n            await this._confirmChange(ev.data.id, updatedFields, ev);\n        }\n        var record = this.model.get(ev.data.id, { raw: true });\n        var res_id = record.res_id || record.res_ids[0];\n        var result = await this._rpc({\n            route: '/web/dataset/call_button',\n            params: {\n                model: 'ir.translation',\n                method: 'translate_fields',\n                args: [record.model, res_id, ev.data.fieldName],\n                kwargs: { context: record.getContext() },\n            }\n        });\n\n        this.translationDialog = new TranslationDialog(this, {\n            domain: result.domain,\n            searchName: result.context.search_default_name,\n            fieldName: ev.data.fieldName,\n            userLanguageValue: ev.target.value || '',\n            dataPointID: record.id,\n            isComingFromTranslationAlert: ev.data.isComingFromTranslationAlert,\n            isText: result.context.translation_type === 'text',\n            showSrc: result.context.translation_show_src,\n            node: ev.target && ev.target.__node,\n        });\n        return this.translationDialog.open();\n    },\n});\n\nreturn BasicController;\n});\n", "odoo.define('web.BasicModel', function (require) {\n\"use strict\";\n\n/**\n * Basic Model\n *\n * This class contains all the logic necessary to communicate between the\n * python models and the web client. More specifically, its job is to give a\n * simple unified API to the rest of the web client (in particular, the views and\n * the field widgets) to query and modify actual records in db.\n *\n * From a high level perspective, BasicModel is essentially a hashmap with\n * integer keys and some data and metadata object as value.  Each object in this\n * hashmap represents a piece of data, and can be reloaded and modified by using\n * its id as key in many methods.\n *\n * Here is a description of what those data point look like:\n *   var dataPoint = {\n *      _cache: {Object|undefined}\n *      _changes: {Object|null},\n *      aggregateValues: {Object},\n *      context: {Object},\n *      count: {integer},\n *      data: {Object|Object[]},\n *      domain: {*[]},\n *      fields: {Object},\n *      fieldsInfo: {Object},\n *      getContext: {function},\n *      getDomain: {function},\n *      getFieldNames: {function},\n *      groupedBy: {string[]},\n *      id: {integer},\n *      isOpen: {boolean},\n *      loadMoreOffset: {integer},\n *      limit: {integer},\n *      model: {string},\n *      offset: {integer},\n *      openGroupByDefault: {boolean},\n *      orderedBy: {Object[]},\n *      orderedResIDs: {integer[]},\n *      parentID: {string},\n *      rawContext: {Object},\n *      relationField: {string},\n *      res_id: {integer|null},\n *      res_ids: {integer[]},\n *      specialData: {Object},\n *      _specialDataCache: {Object},\n *      static: {boolean},\n *      type: {string} 'record' | 'list'\n *      value: ?,\n *  };\n *\n * Notes:\n * - id: is totally unrelated to res_id.  id is a web client local concept\n * - res_id: if set to a number or a virtual id (a virtual id is a character\n *     string composed of an integer and has a dash and other information), it\n *     is an actual id for a record in the server database. If set to\n *    'virtual_' + number, it is a record not yet saved (so, in create mode).\n * - res_ids: if set, it represent the context in which the data point is actually\n *     used.  For example, a given record in a form view (opened from a list view)\n *     might have a res_id = 2 and res_ids = [1,2,3]\n * - offset: this is mainly used for pagination.  Useful when we need to load\n *     another page, then we can simply change the offset and reload.\n * - count is basically the number of records being manipulated.  We can't use\n *     res_ids, because we might have a very large number of records, or a\n *     domain, and the res_ids would be the current page, not the full set.\n * - model is the actual name of a (odoo) model, such as 'res.partner'\n * - fields contains the description of all the fields from the model.  Note that\n *     these properties might have been modified by a view (for example, with\n *     required=true.  So, the fields kind of depends of the context of the\n *     data point.\n * - field_names: list of some relevant field names (string).  Usually, it\n *     denotes the fields present in the view.  Only those fields should be\n *     loaded.\n * - _cache and _changes are private, they should not leak out of the basicModel\n *   and be used by anyone else.\n *\n * Commands:\n *   commands are the base commands for x2many (0 -> 6), but with a\n *   slight twist: each [0, _, values] command is augmented with a virtual id:\n *   it means that when the command is added in basicmodel, it generates an id\n *   looking like this: 'virtual_' + number, and uses this id to identify the\n *   element, so it can be edited later.\n */\n\nvar AbstractModel = require('web.AbstractModel');\nvar concurrency = require('web.concurrency');\nvar Context = require('web.Context');\nvar core = require('web.core');\nvar Domain = require('web.Domain');\nconst pyUtils = require('web.py_utils');\nvar session = require('web.session');\nvar utils = require('web.utils');\nvar viewUtils = require('web.viewUtils');\nvar localStorage = require('web.local_storage');\n\nvar _t = core._t;\n\n// field types that can be aggregated in grouped views\nconst AGGREGATABLE_TYPES = ['float', 'integer', 'monetary'];\n\nvar x2ManyCommands = {\n    // (0, virtualID, {values})\n    CREATE: 0,\n    create: function (virtualID, values) {\n        delete values.id;\n        return [x2ManyCommands.CREATE, virtualID || false, values];\n    },\n    // (1, id, {values})\n    UPDATE: 1,\n    update: function (id, values) {\n        delete values.id;\n        return [x2ManyCommands.UPDATE, id, values];\n    },\n    // (2, id[, _])\n    DELETE: 2,\n    delete: function (id) {\n        return [x2ManyCommands.DELETE, id, false];\n    },\n    // (3, id[, _]) removes relation, but not linked record itself\n    FORGET: 3,\n    forget: function (id) {\n        return [x2ManyCommands.FORGET, id, false];\n    },\n    // (4, id[, _])\n    LINK_TO: 4,\n    link_to: function (id) {\n        return [x2ManyCommands.LINK_TO, id, false];\n    },\n    // (5[, _[, _]])\n    DELETE_ALL: 5,\n    delete_all: function () {\n        return [5, false, false];\n    },\n    // (6, _, ids) replaces all linked records with provided ids\n    REPLACE_WITH: 6,\n    replace_with: function (ids) {\n        return [6, false, ids];\n    }\n};\n\nvar BasicModel = AbstractModel.extend({\n    // constants\n    OPEN_GROUP_LIMIT: 10, // after this limit, groups are automatically folded\n\n    // list of models for which the DataManager's cache should be cleared on\n    // create, update and delete operations\n    noCacheModels: [\n        'ir.actions.act_window',\n        'ir.filters',\n        'ir.ui.view',\n        'res.currency',\n    ],\n\n    /**\n     * @override\n     */\n    init: function () {\n        // this mutex is necessary to make sure some operations are done\n        // sequentially, for example, an onchange needs to be completed before a\n        // save is performed.\n        this.mutex = new concurrency.Mutex();\n        this.bypassMutex = false; // never set this to true manually (see @executeDirectly)\n\n        // this array is used to accumulate RPC requests done in the same call\n        // stack, so that they can be batched in the minimum number of RPCs\n        this.batchedRPCsRequests = [];\n\n        this.localData = Object.create(null);\n        // used to generate dataPoint ids. Note that the counter is set to 0 for\n        // each instance, and this is mandatory for the sample data feature to\n        // work: we need both the main model and the sample model to generate the\n        // same datapoint ids for their common data (groups, when there are real\n        // groups in database), so that we can easily do the mapping between\n        // real and sample data.\n        this.__id = 0;\n        this._super.apply(this, arguments);\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Add a default record to a list object. This method actually makes a new\n     * record with the _makeDefaultRecord method, then adds it to the list object.\n     * The default record is added in the data directly. This is meant to be used\n     * by list or kanban controllers (i.e. not for x2manys in form views, as in\n     * this case, we store changes as commands).\n     *\n     * @param {string} listID a valid handle for a list object\n     * @param {Object} [options]\n     * @param {string} [options.position=top] if the new record should be added\n     *   on top or on bottom of the list\n     * @returns {Promise<string>} resolves to the id of the new created record\n     */\n    addDefaultRecord: function (listID, options) {\n        var self = this;\n        var list = this.localData[listID];\n        var context = _.extend({}, this._getDefaultContext(list), this._getContext(list));\n\n        var position = (options && options.position) || 'top';\n        var params = {\n            context: context,\n            fields: list.fields,\n            fieldsInfo: list.fieldsInfo,\n            parentID: list.id,\n            position: position,\n            viewType: list.viewType,\n        };\n        return this._makeDefaultRecord(list.model, params).then(function (id) {\n            list.count++;\n            if (position === 'top') {\n                list.data.unshift(id);\n            } else {\n                list.data.push(id);\n            }\n            var record = self.localData[id];\n            list._cache[record.res_id] = id;\n            return id;\n        });\n    },\n    /**\n     * Completes the fields and fieldsInfo of a dataPoint with the given ones.\n     * It is useful for the cases where a record element is shared between\n     * various views, such as a one2many with a tree and a form view.\n     *\n     * @param {string} datapointID a valid element ID (of type 'list' or 'record')\n     * @param {Object} viewInfo\n     * @param {Object} viewInfo.fields\n     * @param {Object} viewInfo.fieldInfo\n     * @param {string} viewInfo.viewType\n     * @returns {Promise} resolved when the fieldInfo have been set on the given\n     *   datapoint and all its children, and all rawChanges have been applied\n     */\n    addFieldsInfo: async function (dataPointID, viewInfo) {\n        var dataPoint = this.localData[dataPointID];\n        dataPoint.fields = _.extend({}, dataPoint.fields, viewInfo.fields);\n        // complete the given fieldInfo with the fields of the main view, so\n        // that those field will be reloaded if a reload is triggered by the\n        // secondary view\n        dataPoint.fieldsInfo = dataPoint.fieldsInfo || {};\n        const mainFieldInfo = dataPoint.fieldsInfo[dataPoint[viewInfo.viewType]];\n        dataPoint.fieldsInfo[viewInfo.viewType] = _.defaults({}, viewInfo.fieldInfo, mainFieldInfo);\n\n        // Some fields in the new fields info might not be in the previous one,\n        // so we might have stored changes for them (e.g. coming from onchange\n        // RPCs), that we haven't been able to process earlier (because those\n        // fields were unknown at that time). So we now try to process them.\n        if (dataPoint.type === 'record') {\n            await this.applyRawChanges(dataPointID, viewInfo.viewType);\n        }\n            const proms = [];\n            const fieldInfo = dataPoint.fieldsInfo[viewInfo.viewType];\n            // recursively apply the new field info on sub datapoints\n            if (dataPoint.type === 'list') {\n                // case 'list': on all datapoints in the list\n                Object.values(dataPoint._cache).forEach(subDataPointID => {\n                    proms.push(this.addFieldsInfo(subDataPointID, {\n                        fields: dataPoint.fields,\n                        fieldInfo: dataPoint.fieldsInfo[viewInfo.viewType],\n                        viewType: viewInfo.viewType,\n                    }));\n                });\n            } else {\n                // case 'record': on datapoints of all x2many fields\n                const values = _.extend({}, dataPoint.data, dataPoint._changes);\n                Object.keys(fieldInfo).forEach(fieldName => {\n                    const fieldType = dataPoint.fields[fieldName].type;\n                    if (fieldType === 'one2many' || fieldType === 'many2many') {\n                        const mode = fieldInfo[fieldName].mode;\n                        const views = fieldInfo[fieldName].views;\n                        const x2mDataPointID = values[fieldName];\n                        if (views[mode] && x2mDataPointID) {\n                            proms.push(this.addFieldsInfo(x2mDataPointID, {\n                                fields: views[mode].fields,\n                                fieldInfo: views[mode].fieldsInfo[mode],\n                                viewType: mode,\n                            }));\n                        }\n                    }\n                });\n            }\n            return Promise.all(proms);\n    },\n    /**\n     * Onchange RPCs may return values for fields that are not in the current\n     * view. Those fields might even be unknown when the onchange returns (e.g.\n     * in x2manys, we only know the fields that are used in the inner view, but\n     * not those used in the potential form view opened in a dialog when a sub-\n     * record is clicked). When this happens, we can't infer their type, so the\n     * given value can't be processed. It is instead stored in the '_rawChanges'\n     * key of the record, without any processing. Later on, if this record is\n     * displayed in another view (e.g. the user clicked on it in the x2many\n     * list, and the record opens in a dialog), those changes that were left\n     * behind must be applied. This function applies changes stored in\n     * '_rawChanges' for a given viewType.\n     *\n     * @param {string} recordID local resource id of a record\n     * @param {string} viewType the current viewType\n     * @returns {Promise<string>} resolves to the id of the record\n     */\n    applyRawChanges: function (recordID, viewType) {\n        var record = this.localData[recordID];\n        return this._applyOnChange(record._rawChanges, record, { viewType }).then(function () {\n            return record.id;\n        });\n    },\n    /**\n     * Returns true if a record can be abandoned.\n     *\n     * Case for not abandoning the record:\n     *\n     * 1. flagged as 'no abandon' (i.e. during a `default_get`, including any\n     *    `onchange` from a `default_get`)\n     * 2. registered in a list on addition\n     *\n     *    2.1. registered as non-new addition\n     *    2.2. registered as new additon on update\n     *\n     * 3. record is not new\n     *\n     * Otherwise, the record can be abandoned.\n     *\n     * This is useful when discarding changes on this record, as it means that\n     * we must keep the record even if some fields are invalids (e.g. required\n     * field is empty).\n     *\n     * @param {string} id id for a local resource\n     * @returns {boolean}\n     */\n    canBeAbandoned: function (id) {\n        // 1. no drop if flagged\n        if (this.localData[id]._noAbandon) {\n            return false;\n        }\n        // 2. no drop in a list on \"ADD in some cases\n        var record = this.localData[id];\n        var parent = this.localData[record.parentID];\n        if (parent) {\n            var entry = _.findWhere(parent._savePoint, {operation: 'ADD', id: id});\n            if (entry) {\n                // 2.1. no drop on non-new addition in list\n                if (!entry.isNew) {\n                    return false;\n                }\n                // 2.2. no drop on new addition on \"UPDATE\"\n                var lastEntry = _.last(parent._savePoint);\n                if (lastEntry.operation === 'UPDATE' && lastEntry.id === id) {\n                    return false;\n                }\n            }\n        }\n        // 3. drop new records\n        return this.isNew(id);\n    },\n    /**\n     * Delete a list of records, then, if the records have a parent, reload it.\n     *\n     * @todo we should remove the deleted records from the localData\n     * @todo why can't we infer modelName? Because of grouped datapoint\n     *       --> res_id doesn't correspond to the model and we don't have the\n     *           information about the related model\n     *\n     * @param {string[]} recordIds list of local resources ids. They should all\n     *   be of type 'record', be of the same model and have the same parent.\n     * @param {string} modelName mode name used to unlink the records\n     * @returns {Promise}\n     */\n    deleteRecords: function (recordIds, modelName) {\n        var self = this;\n        var records = _.map(recordIds, function (id) { return self.localData[id]; });\n        var context = _.extend(records[0].getContext(), session.user_context);\n        return this._rpc({\n                model: modelName,\n                method: 'unlink',\n                args: [_.pluck(records, 'res_id')],\n                context: context,\n            })\n            .then(function () {\n                _.each(records, function (record) {\n                    var parent = record.parentID && self.localData[record.parentID];\n                    if (parent && parent.type === 'list') {\n                        parent.data = _.without(parent.data, record.id);\n                        delete self.localData[record.id];\n                        // Check if we are on last page and all records are deleted from current\n                        // page i.e. if there is no state.data.length then go to previous page\n                        if (!parent.data.length && parent.offset > 0) {\n                            parent.offset = Math.max(parent.offset - parent.limit, 0);\n                        }\n                    } else {\n                        record.res_ids.splice(record.offset, 1);\n                        record.offset = Math.min(record.offset, record.res_ids.length - 1);\n                        record.res_id = record.res_ids[record.offset];\n                        record.count--;\n                    }\n                });\n                // optionally clear the DataManager's cache\n                self._invalidateCache(records[0]);\n            });\n    },\n    /**\n     * Discard all changes in a local resource.  Basically, it removes\n     * everything that was stored in a _changes key.\n     *\n     * @param {string} id local resource id\n     * @param {Object} [options]\n     * @param {boolean} [options.rollback=false] if true, the changes will\n     *   be reset to the last _savePoint, otherwise, they are reset to null\n     */\n    discardChanges: function (id, options) {\n        options = options || {};\n        var element = this.localData[id];\n        var isNew = this.isNew(id);\n        var rollback = 'rollback' in options ? options.rollback : isNew;\n        var initialOffset = element.offset;\n        element._domains = {};\n        this._visitChildren(element, function (elem) {\n            if (rollback && elem._savePoint) {\n                if (elem._savePoint instanceof Array) {\n                    elem._changes = elem._savePoint.slice(0);\n                } else {\n                    elem._changes = _.extend({}, elem._savePoint);\n                }\n                elem._isDirty = !isNew;\n            } else {\n                elem._changes = null;\n                elem._isDirty = false;\n            }\n            elem.offset = 0;\n            if (elem.tempLimitIncrement) {\n                elem.limit -= elem.tempLimitIncrement;\n                delete elem.tempLimitIncrement;\n            }\n        });\n        element.offset = initialOffset;\n    },\n    /**\n     * Duplicate a record (by calling the 'copy' route)\n     *\n     * @param {string} recordID id for a local resource\n     * @returns {Promise<string>} resolves to the id of duplicate record\n     */\n    duplicateRecord: function (recordID) {\n        var self = this;\n        var record = this.localData[recordID];\n        var context = this._getContext(record);\n        return this._rpc({\n                model: record.model,\n                method: 'copy',\n                args: [record.data.id],\n                context: context,\n            })\n            .then(function (res_id) {\n                var index = record.res_ids.indexOf(record.res_id);\n                record.res_ids.splice(index + 1, 0, res_id);\n                return self.load({\n                    fieldsInfo: record.fieldsInfo,\n                    fields: record.fields,\n                    modelName: record.model,\n                    res_id: res_id,\n                    res_ids: record.res_ids.slice(0),\n                    viewType: record.viewType,\n                    context: context,\n                });\n            });\n    },\n    /**\n     * This method allows to execute a callback for which '_notifyChanges' and\n     * 'save' will bypass the mutex. This is useful when we are leaving Odoo\n     * (closing tab/browser), and we want to quickly save pending changes (in\n     * an 'onbeforeunload' handler, which is mostly sync).\n     *\n     * This function should never be called except when we are leaving Odoo.\n     *\n     * @param {Function} callback\n     */\n    executeDirectly(callback) {\n        this.bypassMutex = true;\n        callback();\n        this.bypassMutex = false;\n    },\n    /**\n     * For list resources, this freezes the current records order.\n     *\n     * @param {string} listID a valid element ID of type list\n     */\n    freezeOrder: function (listID) {\n        var list = this.localData[listID];\n        if (list.type === 'record') {\n            return;\n        }\n        list = this._applyX2ManyOperations(list);\n        this._sortList(list);\n        this.localData[listID].orderedResIDs = list.res_ids;\n    },\n    /**\n     * The __get method first argument is the handle returned by the load method.\n     * It is optional (the handle can be undefined).  In some case, it makes\n     * sense to use the handle as a key, for example the BasicModel holds the\n     * data for various records, each with its local ID.\n     *\n     * synchronous method, it assumes that the resource has already been loaded.\n     *\n     * @param {string} id local id for the resource\n     * @param {any} options\n     * @param {boolean} [options.env=false] if true, will only  return res_id\n     *   (if record) or res_ids (if list)\n     * @param {boolean} [options.raw=false] if true, will not follow relations\n     * @returns {Object}\n     */\n    __get: function (id, options) {\n        var self = this;\n        options = options || {};\n\n        if (!(id in this.localData)) {\n            return null;\n        }\n\n        var element = this.localData[id];\n\n        if (options.env) {\n            var env = {\n                ids: element.res_ids ? element.res_ids.slice(0) : [],\n            };\n            if (element.type === 'record') {\n                env.currentId = this.isNew(element.id) ? undefined : element.res_id;\n            }\n            return env;\n        }\n\n        if (element.type === 'record') {\n            var data = _.extend({}, element.data, element._changes);\n            var relDataPoint;\n            for (var fieldName in data) {\n                var field = element.fields[fieldName];\n                if (data[fieldName] === null) {\n                    data[fieldName] = false;\n                }\n                if (!field) {\n                    continue;\n                }\n\n                // get relational datapoint\n                if (field.type === 'many2one') {\n                    if (options.raw) {\n                        relDataPoint = this.localData[data[fieldName]];\n                        data[fieldName] = relDataPoint ? relDataPoint.res_id : false;\n                    } else {\n                        data[fieldName] = this.__get(data[fieldName]) || false;\n                    }\n                } else if (field.type === 'reference') {\n                    if (options.raw) {\n                        relDataPoint = this.localData[data[fieldName]];\n                        data[fieldName] = relDataPoint ?\n                            relDataPoint.model + ',' + relDataPoint.res_id :\n                            false;\n                    } else {\n                        data[fieldName] = this.__get(data[fieldName]) || false;\n                    }\n                } else if (field.type === 'one2many' || field.type === 'many2many') {\n                    if (options.raw) {\n                        if (typeof data[fieldName] === 'string') {\n                            relDataPoint = this.localData[data[fieldName]];\n                            relDataPoint = this._applyX2ManyOperations(relDataPoint);\n                            data[fieldName] = relDataPoint.res_ids;\n                        } else {\n                            // no datapoint has been created yet (because the loading of relational\n                            // data has been batched, and hasn't started yet), so the value is still\n                            // the list of ids in the relation\n                            data[fieldName] = data[fieldName] || [];\n                        }\n                    } else {\n                        data[fieldName] = this.__get(data[fieldName]) || [];\n                    }\n                }\n            }\n            var record = {\n                context: _.extend({}, element.context),\n                count: element.count,\n                data: data,\n                domain: element.domain.slice(0),\n                evalModifiers: element.evalModifiers,\n                fields: element.fields,\n                fieldsInfo: element.fieldsInfo,\n                getContext: element.getContext,\n                getDomain: element.getDomain,\n                getFieldNames: element.getFieldNames,\n                id: element.id,\n                isDirty: element.isDirty,\n                isNew: element.isNew,\n                limit: element.limit,\n                model: element.model,\n                offset: element.offset,\n                ref: element.ref,\n                res_ids: element.res_ids.slice(0),\n                specialData: _.extend({}, element.specialData),\n                type: 'record',\n                viewType: element.viewType,\n            };\n\n            if (!this.isNew(element.id)) {\n                record.res_id = element.res_id;\n            }\n            var evalContext;\n            Object.defineProperty(record, 'evalContext', {\n                get: function () {\n                    evalContext = evalContext || self._getEvalContext(element);\n                    return evalContext;\n                },\n            });\n            return record;\n        }\n\n        // apply potential changes (only for x2many lists)\n        element = this._applyX2ManyOperations(element);\n        this._sortList(element);\n\n        if (!element.orderedResIDs && element._changes) {\n            _.each(element._changes, function (change) {\n                if (change.operation === 'ADD' && change.isNew) {\n                    element.data = _.without(element.data, change.id);\n                    if (change.position === 'top') {\n                        element.data.unshift(change.id);\n                    } else {\n                        element.data.push(change.id);\n                    }\n                }\n            });\n        }\n\n        var list = {\n            aggregateValues: _.extend({}, element.aggregateValues),\n            context: _.extend({}, element.context),\n            count: element.count,\n            data: _.map(element.data, function (elemID) {\n                return self.__get(elemID, options);\n            }),\n            domain: element.domain.slice(0),\n            fields: element.fields,\n            getContext: element.getContext,\n            getDomain: element.getDomain,\n            getFieldNames: element.getFieldNames,\n            groupedBy: element.groupedBy,\n            groupsCount: element.groupsCount,\n            groupsLimit: element.groupsLimit,\n            groupsOffset: element.groupsOffset,\n            id: element.id,\n            isDirty: element.isDirty,\n            isM2MGrouped: element.isM2MGrouped,\n            isNew: element.isNew,\n            isOpen: element.isOpen,\n            isSample: this.isSampleModel,\n            limit: element.limit,\n            model: element.model,\n            offset: element.offset,\n            orderedBy: element.orderedBy,\n            res_id: element.res_id,\n            res_ids: element.res_ids.slice(0),\n            type: 'list',\n            value: element.value,\n            range: element.range,\n            viewType: element.viewType,\n        };\n        if (element.fieldsInfo) {\n            list.fieldsInfo = element.fieldsInfo;\n        }\n        return list;\n    },\n    /**\n     * Generate default values for a given record. Those values are stored in\n     * the '_changes' key of the record. For relational fields, sub-dataPoints\n     * are created, and missing relational data is fetched.\n     * Typically, this function is called when a new record is created. It may\n     * also be called when a one2many subrecord is open in a form view (dialog),\n     * to generate the default values for the fields displayed in the o2m form\n     * view, but not in the list or kanban (mainly to correctly create\n     * sub-dataPoints for relational fields).\n     *\n     * @param {string} recordID local id for a record\n     * @param {Object} [options]\n     * @param {string} [options.viewType] current viewType. If not set, we will\n     *   assume main viewType from the record\n     * @param {Array} [options.fieldNames] list of field names for which a\n     *   default value must be generated (used to complete the values dict)\n     * @returns {Promise}\n     */\n    generateDefaultValues(recordID, options = {}) {\n        const record = this.localData[recordID];\n        const viewType = options.viewType || record.viewType;\n        const fieldNames = options.fieldNames || Object.keys(record.fieldsInfo[viewType]);\n        const numericFields = ['float', 'integer', 'monetary'];\n        const proms = [];\n        record._changes = record._changes || {};\n        fieldNames.forEach(fieldName => {\n            record.data[fieldName] = null;\n            if (!(fieldName in record._changes)) {\n                const field = record.fields[fieldName];\n                if (numericFields.includes(field.type)) {\n                    record._changes[fieldName] = 0;\n                } else if (field.type === 'one2many' || field.type === 'many2many') {\n                    proms.push(this._processX2ManyCommands(record, fieldName, [], options));\n                } else {\n                    record._changes[fieldName] = null;\n                }\n            }\n        });\n        return Promise.all(proms);\n    },\n    /**\n     * Returns the current display_name for the record.\n     *\n     * @param {string} id the localID for a valid record element\n     * @returns {string}\n     */\n    getName: function (id) {\n        var record = this.localData[id];\n        var returnValue = '';\n        if (record._changes && 'display_name' in record._changes) {\n            returnValue = record._changes.display_name;\n        }\n        else if ('display_name' in record.data) {\n            returnValue = record.data.display_name;\n        }\n        return returnValue || _t(\"New\");\n    },\n    /**\n     * Returns true if a record is dirty. A record is considered dirty if it has\n     * some unsaved changes, marked by the _isDirty property on the record or\n     * one of its subrecords.\n     *\n     * @param {string} id - the local resource id\n     * @returns {boolean}\n     */\n    isDirty: function (id) {\n        var isDirty = false;\n        this._visitChildren(this.localData[id], function (r) {\n            if (r._isDirty) {\n                isDirty = true;\n            }\n        });\n        return isDirty;\n    },\n    /**\n     * Returns true iff the datapoint is of type list and either:\n     *   - is not grouped, and contains no records\n     *   - is grouped, and contains columns, but all columns are empty\n     * In these cases, we will generate sample data to display, instead of an\n     * empty state.\n     *\n     * @override\n     */\n    _isEmpty(dataPointID) {\n        const dataPoint = this.localData[dataPointID];\n        if (dataPoint.type === 'list') {\n            const hasRecords = dataPoint.count === 0;\n            if (dataPoint.groupedBy.length) {\n                return dataPoint.data.length > 0 && hasRecords;\n            } else {\n                return hasRecords;\n            }\n        }\n        return false;\n    },\n    /**\n     * Check if a localData is new, meaning if it is in the process of being\n     * created and no actual record exists in db. Note: if the localData is not\n     * of the \"record\" type, then it is always considered as not new.\n     *\n     * Note: A virtual id is a character string composed of an integer and has\n     * a dash and other information.\n     * E.g: in calendar, the recursive event have virtual id linked to a real id\n     * virtual event id \"23-20170418020000\" is linked to the event id 23\n     *\n     * @param {string} id id for a local resource\n     * @returns {boolean}\n     */\n    isNew: function (id) {\n        var data = this.localData[id];\n        if (data.type !== \"record\") {\n            return false;\n        }\n        var res_id = data.res_id;\n        if (typeof res_id === 'number') {\n            return false;\n        } else if (typeof res_id === 'string' && /^[0-9]+-/.test(res_id)) {\n            return false;\n        }\n        return true;\n    },\n    /**\n     * Main entry point, the goal of this method is to fetch and process all\n     * data (following relations if necessary) for a given record/list.\n     *\n     * @todo document all params\n     *\n     * @private\n     * @param {any} params\n     * @param {Object} [params.fieldsInfo={}] contains the fieldInfo of each field\n     * @param {Object} params.fields contains the description of each field\n     * @param {string} [params.type] 'record' or 'list'\n     * @param {string} [params.recordID] an ID for an existing resource.\n     * @returns {Promise<string>} resolves to a local id, or handle\n     */\n    __load: async function (params) {\n        await this._super(...arguments);\n        params.type = params.type || (params.res_id !== undefined ? 'record' : 'list');\n        // FIXME: the following seems only to be used by the basic_model_tests\n        // so it should probably be removed and the tests should be adapted\n        params.viewType = params.viewType || 'default';\n        if (!params.fieldsInfo) {\n            var fieldsInfo = {};\n            for (var fieldName in params.fieldNames) {\n                fieldsInfo[params.fieldNames[fieldName]] = {};\n            }\n            params.fieldsInfo = {};\n            params.fieldsInfo[params.viewType] = fieldsInfo;\n        }\n\n        if (params.type === 'record' && params.res_id === undefined) {\n            params.allowWarning = true;\n            return this._makeDefaultRecord(params.modelName, params);\n        }\n        var dataPoint = this._makeDataPoint(params);\n        return this._load(dataPoint).then(function () {\n            return dataPoint.id;\n        });\n    },\n    /**\n     * Returns the list of res_ids for a given list of local ids.\n     *\n     * @param {string[]} localIds\n     * @returns {integer[]}\n     */\n    localIdsToResIds: function (localIds) {\n        return localIds.map(localId => this.localData[localId].res_id);\n    },\n    /**\n     * This helper method is designed to help developpers that want to use a\n     * field widget outside of a view.  In that case, we want a way to create\n     * data without actually performing a fetch.\n     *\n     * @param {string} model name of the model\n     * @param {Object[]} fields a description of field properties\n     * @param {Object} [fieldInfo] various field info that we want to set\n     * @returns {Promise<string>} the local id for the created resource\n     */\n    makeRecord: function (model, fields, fieldInfo) {\n        var self = this;\n        var defs = [];\n        var record_fields = {};\n        _.each(fields, function (field) {\n            record_fields[field.name] = _.pick(field, 'type', 'relation', 'domain', 'selection');\n        });\n        fieldInfo = fieldInfo || {};\n        var fieldsInfo = {};\n        fieldsInfo.default = {};\n        _.each(fields, function (field) {\n            fieldsInfo.default[field.name] = fieldInfo[field.name] || {};\n        });\n        var record = this._makeDataPoint({\n            modelName: model,\n            fields: record_fields,\n            fieldsInfo: fieldsInfo,\n            viewType: 'default',\n        });\n        _.each(fields, function (field) {\n            var dataPoint;\n            record.data[field.name] = null;\n            if (field.type === 'many2one') {\n                if (field.value) {\n                    var id = _.isArray(field.value) ? field.value[0] : field.value;\n                    var display_name = _.isArray(field.value) ? field.value[1] : undefined;\n                    dataPoint = self._makeDataPoint({\n                        modelName: field.relation,\n                        data: {\n                            id: id,\n                            display_name: display_name,\n                        },\n                        parentID: record.id,\n                    });\n                    record.data[field.name] = dataPoint.id;\n                    if (display_name === undefined) {\n                        defs.push(self._fetchNameGet(dataPoint));\n                    }\n                }\n            } else if (field.type === 'reference' && field.value) {\n                const ref = field.value.split(',');\n                dataPoint = self._makeDataPoint({\n                    context: record.context,\n                    data: { id: parseInt(ref[1], 10) },\n                    modelName: ref[0],\n                    parentID: record.id,\n                });\n                defs.push(self._fetchNameGet(dataPoint));\n                record.data[field.name] = dataPoint.id;\n            } else if (field.type === 'one2many' || field.type === 'many2many') {\n                var relatedFieldsInfo = {};\n                relatedFieldsInfo.default = {};\n                _.each(field.fields, function (field) {\n                    relatedFieldsInfo.default[field.name] = {};\n                });\n                var dpParams = {\n                    fieldsInfo: relatedFieldsInfo,\n                    modelName: field.relation,\n                    parentID: record.id,\n                    static: true,\n                    type: 'list',\n                    viewType: 'default',\n                };\n                var needLoad = false;\n                // As value, you could either pass:\n                //  - a list of ids related to the record\n                //  - a list of object\n                // We only need to load the datapoint in the first case.\n                if (field.value && field.value.length) {\n                    if (_.isObject(field.value[0])) {\n                        dpParams.res_ids = _.pluck(field.value, 'id');\n                        dataPoint = self._makeDataPoint(dpParams);\n                        _.each(field.value, function (data) {\n                            var recordDP = self._makeDataPoint({\n                                data: data,\n                                modelName: field.relation,\n                                parentID: dataPoint.id,\n                                type: 'record',\n                            });\n                            dataPoint.data.push(recordDP.id);\n                            dataPoint._cache[recordDP.res_id] = recordDP.id;\n                        });\n                    } else {\n                        dpParams.res_ids = field.value;\n                        dataPoint = self._makeDataPoint(dpParams);\n                        needLoad = true;\n                    }\n                } else {\n                    dpParams.res_ids = [];\n                    dataPoint = self._makeDataPoint(dpParams);\n                }\n\n                if (needLoad) {\n                    defs.push(self._load(dataPoint));\n                }\n                record.data[field.name] = dataPoint.id;\n            } else if (field.value) {\n                record.data[field.name] = field.value;\n            }\n        });\n        return Promise.all(defs).then(function () {\n            return record.id;\n        });\n    },\n    /**\n     * This is an extremely important method.  All changes in any field go\n     * through this method.  It will then apply them in the local state, check\n     * if onchanges needs to be applied, actually do them if necessary, then\n     * resolves with the list of changed fields.\n     *\n     * @param {string} record_id\n     * @param {Object} changes a map field => new value\n     * @param {Object} [options] will be transferred to the applyChange method\n     *   @see _applyChange\n     * @returns {Promise<string[]>} list of changed fields\n     */\n    notifyChanges: function (record_id, changes, options) {\n        const notifyChanges = () => this._applyChange(record_id, changes, options);\n        if (this.bypassMutex) {\n            return notifyChanges();\n        }\n        return this.mutex.exec(notifyChanges);\n    },\n    /**\n     * Reload all data for a given resource. At any time there is at most one\n     * reload operation active.\n     *\n     * @private\n     * @param {string} id local id for a resource\n     * @param {Object} [options]\n     * @param {boolean} [options.keepChanges=false] if true, doesn't discard the\n     *   changes on the record before reloading it\n     * @returns {Promise<string>} resolves to the id of the resource\n     */\n    __reload: async function (id, options) {\n        await this._super(...arguments);\n        return this.mutex.exec(this._reload.bind(this, id, options));\n    },\n    /**\n     * In some case, we may need to remove an element from a list, without going\n     * through the notifyChanges machinery.  The motivation for this is when the\n     * user click on 'Add a line' in a field one2many with a required field,\n     * then clicks somewhere else.  The new line need to be discarded, but we\n     * don't want to trigger a real notifyChanges (no need for that, and also,\n     * we don't want to rerender the UI).\n     *\n     * @param {string} elementID some valid element id. It is necessary that the\n     *   corresponding element has a parent.\n     */\n    removeLine: function (elementID) {\n        var record = this.localData[elementID];\n        var parent = this.localData[record.parentID];\n        if (parent.static) {\n            // x2Many case: the new record has been stored in _changes, as a\n            // command so we remove the command(s) related to that record\n            parent._changes = _.filter(parent._changes, function (change) {\n                if (change.id === elementID &&\n                    change.operation === 'ADD' && // For now, only an ADD command increases limits\n                    parent.tempLimitIncrement) {\n                        // The record will be deleted from the _changes.\n                        // So we won't be passing into the logic of _applyX2ManyOperations anymore\n                        // implying that we have to cancel out the effects of an ADD command here\n                        parent.tempLimitIncrement--;\n                        parent.limit--;\n                }\n                return change.id !== elementID;\n            });\n        } else {\n            // main list view case: the new record is in data\n            parent.data = _.without(parent.data, elementID);\n            parent.count--;\n        }\n    },\n    /**\n     * Resequences records.\n     *\n     * @param {string} modelName the resIDs model\n     * @param {Array<integer>} resIDs the new sequence of ids\n     * @param {string} parentID the localID of the parent\n     * @param {object} [options]\n     * @param {integer} [options.offset]\n     * @param {string} [options.field] the field name used as sequence\n     * @returns {Promise<string>} resolves to the local id of the parent\n     */\n    resequence: function (modelName, resIDs, parentID, options) {\n        options = options || {};\n        if ((resIDs.length <= 1)) {\n            return Promise.resolve(parentID); // there is nothing to sort\n        }\n        var self = this;\n        var data = this.localData[parentID];\n        var params = {\n            model: modelName,\n            ids: resIDs,\n            context: data.getContext(),\n        };\n        if (options.offset) {\n            params.offset = options.offset;\n        }\n        if (options.field) {\n            params.field = options.field;\n        }\n        return this._rpc({\n                route: '/web/dataset/resequence',\n                params: params,\n            })\n            .then(function (wasResequenced) {\n                if (!wasResequenced) {\n                    // the field on which the resequence was triggered does not\n                    // exist, so no resequence happened server-side\n                    return Promise.resolve();\n                }\n                var field = params.field ? params.field : 'sequence';\n\n                return self._rpc({\n                    model: modelName,\n                    method: 'read',\n                    args: [resIDs, [field]],\n                    context: data.getContext(),\n                }).then(function (records) {\n                    if (data.data.length) {\n                        var dataType = self.localData[data.data[0]].type;\n                        if (dataType === 'record') {\n                            _.each(data.data, function (dataPoint) {\n                                var recordData = self.localData[dataPoint].data;\n                                var inRecords = _.findWhere(records, {id: recordData.id});\n                                if (inRecords) {\n                                    recordData[field] = inRecords[field];\n                                }\n                            });\n                            data.data = _.sortBy(data.data, function (d) {\n                                return self.localData[d].data[field];\n                            });\n                        }\n                        if (dataType === 'list') {\n                            data.data = _.sortBy(data.data, function (d) {\n                                return _.indexOf(resIDs, self.localData[d].res_id)\n                            });\n                        }\n                    }\n                    data.res_ids = [];\n                    _.each(data.data, function (d) {\n                        var dataPoint = self.localData[d];\n                        if (dataPoint.type === 'record') {\n                            data.res_ids.push(dataPoint.res_id);\n                        } else {\n                            data.res_ids = data.res_ids.concat(dataPoint.res_ids);\n                        }\n                    });\n                    self._updateParentResIDs(data);\n                    return parentID;\n                })\n            });\n    },\n    /**\n     * Save a local resource, if needed.  This is a complicated operation,\n     * - it needs to check all changes,\n     * - generate commands for x2many fields,\n     * - call the /create or /write method according to the record status\n     * - After that, it has to reload all data, in case something changed, server side.\n     *\n     * @param {string} recordID local resource\n     * @param {Object} [options]\n     * @param {boolean} [options.reload=true] if true, data will be reloaded\n     * @param {boolean} [options.savePoint=false] if true, the record will only\n     *   be 'locally' saved: its changes written in a _savePoint key that can\n     *   be restored later by call discardChanges with option rollback to true\n     * @param {string} [options.viewType] current viewType. If not set, we will\n     *   assume main viewType from the record\n     * @returns {Promise}\n     *   Resolved with the list of field names (whose value has been modified)\n     */\n    save: function (recordID, options) {\n        var self = this;\n        function _save() {\n            options = options || {};\n            var record = self.localData[recordID];\n            if (options.savePoint) {\n                self._visitChildren(record, function (rec) {\n                    var newValue = rec._changes || rec.data;\n                    if (newValue instanceof Array) {\n                        rec._savePoint = newValue.slice(0);\n                    } else {\n                        rec._savePoint = _.extend({}, newValue);\n                    }\n                });\n\n                // save the viewType of edition, so that the correct readonly modifiers\n                // can be evaluated when the record will be saved\n                for (let fieldName in (record._changes || {})) {\n                    record._editionViewType[fieldName] = options.viewType;\n                }\n            }\n            var shouldReload = 'reload' in options ? options.reload : true;\n            var method = self.isNew(recordID) ? 'create' : 'write';\n            if (record._changes) {\n                // id never changes, and should not be written\n                delete record._changes.id;\n            }\n            var changes = self._generateChanges(record, {viewType: options.viewType, changesOnly: method !== 'create'});\n\n            // id field should never be written/changed\n            delete changes.id;\n\n            if (method === 'create') {\n                var fieldNames = record.getFieldNames();\n                _.each(fieldNames, function (name) {\n                    if (changes[name] === null) {\n                        delete changes[name];\n                    }\n                });\n            }\n\n            var prom = new Promise(function (resolve, reject) {\n                var changedFields = Object.keys(changes);\n\n                if (options.savePoint) {\n                    resolve(changedFields);\n                    return;\n                }\n\n                // in the case of a write, only perform the RPC if there are changes to save\n                if (method === 'create' || changedFields.length) {\n                    // Prevents multiple create/write when a save and urgentSave on occur at the same time.\n                    // We only want to do a create/write.\n                    if (record.saveInProgress) {\n                        return;\n                    }\n                    record.saveInProgress = true;\n                    var args = method === 'write' ? [[record.data.id], changes] : [changes];\n                    self._rpc({\n                            model: record.model,\n                            method: method,\n                            args: args,\n                            context: record.getContext(),\n                        }).then(function (id) {\n                            if (method === 'create') {\n                                record.res_id = id;  // create returns an id, write returns a boolean\n                                record.data.id = id;\n                                record.offset = record.res_ids.length;\n                                record.res_ids.push(id);\n                                record.count++;\n                            }\n\n                            var _changes = record._changes;\n\n                            // Erase changes as they have been applied\n                            record._changes = {};\n                            var data = Object.assign({}, record.data, record._changes);\n                            for (var fieldName in record.fields) {\n                                var type = record.fields[fieldName].type;\n                                if (type === 'many2many' || type === 'one2many') {\n                                    if (data[fieldName]) {\n                                        self.localData[data[fieldName]]._changes = [];\n                                    }\n                                }\n                            }\n\n                            // Optionally clear the DataManager's cache\n                            self._invalidateCache(record);\n\n                            self.unfreezeOrder(record.id);\n\n                            record.saveInProgress = false;\n                            // Update the data directly or reload them\n                            if (shouldReload) {\n                                self._fetchRecord(record).then(function () {\n                                    resolve(changedFields);\n                                });\n                            } else {\n                                _.extend(record.data, _changes);\n                                resolve(changedFields);\n                            }\n                        }).guardedCatch((...args) => {\n                            record.saveInProgress = false;\n                            reject(...args)\n                        });\n                } else {\n                    resolve(changedFields);\n                }\n            });\n            prom.then(function () {\n                self._updateDuplicateRecords(record.id, (id) => {\n                    Object.assign(self.localData[id].data, record.data);\n                });\n                record._isDirty = false;\n            });\n            return prom;\n        }\n        if (this.bypassMutex) {\n            return _save();\n        } else {\n            return this.mutex.exec(_save);\n        }\n    },\n    /**\n     * Manually sets a resource as dirty. This is used to notify that a field\n     * has been modified, but with an invalid value. In that case, the value is\n     * not sent to the basic model, but the record should still be flagged as\n     * dirty so that it isn't discarded without any warning.\n     *\n     * @param {string} id a resource id\n     */\n    setDirty: function (id) {\n        this.localData[id]._isDirty = true;\n    },\n    /**\n     * For list resources, this changes the orderedBy key.\n     *\n     * @param {string} list_id id for the list resource\n     * @param {string} fieldName valid field name\n     * @returns {Promise}\n     */\n    setSort: function (list_id, fieldName) {\n        var list = this.localData[list_id];\n        if (list.type === 'record') {\n            return;\n        } else if (list._changes) {\n            _.each(list._changes, function (change) {\n                delete change.isNew;\n            });\n        }\n        if (list.orderedBy.length === 0) {\n            list.orderedBy.push({name: fieldName, asc: true});\n        } else if (list.orderedBy[0].name === fieldName){\n            if (!list.orderedResIDs) {\n                list.orderedBy[0].asc = !list.orderedBy[0].asc;\n            }\n        } else {\n            var orderedBy = _.reject(list.orderedBy, function (o) {\n                return o.name === fieldName;\n            });\n            list.orderedBy = [{name: fieldName, asc: true}].concat(orderedBy);\n        }\n\n        list.orderedResIDs = null;\n        if (list.static) {\n            // sorting might require to fetch the field for records where the\n            // sort field is still unknown (i.e. on other pages for example)\n            return this._fetchUngroupedList(list);\n        }\n        return Promise.resolve();\n    },\n    /**\n     * For a given resource of type 'record', get the active field, if any.\n     *\n     * Since the ORM can support both `active` and `x_active` fields for\n     * the archiving mechanism, check if any such field exists and prioritize\n     * them. The `active` field should always take priority over its custom\n     * version.\n     *\n     * @param {Object} record local resource\n     * @returns {String|undefined} the field name to use for archiving purposes\n     *   ('active', 'x_active') or undefined if no such field is present\n     */\n    getActiveField: function (record) {\n        const fields = Object.keys(record.fields);\n        const has_active = fields.includes('active');\n        if (has_active) {\n            return 'active';\n        }\n        const has_x_active = fields.includes('x_active');\n        return has_x_active?'x_active':undefined\n    },\n    /**\n     * Toggle the active value of given records (to archive/unarchive them)\n     *\n     * @param {Array} recordIDs local ids of the records to (un)archive\n     * @param {boolean} value false to archive, true to unarchive (value of the active field)\n     * @param {string} parentID id of the parent resource to reload\n     * @returns {Promise<string>} resolves to the parent id\n     */\n    toggleActive: function (recordIDs, parentID) {\n        var self = this;\n        var parent = this.localData[parentID];\n        var resIDs = _.map(recordIDs, function (recordID) {\n            return self.localData[recordID].res_id;\n        });\n        return this._rpc({\n                model: parent.model,\n                method: 'toggle_active',\n                args: [resIDs],\n            })\n            .then(function (action) {\n                // optionally clear the DataManager's cache\n                self._invalidateCache(parent);\n                if (!_.isEmpty(action)) {\n                    return self.do_action(action, {\n                        on_close: function () {\n                            return self.trigger_up('reload');\n                        }\n                    });\n                } else {\n                    return self.reload(parentID);\n                }\n            });\n    },\n    /**\n     * Archive the given records\n     *\n     * @param {integer[]} resIDs ids of the records to archive\n     * @param {string} parentID id of the parent resource to reload\n     * @returns {Promise<string>} resolves to the parent id\n     */\n    actionArchive: function (resIDs, parentID) {\n        var self = this;\n        var parent = this.localData[parentID];\n        return this._rpc({\n                model: parent.model,\n                method: 'action_archive',\n                args: [resIDs],\n            })\n            .then(function (action) {\n                // optionally clear the DataManager's cache\n                self._invalidateCache(parent);\n                if (!_.isEmpty(action)) {\n                    return new Promise(function (resolve, reject) {\n                        self.do_action(action, {\n                            on_close: function (result) {\n                                return self.trigger_up('reload', {\n                                    onSuccess: resolve,\n                                });\n                            }\n                        });\n                    });\n                } else {\n                    return self.reload(parentID);\n                }\n            }).then(function (datapoint) {\n                // if there are no records to display and we are not on first page(we check it\n                // by checking offset is greater than limit i.e. we are not on first page)\n                // reason for adding logic after reload to make sure there is no records after operation\n                if (parent && parent.type === 'list' && !parent.data.length && parent.offset > 0) {\n                    parent.offset = Math.max(parent.offset - parent.limit, 0);\n                    return self.reload(parentID);\n                }\n                return datapoint;\n            });\n    },\n    /**\n     * Unarchive the given records\n     *\n     * @param {integer[]} resIDs ids of the records to unarchive\n     * @param {string} parentID id of the parent resource to reload\n     * @returns {Promise<string>} resolves to the parent id\n     */\n    actionUnarchive: function (resIDs, parentID) {\n        var self = this;\n        var parent = this.localData[parentID];\n        return this._rpc({\n                model: parent.model,\n                method: 'action_unarchive',\n                args: [resIDs],\n            })\n            .then(function (action) {\n                // optionally clear the DataManager's cache\n                self._invalidateCache(parent);\n                if (!_.isEmpty(action)) {\n                    return new Promise(function (resolve, reject) {\n                        self.do_action(action, {\n                            on_close: function () {\n                                return self.trigger_up('reload', {\n                                    onSuccess: resolve,\n                                });\n                            }\n                        });\n                    });\n                } else {\n                    return self.reload(parentID);\n                }\n            }).then(function (datapoint) {\n                // if there are no records to display and we are not on first page(we check it\n                // by checking offset is greater than limit i.e. we are not on first page)\n                // reason for adding logic after reload to make sure there is no records after operation\n                if (parent && parent.type === 'list' && !parent.data.length && parent.offset > 0) {\n                    parent.offset = Math.max(parent.offset - parent.limit, 0);\n                    return self.reload(parentID);\n                }\n                return datapoint;\n            });\n    },\n    /**\n     * Toggle (open/close) a group in a grouped list, then fetches relevant\n     * data\n     *\n     * @param {string} groupId\n     * @returns {Promise<string>} resolves to the group id\n     */\n    toggleGroup: function (groupId) {\n        var self = this;\n        var group = this.localData[groupId];\n        if (group.isOpen) {\n            group.isOpen = false;\n            group.data = [];\n            group.res_ids = [];\n            group.offset = 0;\n            this._updateParentResIDs(group);\n            return Promise.resolve(groupId);\n        }\n        if (!group.isOpen) {\n            group.isOpen = true;\n            var def;\n            if (group.count > 0) {\n                def = this._load(group).then(function () {\n                    self._updateParentResIDs(group);\n                });\n            }\n            return Promise.resolve(def).then(function () {\n                return groupId;\n            });\n        }\n    },\n    /**\n     * For a list datapoint, unfreezes the current records order and sorts it.\n     * For a record datapoint, unfreezes the x2many list datapoints.\n     *\n     * @param {string} elementID a valid element ID\n     */\n    unfreezeOrder: function (elementID) {\n        var list = this.localData[elementID];\n        if (list.type === 'record') {\n            var data = _.extend({}, list.data, list._changes);\n            for (var fieldName in data) {\n                var field = list.fields[fieldName];\n                if (!field || !data[fieldName]) {\n                    continue;\n                }\n                if (field.type === 'one2many' || field.type === 'many2many') {\n                    var recordlist = this.localData[data[fieldName]];\n                    recordlist.orderedResIDs = null;\n                    for (var index in recordlist.data) {\n                        this.unfreezeOrder(recordlist.data[index]);\n                    }\n                }\n            }\n            return;\n        }\n        list.orderedResIDs = null;\n        this._sortList(list);\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Add a default record to a list object. This method actually makes a new\n     * record with the _makeDefaultRecord method, then adds it to the list object\n     * as a 'ADD' command in its _changes. This is meant to be used x2many lists,\n     * not by list or kanban controllers.\n     *\n     * @private\n     * @param {Object} list a valid list object\n     * @param {Object} [options]\n     * @param {string} [options.position=top] if the new record should be added\n     *   on top or on bottom of the list\n     * @param {Array} [options.[context]] additional context to be merged before\n     *   calling the default_get (eg. to set default values).\n     *   If several contexts are found, multiple records are added\n     * @param {boolean} [options.allowWarning=false] if true, the default record\n     *   operation can complete, even if a warning is raised\n     * @returns {Promise<[string]>} resolves to the new records ids\n     */\n    _addX2ManyDefaultRecord: function (list, options) {\n        var self = this;\n        var position = options && options.position || 'top';\n        var params = {\n            fields: list.fields,\n            fieldsInfo: list.fieldsInfo,\n            parentID: list.id,\n            position: position,\n            viewType: options.viewType || list.viewType,\n            allowWarning: options && options.allowWarning\n        };\n\n        var additionalContexts = options && options.context;\n        var makeDefaultRecords = [];\n        if (additionalContexts){\n            _.each(additionalContexts, function (context) {\n                params.context = self._getContext(list, {additionalContext: context, sanitize_default_values: true});\n                makeDefaultRecords.push(self._makeDefaultRecord(list.model, params));\n            });\n        } else {\n            params.context = self._getContext(list, {sanitize_default_values: true});\n            makeDefaultRecords.push(self._makeDefaultRecord(list.model, params));\n        }\n\n        return Promise.all(makeDefaultRecords).then(function (resultIds){\n            var ids = [];\n            _.each(resultIds, function (id){\n                ids.push(id);\n\n                list._changes.push({operation: 'ADD', id: id, position: position, isNew: true});\n                var record = self.localData[id];\n                list._cache[record.res_id] = id;\n                if (list.orderedResIDs) {\n                    var index = list.offset + (position !== 'top' ? list.limit : 0);\n                    list.orderedResIDs.splice(index, 0, record.res_id);\n                    // list could be a copy of the original one\n                    self.localData[list.id].orderedResIDs = list.orderedResIDs;\n                }\n            });\n\n            return ids;\n        });\n    },\n    /**\n     * This method is the private version of notifyChanges.  Unlike\n     * notifyChanges, it is not protected by a mutex.  Every changes from the\n     * user to the model go through this method.\n     *\n     * @param {string} recordID\n     * @param {Object} changes\n     * @param {Object} [options]\n     * @param {boolean} [options.doNotSetDirty=false] if this flag is set to\n     *   true, then we will not tag the record as dirty.  This should be avoided\n     *   for most situations.\n     * @param {boolean} [options.notifyChange=true] if this flag is set to\n     *   false, then we will not notify and not trigger the onchange, even though\n     *   it was changed.\n     * @param {string} [options.viewType] current viewType. If not set, we will assume\n     *   main viewType from the record\n     * @param {boolean} [options.allowWarning=false] if true, change\n     *   operation can complete, even if a warning is raised\n     *   (only supported by X2ManyChange)\n     * @returns {Promise} list of changed fields\n     */\n    _applyChange: function (recordID, changes, options) {\n        var self = this;\n        var record = this.localData[recordID];\n        var field;\n        var defs = [];\n        options = options || {};\n        record._changes = record._changes || {};\n        if (!options.doNotSetDirty) {\n            record._isDirty = true;\n        }\n        var initialData = {};\n        this._visitChildren(record, function (elem) {\n            initialData[elem.id] = $.extend(true, {}, _.pick(elem, 'data', '_changes'));\n        });\n\n        // apply changes to local data\n        for (var fieldName in changes) {\n            field = record.fields[fieldName];\n            if (field && (field.type === 'one2many' || field.type === 'many2many')) {\n                defs.push(this._applyX2ManyChange(record, fieldName, changes[fieldName], options));\n            } else if (field && (field.type === 'many2one' || field.type === 'reference')) {\n                defs.push(this._applyX2OneChange(record, fieldName, changes[fieldName], options));\n            } else {\n                record._changes[fieldName] = changes[fieldName];\n            }\n        }\n\n        if (options.notifyChange === false) {\n            return Promise.all(defs).then(function () {\n                return Promise.resolve(_.keys(changes));\n            });\n        }\n\n        return Promise.all(defs).then(function () {\n            var onChangeFields = []; // the fields that have changed and that have an on_change\n            for (var fieldName in changes) {\n                field = record.fields[fieldName];\n                if (field && field.onChange) {\n                    var isX2Many = field.type === 'one2many' || field.type === 'many2many';\n                    if (!isX2Many || (self._isX2ManyValid(record._changes[fieldName] || record.data[fieldName]))) {\n                        onChangeFields.push(fieldName);\n                    }\n                }\n            }\n            return new Promise(function (resolve, reject) {\n                if (onChangeFields.length) {\n                    self._performOnChange(record, onChangeFields, { viewType: options.viewType })\n                    .then(function (result) {\n                        delete record._warning;\n                        resolve(_.keys(changes).concat(Object.keys(result && result.value || {})));\n                    }).guardedCatch(function () {\n                        self._visitChildren(record, function (elem) {\n                            _.extend(elem, initialData[elem.id]);\n                        });\n                        reject();\n                    });\n                } else {\n                    resolve(_.keys(changes));\n                }\n            }).then(function (fieldNames) {\n                return self._fetchSpecialData(record).then(function (fieldNames2) {\n                    // Return the names of the fields that changed (onchange or\n                    // associated special data change)\n                    return _.union(fieldNames, fieldNames2);\n                });\n            });\n        });\n    },\n    /**\n     * Apply an x2one (either a many2one or a reference field) change. There is\n     * a need for this function because the server only gives an id when a\n     * onchange modifies a many2one field. For this reason, we need (sometimes)\n     * to do a /name_get to fetch a display_name.\n     *\n     * Moreover, for the many2one case, a new value can sometimes be set (i.e.\n     * a display_name is given, but no id). When this happens, we first do a\n     * name_create.\n     *\n     * @param {Object} record\n     * @param {string} fieldName\n     * @param {Object} [data]\n     * @param {Object} [options]\n     * @param {string} [options.viewType] current viewType. If not set, we will\n     *   assume main viewType from the record\n     * @returns {Promise}\n     */\n    _applyX2OneChange: async function (record, fieldName, data, options) {\n        options = options || {};\n        var self = this;\n        if (!data || (!data.id && !data.display_name)) {\n            record._changes[fieldName] = false;\n            return Promise.resolve();\n        }\n\n        const field = record.fields[fieldName];\n        const coModel = field.type === 'reference' ? data.model : field.relation;\n        const allowedTypes = ['many2one', 'reference'];\n        if (allowedTypes.includes(field.type) && !data.id && data.display_name) {\n            // only display_name given -> do a name_create\n            const result = await this._rpc({\n                model: coModel,\n                method: 'name_create',\n                args: [data.display_name],\n                context: this._getContext(record, {fieldName: fieldName, viewType: options.viewType}),\n            });\n            // Check if a record is really created. Models without defined\n            // _rec_name cannot create record based on name_create.\n            if (!result) {\n                record._changes[fieldName] = false;\n                return Promise.resolve();\n            }\n            data = {id: result[0], display_name: result[1]};\n        }\n\n        // here, we check that the many2one really changed. If the res_id is the\n        // same, we do not need to do any extra work. It can happen when the\n        // user edited a manyone (with the small form view button) with an\n        // onchange.  In that case, the onchange is triggered, but the actual\n        // value did not change.\n        var relatedID;\n        if (record._changes && fieldName in record._changes) {\n            relatedID = record._changes[fieldName];\n        } else {\n            relatedID = record.data[fieldName];\n        }\n        var relatedRecord = this.localData[relatedID];\n        if (relatedRecord && (data.id === this.localData[relatedID].res_id)) {\n            return Promise.resolve();\n        }\n        var rel_data = _.pick(data, 'id', 'display_name');\n\n        const viewType = options.viewType || record.viewType;\n        const fieldInfo = record.fieldsInfo[viewType][fieldName] || {};\n        const fieldOptions = fieldInfo.options || {};\n\n        // the reference field doesn't store its co-model in its field metadata\n        // but directly in the data (as the co-model isn't fixed)\n        var def;\n        if (rel_data.display_name === undefined || fieldOptions.always_reload) {\n            // TODO: refactor this to use _fetchNameGet\n            def = this._rpc({\n                    model: coModel,\n                    method: 'name_get',\n                    args: [data.id],\n                    context: this._getContext(record, { fieldName, viewType }),\n                })\n                .then(function (result) {\n                    rel_data.display_name = result[0][1];\n                });\n        }\n        return Promise.resolve(def).then(function () {\n            var rec = self._makeDataPoint({\n                context: record.context,\n                data: rel_data,\n                fields: {},\n                fieldsInfo: {},\n                modelName: coModel,\n                parentID: record.id,\n            });\n            record._changes[fieldName] = rec.id;\n        });\n    },\n    /**\n     * Applies the result of an onchange RPC on a record.\n     *\n     * @private\n     * @param {Object} values the result of the onchange RPC (a mapping of\n     *   fieldnames to their value)\n     * @param {Object} record\n     * @param {Object} [options={}]\n     * @param {string} [options.viewType] current viewType. If not set, we will assume\n     *   main viewType from the record\n     * @param {string} [options.firstOnChange] set to true if this is the first\n     *   onchange (if so, some initialization will need to be done)\n     * @returns {Promise}\n     */\n    _applyOnChange: function (values, record, options = {}) {\n        var self = this;\n        var defs = [];\n        var rec;\n        const viewType = options.viewType || record.viewType;\n        record._changes = record._changes || {};\n\n        for (let name in (values || {})) {\n            const val = values[name];\n            var field = record.fields[name];\n            if (!field) {\n                // this field is unknown so we can't process it for now (it is not\n                // in the current view anyway, otherwise it wouldn't be unknown.\n                // we store its value without processing it, so that if we later\n                // on switch to another view in which this field is displayed,\n                // we could process it as we would know its type then.\n                // use case: an onchange sends a create command for a one2many,\n                // in the dict of values, there is a value for a field that is\n                // not in the one2many list, but that is in the one2many form.\n                record._rawChanges[name] = val;\n                // LPE TODO 1 taskid-2261084: remove this entire comment including code snippet\n                // when the change in behavior has been thoroughly tested.\n                // It is impossible to distinguish between values returned by the default_get\n                // and those returned by the onchange. Since those are not in _changes, they won't be saved.\n                // if (options.firstOnChange) {\n                //     record._changes[name] = val;\n                // }\n                continue;\n            }\n            if (record._rawChanges[name]) {\n                // if previous _rawChanges exists, clear them since the field is now knwon\n                // and restoring outdated onchange over posterious change is wrong\n                delete record._rawChanges[name];\n            }\n            var oldValue = name in record._changes ? record._changes[name] : record.data[name];\n            var id;\n            if (field.type === 'many2one') {\n                id = false;\n                // in some case, the value returned by the onchange can\n                // be false (no value), so we need to avoid creating a\n                // local record for that.\n                if (val) {\n                    // when the value isn't false, it can be either\n                    // an array [id, display_name] or just an id.\n                    var data = _.isArray(val) ?\n                        {id: val[0], display_name: val[1]} :\n                        {id: val};\n                    if (!oldValue || (self.localData[oldValue].res_id !== data.id)) {\n                        // only register a change if the value has changed\n                        rec = self._makeDataPoint({\n                            context: record.context,\n                            data: data,\n                            modelName: field.relation,\n                            parentID: record.id,\n                        });\n                        id = rec.id;\n                        record._changes[name] = id;\n                    }\n                } else {\n                    record._changes[name] = false;\n                }\n            } else if (field.type === 'reference') {\n                id = false;\n                if (val) {\n                    var ref = val.split(',');\n                    var modelName = ref[0];\n                    var resID = parseInt(ref[1]);\n                    if (!oldValue || self.localData[oldValue].res_id !== resID ||\n                        self.localData[oldValue].model !== modelName) {\n                        // only register a change if the value has changed\n                        rec = self._makeDataPoint({\n                            context: record.context,\n                            data: {id: parseInt(ref[1])},\n                            modelName: modelName,\n                            parentID: record.id,\n                        });\n                        defs.push(self._fetchNameGet(rec));\n                        id = rec.id;\n                        record._changes[name] = id;\n                    }\n                } else {\n                    record._changes[name] = id;\n                }\n            } else if (field.type === 'one2many' || field.type === 'many2many') {\n                var listId = record._changes[name] || record.data[name];\n                var list;\n                if (listId) {\n                    list = self.localData[listId];\n                } else {\n                    var fieldInfo = record.fieldsInfo[viewType][name];\n                    if (!fieldInfo) {\n                        // ignore changes of x2many not in view\n                        continue;\n                    }\n                    var view = fieldInfo.views && fieldInfo.views[fieldInfo.mode];\n                    list = self._makeDataPoint({\n                        fields: view ? view.fields : fieldInfo.relatedFields,\n                        fieldsInfo: view ? view.fieldsInfo : fieldInfo.fieldsInfo,\n                        limit: fieldInfo.limit,\n                        modelName: field.relation,\n                        parentID: record.id,\n                        static: true,\n                        type: 'list',\n                        viewType: view ? view.type : fieldInfo.viewType,\n                    });\n                }\n                // TODO: before registering the changes, verify that the x2many\n                // value has changed\n                record._changes[name] = list.id;\n                list._changes = list._changes || [];\n\n                // save it in case of a [5] which will remove the _changes\n                var oldChanges = list._changes;\n                _.each(val, function (command) {\n                    var rec, recID;\n                    if (command[0] === 0 || command[0] === 1) {\n                        // CREATE or UPDATE\n                        if (command[0] === 0 && command[1]) {\n                            // updating an existing (virtual) record\n                            var previousChange = _.find(oldChanges, function (operation) {\n                                var child = self.localData[operation.id];\n                                return child && (child.ref === command[1]);\n                            });\n                            recID = previousChange && previousChange.id;\n                            rec = self.localData[recID];\n                        }\n                        if (command[0] === 1 && command[1]) {\n                            // updating an existing record\n                            rec = self.localData[list._cache[command[1]]];\n                        }\n                        if (!rec) {\n                            var params = {\n                                context: list.context,\n                                fields: list.fields,\n                                fieldsInfo: list.fieldsInfo,\n                                modelName: list.model,\n                                parentID: list.id,\n                                viewType: list.viewType,\n                                ref: command[1],\n                            };\n                            if (command[0] === 1) {\n                                params.res_id = command[1];\n                            }\n                            rec = self._makeDataPoint(params);\n                            list._cache[rec.res_id] = rec.id;\n                            if (options.firstOnChange) {\n                                // this is necessary so the fields are initialized\n                                rec.getFieldNames().forEach(fieldName => {\n                                    if (!(fieldName in rec.data)) {\n                                        rec.data[fieldName] = null;\n                                    }\n                                });\n                            }\n                        }\n                        // Do not abandon the record if it has been created\n                        // from `default_get`. The list has a savepoint only\n                        // after having fully executed `default_get`.\n                        rec._noAbandon = !list._savePoint;\n                        list._changes.push({operation: 'ADD', id: rec.id});\n                        if (command[0] === 1) {\n                            list._changes.push({operation: 'UPDATE', id: rec.id});\n                        }\n                        defs.push(self._applyOnChange(command[2], rec, {\n                            firstOnChange: options.firstOnChange,\n                        }));\n                    } else if (command[0] === 4) {\n                        // LINK TO\n                        linkRecord(list, command[1]);\n                    } else if (command[0] === 5) {\n                        // DELETE ALL\n                        list._changes = [{operation: 'REMOVE_ALL'}];\n                    } else if (command[0] === 6) {\n                        list._changes = [{operation: 'REMOVE_ALL'}];\n                        _.each(command[2], function (resID) {\n                            linkRecord(list, resID);\n                        });\n                    }\n                });\n                var def = self._readUngroupedList(list).then(function (list) {\n                    var x2ManysDef = self._fetchX2ManysBatched(list);\n                    var referencesDef = self._fetchReferencesBatched(list);\n                    return Promise.all([x2ManysDef, referencesDef]);\n                });\n                defs.push(def);\n            } else {\n                var newValue = self._parseServerValue(field, val);\n                if (newValue !== oldValue) {\n                    record._changes[name] = newValue;\n                }\n            }\n        }\n        return Promise.all(defs);\n\n        // inner function that adds a record (based on its res_id) to a list\n        // dataPoint (used for onchanges that return commands 4 (LINK TO) or\n        // commands 6 (REPLACE WITH))\n        function linkRecord (list, resID) {\n            rec = self.localData[list._cache[resID]];\n            if (rec) {\n                // modifications done on a record are discarded if the onchange\n                // uses a LINK TO or a REPLACE WITH\n                self.discardChanges(rec.id);\n            }\n            // the dataPoint id will be set when the record will be fetched (for\n            // now, this dataPoint may not exist yet)\n            list._changes.push({\n                operation: 'ADD',\n                id: rec ? rec.id : null,\n                resID: resID,\n            });\n        }\n    },\n    /**\n     * When an operation is applied to a x2many field, the field widgets\n     * generate one (or more) command, which describes the exact operation.\n     * This method tries to interpret these commands and apply them to the\n     * localData.\n     *\n     * @param {Object} record\n     * @param {string} fieldName\n     * @param {Object} command A command object.  It should have a 'operation'\n     *   key.  For example, it looks like {operation: ADD, id: 'partner_1'}\n     * @param {Object} [options]\n     * @param {string} [options.viewType] current viewType. If not set, we will assume\n     *   main viewType from the record\n     * @param {boolean} [options.allowWarning=false] if true, change\n     *   operation can complete, even if a warning is raised\n     *   (only supported by the 'CREATE' command.operation)\n     * @returns {Promise}\n     */\n    _applyX2ManyChange: async function (record, fieldName, command, options) {\n        if (command.operation === 'TRIGGER_ONCHANGE') {\n            // the purpose of this operation is to trigger an onchange RPC, so\n            // there is no need to apply any change on the record (the changes\n            // have probably been already applied and saved, usecase: many2many\n            // edition in a dialog)\n            return Promise.resolve();\n        }\n\n        var self = this;\n        var localID = (record._changes && record._changes[fieldName]) || record.data[fieldName];\n        var list = this.localData[localID];\n        var field = record.fields[fieldName];\n        var viewType = (options && options.viewType) || record.viewType;\n        var fieldInfo = record.fieldsInfo[viewType][fieldName];\n        var view = fieldInfo.views && fieldInfo.views[fieldInfo.mode];\n        var def, rec;\n        var defs = [];\n        list._changes = list._changes || [];\n\n        switch (command.operation) {\n            case 'ADD':\n                // for now, we are in the context of a one2many field\n                // the command should look like this:\n                // { operation: 'ADD', id: localID }\n                // The corresponding record may contain value for fields that\n                // are unknown in the list (e.g. fields that are in the\n                // subrecord form view but not in the kanban or list view), so\n                // to ensure that onchanges are correctly handled, we extend the\n                // list's fields with those in the created record\n                var newRecord = this.localData[command.id];\n                _.defaults(list.fields, newRecord.fields);\n                _.defaults(list.fieldsInfo, newRecord.fieldsInfo);\n                newRecord.fields = list.fields;\n                newRecord.fieldsInfo = list.fieldsInfo;\n                newRecord.viewType = list.viewType;\n                list._cache[newRecord.res_id] = newRecord.id;\n                list._changes.push(command);\n                break;\n            case 'ADD_M2M':\n                // force to use link command instead of create command\n                list._forceM2MLink = true;\n                // handle multiple add: command[2] may be a dict of values (1\n                // record added) or an array of dict of values\n                var data = _.isArray(command.ids) ? command.ids : [command.ids];\n\n                // name_create records for which there is no id (typically, could\n                // be the case of a quick_create in a many2many_tags, so data.length\n                // is 1)\n                for (const r of data) {\n                    if (!r.id && r.display_name) {\n                        const prom = this._rpc({\n                            model: field.relation,\n                            method: 'name_create',\n                            args: [r.display_name],\n                            context: this._getContext(record, {fieldName: fieldName, viewType: options.viewType}),\n                        }).then(result => {\n                            r.id = result[0];\n                            r.display_name = result[1];\n                        });\n                        defs.push(prom);\n                    }\n                }\n                await Promise.all(defs);\n\n                // Ensure the local data repository (list) boundaries can handle incoming records (data)\n                if (data.length + list.res_ids.length > list.limit) {\n                    list.limit = data.length + list.res_ids.length;\n                }\n\n                var list_records = {};\n                _.each(data, function (d) {\n                    rec = self._makeDataPoint({\n                        context: record.context,\n                        modelName: field.relation,\n                        fields: view ? view.fields : fieldInfo.relatedFields,\n                        fieldsInfo: view ? view.fieldsInfo : fieldInfo.fieldsInfo,\n                        res_id: d.id,\n                        data: d,\n                        viewType: view ? view.type : fieldInfo.viewType,\n                        parentID: list.id,\n                    });\n                    list_records[d.id] = rec;\n                    list._cache[rec.res_id] = rec.id;\n                    list._changes.push({operation: 'ADD', id: rec.id});\n                });\n                // read list's records as we only have their ids and optionally their display_name\n                // (we can't use function readUngroupedList because those records are only in the\n                // _changes so this is a very specific case)\n                // this could be optimized by registering the fetched records in the list's _cache\n                // so that if a record is removed and then re-added, it won't be fetched twice\n                var fieldNames = list.getFieldNames();\n                if (fieldNames.length) {\n                    def = this._rpc({\n                        model: list.model,\n                        method: 'read',\n                        args: [_.pluck(data, 'id'), fieldNames],\n                        context: _.extend({}, record.context, field.context),\n                    }).then(function (records) {\n                        _.each(records, function (record) {\n                            list_records[record.id].data = record;\n                            self._parseServerData(fieldNames, list, record);\n                        });\n                        return Promise.all([\n                            self._fetchX2ManysBatched(list),\n                            self._fetchReferencesBatched(list)\n                        ]);\n                    });\n                    defs.push(def);\n                }\n                break;\n            case 'CREATE':\n                var createOptions = _.extend({\n                    context: command.context,\n                    position: command.position\n                }, options || {});\n                createOptions.viewType = fieldInfo.mode;\n\n                def = this._addX2ManyDefaultRecord(list, createOptions).then(function (ids) {\n                    _.each(ids, function(id){\n                        if (command.position === 'bottom' && list.orderedResIDs && list.orderedResIDs.length >= list.limit) {\n                            list.tempLimitIncrement = (list.tempLimitIncrement || 0) + 1;\n                            list.limit += 1;\n                        }\n                        // FIXME: hack for lunch widget, which does useless default_get and onchange\n                        if (command.data) {\n                            return self._applyChange(id, command.data);\n                        }\n                        if (command.isDirty) {\n                            self.setDirty(id);\n                        }\n                    });\n                });\n                defs.push(def);\n                break;\n            case 'UPDATE':\n                list._changes.push({operation: 'UPDATE', id: command.id});\n                if (command.data) {\n                    defs.push(this._applyChange(command.id, command.data, {\n                        viewType: view && view.type,\n                    }));\n                }\n                break;\n            case 'FORGET':\n                // Unlink the record of list.\n                list._forceM2MUnlink = true;\n            case 'DELETE':\n                // filter out existing operations involving the current\n                // dataPoint, and add a 'DELETE' or 'FORGET' operation only if there is\n                // no 'ADD' operation for that dataPoint, as it would mean\n                // that the record wasn't in the relation yet\n                var idsToRemove = command.ids;\n                list._changes = _.reject(list._changes, function (change, index) {\n                    var idInCommands = _.contains(command.ids, change.id);\n                    if (idInCommands && change.operation === 'ADD') {\n                        idsToRemove = _.without(idsToRemove, change.id);\n                    }\n                    return idInCommands;\n                });\n                _.each(idsToRemove, function (id) {\n                    var operation = list._forceM2MUnlink ? 'FORGET': 'DELETE';\n                    list._changes.push({operation: operation, id: id});\n                });\n                break;\n            case 'DELETE_ALL':\n                // first remove all pending 'ADD' operations\n                list._changes = _.reject(list._changes, function (change) {\n                    return change.operation === 'ADD';\n                });\n\n                // then apply 'DELETE' on existing records\n                return this._applyX2ManyChange(record, fieldName, {\n                    operation: 'DELETE',\n                    ids: list.res_ids\n                }, options);\n            case 'REPLACE_WITH':\n                // this is certainly not optimal... and not sure that it is\n                // correct if some ids are added and some other are removed\n                list._changes = [];\n                var newIds = _.difference(command.ids, list.res_ids);\n                var removedIds = _.difference(list.res_ids, command.ids);\n                var addDef, removedDef, values;\n                if (newIds.length) {\n                    values = _.map(newIds, function (id) {\n                        return {id: id};\n                    });\n                    addDef = this._applyX2ManyChange(record, fieldName, {\n                        operation: 'ADD_M2M',\n                        ids: values\n                    }, options);\n                }\n                if (removedIds.length) {\n                    var listData = _.map(list.data, function (localId) {\n                        return self.localData[localId];\n                    });\n                    removedDef = this._applyX2ManyChange(record, fieldName, {\n                        operation: 'DELETE',\n                        ids: _.map(removedIds, function (resID) {\n                            if (resID in list._cache) {\n                                return list._cache[resID];\n                            }\n                            return _.findWhere(listData, {res_id: resID}).id;\n                        }),\n                    }, options);\n                }\n                return Promise.all([addDef, removedDef]);\n            case 'MULTI':\n                // allows batching multiple operations\n                _.each(command.commands, function (innerCommand){\n                    defs.push(self._applyX2ManyChange(\n                        record,\n                        fieldName,\n                        innerCommand,\n                        options\n                    ));\n                });\n                break;\n        }\n\n        return Promise.all(defs).then(function () {\n            // ensure to fetch up to 'limit' records (may be useful if records of\n            // the current page have been removed)\n            return self._readUngroupedList(list).then(function () {\n                return self._fetchX2ManysBatched(list);\n            });\n        });\n    },\n    /**\n     * In dataPoints of type list for x2manys, the changes are stored as a list\n     * of operations (being of type 'ADD', 'DELETE', 'FORGET', UPDATE' or 'REMOVE_ALL').\n     * This function applies the operation of such a dataPoint without altering\n     * the original dataPoint. It returns a copy of the dataPoint in which the\n     * 'count', 'data' and 'res_ids' keys have been updated.\n     *\n     * @private\n     * @param {Object} dataPoint of type list\n     * @param {Object} [options] mostly contains the range of operations to apply\n     * @param {Object} [options.from=0] the index of the first operation to apply\n     * @param {Object} [options.to=length] the index of the last operation to apply\n     * @param {Object} [options.position] if set, each new operation will be set\n     *   accordingly at the top or the bottom of the list\n     * @returns {Object} element of type list in which the commands have been\n     *   applied\n     */\n    _applyX2ManyOperations: function (list, options) {\n        if (!list.static) {\n            // this function only applies on x2many lists\n            return list;\n        }\n        var self = this;\n        list = _.extend({}, list);\n        list.res_ids = list.res_ids.slice(0);\n        var changes = list._changes || [];\n        if (options) {\n            var to = options.to === 0 ? 0 : (options.to || changes.length);\n            changes = changes.slice(options.from || 0, to);\n        }\n        _.each(changes, function (change) {\n            var relRecord;\n            if (change.id) {\n                relRecord = self.localData[change.id];\n            }\n            switch (change.operation) {\n                case 'ADD':\n                    list.count++;\n                    var resID = relRecord ? relRecord.res_id : change.resID;\n                    if (change.position === 'top' && (options ? options.position !== 'bottom' : true)) {\n                        list.res_ids.unshift(resID);\n                    } else {\n                        list.res_ids.push(resID);\n                    }\n                    break;\n                case 'FORGET':\n                case 'DELETE':\n                    list.count--;\n                    // FIXME awa: there is no \"relRecord\" for o2m field\n                    // seems like using change.id does the trick -> check with framework JS\n                    var deletedResID = relRecord ? relRecord.res_id : change.id;\n                    list.res_ids = _.without(list.res_ids, deletedResID);\n                    break;\n                case 'REMOVE_ALL':\n                    list.count = 0;\n                    list.res_ids = [];\n                    break;\n                case 'UPDATE':\n                    // nothing to do for UPDATE commands\n                    break;\n            }\n        });\n        this._setDataInRange(list);\n        return list;\n    },\n    /**\n     * Helper method to build a 'spec', that is a description of all fields in\n     * the view that have a onchange defined on them.\n     *\n     * An onchange spec is necessary as an argument to the /onchange route. It\n     * looks like this: { field: \"1\", anotherField: \"\", relation.subField: \"1\"}\n     *\n     * The first onchange call will fill up the record with default values, so\n     * we need to send every field name known to us in this case.\n     *\n     * @see _performOnChange\n     *\n     * @param {Object} record resource object of type 'record'\n     * @param {string} [viewType] current viewType. If not set, we will assume\n     *   main viewType from the record\n     * @returns {Object} with two keys\n     *   - 'hasOnchange': true iff there is at least a field with onchange\n     *   - 'onchangeSpec': the onchange spec\n     */\n    _buildOnchangeSpecs: function (record, viewType) {\n        let hasOnchange = false;\n        const onchangeSpec = {};\n        var fieldsInfo = record.fieldsInfo[viewType || record.viewType];\n        generateSpecs(fieldsInfo, record.fields);\n\n        // recursively generates the onchange specs for fields in fieldsInfo,\n        // and their subviews\n        function generateSpecs(fieldsInfo, fields, prefix) {\n            prefix = prefix || '';\n            _.each(Object.keys(fieldsInfo), function (name) {\n                var field = fields[name];\n                var fieldInfo = fieldsInfo[name];\n                var key = prefix + name;\n                onchangeSpec[key] = (field.onChange) || \"\";\n                if (field.onChange) {\n                    hasOnchange = true;\n                }\n                if (field.type === 'one2many' || field.type === 'many2many') {\n                    _.each(fieldInfo.views, function (view) {\n                        generateSpecs(view.fieldsInfo[view.type], view.fields, key + '.');\n                    });\n                }\n            });\n        }\n        return { hasOnchange, onchangeSpec };\n    },\n    /**\n     * Ensures that dataPoint ids are always synchronized between the main and\n     * sample models when being in sample mode. Here, we now that __id in the\n     * sample model is always greater than __id in the main model (as it\n     * contains strictly more datapoints).\n     *\n     * @override\n     */\n    async _callSampleModel() {\n        await this._super(...arguments);\n        if (this._isInSampleMode) {\n            this.__id = this.sampleModel.__id;\n        }\n    },\n    /**\n     * Compute the default value that the handle field should take.\n     * We need to compute this in order for new lines to be added at the correct position.\n     *\n     * @private\n     * @param {Object} listID\n     * @param {string} position\n     * @return {Object} empty object if no overrie has to be done, or:\n     *  field: the name of the field to override,\n     *  value: the value to use for that field\n     */\n    _computeOverrideDefaultFields: function (listID, position) {\n        var list = this.localData[listID];\n        var handleField;\n\n        // Here listID is actually just parentID, it's not yet confirmed\n        // to be a list.\n        // If we are not in the case that interests us,\n        // listID will be undefined and this check will work.\n        if (!list) {\n            return {};\n        }\n\n        position = position || 'bottom';\n\n        // Let's find if there is a field with handle.\n        if (!list.fieldsInfo) {\n            return {};\n        }\n        for (var field in list.fieldsInfo.list) {\n            if (list.fieldsInfo.list[field].widget === 'handle') {\n                handleField = field;\n                break;\n                // If there are 2 handle fields on the same list,\n                // we take the first one we find.\n                // And that will be alphabetically on the field name...\n            }\n        }\n\n        if (!handleField) {\n            return {};\n        }\n\n        // We don't want to override the default value\n        // if the list is not ordered by the handle field.\n        var isOrderedByHandle = list.orderedBy\n            && list.orderedBy.length\n            && list.orderedBy[0].asc === true\n            && list.orderedBy[0].name === handleField;\n\n        if (!isOrderedByHandle) {\n            return {};\n        }\n\n        // We compute the list (get) to apply the pending changes before doing our work,\n        // otherwise new lines might not be taken into account.\n        // We use raw: true because we only need to load the first level of relation.\n        var computedList = this.get(list.id, {raw: true});\n\n        // We don't need to worry about the position of a new line if the list is empty.\n        if (!computedList || !computedList.data || !computedList.data.length) {\n            return {};\n        }\n\n        // If there are less elements in the list than the limit of\n        // the page then take the index of the last existing line.\n\n        // If the button is at the top, we want the new element on\n        // the first line of the page.\n\n        // If the button is at the bottom, we want the new element\n        // after the last line of the page\n        // (= theorically it will be the first element of the next page).\n\n        // We ignore list.offset because computedList.data\n        // will only have the current page elements.\n\n        var index = Math.min(\n            computedList.data.length - 1,\n            position !== 'top' ? list.limit - 1 : 0\n        );\n\n        // This positioning will almost be correct. There might just be\n        // an issue if several other lines have the same handleFieldValue.\n\n        // TODO ideally: if there is an element with the same handleFieldValue,\n        // that one and all the following elements must be incremented\n        // by 1 (at least until there is a gap in the numbering).\n\n        // We don't do it now because it's not an important case.\n        // However, we can for sure increment by 1 if we are on the last page.\n        var handleFieldValue = computedList.data[index].data[handleField];\n        if (position === 'top') {\n            handleFieldValue--;\n        } else if (list.count <= list.offset + list.limit - (list.tempLimitIncrement || 0)) {\n            handleFieldValue++;\n        }\n        return {\n            field: handleField,\n            value: handleFieldValue,\n        };\n    },\n    /**\n     * Evaluate modifiers\n     *\n     * @private\n     * @param {Object} element a valid element object, which will serve as eval\n     *   context.\n     * @param {Object} modifiers\n     * @returns {Object}\n     * @throws {Error} if one of the modifier domains is invalid\n     */\n    _evalModifiers: function (element, modifiers) {\n        let evalContext = null;\n        const evaluated = {};\n        for (const k of ['invisible', 'column_invisible', 'readonly', 'required']) {\n            const mod = modifiers[k];\n            if (mod === undefined || mod === false || mod === true) {\n                if (k in modifiers) {\n                    evaluated[k] = !!mod;\n                }\n                continue;\n            }\n            try {\n                evalContext = evalContext || this._getEvalContext(element);\n                evaluated[k] = new Domain(mod, evalContext).compute(evalContext);\n            } catch (e) {\n                throw new Error(_.str.sprintf('for modifier \"%s\": %s', k, e.message));\n            }\n        }\n        return evaluated;\n    },\n    /**\n     * Fetch the type of model (e.g. 'res.partner') contained in the model_field\n     * @private\n     * @param {Object} record - an element from the localData\n     * @param {Object} fieldName - the name of the field\n     * @param {Object} fieldInfo - the info of the field\n     * @returns {Promise}\n     */\n    _fetchModelFieldReference: async function (record, fieldName, fieldInfo) {\n        const modelField = fieldInfo.options.model_field;\n        const value = record._changes && record._changes[modelField] || record.data[modelField];\n        if (value) {\n            if (record.fields[modelField].type !== \"many2one\"\n                || record.fields[modelField].relation !== 'ir.model') {\n                throw new Error(`The model_field of the reference field\n                                 ${fieldName} must be a many2one('ir.model').`);\n            }\n            const modelId = this.localData[value].res_id;\n            const resourceRef = record.specialData[fieldName];\n            if (resourceRef && modelId === resourceRef.modelId) {\n                resourceRef.hasChanged = false;\n                return Promise.resolve(resourceRef);\n            } else {\n                const result = await this._rpc({\n                    model: 'ir.model',\n                    method: 'read',\n                    args: [modelId, ['id', 'model']],\n                });\n                // Checks the case where the data on the backend side are not synchronized\n                // (modelFieldName != referenceFieldName) when opening the edit view (!_changes).\n                // We want to avoid resynchronization in order not to modify the data \n                // without being requested.\n                if (!record._changes && record.data[fieldName]\n                    && result[0].model !== this.localData[record.data[fieldName]].model) {\n                    const modelFieldName = record.fields[modelField].string;\n                    const referenceFieldName = record.fields[fieldName].string;\n\n                    this.displayNotification({\n                        title: _.str.sprintf(\n                            _t(`'%s' is unsynchronized with '%s'.`),\n                            referenceFieldName,\n                            modelFieldName,\n                        ),\n                        message: _.str.sprintf(\n                            _t(`If you change %s or %s, the synchronization will be reapplied and the data will be modified.`),\n                            modelFieldName,\n                            referenceFieldName,\n                        ),\n                        sticky: true,\n                        type: 'danger',\n                    });\n                    return false;\n                }\n                return {\n                    modelName: result[0].model,\n                    modelId: result[0].id,\n                    hasChanged: true,\n                };\n            }\n        }\n    },\n    /**\n     * Fetch name_get for a record datapoint.\n     *\n     * @param {Object} dataPoint\n     * @returns {Promise}\n     */\n    _fetchNameGet: function (dataPoint) {\n        return this._rpc({\n            model: dataPoint.model,\n            method: 'name_get',\n            args: [dataPoint.res_id],\n            context: dataPoint.getContext(),\n        }).then(function (result) {\n            dataPoint.data.display_name = result[0][1];\n        });\n    },\n    /**\n     * Fetch name_get for a field of type Many2one or Reference\n     *\n     * @private\n     * @params {Object} list: must be a datapoint of type list\n     *   (for example: a datapoint representing a x2many)\n     * @params {string} fieldName: the name of a field of type Many2one or Reference\n     * @returns {Promise}\n     */\n    _fetchNameGets: function (list, fieldName) {\n        var self = this;\n        // We first get the model this way because if list.data is empty\n        // the _.each below will not make it.\n        var model = list.fields[fieldName].relation;\n        var records = [];\n        var ids = [];\n        list = this._applyX2ManyOperations(list);\n\n        _.each(list.data, function (localId) {\n            var record = self.localData[localId];\n            var data = record._changes || record.data;\n            var many2oneId = data[fieldName];\n            if (!many2oneId) { return; }\n            var many2oneRecord = self.localData[many2oneId];\n            records.push(many2oneRecord);\n            ids.push(many2oneRecord.res_id);\n            // We need to calculate the model this way too because\n            // field .relation is not set for a reference field.\n            model = many2oneRecord.model;\n        });\n\n        if (!ids.length) {\n            return Promise.resolve();\n        }\n        return this._rpc({\n                model: model,\n                method: 'name_get',\n                args: [_.uniq(ids)],\n                context: list.context,\n            })\n            .then(function (name_gets) {\n                _.each(records, function (record) {\n                    var nameGet = _.find(name_gets, function (nameGet) {\n                        return nameGet[0] === record.data.id;\n                    });\n                    record.data.display_name = nameGet[1];\n                });\n            });\n    },\n    /**\n     * For a given resource of type 'record', fetch all data.\n     *\n     * @param {Object} record local resource\n     * @param {Object} [options]\n     * @param {string[]} [options.fieldNames] the list of fields to fetch. If\n     *   not given, fetch all the fields in record.fieldNames (+ display_name)\n     * @param {string} [options.viewType] the type of view for which the record\n     *   is fetched (usefull to load the adequate fields), by defaults, uses\n     *   record.viewType\n     * @returns {Promise<Object>} resolves to the record or is rejected in\n     *   case no id given were valid ids\n     */\n    _fetchRecord: function (record, options) {\n        var self = this;\n        options = options || {};\n        var fieldNames = options.fieldNames || record.getFieldNames(options);\n        fieldNames = _.uniq(fieldNames.concat(['display_name']));\n        return this._rpc({\n                model: record.model,\n                method: 'read',\n                args: [[record.res_id], fieldNames],\n                context: _.extend({bin_size: true}, record.getContext()),\n            })\n            .then(function (result) {\n                if (result.length === 0) {\n                    return Promise.reject();\n                }\n                result = result[0];\n                record.data = _.extend({}, record.data, result);\n            })\n            .then(function () {\n                self._parseServerData(fieldNames, record, record.data);\n            })\n            .then(function () {\n                return Promise.all([\n                    self._fetchX2Manys(record, options),\n                    self._fetchReferences(record, options)\n                ]).then(function () {\n                    return self._postprocess(record, options);\n                });\n            });\n    },\n    /**\n     * Fetch the `name_get` for a reference field.\n     *\n     * @private\n     * @param {Object} record\n     * @param {string} fieldName\n     * @returns {Promise}\n     */\n    _fetchReference: function (record, fieldName) {\n        var self = this;\n        var def;\n        var value = record._changes && record._changes[fieldName] || record.data[fieldName];\n        var model = value && value.split(',')[0];\n        var resID = value && parseInt(value.split(',')[1]);\n        if (model && model !== 'False' && resID) {\n            def = self._rpc({\n                model: model,\n                method: 'name_get',\n                args: [resID],\n                context: record.getContext({fieldName: fieldName}),\n            }).then(function (result) {\n                return self._makeDataPoint({\n                    data: {\n                        id: result[0][0],\n                        display_name: result[0][1],\n                    },\n                    modelName: model,\n                    parentID: record.id,\n                });\n            });\n        }\n        return Promise.resolve(def);\n    },\n    /**\n     * Fetches data for reference fields and assigns these data to newly\n     * created datapoint.\n     * Then places datapoint reference into parent record.\n     *\n     * @param {Object} datapoints a collection of ids classed by model,\n     *   @see _getDataToFetchByModel\n     * @param {string} model\n     * @param {string} fieldName\n     * @returns {Promise}\n     */\n    _fetchReferenceData: function (datapoints, model, fieldName) {\n        var self = this;\n        var ids = _.map(Object.keys(datapoints), function (id) { return parseInt(id); });\n        // we need one parent for the context (they all have the same)\n        var parent = datapoints[ids[0]][0];\n        var def = self._rpc({\n            model: model,\n            method: 'name_get',\n            args: [ids],\n            context: self.localData[parent].getContext({fieldName: fieldName}),\n        }).then(function (result) {\n            _.each(result, function (el) {\n                var parentIDs = datapoints[el[0]];\n                _.each(parentIDs, function (parentID) {\n                    var parent = self.localData[parentID];\n                    var referenceDp = self._makeDataPoint({\n                        data: {\n                            id: el[0],\n                            display_name: el[1],\n                        },\n                        modelName: model,\n                        parentID: parent.id,\n                    });\n                    parent.data[fieldName] = referenceDp.id;\n                });\n            });\n        });\n        return def;\n    },\n    /**\n     * Fetch the extra data (`name_get`) for the reference fields of the record\n     * model.\n     *\n     * @private\n     * @param {Object} record\n     * @returns {Promise}\n     */\n    _fetchReferences: function (record, options) {\n        var self = this;\n        var defs = [];\n        var fieldNames = options && options.fieldNames || record.getFieldNames();\n        _.each(fieldNames, function (fieldName) {\n            var field = record.fields[fieldName];\n            if (field.type === 'reference') {\n                var def = self._fetchReference(record, fieldName).then(function (dataPoint) {\n                    if (dataPoint) {\n                        record.data[fieldName] = dataPoint.id;\n                    }\n                });\n                defs.push(def);\n            }\n        });\n        return Promise.all(defs);\n    },\n    /**\n     * Batch requests for one reference field in list (one request by different\n     * model in the field values).\n     *\n     * @see _fetchReferencesBatched\n     * @param {Object} list\n     * @param {string} fieldName\n     * @returns {Promise}\n     */\n    _fetchReferenceBatched: function (list, fieldName) {\n        var self = this;\n        list = this._applyX2ManyOperations(list);\n        this._sortList(list);\n\n        var toFetch = this._getDataToFetchByModel(list, fieldName);\n        var defs = [];\n        // one name_get by model\n        _.each(toFetch, function (datapoints, model) {\n            defs.push(self._fetchReferenceData(datapoints, model, fieldName));\n        });\n\n        return Promise.all(defs);\n    },\n    /**\n     * Batch requests for references for datapoint of type list.\n     *\n     * @param {Object} list\n     * @returns {Promise}\n     */\n    _fetchReferencesBatched: function (list) {\n        var defs = [];\n        var fieldNames = list.getFieldNames();\n        for (var i = 0; i < fieldNames.length; i++) {\n            var field = list.fields[fieldNames[i]];\n            if (field.type === 'reference') {\n                defs.push(this._fetchReferenceBatched(list, fieldNames[i]));\n            }\n        }\n        return Promise.all(defs);\n    },\n    /**\n     * Batch reference requests for all records in list.\n     *\n     * @see _fetchReferencesSingleBatch\n     * @param {Object} list a valid resource object\n     * @param {string} fieldName\n     * @returns {Promise}\n     */\n    _fetchReferenceSingleBatch: function (list, fieldName) {\n        var self = this;\n\n        // collect ids by model\n        var toFetch = {};\n        _.each(list.data, function (groupIndex) {\n            var group = self.localData[groupIndex];\n            self._getDataToFetchByModel(group, fieldName, toFetch);\n        });\n\n        var defs = [];\n        // one name_get by model\n        _.each(toFetch, function (datapoints, model) {\n            defs.push(self._fetchReferenceData(datapoints, model, fieldName));\n        });\n\n        return Promise.all(defs);\n    },\n    /**\n     * Batch requests for all reference field in list's children.\n     * Called by _readGroup to make only one 'name_get' rpc by fieldName.\n     *\n     * @param {Object} list a valid resource object\n     * @returns {Promise}\n     */\n    _fetchReferencesSingleBatch: function (list) {\n        var defs = [];\n        var fieldNames = list.getFieldNames();\n        for (var fIndex in fieldNames) {\n            var field = list.fields[fieldNames[fIndex]];\n            if (field.type === 'reference') {\n                defs.push(this._fetchReferenceSingleBatch(list, fieldNames[fIndex]));\n            }\n        }\n        return Promise.all(defs);\n    },\n    /**\n     * Fetch model data from server, relationally to fieldName and resulted\n     * field relation. For example, if fieldName is \"tag_ids\" and referred to\n     * project.tags, it will fetch project.tags' related fields where its id is\n     * contained in toFetch.ids array.\n     *\n     * @param {Object} list a valid resource object\n     * @param {Object} toFetch a list of records and res_ids,\n     *   @see _getDataToFetch\n     * @param {string} fieldName\n     * @returns {Promise}\n     */\n    _fetchRelatedData: function (list, toFetch, fieldName) {\n        var self = this;\n        var ids = _.keys(toFetch);\n        for (var i = 0; i < ids.length; i++) {\n            ids[i] = Number(ids[i]);\n        }\n        var fieldInfo = list.fieldsInfo[list.viewType][fieldName];\n\n        if (!ids.length || fieldInfo.__no_fetch) {\n            return Promise.resolve();\n        }\n\n        var def;\n        var fieldNames = _.keys(fieldInfo.relatedFields);\n        if (fieldNames.length) {\n            var field = list.fields[fieldName];\n            def = this._rpc({\n                model: field.relation,\n                method: 'read',\n                args: [ids, fieldNames],\n                context: list.getContext() || {},\n            });\n        } else {\n            def = Promise.resolve(_.map(ids, function (id) {\n                return {id:id};\n            }));\n        }\n        return def.then(function (result) {\n            var records = _.uniq(_.flatten(_.values(toFetch)));\n            self._updateRecordsData(records, fieldName, result);\n        });\n    },\n    /**\n     * Check the AbstractField specializations that are (will be) used by the\n     * given record and fetch the special data they will need. Special data are\n     * data that the rendering of the record won't need if it was not using\n     * particular widgets (example of these can be found at the methods which\n     * start with _fetchSpecial).\n     *\n     * @param {Object} record - an element from the localData\n     * @param {Object} options\n     * @returns {Promise<Array>}\n     *          The promise is resolved with an array containing the names of\n     *          the field whose special data has been changed.\n     */\n    _fetchSpecialData: function (record, options) {\n        var self = this;\n        var specialFieldNames = [];\n        var fieldNames = (options && options.fieldNames) || record.getFieldNames();\n        return Promise.all(_.map(fieldNames, function (name) {\n            var viewType = (options && options.viewType) || record.viewType;\n            var fieldInfo = record.fieldsInfo[viewType][name] || {};\n            var Widget = fieldInfo.Widget;\n            if (Widget && Widget.prototype.specialData) {\n                return self[Widget.prototype.specialData](record, name, fieldInfo).then(function (data) {\n                    if (data === undefined) {\n                        return;\n                    }\n                    record.specialData[name] = data;\n                    specialFieldNames.push(name);\n                });\n            }\n        })).then(function () {\n            return specialFieldNames;\n        });\n    },\n    /**\n     * Fetches all the m2o records associated to the given fieldName. If the\n     * given fieldName is not a m2o field, nothing is done.\n     *\n     * @param {Object} record - an element from the localData\n     * @param {Object} fieldName - the name of the field\n     * @param {Object} fieldInfo\n     * @param {string[]} [fieldsToRead] - the m2os fields to read (id and\n     *                                  display_name are automatic).\n     * @returns {Promise<any>}\n     *          The promise is resolved with the fetched special data. If this\n     *          data is the same as the previously fetched one (for the given\n     *          parameters), no RPC is done and the promise is resolved with\n     *          the undefined value.\n     */\n    _fetchSpecialMany2ones: function (record, fieldName, fieldInfo, fieldsToRead) {\n        var field = record.fields[fieldName];\n        if (field.type !== \"many2one\") {\n            return Promise.resolve();\n        }\n\n        var context = record.getContext({fieldName: fieldName});\n        var domain = record.getDomain({fieldName: fieldName});\n        if (domain.length) {\n            var localID = (record._changes && fieldName in record._changes) ?\n                            record._changes[fieldName] :\n                            record.data[fieldName];\n            if (localID) {\n                var element = this.localData[localID];\n                domain = [\"|\", [\"id\", \"=\", element.data.id]].concat(domain);\n            }\n        }\n\n        // avoid rpc if not necessary\n        var hasChanged = this._saveSpecialDataCache(record, fieldName, {\n            context: context,\n            domain: domain,\n        });\n        if (!hasChanged) {\n            return Promise.resolve();\n        }\n\n        var self = this;\n        return this._rpc({\n                model: field.relation,\n                method: 'search_read',\n                fields: [\"id\"].concat(fieldsToRead || []),\n                context: context,\n                domain: domain,\n            })\n            .then(function (records) {\n                var ids = _.pluck(records, 'id');\n                return self._rpc({\n                        model: field.relation,\n                        method: 'name_get',\n                        args: [ids],\n                        context: context,\n                    })\n                    .then(function (name_gets) {\n                        _.each(records, function (rec) {\n                            var name_get = _.find(name_gets, function (n) {\n                                return n[0] === rec.id;\n                            });\n                            rec.display_name = name_get[1];\n                        });\n                        return records;\n                    });\n            });\n    },\n    /**\n     * Fetches all the relation records associated to the given fieldName. If\n     * the given fieldName is not a relational field, nothing is done.\n     *\n     * @param {Object} record - an element from the localData\n     * @param {Object} fieldName - the name of the field\n     * @returns {Promise<any>}\n     *          The promise is resolved with the fetched special data. If this\n     *          data is the same as the previously fetched one (for the given\n     *          parameters), no RPC is done and the promise is resolved with\n     *          the undefined value.\n     */\n    _fetchSpecialRelation: function (record, fieldName) {\n        var field = record.fields[fieldName];\n        if (!_.contains([\"many2one\", \"many2many\", \"one2many\"], field.type)) {\n            return Promise.resolve();\n        }\n\n        var context = record.getContext({fieldName: fieldName});\n        var domain = record.getDomain({fieldName: fieldName});\n\n        // avoid rpc if not necessary\n        var hasChanged = this._saveSpecialDataCache(record, fieldName, {\n            context: context,\n            domain: domain,\n        });\n        if (!hasChanged) {\n            return Promise.resolve();\n        }\n\n        return this._rpc({\n                model: field.relation,\n                method: 'name_search',\n                args: [\"\", domain],\n                context: context\n            });\n    },\n    /**\n     * Fetches the `name_get` associated to the reference widget if the field is\n     * a `char` (which is a supported case).\n     *\n     * @private\n     * @param {Object} record - an element from the localData\n     * @param {Object} fieldName - the name of the field\n     * @param {Object} fieldInfo - the info of the field\n     * @returns {Promise}\n     */\n    _fetchSpecialReference: function (record, fieldName, fieldInfo) {\n        var field = record.fields[fieldName];\n        if (field.type === 'char') {\n            // if the widget reference is set on a char field, the name_get\n            // needs to be fetched a posteriori\n            return Promise.resolve(this._fetchReference(record, fieldName));\n        } else if (fieldInfo.options.model_field) {\n            return this._fetchModelFieldReference(record, fieldName, fieldInfo);\n        }\n        return Promise.resolve();\n    },\n    /**\n     * Fetches all the m2o records associated to the given fieldName. If the\n     * given fieldName is not a m2o field, nothing is done. The difference with\n     * _fetchSpecialMany2ones is that the field given by options.fold_field is\n     * also fetched.\n     *\n     * @param {Object} record - an element from the localData\n     * @param {Object} fieldName - the name of the field\n     * @param {Object} fieldInfo\n     * @returns {Promise<any>}\n     *          The promise is resolved with the fetched special data. If this\n     *          data is the same as the previously fetched one (for the given\n     *          parameters), no RPC is done and the promise is resolved with\n     *          the undefined value.\n     */\n    _fetchSpecialStatus: function (record, fieldName, fieldInfo) {\n        var foldField = fieldInfo.options.fold_field;\n        var fieldsToRead = foldField ? [foldField] : [];\n        return this._fetchSpecialMany2ones(record, fieldName, fieldInfo, fieldsToRead).then(function (m2os) {\n            _.each(m2os, function (m2o) {\n                m2o.fold = foldField ? m2o[foldField] : false;\n            });\n            return m2os;\n        });\n    },\n    /**\n     * Fetch all data in a ungrouped list\n     *\n     * @param {Object} list a valid resource object\n     * @param {Object} [options]\n     * @param {boolean} [options.enableRelationalFetch=true] if false, will not\n     *   fetch x2m and relational data (that will be done by _readGroup in this\n     *   case).\n     * @returns {Promise<Object>} resolves to the fecthed list\n     */\n    _fetchUngroupedList: function (list, options) {\n        options = _.defaults(options || {}, {enableRelationalFetch: true});\n        var self = this;\n        var def;\n        if (list.static) {\n            def = this._readUngroupedList(list).then(function () {\n                if (list.parentID && self.isNew(list.parentID)) {\n                    // list from a default_get, so fetch display_name for many2one fields\n                    var many2ones = self._getMany2OneFieldNames(list);\n                    var defs = _.map(many2ones, function (name) {\n                        return self._fetchNameGets(list, name);\n                    });\n                    return Promise.all(defs);\n                }\n            });\n        } else {\n            def = this._searchReadUngroupedList(list);\n        }\n        return def.then(function () {\n            if (options.enableRelationalFetch) {\n                return Promise.all([\n                    self._fetchX2ManysBatched(list),\n                    self._fetchReferencesBatched(list)\n                ]);\n            }\n        }).then(function () {\n            return list;\n        });\n    },\n    /**\n     * batch requests for 1 x2m in list\n     *\n     * @see _fetchX2ManysBatched\n     * @param {Object} list\n     * @param {string} fieldName\n     * @returns {Promise}\n     */\n    _fetchX2ManyBatched: function (list, fieldName) {\n        list = this._applyX2ManyOperations(list);\n        this._sortList(list);\n\n        var toFetch = this._getDataToFetch(list, fieldName);\n        return this._fetchRelatedData(list, toFetch, fieldName);\n    },\n    /**\n     * X2Manys have to be fetched by separate rpcs (their data are stored on\n     * different models). This method takes a record, look at its x2many fields,\n     * then, if necessary, create a local resource and fetch the corresponding\n     * data.\n     *\n     * It also tries to reuse data, if it can find an existing list, to prevent\n     * useless rpcs.\n     *\n     * @param {Object} record local resource\n     * @param {Object} [options]\n     * @param {string[]} [options.fieldNames] the list of fields to fetch.\n     *   If not given, fetch all the fields in record.fieldNames\n     * @param {string} [options.viewType] the type of view for which the main\n     *   record is fetched (useful to load the adequate fields), by defaults,\n     *   uses record.viewType\n     * @returns {Promise}\n     */\n    _fetchX2Manys: function (record, options) {\n        var self = this;\n        var defs = [];\n        options = options || {};\n        var fieldNames = options.fieldNames || record.getFieldNames(options);\n        var viewType = options.viewType || record.viewType;\n        _.each(fieldNames, function (fieldName) {\n            var field = record.fields[fieldName];\n            if (field.type === 'one2many' || field.type === 'many2many') {\n                var fieldInfo = record.fieldsInfo[viewType][fieldName];\n                var rawContext = fieldInfo && fieldInfo.context;\n                var view = fieldInfo.views && fieldInfo.views[fieldInfo.mode];\n                var fieldsInfo = view ? view.fieldsInfo : (fieldInfo.fieldsInfo || {});\n                var ids = record.data[fieldName] || [];\n                var list = self._makeDataPoint({\n                    count: ids.length,\n                    context: _.extend({}, record.context, field.context),\n                    fieldsInfo: fieldsInfo,\n                    fields: view ? view.fields : fieldInfo.relatedFields,\n                    limit: fieldInfo.limit,\n                    modelName: field.relation,\n                    res_ids: ids,\n                    static: true,\n                    type: 'list',\n                    orderedBy: fieldInfo.orderedBy,\n                    parentID: record.id,\n                    rawContext: rawContext,\n                    relationField: field.relation_field,\n                    viewType: view ? view.type : fieldInfo.viewType,\n                });\n                record.data[fieldName] = list.id;\n                if (!fieldInfo.__no_fetch) {\n                    var def = self._readUngroupedList(list).then(function () {\n                        return Promise.all([\n                            self._fetchX2ManysBatched(list),\n                            self._fetchReferencesBatched(list)\n                        ]);\n                    });\n                    defs.push(def);\n                }\n            }\n        });\n        return Promise.all(defs);\n    },\n    /**\n     * batch request for x2ms for datapoint of type list\n     *\n     * @param {Object} list\n     * @returns {Promise}\n     */\n    _fetchX2ManysBatched: function (list) {\n        var defs = [];\n        var fieldNames = list.getFieldNames();\n        for (var i = 0; i < fieldNames.length; i++) {\n            var field = list.fields[fieldNames[i]];\n            if (field.type === 'many2many' || field.type === 'one2many') {\n                defs.push(this._fetchX2ManyBatched(list, fieldNames[i]));\n            }\n        }\n        return Promise.all(defs);\n    },\n    /**\n     * For a non-static list, batches requests for all its sublists' records.\n     * Make only one rpc for all records on the concerned field.\n     *\n     * @see _fetchX2ManysSingleBatch\n     * @param {Object} list a valid resource object, its data must be another\n     *   list containing records\n     * @param {string} fieldName\n     * @returns {Promise}\n     */\n    _fetchX2ManySingleBatch: function (list, fieldName) {\n        var self = this;\n        var toFetch = {};\n        _.each(list.data, function (groupIndex) {\n            var group = self.localData[groupIndex];\n            var nextDataToFetch = self._getDataToFetch(group, fieldName);\n            _.each(_.keys(nextDataToFetch), function (id) {\n                if (toFetch[id]) {\n                    toFetch[id] = toFetch[id].concat(nextDataToFetch[id]);\n                } else {\n                    toFetch[id] = nextDataToFetch[id];\n                }\n            });\n        });\n        return self._fetchRelatedData(list, toFetch, fieldName);\n    },\n    /**\n     * Batch requests for all x2m in list's children.\n     * Called by _readGroup to make only one 'read' rpc by fieldName.\n     *\n     * @param {Object} list a valid resource object\n     * @returns {Promise}\n     */\n    _fetchX2ManysSingleBatch: function (list) {\n        var defs = [];\n        var fieldNames = list.getFieldNames();\n        for (var i = 0; i < fieldNames.length; i++) {\n            var field = list.fields[fieldNames[i]];\n            if (field.type === 'many2many' || field.type === 'one2many'){\n                defs.push(this._fetchX2ManySingleBatch(list, fieldNames[i]));\n            }\n        }\n        return Promise.all(defs);\n    },\n    /**\n     * Generates an object mapping field names to their changed value in a given\n     * record (i.e. maps to the new value for basic fields, to the res_id for\n     * many2ones and to commands for x2manys).\n     *\n     * @private\n     * @param {Object} record\n     * @param {Object} [options]\n     * @param {boolean} [options.changesOnly=true] if true, only generates\n     *   commands for fields that have changed (concerns x2many fields only)\n     * @param {boolean} [options.withReadonly=false] if false, doesn't generate\n     *   changes for readonly fields\n     * @param {string} [options.viewType] current viewType. If not set, we will\n     *   assume main viewType from the record. Note that if an editionViewType is\n     *   specified for a field, it will take the priority over the viewType arg.\n     * @returns {Object} a map from changed fields to their new value\n     */\n    _generateChanges: function (record, options) {\n        options = options || {};\n        var viewType = options.viewType || record.viewType;\n        var changes;\n        const changesOnly = 'changesOnly' in options ? !!options.changesOnly : true;\n        if (!changesOnly) {\n            changes = _.extend({}, record.data, record._changes);\n        } else {\n            changes = _.extend({}, record._changes);\n        }\n        var withReadonly = options.withReadonly || false;\n        var commands = this._generateX2ManyCommands(record, {\n            changesOnly: changesOnly,\n            withReadonly: withReadonly,\n        });\n        for (var fieldName in record.fields) {\n            // remove readonly fields from the list of changes\n            if (!withReadonly && fieldName in changes || fieldName in commands) {\n                var editionViewType = record._editionViewType[fieldName] || viewType;\n                if (this._isFieldProtected(record, fieldName, editionViewType)) {\n                    delete changes[fieldName];\n                    continue;\n                }\n            }\n\n            // process relational fields and handle the null case\n            var type = record.fields[fieldName].type;\n            var value;\n            if (type === 'one2many' || type === 'many2many') {\n                if (!changesOnly || (commands[fieldName] && commands[fieldName].length)) { // replace localId by commands\n                    changes[fieldName] = commands[fieldName];\n                } else { // no command -> no change for that field\n                    delete changes[fieldName];\n                }\n            } else if (type === 'many2one' && fieldName in changes) {\n                value = changes[fieldName];\n                changes[fieldName] = value ? this.localData[value].res_id : false;\n            } else if (type === 'reference' && fieldName in changes) {\n                value = changes[fieldName];\n                changes[fieldName] = value ?\n                    this.localData[value].model + ',' + this.localData[value].res_id :\n                    false;\n            } else if (type === 'char' && changes[fieldName] === '') {\n                changes[fieldName] = false;\n            } else if (changes[fieldName] === null) {\n                changes[fieldName] = false;\n            }\n        }\n        return changes;\n    },\n    /**\n     * Generates an object mapping field names to their current value in a given\n     * record. If the record is inside a one2many, the returned object contains\n     * an additional key (the corresponding many2one field name) mapping to the\n     * current value of the parent record.\n     *\n     * @param {Object} record\n     * @param {Object} [options] This option object will be given to the private\n     *   method _generateX2ManyCommands.  In particular, it is useful to be able\n     *   to send changesOnly:true to get all data, not only the current changes.\n     * @returns {Object} the data\n     */\n    _generateOnChangeData: function (record, options) {\n        options = _.extend({}, options || {}, {withReadonly: true});\n        var data = {};\n        if (!options.firstOnChange) {\n            var commands = this._generateX2ManyCommands(record, options);\n            data = _.extend(this.get(record.id, {raw: true}).data, commands);\n            // 'display_name' is automatically added to the list of fields to fetch,\n            // when fetching a record, even if it doesn't appear in the view. However,\n            // only the fields in the view must be passed to the onchange RPC, so we\n            // remove it from the data sent by RPC if it isn't in the view.\n            var hasDisplayName = _.some(record.fieldsInfo, function (fieldsInfo) {\n                return 'display_name' in fieldsInfo;\n            });\n            if (!hasDisplayName) {\n                delete data.display_name;\n            }\n        }\n\n        // one2many records have a parentID\n        if (record.parentID) {\n            var parent = this.localData[record.parentID];\n            // parent is the list element containing all the records in the\n            // one2many and parent.parentID is the ID of the main record\n            // if there is a relation field, this means that record is an elem\n            // in a one2many. The relation field is the corresponding many2one\n            if (parent.parentID && parent.relationField) {\n                var parentRecord = this.localData[parent.parentID];\n                data[parent.relationField] = this._generateOnChangeData(parentRecord);\n            }\n        }\n\n        return data;\n    },\n    /**\n     * Read all x2many fields and generate the commands for the server to create\n     * or write them...\n     *\n     * @param {Object} record\n     * @param {Object} [options]\n     * @param {string} [options.fieldNames] if given, generates the commands for\n     *   these fields only\n     * @param {boolean} [changesOnly=false] if true, only generates commands for\n     *   fields that have changed\n     * @param {boolean} [options.withReadonly=false] if false, doesn't generate\n     *   changes for readonly fields in commands\n     * @returns {Object} a map from some field names to commands\n     */\n    _generateX2ManyCommands: function (record, options) {\n        var self = this;\n        options = options || {};\n        const changesOnly = options.changesOnly;\n        var fields = record.fields;\n        if (options.fieldNames) {\n            fields = _.pick(fields, options.fieldNames);\n        }\n        var commands = {};\n        var data = _.extend({}, record.data, record._changes);\n        var type;\n        for (var fieldName in fields) {\n            type = fields[fieldName].type;\n\n            if (type === 'many2many' || type === 'one2many') {\n                if (!data[fieldName]) {\n                    // skip if this field is empty\n                    continue;\n                }\n                commands[fieldName] = [];\n                var list = this.localData[data[fieldName]];\n                if (options.changesOnly && (!list._changes || !list._changes.length)) {\n                    // if only changes are requested, skip if there is no change\n                    continue;\n                }\n                var oldResIDs = list.res_ids.slice(0);\n                var relRecordAdded = [];\n                var relRecordUpdated = [];\n                _.each(list._changes, function (change) {\n                    if (change.operation === 'ADD' && change.id) {\n                        relRecordAdded.push(self.localData[change.id]);\n                    } else if (change.operation === 'UPDATE' && !self.isNew(change.id)) {\n                        // ignore new records that would have been updated\n                        // afterwards, as all their changes would already\n                        // be aggregated in the CREATE command\n                        relRecordUpdated.push(self.localData[change.id]);\n                    }\n                });\n                list = this._applyX2ManyOperations(list);\n                this._sortList(list);\n                if (type === 'many2many' || list._forceM2MLink) {\n                    var relRecordCreated = _.filter(relRecordAdded, function (rec) {\n                        return typeof rec.res_id === 'string';\n                    });\n                    var realIDs = _.difference(list.res_ids, _.pluck(relRecordCreated, 'res_id'));\n                    // deliberately generate a single 'replace' command instead\n                    // of a 'delete' and a 'link' commands with the exact diff\n                    // because 1) performance-wise it doesn't change anything\n                    // and 2) to guard against concurrent updates (policy: force\n                    // a complete override of the actual value of the m2m)\n                    commands[fieldName].push(x2ManyCommands.replace_with(realIDs));\n                    _.each(relRecordCreated, function (relRecord) {\n                        var changes = self._generateChanges(relRecord, options);\n                        commands[fieldName].push(x2ManyCommands.create(relRecord.ref, changes));\n                    });\n                    // generate update commands for records that have been\n                    // updated (it may happen with editable lists)\n                    _.each(relRecordUpdated, function (relRecord) {\n                        var changes = self._generateChanges(relRecord, options);\n                        if (!_.isEmpty(changes)) {\n                            var command = x2ManyCommands.update(relRecord.res_id, changes);\n                            commands[fieldName].push(command);\n                        }\n                    });\n                } else if (type === 'one2many') {\n                    var removedIds = _.difference(oldResIDs, list.res_ids);\n                    var addedIds = _.difference(list.res_ids, oldResIDs);\n                    var keptIds = _.intersection(oldResIDs, list.res_ids);\n\n                    // the didChange variable keeps track of the fact that at\n                    // least one id was updated\n                    var didChange = false;\n                    var changes, command, relRecord;\n                    for (var i = 0; i < list.res_ids.length; i++) {\n                        if (_.contains(keptIds, list.res_ids[i])) {\n                            // this is an id that already existed\n                            relRecord = _.findWhere(relRecordUpdated, {res_id: list.res_ids[i]});\n                            changes = relRecord ? this._generateChanges(relRecord, options) : {};\n                            if (!_.isEmpty(changes)) {\n                                command = x2ManyCommands.update(relRecord.res_id, changes);\n                                didChange = true;\n                            } else {\n                                command = x2ManyCommands.link_to(list.res_ids[i]);\n                            }\n                            commands[fieldName].push(command);\n                        } else if (_.contains(addedIds, list.res_ids[i])) {\n                            // this is a new id (maybe existing in DB, but new in JS)\n                            relRecord = _.findWhere(relRecordAdded, {res_id: list.res_ids[i]});\n                            if (!relRecord) {\n                                commands[fieldName].push(x2ManyCommands.link_to(list.res_ids[i]));\n                                continue;\n                            }\n                            changes = this._generateChanges(relRecord, options);\n                            if (!this.isNew(relRecord.id)) {\n                                // the subrecord already exists in db\n                                commands[fieldName].push(x2ManyCommands.link_to(relRecord.res_id));\n                                if (changesOnly ? Object.keys(changes).length : this.isDirty(relRecord.id)) {\n                                    delete changes.id;\n                                    commands[fieldName].push(x2ManyCommands.update(relRecord.res_id, changes));\n                                }\n                            } else {\n                                // the subrecord is new, so create it\n\n                                // we may have received values from an onchange for fields that are\n                                // not in the view, and that we don't even know, as we don't have the\n                                // fields_get of models of related fields. We save those values\n                                // anyway, but for many2ones, we have to extract the id from the pair\n                                // [id, display_name]\n                                const rawChangesEntries = Object.entries(relRecord._rawChanges);\n                                for (const [fieldName, value] of rawChangesEntries) {\n                                    const isMany2OneValue = Array.isArray(value) &&\n                                                            value.length === 2 &&\n                                                            Number.isInteger(value[0]) &&\n                                                            typeof value[1] === 'string';\n                                    changes[fieldName] = isMany2OneValue ? value[0] : value;\n                                }\n\n                                commands[fieldName].push(x2ManyCommands.create(relRecord.ref, changes));\n                            }\n                        }\n                    }\n                    if (options.changesOnly && !didChange && addedIds.length === 0 && removedIds.length === 0) {\n                        // in this situation, we have no changed ids, no added\n                        // ids and no removed ids, so we can safely ignore the\n                        // last changes\n                        commands[fieldName] = [];\n                    }\n                    // add delete commands\n                    for (i = 0; i < removedIds.length; i++) {\n                        if (list._forceM2MUnlink) {\n                            commands[fieldName].push(x2ManyCommands.forget(removedIds[i]));\n                        } else {\n                            commands[fieldName].push(x2ManyCommands.delete(removedIds[i]));\n                        }\n                    }\n                }\n            }\n        }\n        return commands;\n    },\n    /**\n     * Every RPC done by the model need to add some context, which is a\n     * combination of the context of the session, of the record/list, and/or of\n     * the concerned field. This method combines all these contexts and evaluate\n     * them with the proper evalcontext.\n     *\n     * @param {Object} element an element from the localData\n     * @param {Object} [options]\n     * @param {string|Object} [options.additionalContext]\n     *        another context to evaluate and merge to the returned context\n     * @param {string} [options.fieldName]\n     *        if given, this field's context is added to the context, instead of\n     *        the element's context (except if options.full is true)\n     * @param {boolean} [options.full=false]\n     *        if true or nor fieldName or additionalContext given in options,\n     *        the element's context is added to the context\n     * @returns {Object} the evaluated context\n     */\n    _getContext: function (element, options) {\n        options = options || {};\n        var context = new Context(session.user_context);\n        context.set_eval_context(this._getEvalContext(element));\n\n        if (options.full || !(options.fieldName || options.additionalContext)) {\n            var context_to_add = options.sanitize_default_values ?\n                _.omit(element.context, function (val, key) {\n                    return _.str.startsWith(key, 'default_');\n                })\n                : element.context;\n            context.add(context_to_add);\n        }\n        if (options.fieldName) {\n            var viewType = options.viewType || element.viewType;\n            var fieldInfo = element.fieldsInfo[viewType][options.fieldName];\n            if (fieldInfo && fieldInfo.context) {\n                context.add(fieldInfo.context);\n            } else {\n                var fieldParams = element.fields[options.fieldName];\n                if (fieldParams.context) {\n                    context.add(fieldParams.context);\n                }\n            }\n        }\n        if (options.additionalContext) {\n            context.add(options.additionalContext);\n        }\n        if (element.rawContext) {\n            var rawContext = new Context(element.rawContext);\n            var evalContext = this._getEvalContext(this.localData[element.parentID]);\n            evalContext.id = evalContext.id || false;\n            rawContext.set_eval_context(evalContext);\n            context.add(rawContext);\n        }\n\n        return context.eval();\n    },\n    /**\n     * Collects from a record a list of ids to fetch, according to fieldName,\n     * and a list of records where to set the result of the fetch.\n     *\n     * @param {Object} list a list containing records we want to get the ids,\n     *   it assumes _applyX2ManyOperations and _sort have been already called on\n     *   this list\n     * @param {string} fieldName\n     * @return {Object} a list of records and res_ids\n     */\n    _getDataToFetch: function (list, fieldName) {\n        var self = this;\n        var field = list.fields[fieldName];\n        var fieldInfo = list.fieldsInfo[list.viewType][fieldName];\n        var view = fieldInfo.views && fieldInfo.views[fieldInfo.mode];\n        var fieldsInfo = view ? view.fieldsInfo : fieldInfo.fieldsInfo;\n        var fields = view ? view.fields : fieldInfo.relatedFields;\n        var viewType = view ? view.type : fieldInfo.viewType;\n\n        var toFetch = {};\n\n        // flattens the list.data ids in a grouped case\n        let dataPointIds = list.data;\n        for (let i = 0; i < list.groupedBy.length; i++) {\n            dataPointIds = dataPointIds.reduce((acc, groupId) =>\n                acc.concat(this.localData[groupId].data), []);\n        }\n\n        dataPointIds.forEach(function (dataPoint) {\n            var record = self.localData[dataPoint];\n            if (typeof record.data[fieldName] === 'string'){\n                // in this case, the value is a local ID, which means that the\n                // record has already been processed. It can happen for example\n                // when a user adds a record in a m2m relation, or loads more\n                // records in a kanban column\n                return;\n            }\n\n            _.each(record.data[fieldName], function (id) {\n                toFetch[id] = toFetch[id] || [];\n                toFetch[id].push(record);\n            });\n\n            var m2mList = self._makeDataPoint({\n                fieldsInfo: fieldsInfo,\n                fields: fields,\n                modelName: field.relation,\n                parentID: record.id,\n                res_ids: record.data[fieldName],\n                static: true,\n                type: 'list',\n                viewType: viewType,\n            });\n            record.data[fieldName] = m2mList.id;\n        });\n\n        return toFetch;\n    },\n    /**\n     * Determines and returns from a list a collection of ids classed by\n     * their model.\n     *\n     * @param {Object} list a valid resource object\n     * @param {string} fieldName\n     * @param {Object} [toFetchAcc] an object to store fetching data. Used when\n     *  batching reference across multiple groups.\n     *    [modelName: string]: {\n     *        [recordId: number]: datapointId[]\n     *    }\n     * @returns {Object} each key represent a model and contain a sub-object\n     * where each key represent an id (res_id) containing an array of\n     * webclient id (referred to a datapoint, so not a res_id).\n     */\n    _getDataToFetchByModel: function (list, fieldName, toFetchAcc) {\n        var self = this;\n        var toFetch = toFetchAcc || {};\n        _.each(list.data, function (dataPoint) {\n            var record = self.localData[dataPoint];\n            var value = record.data[fieldName];\n            // if the reference field has already been fetched, the value is a\n            // datapoint ID, and in this case there's nothing to do\n            if (value && !self.localData[value]) {\n                var model = value.split(',')[0];\n                var resID = value.split(',')[1];\n                if (!(model in toFetch)) {\n                    toFetch[model] = {};\n                }\n                // there could be multiple datapoints with the same model/resID\n                if (toFetch[model][resID]) {\n                    toFetch[model][resID].push(dataPoint);\n                } else {\n                    toFetch[model][resID] = [dataPoint];\n                }\n            }\n        });\n        return toFetch;\n    },\n    /**\n     * Given a dataPoint of type list (that may be a group), returns an object\n     * with 'default_' keys to be used to create new records in that group.\n     *\n     * @private\n     * @param {Object} dataPoint\n     * @returns {Object}\n     */\n    _getDefaultContext: function (dataPoint) {\n        var defaultContext = {};\n        while (dataPoint.parentID) {\n            var parent = this.localData[dataPoint.parentID];\n            var groupByField = parent.groupedBy[0].split(':')[0];\n            var value = viewUtils.getGroupValue(dataPoint, groupByField);\n            if (value) {\n                defaultContext['default_' + groupByField] = value;\n            }\n            dataPoint = parent;\n        }\n        return defaultContext;\n    },\n    /**\n     * Some records are associated to a/some domain(s). This method allows to\n     * retrieve them, evaluated.\n     *\n     * @param {Object} element an element from the localData\n     * @param {Object} [options]\n     * @param {string} [options.fieldName]\n     *        the name of the field whose domain needs to be returned\n     * @returns {Array} the evaluated domain\n     */\n    _getDomain: function (element, options) {\n        if (options && options.fieldName) {\n            if (element._domains[options.fieldName]) {\n                return Domain.prototype.stringToArray(\n                    element._domains[options.fieldName],\n                    this._getEvalContext(element, true)\n                );\n            }\n            var viewType = options.viewType || element.viewType;\n            var fieldInfo = element.fieldsInfo[viewType][options.fieldName];\n            if (fieldInfo && fieldInfo.domain) {\n                return Domain.prototype.stringToArray(\n                    fieldInfo.domain,\n                    this._getEvalContext(element, true)\n                );\n            }\n            var fieldParams = element.fields[options.fieldName];\n            if (fieldParams.domain) {\n                return Domain.prototype.stringToArray(\n                    fieldParams.domain,\n                    this._getEvalContext(element, true)\n                );\n            }\n            return [];\n        }\n\n        return Domain.prototype.stringToArray(\n            element.domain,\n            this._getEvalContext(element, true)\n        );\n    },\n    /**\n     * Returns the evaluation context that should be used when evaluating the\n     * context/domain associated to a given element from the localData.\n     *\n     * It is actually quite subtle.  We need to add some magic keys: active_id\n     * and active_ids.  Also, the session user context is added in the mix to be\n     * sure.  This allows some domains to use the uid key for example\n     *\n     * @param {Object} element - an element from the localData\n     * @param {boolean} [forDomain=false] if true, evaluates x2manys as a list of\n     *   ids instead of a list of commands\n     * @returns {Object}\n     */\n    _getEvalContext: function (element, forDomain) {\n        var evalContext = element.type === 'record' ? this._getRecordEvalContext(element, forDomain) : {};\n\n        if (element.parentID) {\n            var parent = this.localData[element.parentID];\n            if (parent.type === 'list' && parent.parentID) {\n                parent = this.localData[parent.parentID];\n            }\n            if (parent.type === 'record') {\n                evalContext.parent = this._getRecordEvalContext(parent, forDomain);\n            }\n        }\n        // Uses \"current_company_id\" because \"company_id\" would conflict with all the company_id fields\n        // in general, the actual \"company_id\" field of the form should be used for m2o domains, not this fallback\n        let current_company_id;\n        if (session.user_context.allowed_company_ids) {\n            current_company_id = session.user_context.allowed_company_ids[0];\n        } else {\n            current_company_id = session.user_companies ?\n                session.user_companies.current_company :\n                false;\n        }\n        return Object.assign(\n            {\n                active_id: evalContext.id || false,\n                active_ids: evalContext.id ? [evalContext.id] : [],\n                active_model: element.model,\n                current_company_id,\n                id: evalContext.id || false,\n            },\n            pyUtils.context(),\n            session.user_context,\n            element.context,\n            evalContext,\n        );\n    },\n    /**\n     * Returns the list of field names of the given element according to its\n     * default view type.\n     *\n     * @param {Object} element an element from the localData\n     * @param {Object} [options]\n     * @param {Object} [options.viewType] current viewType. If not set, we will\n     *   assume main viewType from the record\n     * @returns {string[]} the list of field names\n     */\n    _getFieldNames: function (element, options) {\n        var fieldsInfo = element.fieldsInfo;\n        var viewType = options && options.viewType || element.viewType;\n        return Object.keys(fieldsInfo && fieldsInfo[viewType] || {});\n    },\n    /**\n     * Get a subset of a list resource keeping only the props to keep.\n     * This permits to a web_read_group to keep some of the properties\n     * of a previous list if it is still in its results.\n     *\n     * @private\n     * @param {Object} list\n     * @param {boolean} options.onlyGroup true when we only fetched the group's own data\n     * @param {boolean} options.hasSubgroups true when the fetched group has subgroups\n     * @returns {Object} subset of list\n     */\n    _getGroupedListPropsToKeep(list, options) {\n        const { isOpen, offset, id } = list;\n        let propsToKeep = { isOpen, offset, id };\n\n        if (options.onlyGroup || isOpen && options.hasSubgroups) {\n            // If the group is opened and contains subgroups,\n            // also keep its data to keep internal state of\n            // sub-groups\n            // Also keep data if we only reload groups' own data\n            propsToKeep.data = list.data;\n            if (options.onlyGroup) {\n                // keep count and res_ids as in this case the group\n                // won't be search_read again. This situation happens\n                // when using kanban quick_create where the record is manually\n                // added to the datapoint before getting here.\n                propsToKeep.res_ids = list.res_ids;\n                propsToKeep.count = list.count;\n            }\n        }\n\n        return propsToKeep;\n    },\n    /**\n     * Get many2one fields names in a datapoint. This is useful in order to\n     * fetch their names in the case of a default_get.\n     *\n     * @private\n     * @param {Object} datapoint a valid resource object\n     * @returns {string[]} list of field names that are many2one\n     */\n    _getMany2OneFieldNames: function (datapoint) {\n        var many2ones = [];\n        _.each(datapoint.fields, function (field, name) {\n            if (field.type === 'many2one') {\n                many2ones.push(name);\n            }\n        });\n        return many2ones;\n    },\n    /**\n     * Evaluate the record evaluation context.  This method is supposed to be\n     * called by _getEvalContext.  It basically only generates a dictionary of\n     * current values for the record, with commands for x2manys fields.\n     *\n     * @param {Object} record an element of type 'record'\n     * @param {boolean} [forDomain=false] if true, x2many values are a list of\n     *   ids instead of a list of commands\n     * @returns Object\n     */\n    _getRecordEvalContext: function (record, forDomain) {\n        var self = this;\n        var relDataPoint;\n        var context = _.extend({}, record.data, record._changes);\n\n        // calls _generateX2ManyCommands for a given field, and returns the array of commands\n        function _generateX2ManyCommands(fieldName) {\n            var commands = self._generateX2ManyCommands(record, {fieldNames: [fieldName]});\n            return commands[fieldName];\n        }\n\n        for (var fieldName in context) {\n            var field = record.fields[fieldName];\n            if (context[fieldName] === null) {\n                context[fieldName] = false;\n            }\n            if (!field || field.name === 'id') {\n                continue;\n            }\n            if (field.type === 'date' || field.type === 'datetime') {\n                if (context[fieldName]) {\n                    context[fieldName] = JSON.parse(JSON.stringify(context[fieldName]));\n                }\n                continue;\n            }\n            if (field.type === 'many2one') {\n                relDataPoint = this.localData[context[fieldName]];\n                context[fieldName] = relDataPoint ? relDataPoint.res_id : false;\n                continue;\n            }\n            if (field.type === 'one2many' || field.type === 'many2many') {\n                var ids;\n                if (!context[fieldName] || _.isArray(context[fieldName])) { // no dataPoint created yet\n                    ids = context[fieldName] ? context[fieldName].slice(0) : [];\n                } else {\n                    relDataPoint = this._applyX2ManyOperations(this.localData[context[fieldName]]);\n                    ids = relDataPoint.res_ids.slice(0);\n                }\n                if (!forDomain) {\n                    // when sent to the server, the x2manys values must be a list\n                    // of commands in a context, but the list of ids in a domain\n                    ids.toJSON = _generateX2ManyCommands.bind(null, fieldName);\n                } else if (field.type === 'one2many') { // Ids are evaluated as a list of ids\n                    /* Filtering out virtual ids from the ids list\n                     * The server will crash if there are virtual ids in there\n                     * The webClient doesn't do literal id list comparison like ids == list\n                     * Only relevant in o2m: m2m does create actual records in db\n                     */\n                    ids = _.filter(ids, function (id) {\n                        return typeof id !== 'string';\n                    });\n                }\n                context[fieldName] = ids;\n            }\n\n        }\n        return context;\n    },\n    /**\n     * Get the domain for a list resource.\n     *\n     * @private\n     * @param {Object} list\n     * @returns {Array[]} list domain\n     */\n    _getUngroupedListDomain(list) {\n        return list.domain || [];\n    },\n    /**\n     * Invalidates the DataManager's cache if the main model (i.e. the model of\n     * its root parent) of the given dataPoint is a model in 'noCacheModels'.\n     *\n     * Reloads the currencies if the main model is 'res.currency'.\n     * Reloads the webclient if we modify a res.company, to (un)activate the\n     * multi-company environment if we are not in a tour test.\n     *\n     * @private\n     * @param {Object} dataPoint\n     */\n    _invalidateCache: function (dataPoint) {\n        while (dataPoint.parentID) {\n            dataPoint = this.localData[dataPoint.parentID];\n        }\n        if (dataPoint.model === 'res.currency') {\n            session.reloadCurrencies();\n        }\n        if (dataPoint.model === 'res.company' && !localStorage.getItem('running_tour')) {\n            this.do_action('reload_context');\n        }\n        if (_.contains(this.noCacheModels, dataPoint.model)) {\n            core.bus.trigger('clear_cache');\n        }\n    },\n    /**\n     * Returns true if the field is protected against changes, looking for a\n     * readonly modifier unless there is a force_save modifier (checking first\n     * in the modifiers, and if there is no readonly modifier, checking the\n     * readonly attribute of the field).\n     *\n     * @private\n     * @param {Object} record an element from the localData\n     * @param {string} fieldName\n     * @param {string} [viewType] current viewType. If not set, we will assume\n     *   main viewType from the record\n     * @returns {boolean}\n     */\n    _isFieldProtected: function (record, fieldName, viewType) {\n        viewType = viewType || record.viewType;\n        var fieldInfo = viewType && record.fieldsInfo && record.fieldsInfo[viewType][fieldName];\n        if (fieldInfo) {\n            var rawModifiers = fieldInfo.modifiers || {};\n            var modifiers = this._evalModifiers(record, _.pick(rawModifiers, 'readonly'));\n            return modifiers.readonly && !fieldInfo.force_save;\n        } else {\n            return false;\n        }\n    },\n    /**\n     * Returns true iff value is considered to be set for the given field's type.\n     *\n     * @private\n     * @param {any} value a value for the field\n     * @param {string} fieldType a type of field\n     * @returns {boolean}\n     */\n    _isFieldSet: function (value, fieldType) {\n        switch (fieldType) {\n            case 'boolean':\n                return true;\n            case 'one2many':\n            case 'many2many':\n                return value.length > 0;\n            default:\n                return value !== false;\n        }\n    },\n    /**\n     * return true if a list element is 'valid'. Such an element is valid if it\n     * has no sub record with an unset required field.\n     *\n     * This method is meant to be used to check if a x2many change will trigger\n     * an onchange.\n     *\n     * @param {string} id id for a local resource of type 'list'. This is\n     *   assumed to be a list element for an x2many\n     * @returns {boolean}\n     */\n    _isX2ManyValid: function (id) {\n        var self = this;\n        var isValid = true;\n        var element = this.localData[id];\n        _.each(element._changes, function (command) {\n            if (command.operation === 'DELETE' ||\n                    command.operation === 'FORGET' ||\n                    (command.operation === 'ADD' &&  !command.isNew)||\n                    command.operation === 'REMOVE_ALL') {\n                return;\n            }\n            var recordData = self.get(command.id, {raw: true}).data;\n            var record = self.localData[command.id];\n            _.each(element.getFieldNames(), function (fieldName) {\n                var field = element.fields[fieldName];\n                var fieldInfo = element.fieldsInfo[element.viewType][fieldName];\n                var rawModifiers = fieldInfo.modifiers || {};\n                var modifiers = self._evalModifiers(record, _.pick(rawModifiers, 'required'));\n                if (modifiers.required && !self._isFieldSet(recordData[fieldName], field.type)) {\n                    isValid = false;\n                }\n            });\n        });\n        return isValid;\n    },\n    /**\n     * Helper method for the load entry point.\n     *\n     * @see load\n     *\n     * @param {Object} dataPoint some local resource\n     * @param {Object} [options]\n     * @param {string[]} [options.fieldNames] the fields to fetch for a record\n     * @param {boolean} [options.onlyGroups=false]\n     * @param {boolean} [options.keepEmptyGroups=false] if set, the groups not\n     *   present in the read_group anymore (empty groups) will stay in the\n     *   datapoint (used to mimic the kanban renderer behaviour for example)\n     * @returns {Promise}\n     */\n    _load: function (dataPoint, options) {\n        if (options && options.onlyGroups &&\n          !(dataPoint.type === 'list' && dataPoint.groupedBy.length)) {\n            return Promise.resolve(dataPoint);\n        }\n\n        if (dataPoint.type === 'record') {\n            return this._fetchRecord(dataPoint, options);\n        }\n        if (dataPoint.type === 'list' && dataPoint.groupedBy.length) {\n            return this._readGroup(dataPoint, options);\n        }\n        if (dataPoint.type === 'list' && !dataPoint.groupedBy.length) {\n            return this._fetchUngroupedList(dataPoint, options);\n        }\n    },\n    /**\n     * Turns a bag of properties into a valid local resource.  Also, register\n     * the resource in the localData object.\n     *\n     * @param {Object} params\n     * @param {Object} [params.aggregateValues={}]\n     * @param {Object} [params.context={}] context of the action\n     * @param {integer} [params.count=0] number of record being manipulated\n     * @param {Object|Object[]} [params.data={}|[]] data of the record\n     * @param {*[]} [params.domain=[]]\n     * @param {Object} params.fields contains the description of each field\n     * @param {Object} [params.fieldsInfo={}] contains the fieldInfo of each field\n     * @param {Object[]} [params.fieldNames] the name of fields to load, the list\n     *   of all fields by default\n     * @param {string[]} [params.groupedBy=[]]\n     * @param {boolean} [params.isOpen]\n     * @param {integer} params.limit max number of records shown on screen (pager size)\n     * @param {string} params.modelName\n     * @param {integer} [params.offset]\n     * @param {boolean} [params.openGroupByDefault]\n     * @param {Object[]} [params.orderedBy=[]]\n     * @param {integer[]} [params.orderedResIDs]\n     * @param {string} [params.parentID] model name ID of the parent model\n     * @param {Object} [params.rawContext]\n     * @param {[type]} [params.ref]\n     * @param {string} [params.relationField]\n     * @param {integer|null} [params.res_id] actual id of record in the server\n     * @param {integer[]} [params.res_ids] context in which the data point is used, from a list of res_id\n     * @param {boolean} [params.static=false]\n     * @param {string} [params.type='record'|'list']\n     * @param {[type]} [params.value]\n     * @param {Object} [params.range] only for datapoints representing groups coming from a groupBy on a\n     *   date(time) field @see _readGroup format: {[fieldName]: {from: string, to: string}}, where\n     *   'from' (inclusive) and 'to' (exclusive) are the group bounds under the respective date format\n     * @param {string} [params.viewType] the type of the view, e.g. 'list' or 'form'\n     * @returns {Object} the resource created\n     */\n    _makeDataPoint: function (params) {\n        var type = params.type || ('domain' in params && 'list') || 'record';\n        var res_id, value;\n        var res_ids = params.res_ids || [];\n        var data = params.data || (type === 'record' ? {} : []);\n        var context = params.context;\n        var fields = _.extend({\n            display_name: {type: 'char'},\n            id: {type: 'integer'},\n        }, params.fields);\n\n        const groupedBy = params.groupedBy || [];\n        let isM2MGrouped = false;\n        if (type === 'record') {\n            res_id = params.res_id || (params.data && params.data.id);\n            if (res_id) {\n                data.id = res_id;\n            } else {\n                res_id = _.uniqueId('virtual_');\n            }\n            // it doesn't make sense for a record datapoint to have those keys\n            // besides, it will mess up x2m and actions down the line\n            context = _.omit(context, ['orderedBy', 'group_by']);\n        } else {\n            var isValueArray = params.value instanceof Array;\n            res_id = isValueArray ? params.value[0] : undefined;\n            value = isValueArray ? params.value[1] : params.value;\n            isM2MGrouped = groupedBy.some((group) => {\n                const [fieldName] = group.split(':');\n                return fields[fieldName].type === \"many2many\";\n            });\n        }\n\n        var dataPoint = {\n            _cache: type === 'list' ? {} : undefined,\n            _changes: null,\n            _domains: {},\n            _rawChanges: {},\n            aggregateValues: params.aggregateValues || {},\n            context: context,\n            count: params.count || res_ids.length,\n            data: data,\n            domain: params.domain || [],\n            fields: fields,\n            fieldsInfo: params.fieldsInfo,\n            groupedBy,\n            groupsCount: 0,\n            groupsLimit: type === 'list' && params.groupsLimit || null,\n            groupsOffset: 0,\n            id: `${params.modelName}_${++this.__id}`,\n            isM2MGrouped,\n            isOpen: params.isOpen,\n            limit: type === 'record' ? 1 : (params.limit || Number.MAX_SAFE_INTEGER),\n            loadMoreOffset: 0,\n            model: params.modelName,\n            offset: params.offset || (type === 'record' ? _.indexOf(res_ids, res_id) : 0),\n            openGroupByDefault: params.openGroupByDefault,\n            orderedBy: params.orderedBy || [],\n            orderedResIDs: params.orderedResIDs,\n            parentID: params.parentID,\n            rawContext: params.rawContext,\n            ref: params.ref || res_id,\n            relationField: params.relationField,\n            res_id: res_id,\n            res_ids: res_ids,\n            specialData: {},\n            _specialDataCache: {},\n            static: params.static || false,\n            type: type,  // 'record' | 'list'\n            value: value,\n            range: params.range,\n            viewType: params.viewType,\n        };\n\n        // _editionViewType is a dict whose keys are field names and which is populated when a field\n        // is edited with the viewType as value. This is useful for one2manys to determine whether\n        // or not a field is readonly (using the readonly modifiers of the view in which the field\n        // has been edited)\n        dataPoint._editionViewType = {};\n\n        dataPoint.evalModifiers = this._evalModifiers.bind(this, dataPoint);\n        dataPoint.getContext = this._getContext.bind(this, dataPoint);\n        dataPoint.getDomain = this._getDomain.bind(this, dataPoint);\n        dataPoint.getFieldNames = this._getFieldNames.bind(this, dataPoint);\n        dataPoint.isDirty = this.isDirty.bind(this, dataPoint.id);\n        dataPoint.isNew = this.isNew.bind(this, dataPoint.id);\n\n        this.localData[dataPoint.id] = dataPoint;\n\n        return dataPoint;\n    },\n    /**\n     * When one needs to create a record from scratch, a not so simple process\n     * needs to be done:\n     * - call the /default_get route to get default values\n     * - fetch all relational data\n     * - apply all onchanges if necessary\n     * - fetch all relational data\n     *\n     * This method tries to optimize the process as much as possible.  Also,\n     * it is quite horrible and should be refactored at some point.\n     *\n     * @private\n     * @param {any} params\n     * @param {string} modelName model name\n     * @param {boolean} [params.allowWarning=false] if true, the default record\n     *   operation can complete, even if a warning is raised\n     * @param {Object} params.context the context for the new record\n     * @param {Object} params.fieldsInfo contains the fieldInfo of each view,\n     *   for each field\n     * @param {Object} params.fields contains the description of each field\n     * @param {Object} params.context the context for the new record\n     * @param {string} params.viewType the key in fieldsInfo of the fields to load\n     * @returns {Promise<string>} resolves to the id for the created resource\n     */\n    async _makeDefaultRecord(modelName, params) {\n        var targetView = params.viewType;\n        var fields = params.fields;\n        var fieldsInfo = params.fieldsInfo;\n        var fieldNames = Object.keys(fieldsInfo[targetView]);\n\n        // Fields that are present in the originating view, that need to be initialized\n        // Hence preventing their value to crash when getting back to the originating view\n        var parentRecord = params.parentID && this.localData[params.parentID].type === 'list' ? this.localData[params.parentID] : null;\n\n        if (parentRecord && parentRecord.viewType in parentRecord.fieldsInfo) {\n            var originView = parentRecord.viewType;\n            fieldNames = _.union(fieldNames, Object.keys(parentRecord.fieldsInfo[originView]));\n            fieldsInfo[targetView] = _.defaults({}, fieldsInfo[targetView], parentRecord.fieldsInfo[originView]);\n            fields = _.defaults({}, fields, parentRecord.fields);\n        }\n\n        var record = this._makeDataPoint({\n            modelName: modelName,\n            fields: fields,\n            fieldsInfo: fieldsInfo,\n            context: params.context,\n            parentID: params.parentID,\n            res_ids: params.res_ids,\n            viewType: targetView,\n        });\n\n        await this.generateDefaultValues(record.id, {}, { fieldNames });\n        try {\n            await this._performOnChange(record, [], { firstOnChange: true });\n        } finally {\n            if (record._warning && params.allowWarning) {\n                delete record._warning;\n            }\n        }\n        if (record._warning) {\n            return Promise.reject();\n        }\n\n        // We want to overwrite the default value of the handle field (if any),\n        // in order for new lines to be added at the correct position.\n        // -> This is a rare case where the defaul_get from the server\n        //    will be ignored by the view for a certain field (usually \"sequence\").\n        var overrideDefaultFields = this._computeOverrideDefaultFields(params.parentID, params.position);\n        if (overrideDefaultFields.field) {\n            record._changes[overrideDefaultFields.field] = overrideDefaultFields.value;\n        }\n\n        // fetch additional data (special data and many2one namegets for \"always_reload\" fields)\n        await this._postprocess(record);\n        // save initial changes, so they can be restored later, if we need to discard\n        await this.executeDirectly(() => this.save(record.id, { savePoint: true }));\n        return record.id;\n    },\n    /**\n     * parse the server values to javascript framwork\n     *\n     * @param {[string]} fieldNames\n     * @param {Object} element the dataPoint used as parent for the created\n     *   dataPoints\n     * @param {Object} data the server data to parse\n     */\n    _parseServerData: function (fieldNames, element, data) {\n        var self = this;\n        _.each(fieldNames, function (fieldName) {\n            var field = element.fields[fieldName];\n            var val = data[fieldName];\n            if (field.type === 'many2one') {\n                // process many2one: split [id, nameget] and create corresponding record\n                if (val !== false) {\n                    // the many2one value is of the form [id, display_name]\n                    var r = self._makeDataPoint({\n                        modelName: field.relation,\n                        fields: {\n                            display_name: {type: 'char'},\n                            id: {type: 'integer'},\n                        },\n                        data: {\n                            display_name: val[1],\n                            id: val[0],\n                        },\n                        parentID: element.id,\n                    });\n                    data[fieldName] = r.id;\n                } else {\n                    // no value for the many2one\n                    data[fieldName] = false;\n                }\n            } else {\n                data[fieldName] = self._parseServerValue(field, val);\n            }\n        });\n    },\n    /**\n     * This method is quite important: it is supposed to perform the /onchange\n     * rpc and apply the result.\n     *\n     * The changes that triggered the onchange are assumed to have already been\n     * applied to the record.\n     *\n     * @param {Object} record\n     * @param {string[]} fields changed fields (empty list in the case of first\n     *   onchange)\n     * @param {Object} [options={}]\n     * @param {string} [options.viewType] current viewType. If not set, we will assume\n     *   main viewType from the record\n     * @param {boolean} [options.firstOnChange=false] set to true if this is the\n     *   first onchange\n     * @returns {Promise}\n     */\n    async _performOnChange(record, fields, options = {}) {\n        const firstOnChange = options.firstOnChange;\n        let { hasOnchange, onchangeSpec } = this._buildOnchangeSpecs(record, options.viewType);\n        if (!firstOnChange && !hasOnchange) {\n            return;\n        }\n        var idList = record.data.id ? [record.data.id] : [];\n        const ctxOptions = {\n            full: true,\n        };\n        if (fields.length === 1) {\n            fields = fields[0];\n            // if only one field changed, add its context to the RPC context\n            ctxOptions.fieldName = fields;\n        }\n        var context = this._getContext(record, ctxOptions);\n        var currentData = this._generateOnChangeData(record, {\n            changesOnly: false,\n            firstOnChange,\n        });\n\n        const result = await this._rpc({\n            model: record.model,\n            method: 'onchange',\n            args: [idList, currentData, fields, onchangeSpec],\n            context: context,\n        });\n        if (!record._changes) {\n            // if the _changes key does not exist anymore, it means that\n            // it was removed by discarding the changes after the rpc\n            // to onchange. So, in that case, the proper response is to\n            // ignore the onchange.\n            return;\n        }\n        if (result.warning) {\n            this.trigger_up('warning', result.warning);\n            record._warning = true;\n        }\n        if (result.domain) {\n            record._domains = Object.assign(record._domains, result.domain);\n        }\n        await this._applyOnChange(result.value, record, { firstOnChange });\n        return result;\n    },\n    /**\n     * This function accumulates RPC requests done in the same call stack, and\n     * performs them in the next micro task tick so that similar requests can be\n     * batched in a single RPC.\n     *\n     * For now, only 'read' calls are supported.\n     *\n     * @private\n     * @param {Object} params\n     * @returns {Promise}\n     */\n    _performRPC: function (params) {\n        var self = this;\n\n        // save the RPC request\n        var request = _.extend({}, params);\n        var prom = new Promise(function (resolve, reject) {\n            request.resolve = resolve;\n            request.reject = reject;\n        });\n        this.batchedRPCsRequests.push(request);\n\n        // empty the pool of RPC requests in the next micro tick\n        Promise.resolve().then(function () {\n            if (!self.batchedRPCsRequests.length) {\n                // pool has already been processed\n                return;\n            }\n\n            // reset pool of RPC requests\n            var batchedRPCsRequests = self.batchedRPCsRequests;\n            self.batchedRPCsRequests = [];\n\n            // batch similar requests\n            var batches = {};\n            var key;\n            for (var i = 0; i < batchedRPCsRequests.length; i++) {\n                var request = batchedRPCsRequests[i];\n                key = request.model + ',' + JSON.stringify(request.context);\n                if (!batches[key]) {\n                    batches[key] = _.extend({}, request, {requests: [request]});\n                } else {\n                    batches[key].ids = _.uniq(batches[key].ids.concat(request.ids));\n                    batches[key].fieldNames = _.uniq(batches[key].fieldNames.concat(request.fieldNames));\n                    batches[key].requests.push(request);\n                }\n            }\n\n            // perform batched RPCs\n            function onSuccess(batch, results) {\n                for (var i = 0; i < batch.requests.length; i++) {\n                    var request = batch.requests[i];\n                    var fieldNames = request.fieldNames.concat(['id']);\n                    var filteredResults = results.filter(function (record) {\n                        return request.ids.indexOf(record.id) >= 0;\n                    }).map(function (record) {\n                        return _.pick(record, fieldNames);\n                    });\n                    request.resolve(filteredResults);\n                }\n            }\n            function onFailure(batch, error) {\n                for (var i = 0; i < batch.requests.length; i++) {\n                    var request = batch.requests[i];\n                    request.reject(error);\n                }\n            }\n            for (key in batches) {\n                var batch = batches[key];\n                self._rpc({\n                    model: batch.model,\n                    method: 'read',\n                    args: [batch.ids, batch.fieldNames],\n                    context: batch.context,\n                }).then(onSuccess.bind(null, batch)).guardedCatch(onFailure.bind(null, batch));\n            }\n        });\n\n        return prom;\n    },\n    /**\n     * Once a record is created and some data has been fetched, we need to do\n     * quite a lot of computations to determine what needs to be fetched. This\n     * method is doing that.\n     *\n     * @see _fetchRecord @see _makeDefaultRecord\n     *\n     * @param {Object} record\n     * @param {Object} [options]\n     * @param {Object} [options.viewType] current viewType. If not set, we will\n     *   assume main viewType from the record\n     * @returns {Promise<Object>} resolves to the finished resource\n     */\n    _postprocess: function (record, options) {\n        var self = this;\n        var viewType = options && options.viewType || record.viewType;\n        var defs = [];\n\n        _.each(record.getFieldNames(options), function (name) {\n            var field = record.fields[name];\n            var fieldInfo = record.fieldsInfo[viewType][name] || {};\n            var options = fieldInfo.options || {};\n            if (options.always_reload) {\n                if (record.fields[name].type === 'many2one') {\n                    const _changes = record._changes || {};\n                    const relRecordId = _changes[name] || record.data[name];\n                    if (!relRecordId) {\n                        return; // field is unset, no need to do the name_get\n                    }\n                    var relRecord = self.localData[relRecordId];\n                    defs.push(self._rpc({\n                            model: field.relation,\n                            method: 'name_get',\n                            args: [relRecord.data.id],\n                            context: self._getContext(record, {fieldName: name, viewType: viewType}),\n                        })\n                        .then(function (result) {\n                            relRecord.data.display_name = result[0][1];\n                        }));\n                }\n            }\n        });\n\n        defs.push(this._fetchSpecialData(record, options));\n\n        return Promise.all(defs).then(function () {\n            return record;\n        });\n    },\n    /**\n     * Process x2many commands in a default record by transforming the list of\n     * commands in operations (pushed in _changes) and fetch the related\n     * records fields.\n     *\n     * Note that this method can be called recursively.\n     *\n     * @todo in master: factorize this code with the postprocessing of x2many in\n     *  _applyOnChange\n     *\n     * @private\n     * @param {Object} record\n     * @param {string} fieldName\n     * @param {Array[Array]} commands\n     * @param {Object} [options]\n     * @param {string} [options.viewType] current viewType. If not set, we will\n     *   assume main viewType from the record\n     * @returns {Promise}\n     */\n    _processX2ManyCommands: function (record, fieldName, commands, options) {\n        var self = this;\n        options = options || {};\n        var defs = [];\n        var field = record.fields[fieldName];\n        var fieldInfo = record.fieldsInfo[options.viewType || record.viewType][fieldName] || {};\n        var view = fieldInfo.views && fieldInfo.views[fieldInfo.mode];\n        var fieldsInfo = view ? view.fieldsInfo : fieldInfo.fieldsInfo;\n        var fields = view ? view.fields : fieldInfo.relatedFields;\n        var viewType = view ? view.type : fieldInfo.viewType;\n\n        // remove default_* keys from parent context to avoid issue of same field name in x2m\n        var parentContext = _.omit(record.context, function (val, key) {\n            return _.str.startsWith(key, 'default_');\n        });\n        var x2manyList = self._makeDataPoint({\n            context: parentContext,\n            fieldsInfo: fieldsInfo,\n            fields: fields,\n            limit: fieldInfo.limit,\n            modelName: field.relation,\n            parentID: record.id,\n            rawContext: fieldInfo && fieldInfo.context,\n            relationField: field.relation_field,\n            res_ids: [],\n            static: true,\n            type: 'list',\n            viewType: viewType,\n        });\n        record._changes[fieldName] = x2manyList.id;\n        x2manyList._changes = [];\n        var many2ones = {};\n        var r;\n        commands = commands || []; // handle false value\n        var isCommandList = commands.length && _.isArray(commands[0]);\n        if (!isCommandList) {\n            commands = [[6, false, commands]];\n        }\n        _.each(commands, function (value) {\n            // value is a command\n            if (value[0] === 0) {\n                // CREATE\n                r = self._makeDataPoint({\n                    modelName: x2manyList.model,\n                    context: x2manyList.context,\n                    fieldsInfo: fieldsInfo,\n                    fields: fields,\n                    parentID: x2manyList.id,\n                    viewType: viewType,\n                });\n                r._noAbandon = true;\n                x2manyList._changes.push({operation: 'ADD', id: r.id});\n                x2manyList._cache[r.res_id] = r.id;\n\n                // this is necessary so the fields are initialized\n                _.each(r.getFieldNames(), function (fieldName) {\n                    r.data[fieldName] = null;\n                });\n\n                r._changes = _.defaults(value[2], r.data);\n                for (var fieldName in r._changes) {\n                    if (!r._changes[fieldName]) {\n                        continue;\n                    }\n                    var isFieldInView = fieldName in r.fields;\n                    if (isFieldInView) {\n                        var field = r.fields[fieldName];\n                        var fieldType = field.type;\n                        var rec;\n                        if (fieldType === 'many2one') {\n                            rec = self._makeDataPoint({\n                                context: r.context,\n                                modelName: field.relation,\n                                data: {id: r._changes[fieldName]},\n                                parentID: r.id,\n                            });\n                            r._changes[fieldName] = rec.id;\n                            many2ones[fieldName] = true;\n                        } else if (fieldType === 'reference') {\n                            var reference = r._changes[fieldName].split(',');\n                            rec = self._makeDataPoint({\n                                context: r.context,\n                                modelName: reference[0],\n                                data: {id: parseInt(reference[1])},\n                                parentID: r.id,\n                            });\n                            r._changes[fieldName] = rec.id;\n                            many2ones[fieldName] = true;\n                        } else if (_.contains(['one2many', 'many2many'], fieldType)) {\n                            var x2mCommands = value[2][fieldName];\n                            defs.push(self._processX2ManyCommands(r, fieldName, x2mCommands));\n                        } else {\n                            r._changes[fieldName] = self._parseServerValue(field, r._changes[fieldName]);\n                        }\n                    }\n                }\n            }\n            if (value[0] === 6) {\n                // REPLACE_WITH\n                _.each(value[2], function (res_id) {\n                    x2manyList._changes.push({operation: 'ADD', resID: res_id});\n                });\n                var def = self._readUngroupedList(x2manyList).then(function () {\n                    return Promise.all([\n                        self._fetchX2ManysBatched(x2manyList),\n                        self._fetchReferencesBatched(x2manyList)\n                    ]);\n                });\n                defs.push(def);\n            }\n        });\n\n        // fetch many2ones display_name\n        _.each(_.keys(many2ones), function (name) {\n            defs.push(self._fetchNameGets(x2manyList, name));\n        });\n\n        return Promise.all(defs);\n    },\n    /**\n     * Reads data from server for all missing fields.\n     *\n     * @private\n     * @param {Object} list a valid resource object\n     * @param {interger[]} resIDs\n     * @param {string[]} fieldNames to check and read if missing\n     * @returns {Promise<Object>}\n     */\n    _readMissingFields: function (list, resIDs, fieldNames) {\n        var self = this;\n\n        var missingIDs = [];\n        for (var i = 0, len = resIDs.length; i < len; i++) {\n            var resId = resIDs[i];\n            var dataPointID = list._cache[resId];\n            if (!dataPointID) {\n                missingIDs.push(resId);\n                continue;\n            }\n            var record = self.localData[dataPointID];\n            var data = _.extend({}, record.data, record._changes);\n            if (_.difference(fieldNames, _.keys(data)).length) {\n                missingIDs.push(resId);\n            }\n        }\n\n        var def;\n        if (missingIDs.length && fieldNames.length) {\n            def = self._performRPC({\n                context: list.getContext(),\n                fieldNames: fieldNames,\n                ids: missingIDs,\n                method: 'read',\n                model: list.model,\n            });\n        } else {\n            def = Promise.resolve(_.map(missingIDs, function (id) {\n                return {id:id};\n            }));\n        }\n        return def.then(function (records) {\n            _.each(resIDs, function (id) {\n                var dataPoint;\n                var data = _.findWhere(records, {id: id});\n                if (id in list._cache) {\n                    dataPoint = self.localData[list._cache[id]];\n                    if (data) {\n                        self._parseServerData(fieldNames, dataPoint, data);\n                        _.extend(dataPoint.data, data);\n                    }\n                } else {\n                    dataPoint = self._makeDataPoint({\n                        context: list.getContext(),\n                        data: data,\n                        fieldsInfo: list.fieldsInfo,\n                        fields: list.fields,\n                        modelName: list.model,\n                        parentID: list.id,\n                        viewType: list.viewType,\n                    });\n                    self._parseServerData(fieldNames, dataPoint, dataPoint.data);\n\n                    // add many2one records\n                    list._cache[id] = dataPoint.id;\n                }\n                // set the dataPoint id in potential 'ADD' operation adding the current record\n                _.each(list._changes, function (change) {\n                    if (change.operation === 'ADD' && !change.id && change.resID === id) {\n                        change.id = dataPoint.id;\n                    }\n                });\n            });\n            return list;\n        });\n    },\n    /**\n     * For a grouped list resource, this method fetches all group data by\n     * performing a /read_group. It also tries to read open subgroups if they\n     * were open before.\n     *\n     * @param {Object} list valid resource object\n     * @param {Object} [options] @see _load\n     * @returns {Promise<Object>} resolves to the fetched group object\n     */\n    _readGroup: function (list, options) {\n        var self = this;\n        options = options || {};\n        var groupByField = list.groupedBy[0];\n        var rawGroupBy = groupByField.split(':')[0];\n        var fields = _.uniq(list.getFieldNames().concat(rawGroupBy));\n        var orderedBy = _.filter(list.orderedBy, function (order) {\n            return order.name === rawGroupBy || list.fields[order.name].group_operator !== undefined;\n        });\n        var openGroupsLimit = list.groupsLimit || self.OPEN_GROUP_LIMIT;\n        var expand = list.openGroupByDefault && options.fetchRecordsWithGroups;\n        return this._rpc({\n                model: list.model,\n                method: 'web_read_group',\n                fields: fields,\n                domain: list.domain,\n                context: list.context,\n                groupBy: list.groupedBy,\n                limit: list.groupsLimit,\n                offset: list.groupsOffset,\n                orderBy: orderedBy,\n                lazy: true,\n                expand: expand,\n                expand_limit: expand ? list.limit : null,\n                expand_orderby: expand ? list.orderedBy : null,\n            })\n            .then(function (result) {\n                var groups = result.groups;\n                list.groupsCount = result.length;\n                var previousGroups = _.map(list.data, function (groupID) {\n                    return self.localData[groupID];\n                });\n                list.data = [];\n                list.count = 0;\n                var defs = [];\n                var openGroupCount = 0;\n\n                _.each(groups, function (group) {\n                    var aggregateValues = {};\n                    _.each(group, function (value, key) {\n                        if (_.contains(fields, key) && key !== groupByField &&\n                            AGGREGATABLE_TYPES.includes(list.fields[key].type)) {\n                                aggregateValues[key] = value;\n                        }\n                    });\n                    // When a view is grouped, we need to display the name of each group in\n                    // the 'title'.\n                    var value = group[groupByField];\n                    if (list.fields[rawGroupBy].type === \"selection\") {\n                        var choice = _.find(list.fields[rawGroupBy].selection, function (c) {\n                            return c[0] === value;\n                        });\n                        value = choice ? choice[1] : false;\n                    }\n                    // When group_by_no_leaf key is present FIELD_ID_count doesn't exist\n                    // we have to get the count from `__count` instead\n                    // see _read_group_raw in models.py\n                    const countKey = rawGroupBy + '_count';\n                    var newGroup = self._makeDataPoint({\n                        modelName: list.model,\n                        count: countKey in group ? group[countKey] : group.__count,\n                        domain: group.__domain,\n                        context: list.context,\n                        fields: list.fields,\n                        fieldsInfo: list.fieldsInfo,\n                        value: value,\n                        range: group.__range,\n                        aggregateValues: aggregateValues,\n                        groupedBy: list.groupedBy.slice(1),\n                        orderedBy: list.orderedBy,\n                        orderedResIDs: list.orderedResIDs,\n                        limit: list.limit,\n                        openGroupByDefault: list.openGroupByDefault,\n                        parentID: list.id,\n                        type: 'list',\n                        viewType: list.viewType,\n                    });\n                    var oldGroup = _.find(previousGroups, function (g) {\n                        return g.res_id === newGroup.res_id && g.value === newGroup.value;\n                    });\n                    if (oldGroup) {\n                        delete self.localData[newGroup.id];\n                        // restore the internal state of the group\n                        const oldPropsToKeep = self._getGroupedListPropsToKeep(oldGroup, {\n                            onlyGroup: options.onlyGroups,\n                            hasSubgroups: newGroup.groupedBy.length\n                        });\n                        Object.assign(newGroup, oldPropsToKeep);\n                        // set the limit such that all previously loaded records\n                        // (e.g. if we are coming back to the kanban view from a\n                        // form view) are reloaded\n                        newGroup.limit = oldGroup.limit + oldGroup.loadMoreOffset;\n                        self.localData[newGroup.id] = newGroup;\n                    } else if (!newGroup.openGroupByDefault || openGroupCount >= openGroupsLimit) {\n                        newGroup.isOpen = false;\n                    } else if ('__fold' in group) {\n                        newGroup.isOpen = !group.__fold;\n                    } else {\n                        // open the group iff it is a first level group\n                        newGroup.isOpen = !self.localData[newGroup.parentID].parentID;\n                    }\n                    list.data.push(newGroup.id);\n                    list.count += newGroup.count;\n                    if (newGroup.isOpen && newGroup.count > 0) {\n                        openGroupCount++;\n                        if (group.__data) {\n                            // bypass the search_read when the group's records have been obtained\n                            // by the call to 'web_read_group' (see @_searchReadUngroupedList)\n                            newGroup.__data = group.__data;\n                        }\n                        options = _.defaults({enableRelationalFetch: false}, options);\n                        defs.push(self._load(newGroup, options));\n                    }\n                });\n                if (options.keepEmptyGroups) {\n                    // Find the groups that were available in a previous\n                    // readGroup but are not there anymore.\n                    // Note that these groups are put after existing groups so\n                    // the order is not conserved. A sort *might* be useful.\n                    var emptyGroupsIDs = _.difference(_.pluck(previousGroups, 'id'), list.data);\n                    _.each(emptyGroupsIDs, function (groupID) {\n                        list.data.push(groupID);\n                        var emptyGroup = self.localData[groupID];\n                        // this attribute hasn't been updated in the previous\n                        // loop for empty groups\n                        emptyGroup.aggregateValues = {};\n                    });\n                }\n\n                return Promise.all(defs).then(function (groups) {\n                    if (!options.onlyGroups) {\n                        // generate the res_ids of the main list, being the concatenation\n                        // of the fetched res_ids in each group\n                        list.res_ids = _.flatten(_.map(groups, function (group) {\n                            return group ? group.res_ids : [];\n                        }));\n                    }\n                    return list;\n                }).then(function () {\n                    return Promise.all([\n                        self._fetchX2ManysSingleBatch(list),\n                        self._fetchReferencesSingleBatch(list)\n                    ]).then(function () {\n                        return list;\n                    });\n                });\n            });\n    },\n    /**\n     * For 'static' list, such as one2manys in a form view, we can do a /read\n     * instead of a /search_read.\n     *\n     * @param {Object} list a valid resource object\n     * @returns {Promise<Object>} resolves to the fetched list object\n     */\n    _readUngroupedList: function (list) {\n        var self = this;\n        var def = Promise.resolve();\n\n        // generate the current count and res_ids list by applying the changes\n        list = this._applyX2ManyOperations(list);\n\n        // for multi-pages list datapoints, we might need to read the\n        // order field first to apply the order on all pages\n        if (list.res_ids.length > list.limit && list.orderedBy.length) {\n            if (!list.orderedResIDs) {\n                var fieldNames = _.pluck(list.orderedBy, 'name');\n                def = this._readMissingFields(list, _.filter(list.res_ids, _.isNumber), fieldNames);\n            }\n            def.then(function () {\n                self._sortList(list);\n            });\n        }\n        return def.then(function () {\n            var resIDs = [];\n            var currentResIDs = list.res_ids;\n            // if new records have been added to the list, their virtual ids have\n            // been pushed at the end of res_ids (or at the beginning, depending\n            // on the editable property), ignoring completely the current page\n            // where the records have actually been created ; for that reason,\n            // we use orderedResIDs which is a freezed order with the virtual ids\n            // at the correct position where they were actually inserted ; however,\n            // when we use orderedResIDs, we must filter out ids that are not in\n            // res_ids, which correspond to records that have been removed from\n            // the relation (this information being taken into account in res_ids\n            // but not in orderedResIDs)\n            if (list.orderedResIDs) {\n                currentResIDs = list.orderedResIDs.filter(function (resID) {\n                    return list.res_ids.indexOf(resID) >= 0;\n                });\n            }\n            var currentCount = currentResIDs.length;\n            var upperBound = list.limit ? Math.min(list.offset + list.limit, currentCount) : currentCount;\n            var fieldNames = list.getFieldNames();\n            for (var i = list.offset; i < upperBound; i++) {\n                var resId = currentResIDs[i];\n                if (_.isNumber(resId)) {\n                    resIDs.push(resId);\n                }\n            }\n            return self._readMissingFields(list, resIDs, fieldNames).then(function () {\n                if (list.res_ids.length <= list.limit) {\n                    self._sortList(list);\n                } else {\n                    // sortList has already been applied after first the read\n                    self._setDataInRange(list);\n                }\n                return list;\n            });\n        });\n    },\n    /**\n     * Reload all data for a given resource\n     *\n     * @private\n     * @param {string} id local id for a resource\n     * @param {Object} [options]\n     * @param {boolean} [options.keepChanges=false] if true, doesn't discard the\n     *   changes on the record before reloading it\n     * @returns {Promise<string>} resolves to the id of the resource\n     */\n    _reload: function (id, options) {\n        options = options || {};\n        var element = this.localData[id];\n\n        if (element.type === 'record') {\n            if (!options.currentId && (('currentId' in options) || this.isNew(id))) {\n                var params = {\n                    context: element.context,\n                    fieldsInfo: element.fieldsInfo,\n                    fields: element.fields,\n                    viewType: element.viewType,\n                    allowWarning: true,\n                };\n                return this._makeDefaultRecord(element.model, params);\n            }\n            if (!options.keepChanges) {\n                this.discardChanges(id, {rollback: false});\n            }\n        } else if (element._changes) {\n            delete element.tempLimitIncrement;\n            _.each(element._changes, function (change) {\n                delete change.isNew;\n            });\n        }\n\n        if (options.context !== undefined) {\n            element.context = options.context;\n        }\n        if (options.orderedBy !== undefined) {\n            element.orderedBy = (options.orderedBy.length && options.orderedBy) || element.orderedBy;\n        }\n        if (options.domain !== undefined) {\n            element.domain = options.domain;\n        }\n        if (options.groupBy !== undefined) {\n            element.groupedBy = options.groupBy;\n            element.isM2MGrouped = element.groupedBy.some((group) => {\n                const [fieldName] = group.split(':');\n                return element.fields[fieldName].type === \"many2many\";\n            });\n        }\n        if (options.limit !== undefined) {\n            element.limit = options.limit;\n        }\n        if (options.offset !== undefined) {\n            this._setOffset(element.id, options.offset);\n        }\n        if (options.groupsLimit !== undefined) {\n            element.groupsLimit = options.groupsLimit;\n        }\n        if (options.groupsOffset !== undefined) {\n            element.groupsOffset = options.groupsOffset;\n        }\n        if (options.loadMoreOffset !== undefined) {\n            element.loadMoreOffset = options.loadMoreOffset;\n        } else {\n            // reset if not specified\n            element.loadMoreOffset = 0;\n        }\n        if (options.currentId !== undefined) {\n            element.res_id = options.currentId;\n        }\n        if (options.ids !== undefined) {\n            element.res_ids = options.ids;\n            element.count = element.res_ids.length;\n        }\n        if (element.type === 'record') {\n            element.offset = _.indexOf(element.res_ids, element.res_id);\n        }\n        var loadOptions = _.pick(options, 'fieldNames', 'viewType');\n        return this._load(element, loadOptions).then(function (result) {\n            return result.id;\n        });\n    },\n    /**\n     * Override to handle the case where we want sample data, and we are in a\n     * grouped kanban or list view with real groups, but all groups are empty.\n     * In this case, we use the result of the web_read_group rpc to tweak the\n     * data in the SampleServer instance of the sampleModel (so that calls to\n     * that server will return the same groups).\n     *\n     * @override\n     */\n    async _rpc(params) {\n        const result = await this._super(...arguments);\n        if (this.sampleModel && params.method === 'web_read_group' && result.length) {\n            const sampleServer = this.sampleModel.sampleServer;\n            sampleServer.setExistingGroups(result.groups);\n        }\n        return result;\n    },\n    /**\n     * Allows to save a value in the specialData cache associated to a given\n     * record and fieldName. If the value in the cache was already the given\n     * one, nothing is done and the method indicates it by returning false\n     * instead of true.\n     *\n     * @private\n     * @param {Object} record - an element from the localData\n     * @param {string} fieldName - the name of the field\n     * @param {*} value - the cache value to save\n     * @returns {boolean} false if the value was already the given one\n     */\n    _saveSpecialDataCache: function (record, fieldName, value) {\n        if (_.isEqual(record._specialDataCache[fieldName], value)) {\n            return false;\n        }\n        record._specialDataCache[fieldName] = value;\n        return true;\n    },\n    /**\n     * Do a /search_read to get data for a list resource.  This does a\n     * /search_read because the data may not be static (for ex, a list view).\n     *\n     * @param {Object} list\n     * @returns {Promise}\n     */\n    _searchReadUngroupedList: function (list) {\n        var self = this;\n        var fieldNames = list.getFieldNames();\n        var prom;\n        if (list.__data) {\n            // the data have already been fetched (alongside the groups by the\n            // call to 'web_read_group'), so we can bypass the search_read\n            // But the web_read_group returns the rawGroupBy field's value, which may not be present\n            // in the view. So we filter it out.\n            const fieldNameSet = new Set(fieldNames);\n            fieldNameSet.add(\"id\"); // don't filter out the id\n            list.__data.records.forEach(record =>\n                Object.keys(record)\n                    .filter(fieldName => !fieldNameSet.has(fieldName))\n                    .forEach(fieldName => delete record[fieldName]));\n            prom = Promise.resolve(list.__data);\n        } else {\n            prom = this._rpc({\n                route: '/web/dataset/search_read',\n                model: list.model,\n                fields: fieldNames,\n                context: _.extend({}, list.getContext(), {bin_size: true}),\n                domain: this._getUngroupedListDomain(list),\n                limit: list.limit,\n                offset: list.loadMoreOffset + list.offset,\n                orderBy: list.orderedBy,\n            });\n        }\n        return prom.then(function (result) {\n            delete list.__data;\n            list.count = result.length;\n            var ids = _.pluck(result.records, 'id');\n            var data = _.map(result.records, function (record) {\n                var dataPoint = self._makeDataPoint({\n                    context: list.context,\n                    data: record,\n                    fields: list.fields,\n                    fieldsInfo: list.fieldsInfo,\n                    modelName: list.model,\n                    parentID: list.id,\n                    viewType: list.viewType,\n                });\n\n                // add many2one records\n                self._parseServerData(fieldNames, dataPoint, dataPoint.data);\n                return dataPoint.id;\n            });\n            if (list.loadMoreOffset) {\n                list.data = list.data.concat(data);\n                list.res_ids = list.res_ids.concat(ids);\n            } else {\n                list.data = data;\n                list.res_ids = ids;\n            }\n            self._updateParentResIDs(list);\n            return list;\n        });\n    },\n    /**\n     * Set data in range, i.e. according to the list offset and limit.\n     *\n     * @param {Object} list\n     */\n    _setDataInRange: function (list) {\n        var idsInRange;\n        if (list.limit) {\n            idsInRange = list.res_ids.slice(list.offset, list.offset + list.limit);\n        } else {\n            idsInRange = list.res_ids;\n        }\n        list.data = [];\n        _.each(idsInRange, function (id) {\n            if (list._cache[id]) {\n                list.data.push(list._cache[id]);\n            }\n        });\n\n        // display newly created record in addition to the displayed records\n        if (list.limit) {\n            for (var i = list.offset + list.limit; i < list.res_ids.length; i++) {\n                var id = list.res_ids[i];\n                var dataPointID = list._cache[id];\n                if (_.findWhere(list._changes, {isNew: true, id: dataPointID})) {\n                    list.data.push(dataPointID);\n                } else {\n                    break;\n                }\n            }\n        }\n    },\n    /**\n     * Change the offset of a record. Note that this does not reload the data.\n     * The offset is used to load a different record in a list of record (for\n     * example, a form view with a pager.  Clicking on next/previous actually\n     * changes the offset through this method).\n     *\n     * @param {string} elementId local id for the resource\n     * @param {number} offset\n     */\n    _setOffset: function (elementId, offset) {\n        var element = this.localData[elementId];\n        element.offset = offset;\n        if (element.type === 'record' && element.res_ids.length) {\n            element.res_id = element.res_ids[offset];\n        }\n    },\n    /**\n     * Do a in-memory sort of a list resource data points. This method assumes\n     * that the list data has already been fetched, and that the changes that\n     * need to be sorted have already been applied. Its intended use is for\n     * static datasets, such as a one2many in a form view.\n     *\n     * @param {Object} list list dataPoint on which (some) changes might have\n     *   been applied; it is a copy of an internal dataPoint, not the result of\n     *   get\n     */\n    _sortList: function (list) {\n        if (!list.static) {\n            // only sort x2many lists\n            return;\n        }\n        var self = this;\n\n        if (list.orderedResIDs) {\n            var orderedResIDs = {};\n            for (var k = 0; k < list.orderedResIDs.length; k++) {\n                orderedResIDs[list.orderedResIDs[k]] = k;\n            }\n            utils.stableSort(list.res_ids, function compareResIdIndexes (resId1, resId2) {\n                if (!(resId1 in orderedResIDs) && !(resId2 in orderedResIDs)) {\n                    return 0;\n                }\n                if (!(resId1 in orderedResIDs)) {\n                    return Infinity;\n                }\n                if (!(resId2 in orderedResIDs)) {\n                    return -Infinity;\n                }\n                return orderedResIDs[resId1] - orderedResIDs[resId2];\n            });\n        } else if (list.orderedBy.length) {\n            // sort records according to ordered_by[0]\n            var compareRecords = function (resId1, resId2, level) {\n                if(!level) {\n                    level = 0;\n                }\n                if(list.orderedBy.length < level + 1) {\n                    return 0;\n                }\n                var order = list.orderedBy[level];\n                var record1ID = list._cache[resId1];\n                var record2ID = list._cache[resId2];\n                if (!record1ID && !record2ID) {\n                    return 0;\n                }\n                if (!record1ID) {\n                    return Infinity;\n                }\n                if (!record2ID) {\n                    return -Infinity;\n                }\n                var r1 = self.localData[record1ID];\n                var r2 = self.localData[record2ID];\n                var data1 = _.extend({}, r1.data, r1._changes);\n                var data2 = _.extend({}, r2.data, r2._changes);\n\n                // Default value to sort against: the value of the field\n                var orderData1 = data1[order.name];\n                var orderData2 = data2[order.name];\n\n                // If the field is a relation, sort on the display_name of those records\n                if (list.fields[order.name].type === 'many2one') {\n                    orderData1 = orderData1 ? self.localData[orderData1].data.display_name : \"\";\n                    orderData2 = orderData2 ? self.localData[orderData2].data.display_name : \"\";\n                }\n                if (orderData1 < orderData2) {\n                    return order.asc ? -1 : 1;\n                }\n                if (orderData1 > orderData2) {\n                    return order.asc ? 1 : -1;\n                }\n                return compareRecords(resId1, resId2, level + 1);\n            };\n            utils.stableSort(list.res_ids, compareRecords);\n        }\n        this._setDataInRange(list);\n    },\n    /**\n     * Updates the res_ids of the parent of a given element of type list.\n     *\n     * After some operations (e.g. loading more records, folding/unfolding a\n     * group), the res_ids list of an element may be updated. When this happens,\n     * the res_ids of its ancestors need to be updated as well. This is the\n     * purpose of this function.\n     *\n     * @param {Object} element\n     */\n    _updateParentResIDs: function (element) {\n        var self = this;\n        if (element.parentID) {\n            var parent = this.localData[element.parentID];\n            parent.res_ids =  _.flatten(_.map(parent.data, function (dataPointID) {\n                return self.localData[dataPointID].res_ids;\n            }));\n            this._updateParentResIDs(parent);\n        }\n    },\n    /**\n     * Helper method to create datapoints and assign them values, then link\n     * those datapoints into records' data.\n     *\n     * @param {Object[]} records a list of record where datapoints will be\n     *   assigned, it assumes _applyX2ManyOperations and _sort have been\n     *   already called on this list\n     * @param {string} fieldName concerned field in records\n     * @param {Object[]} values typically a list of values got from a rpc\n     */\n    _updateRecordsData: function (records, fieldName, values) {\n        if (!records.length || !values) {\n            return;\n        }\n        var self = this;\n        var field = records[0].fields[fieldName];\n        var fieldInfo = records[0].fieldsInfo[records[0].viewType][fieldName];\n        var view = fieldInfo.views && fieldInfo.views[fieldInfo.mode];\n        var fieldsInfo = view ? view.fieldsInfo : fieldInfo.fieldsInfo;\n        var fields = view ? view.fields : fieldInfo.relatedFields;\n        var viewType = view ? view.type : fieldInfo.viewType;\n        var id2Values = new Map(values.map((value) => [value.id, value]))\n\n        _.each(records, function (record) {\n            var x2mList = self.localData[record.data[fieldName]];\n            x2mList.data = [];\n            _.each(x2mList.res_ids, function (res_id) {\n                var dataPoint = self._makeDataPoint({\n                    modelName: field.relation,\n                    data: id2Values.get(res_id),\n                    fields: fields,\n                    fieldsInfo: fieldsInfo,\n                    parentID: x2mList.id,\n                    viewType: viewType,\n                });\n                x2mList.data.push(dataPoint.id);\n                x2mList._cache[res_id] = dataPoint.id;\n            });\n        });\n    },\n    /**\n     * Used to apply a updateFn to other records with same res_id, that are\n     * under the same topmost list groupedby many2many.\n     *\n     * When a list datapoint is grouped by many2many, same res_id record could\n     * be in multiple groups, so use this method to apply the same callback to\n     * each one of them.\n     *\n     * @protected\n     * @param {string} recordID local resource\n     * @param {(recordID: string)=>void} updateFn called for each record datapoint\n     *  representing the same res_id record\n     */\n    _updateDuplicateRecords(recordID, updateFn) {\n        const { model, res_id } = this.localData[recordID];\n        // Get the topmost groupedby m2m list\n        const getTopmostID = () => {\n            let element = this.localData[recordID];\n            while (element.parentID && this.localData[element.parentID].type === \"list\") {\n                element = this.localData[element.parentID];\n            }\n            return element.type === \"list\" && element.isM2MGrouped ? element.id : false;\n        };\n        const topmostID = getTopmostID();\n        if (!topmostID) {\n            return;\n        }\n        const topmostList = this.get(topmostID);\n        utils.traverse_records(topmostList, (r) => {\n            if (r.res_id === res_id && r.id !== recordID) {\n                updateFn(r.id);\n            }\n        });\n    },\n    /**\n     * Helper method.  Recursively traverses the data, starting from the element\n     * record (or list), then following all relations.  This is useful when one\n     * want to determine a property for the current record.\n     *\n     * For example, isDirty need to check all relations to find out if something\n     * has been modified, or not.\n     *\n     * Note that this method follows all the changes, so if a record has\n     * relational sub data, it will visit the new sub records and not the old\n     * ones.\n     *\n     * @param {Object} element a valid local resource\n     * @param {callback} fn a function to be called on each visited element\n     */\n    _visitChildren: function (element, fn) {\n        var self = this;\n        fn(element);\n        if (element.type === 'record') {\n            for (var fieldName in element.data) {\n                var field = element.fields[fieldName];\n                if (!field) {\n                    continue;\n                }\n                if (_.contains(['one2many', 'many2one', 'many2many'], field.type)) {\n                    var hasChange = element._changes && fieldName in element._changes;\n                    var value =  hasChange ? element._changes[fieldName] : element.data[fieldName];\n                    var relationalElement = this.localData[value];\n                    // relationalElement could be empty in the case of a many2one\n                    if (relationalElement) {\n                        self._visitChildren(relationalElement, fn);\n                    }\n                }\n            }\n        }\n        if (element.type === 'list') {\n            element = this._applyX2ManyOperations(element);\n            _.each(element.data, function (elemId) {\n                var elem = self.localData[elemId];\n                self._visitChildren(elem, fn);\n            });\n        }\n    },\n});\n\nreturn BasicModel;\n});\n", "odoo.define('web.BasicRenderer', function (require) {\n\"use strict\";\n\n/**\n * The BasicRenderer is an abstract class designed to share code between all\n * views that uses a BasicModel. The main goal is to keep track of all field\n * widgets, and properly destroy them whenever a rerender is done. The widgets\n * and modifiers updates mechanism is also shared in the BasicRenderer.\n */\nvar AbstractRenderer = require('web.AbstractRenderer');\nvar config = require('web.config');\nvar core = require('web.core');\nvar dom = require('web.dom');\nconst session = require('web.session');\nconst utils = require('web.utils');\nconst widgetRegistry = require('web.widget_registry');\nconst widgetRegistryOwl = require(\"web.widgetRegistry\");\n\nconst { WidgetAdapterMixin } = require('web.OwlCompatibility');\nconst FieldWrapper = require('web.FieldWrapper');\nconst WidgetWrapper = require(\"web.WidgetWrapper\");\n\nvar qweb = core.qweb;\nconst _t = core._t;\n\nvar BasicRenderer = AbstractRenderer.extend(WidgetAdapterMixin, {\n    custom_events: {\n        navigation_move: '_onNavigationMove',\n    },\n    /**\n     * Basic renderers implements the concept of \"mode\", they can either be in\n     * readonly mode or editable mode.\n     *\n     * @override\n     */\n    init: function (parent, state, params) {\n        this._super.apply(this, arguments);\n        this.activeActions = params.activeActions;\n        this.viewType = params.viewType;\n        this.mode = params.mode || 'readonly';\n        this.widgets = [];\n        // This attribute lets us know if there is a handle widget on a field,\n        // and on which field it is set.\n        this.handleField = null;\n        this.viewEditable = params.viewEditable;\n    },\n    /**\n     * @override\n     */\n    destroy: function () {\n        this._super.apply(this, arguments);\n        WidgetAdapterMixin.destroy.call(this);\n    },\n    /**\n     * Called each time the renderer is attached into the DOM.\n     */\n    on_attach_callback: function () {\n        this._isInDom = true;\n        // call on_attach_callback on field widgets\n        for (const handle in this.allFieldWidgets) {\n            this.allFieldWidgets[handle].forEach(widget => {\n                if (!utils.isComponent(widget.constructor) && widget.on_attach_callback) {\n                    widget.on_attach_callback();\n                }\n            });\n        }\n        // call on_attach_callback on widgets\n        this.widgets.forEach(widget => {\n            if (widget.on_attach_callback) {\n                widget.on_attach_callback();\n            }\n        });\n        // call on_attach_callback on child components (including field components)\n        WidgetAdapterMixin.on_attach_callback.call(this);\n    },\n    /**\n     * Called each time the renderer is detached from the DOM.\n     */\n    on_detach_callback: function () {\n        this._isInDom = false;\n        // call on_detach_callback on field widgets\n        for (const handle in this.allFieldWidgets) {\n            this.allFieldWidgets[handle].forEach(widget => {\n                if (!utils.isComponent(widget.constructor) && widget.on_detach_callback) {\n                    widget.on_detach_callback();\n                }\n            });\n        }\n        // call on_detach_callback on widgets\n        this.widgets.forEach(widget => {\n            if (widget.on_detach_callback) {\n                widget.on_detach_callback();\n            }\n        });\n        // call on_detach_callback on child components (including field components)\n        WidgetAdapterMixin.on_detach_callback.call(this);\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * This method has two responsabilities: find every invalid fields in the\n     * current view, and making sure that they are displayed as invalid, by\n     * toggling the o_form_invalid css class. It has to be done both on the\n     * widget, and on the label, if any.\n     *\n     * @param {string} recordID\n     * @returns {string[]} the list of invalid field names\n     */\n    canBeSaved: function (recordID) {\n        var self = this;\n        var invalidFields = [];\n        _.each(this.allFieldWidgets[recordID], function (widget) {\n            var canBeSaved = self._canWidgetBeSaved(widget);\n            if (!canBeSaved) {\n                invalidFields.push(widget.name);\n            }\n            if (widget.el) { // widget may not be started yet\n                widget.$el.toggleClass('o_field_invalid', !canBeSaved);\n                widget.$el.attr('aria-invalid', !canBeSaved);\n            }\n        });\n        return invalidFields;\n    },\n    /**\n     * Calls 'commitChanges' on all field widgets, so that they can notify the\n     * environment with their current value (useful for widgets that can't\n     * detect when their value changes or that have to validate their changes\n     * before notifying them).\n     *\n     * @param {string} recordID\n     * @return {Promise}\n     */\n    commitChanges: function (recordID) {\n        var defs = _.map(this.allFieldWidgets[recordID], function (widget) {\n            return widget.commitChanges();\n        });\n        return Promise.all(defs);\n    },\n    /**\n     * Updates the internal state of the renderer to the new state. By default,\n     * this also implements the recomputation of the modifiers and their\n     * application to the DOM and the reset of the field widgets if needed.\n     *\n     * In case the given record is not found anymore, a whole re-rendering is\n     * completed (possible if a change in a record caused an onchange which\n     * erased the current record).\n     *\n     * We could always rerender the view from scratch, but then it would not be\n     * as efficient, and we might lose some local state, such as the input focus\n     * cursor, or the scrolling position.\n     *\n     * @param {Object} state\n     * @param {string} id\n     * @param {string[]} fields\n     * @param {OdooEvent} ev\n     * @returns {Promise<AbstractField[]>} resolved with the list of widgets\n     *                                      that have been reset\n     */\n    confirmChange: function (state, id, fields, ev) {\n        var self = this;\n        this._setState(state);\n        var record = this._getRecord(id);\n        if (!record) {\n            return this._render().then(_.constant([]));\n        }\n\n        // reset all widgets (from the <widget> tag) if any:\n        _.invoke(this.widgets, 'updateState', state);\n\n        var defs = [];\n\n        // Reset all the field widgets that are marked as changed and the ones\n        // which are configured to always be reset on any change\n        _.each(this.allFieldWidgets[id], function (widget) {\n            var fieldChanged = _.contains(fields, widget.name);\n            if (fieldChanged || widget.resetOnAnyFieldChange) {\n                defs.push(widget.reset(record, ev, fieldChanged));\n            }\n        });\n\n        // The modifiers update is done after widget resets as modifiers\n        // associated callbacks need to have all the widgets with the proper\n        // state before evaluation\n        defs.push(this._updateAllModifiers(record));\n\n        return Promise.all(defs).then(function () {\n            return _.filter(self.allFieldWidgets[id], function (widget) {\n                var fieldChanged = _.contains(fields, widget.name);\n                return fieldChanged || widget.resetOnAnyFieldChange;\n            });\n        });\n    },\n    /**\n     * Activates the widget and move the cursor to the given offset\n     *\n     * @param {string} id\n     * @param {string} fieldName\n     * @param {integer} offset\n     */\n    focusField: function (id, fieldName, offset) {\n        this.editRecord(id);\n        if (typeof offset === \"number\") {\n            var field = _.findWhere(this.allFieldWidgets[id], {name: fieldName});\n            dom.setSelectionRange(field.getFocusableElement().get(0), {start: offset, end: offset});\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Activates the widget at the given index for the given record if possible\n     * or the \"next\" possible one. Usually, a widget can be activated if it is\n     * in edit mode, and if it is visible.\n     *\n     * @private\n     * @param {Object} record\n     * @param {integer} currentIndex\n     * @param {Object} [options={}]\n     * @param {integer} [options.inc=1] - the increment to use when searching for the\n     *   \"next\" possible one\n     * @param {boolean} [options.noAutomaticCreate=false]\n     * @param {boolean} [options.wrap=false] if true, when we arrive at the end of the\n     *   list of widget, we wrap around and try to activate widgets starting at\n     *   the beginning. Otherwise, we just stop trying and return -1\n     * @returns {integer} the index of the widget that was activated or -1 if\n     *   none was possible to activate\n     */\n    _activateFieldWidget: function (record, currentIndex, options) {\n        options = options || {};\n        _.defaults(options, {inc: 1, wrap: false});\n        currentIndex = Math.max(0,currentIndex); // do not allow negative currentIndex\n\n        var recordWidgets = this.allFieldWidgets[record.id] || [];\n        for (var i = 0 ; i < recordWidgets.length ; i++) {\n            var activated = recordWidgets[currentIndex].activate(\n                {\n                    event: options.event,\n                    noAutomaticCreate: options.noAutomaticCreate || false\n                });\n            if (activated) {\n                return currentIndex;\n            }\n\n            currentIndex += options.inc;\n            if (currentIndex >= recordWidgets.length) {\n                if (options.wrap) {\n                    currentIndex -= recordWidgets.length;\n                } else {\n                    return -1;\n                }\n            } else if (currentIndex < 0) {\n                if (options.wrap) {\n                    currentIndex += recordWidgets.length;\n                } else {\n                    return -1;\n                }\n            }\n        }\n        return -1;\n    },\n    /**\n     * This is a wrapper of the {@see _activateFieldWidget} function to select\n     * the next possible widget instead of the given one.\n     *\n     * @private\n     * @param {Object} record\n     * @param {integer} currentIndex\n     * @param {Object|undefined} options\n     * @return {integer}\n     */\n    _activateNextFieldWidget: function (record, currentIndex, options) {\n        currentIndex = (currentIndex + 1) % (this.allFieldWidgets[record.id] || []).length;\n        return this._activateFieldWidget(record, currentIndex, _.extend({inc: 1}, options));\n    },\n    /**\n     * This is a wrapper of the {@see _activateFieldWidget} function to select\n     * the previous possible widget instead of the given one.\n     *\n     * @private\n     * @param {Object} record\n     * @param {integer} currentIndex\n     * @return {integer}\n     */\n    _activatePreviousFieldWidget: function (record, currentIndex) {\n        currentIndex = currentIndex ? (currentIndex - 1) : ((this.allFieldWidgets[record.id] || []).length - 1);\n        return this._activateFieldWidget(record, currentIndex, {inc:-1});\n    },\n    /**\n     * Add a tooltip on a $node, depending on a field description\n     *\n     * @param {FieldWidget} widget\n     * @param {$node} $node\n     */\n    _addFieldTooltip: function (widget, $node) {\n        // optional argument $node, the jQuery element on which the tooltip\n        // should be attached if not given, the tooltip is attached on the\n        // widget's $el\n        $node = $node.length ? $node : widget.$el;\n        $node.tooltip(this._getTooltipOptions(widget));\n    },\n    /**\n     * Does the necessary DOM updates to match the given modifiers data. The\n     * modifiers data is supposed to contain the properly evaluated modifiers\n     * associated to the given records and elements.\n     *\n     * @param {Object} modifiersData\n     * @param {Object} record\n     * @param {Object} [element] - do the update only on this element if given\n     */\n    _applyModifiers: function (modifiersData, record, element) {\n        var self = this;\n        var modifiers = modifiersData.evaluatedModifiers[record.id] || {};\n\n        if (element) {\n            _apply(element);\n        } else {\n            // Clone is necessary as the list might change during _.each\n            _.each(_.clone(modifiersData.elementsByRecord[record.id]), _apply);\n        }\n\n        function _apply(element) {\n            // If the view is in edit mode and that a widget have to switch\n            // its \"readonly\" state, we have to re-render it completely\n            if ('readonly' in modifiers && element.widget) {\n                var mode = modifiers.readonly ? 'readonly' : modifiersData.baseModeByRecord[record.id];\n                if (mode !== element.widget.mode) {\n                    self._rerenderFieldWidget(element.widget, record, {\n                        keepBaseMode: true,\n                        mode: mode,\n                    });\n                    return; // Rerendering already applied the modifiers, no need to go further\n                }\n            }\n\n            // Toggle modifiers CSS classes if necessary\n            element.$el.toggleClass(\"o_invisible_modifier\", !!modifiers.invisible);\n            element.$el.toggleClass(\"o_readonly_modifier\", !!modifiers.readonly);\n            element.$el.toggleClass(\"o_required_modifier\", !!modifiers.required);\n\n            if (element.widget && element.widget.updateModifiersValue) {\n                element.widget.updateModifiersValue(modifiers);\n            }\n\n            // Call associated callback\n            if (element.callback) {\n                element.callback(element, modifiers, record);\n            }\n        }\n    },\n    /**\n     * Determines if a given field widget value can be saved. For this to be\n     * true, the widget must be valid (properly parsed value) and have a value\n     * if the associated view field is required.\n     *\n     * @private\n     * @param {AbstractField} widget\n     * @returns {boolean|Promise<boolean>} @see AbstractField.isValid\n     */\n    _canWidgetBeSaved: function (widget) {\n        var modifiers = this._getEvaluatedModifiers(widget.__node, widget.record);\n        return widget.isValid() && (widget.isSet() || !modifiers.required);\n    },\n    /**\n     * Destroys a given widget associated to the given record and removes it\n     * from internal referencing.\n     *\n     * @private\n     * @param {string} recordID id of the local resource\n     * @param {AbstractField} widget\n     * @returns {integer} the index of the removed widget\n     */\n    _destroyFieldWidget: function (recordID, widget) {\n        var recordWidgets = this.allFieldWidgets[recordID];\n        var index = recordWidgets.indexOf(widget);\n        if (index >= 0) {\n            recordWidgets.splice(index, 1);\n        }\n        this._unregisterModifiersElement(widget.__node, recordID, widget);\n        widget.destroy();\n        return index;\n    },\n    /**\n     * Searches for the last evaluation of the modifiers associated to the given\n     * data (modifiers evaluation are supposed to always be up-to-date as soon\n     * as possible).\n     *\n     * @private\n     * @param {Object} node\n     * @param {Object} record\n     * @returns {Object} the evaluated modifiers associated to the given node\n     *                   and record (not recomputed by the call)\n     */\n    _getEvaluatedModifiers: function (node, record) {\n        var element = this._getModifiersData(node);\n        if (!element) {\n            return {};\n        }\n        return element.evaluatedModifiers[record.id] || {};\n    },\n    /**\n     * Searches through the registered modifiers data for the one which is\n     * related to the given node.\n     *\n     * @private\n     * @param {Object} node\n     * @returns {Object|undefined} related modifiers data if any\n     *                             undefined otherwise\n     */\n    _getModifiersData: function (node) {\n        return _.findWhere(this.allModifiersData, {node: node});\n    },\n    /**\n     * This function is meant to be overridden in renderers. It takes a dataPoint\n     * id (for a dataPoint of type record), and should return the corresponding\n     * dataPoint.\n     *\n     * @abstract\n     * @private\n     * @param {string} [recordId]\n     * @returns {Object|null}\n     */\n    _getRecord: function (recordId) {\n        return null;\n    },\n    /**\n     * Get the options for the tooltip. This allow to change this options in another module.\n     * @param widget\n     * @return {{}}\n     * @private\n     */\n    _getTooltipOptions: function (widget) {\n        return {\n            template: '<div class=\"tooltip tooltip-field-info\" role=\"tooltip\"><div class=\"arrow\"></div><div class=\"tooltip-inner\"></div></div>',\n            title: function () {\n                let help = widget.attrs.help || widget.field.help || '';\n                if (session.display_switch_company_menu && widget.field.company_dependent) {\n                    help += (help ? '\\n\\n' : '') + _t('Values set here are company-specific.');\n                }\n                const debug = config.isDebug();\n                if (help || debug) {\n                    return qweb.render('WidgetLabel.tooltip', { debug, help, widget });\n                }\n            }\n        };\n    },\n    /**\n     * @private\n     * @param {jQueryElement} $el\n     * @param {Object} node\n     */\n    _handleAttributes: function ($el, node) {\n        if ($el.is('button')) {\n            return;\n        }\n        if (node.attrs.class) {\n            $el.addClass(node.attrs.class);\n        }\n        if (node.attrs.style) {\n            $el.attr('style', node.attrs.style);\n        }\n        if (node.attrs.placeholder) {\n            $el.attr('placeholder', node.attrs.placeholder);\n        }\n    },\n    /**\n     * Used by list and kanban renderers to determine whether or not to display\n     * the no content helper (if there is no data in the state to display)\n     *\n     * @private\n     * @returns {boolean}\n     */\n    _hasContent: function () {\n        return this.state.count !== 0 && (!('isSample' in this.state) || !this.state.isSample);\n    },\n    /**\n     * Force the resequencing of the records after moving one of them to a given\n     * index.\n     *\n     * @private\n     * @param {string} recordId datapoint id of the moved record\n     * @param {integer} toIndex new index of the moved record\n     */\n    _moveRecord: function (recordId, toIndex) {\n        var self = this;\n        var records = this.state.data;\n        var record = _.findWhere(records, {id: recordId});\n        var fromIndex = records.indexOf(record);\n        var lowerIndex = Math.min(fromIndex, toIndex);\n        var upperIndex = Math.max(fromIndex, toIndex) + 1;\n        var order = _.findWhere(this.state.orderedBy, {name: this.handleField});\n        var asc = !order || order.asc;\n        var reorderAll = false;\n        var sequence = (asc ? -1 : 1) * Infinity;\n\n        // determine if we need to reorder all records\n        _.each(records, function (record, index) {\n            if (((index < lowerIndex || index >= upperIndex) &&\n                ((asc && sequence >= record.data[self.handleField]) ||\n                 (!asc && sequence <= record.data[self.handleField]))) ||\n                (index >= lowerIndex && index < upperIndex && sequence === record.data[self.handleField])) {\n                reorderAll = true;\n            }\n            sequence = record.data[self.handleField];\n        });\n\n        if (reorderAll) {\n            records = _.without(records, record);\n            records.splice(toIndex, 0, record);\n        } else {\n            records = records.slice(lowerIndex, upperIndex);\n            records = _.without(records, record);\n            if (fromIndex > toIndex) {\n                records.unshift(record);\n            } else {\n                records.push(record);\n            }\n        }\n\n        var sequences = _.pluck(_.pluck(records, 'data'), this.handleField);\n        var recordIds = _.pluck(records, 'id');\n        if (!asc) {\n            recordIds.reverse();\n        }\n\n        this.trigger_up('resequence_records', {\n            handleField: this.handleField,\n            offset: _.min(sequences),\n            recordIds: recordIds,\n        });\n    },\n    /**\n     * This function is called each time a field widget is created, when it is\n     * ready (after its willStart and Start methods are complete).  This is the\n     * place where work having to do with $el should be done.\n     *\n     * @private\n     * @param {Widget} widget the field widget instance\n     * @param {Object} node the attrs coming from the arch\n     */\n    _postProcessField: function (widget, node) {\n        this._handleAttributes(widget.$el, node);\n    },\n    /**\n     * Registers or updates the modifiers data associated to the given node.\n     * This method is quiet complex as it handles all the needs of the basic\n     * renderers:\n     *\n     * - On first registration, the modifiers are evaluated thanks to the given\n     *   record. This allows nodes that will produce an AbstractField instance\n     *   to have their modifiers registered before this field creation as we\n     *   need the readonly modifier to be able to instantiate the AbstractField.\n     *\n     * - On additional registrations, if the node was already registered but the\n     *   record is different, we evaluate the modifiers for this record and\n     *   saves them in the same object (without reparsing the modifiers).\n     *\n     * - On additional registrations, the modifiers are not reparsed (or\n     *   reevaluated for an already seen record) but the given widget or DOM\n     *   element is associated to the node modifiers.\n     *\n     * - The new elements are immediately adapted to match the modifiers and the\n     *   given associated callback is called even if there is no modifiers on\n     *   the node (@see _applyModifiers). This is indeed necessary as the\n     *   callback is a description of what to do when a modifier changes. Even\n     *   if there is no modifiers, this action must be performed on first\n     *   rendering to avoid code duplication. If there is no modifiers, they\n     *   will however not be registered for modifiers updates.\n     *\n     * - When a new element is given, it does not replace the old one, it is\n     *   added as an additional element. This is indeed useful for nodes that\n     *   will produce multiple DOM (as a list cell and its internal widget or\n     *   a form field and its associated label).\n     *   (@see _unregisterModifiersElement for removing an associated element.)\n     *\n     * Note: also on view rerendering, all the modifiers are forgotten so that\n     * the renderer only keeps the ones associated to the current DOM state.\n     *\n     * @private\n     * @param {Object} node\n     * @param {Object} record\n     * @param {jQuery|AbstractField} [element]\n     * @param {Object} [options]\n     * @param {Object} [options.callback] the callback to call on registration\n     *   and on modifiers updates\n     * @param {boolean} [options.keepBaseMode=false] this function registers the\n     *   'baseMode' of the node on a per record basis;\n     *   this is a field widget specific settings which\n     *   represents the generic mode of the widget, regardless of its modifiers\n     *   (the interesting case is the list view: all widgets are supposed to be\n     *   in the baseMode 'readonly', except the ones that are in the line that\n     *   is currently being edited).\n     *   With option 'keepBaseMode' set to true, the baseMode of the record's\n     *   node isn't overridden (this is particularily useful when a field widget\n     *   is re-rendered because its readonly modifier changed, as in this case,\n     *   we don't want to change its base mode).\n     * @param {string} [options.mode] the 'baseMode' of the record's node is set to this\n     *   value (if not given, it is set to this.mode, the mode of the renderer)\n     * @returns {Object} for code efficiency, returns the last evaluated\n     *   modifiers for the given node and record.\n     * @throws {Error} if one of the modifier domains is not valid\n     */\n    _registerModifiers: function (node, record, element, options) {\n        options = options || {};\n        // Check if we already registered the modifiers for the given node\n        // If yes, this is simply an update of the related element\n        // If not, check the modifiers to see if it needs registration\n        var modifiersData = this._getModifiersData(node);\n        if (!modifiersData) {\n            var modifiers = node.attrs.modifiers || {};\n            modifiersData = {\n                node: node,\n                modifiers: modifiers,\n                evaluatedModifiers: {},\n                elementsByRecord: {},\n                baseModeByRecord : {},\n            };\n            if (!_.isEmpty(modifiers)) { // Register only if modifiers might change (TODO condition might be improved here)\n                this.allModifiersData.push(modifiersData);\n            }\n        }\n\n        // Compute the record's base mode\n        if (!modifiersData.baseModeByRecord[record.id] || !options.keepBaseMode) {\n            modifiersData.baseModeByRecord[record.id] = options.mode || this.mode;\n        }\n\n        // Evaluate if necessary\n        if (!modifiersData.evaluatedModifiers[record.id]) {\n            try {\n                modifiersData.evaluatedModifiers[record.id] = record.evalModifiers(modifiersData.modifiers);\n            } catch (e) {\n                throw new Error(_.str.sprintf(\n                    \"While parsing modifiers for %s%s: %s\",\n                    node.tag, node.tag === 'field' ? ' ' + node.attrs.name : '',\n                    e.message\n                ));\n            }\n        }\n\n        // Element might not be given yet (a second call to the function can\n        // update the registration with the element)\n        if (element) {\n            var newElement = {};\n            if (element instanceof jQuery) {\n                newElement.$el = element;\n            } else {\n                newElement.widget = element;\n                newElement.$el = element.$el;\n            }\n            if (options && options.callback) {\n                newElement.callback = options.callback;\n            }\n\n            if (!modifiersData.elementsByRecord[record.id]) {\n                modifiersData.elementsByRecord[record.id] = [];\n            }\n            modifiersData.elementsByRecord[record.id].push(newElement);\n\n            this._applyModifiers(modifiersData, record, newElement);\n        }\n\n        return modifiersData.evaluatedModifiers[record.id];\n    },\n    /**\n     * @override\n     */\n    async _render() {\n        const oldAllFieldWidgets = this.allFieldWidgets;\n        this.allFieldWidgets = {}; // TODO maybe merging allFieldWidgets and allModifiersData into \"nodesData\" in some way could be great\n        this.allModifiersData = [];\n        const oldWidgets = this.widgets;\n        this.widgets = [];\n\n        await this._super(...arguments);\n\n        for (const id in oldAllFieldWidgets) {\n            for (const widget of oldAllFieldWidgets[id]) {\n                widget.destroy();\n            }\n        }\n        for (const widget of oldWidgets) {\n            widget.destroy();\n        }\n        if (this._isInDom) {\n            for (const handle in this.allFieldWidgets) {\n                this.allFieldWidgets[handle].forEach(widget => {\n                    if (!utils.isComponent(widget.constructor) && widget.on_attach_callback) {\n                        widget.on_attach_callback();\n                    }\n                });\n            }\n            this.widgets.forEach(widget => {\n                if (widget.on_attach_callback) {\n                    widget.on_attach_callback();\n                }\n            });\n            // call on_attach_callback on child components (including field components)\n            WidgetAdapterMixin.on_attach_callback.call(this);\n        }\n    },\n    /**\n     * Instantiates the appropriate AbstractField specialization for the given\n     * node and prepares its rendering and addition to the DOM. Indeed, the\n     * rendering of the widget will be started and the associated promise will\n     * be added to the 'defs' attribute. This is supposed to be created and\n     * deleted by the calling code if necessary.\n     *\n     * Note: we always return a $el.  If the field widget is asynchronous, this\n     * $el will be replaced by the real $el, whenever the widget is ready (start\n     * method is done).  This means that this is not the correct place to make\n     * changes on the widget $el.  For this, @see _postProcessField method\n     *\n     * @private\n     * @param {Object} node\n     * @param {Object} record\n     * @param {Object} [options] passed to @_registerModifiers\n     * @param {string} [options.mode] either 'edit' or 'readonly' (defaults to\n     *   this.mode, the mode of the renderer)\n     * @returns {jQueryElement}\n     */\n    _renderFieldWidget: function (node, record, options) {\n        options = options || {};\n        var fieldName = node.attrs.name;\n        // Register the node-associated modifiers\n        var mode = options.mode || this.mode;\n        var modifiers = this._registerModifiers(node, record, null, options);\n        // Initialize and register the widget\n        // Readonly status is known as the modifiers have just been registered\n        var Widget = record.fieldsInfo[this.viewType][fieldName].Widget;\n        const legacy = !(Widget.prototype instanceof owl.Component);\n        const widgetOptions = {\n            // Distinct readonly from renderer and readonly from modifier,\n            // renderer can be readonly while modifier not.\n            // This is needed as modifiers are set after first render\n            hasReadonlyModifier: modifiers.readonly || this.viewEditable === false,\n            mode: modifiers.readonly ? 'readonly' : mode,\n            viewType: this.viewType,\n        };\n        let widget;\n        if (legacy) {\n            widget = new Widget(this, fieldName, record, widgetOptions);\n        } else {\n            widget = new FieldWrapper(this, Widget, {\n                fieldName,\n                record,\n                options: widgetOptions,\n            });\n        }\n\n        // Register the widget so that it can easily be found again\n        if (this.allFieldWidgets[record.id] === undefined) {\n            this.allFieldWidgets[record.id] = [];\n        }\n        this.allFieldWidgets[record.id].push(widget);\n\n        widget.__node = node; // TODO get rid of this if possible one day\n\n        // Prepare widget rendering and save the related promise\n        var $el = $('<div>');\n        let def;\n        if (legacy) {\n            def = widget._widgetRenderAndInsert(function () {});\n        } else {\n            def = widget.mount(document.createDocumentFragment());\n        }\n\n        this.defs.push(def);\n\n        // Update the modifiers registration by associating the widget and by\n        // giving the modifiers options now (as the potential callback is\n        // associated to new widget)\n        var self = this;\n        def.then(function () {\n            if(!widget.$el){\n                return;\n            }\n            // when the caller of renderFieldWidget uses something like\n            // this.renderFieldWidget(...).addClass(...), the class is added on\n            // the temporary div and not on the actual element that will be\n            // rendered. As we do not return a promise and some callers cannot\n            // wait for this.defs, we copy those classnames to the final element.\n            widget.$el.addClass($el.attr('class'));\n\n            $el.replaceWith(widget.$el);\n            self._registerModifiers(node, record, widget, {\n                callback: function (element, modifiers, record) {\n                    element.$el.toggleClass('o_field_empty', !!(\n                        record.data.id &&\n                        (modifiers.readonly || mode === 'readonly') &&\n                        element.widget.isEmpty()\n                    ));\n                },\n                keepBaseMode: !!options.keepBaseMode,\n                mode: mode,\n            });\n            self._postProcessField(widget, node);\n        });\n\n        return $el;\n    },\n    /**\n     * Instantiate custom widgets\n     *\n     * @private\n     * @param {Object} record\n     * @param {Object} node\n     * @returns {jQueryElement}\n     */\n    _renderWidget: function (record, node) {\n        const name = node.attrs.name;\n        const Widget = widgetRegistryOwl.get(name) || widgetRegistry.get(name);\n        const legacy = !(Widget.prototype instanceof owl.Component);\n        let widget;\n        if (legacy) {\n            widget = new Widget(this, record, node, { mode: this.mode });\n        } else {\n            widget = new WidgetWrapper(this, Widget, {\n                record,\n                node,\n                options: { mode: this.mode },\n            });\n        }\n\n        this.widgets.push(widget);\n\n        // Prepare widget rendering and save the related promise\n        let def;\n        if (legacy) {\n            def = widget._widgetRenderAndInsert(function () {});\n        } else {\n            def = widget.mount(document.createDocumentFragment());\n        }\n        this.defs.push(def);\n        var $el = $('<div>');\n\n        var self = this;\n        def.then(function () {\n            self._handleAttributes(widget.$el, node);\n            self._registerModifiers(node, record, widget);\n            widget.$el.addClass('o_widget');\n            $el.replaceWith(widget.$el);\n        });\n\n        return $el;\n    },\n    /**\n     * Rerenders a given widget and make sure the associated data which\n     * referenced the old one is updated.\n     *\n     * @private\n     * @param {Widget} widget\n     * @param {Object} record\n     * @param {Object} [options] options passed to @_renderFieldWidget\n     */\n    _rerenderFieldWidget: function (widget, record, options) {\n        // Render the new field widget\n        var $el = this._renderFieldWidget(widget.__node, record, options);\n        // get the new widget that has just been pushed in allFieldWidgets\n        const recordWidgets = this.allFieldWidgets[record.id];\n        const newWidget = recordWidgets[recordWidgets.length - 1];\n        const def = this.defs[this.defs.length - 1]; // this is the widget's def, resolved when it is ready\n        const $div = $('<div>');\n        $div.append($el); // $el will be replaced when widget is ready (see _renderFieldWidget)\n        def.then(() => {\n            widget.$el.replaceWith($div.children());\n\n            // Destroy the old widget and position the new one at the old one's\n            // (it has been temporarily inserted at the end of the list)\n            recordWidgets.splice(recordWidgets.indexOf(newWidget), 1);\n            var oldIndex = this._destroyFieldWidget(record.id, widget);\n            recordWidgets.splice(oldIndex, 0, newWidget);\n\n            // Mount new widget if necessary (mainly for Owl components)\n            if (this._isInDom && newWidget.on_attach_callback) {\n                newWidget.on_attach_callback();\n            }\n        });\n    },\n    /**\n     * Unregisters an element of the modifiers data associated to the given\n     * node and record.\n     *\n     * @param {Object} node\n     * @param {string} recordID id of the local resource\n     * @param {jQuery|AbstractField} element\n     */\n    _unregisterModifiersElement: function (node, recordID, element) {\n        var modifiersData = this._getModifiersData(node);\n        if (modifiersData) {\n            var elements = modifiersData.elementsByRecord[recordID];\n            var index = _.findIndex(elements, function (oldElement) {\n                return oldElement.widget === element\n                    || oldElement.$el[0] === element[0];\n            });\n            if (index >= 0) {\n                elements.splice(index, 1);\n            }\n        }\n    },\n    /**\n     * Does two actions, for each registered modifiers:\n     * 1) Recomputes the modifiers associated to the given record and saves them\n     *    (as boolean values) in the appropriate modifiers data.\n     * 2) Updates the rendering of the view elements associated to the given\n     *    record to match the new modifiers.\n     *\n     * @see _applyModifiers\n     *\n     * @private\n     * @param {Object} record\n     * @returns {Promise} resolved once finished\n     */\n    _updateAllModifiers: function (record) {\n        var self = this;\n\n        var defs = [];\n        this.defs = defs; // Potentially filled by widget rerendering\n        _.each(this.allModifiersData, function (modifiersData) {\n            // `allModifiersData` might contain modifiers registered for other\n            // records than the given record (e.g. <groupby> in list)\n            if (record.id in modifiersData.evaluatedModifiers) {\n                modifiersData.evaluatedModifiers[record.id] = record.evalModifiers(modifiersData.modifiers);\n                self._applyModifiers(modifiersData, record);\n            }\n        });\n        delete this.defs;\n\n        return Promise.all(defs);\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * When someone presses the TAB/UP/DOWN/... key in a widget, it is nice to\n     * be able to navigate in the view (default browser behaviors are disabled\n     * by Odoo).\n     *\n     * @abstract\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onNavigationMove: function (ev) {},\n});\n\nreturn BasicRenderer;\n});\n", "odoo.define('web.BasicView', function (require) {\n\"use strict\";\n\n/**\n * The BasicView is an abstract class designed to share code between views that\n * want to use a basicModel.  As of now, it is the form view, the list view and\n * the kanban view.\n *\n * The main focus of this class is to process the arch and extract field\n * attributes, as well as some other useful informations.\n */\n\nvar AbstractView = require('web.AbstractView');\nvar BasicController = require('web.BasicController');\nvar BasicModel = require('web.BasicModel');\nvar config = require('web.config');\nvar fieldRegistry = require('web.field_registry');\nvar fieldRegistryOwl = require('web.field_registry_owl');\nvar pyUtils = require('web.py_utils');\nvar utils = require('web.utils');\nconst widgetRegistry = require('web.widget_registry');\nconst widgetRegistryOwl = require('web.widgetRegistry');\n\nvar BasicView = AbstractView.extend({\n    config: _.extend({}, AbstractView.prototype.config, {\n        Model: BasicModel,\n        Controller: BasicController,\n    }),\n    viewType: undefined,\n    /**\n     * process the fields_view to find all fields appearing in the views.\n     * list those fields' name in this.fields_name, which will be the list\n     * of fields read when data is fetched.\n     * this.fields is the list of all field's description (the result of\n     * the fields_get), where the fields appearing in the fields_view are\n     * augmented with their attrs and some flags if they require a\n     * particular handling.\n     *\n     * @param {Object} viewInfo\n     * @param {Object} params\n     */\n    init: function (viewInfo, params) {\n        this._super.apply(this, arguments);\n\n        this.fieldsInfo = {};\n        this.fieldsInfo[this.viewType] = this.fieldsView.fieldsInfo[this.viewType];\n\n        this.rendererParams.viewType = this.viewType;\n        this.rendererParams.viewEditable = this.controllerParams.activeActions.edit;\n\n        this.controllerParams.confirmOnDelete = true;\n        this.controllerParams.archiveEnabled = 'active' in this.fields || 'x_active' in this.fields;\n        this.controllerParams.hasButtons =\n                'action_buttons' in params ? params.action_buttons : true;\n        this.controllerParams.viewId = viewInfo.view_id;\n\n        this.loadParams.fieldsInfo = this.fieldsInfo;\n        this.loadParams.fields = this.fields;\n        this.loadParams.limit = parseInt(this.arch.attrs.limit, 10) || params.limit;\n        this.loadParams.parentID = params.parentID;\n        this.loadParams.viewType = this.viewType;\n        this.recordID = params.recordID;\n\n        this.model = params.model;\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Returns the AbstractField specialization that should be used for the\n     * given field informations. If there is no mentioned specific widget to\n     * use, determines one according the field type.\n     *\n     * @private\n     * @param {string} viewType\n     * @param {Object} field\n     * @param {Object} attrs\n     * @returns {function|null} AbstractField specialization Class\n     */\n    _getFieldWidgetClass: function (viewType, field, attrs) {\n        var FieldWidget;\n        if (attrs.widget === \"boolean\" || (!attrs.widget && field.type === \"boolean\")) {\n            FieldWidget = fieldRegistry.getAny([viewType + \".boolean\", \"boolean\"]);\n        } else if (attrs.widget) {\n            FieldWidget = fieldRegistry.getAny([viewType + \".\" + attrs.widget, attrs.widget]) ||\n                fieldRegistryOwl.getAny([viewType + \".\" + attrs.widget, attrs.widget]);\n            if (!FieldWidget) {\n                console.warn(\"Missing widget: \", attrs.widget, \" for field\", attrs.name, \"of type\", field.type);\n            }\n        } else if (viewType === 'kanban' && field.type === 'many2many') {\n            // we want to display the widget many2manytags in kanban even if it\n            // is not specified in the view\n            FieldWidget = fieldRegistry.get('kanban.many2many_tags');\n        }\n        return FieldWidget ||\n            fieldRegistryOwl.getAny([viewType + \".\" + field.type, field.type, \"abstract\"]) ||\n            fieldRegistry.getAny([viewType + \".\" + field.type, field.type, \"abstract\"]);\n    },\n    /**\n     * In some cases, we already have a preloaded record\n     *\n     * @override\n     * @private\n     * @returns {Promise}\n     */\n    _loadData: async function (model) {\n        if (this.recordID) {\n            // Add the fieldsInfo of the current view to the given recordID,\n            // as it will be shared between two views, and it must be able to\n            // handle changes on fields that are only on this view.\n            await model.addFieldsInfo(this.recordID, {\n                fields: this.fields,\n                fieldInfo: this.fieldsInfo[this.viewType],\n                viewType: this.viewType,\n            });\n\n            var record = model.get(this.recordID);\n            var viewType = this.viewType;\n            var viewFields = Object.keys(record.fieldsInfo[viewType]);\n            var fieldNames = _.difference(viewFields, Object.keys(record.data));\n            var fieldsInfo = record.fieldsInfo[viewType];\n\n            // Suppose that in a form view, there is an x2many list view with\n            // a field F, and that F is also displayed in the x2many form view.\n            // In this case, F is represented in record.data (as it is known by\n            // the x2many list view), but the loaded information may not suffice\n            // in the form view (e.g. if field is a many2many list in the form\n            // view, or if it is displayed by a widget requiring specialData).\n            // So when this happens, F is added to the list of fieldNames to fetch.\n            _.each(viewFields, (name) => {\n                if (!_.contains(fieldNames, name)) {\n                    var fieldType = record.fields[name].type;\n                    var fieldInfo = fieldsInfo[name];\n\n                    // SpecialData case: field requires specialData that haven't\n                    // been fetched yet.\n                    if (fieldInfo.Widget) {\n                        var requiresSpecialData = fieldInfo.Widget.prototype.specialData;\n                        if (requiresSpecialData && !(name in record.specialData)) {\n                            fieldNames.push(name);\n                            return;\n                        }\n                    }\n\n                    // X2Many case: field is an x2many displayed as a list or\n                    // kanban view, but the related fields haven't been loaded yet.\n                    if ((fieldType === 'one2many' || fieldType === 'many2many')) {\n                        if (!('fieldsInfo' in record.data[name])) {\n                            fieldNames.push(name);\n                        } else {\n                            var x2mFieldInfo = record.fieldsInfo[this.viewType][name];\n                            var viewType = x2mFieldInfo.viewType || x2mFieldInfo.mode;\n                            var knownFields = Object.keys(record.data[name].fieldsInfo[record.data[name].viewType] || {});\n                            var newFields = Object.keys(record.data[name].fieldsInfo[viewType] || {});\n                            if (_.difference(newFields, knownFields).length) {\n                                fieldNames.push(name);\n                            }\n\n                            if (record.data[name].viewType === 'default') {\n                                // Use case: x2many (tags) in x2many list views\n                                // When opening the x2many record form view, the\n                                // x2many will be reloaded but it may not have\n                                // the same fields (ex: tags in list and list in\n                                // form) so we need to merge the fieldsInfo to\n                                // avoid losing the initial fields (display_name)\n                                var fieldViews = fieldInfo.views || fieldInfo.fieldsInfo || {};\n                                var defaultFieldInfo = record.data[name].fieldsInfo.default;\n                                _.each(fieldViews, function (fieldView) {\n                                    _.each(fieldView.fieldsInfo, function (x2mFieldInfo) {\n                                        _.defaults(x2mFieldInfo, defaultFieldInfo);\n                                    });\n                                });\n                            }\n                        }\n                    }\n                    // Many2one: context is not the same between the different views\n                    // this means the result of a name_get could differ\n                    if (fieldType === 'many2one') {\n                        if (JSON.stringify(record.data[name].context) !==\n                                JSON.stringify(fieldInfo.context)) {\n                            fieldNames.push(name);\n                        }\n                    }\n                }\n            });\n\n            var def;\n            if (fieldNames.length) {\n                if (model.isNew(record.id)) {\n                    def = model.generateDefaultValues(record.id, {\n                        fieldNames: fieldNames,\n                        viewType: viewType,\n                    });\n                } else {\n                    def = model.reload(record.id, {\n                        fieldNames: fieldNames,\n                        keepChanges: true,\n                        viewType: viewType,\n                    });\n                }\n            }\n            return Promise.resolve(def).then(function () {\n                const handle = record.id;\n                return { state: model.get(handle), handle };\n            });\n        }\n        return this._super.apply(this, arguments);\n    },\n    /**\n     * Traverses the arch and calls '_processNode' on each of its nodes.\n     *\n     * @private\n     * @param {Object} arch a parsed arch\n     * @param {Object} fv the fieldsView Object, in which _processNode can\n     *   access and add information (like the fields' attributes in the arch)\n     */\n    _processArch: function (arch, fv) {\n        var self = this;\n        utils.traverse(arch, function (node) {\n            return self._processNode(node, fv);\n        });\n    },\n    /**\n     * Processes a field node, in particular, put a flag on the field to give\n     * special directives to the BasicModel.\n     *\n     * @private\n     * @param {string} viewType\n     * @param {Object} field - the field properties\n     * @param {Object} attrs - the field attributes (from the xml)\n     * @returns {Object} attrs\n     */\n    _processField: function (viewType, field, attrs) {\n        var self = this;\n        attrs.Widget = this._getFieldWidgetClass(viewType, field, attrs);\n\n        // process decoration attributes\n        _.each(attrs, function (value, key) {\n            if (key.startsWith('decoration-')) {\n                attrs.decorations = attrs.decorations || [];\n                attrs.decorations.push({\n                    name: key,\n                    expression: pyUtils._getPyJSAST(value),\n                });\n            }\n        });\n\n        if (!_.isObject(attrs.options)) { // parent arch could have already been processed (TODO this should not happen)\n            attrs.options = attrs.options ? pyUtils.py_eval(attrs.options) : {};\n        }\n\n        if (attrs.on_change && attrs.on_change !== \"0\" && !field.onChange) {\n            field.onChange = \"1\";\n        }\n\n        // the relational data of invisible relational fields should not be\n        // fetched (e.g. name_gets of invisible many2ones), at least those that\n        // are always invisible.\n        // the invisible attribute of a field is supposed to be static (\"1\" in\n        // general), but not totally as it may use keys of the context\n        // (\"context.get('some_key')\"). It is evaluated server-side, and the\n        // result is put inside the modifiers as a value of the '(column_)invisible'\n        // key, and the raw value is left in the invisible attribute (it is used\n        // in debug mode for informational purposes).\n        // this should change, for instance the server might set the evaluated\n        // value in invisible, which could then be seen as static by the client,\n        // and add another key in debug mode containing the raw value.\n        // for now, we look inside the modifiers and consider the value only if\n        // it is static (=== true),\n        if (attrs.modifiers.invisible === true || attrs.modifiers.column_invisible === true) {\n            attrs.__no_fetch = true;\n        }\n\n        if (!_.isEmpty(field.views)) {\n            // process the inner fields_view as well to find the fields they use.\n            // register those fields' description directly on the view.\n            // for those inner views, the list of all fields isn't necessary, so\n            // basically the field_names will be the keys of the fields obj.\n            // don't use _ to iterate on fields in case there is a 'length' field,\n            // as _ doesn't behave correctly when there is a length key in the object\n            attrs.views = {};\n            _.each(field.views, function (innerFieldsView, viewType) {\n                viewType = viewType === 'tree' ? 'list' : viewType;\n                attrs.views[viewType] = self._processFieldsView(innerFieldsView, viewType);\n            });\n        }\n\n        attrs.views = attrs.views || {};\n\n        // Keep compatibility with 'tree' syntax\n        attrs.mode = attrs.mode === 'tree' ? 'list' : attrs.mode;\n        if (!attrs.views.list && attrs.views.tree) {\n            attrs.views.list = attrs.views.tree;\n        }\n\n        if (field.type === 'one2many' || field.type === 'many2many') {\n            if (attrs.Widget.prototype.useSubview) {\n                var mode = attrs.mode;\n                if (!mode) {\n                    if (attrs.views.list && !attrs.views.kanban) {\n                        mode = 'list';\n                    } else if (!attrs.views.list && attrs.views.kanban) {\n                        mode = 'kanban';\n                    } else {\n                        mode = 'list,kanban';\n                    }\n                }\n                if (mode.indexOf(',') !== -1) {\n                    mode = config.device.isMobile ? 'kanban' : 'list';\n                }\n                attrs.mode = mode;\n                if (mode in attrs.views) {\n                    var view = attrs.views[mode];\n                    this._processSubViewAttrs(view, attrs);\n                }\n            }\n            if (attrs.Widget.prototype.fieldsToFetch) {\n                attrs.viewType = 'default';\n                attrs.relatedFields = _.extend({}, attrs.Widget.prototype.fieldsToFetch);\n                attrs.fieldsInfo = {\n                    default: _.mapObject(attrs.Widget.prototype.fieldsToFetch, function () {\n                        return {};\n                    }),\n                };\n                if (attrs.options.color_field) {\n                    // used by m2m tags\n                    attrs.relatedFields[attrs.options.color_field] = { type: 'integer' };\n                    attrs.fieldsInfo.default[attrs.options.color_field] = {};\n                }\n            }\n        }\n\n        if (attrs.Widget.prototype.fieldDependencies) {\n            attrs.fieldDependencies = attrs.Widget.prototype.fieldDependencies;\n        }\n\n        return attrs;\n    },\n    /**\n     * Overrides to process the fields, and generate fieldsInfo which contains\n     * the description of the fields in view, with their attrs in the arch.\n     *\n     * @override\n     * @private\n     * @param {Object} fieldsView\n     * @param {string} fieldsView.arch\n     * @param {Object} fieldsView.fields\n     * @param {string} [viewType] by default, this.viewType\n     * @returns {Object} the processed fieldsView with extra key 'fieldsInfo'\n     */\n    _processFieldsView: function (fieldsView, viewType) {\n        var fv = this._super.apply(this, arguments);\n\n        viewType = viewType || this.viewType;\n        fv.type = viewType;\n        fv.fieldsInfo = Object.create(null);\n        fv.fieldsInfo[viewType] = Object.create(null);\n\n        this._processArch(fv.arch, fv);\n\n        return fv;\n    },\n    /**\n     * Processes a node of the arch (mainly nodes with tagname 'field'). Can\n     * be overridden to handle other tagnames.\n     *\n     * @private\n     * @param {Object} node\n     * @param {Object} fv the fieldsView\n     * @param {Object} fv.fieldsInfo\n     * @param {Object} fv.fieldsInfo[viewType] fieldsInfo of the current viewType\n     * @param {Object} fv.viewFields the result of a fields_get extend with the\n     *   fields returned with the fields_view_get for the current viewType\n     * @param {string} fv.viewType\n     * @returns {boolean} false iff subnodes must not be visited.\n     */\n    _processNode: function (node, fv) {\n        const viewType = fv.type;\n        const fieldsInfo = fv.fieldsInfo[viewType];\n        const fields = fv.viewFields;\n\n        const _addFieldDependencies = (deps) => {\n            for (const dependencyName in deps) {\n                const dependencyDict = { name: dependencyName, type: deps[dependencyName].type };\n                if (!(dependencyName in fieldsInfo)) {\n                    fieldsInfo[dependencyName] = _.extend({}, dependencyDict, {\n                        options: deps[dependencyName].options || {},\n                    });\n                }\n                if (!(dependencyName in fields)) {\n                    fields[dependencyName] = dependencyDict;\n                }\n\n                if (fv.fields && !(dependencyName in fv.fields)) {\n                    fv.fields[dependencyName] = dependencyDict;\n                }\n            }\n        };\n\n        if (typeof node === 'string') {\n            return false;\n        }\n        if (!_.isObject(node.attrs.modifiers)) {\n            node.attrs.modifiers = node.attrs.modifiers ? JSON.parse(node.attrs.modifiers) : {};\n        }\n        if (!_.isObject(node.attrs.options) && node.tag === 'button') {\n            node.attrs.options = node.attrs.options ? JSON.parse(node.attrs.options) : {};\n        }\n        if (node.tag === 'field') {\n            fieldsInfo[node.attrs.name] = this._processField(viewType,\n                fields[node.attrs.name], node.attrs ? _.clone(node.attrs) : {});\n\n            if (fieldsInfo[node.attrs.name].fieldDependencies) {\n                var deps = fieldsInfo[node.attrs.name].fieldDependencies;\n                _addFieldDependencies(deps);\n            }\n            return false;\n        }\n        // custom widget may have fieldDependencies so add it to fields of fields_view\n        if (node.tag === 'widget') {\n            const Widget = widgetRegistryOwl.get(node.attrs.name) || widgetRegistry.get(node.attrs.name);\n            const legacy = !(Widget.prototype instanceof owl.Component);\n            let deps;\n            if (legacy && Widget.prototype.fieldDependencies) {\n                deps = Widget.prototype.fieldDependencies;\n            } else if (Widget.fieldDependencies) {\n                deps = Widget.fieldDependencies;\n            }\n            if (deps) {\n                _addFieldDependencies(deps);\n            }\n            return false;\n        }\n        return node.tag !== 'arch';\n    },\n    /**\n     * Processes in place the subview attributes (in particular,\n     * `default_order``and `column_invisible`).\n     *\n     * @private\n     * @param {Object} view - the field subview\n     * @param {Object} attrs - the field attributes (from the xml)\n     */\n    _processSubViewAttrs: function (view, attrs) {\n        var defaultOrder = view.arch.attrs.default_order;\n        if (defaultOrder) {\n            // process the default_order, which is like 'name,id desc'\n            // but we need it like [{name: 'name', asc: true}, {name: 'id', asc: false}]\n            attrs.orderedBy = _.map(defaultOrder.split(','), function (order) {\n                order = order.trim().split(' ');\n                return {name: order[0], asc: order[1] !== 'desc'};\n            });\n        } else {\n            // if there is a field with widget `handle`, the x2many\n            // needs to be ordered by this field to correctly display\n            // the records\n            var handleField = _.find(view.arch.children, function (child) {\n                return child.attrs && child.attrs.widget === 'handle';\n            });\n            if (handleField) {\n                attrs.orderedBy = [{name: handleField.attrs.name, asc: true}];\n            }\n        }\n\n        attrs.columnInvisibleFields = {};\n        _.each(view.arch.children, function (child) {\n            if (child.attrs && child.attrs.modifiers) {\n                attrs.columnInvisibleFields[child.attrs.name] =\n                    child.attrs.modifiers.column_invisible || false;\n            }\n        });\n    },\n});\n\nreturn BasicView;\n\n});\n", "odoo.define('web.widget_registry', function (require) {\n    \"use strict\";\n\n    ////////////////////////////////////////////////////////////////////////////\n    // /!\\ DEPRECATED\n    //\n    // /!\\ This registry is deprecated. It is used to register legacy Widgets.\n    // /!\\ Use 'web.widgetRegistry' to register Owl Components.\n    // /!\\ Existing Widgets will be at some point converted into Owl Components.\n    // /!\\ All new code should be directly written using Owl Components.\n    ////////////////////////////////////////////////////////////////////////////\n\n\n    // This registry is supposed to contain all custom widgets that will be\n    // available in the basic views, with the tag <widget/>.  There are\n    // currently no such widget in the web client, but the functionality is\n    // certainly useful to be able to cleanly add custom behaviour in basic\n    // views (and most notably, the form view)\n    //\n    // The way custom widgets work is that they register themselves to this\n    // registry:\n    //\n    // widgetRegistry.add('some_name', MyWidget);\n    //\n    // Then, they are available with the <widget/> tag (in the arch):\n    //\n    // <widget name=\"some_name\"/>\n    //\n    // Widgets will be then properly instantiated, rendered and destroyed at the\n    // appropriate time, with the current state in second argument.\n    //\n    // For more examples, look at the tests (grep '<widget' in the test folder)\n\n    var Registry = require('web.Registry');\n\n    return new Registry(null, (value) => !(value.prototype instanceof owl.Component));\n});\n", "odoo.define(\"web.widgetRegistry\", function (require) {\n    \"use strict\";\n\n    // This registry is supposed to contain all custom components that will be\n    // available in the basic views, with the tag <widget/>. Those components\n    // allow to cleanly add custom behavior in basic views.\n    //\n    // The way custom components work is that they register themselves to this\n    // registry:\n    //\n    //     widgetRegistry.add('some_name', MyComponent);\n    //\n    // Then, they are available with the <widget/> tag (in the arch):\n    //\n    //     <widget name=\"some_name\"/>\n    //\n    // Those components will be then properly instantiated, rendered and\n    // destroyed at the appropriate time, and will receive the current state in\n    // props.\n\n    const Registry = require(\"web.Registry\");\n\n    return new Registry(null, (value) => value.prototype instanceof owl.Component);\n});\n", "odoo.define('web.WidgetWrapper', function (require) {\n    \"use strict\";\n\n    const { ComponentWrapper } = require('web.OwlCompatibility');\n\n    class WidgetWrapper extends ComponentWrapper {\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        /**\n         * This function should be used to update the \"widget\" Component's props,\n         * not its state!\n         *\n         * @param {any} state\n         * @returns Promise\n         */\n        updateState(state) {\n            return this.update(Object.assign({}, this.props, { record: state }));\n        }\n    }\n    return WidgetWrapper;\n});\n", "odoo.define('web.CalendarController', function (require) {\n\"use strict\";\n\n/**\n * Calendar Controller\n *\n * This is the controller in the Model-Renderer-Controller architecture of the\n * calendar view.  Its role is to coordinate the data from the calendar model\n * with the renderer, and with the outside world (such as a search view input)\n */\n\nvar AbstractController = require('web.AbstractController');\nvar core = require('web.core');\nvar Dialog = require('web.Dialog');\nvar dialogs = require('web.view_dialogs');\nvar QuickCreate = require('web.CalendarQuickCreate');\n\nvar _t = core._t;\nvar QWeb = core.qweb;\n\nfunction dateToServer (date, fieldType) {\n    date = date.clone().locale('en');\n    if (fieldType === \"date\") {\n        return date.local().format('YYYY-MM-DD');\n    }\n    return date.utc().format('YYYY-MM-DD HH:mm:ss');\n}\n\nvar CalendarController = AbstractController.extend({\n    custom_events: _.extend({}, AbstractController.prototype.custom_events, {\n        changeDate: '_onChangeDate',\n        changeFilter: '_onChangeFilter',\n        deleteRecord: '_onDeleteRecord',\n        dropRecord: '_onDropRecord',\n        next: '_onNext',\n        openCreate: '_onOpenCreate',\n        openEvent: '_onOpenEvent',\n        prev: '_onPrev',\n        quickCreate: '_onQuickCreate',\n        updateRecord: '_onUpdateRecord',\n        viewUpdated: '_onViewUpdated',\n        AttendeeStatus: '_onAttendeeStatus',\n    }),\n    events: _.extend({}, AbstractController.prototype.events, {\n        'click button.o_calendar_button_new': '_onButtonNew',\n        'click button.o_calendar_button_prev': '_onButtonNavigation',\n        'click button.o_calendar_button_today': '_onButtonNavigation',\n        'click button.o_calendar_button_next': '_onButtonNavigation',\n        'click button.o_calendar_button_day': '_onButtonScale',\n        'click button.o_calendar_button_week': '_onButtonScale',\n        'click button.o_calendar_button_month': '_onButtonScale',\n        'click button.o_calendar_button_year': '_onButtonScale',\n    }),\n    /**\n     * @override\n     * @param {Widget} parent\n     * @param {AbstractModel} model\n     * @param {AbstractRenderer} renderer\n     * @param {Object} params\n     */\n    init: function (parent, model, renderer, params) {\n        this._super.apply(this, arguments);\n        this.current_start = null;\n        this.displayName = params.displayName;\n        this.quickAddPop = params.quickAddPop;\n        this.disableQuickCreate = params.disableQuickCreate;\n        this.eventOpenPopup = params.eventOpenPopup;\n        this.showUnusualDays = params.showUnusualDays;\n        this.formViewId = params.formViewId;\n        this.readonlyFormViewId = params.readonlyFormViewId;\n        this.mapping = params.mapping;\n        this.context = params.context;\n        this.previousOpen = null;\n        // The quickCreating attribute ensures that we don't do several create\n        this.quickCreating = false;\n        this.scales = params.scales;\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Render the buttons according to the CalendarView.buttons template and\n     * add listeners on it. Set this.$buttons with the produced jQuery element\n     *\n     * @param {jQuery} [$node] a jQuery node where the rendered buttons\n     *   should be inserted. $node may be undefined, in which case the Calendar\n     *   inserts them into this.options.$buttons or into a div of its template\n     */\n    renderButtons: function ($node) {\n        this.$buttons = $(QWeb.render('CalendarView.buttons', this._renderButtonsParameters()));\n\n        this.$buttons.find('.o_calendar_button_' + this.mode).addClass('active');\n\n        if ($node) {\n            this.$buttons.appendTo($node);\n        } else {\n            this.$('.o_calendar_buttons').replaceWith(this.$buttons);\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Find a className in an array using the start of this class and\n     * return the last part of a string\n     * @private\n     * @param {string} startClassName start of string to find in the \"array\"\n     * @param {array|DOMTokenList} classList array of all class\n     * @return {string|undefined}\n     */\n    _extractLastPartOfClassName(startClassName, classList) {\n        var result;\n        classList.forEach(function (value) {\n            if (value && value.indexOf(startClassName) === 0) {\n                result = value.substring(startClassName.length);\n            }\n        });\n        return result;\n    },\n    /**\n     * Move to the requested direction and reload the view\n     *\n     * @private\n     * @param {string} to either 'prev', 'next' or 'today'\n     * @returns {Promise}\n     */\n    _move: function (to) {\n        this.model[to]();\n        return this.reload();\n    },\n    /**\n     * Parameter send to QWeb to render the template of Buttons\n     *\n     * @private\n     * @return {{}}\n     */\n    _renderButtonsParameters() {\n        return {\n            scales: this.scales,\n        };\n    },\n    /**\n     * @override\n     * @private\n     */\n    _update: function () {\n        var self = this;\n        if (!this.showUnusualDays) {\n            return this._super.apply(this, arguments);\n        }\n        return this._super.apply(this, arguments).then(function () {\n            self._rpc({\n                model: self.modelName,\n                method: 'get_unusual_days',\n                args: [dateToServer(self.model.data.start_date, 'date'), dateToServer(self.model.data.end_date, 'date')],\n                context: self.context,\n            }).then(function (data) {\n                _.each(self.$el.find('td.fc-day'), function (td) {\n                    var $td = $(td);\n                    if (data[$td.data('date')]) {\n                        $td.addClass('o_calendar_disabled');\n                    }\n                });\n            });\n        });\n    },\n    /**\n     * @private\n     * @param {Object} record\n     * @param {integer} record.id\n     * @returns {Promise}\n     */\n    _updateRecord: function (record) {\n        var reload = this.reload.bind(this, {});\n        return this.model.updateRecord(record).then(reload, reload);\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Handler when a user clicks on button to create event\n     *\n     * @private\n     */\n    _onButtonNew() {\n        this.trigger_up('switch_view', {view_type: 'form'});\n    },\n    /**\n     * Handler when a user click on navigation button like prev, next, ...\n     *\n     * @private\n     * @param {Event|jQueryEvent} jsEvent\n     */\n    _onButtonNavigation(jsEvent) {\n        const action = this._extractLastPartOfClassName('o_calendar_button_', jsEvent.currentTarget.classList);\n        if (action) {\n            this._move(action);\n        }\n    },\n    /**\n     * Handler when a user click on scale button like day, month, ...\n     *\n     * @private\n     * @param {Event|jQueryEvent} jsEvent\n     */\n    _onButtonScale(jsEvent) {\n        const scale = this._extractLastPartOfClassName('o_calendar_button_', jsEvent.currentTarget.classList);\n        if (scale) {\n            this.model.setScale(scale);\n            this.reload();\n        }\n    },\n\n    /**\n     * @private\n     * @param {OdooEvent} event\n     */\n    _onChangeDate: function (event) {\n        var modelData = this.model.get();\n        if (modelData.target_date.format('YYYY-MM-DD') === event.data.date.format('YYYY-MM-DD')) {\n            // When clicking on same date, toggle between the two views\n            switch (modelData.scale) {\n                case 'month': this.model.setScale('week'); break;\n                case 'week': this.model.setScale('day'); break;\n                case 'day': this.model.setScale('month'); break;\n            }\n        } else if (modelData.target_date.week() === event.data.date.week()) {\n            // When clicking on a date in the same week, switch to day view\n            this.model.setScale('day');\n        } else {\n            // When clicking on a random day of a random other week, switch to week view\n            this.model.setScale('week');\n        }\n        if (event.data.scale) {\n            this.model.setScale(event.data.scale);\n        }\n        this.model.setDate(event.data.date);\n        this.reload();\n    },\n    /**\n     * @private\n     * @param {OdooEvent} event\n     */\n    _onChangeFilter: async function (event) {\n        if (event.data.value !== 'all' && event.target.filter_field) {\n            const domain = [['user_id', '=', this.getSession().uid]];\n            if (event.data.value !== 'check_all') {\n                domain.push([event.target.write_field, '=', parseInt(event.data.value)]);\n            }\n            const existingFilter = await this._rpc({\n                model: event.target.write_model,\n                method: 'search',\n                args: [domain],\n            });\n            let val = {\n                [event.target.filter_field]: event.data.active,\n            };\n            await this._rpc({\n                model: event.target.write_model,\n                method: 'write',\n                args: [existingFilter, val],\n            });\n        }\n        if (this.model.changeFilter(event.data) && !event.data.no_reload) {\n            this.reload();\n        }\n    },\n    /**\n     * @private\n     * @param {OdooEvent} event\n     */\n    _onDeleteRecord: async function (event) {\n        var self = this;\n        if (event.data.event.record.recurrency) {\n            const recurrenceUpdate = await this._askRecurrenceUpdatePolicy();\n            event.data = Object.assign({}, event.data, {\n                'recurrenceUpdate': recurrenceUpdate,\n            });\n            if (recurrenceUpdate === 'self_only') {\n                self.model.deleteRecords([event.data.id], self.modelName).then(function () {\n                self.reload();\n            });\n            } else {\n                return this._rpc({\n                    model: self.modelName,\n                    method: 'action_mass_deletion',\n                     args: [[event.data.id], recurrenceUpdate],\n                }).then( function () {\n                    self.reload();\n                });\n            }\n        } else {\n            Dialog.confirm(this, _t(\"Are you sure you want to delete this record ?\"), {\n                confirm_callback: function () {\n                    self.model.deleteRecords([event.data.id], self.modelName).then(function () {\n                        self.reload();\n                    });\n                }\n            });\n        }\n    },\n    /**\n     * @private\n     * @param {OdooEvent} event\n     */\n    _onDropRecord: function (event) {\n        this._updateRecord(_.extend({}, event.data, {\n            'drop': true,\n        }));\n    },\n    /**\n     * @private\n     * @param {OdooEvent} event\n     */\n    _onNext: function (event) {\n        event.stopPropagation();\n        this._move('next');\n    },\n    /**\n     * @private\n     * @param {OdooEvent} event\n     */\n    _onOpenCreate: function (event) {\n        var self = this;\n        if ([\"year\", \"month\"].includes(this.model.get().scale)) {\n            event.data.allDay = true;\n        }\n        var data = this.model.calendarEventToRecord(event.data);\n\n        var context = _.extend({}, this.context, event.options && event.options.context);\n        // context default has more priority in default_get so if data.name is false then it may\n        // lead to error/warning while saving record in form view as name field can be required\n        if (data.name) {\n            context.default_name = data.name;\n        }\n        context['default_' + this.mapping.date_start] = data[this.mapping.date_start] || null;\n        if (this.mapping.date_stop) {\n            context['default_' + this.mapping.date_stop] = data[this.mapping.date_stop] || null;\n        }\n        if (this.mapping.date_delay) {\n            context['default_' + this.mapping.date_delay] = data[this.mapping.date_delay] || null;\n        }\n        if (this.mapping.all_day) {\n            context['default_' + this.mapping.all_day] = data[this.mapping.all_day] || null;\n        }\n\n        for (var k in context) {\n            if (context[k] && context[k]._isAMomentObject) {\n                context[k] = dateToServer(context[k]);\n            }\n        }\n\n        var options = _.extend({}, this.options, event.options, {\n            context: context,\n            title: this._setEventTitle()\n        });\n\n        if (this.quick != null) {\n            this.quick.destroy();\n            this.quick = null;\n        }\n\n        if (!options.disableQuickCreate && !event.data.disableQuickCreate && this.quickAddPop) {\n            this.quick = new QuickCreate(this, true, options, data, event.data);\n            this.quick.open();\n            this.quick.opened(function () {\n                self.quick.focus();\n            });\n            return;\n        }\n\n        if (this.eventOpenPopup) {\n            if (this.previousOpen) { this.previousOpen.close(); }\n            this.previousOpen = new dialogs.FormViewDialog(self, {\n                res_model: this.modelName,\n                context: context,\n                title: options.title,\n                view_id: this.formViewId || false,\n                disable_multiple_selection: true,\n                on_saved: function () {\n                    if (event.data.on_save) {\n                        event.data.on_save();\n                    }\n                    self.reload();\n                },\n            });\n            this.previousOpen.on('closed', this, () => {\n                if (event.data.on_close) {\n                    event.data.on_close();\n                }\n            })\n            this.previousOpen.open();\n        } else {\n            this.do_action({\n                type: 'ir.actions.act_window',\n                res_model: this.modelName,\n                views: [[this.formViewId || false, 'form']],\n                target: 'current',\n                context: context,\n            });\n        }\n    },\n    /**\n     * @private\n     * @param {OdooEvent} event\n     */\n    _onOpenEvent: function (event) {\n        var self = this;\n        var id = event.data._id;\n        id = id && parseInt(id).toString() === id ? parseInt(id) : id;\n\n        if (!this.eventOpenPopup) {\n            this._rpc({\n                model: self.modelName,\n                method: 'get_formview_id',\n                //The event can be called by a view that can have another context than the default one.\n                args: [[id]],\n                context: event.context || self.context,\n            }).then(function (viewId) {\n                self.do_action({\n                    type:'ir.actions.act_window',\n                    res_id: id,\n                    res_model: self.modelName,\n                    views: [[viewId || false, 'form']],\n                    target: 'current',\n                    context: event.context || self.context,\n                });\n            });\n            return;\n        }\n\n        var options = {\n            res_model: self.modelName,\n            res_id: id || null,\n            context: event.context || self.context,\n            title: _.str.sprintf(_t(\"Open: %s\"), event.data.title),\n            on_saved: function () {\n                if (event.data.on_save) {\n                    event.data.on_save();\n                }\n                self.reload();\n            },\n        };\n        if (this.formViewId) {\n            options.view_id = parseInt(this.formViewId);\n        }\n        new dialogs.FormViewDialog(this, options).open();\n    },\n    /**\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onPrev: function (ev) {\n        ev.stopPropagation();\n        this._move('prev');\n    },\n\n    /**\n     * Handles saving data coming from quick create box\n     *\n     * @private\n     * @param {OdooEvent} event\n     */\n    _onQuickCreate: function (event) {\n        var self = this;\n        if (this.quickCreating) {\n            return;\n        }\n        this.quickCreating = true;\n        this.model.createRecord(event)\n            .then(function () {\n                self.quick.destroy();\n                self.quick = null;\n                self.reload();\n                self.quickCreating = false;\n            })\n            .guardedCatch(function (result) {\n                var errorEvent = result.event;\n                // This will occurs if there are some more fields required\n                // Preventdefaulting the error event will prevent the traceback window\n                errorEvent.preventDefault();\n                event.data.options.disableQuickCreate = true;\n                event.data.data.on_save = self.quick.destroy.bind(self.quick);\n                self._onOpenCreate(event.data);\n                self.quickCreating = false;\n            });\n    },\n    /**\n     * @private\n     * @param {OdooEvent} event\n     */\n    _onUpdateRecord: function (event) {\n        this._updateRecord(event.data);\n    },\n    /**\n     * The internal state of the calendar (mode, period displayed) has changed,\n     * so update the control panel buttons and breadcrumbs accordingly.\n     *\n     * @private\n     * @param {OdooEvent} event\n     */\n    _onViewUpdated: function (event) {\n        this.mode = event.data.mode;\n        if (this.$buttons) {\n            this.$buttons.find('.active').removeClass('active');\n            this.$buttons.find('.o_calendar_button_' + this.mode).addClass('active');\n        }\n        const title = `${this.displayName} (${event.data.title})`;\n        return this.updateControlPanel({ title });\n    },\n\n    /**\n     * Update Attendee status in batch for recurrent events\n     * @private\n     * @param {OdooEvent} event\n     */\n     _onAttendeeStatus: async function(event) {\n         const self = this;\n         let recurrenceUpdate = false;\n         if (event.data.record.recurrency) {\n            recurrenceUpdate = await this._askRecurrenceUpdatePolicy();\n            event.data = Object.assign({}, event.data, {\n                'recurrenceUpdate': recurrenceUpdate,\n            });\n         }\n        return this._rpc({\n            model: self.modelName,\n            method: 'change_attendee_status',\n            args: [[event.data.id], event.data.selectedStatus, recurrenceUpdate],\n        }).then( function () {\n            self.reload();\n        });\n    },\n    /**\n     * This function has been created for the only purpose of\n     * changing the title on the quick create from a calendar.\n     * This way it can be overriden in other apps\n     */\n    _setEventTitle: function () {\n        return _t('New Event');\n    },\n});\n\nreturn CalendarController;\n\n});\n", "odoo.define('web.CalendarModel', function (require) {\n\"use strict\";\n\nvar AbstractModel = require('web.AbstractModel');\nvar Context = require('web.Context');\nvar core = require('web.core');\nvar fieldUtils = require('web.field_utils');\nvar session = require('web.session');\n\nvar _t = core._t;\n\nfunction dateToServer (date) {\n    return date.clone().utc().locale('en').format('YYYY-MM-DD HH:mm:ss');\n}\n\nreturn AbstractModel.extend({\n    /**\n     * @override\n     */\n    init: function () {\n        this._super.apply(this, arguments);\n        this.end_date = null;\n        var week_start = _t.database.parameters.week_start;\n        // calendar uses index 0 for Sunday but Odoo stores it as 7\n        this.week_start = week_start !== undefined && week_start !== false ? week_start % 7 : moment().startOf('week').day();\n        this.week_stop = this.week_start + 6;\n        this.filter_check_all = {};\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Transform fullcalendar event object to OpenERP Data object\n     */\n    calendarEventToRecord: function (event) {\n        // Normalize event_end without changing fullcalendars event.\n        var data = {};\n        data[this.mapping.create_name_field || 'name'] = event.title;\n        var start = event.start.clone();\n        var end = event.end && event.end.clone();\n\n        // Set end date if not existing\n        if (!end || end.diff(start) < 0) { // undefined or invalid end date\n            if (event.allDay) {\n                end = start.clone();\n            } else {\n                // in week mode or day mode, convert allday event to event\n                end = start.clone().add(2, 'h');\n            }\n        } else if (event.allDay) {\n            // For an \"allDay\", FullCalendar gives the end day as the\n            // next day at midnight (instead of 23h59).\n            end.add(-1, 'days');\n        }\n\n        var isDateEvent = this.fields[this.mapping.date_start].type === 'date';\n        // An \"allDay\" event without the \"all_day\" option is not considered\n        // as a 24h day. It's just a part of the day (by default: 7h-19h).\n        if (event.allDay) {\n            if (!this.mapping.all_day && !isDateEvent) {\n                if (event.r_start) {\n                    start.hours(event.r_start.hours())\n                         .minutes(event.r_start.minutes())\n                         .seconds(event.r_start.seconds())\n                         .utc();\n                    end.hours(event.r_end.hours())\n                       .minutes(event.r_end.minutes())\n                       .seconds(event.r_end.seconds())\n                       .utc();\n                } else {\n                    // default hours in the user's timezone\n                    start.hours(7);\n                    end.hours(19);\n                }\n                start.add(-this.getSession().getTZOffset(start), 'minutes');\n                end.add(-this.getSession().getTZOffset(end), 'minutes');\n            }\n        } else {\n            start.add(-this.getSession().getTZOffset(start), 'minutes');\n            end.add(-this.getSession().getTZOffset(end), 'minutes');\n        }\n\n        if (this.mapping.all_day) {\n            if (event.record) {\n                data[this.mapping.all_day] =\n                    (this.data.scale !== 'month' && event.allDay) ||\n                    event.record[this.mapping.all_day] &&\n                    end.diff(start) < 10 ||\n                    false;\n            } else {\n                data[this.mapping.all_day] = event.allDay;\n            }\n        }\n\n        data[this.mapping.date_start] = start;\n        if (this.mapping.date_stop) {\n            data[this.mapping.date_stop] = end;\n        }\n\n        if (this.mapping.date_delay) {\n            if (this.data.scale !== 'month' || (this.data.scale === 'month' && !event.drop)) {\n                data[this.mapping.date_delay] = (end.diff(start) <= 0 ? end.endOf('day').diff(start) : end.diff(start)) / 1000 / 3600;\n            }\n        }\n\n        return data;\n    },\n    /**\n     * @param {Object} filter\n     * @returns {boolean}\n     */\n    changeFilter: function (filter) {\n        var Filter = this.data.filters[filter.fieldName];\n        if (filter.value === 'all') {\n            Filter.all = filter.active;\n        }\n        else if (filter.value === 'check_all') {\n            // Select all numeric filters and update the checkboxes\n            this.filter_check_all[filter.fieldName] = filter.active;\n            // Deactivate the All selection\n            Filter.all = false;\n            if (filter.active) {\n                // Check every displayed filters except the 'all' filter\n                Filter.filters.filter(el => el.value !== 'all').forEach(element => element.active = true );\n                return true;\n\n            } else {\n               Filter.filters.forEach(element => element.active = false);\n               return true;\n            }\n        }\n        var f = _.find(Filter.filters, function (f) {\n            return f.value === filter.value;\n        });\n        if (f) {\n            if (f.active !== filter.active) {\n                // Update the value according to the checkbox state\n                f.active = filter.active;\n            } else if (filter.active) {\n                // if the filter is NOT active, we remove it by returning true [triggered by _onFilterRemove]\n                return false;\n            }\n        } else if (filter.active) {\n            Filter.filters.push({\n                value: filter.value,\n                active: true,\n            });\n        }\n        return true;\n    },\n    /**\n     * @param {OdooEvent} event\n     */\n    createRecord: function (event) {\n        var data = this.calendarEventToRecord(event.data.data);\n        for (var k in data) {\n            if (data[k] && data[k]._isAMomentObject) {\n                data[k] = dateToServer(data[k]);\n            }\n        }\n        return this._rpc({\n                model: this.modelName,\n                method: 'create',\n                args: [data],\n                context: event.data.options.context,\n            });\n    },\n    /**\n     * @param {any} ids\n     * @param {any} model\n     * @returns\n     */\n    deleteRecords: function (ids, model) {\n        return this._rpc({\n                model: model,\n                method: 'unlink',\n                args: [ids],\n                context: session.user_context, // todo: combine with view context\n            });\n    },\n    /**\n     * @override\n     * @returns {Object}\n     */\n    __get: function () {\n        return _.extend({}, this.data, {\n            fields: this.fields\n        });\n    },\n    /**\n     * @override\n     * @param {any} params\n     * @returns {Promise}\n     */\n    __load: function (params) {\n        var self = this;\n        this.modelName = params.modelName;\n        this.fields = params.fields;\n        this.fieldNames = params.fieldNames;\n        this.fieldsInfo = params.fieldsInfo;\n        this.mapping = params.mapping;\n        this.mode = params.mode;       // one of month, week or day\n        this.scales = params.scales;   // one of month, week or day\n        this.scalesInfo = params.scalesInfo;\n\n        // Check whether the date field is editable (i.e. if the events can be\n        // dragged and dropped)\n        this.editable = params.editable;\n        this.creatable = params.creatable;\n\n        // display more button when there are too much event on one day\n        this.eventLimit = params.eventLimit;\n\n        // fields to display color, e.g.: user_id.partner_id\n        this.fieldColor = params.fieldColor;\n        if (!this.preloadPromise) {\n            this.preloadPromise = new Promise(function (resolve, reject) {\n                Promise.all([\n                    self._rpc({model: self.modelName, method: 'check_access_rights', args: [\"write\", false]}),\n                    self._rpc({model: self.modelName, method: 'check_access_rights', args: [\"create\", false]})\n                ]).then(function (result) {\n                    var write = result[0];\n                    var create = result[1];\n                    self.write_right = write;\n                    self.create_right = create;\n                    resolve();\n                }).guardedCatch(reject);\n            });\n        }\n\n        this.data = {\n            domain: params.domain,\n            context: params.context,\n            // get in arch the filter to display in the sidebar and the field to read\n            filters: params.filters,\n        };\n\n        this.setDate(params.initialDate);\n        // Use mode attribute in xml file to specify zoom timeline (day,week,month)\n        // by default month.\n        this.setScale(params.mode);\n\n        _.each(this.data.filters, function (filter) {\n            if (filter.avatar_field && !filter.avatar_model) {\n                filter.avatar_model = self.modelName;\n            }\n        });\n\n        return this.preloadPromise.then(this._loadCalendar.bind(this));\n    },\n    /**\n     * Move the current date range to the next period\n     */\n    next: function () {\n        this.setDate(this.data.target_date.clone().add(1, this.data.scale));\n    },\n    /**\n     * Move the current date range to the previous period\n     */\n    prev: function () {\n        this.setDate(this.data.target_date.clone().add(-1, this.data.scale));\n    },\n    /**\n     * @override\n     * @param {Object} [params.context]\n     * @param {Array} [params.domain]\n     * @returns {Promise}\n     */\n    __reload: function (handle, params) {\n        if (params.domain) {\n            this.data.domain = params.domain;\n        }\n        if (params.context) {\n            this.data.context = params.context;\n        }\n        return this._loadCalendar();\n    },\n    /**\n     * @param {Moment} start. in local TZ\n     */\n    setDate: function (start) {\n        // keep highlight/target_date in localtime\n        this.data.highlight_date = this.data.target_date = start.clone();\n        this.data.start_date = this.data.end_date = start;\n        switch (this.data.scale) {\n            case 'year': {\n                const yearStart = this.data.start_date.clone().startOf('year');\n                let yearStartDay = this.week_start;\n                if (yearStart.day() < yearStartDay) {\n                    // the 1st of January is before our week start (e.g. week start is Monday, and\n                    // 01/01 is Sunday), so we go one week back\n                    yearStartDay -= 7;\n                }\n                this.data.start_date = yearStart.day(yearStartDay).startOf('day');\n                this.data.end_date = this.data.end_date.clone()\n                    .endOf('year').day(this.week_stop).endOf('day');\n                break;\n            }\n            case 'month':\n                var monthStart = this.data.start_date.clone().startOf('month');\n\n                var monthStartDay;\n                if (monthStart.day() >= this.week_start) {\n                    // the month's first day is after our week start\n                    // Then we are in the right week\n                    monthStartDay = this.week_start;\n                } else {\n                    // The month's first day is before our week start\n                    // Then we should go back to the the previous week\n                    monthStartDay = this.week_start - 7;\n                }\n\n                this.data.start_date = monthStart.day(monthStartDay).startOf('day');\n                this.data.end_date = this.data.start_date.clone().add(5, 'week').day(this.week_stop).endOf('day');\n                break;\n            case 'week':\n                var weekStart = this.data.start_date.clone().startOf('week');\n                var weekStartDay = this.week_start;\n                if (this.data.start_date.day() < this.week_start) {\n                    // The week's first day is after our current day\n                    // Then we should go back to the previous week\n                    weekStartDay -= 7;\n                }\n                this.data.start_date = this.data.start_date.clone().day(weekStartDay).startOf('day');\n                this.data.end_date = this.data.end_date.clone().day(weekStartDay + 6).endOf('day');\n                break;\n            default:\n                this.data.start_date = this.data.start_date.clone().startOf('day');\n                this.data.end_date = this.data.end_date.clone().endOf('day');\n        }\n        // We have set start/stop datetime as definite begin/end boundaries of a period (month, week, day)\n        // in local TZ (what is the begining of the week *I am* in ?)\n        // The following code:\n        // - converts those to UTC using our homemade method (testable)\n        // - sets the moment UTC flag to true, to ensure compatibility with third party libs\n        var manualUtcDateStart = this.data.start_date.clone().add(-this.getSession().getTZOffset(this.data.start_date), 'minutes');\n        var formattedUtcDateStart = manualUtcDateStart.format('YYYY-MM-DDTHH:mm:ss') + 'Z';\n        this.data.start_date = moment.utc(formattedUtcDateStart);\n\n        var manualUtcDateEnd = this.data.end_date.clone().add(-this.getSession().getTZOffset(this.data.start_date), 'minutes');\n        var formattedUtcDateEnd = manualUtcDateEnd.format('YYYY-MM-DDTHH:mm:ss') + 'Z';\n        this.data.end_date = moment.utc(formattedUtcDateEnd);\n    },\n    /**\n     * @param {string} scale the scale to set\n     */\n    setScale: function (scale) {\n        if (!_.contains(this.scales, scale)) {\n            scale = \"week\";\n        }\n        this.data.scale = scale;\n        this.setDate(this.data.target_date);\n    },\n    /**\n     * Move the current date range to the period containing today\n     */\n    today: function () {\n        this.setDate(moment(new Date()));\n    },\n    /**\n     * @param {Object} record\n     * @param {integer} record.id\n     * @returns {Promise}\n     */\n    updateRecord: function (record) {\n        // Cannot modify actual name yet\n        var data = _.omit(this.calendarEventToRecord(record), 'name');\n        for (var k in data) {\n            if (data[k] && data[k]._isAMomentObject) {\n                data[k] = dateToServer(data[k]);\n            }\n        }\n        var context = new Context(this.data.context, {from_ui: true});\n        return this._rpc({\n            model: this.modelName,\n            method: 'write',\n            args: [[parseInt(record.id, 10)], data],\n            context: context\n        });\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Converts this.data.filters into a domain\n     *\n     * @private\n     * @returns {Array}\n     */\n    _getFilterDomain: function () {\n        // List authorized values for every field\n        // fields with an active 'all' filter are skipped\n        var authorizedValues = {};\n        var avoidValues = {};\n\n        _.each(this.data.filters, function (filter) {\n            // Skip 'all' filters because they do not affect the domain\n            if (filter.all) return;\n            // all visible filters have been activated\n            if (filter.visible) return;\n\n            // Loop over subfilters to complete authorizedValues\n            _.each(filter.filters, function (f) {\n                if (filter.write_model) {\n                    if (!authorizedValues[filter.fieldName])\n                        authorizedValues[filter.fieldName] = [];\n\n                    if (f.active) {\n                        authorizedValues[filter.fieldName].push(f.value);\n                    }\n                } else {\n                    if (!f.active) {\n                        if (!avoidValues[filter.fieldName])\n                            avoidValues[filter.fieldName] = [];\n\n                        avoidValues[filter.fieldName].push(f.value);\n                    }\n                }\n            });\n        });\n\n        // Compute the domain\n        var domain = [];\n        for (var field in authorizedValues) {\n            domain.push([field, 'in', authorizedValues[field]]);\n        }\n        for (var field in avoidValues) {\n            if (avoidValues[field].length > 0) {\n                domain.push([field, 'not in', avoidValues[field]]);\n            }\n        }\n\n        return domain;\n    },\n    /**\n     * @private\n     * @returns {Object}\n     */\n    _getFullCalendarOptions: function () {\n        var format12Hour = {\n            hour: 'numeric',\n            minute: '2-digit',\n            omitZeroMinute: true,\n            meridiem: 'short'\n        };\n        var format24Hour = {\n            hour: 'numeric',\n            minute: '2-digit',\n            hour12: false,\n        };\n        return {\n            defaultView: this.scalesInfo[this.mode || 'week'],\n            header: false,\n            selectable: this.creatable && this.create_right,\n            selectMirror: true,\n            editable: this.editable,\n            droppable: true,\n            navLinks: false,\n            eventLimit: this.eventLimit, // allow \"more\" link when too many events\n            snapMinutes: 15,\n            longPressDelay: 500,\n            eventResizableFromStart: true,\n            nowIndicator: true,\n            weekNumbers: true,\n            weekNumbersWithinDays: true,\n            weekNumberCalculation: function (date) {\n                // Since FullCalendar v4 ISO 8601 week date is preferred so we force the old system\n                return moment(date).week();\n            },\n            weekLabel: _t(\"Week\"),\n            allDayText: _t(\"All day\"),\n            monthNames: moment.months(),\n            monthNamesShort: moment.monthsShort(),\n            dayNames: moment.weekdays(),\n            dayNamesShort: moment.weekdaysShort(),\n            dayNamesMin: moment.weekdaysMin(),\n            firstDay: this.week_start,\n            slotLabelFormat: _t.database.parameters.time_format.search(\"%H\") !== -1 ? format24Hour : format12Hour,\n            allDaySlot: this.mapping.all_day || this.fields[this.mapping.date_start].type === 'date',\n        };\n    },\n    /**\n     * Return a domain from the date range\n     *\n     * @private\n     * @returns {Array} A domain containing datetimes start and stop in UTC\n     *  those datetimes are formatted according to server's standards\n     */\n    _getRangeDomain: function () {\n        // Build OpenERP Domain to filter object by this.mapping.date_start field\n        // between given start, end dates.\n        var domain = [[this.mapping.date_start, '<=', dateToServer(this.data.end_date)]];\n        if (this.mapping.date_stop) {\n            domain.push([this.mapping.date_stop, '>=', dateToServer(this.data.start_date)]);\n        } else if (!this.mapping.date_delay) {\n            domain.push([this.mapping.date_start, '>=', dateToServer(this.data.start_date)]);\n        }\n        return domain;\n    },\n    /**\n     * @private\n     * @returns {Promise}\n     */\n    _loadCalendar: function () {\n        var self = this;\n        this.data.fc_options = this._getFullCalendarOptions();\n        var defs = _.map(this.data.filters, this._loadFilter.bind(this));\n\n        return Promise.all(defs).then(function () {\n            return self._rpc({\n                    model: self.modelName,\n                    method: 'search_read',\n                    context: self.data.context,\n                    fields: self.fieldNames,\n                    domain: self.data.domain.concat(self._getRangeDomain()).concat(self._getFilterDomain())\n            })\n            .then(async function (events) {\n                self._parseServerData(events);\n                self.data.data = await self._getCalendarEventData(events);\n                return Promise.all([\n                    self._loadColors(self.data, self.data.data),\n                    self._loadRecordsToFilters(self.data, self.data.data)\n                ]);\n            });\n        });\n    },\n    /**\n     * @private\n     * @param {any} element\n     * @param {any} events\n     * @returns {Promise}\n     */\n    _loadColors: function (element, events) {\n        if (this.fieldColor) {\n            const fieldName = this.fieldColor;\n            _.each(events, function (event) {\n                var value = event.record[fieldName];\n                event.color_index = _.isArray(value) ? value[0] : value;\n            });\n            this.model_color = this.fields[fieldName].relation || element.model;\n        }\n        return Promise.resolve();\n    },\n    /**\n     * Get the color index used to render the event and the filter.\n     * Since we have a maximum of 30 colors, we have to adapt the color\n     * index in case the id exceeds the number of colors available.\n     *\n     * - actual_color_list contains the list of color already used in the filter\n     * - color_index is the color we try to apply for the event\n     * \n     * @private\n     * @param {Array} actual_color_list\n     * @param {Integer} color_index\n     * @returns {Integer}\n     */\n    _getColorIndex: function(actual_color_list, color_index) {\n        var actual_color_list = actual_color_list || [0];\n        var new_color_index = color_index % 50;\n        if (new_color_index !== color_index && actual_color_list.includes(new_color_index)) {\n            new_color_index = this._getColorIndex(actual_color_list, new_color_index + 3);\n        }\n        return new_color_index;\n    },\n    /**\n     * @private\n     * @param {any} filter\n     * @returns {Promise}\n     */\n    _loadFilter: function (filter) {\n        if (!filter.write_model) {\n            return Promise.resolve();\n        }\n\n        var field = this.fields[filter.fieldName];\n        var fields = [filter.write_field];\n        if (filter.filter_field) {\n            fields.push(filter.filter_field);\n        }\n        return this._rpc({\n                model: filter.write_model,\n                method: 'search_read',\n                domain: [[\"user_id\", \"=\", session.uid]],\n                fields: fields,\n            })\n            .then(function (res) {\n                var records = _.map(res, function (record) {\n                    var _value = record[filter.write_field];\n                    var value = _.isArray(_value) ? _value[0] : _value;\n                    var f = _.find(filter.filters, function (f) {return f.value === value;});\n                    var formater = fieldUtils.format[_.contains(['many2many', 'one2many'], field.type) ? 'many2one' : field.type];\n                    // By default, only current user partner is checked.\n                    return {\n                        'id': record.id,\n                        'value': value,\n                        'label': formater(_value, field),\n                        'active': (f && f.active) || (filter.filter_field && record[filter.filter_field]),\n                    };\n                });\n                records.sort(function (f1,f2) {\n                    return _.string.naturalCmp(f2.label, f1.label);\n                });\n\n                // add my profile\n                if (field.relation === 'res.partner' || field.relation === 'res.users') {\n                    var value = field.relation === 'res.partner' ? session.partner_id : session.uid;\n                    var me = _.find(records, function (record) {\n                        return record.value === value;\n                    });\n                    if (me) {\n                        records.splice(records.indexOf(me), 1);\n                    } else {\n                        var f = _.find(filter.filters, function (f) {return f.value === value;});\n                        me = {\n                            'value': value,\n                            'label': session.name,\n                            'active': !f || f.active,\n                        };\n                    }\n                    records.unshift(me);\n                }\n                // add all selection\n                records.push({\n                    'value': 'all',\n                    'label': field.relation === 'res.partner' || field.relation === 'res.users' ? _t(\"Everybody's calendars\") : _t(\"Everything\"),\n                    'active': filter.all,\n                });\n\n                filter.filters = records;\n            });\n    },\n    /**\n     * @private\n     * @param {any} element\n     * @param {any} events\n     * @returns {Promise}\n     */\n    _loadRecordsToFilters: function (element, events) {\n        var self = this;\n        var new_filters = {};\n        var to_read = {};\n        var defs = [];\n        var color_filter = {};\n\n        _.each(this.data.filters, function (filter, fieldName) {\n            var field = self.fields[fieldName];\n\n            new_filters[fieldName] = filter;\n            if (filter.write_model) {\n                if (field.relation === self.model_color) {\n                    _.each(filter.filters, function (f) {\n                        f.color_index = self._getColorIndex(_.map(filter.filters, f => f.value), f.value);\n                    });\n                }\n                return;\n            }\n\n            _.each(filter.filters, function (filter) {\n                filter.display = !filter.active;\n            });\n\n            var fs = [];\n            var undefined_fs = [];\n            _.each(events, function (event) {\n                var data =  event.record[fieldName];\n                if (!_.contains(['many2many', 'one2many'], field.type)) {\n                    data = [data];\n                } else {\n                    to_read[field.relation] = (to_read[field.relation] || []).concat(data);\n                }\n                _.each(data, function (_value) {\n                    var value = _.isArray(_value) ? _value[0] : _value;\n                    var f = {\n                        'color_index': self.model_color === (field.relation || element.model) ? value : false,\n                        'value': value,\n                        'label': fieldUtils.format[field.type](_value, field) || _t(\"Undefined\"),\n                        'avatar_model': field.relation || element.model,\n                    };\n                    // if field used as color does not have value then push filter in undefined_fs,\n                    // such filters should come last in filter list with Undefined string, later merge it with fs\n                    value ? fs.push(f) : undefined_fs.push(f);\n                });\n            });\n            _.each(_.union(fs, undefined_fs), function (f) {\n                var f1 = _.findWhere(filter.filters, _.omit(f, 'color_index'));\n                if (f1) {\n                    f1.display = true;\n                } else {\n                    f.display = f.active = true;\n                    filter.filters.push(f);\n                }\n            });\n\n            if (filter.color_model && filter.field_color) {\n                var ids = filter.filters.reduce((acc, f) => {\n                    if (!f.color_index && f.value) {\n                        acc.push(f.value);\n                    }\n                    return acc;\n                }, []);\n                if (!color_filter[filter.color_model]) {\n                    color_filter[filter.color_model] = {};\n                }\n                if (ids.length) {\n                    defs.push(self._rpc({\n                        model: filter.color_model,\n                        method: 'search_read',\n                        args: [[['id', 'in', _.uniq(ids)]], [filter.field_color]],\n                    })\n                    .then(function (res) {\n                        _.each(res, function (c) {\n                            color_filter[filter.color_model][c.id] = c[filter.field_color];\n                        });\n                    }));\n                }\n            }\n        });\n\n        _.each(to_read, function (ids, model) {\n            defs.push(self._rpc({\n                    model: model,\n                    method: 'name_get',\n                    args: [_.uniq(ids)],\n                })\n                .then(function (res) {\n                    to_read[model] = _.object(res);\n                }));\n        });\n        return Promise.all(defs).then(function () {\n            _.each(self.data.filters, function (filter) {\n                if (filter.write_model) {\n                    return;\n                }\n                if (filter.filters.length && (filter.filters[0].avatar_model in to_read)) {\n                    _.each(filter.filters, function (f) {\n                        f.label = to_read[f.avatar_model][f.value];\n                    });\n                }\n                if (filter.color_model && filter.field_color) {\n                    _.each(filter.filters, function (f) {\n                        if (!f.color_index) {\n                            f.color_index = color_filter[filter.color_model] && color_filter[filter.color_model][f.value];\n                        }\n                    });\n                }\n            });\n        });\n    },\n    /**\n     * parse the server values to javascript framwork\n     *\n     * @private\n     * @param {Object} data the server data to parse\n     */\n    _parseServerData: function (data) {\n        var self = this;\n        _.each(data, function(event) {\n            _.each(self.fieldNames, function (fieldName) {\n                event[fieldName] = self._parseServerValue(self.fields[fieldName], event[fieldName]);\n            });\n        });\n    },\n    /**\n     * Transform OpenERP event object to fullcalendar event object\n     *\n     * @private\n     * @param {Object} evt\n     */\n    _recordToCalendarEvent: function (evt) {\n        var date_start;\n        var date_stop;\n        var date_delay = evt[this.mapping.date_delay] || 1.0,\n            all_day = this.fields[this.mapping.date_start].type === 'date' ||\n                this.mapping.all_day && evt[this.mapping.all_day] || false,\n            the_title = '',\n            attendees = [];\n\n        if (!all_day) {\n            date_start = evt[this.mapping.date_start].clone();\n            date_stop = this.mapping.date_stop ? evt[this.mapping.date_stop].clone() : null;\n        } else {\n            date_start = evt[this.mapping.date_start].clone().startOf('day');\n            date_stop = this.mapping.date_stop ? evt[this.mapping.date_stop].clone().startOf('day') : null;\n        }\n\n        if (!date_stop && date_delay) {\n            date_stop = date_start.clone().add(date_delay,'hours');\n        }\n\n        if (!all_day) {\n            date_start.add(this.getSession().getTZOffset(date_start), 'minutes');\n            date_stop.add(this.getSession().getTZOffset(date_stop), 'minutes');\n        }\n\n        if (this.mapping.all_day && evt[this.mapping.all_day]) {\n            date_stop.add(1, 'days');\n        }\n        var r = {\n            'record': evt,\n            'start': date_start.local(true).toDate(),\n            'end': date_stop.local(true).toDate(),\n            'r_start': date_start.clone().local(true).toDate(),\n            'r_end': date_stop.clone().local(true).toDate(),\n            'title': the_title,\n            'allDay': all_day,\n            'id': evt.id,\n            'attendees':attendees,\n        };\n\n        if (!(this.mapping.all_day && evt[this.mapping.all_day]) && this.data.scale === 'month' && this.fields[this.mapping.date_start].type !== 'date') {\n            r.showTime = true;\n        }\n\n        return r;\n    },\n    _getCalendarEventData: function (events) {\n        return _.map(events, this._recordToCalendarEvent.bind(this));\n    }\n});\n\n});\n", "odoo.define('web.CalendarPopover', function (require) {\n\"use strict\";\n\nvar fieldRegistry = require('web.field_registry');\nconst fieldRegistryOwl = require('web.field_registry_owl');\nconst FieldWrapper = require('web.FieldWrapper');\nvar StandaloneFieldManagerMixin = require('web.StandaloneFieldManagerMixin');\nvar Widget = require('web.Widget');\nconst { WidgetAdapterMixin } = require('web.OwlCompatibility');\n\nvar CalendarPopover = Widget.extend(WidgetAdapterMixin, StandaloneFieldManagerMixin, {\n    template: 'CalendarView.event.popover',\n    events: {\n        'click .o_cw_popover_edit': '_onClickPopoverEdit',\n        'click .o_cw_popover_delete': '_onClickPopoverDelete',\n    },\n    /**\n     * @constructor\n     * @param {Widget} parent\n     * @param {Object} eventInfo\n     */\n    init: function (parent, eventInfo) {\n        this._super.apply(this, arguments);\n        StandaloneFieldManagerMixin.init.call(this);\n        this.hideDate = eventInfo.hideDate;\n        this.hideTime = eventInfo.hideTime;\n        this.eventTime = eventInfo.eventTime;\n        this.eventDate = eventInfo.eventDate;\n        this.displayFields = eventInfo.displayFields;\n        this.fields = eventInfo.fields;\n        this.event = eventInfo.event;\n        this.modelName = eventInfo.modelName;\n        this._canDelete = eventInfo.canDelete;\n        this.popoverFields = eventInfo.popoverFields;\n    },\n    /**\n     * @override\n     */\n    willStart: function () {\n        return Promise.all([this._super.apply(this, arguments), this._processFields()]);\n    },\n    /**\n     * @override\n     */\n    start: function () {\n        var self = this;\n        _.each(this.$fieldsList, function ($field) {\n            $field.appendTo(self.$('.o_cw_popover_fields_secondary'));\n        });\n        return this._super.apply(this, arguments);\n    },\n    /**\n     * @override\n     */\n    destroy: function () {\n        this._super.apply(this, arguments);\n        WidgetAdapterMixin.destroy.call(this);\n    },\n    /**\n     * Called each time the widget is attached into the DOM.\n     */\n    on_attach_callback: function () {\n        WidgetAdapterMixin.on_attach_callback.call(this);\n    },\n    /**\n     * Called each time the widget is detached from the DOM.\n     */\n    on_detach_callback: function () {\n        WidgetAdapterMixin.on_detach_callback.call(this);\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @return {boolean}\n     */\n    isEventDeletable() {\n        return this._canDelete;;\n    },\n    /**\n     * @return {boolean}\n     */\n    isEventDetailsVisible() {\n        return true;\n    },\n    /**\n     * @return {boolean}\n     */\n    isEventEditable() {\n        return true;\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Returns the AbstractField specialization that should be used for the\n     * given field informations. If there is no mentioned specific widget to\n     * use, determines one according the field type.\n     *\n     * @private\n     * @param {Object} field\n     * @param {Object} attrs\n     * @returns {function|null} AbstractField specialization Class\n     */\n    _getFieldWidgetClass(field, attrs) {\n        let FieldWidget;\n        if (attrs.widget) {\n            FieldWidget = fieldRegistry.getAny(['form' + \".\" + attrs.widget, attrs.widget]);\n            if (!FieldWidget) {\n                console.warn(\"Missing widget: \", attrs.widget, \" for field\", attrs.name, \"of type\", field.type);\n            }\n        }\n        return FieldWidget || fieldRegistry.getAny(['form' + \".\" + field.type, field.type, \"abstract\"]);\n    },\n\n    /**\n     * Generate fields to render into popover\n     *\n     * @private\n     * @returns {Promise}\n     */\n    _processFields: function () {\n        var self = this;\n        var fieldsToGenerate = [];\n        const fieldInformation = {};\n        var fields = _.keys(this.popoverFields);\n        for (var i=0; i<fields.length; i++) {\n            var fieldName = fields[i];\n            var displayFieldInfo = self.displayFields[fieldName] || {attrs: {invisible: 1}};\n            var fieldInfo = self.fields[fieldName];\n            fieldInformation[fieldName] = {\n                Widget: self._getFieldWidgetClass(fieldInfo, displayFieldInfo.attrs),\n            };\n            var field = {\n                name: fieldName,\n                string: displayFieldInfo.attrs.string || fieldInfo.string,\n                value: self.event.extendedProps.record[fieldName],\n                type: fieldInfo.type,\n                invisible: displayFieldInfo.attrs.invisible,\n            };\n            if (field.type === 'selection') {\n                field.selection = fieldInfo.selection;\n            }\n            if (field.type === 'monetary') {\n                var currencyField = field.currency_field || 'currency_id';\n                if (!fields.includes(currencyField) && _.has(self.event.extendedProps.record, currencyField)) {\n                    fields.push(currencyField);\n                }\n            }\n            if (fieldInfo.relation) {\n                field.relation = fieldInfo.relation;\n            }\n            if (displayFieldInfo.attrs.widget) {\n                field.widget = displayFieldInfo.attrs.widget;\n            } else if (_.contains(['many2many', 'one2many'], field.type)) {\n                field.widget = 'many2many_tags';\n            }\n            if (_.contains(['many2many', 'one2many'], field.type)) {\n                field.fields = [{\n                    name: 'id',\n                    type: 'integer',\n                }, {\n                    name: 'display_name',\n                    type: 'char',\n                }];\n            }\n            fieldsToGenerate.push(field);\n        };\n\n        this.$fieldsList = [];\n        return this.model.makeRecord(this.modelName, fieldsToGenerate, fieldInformation).then(async function (recordID) {\n            var defs = [];\n\n            const recordDataPoint = self.model.localData[recordID];\n            recordDataPoint.res_id = self.event.extendedProps.record.id;\n            await self.model._fetchSpecialData(recordDataPoint);\n            var record = self.model.get(recordID);\n            _.each(fieldsToGenerate, function (field) {\n                if (field.invisible) return;\n                let isLegacy = true;\n                let fieldWidget;\n                let FieldClass = fieldRegistryOwl.getAny([field.widget, field.type]);\n                if (FieldClass) {\n                    isLegacy = false;\n                    fieldWidget = new FieldWrapper(this, FieldClass, {\n                        fieldName: field.name,\n                        record,\n                        options: self.displayFields[field.name],\n                    });\n                } else {\n                    FieldClass = fieldRegistry.getAny([field.widget, field.type]);\n                    fieldWidget = new FieldClass(self, field.name, record, self.displayFields[field.name]);\n                }\n                if (fieldWidget.attrs && !_.isObject(fieldWidget.attrs.modifiers)) {\n                    fieldWidget.attrs.modifiers = fieldWidget.attrs.modifiers ? JSON.parse(fieldWidget.attrs.modifiers) : {};\n                }\n                self._registerWidget(recordID, field.name, fieldWidget);\n                // Only display the fields whose attributes does not make them invisible\n                let fieldClass = \"list-group-item flex-shrink-0 d-flex flex-wrap align-items-center\";\n                if (fieldWidget.attrs && fieldWidget.attrs.modifiers) {\n                    const fieldModifier = record.evalModifiers(_.pick(fieldWidget.attrs.modifiers, 'invisible'));\n                    fieldClass += fieldModifier.invisible ? ' o_invisible_modifier' : '';\n                }\n                if (fieldWidget.attrs) {\n                    if (fieldWidget.attrs.options && fieldWidget.attrs.options.icon) {\n                        field.icon = fieldWidget.attrs.options.icon;\n                    }\n                    if (fieldWidget.attrs.class) {\n                        fieldClass += ' ' + fieldWidget.attrs.class;\n                    }\n                }\n\n                var $field = $('<li>', {class: fieldClass});\n                let $fieldLabel;\n                if (field.icon) {\n                    $fieldLabel = $('<strong>', {class: 'mr-2', html: _.str.sprintf(\"<b><i class='%s'/></b>\", field.icon)});\n                } else {\n                    $fieldLabel = $('<strong>', {class: 'mr-2', text: _.str.sprintf('%s : ', field.string)});\n                }\n                $fieldLabel.appendTo($field);\n                var $fieldContainer = $('<div>', {class: 'flex-grow-1'});\n                $fieldContainer.appendTo($field);\n\n                let def;\n                if (isLegacy) {\n                    def = fieldWidget.appendTo($fieldContainer);\n                } else {\n                    def = fieldWidget.mount($fieldContainer[0]);\n                }\n                self.$fieldsList.push($field);\n                defs.push(def);\n            });\n            return Promise.all(defs);\n        });\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {jQueryEvent} ev\n     */\n    _onClickPopoverEdit: function (ev) {\n        ev.preventDefault();\n        this.trigger_up('edit_event', {\n            id: this.event.id,\n            title: this.event.extendedProps.record.display_name,\n        });\n    },\n    /**\n     * @private\n     * @param {jQueryEvent} ev\n     */\n    _onClickPopoverDelete: function (ev) {\n        ev.preventDefault();\n        this.trigger_up('delete_event', {id: this.event.id});\n    },\n});\n\nreturn CalendarPopover;\n\n});\n", "odoo.define('web.CalendarQuickCreate', function (require) {\n\"use strict\";\n\nvar core = require('web.core');\nvar Dialog = require('web.Dialog');\n\nvar _t = core._t;\nvar QWeb = core.qweb;\n\n/**\n * Quick creation view.\n *\n * Triggers a single event \"added\" with a single parameter \"name\", which is the\n * name entered by the user\n *\n * @class\n * @type {*}\n */\nvar QuickCreate = Dialog.extend({\n    events: _.extend({}, Dialog.events, {\n        'keyup input': '_onkeyup',\n    }),\n\n    /**\n     * @constructor\n     * @param {Widget} parent\n     * @param {Object} buttons\n     * @param {Object} options\n     * @param {Object} dataTemplate\n     * @param {Object} dataCalendar\n     */\n    init: function (parent, buttons, options, dataTemplate, dataCalendar) {\n        this._buttons = buttons || false;\n        this.options = options;\n        this.parentCalendar = parent;\n        // Can hold data pre-set from where you clicked on agenda\n        this.dataTemplate = dataTemplate || {};\n        this.dataCalendar = dataCalendar;\n\n        var self = this;\n        this._super(parent, {\n            title: options.title,\n            // Close the dialog when clicking outside of it\n            backdrop: true,\n            size: 'small',\n            buttons: this._buttons ? [\n                {text: _t(\"Create\"), classes: 'btn-primary', click: function () {\n                    if (!self._quickAdd(dataCalendar)) {\n                        self.focus();\n                    }\n                }},\n                {text: _t(\"Edit\"), click: function () {\n                    dataCalendar.disableQuickCreate = true;\n                    dataCalendar.title = self.$('input').val().trim();\n                    dataCalendar.on_save = self.destroy.bind(self);\n                    self.trigger_up('openCreate', dataCalendar);\n                }},\n                {text: _t(\"Cancel\"), close: true},\n            ] : [],\n            $content: QWeb.render('CalendarView.quick_create', {widget: this})\n        });\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    focus: function () {\n        this.$('input').focus();\n    },\n\n    destroy: function () {\n        // On quick create, remaining dialogs may be closed. We avoid to lose the selection for new quickcreate\n        // by checking that the dialog is not already destroyed.\n        if (!this.isDestroyed()) {\n            // remove selection when the dialog is closed\n            if (this.parentCalendar.renderer.state.scale === 'year') {\n                this.parentCalendar.renderer.calendar.view.unselect();\n            } else {\n                this.parentCalendar.renderer.calendar.unselect();\n            }\n        }\n        this._super.apply(this, arguments);\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Gathers data from the quick create dialog a launch quick_create(data) method\n     */\n    _quickAdd: function (dataCalendar) {\n        dataCalendar = $.extend({}, this.dataTemplate, dataCalendar);\n        var val = this.$('input').val().trim();\n        if (!val) {\n            this.$('label, input').addClass('o_field_invalid');\n            this.displayNotification({ title: _t(\"Invalid fields:\"), message: _t(\"Meeting Subject\"), type: 'danger' });\n        }\n        dataCalendar.title = val;\n        return (val)? this.trigger_up('quickCreate', {data: dataCalendar, options: this.options}) : false;\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {keyEvent} event\n     */\n    _onkeyup: function (event) {\n        if (this._flagEnter) {\n            return;\n        }\n        if(event.keyCode === $.ui.keyCode.ENTER) {\n            this._flagEnter = true;\n            if (!this._quickAdd(this.dataCalendar)){\n                this._flagEnter = false;\n            }\n        } else if (event.keyCode === $.ui.keyCode.ESCAPE && this._buttons) {\n            this.close();\n        }\n    },\n});\n\nreturn QuickCreate;\n\n});\n", "/* global FullCalendar */\nodoo.define('web.CalendarRenderer', function (require) {\n\"use strict\";\n\nvar AbstractRenderer = require('web.AbstractRenderer');\nvar CalendarPopover = require('web.CalendarPopover');\nvar core = require('web.core');\nvar Dialog = require('web.Dialog');\nvar field_utils = require('web.field_utils');\nvar FieldManagerMixin = require('web.FieldManagerMixin');\nvar relational_fields = require('web.relational_fields');\nvar session = require('web.session');\nvar Widget = require('web.Widget');\nconst { createYearCalendarView } = require('/web/static/src/js/libs/fullcalendar.js');\n\nvar _t = core._t;\nvar qweb = core.qweb;\n\nvar SidebarFilterM2O = relational_fields.FieldMany2One.extend({\n    _getSearchBlacklist: function () {\n        return this._super.apply(this, arguments).concat(this.filter_ids || []);\n    },\n});\n\nvar SidebarFilter = Widget.extend(FieldManagerMixin, {\n    template: 'CalendarView.sidebar.filter',\n    custom_events: _.extend({}, FieldManagerMixin.custom_events, {\n        field_changed: '_onFieldChanged',\n    }),\n    /**\n     * @constructor\n     * @param {Widget} parent\n     * @param {Object} options\n     * @param {string} options.fieldName\n     * @param {Object[]} options.filters A filter is an object with the\n     *   following keys: id, value, label, active, avatar_model, color,\n     *   can_be_removed\n     * @param {Object} [options.favorite] this is an object with the following\n     *   keys: fieldName, model, fieldModel\n     */\n    init: function (parent, options) {\n        this._super.apply(this, arguments);\n        FieldManagerMixin.init.call(this);\n\n        this.title = options.title;\n        this.fields = options.fields;\n        this.fieldName = options.fieldName;\n        this.write_model = options.write_model;\n        this.write_field = options.write_field;\n        this.filter_field = options.filter_field;\n        this.avatar_field = options.avatar_field;\n        this.avatar_model = options.avatar_model;\n        this.filters = options.filters;\n        this.label = options.label;\n        this.getColor = options.getColor;\n        this.filter_check_all = options.check_all;\n    },\n    /**\n     * @override\n     */\n    willStart: function () {\n        var self = this;\n        var defs = [this._super.apply(this, arguments)];\n\n        if (this.write_model || this.write_field) {\n            var def = this.model.makeRecord(this.write_model, [{\n                name: this.write_field,\n                relation: this.fields[this.fieldName].relation,\n                type: 'many2one',\n            }]).then(function (recordID) {\n                self.many2one = new SidebarFilterM2O(self,\n                    self.write_field,\n                    self.model.get(recordID),\n                    {\n                        mode: 'edit',\n                        attrs: {\n                            string: _t(self.fields[self.fieldName].string),\n                            placeholder: \"+ \" + _.str.sprintf(_t(\"Add %s\"), self.title),\n                            can_create: false\n                        },\n                    });\n            });\n            defs.push(def);\n        }\n        return Promise.all(defs);\n\n    },\n    /**\n     * @override\n     */\n    start: function () {\n        this._super();\n        if (this.many2one) {\n            this.many2one.appendTo(this.$el);\n            this.many2one.filter_ids = _.without(_.pluck(this.filters, 'value'), 'all');\n        }\n        this.$el.on('click', '.o_remove', this._onFilterRemove.bind(this));\n        this.$el.on('click', '.o_calendar_filter_items input', this._onFilterActive.bind(this));\n        this.$el.on('click', '.o_calendar_filter_items_checkall input', this._onFilterCheckAll.bind(this));\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {OdooEvent} event\n     */\n    _onFieldChanged: function (event) {\n        var self = this;\n        event.stopPropagation();\n        var createValues = {'user_id': session.uid};\n        var value = event.data.changes[this.write_field].id;\n        createValues[this.write_field] = value;\n        this._rpc({\n                model: this.write_model,\n                method: 'create',\n                args: [createValues],\n            })\n            .then(function () {\n                self.trigger_up('changeFilter', {\n                    'fieldName': self.fieldName,\n                    'value': value,\n                    'active': true,\n                });\n            });\n    },\n    /**\n     * @private\n     * @param {MouseEvent} e\n     */\n    _onFilterActive: function (e) {\n        var $input = $(e.currentTarget);\n        this.filter_check_all[this.fieldName] = false;\n        this.trigger_up('changeFilter', {\n            'fieldName': this.fieldName,\n            'value': $input.closest('.o_calendar_filter_item').data('value'),\n            'active': $input.prop('checked'),\n        });\n    },\n    /**\n     * @private\n     * @param {MouseEvent} e\n     */\n    _onFilterRemove: function (e) {\n        var self = this;\n        var $filter = $(e.currentTarget).closest('.o_calendar_filter_item');\n        this.filter_check_all[this.fieldName] = false;\n        self._rpc({\n                model: self.write_model,\n                method: 'unlink',\n                args: [[$filter.data('id')]],\n            })\n            .then(function () {\n                self.trigger_up('changeFilter', {\n                    'fieldName': self.fieldName,\n                    'id': $filter.data('id'),\n                    'active': false,\n                    'value': $filter.data('value'),\n                });\n            });\n    },\n    /**\n     * @private\n     * When the user check the box near the filter title: all existing filters\n     * are active, excepts the 'all' filter that removes the domain on active filters.\n     * @param {MouseEvent} e\n     */\n    _onFilterCheckAll: function (e) {\n        let $input = $(e.currentTarget);\n        let $filter = $(e.currentTarget).closest('.o_calendar_filter_item');\n        this.filter_check_all[this.fieldName] = $input.prop('checked');\n        this.trigger_up('changeFilter', {\n            'fieldName': this.fieldName,\n            'value': 'check_all',\n            'active': $input.prop('checked'),\n        });\n\n    },\n});\n\nreturn AbstractRenderer.extend({\n    template: \"CalendarView\",\n    config: {\n        CalendarPopover: CalendarPopover,\n        eventTemplate: 'calendar-box',\n    },\n    custom_events: _.extend({}, AbstractRenderer.prototype.custom_events || {}, {\n        edit_event: '_onEditEvent',\n        delete_event: '_onDeleteEvent',\n        render_event: '_renderEvents',\n    }),\n\n    /**\n     * @constructor\n     * @param {Widget} parent\n     * @param {Object} state\n     * @param {Object} params\n     */\n    init: function (parent, state, params) {\n        this._super.apply(this, arguments);\n        this.displayFields = params.displayFields;\n        this.popoverFields = params.popoverFields;\n        this.model = params.model;\n        this.filters = [];\n        this.color_map = {};\n        this.hideDate = params.hideDate;\n        this.hideTime = params.hideTime;\n        this.canDelete = params.canDelete;\n        this.canCreate = params.canCreate;\n        this.scalesInfo = params.scalesInfo;\n        this._isInDOM = false;\n    },\n    /**\n     * @override\n     * @returns {Promise}\n     */\n    start: function () {\n        this._initSidebar();\n        this._initCalendar();\n        return this._super();\n    },\n    /**\n     * @override\n     */\n    on_attach_callback: function () {\n        this._super(...arguments);\n        this._isInDOM = true;\n        // BUG Test ????\n        // this.$el.height($(window).height() - this.$el.offset().top);\n        this.calendar.render();\n        this._renderCalendar();\n        window.addEventListener('click', this._onWindowClick.bind(this));\n    },\n    /**\n     * Called when the field is detached from the DOM.\n     */\n    on_detach_callback: function () {\n        this._super(...arguments);\n        this._isInDOM = false;\n        window.removeEventListener('click', this._onWindowClick);\n    },\n    /**\n     * @override\n     */\n    destroy: function () {\n        if (this.calendar) {\n            this.calendar.destroy();\n        }\n        if (this.$small_calendar) {\n            this.$small_calendar.datepicker('destroy');\n            $('#ui-datepicker-div:empty').remove();\n        }\n        this._super.apply(this, arguments);\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Note: this is not dead code, it is called by the calendar-box template\n     *\n     * @param {any} record\n     * @param {any} fieldName\n     * @param {any} imageField\n     * @returns {string[]}\n     */\n    getAvatars: function (record, fieldName, imageField) {\n        var field = this.state.fields[fieldName];\n\n        if (!record[fieldName]) {\n            return [];\n        }\n        if (field.type === 'one2many' || field.type === 'many2many') {\n            return _.map(record[fieldName], function (id) {\n                return '<img src=\"/web/image/'+field.relation+'/'+id+'/'+imageField+'\" />';\n            });\n        } else if (field.type === 'many2one') {\n            return ['<img src=\"/web/image/'+field.relation+'/'+record[fieldName][0]+'/'+imageField+'\" />'];\n        } else {\n            var value = this._format(record, fieldName);\n            var color = this.getColor(value);\n            if (isNaN(color)) {\n                return ['<span class=\"o_avatar_square\" style=\"background-color:'+color+';\"/>'];\n            }\n            else {\n                return ['<span class=\"o_avatar_square o_calendar_color_'+color+'\"/>'];\n            }\n        }\n    },\n    /**\n     * Note: this is not dead code, it is called by two template\n     *\n     * @param {any} key\n     * @returns {integer}\n     */\n    getColor: function (key) {\n        if (!key) {\n            return;\n        }\n        if (this.color_map[key]) {\n            return this.color_map[key];\n        }\n        // check if the key is a css color\n        if (typeof key === 'string' && key.match(/^((#[A-F0-9]{3})|(#[A-F0-9]{6})|((hsl|rgb)a?\\(\\s*(?:(\\s*\\d{1,3}%?\\s*),?){3}(\\s*,[0-9.]{1,4})?\\))|)$/i)) {\n            return this.color_map[key] = key;\n        }\n        if (typeof key === 'number' && !(key in this.color_map)) {\n            return this.color_map[key] = key;\n        }\n        var index = (((_.keys(this.color_map).length + 1) * 5) % 24) + 1;\n        this.color_map[key] = index;\n        return index;\n    },\n    /**\n     * @override\n     */\n    getLocalState: function () {\n        var fcScroller = this.calendarElement.querySelector('.fc-scroller');\n        return {\n            scrollPosition: fcScroller.scrollTop,\n        };\n    },\n    /**\n     * @override\n     */\n    setLocalState: function (localState) {\n        if (localState.scrollPosition) {\n            var fcScroller = this.calendarElement.querySelector('.fc-scroller');\n            fcScroller.scrollTop = localState.scrollPosition;\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Convert the new format of Event from FullCalendar V4 to a Event FullCalendar V3\n     * @param fc4Event\n     * @return {Object} FullCalendar V3 Object Event\n     * @private\n     */\n    _convertEventToFC3Event: function (fc4Event) {\n        var event = fc4Event;\n        if (!moment.isMoment(fc4Event.start)) {\n            event = {\n                id: fc4Event.id,\n                title: fc4Event.title,\n                start: moment(fc4Event.start).utcOffset(0, true),\n                end: fc4Event.end && moment(fc4Event.end).utcOffset(0, true),\n                allDay: fc4Event.allDay,\n                color: fc4Event.color,\n            };\n            if (fc4Event.extendedProps) {\n                event = Object.assign({}, event, {\n                    r_start: fc4Event.extendedProps.r_start && moment(fc4Event.extendedProps.r_start).utcOffset(0, true),\n                    r_end: fc4Event.extendedProps.r_end && moment(fc4Event.extendedProps.r_end).utcOffset(0, true),\n                    record: fc4Event.extendedProps.record,\n                    attendees: fc4Event.extendedProps.attendees,\n                    disableQuickCreate: fc4Event.extendedProps.disableQuickCreate,\n                });\n            }\n        }\n        return event;\n    },\n    /**\n     * @param {any} event\n     * @returns {string} the html for the rendered event\n     */\n    _eventRender: function (event) {\n        var qweb_context = {\n            event: event,\n            record: event.extendedProps.record,\n            color: this.getColor(event.extendedProps.color_index),\n            showTime: !this.hideTime && event.extendedProps.showTime,\n            showLocation: this.state.scale !== 'month'\n        };\n        this.qweb_context = qweb_context;\n        if (_.isEmpty(qweb_context.record)) {\n            return '';\n        } else {\n            return qweb.render(this.config.eventTemplate, qweb_context);\n        }\n    },\n    /**\n     * @private\n     * @param {any} record\n     * @param {any} fieldName\n     * @returns {string}\n     */\n    _format: function (record, fieldName) {\n        var field = this.state.fields[fieldName];\n        if (field.type === \"one2many\" || field.type === \"many2many\") {\n            return field_utils.format[field.type]({data: record[fieldName]}, field);\n        } else {\n            return field_utils.format[field.type](record[fieldName], field, {forceString: true});\n        }\n    },\n    _preOpenCreate: function (data) {\n        if (this.$('.o_cw_popover').length) {\n            this._unselectEvent();\n            // Don't take into account the selection if the user closed a popover by doing a \"selection\"\n            this.$('.fc-event').not(\".o_event\").remove();\n            // Clicking anywhere in the interface will only close the popover but we don't want the quickCreate\n            return;\n        }\n        if (this.state.context.default_name) {\n            data.title = this.state.context.default_name;\n        }\n        this.trigger_up('openCreate', {\n            ...this._convertEventToFC3Event(data),\n            on_close: () => {\n                if (this.state.scale === 'year') {\n                    this.calendar.view.unselect();\n                } else {\n                    this.calendar.unselect();\n                }\n            }\n        });\n    },\n    /**\n     * Return the Object options for FullCalendar\n     *\n     * @private\n     * @param {Object} fcOptions\n     * @return {Object}\n     */\n    _getFullCalendarOptions: function (fcOptions) {\n        var self = this;\n        const options = Object.assign({}, this.state.fc_options, {\n            plugins: [\n                'moment',\n                'interaction',\n                'dayGrid',\n                'timeGrid'\n            ],\n            eventDrop: function (eventDropInfo) {\n                var event = self._convertEventToFC3Event(eventDropInfo.event);\n                self.trigger_up('dropRecord', event);\n            },\n            eventResize: function (eventResizeInfo) {\n                self._unselectEvent();\n                var event = self._convertEventToFC3Event(eventResizeInfo.event);\n                self.trigger_up('updateRecord', event);\n            },\n            eventClick: function (eventClickInfo) {\n                eventClickInfo.jsEvent.preventDefault();\n                eventClickInfo.jsEvent.stopPropagation();\n                var eventData = eventClickInfo.event;\n                self._unselectEvent();\n                $(self.calendarElement).find(self._computeEventSelector(eventClickInfo)).addClass('o_cw_custom_highlight');\n                self._renderEventPopover(eventData, $(eventClickInfo.el));\n            },\n            selectAllow: function (event) {\n               if (event.end.getDate() === event.start.getDate() || event.allDay) {\n                   return true;\n               }\n            },\n            yearDateClick: function (info) {\n                self._unselectEvent();\n                info.view.unselect();\n                if (!info.events.length) {\n                    if (info.selectable) {\n                        const data = {\n                            start: info.date,\n                            allDay: true,\n                        };\n                        if (self.state.context.default_name) {\n                            data.title = self.state.context.default_name;\n                        }\n                        self.trigger_up('openCreate', self._convertEventToFC3Event(data));\n                    }\n                } else {\n                    self._renderYearEventPopover(info.date, info.events, $(info.dayEl));\n                }\n            },\n            select: function (selectionInfo) {\n                var data = {start: selectionInfo.start, end: selectionInfo.end, allDay: selectionInfo.allDay};\n                self._preOpenCreate(data);\n            },\n            eventRender: function (info) {\n                var event = info.event;\n                var element = $(info.el);\n                var view = info.view;\n                self._addEventAttributes(element, event);\n                if (view.type === 'dayGridYear') {\n                    const color = this.getColor(event.extendedProps.color_index);\n                    if (typeof color === 'string') {\n                        element.css({\n                            backgroundColor: color,\n                        });\n                    } else if (typeof color === 'number') {\n                        element.addClass(`o_calendar_color_${color}`);\n                    } else {\n                        element.addClass('o_calendar_color_1');\n                    }\n                } else {\n                var $render = $(self._eventRender(event));\n                element.find('.fc-content').html($render.html());\n                element.addClass($render.attr('class'));\n\n                // Add background if doesn't exist\n                if (!element.find('.fc-bg').length) {\n                    element.find('.fc-content').after($('<div/>', {class: 'fc-bg'}));\n                }\n\n                if (view.type === 'dayGridMonth' && event.extendedProps.record) {\n                    var start = event.extendedProps.r_start || event.start;\n                    var end = event.extendedProps.r_end || event.end;\n                    $(this.el).find(_.str.sprintf('.fc-day[data-date=\"%s\"]', moment(start).format('YYYY-MM-DD'))).addClass('fc-has-event');\n                    // Detect if the event occurs in just one day\n                    // note: add & remove 1 min to avoid issues with 00:00\n                    var isSameDayEvent = moment(start).clone().add(1, 'minute').isSame(moment(end).clone().subtract(1, 'minute'), 'day');\n                    if (!event.allDay && isSameDayEvent) {\n                        // For month view: do not show background for non allday, single day events\n                        element.addClass('o_cw_nobg');\n                        if (event.extendedProps.showTime && !self.hideTime) {\n                            const displayTime = moment(start).clone().format(self._getDbTimeFormat());\n                            element.find('.fc-content .fc-time').text(displayTime);\n                        }\n                    }\n                }\n\n                // On double click, edit the event\n                element.on('dblclick', function () {\n                    self.trigger_up('edit_event', {id: event.id});\n                });\n                }\n            },\n            datesRender: function (info) {\n                const viewToMode = Object.fromEntries(\n                    Object.entries(self.scalesInfo).map(([k, v]) => [v, k])\n                );\n                self.trigger_up('viewUpdated', {\n                    mode: viewToMode[info.view.type],\n                    title: info.view.title,\n                });\n            },\n            // Add/Remove a class on hover to style multiple days events.\n            // The css \":hover\" selector can't be used because these events\n            // are rendered using multiple elements.\n            eventMouseEnter: function (mouseEnterInfo) {\n                $(self.calendarElement).find(self._computeEventSelector(mouseEnterInfo)).addClass('o_cw_custom_hover');\n            },\n            eventMouseLeave: function (mouseLeaveInfo) {\n                if (!mouseLeaveInfo.event.id) {\n                    return;\n                }\n                $(self.calendarElement).find(self._computeEventSelector(mouseLeaveInfo)).removeClass('o_cw_custom_hover');\n            },\n            eventDragStart: function (mouseDragInfo) {\n                mouseDragInfo.el.classList.add(mouseDragInfo.view.type);\n                $(self.calendarElement).find(`[data-event-id=${mouseDragInfo.event.id}]`).addClass('o_cw_custom_hover');\n                self._unselectEvent();\n            },\n            eventResizeStart: function (mouseResizeInfo) {\n                $(self.calendarElement).find(`[data-event-id=${mouseResizeInfo.event.id}]`).addClass('o_cw_custom_hover');\n                self._unselectEvent();\n            },\n            eventLimitClick: function () {\n                self._unselectEvent();\n                return 'popover';\n            },\n            windowResize: function () {\n                self._onWindowResize();\n            },\n            views: {\n                timeGridDay: {\n                    columnHeaderFormat: 'LL'\n                },\n                timeGridWeek: {\n                    columnHeaderFormat: 'ddd D'\n                },\n                dayGridMonth: {\n                    columnHeaderFormat: 'dddd'\n                },\n                dayGridYear: {\n                    weekNumbers: false\n                }\n            },\n            height: 'parent',\n            unselectAuto: false,\n            // prevent too small events\n            timeGridEventMinHeight: 15,\n            dir: _t.database.parameters.direction,\n            events: (info, successCB) => {\n                successCB(self.state.data);\n            },\n        }, fcOptions);\n        options.plugins.push(createYearCalendarView(FullCalendar, options));\n        return options;\n    },\n    /**\n     * Compute the selector to select the correct event we are currently on\n     * @param {jQueryElement} info\n     * @returns {String}\n     */\n    _computeEventSelector: function (info) {\n        return `[data-event-id=${info.event.id}]`;\n    },\n    /**\n     * Add attribute to the element\n     * @param {jQueryElement} element \n     * @param {Object} event \n     */\n    _addEventAttributes: function (element, event) {\n        element.attr('data-event-id', event.id);\n    },\n    /**\n     * Initialize the main calendar\n     *\n     * @private\n     */\n    _initCalendar: function () {\n        this.calendarElement = this.$(\".o_calendar_widget\")[0];\n        var locale = moment.locale();\n\n        var fcOptions = this._getFullCalendarOptions({\n            locale: locale, // reset locale when fullcalendar has already been instanciated before now\n        });\n\n        this.calendar = new FullCalendar.Calendar(this.calendarElement, fcOptions);\n    },\n    /**\n     * Initialize the mini calendar in the sidebar\n     *\n     * @private\n     */\n    _initCalendarMini: function () {\n        var self = this;\n        this.$small_calendar = this.$(\".o_calendar_mini\");\n        this.$small_calendar.datepicker({\n            'onSelect': function (datum, obj) {\n                self.trigger_up('changeDate', {\n                    date: moment(new Date(+obj.currentYear , +obj.currentMonth, +obj.currentDay))\n                });\n            },\n            'showOtherMonths': true,\n            'dayNamesMin': this.state.fc_options.dayNamesMin.map(x => x[0]),\n            'monthNames': this.state.fc_options.monthNamesShort,\n            'firstDay': this.state.fc_options.firstDay,\n        });\n    },\n    /**\n     * Initialize the sidebar\n     *\n     * @private\n     */\n    _initSidebar: function () {\n        this.$sidebar = this.$('.o_calendar_sidebar');\n        this.$calendarSyncContainer = this.$('#calendar_sync');\n        this.$sidebar_container = this.$(\".o_calendar_sidebar_container\");\n        this._initCalendarMini();\n    },\n    /**\n     * Finalise the popover\n     *\n     * @param {jQueryElement} $popoverElement\n     * @param {web.CalendarPopover} calendarPopover\n     * @private\n     */\n    _onPopoverShown: function ($popoverElement, calendarPopover) {\n        var $popover = $($popoverElement.data('bs.popover').tip);\n        $popover.find('.o_cw_popover_close').on('click', this._unselectEvent.bind(this));\n        $popover.find('.o_cw_body').replaceWith(calendarPopover.$el);\n    },\n    /**\n     * Render the calendar view, this is the main entry point.\n     *\n     * @override\n     */\n    async _renderView() {\n        this.$('.o_calendar_view')[0].prepend(this.calendarElement);\n        if (this._isInDOM) {\n            this._renderCalendar();\n        }\n        this.$small_calendar.datepicker(\"setDate\", this.state.highlight_date.toDate())\n                            .find('.o_selected_range')\n                            .removeClass('o_color o_selected_range');\n        var $a;\n        switch (this.state.scale) {\n            case 'year': $a = this.$small_calendar.find('td'); break;\n            case 'month': $a = this.$small_calendar.find('td'); break;\n            case 'week': $a = this.$small_calendar.find('tr:has(.ui-state-active)'); break;\n            case 'day': $a = this.$small_calendar.find('a.ui-state-active'); break;\n        }\n        $a.addClass('o_selected_range');\n        setTimeout(function () {\n            $a.not('.ui-state-active').addClass('o_color');\n        });\n\n        await this._renderFilters();\n    },\n    /**\n     * Render the specific code for the FullCalendar when it's in the DOM\n     *\n     * @private\n     */\n    _renderCalendar() {\n        this.calendar.unselect();\n\n        if (this.scalesInfo[this.state.scale] !== this.calendar.view.type) {\n            this.calendar.changeView(this.scalesInfo[this.state.scale]);\n        }\n\n        if (this.target_date !== this.state.target_date.toString()) {\n            this.calendar.gotoDate(moment(this.state.target_date).toDate());\n            this.target_date = this.state.target_date.toString();\n        } else {\n            // this.calendar.gotoDate already renders events when called\n            // so render events only when domain changes\n            this._renderEvents();\n        }\n\n        this._unselectEvent();\n        // this._scrollToScrollTime();\n    },\n    /**\n     * Render all events\n     *\n     * @private\n     */\n    _renderEvents: function () {\n        this.calendar.refetchEvents();\n    },\n    /**\n     * Render all filters\n     *\n     * @private\n     * @returns {Promise} resolved when all filters have been rendered\n     */\n    _renderFilters: function () {\n        // Dispose of filter popover\n        this.$('.o_calendar_filter_item').popover('dispose');\n        _.each(this.filters || (this.filters = []), function (filter) {\n            filter.destroy();\n        });\n        if (this.state.fullWidth) {\n            return Promise.resolve();\n        }\n        return this._renderFiltersOneByOne();\n    },\n    /**\n     * Renders each filter one by one, waiting for the first filter finished to\n     * be rendered and appended to render the next one.\n     * We need to do like this since render a filter is asynchronous, we don't\n     * know which one will be appened at first and we want tp force them to be\n     * rendered in order.\n     *\n     * @param {number} filterIndex if not set, 0 by default\n     * @returns {Promise} resolved when all filters have been rendered\n     */\n    _renderFiltersOneByOne: function (filterIndex) {\n        filterIndex = filterIndex || 0;\n        var arrFilters = _.toArray(this.state.filters);\n        var prom;\n        if (filterIndex < arrFilters.length) {\n            var options = arrFilters[filterIndex];\n            if (!_.find(options.filters, function (f) {return f.display == null || f.display;})) {\n                return this._renderFiltersOneByOne(filterIndex + 1);\n            }\n\n            var self = this;\n            options.getColor = this.getColor.bind(this);\n            options.fields = this.state.fields;\n            var sidebarFilter = new SidebarFilter(self, options);\n            prom = sidebarFilter.appendTo(this.$sidebar).then(function () {\n                // Show filter popover\n                if (options.avatar_field) {\n                    _.each(options.filters, function (filter) {\n                        if (!['all', false].includes(filter.value)) {\n                            var selector = `.o_calendar_filter_item[data-value=${filter.value}]`;\n                            sidebarFilter.$el.find(selector).popover({\n                                animation: false,\n                                trigger: 'hover',\n                                html: true,\n                                placement: 'top',\n                                title: filter.label,\n                                delay: {show: 300, hide: 0},\n                                content: function () {\n                                    return $('<img>', {\n                                        src: `/web/image/${options.avatar_model}/${filter.value}/${options.avatar_field}`,\n                                        class: 'mx-auto',\n                                    });\n                                },\n                            });\n                        }\n                    });\n                }\n                return self._renderFiltersOneByOne(filterIndex + 1);\n            });\n            this.filters.push(sidebarFilter);\n        }\n        return Promise.resolve(prom);\n    },\n    /**\n     * Returns the time format from database parameters (only hours and minutes).\n     * FIXME: this looks like a weak heuristic...\n     *\n     * @private\n     * @returns {string}\n     */\n    _getDbTimeFormat: function () {\n        return _t.database.parameters.time_format.search('%H') !== -1 ? 'HH:mm' : 'hh:mm a';\n    },\n    /**\n     * Returns event's formatted date for popovers.\n     *\n     * @private\n     * @param {moment} start\n     * @param {moment} end\n     * @param {boolean} showDayName\n     * @param {boolean} allDay\n     */\n    _getFormattedDate: function (start, end, showDayName, allDay) {\n        const isSameDayEvent = start.clone().add(1, 'minute')\n            .isSame(end.clone().subtract(1, 'minute'), 'day');\n        if (allDay) {\n            // cancel correction done in _recordToCalendarEvent\n            end = end.clone().subtract(1, 'day');\n        }\n        if (!isSameDayEvent && start.isSame(end, 'month')) {\n            // Simplify date-range if an event occurs into the same month (eg. '4-5 August 2019')\n            return start.clone().format('MMMM D') + '-' + end.clone().format('D, YYYY');\n        } else {\n            return isSameDayEvent ?\n                start.clone().format(showDayName ? 'dddd, LL' : 'LL') :\n                start.clone().format('LL') + ' - ' + end.clone().format('LL');\n        }\n    },\n    /**\n     * Prepare context to display in the popover.\n     *\n     * @private\n     * @param {Object} eventData\n     * @returns {Object} context\n     */\n    _getPopoverContext: function (eventData) {\n        var context = {\n            hideDate: this.hideDate,\n            hideTime: this.hideTime,\n            eventTime: {},\n            eventDate: {},\n            fields: this.state.fields,\n            displayFields: this.displayFields,\n            event: eventData,\n            modelName: this.model,\n            canDelete: this.canDelete,\n            popoverFields: this.popoverFields,\n        };\n\n        var start = moment((eventData.extendedProps && eventData.extendedProps.r_start) || eventData.start);\n        var end = moment((eventData.extendedProps && eventData.extendedProps.r_end) || eventData.end);\n        var isSameDayEvent = start.clone().add(1, 'minute').isSame(end.clone().subtract(1, 'minute'), 'day');\n\n        // Do not display timing if the event occur across multiple days. Otherwise use user's timing preferences\n        if (!this.hideTime && !eventData.allDay && isSameDayEvent) {\n            var dbTimeFormat = this._getDbTimeFormat();\n\n            context.eventTime.time = start.clone().format(dbTimeFormat) + ' - ' + end.clone().format(dbTimeFormat);\n\n            // Calculate duration and format text\n            var durationHours = moment.duration(end.diff(start)).hours();\n            var durationHoursKey = (durationHours === 1) ? 'h' : 'hh';\n            var durationMinutes = moment.duration(end.diff(start)).minutes();\n            var durationMinutesKey = (durationMinutes === 1) ? 'm' : 'mm';\n\n            var localeData = moment.localeData(); // i18n for 'hours' and \"minutes\" strings\n            context.eventTime.duration = (durationHours > 0 ? localeData.relativeTime(durationHours, true, durationHoursKey) : '')\n                    + (durationHours > 0 && durationMinutes > 0 ? ', ' : '')\n                    + (durationMinutes > 0 ? localeData.relativeTime(durationMinutes, true, durationMinutesKey) : '');\n        }\n\n        if (!this.hideDate) {\n\n            if (eventData.allDay && isSameDayEvent) {\n                context.eventDate.duration = _t(\"All day\");\n            } else if (eventData.allDay && !isSameDayEvent) {\n                var daysLocaleData = moment.localeData();\n                var days = moment.duration(end.diff(start)).days();\n                context.eventDate.duration = daysLocaleData.relativeTime(days, true, 'dd');\n            }\n\n            context.eventDate.date = this._getFormattedDate(start, end, true, eventData.allDay);\n        }\n\n        return context;\n    },\n    /**\n     * Prepare the parameters for the popover.\n     * This allow the parameters to be extensible.\n     *\n     * @private\n     * @param {Object} eventData\n     */\n    _getPopoverParams: function (eventData) {\n        // Display a small lock for private events that we manage\n        const displayLock = eventData.extendedProps.record.privacy === 'private' && eventData.extendedProps.record.partner_ids.includes(session.partner_id);\n        let title = eventData.extendedProps.record.display_name;\n        if (title.length > 30) {\n            title = title.substring(0, 30) + \"\u2026\";\n        }\n        return {\n            animation: false,\n            delay: {\n                show: 50,\n                hide: 100\n            },\n            trigger: 'manual',\n            html: true,\n            title: title,\n            template: qweb.render('CalendarView.event.popover.placeholder',\n            {color: this.getColor(eventData.extendedProps.color_index), displayLock: displayLock}),\n            container: eventData.allDay ? '.fc-view' : '.fc-scroller',\n        }\n    },\n    /**\n     * Render event popover\n     *\n     * @private\n     * @param {Object} eventData\n     * @param {jQueryElement} $eventElement\n     */\n    _renderEventPopover: function (eventData, $eventElement) {\n        var self = this;\n\n        // Initialize popover widget\n        var calendarPopover = new self.config.CalendarPopover(self, self._getPopoverContext(eventData));\n        calendarPopover.appendTo($('<div>')).then(() => {\n            $eventElement.popover(\n                self._getPopoverParams(eventData)\n            ).on('shown.bs.popover', function () {\n                self._onPopoverShown($(this), calendarPopover);\n            }).popover('show');\n        });\n    },\n    /**\n     * Render year event popover\n     *\n     * @private\n     * @param {Date} date\n     * @param {Object[]} events\n     * @param {jQueryElement} $el\n     */\n    _renderYearEventPopover: function (date, events, $el) {\n        const groupKeys = [];\n        const groupedEvents = {};\n        const records = {};\n        for(const record of this.state.data) {\n            records[record.id] = record;\n        }\n        for (const event of events) {\n            const start = moment(event.extendedProps.r_start);\n            const end = moment(event.extendedProps.r_end);\n            const duration = moment.duration(end.diff(start)).asDays();\n            // get the original record to get the real allDay value as\n            // the fullcalendar year view enforce allDay to true\n            const record = records[event.extendedProps.record.id];\n            event.extendedProps.record.start_hour = !record.allDay && duration < 1 ? start.format(\"HH:mm\") : \"\";\n            const key = this._getFormattedDate(start, end, false, record.allDay);\n            if (!(key in groupedEvents)) {\n                groupedEvents[key] = [];\n                groupKeys.push({\n                    key: key,\n                    start: event.start,\n                    end: event.end,\n                    isSameDayEvent: start.clone().add(1, 'minute')\n                        .isSame(end.clone().subtract(1, 'minute'), 'day'),\n                });\n            }\n            groupedEvents[key].push(event);\n        }\n\n        const popoverContent = qweb.render('CalendarView.yearEvent.popover', {\n            groupedEvents,\n            groupKeys: groupKeys\n                .sort((a, b) => {\n                    if (a.isSameDayEvent) {\n                        // if isSameDayEvent then put it before the others\n                        return Number.MIN_SAFE_INTEGER;\n                    } else if (b.isSameDayEvent) {\n                        return Number.MAX_SAFE_INTEGER;\n                    } else if (a.start.getTime() - b.start.getTime() === 0) {\n                        return a.end.getTime() - b.end.getTime();\n                    }\n                    return a.start.getTime() - b.start.getTime();\n                })\n                .map(x => x.key),\n            canCreate: this.canCreate,\n        });\n\n        $el.popover({\n            animation: false,\n            delay: {\n                show: 50,\n                hide: 100\n            },\n            trigger: 'manual',\n            html: true,\n            content: popoverContent,\n            template: qweb.render('CalendarView.yearEvent.popover.placeholder'),\n            container: '.fc-dayGridYear-view',\n        }).on('shown.bs.popover', () => {\n            $('.o_cw_popover .o_cw_popover_close').on('click', () => this._unselectEvent());\n            $('.o_cw_popover .o_cw_popover_create').on('click', (e) => {\n                e.preventDefault();\n                e.stopPropagation();\n                this._unselectEvent();\n                const data = {\n                    start: date,\n                    allDay: true,\n                };\n                if (this.state.context.default_name) {\n                    data.title = this.state.context.default_name;\n                }\n                this.trigger_up('openCreate', this._convertEventToFC3Event(data));\n            });\n            $('.o_cw_popover .o_cw_popover_link').on('click', (e) => {\n                e.preventDefault();\n                e.stopPropagation();\n                this._unselectEvent();\n                this.trigger_up('openEvent', {\n                    _id: parseInt(e.target.dataset.id, 10),\n                    title: e.target.dataset.title,\n                });\n            });\n        }).popover('show');\n    },\n    /**\n     * Scroll to the time set in the FullCalendar parameter\n     * @private\n     */\n    _scrollToScrollTime: function () {\n        var scrollTime = this.calendar.getOption('scrollTime');\n        this.calendar.scrollToTime(scrollTime);\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Remove highlight classes and dispose of popovers\n     *\n     * @private\n     */\n    _unselectEvent: function () {\n        this.$('.fc-event').removeClass('o_cw_custom_highlight');\n        this.$('.o_cw_popover').popover('dispose');\n    },\n    /**\n     * @private\n     * @param {MouseEvent} e\n     */\n    _onWindowClick: function (e) {\n        const popover = this.el.querySelector('.o_cw_popover');\n        if (popover && !popover.contains(e.target)) {\n            this._unselectEvent();\n        }\n    },\n    /**\n     * Handler for resize event.\n     * As the result it will resize the calendar to fit the window space.\n     *\n     * @private\n     */\n    _onWindowResize: function () {\n        this.$el.height($(window).height() - this.$el.offset().top);\n        this.calendar.updateSize();\n    },\n    /**\n     * @private\n     * @param {OdooEvent} event\n     */\n    _onEditEvent: function (event) {\n        this._unselectEvent();\n        this.trigger_up('openEvent', {\n            _id: event.data.id,\n            title: event.data.title,\n        });\n    },\n    /**\n     * @private\n     * @param {OdooEvent} event\n     */\n    _onDeleteEvent: function (event) {\n        this._unselectEvent();\n        this.trigger_up('deleteRecord', {id: parseInt(event.data.id, 10), event: event.target.event.extendedProps});\n    },\n});\n\n});\n", "odoo.define('web.CalendarView', function (require) {\n\"use strict\";\n\nvar AbstractView = require('web.AbstractView');\nvar CalendarModel = require('web.CalendarModel');\nvar CalendarController = require('web.CalendarController');\nvar CalendarRenderer = require('web.CalendarRenderer');\nvar core = require('web.core');\nvar pyUtils = require('web.py_utils');\nvar utils = require('web.utils');\n\nvar _lt = core._lt;\n\n// gather the fields to get\nvar fieldsToGather = [\n    \"date_start\",\n    \"date_delay\",\n    \"date_stop\",\n    \"all_day\",\n    \"recurrence_update\",\n    \"create_name_field\",\n];\n\nconst scalesInfo = {\n    day: 'timeGridDay',\n    week: 'timeGridWeek',\n    month: 'dayGridMonth',\n    year: 'dayGridYear',\n};\n\nvar CalendarView = AbstractView.extend({\n    display_name: _lt('Calendar'),\n    icon: 'fa-calendar',\n    jsLibs: [\n        '/web/static/lib/fullcalendar/core/main.js',\n        '/web/static/lib/fullcalendar/interaction/main.js',\n        '/web/static/lib/fullcalendar/moment/main.js',\n        '/web/static/lib/fullcalendar/daygrid/main.js',\n        '/web/static/lib/fullcalendar/timegrid/main.js',\n        '/web/static/lib/fullcalendar/list/main.js'\n    ],\n    cssLibs: [\n        '/web/static/lib/fullcalendar/core/main.css',\n        '/web/static/lib/fullcalendar/daygrid/main.css',\n        '/web/static/lib/fullcalendar/timegrid/main.css',\n        '/web/static/lib/fullcalendar/list/main.css'\n    ],\n    config: _.extend({}, AbstractView.prototype.config, {\n        Model: CalendarModel,\n        Controller: CalendarController,\n        Renderer: CalendarRenderer,\n    }),\n    viewType: 'calendar',\n    searchMenuTypes: ['filter', 'favorite'],\n\n    /**\n     * @override\n     */\n    init: function (viewInfo, params) {\n        this._super.apply(this, arguments);\n        var arch = this.arch;\n        var fields = this.fields;\n        var attrs = arch.attrs;\n\n        if (!attrs.date_start) {\n            throw new Error(_lt(\"Calendar view has not defined 'date_start' attribute.\"));\n        }\n\n        var mapping = {};\n        var fieldNames = fields.display_name ? ['display_name'] : [];\n        var displayFields = {};\n        let popoverFields = {};\n\n        _.each(fieldsToGather, function (field) {\n            if (arch.attrs[field]) {\n                var fieldName = attrs[field];\n                mapping[field] = fieldName;\n                fieldNames.push(fieldName);\n            }\n        });\n\n        var filters = {};\n\n        var eventLimit = attrs.event_limit !== null && (isNaN(+attrs.event_limit) ? _.str.toBool(attrs.event_limit) : +attrs.event_limit);\n\n        var modelFilters = [];\n        _.each(arch.children, function (child) {\n            if (child.tag !== 'field') return;\n            var fieldName = child.attrs.name;\n            fieldNames.push(fieldName);\n            popoverFields[fieldName] = {attrs: child.attrs};\n            if (!child.attrs.invisible || child.attrs.filters) {\n                child.attrs.options = child.attrs.options ? pyUtils.py_eval(child.attrs.options) : {};\n                if (!child.attrs.invisible) {\n                    displayFields[fieldName] = {attrs: child.attrs};\n                }\n\n                if (params.sidebar === false) return; // if we have not sidebar, (eg: Dashboard), we don't use the filter \"coworkers\"\n\n                if (child.attrs.avatar_field) {\n                    filters[fieldName] = filters[fieldName] || {\n                        'title': fields[fieldName].string,\n                        'fieldName': fieldName,\n                        'filters': [],\n                        'check_all': {},\n                    };\n                    filters[fieldName].avatar_field = child.attrs.avatar_field;\n                    filters[fieldName].avatar_model = fields[fieldName].relation;\n                }\n                if (child.attrs.write_model) {\n                    filters[fieldName] = filters[fieldName] || {\n                        'title': fields[fieldName].string,\n                        'fieldName': fieldName,\n                        'filters': [],\n                        'check_all': {},\n                    };\n                    filters[fieldName].write_model = child.attrs.write_model;\n                    filters[fieldName].write_field = child.attrs.write_field; // can't use a x2many fields\n                    filters[fieldName].filter_field = child.attrs.filter_field;\n\n                    modelFilters.push(fields[fieldName].relation);\n                }\n                if (child.attrs.filters) {\n                    filters[fieldName] = filters[fieldName] || {\n                        'title': fields[fieldName].string,\n                        'fieldName': fieldName,\n                        'check_all': {},\n                        'filters': [],\n                    };\n                    if (child.attrs.color) {\n                        filters[fieldName].field_color = child.attrs.color;\n                        filters[fieldName].color_model = fields[fieldName].relation;\n                    }\n                    if (!child.attrs.avatar_field && fields[fieldName].relation) {\n                        if (fields[fieldName].relation.includes(['res.users', 'res.partner', 'hr.employee'])) {\n                            filters[fieldName].avatar_field = 'avatar_128';\n                        }\n                        filters[fieldName].avatar_model = fields[fieldName].relation;\n                    }\n                }\n            }\n        });\n\n        if (attrs.color) {\n            var fieldName = attrs.color;\n            fieldNames.push(fieldName);\n        }\n\n        //if quick_add = False, we don't allow quick_add\n        //if quick_add = not specified in view, we use the default widgets.QuickCreate\n        //if quick_add = is NOT False and IS specified in view, we this one for widgets.QuickCreate'\n        this.controllerParams.quickAddPop = (!('quick_add' in attrs) || utils.toBoolElse(attrs.quick_add+'', true));\n        this.controllerParams.disableQuickCreate =  params.disable_quick_create || !this.controllerParams.quickAddPop;\n\n        // If form_view_id is set, then the calendar view will open a form view\n        // with this id, when it needs to edit or create an event.\n        this.controllerParams.formViewId =\n            attrs.form_view_id ? parseInt(attrs.form_view_id, 10) : false;\n        if (!this.controllerParams.formViewId && params.action) {\n            var formViewDescr = _.find(params.action.views, function (v) {\n                return v.type ===  'form';\n            });\n            if (formViewDescr) {\n                this.controllerParams.formViewId = formViewDescr.viewID;\n            }\n        }\n\n        let scales;\n        const allowedScales = Object.keys(scalesInfo);\n        if (arch.attrs.scales) {\n            scales = arch.attrs.scales.split(',')\n                .filter(x => allowedScales.includes(x));\n        } else {\n            scales = allowedScales;\n        }\n\n        this.controllerParams.eventOpenPopup = utils.toBoolElse(attrs.event_open_popup || '', false);\n        this.controllerParams.showUnusualDays = utils.toBoolElse(attrs.show_unusual_days || '', false);\n        this.controllerParams.mapping = mapping;\n        this.controllerParams.context = params.context || {};\n        this.controllerParams.displayName = params.action && params.action.name;\n        this.controllerParams.scales = scales;\n\n        this.rendererParams.displayFields = displayFields;\n        this.rendererParams.popoverFields = popoverFields;\n        this.rendererParams.model = viewInfo.model;\n        this.rendererParams.hideDate = utils.toBoolElse(attrs.hide_date || '', false);\n        this.rendererParams.hideTime = utils.toBoolElse(attrs.hide_time || '', false);\n        this.rendererParams.canDelete = this.controllerParams.activeActions.delete;\n        this.rendererParams.canCreate = this.controllerParams.activeActions.create;\n        this.rendererParams.scalesInfo = scalesInfo;\n\n        this.loadParams.fieldNames = _.uniq(fieldNames);\n        this.loadParams.mapping = mapping;\n        this.loadParams.fields = fields;\n        this.loadParams.fieldsInfo = viewInfo.fieldsInfo;\n        this.loadParams.editable = !fields[mapping.date_start].readonly;\n        this.loadParams.creatable = this.controllerParams.activeActions.create;\n        this.loadParams.eventLimit = eventLimit;\n        this.loadParams.fieldColor = attrs.color;\n\n        this.loadParams.filters = filters;\n        this.loadParams.mode = (params.context && params.context.default_mode) || attrs.mode;\n        this.loadParams.scales = scales;\n        this.loadParams.initialDate = moment(\n            (params.context && params.context.initial_date) ||\n            params.initialDate || \n            new Date()\n        );\n        this.loadParams.scalesInfo = scalesInfo;\n    },\n});\n\nreturn CalendarView;\n\n});\n", "/** @odoo-module alias=web.FieldManagerMixin **/\n\n/**\n * The FieldManagerMixin is a mixin, designed to do the plumbing between field\n * widgets and a basicmodel.  Field widgets can be used outside of a view.  In\n * that case, someone needs to listen to events bubbling up from the widgets and\n * calling the correct methods on the model.  This is the field_manager's job.\n */\n\nimport BasicModel from 'web.BasicModel';\nimport concurrency from 'web.concurrency';\n\nvar FieldManagerMixin = {\n    custom_events: {\n        field_changed: '_onFieldChanged',\n        load: '_onLoad',\n        mutexify: '_onMutexify',\n    },\n    /**\n     * A FieldManagerMixin can be initialized with an instance of a basicModel.\n     * If not, it will simply uses its own.\n     *\n     * @param {BasicModel} [model]\n     */\n    init: function (model) {\n        this.model = model || new BasicModel(this);\n        this.mutex = new concurrency.Mutex();\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Apply changes by notifying the basic model, then saving the data if\n     * necessary, and finally, confirming the changes to the UI.\n     *\n     * @todo find a way to remove ugly 3rd argument...\n     *\n     * @param {string} dataPointID\n     * @param {Object} changes\n     * @param {OdooEvent} event\n     * @returns {Promise} resolves when the change has been done, and the UI\n     *   updated\n     */\n    _applyChanges: function (dataPointID, changes, event) {\n        var self = this;\n        var options = _.pick(event.data, 'context', 'doNotSetDirty', 'notifyChange', 'viewType', 'allowWarning');\n        return this.model.notifyChanges(dataPointID, changes, options)\n            .then(function (result) {\n                if (event.data.force_save) {\n                    return self.model.save(dataPointID).then(function () {\n                        return self._confirmSave(dataPointID);\n                    }).guardedCatch(function () {\n                        return self._rejectSave(dataPointID);\n                    });\n                } else if (options.notifyChange !== false) {\n                    return self._confirmChange(dataPointID, result, event);\n                }\n            });\n    },\n    /**\n     * This method will be called whenever a field value has changed (and has\n     * been confirmed by the model).\n     *\n     * @abstract\n     * @param {string} id basicModel Id for the changed record\n     * @param {string[]} fields the fields (names) that have been changed\n     * @param {OdooEvent} event the event that triggered the change\n     * @returns {Promise}\n     */\n    _confirmChange: function (id, fields, event) {\n        return Promise.resolve();\n    },\n    /**\n     * This method will be called whenever a save has been triggered by a change\n     * in some controlled field value.  For example, when a priority widget is\n     * being changed in a readonly form.\n     *\n     * @see _onFieldChanged\n     * @abstract\n     * @param {string} id The basicModel ID for the saved record\n     * @returns {Promise}\n     */\n    _confirmSave: function (id) {\n        return Promise.resolve();\n    },\n    /**\n     * This method will be called whenever a save has been triggered by a change\n     * and has failed. For example, when a statusbar button is clicked in a\n     * readonly form view.\n     *\n     * @abstract\n     * @private\n     * @param {string} id The basicModel ID for the saved record\n     * @returns {Deferred}\n     */\n    _rejectSave: function (id) {\n        return Promise.resolve();\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * This is the main job of the FMM: deciding what to do when a controlled\n     * field changes.  Most of the time, it notifies the model that a change\n     * just occurred, then confirm the change.\n     *\n     * @param {OdooEvent} event\n     */\n    _onFieldChanged: function (event) {\n        // in case of field changed in relational record (e.g. in the form view\n        // of a one2many subrecord), the field_changed event must be stopped as\n        // soon as is it handled by a field_manager (i.e. the one of the\n        // subrecord's form view), otherwise it bubbles up to the main form view\n        // but its model doesn't have any data related to the given dataPointID\n        event.stopPropagation();\n        return this._applyChanges(event.data.dataPointID, event.data.changes, event)\n            .then(event.data.onSuccess || function () {})\n            .guardedCatch(event.data.onFailure || function () {});\n    },\n    /**\n     * Some widgets need to trigger a reload of their data.  For example, a\n     * one2many with a pager needs to be able to fetch the next page.  To do\n     * that, it can trigger a load event. This will then ask the model to\n     * actually reload the data, then call the on_success callback.\n     *\n     * @param {OdooEvent} event\n     * @param {number} [event.data.limit]\n     * @param {number} [event.data.offset]\n     * @param {function} [event.data.on_success] callback\n     */\n    _onLoad: function (event) {\n        var self = this;\n        event.stopPropagation(); // prevent other field managers from handling this request\n        var data = event.data;\n        if (!data.on_success) { return; }\n        var params = {};\n        if ('limit' in data) {\n            params.limit = data.limit;\n        }\n        if ('offset' in data) {\n            params.offset = data.offset;\n        }\n        this.mutex.exec(function () {\n            return self.model.reload(data.id, params).then(function (db_id) {\n                data.on_success(self.model.get(db_id));\n            });\n        });\n    },\n    /**\n     * @private\n     * @param {OdooEvent} ev\n     * @param {function} ev.data.action the function to execute in the mutex\n     */\n    _onMutexify: function (ev) {\n        ev.stopPropagation(); // prevent other field managers from handling this request\n        this.mutex.exec(ev.data.action);\n    },\n};\n\nexport default FieldManagerMixin;\n", "/** @odoo-module alias=web.fileUploadMixin **/\n\n/**\n * Mixin to be used in view Controllers to manage uploads and generate progress bars.\n * supported views: kanban, list\n */\n\nimport { csrf_token, _t } from 'web.core';\nimport ProgressBar from 'web.ProgressBar';\nimport ProgressCard from 'web.ProgressCard';\n\nconst ProgressBarMixin = {\n\n    custom_events: {\n        progress_bar_abort: '_onProgressBarAbort',\n    },\n\n    init() {\n        /**\n         * Contains the uploads currently happening, used to attach progress bars.\n         * e.g: {'fileUploadId45': {progressBar, progressCard, ...params}}\n         */\n        this._fileUploads = {};\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * used to use a mocked version of Xhr in the tests.\n     *\n     * @private\n     * @returns {XMLHttpRequest}\n     */\n    _createXhr() {\n        return new window.XMLHttpRequest();\n    },\n    /**\n     * @private\n     */\n    _getFileUploadRenderOptions() {\n        return {\n            predicate: () => true,\n            targetCallback: undefined,\n        };\n    },\n    /**\n     * @private\n     * @returns {string} upload route\n     */\n    _getFileUploadRoute() {\n        return '/web/binary/upload_attachment';\n    },\n    /**\n     * @private\n     * @param {Object} params\n     * @param {Object[]} params.files\n     * @param {XMLHttpRequest} params.xhr\n     */\n    _makeFileUpload(params) {\n        const { files, xhr } = params;\n        const fileUploadId = _.uniqueId('fileUploadId');\n        const formData = new FormData();\n        const formDataKeys = this._makeFileUploadFormDataKeys(Object.assign({ fileUploadId }, params));\n\n        formData.append('csrf_token', csrf_token);\n        for (const key in formDataKeys) {\n            if (formDataKeys[key] !== undefined) {\n                formData.append(key, formDataKeys[key]);\n            }\n        }\n        for (const file of files) {\n            formData.append('ufile', file);\n        }\n\n        return {\n            fileUploadId,\n            xhr,\n            title: files.length === 1\n                ? files[0].name\n                : _.str.sprintf(_t(\"%s Files\"), files.length),\n            type: files.length === 1 ? files[0].type : undefined,\n            formData,\n        };\n    },\n    /**\n     * @private\n     * @param {Object} param0\n     * @param {string} param0.fileUploadId\n     * @returns {Object} the list of the form entries of a file upload.\n     */\n    _makeFileUploadFormDataKeys({ fileUploadId }) {\n        return {\n            callback: fileUploadId,\n        };\n    },\n    /**\n     * @private\n     * @param {integer} fileUploadId\n     */\n    async _removeFileUpload(fileUploadId) {\n        const upload = this._fileUploads[fileUploadId];\n        upload.progressCard && upload.progressCard.destroy();\n        upload.progressBar && upload.progressBar.destroy();\n        delete this._fileUploads[fileUploadId];\n        await this.reload();\n    },\n    /**\n     * @private\n     */\n    async _renderFileUploads() {\n        const { predicate, targetCallback } = this._getFileUploadRenderOptions();\n\n        for (const fileUploadId in this._fileUploads) {\n            const upload = this._fileUploads[fileUploadId];\n            if (!predicate(upload)) {\n                continue;\n            }\n\n            if (!upload.progressBar) {\n                if (!upload.recordId || this.viewType !== 'kanban') {\n                    upload.progressCard = new ProgressCard(this, {\n                        title: upload.title,\n                        type: upload.type,\n                        viewType: this.viewType,\n                    });\n                }\n                upload.progressBar = new ProgressBar(this, {\n                    xhr: upload.xhr,\n                    title: upload.title,\n                    fileUploadId,\n                });\n            }\n\n            let $targetCard;\n            if (upload.progressCard) {\n                await upload.progressCard.prependTo(this.renderer.$el);\n                $targetCard = upload.progressCard.$el;\n            } else if (targetCallback) {\n                $targetCard = targetCallback(upload);\n            }\n            await upload.progressBar.appendTo($targetCard);\n        }\n    },\n    /**\n     * @private\n     * @param {Object[]} files\n     * @param {Object} [params] optional additional data\n     */\n    async _uploadFiles(files, params={}) {\n        if (!files || !files.length) { return; }\n\n        await new Promise(resolve => {\n            const xhr = this._createXhr();\n            xhr.open('POST', this._getFileUploadRoute());\n            const fileUploadData = this._makeFileUpload(Object.assign({ files, xhr }, params));\n            const { fileUploadId, formData } = fileUploadData;\n            this._fileUploads[fileUploadId] = fileUploadData;\n            xhr.upload.addEventListener(\"progress\", ev => {\n                this._updateFileUploadProgress(fileUploadId, ev);\n            });\n            const progressPromise = this._onBeforeUpload();\n            xhr.onload = async () => {\n                await progressPromise;\n                resolve();\n                this._onUploadLoad({ fileUploadId, xhr });\n            };\n            xhr.onerror = async () => {\n                await progressPromise;\n                resolve();\n                this._onUploadError({ fileUploadId, xhr });\n            };\n            xhr.send(formData);\n        });\n    },\n    /**\n     * @private\n     * @param {string} fileUploadId\n     * @param {ProgressEvent} ev\n     */\n    _updateFileUploadProgress(fileUploadId, ev) {\n        const { progressCard, progressBar } = this._fileUploads[fileUploadId];\n        progressCard && progressCard.update(ev.loaded, ev.total);\n        progressBar && progressBar.update(ev.loaded, ev.total);\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Hook to customize the behaviour of _uploadFiles() before an upload is made.\n     *\n     * @private\n     */\n    async _onBeforeUpload() {\n        await this._renderFileUploads();\n    },\n    /**\n     * @private\n     * @param {OdooEvent} ev\n     * @param {integer} ev.data.fileUploadId\n     */\n    _onProgressBarAbort(ev) {\n        this._removeFileUpload(ev.data.fileUploadId);\n    },\n    /**\n     * Hook to customize the behaviour of the xhr.onload of an upload.\n     *\n     * @private\n     * @param {string} param0.fileUploadId\n     */\n    _onUploadLoad({ fileUploadId }) {\n        this._removeFileUpload(fileUploadId);\n    },\n    /**\n     * Hook to customize the behaviour of the xhr.onerror of an upload.\n     *\n     * @private\n     * @param {string} param1.fileUploadId\n     * @param {XMLHttpRequest} param0.xhr\n     */\n    _onUploadError({ fileUploadId, xhr }) {\n        this.displayNotification({ title: xhr.status, message: _.str.sprintf(_t('message: %s'), xhr.reponseText), sticky: true });\n        this._removeFileUpload(fileUploadId);\n    },\n\n};\n\nexport default ProgressBarMixin;\n", "/** @odoo-module alias=web.ProgressBar **/\n\nimport { _t } from 'web.core';\nimport Dialog from 'web.Dialog';\nimport Widget from 'web.Widget';\n\nconst ProgressBar = Widget.extend({\n    template: 'web.FileUploadProgressBar',\n\n    events: {\n        'click .o_upload_cross': '_onClickCross',\n    },\n\n    /**\n     * @override\n     * @param {Object} param1\n     * @param {String} param1.title\n     * @param {String} param1.fileUploadId\n     * @param {XMLHttpRequest} param2.xhr\n     */\n    init(parent, { title, fileUploadId, xhr }) {\n        this._super(...arguments);\n        this.title = title;\n        this.fileUploadId = fileUploadId;\n        this.xhr = xhr;\n    },\n\n    /**\n     * @override\n     * @return {Promise}\n     */\n    start() {\n        this.xhr.onabort = () => this.displayNotification({ message: _t(\"Upload cancelled\") });\n        return this._super(...arguments);\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @param {integer} loaded\n     * @param {integer} total\n     */\n    update(loaded, total) {\n        if (!this.$el) {\n            return;\n        }\n        const percent = Math.round((loaded / total) * 100);\n        this.$('.o_file_upload_progress_bar_value').css(\"width\", percent + \"%\");\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickCross(ev) {\n        ev.stopPropagation();\n        const promptText = _.str.sprintf(_t(\"Do you really want to cancel the upload of %s?\"), _.escape(this.title));\n        Dialog.confirm(this, promptText, {\n            confirm_callback: () => {\n                this.xhr.abort();\n                this.trigger_up('progress_bar_abort', { fileUploadId: this.fileUploadId });\n            }\n        });\n    },\n});\n\nexport default ProgressBar;\n", "/** @odoo-module alias=web.ProgressCard **/\n\nimport { _t } from 'web.core';\nimport Widget from 'web.Widget';\n\nconst ProgressCard = Widget.extend({\n    template: 'web.ProgressCard',\n\n    /**\n     * @override\n     * @param {Object} param1\n     * @param {String} param1.title\n     * @param {String} param1.type file mimetype\n     * @param {String} param1.viewType\n     */\n    init(parent, { title, type, viewType }) {\n        this._super(...arguments);\n        this.title = title;\n        this.type = type;\n        this.viewType = viewType;\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @param {integer} loaded\n     * @param {integer} total\n     */\n    update(loaded, total) {\n        if (!this.$el) {\n            return;\n        }\n        const percent = Math.round((loaded / total) * 100);\n        const $textDivLeft = this.$('.o_file_upload_progress_text_left');\n        const $textDivRight = this.$('.o_file_upload_progress_text_right');\n        if (percent === 100) {\n            $textDivLeft.text(_t('Processing...'));\n        } else {\n            const mbLoaded = Math.round(loaded/1000000);\n            const mbTotal = Math.round(total/1000000);\n            $textDivLeft.text(_.str.sprintf(_t(\"Uploading... (%s%%)\"), percent));\n            $textDivRight.text(_.str.sprintf(_t(\"(%s/%sMb)\"), mbLoaded, mbTotal));\n        }\n    },\n});\n\nexport default ProgressCard;\n", "odoo.define('web.FormController', function (require) {\n\"use strict\";\n\nvar BasicController = require('web.BasicController');\nvar core = require('web.core');\nvar Dialog = require('web.Dialog');\nvar dialogs = require('web.view_dialogs');\n\nvar _t = core._t;\nvar qweb = core.qweb;\n\nvar FormController = BasicController.extend({\n    custom_events: _.extend({}, BasicController.prototype.custom_events, {\n        button_clicked: '_onButtonClicked',\n        edited_list: '_onEditedList',\n        open_one2many_record: '_onOpenOne2ManyRecord',\n        open_record: '_onOpenRecord',\n        toggle_column_order: '_onToggleColumnOrder',\n        focus_control_button: '_onFocusControlButton',\n        form_dialog_discarded: '_onFormDialogDiscarded',\n        quick_edit: '_onQuickEdit',\n    }),\n    /**\n     * Time between multiple clicks (used to detect double click text selection)\n     */\n    multiClickTime: 350,\n    /**\n     * @override\n     *\n     * @param {boolean} params.hasActionMenus\n     * @param {Object} params.toolbarActions\n     */\n    init: function (parent, model, renderer, params) {\n        this._super.apply(this, arguments);\n\n        this.actionButtons = params.actionButtons;\n        this.disableAutofocus = params.disableAutofocus;\n        this.footerToButtons = params.footerToButtons;\n        this.defaultButtons = params.defaultButtons;\n        this.hasActionMenus = params.hasActionMenus;\n        this.toolbarActions = params.toolbarActions || {};\n        // Quick edit is delayed by `multiClickTime` time. If a subsequent click\n        // happens within this time, the quick edit is aborted.\n        this.quickEditTimeout = undefined;\n    },\n    /**\n     * Called each time the form view is attached into the DOM\n     *\n     * @todo convert to new style\n     */\n    on_attach_callback: function () {\n        this._super.apply(this, arguments);\n        this.autofocus();\n    },\n    /**\n     * This hook is called when a form view is restored (by clicking on the\n     * breadcrumbs). In general, we force mode back to readonly, because\n     * whenever we leave a form view by stacking another action on the top of\n     * it, it is saved, and should no longer be in edit mode. However, there is\n     * a special case for new records for which we still want to be in 'edit'\n     * as no record has been created (changes have been discarded before\n     * leaving).\n     *\n     * @override\n     * @param {boolean} [shouldReload]\n     */\n    willRestore: function (shouldReload) {\n        this.mode = this.model.isNew(this.handle) ? 'edit' : 'readonly';\n        if (shouldReload) {\n            return this._setMode(this.mode);\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Calls autofocus on the renderer\n     */\n    autofocus: function () {\n        if (!this.disableAutofocus) {\n            var isControlActivted = this.renderer.autofocus();\n            if (!isControlActivted) {\n                // this can happen in read mode if there are no buttons with\n                // btn-primary class\n                if (this.$buttons && this.mode === 'readonly') {\n                    return this.$buttons.find('.o_form_button_edit').focus();\n                }\n            }\n        }\n    },\n    /**\n     * @override\n     * @param {string} [recordID] - default to main recordID\n     * @returns {Promise<boolean>}\n     *          resolved if can be discarded, a boolean value is given to tells\n     *          if there is something to discard or not\n     *          rejected otherwise\n     */\n    canBeDiscarded: function (recordId) {\n        if (recordId !== this.handle && this.isDirty(recordId)) {\n            // Embedded list views can ask to discard their changes when we\n            // click in the webclient. If a field in the list is invalid, it\n            // stay dirty.\n            // When these conditions are met we don't want to discard.\n            return Promise.reject();\n        } else {\n            return Promise.resolve(true);\n        }\n    },\n    /**\n     * This method switches the form view in edit mode, with a new record.\n     *\n     * @todo make record creation a basic controller feature\n     * @param {string} [parentID] if given, the parentID will be used as parent\n     *                            for the new record.\n     * @param {Object} [additionalContext]\n     * @returns {Promise}\n     */\n    createRecord: async function (parentID, additionalContext) {\n        const record = this.model.get(this.handle, { raw: true });\n        const handle = await this.model.load({\n            context: record.getContext({ additionalContext: additionalContext}),\n            fields: record.fields,\n            fieldsInfo: record.fieldsInfo,\n            modelName: this.modelName,\n            parentID: parentID,\n            res_ids: record.res_ids,\n            type: 'record',\n            viewType: 'form',\n        });\n        this.handle = handle;\n        this._updateControlPanel();\n        return this._setMode('edit');\n    },\n    /**\n     * Returns the current res_id, wrapped in a list. This is only used by the\n     * action menus (and the debugmanager)\n     *\n     * @override\n     *\n     * @returns {number[]} either [current res_id] or []\n     */\n    getSelectedIds: function () {\n        var env = this.model.get(this.handle, {env: true});\n        return env.currentId ? [env.currentId] : [];\n    },\n    /**\n     * @override method from AbstractController\n     * @returns {string}\n     */\n    getTitle: function () {\n        return this.model.getName(this.handle);\n    },\n    /**\n     * Add the current ID to the state pushed in the url.\n     *\n     * @override\n     */\n    getState: function () {\n        const state = this._super.apply(this, arguments);\n        const env = this.model.get(this.handle, {env: true});\n        state.id = env.currentId;\n        return state;\n    },\n    /**\n     * Render buttons for the control panel.  The form view can be rendered in\n     * a dialog, and in that case, if we have buttons defined in the footer, we\n     * have to use them instead of the standard buttons.\n     *\n     * @override method from AbstractController\n     * @param {jQuery} [$node]\n     */\n    renderButtons: function ($node) {\n        var $footer = this.footerToButtons ? this.renderer.$el && this.renderer.$('footer') : null;\n        var mustRenderFooterButtons = $footer && $footer.length;\n        if ((this.defaultButtons && !this.$buttons) || mustRenderFooterButtons) {\n            this.$buttons = $('<div/>');\n            if (mustRenderFooterButtons) {\n                this.$buttons.append($footer);\n            } else {\n                this.$buttons.append(qweb.render(\"FormView.buttons\", {widget: this}));\n                this.$buttons.on('click', '.o_form_button_edit', this._onEdit.bind(this));\n                this.$buttons.on('click', '.o_form_button_create', this._onCreate.bind(this));\n                this.$buttons.on('click', '.o_form_button_save', this._onSave.bind(this));\n                this.$buttons.on('click', '.o_form_button_cancel', this._onDiscard.bind(this));\n                this._assignSaveCancelKeyboardBehavior(this.$buttons.find('.o_form_buttons_edit'));\n                this.$buttons.find('.o_form_buttons_edit').tooltip({\n                    delay: {show: 200, hide:0},\n                    title: function(){\n                        return qweb.render('SaveCancelButton.tooltip');\n                    },\n                    trigger: 'manual',\n                });\n            }\n        }\n        if (this.$buttons && $node) {\n            this.$buttons.appendTo($node);\n        }\n    },\n    /**\n     * The form view has to prevent a click on the pager if the form is dirty\n     *\n     * @override method from BasicController\n     * @param {jQueryElement} $node\n     * @param {Object} options\n     * @returns {Promise}\n     */\n    _getPagingInfo: function () {\n        // Only display the pager if we are not on a new record.\n        if (this.model.isNew(this.handle)) {\n            return null;\n        }\n        return Object.assign(this._super(...arguments), {\n            validate: this.saveChanges.bind(this),\n        });\n    },\n    /**\n     * @override\n     * @private\n     **/\n    _getActionMenuItems: function (state) {\n        if (!this.hasActionMenus || this.mode === 'edit') {\n            return null;\n        }\n        const props = this._super(...arguments);\n        const activeField = this.model.getActiveField(state);\n        const otherActionItems = [];\n        if (this.archiveEnabled && activeField in state.data) {\n            if (state.data[activeField]) {\n                otherActionItems.push({\n                    description: _t(\"Archive\"),\n                    callback: () => {\n                        Dialog.confirm(this, _t(\"Are you sure that you want to archive this record?\"), {\n                            confirm_callback: () => this._toggleArchiveState(true),\n                        });\n                    },\n                });\n            } else {\n                otherActionItems.push({\n                    description: _t(\"Unarchive\"),\n                    callback: () => this._toggleArchiveState(false),\n                });\n            }\n        }\n        if (this.activeActions.create && this.activeActions.duplicate) {\n            otherActionItems.push({\n                description: _t(\"Duplicate\"),\n                callback: () => this._onDuplicateRecord(this),\n            });\n        }\n        if (this.activeActions.delete) {\n            otherActionItems.push({\n                description: _t(\"Delete\"),\n                callback: () => this._onDeleteRecord(this),\n            });\n        }\n        return Object.assign(props, {\n            items: Object.assign(this.toolbarActions, { other: otherActionItems }),\n        });\n    },\n    /**\n     * Show a warning message if the user modified a translated field.  For each\n     * field, the notification provides a link to edit the field's translations.\n     *\n     * @override\n     */\n    saveRecord: async function () {\n        const changedFields = await this._super(...arguments);\n        // the title could have been changed\n        this._updateControlPanel();\n\n        if (_t.database.multi_lang && changedFields.length) {\n            // need to make sure changed fields that should be translated\n            // are displayed with an alert\n            var fields = this.renderer.state.fields;\n            var data = this.renderer.state.data;\n            var alertFields = {};\n            for (var k = 0; k < changedFields.length; k++) {\n                var field = fields[changedFields[k]];\n                var fieldData = data[changedFields[k]];\n                if (field.translate && fieldData && fieldData !== '<p><br></p>') {\n                    alertFields[changedFields[k]] = field;\n                }\n            }\n            if (!_.isEmpty(alertFields)) {\n                this.renderer.updateAlertFields(alertFields);\n            }\n        }\n        return changedFields;\n    },\n    /**\n     * Overrides to force the viewType to 'form', so that we ensure that the\n     * correct fields are reloaded (this is only useful for one2many form views).\n     *\n     * @override\n     */\n    update: async function (params, options) {\n        if ('currentId' in params && !params.currentId) {\n            this.mode = 'edit'; // if there is no record, we are in 'edit' mode\n        }\n        params = _.extend({viewType: 'form', mode: this.mode}, params);\n        await this._super(params, options);\n        this.autofocus();\n    },\n    /**\n     * @override\n     */\n    updateButtons: function () {\n        if (!this.$buttons) {\n            return;\n        }\n        if (this.footerToButtons) {\n            var $footer = this.renderer.$el && this.renderer.$('footer');\n            if ($footer && $footer.length) {\n                this.$buttons.empty().append($footer);\n            }\n        }\n        var edit_mode = (this.mode === 'edit');\n        this.$buttons.find('.o_form_buttons_edit')\n            .toggleClass('o_hidden', !edit_mode);\n        this.$buttons.find('.o_form_buttons_view')\n            .toggleClass('o_hidden', edit_mode);\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     */\n    _applyChanges: async function () {\n        const result = await this._super.apply(this, arguments);\n        core.bus.trigger('DOM_updated');\n        return result;\n    },\n    /**\n     * Assign on the buttons save and discard additionnal behavior to facilitate\n     * the work of the users doing input only using the keyboard\n     *\n     * @param {jQueryElement} $saveCancelButtonContainer  The div containing the\n     * save and cancel buttons\n     * @private\n     */\n    _assignSaveCancelKeyboardBehavior: function ($saveCancelButtonContainer) {\n        var self = this;\n        $saveCancelButtonContainer.children().on('keydown', function (e) {\n            switch(e.which) {\n                case $.ui.keyCode.ENTER:\n                    e.preventDefault();\n                    self.saveRecord();\n                    break;\n                case $.ui.keyCode.ESCAPE:\n                    e.preventDefault();\n                    self._discardChanges();\n                    break;\n                case $.ui.keyCode.TAB:\n                    if (!e.shiftKey && e.target.classList.contains('btn-primary')) {\n                        $saveCancelButtonContainer.tooltip('show');\n                        e.preventDefault();\n                    }\n                    break;\n            }\n        });\n    },\n    /**\n     * When a save operation has been confirmed from the model, this method is\n     * called.\n     *\n     * @private\n     * @override method from field manager mixin\n     * @param {string} id - id of the previously changed record\n     * @returns {Promise}\n     */\n    _confirmSave: function (id) {\n        if (id === this.handle) {\n            if (this.mode === 'readonly') {\n                return this.reload();\n            } else {\n                return this._setMode('readonly');\n            }\n        } else {\n            // A subrecord has changed, so update the corresponding relational field\n            // i.e. the one whose value is a record with the given id or a list\n            // having a record with the given id in its data\n            var record = this.model.get(this.handle);\n\n            // Callback function which returns true\n            // if a value recursively contains a record with the given id.\n            // This will be used to determine the list of fields to reload.\n            var containsChangedRecord = function (value) {\n                return _.isObject(value) &&\n                    (value.id === id || _.find(value.data, containsChangedRecord));\n            };\n\n            var changedFields = _.findKey(record.data, containsChangedRecord);\n            return this.renderer.confirmChange(record, record.id, [changedFields]);\n        }\n    },\n    /**\n     * Override to disable buttons in the renderer.\n     *\n     * @override\n     * @private\n     */\n    _disableButtons: function () {\n        this._super.apply(this, arguments);\n        this.renderer.disableButtons();\n    },\n    /**\n     * Override to enable buttons in the renderer.\n     *\n     * @override\n     * @private\n     */\n    _enableButtons: function () {\n        this._super.apply(this, arguments);\n        this.renderer.enableButtons();\n    },\n    /**\n     * Hook method, called when record(s) has been deleted.\n     *\n     * @override\n     */\n    _onDeletedRecords: function () {\n        var state = this.model.get(this.handle, {raw: true});\n        if (!state.res_ids.length) {\n            this.trigger_up('history_back');\n        } else {\n            this._super.apply(this, arguments);\n        }\n    },\n    /**\n     * Overrides to reload the form when saving failed in readonly (e.g. after\n     * a change on a widget like priority or statusbar).\n     *\n     * @override\n     * @private\n     */\n    _rejectSave: function () {\n        if (this.mode === 'readonly') {\n            return this.reload();\n        }\n        return this._super.apply(this, arguments);\n    },\n    /**\n     * @private\n     * @returns {Promise}\n     */\n    _setEditMode: function () {\n        this._disableButtons();\n        // wait for potential pending changes to be saved (done with widgets\n        // allowing to edit in readonly)\n        return this.mutex.getUnlockedDef()\n            .then(this._setMode.bind(this, 'edit'))\n            .then(this._enableButtons.bind(this))\n            .guardedCatch(this._enableButtons.bind(this));\n    },\n    /**\n     * Calls unfreezeOrder when changing the mode.\n     * Also, when there is a change of mode, the tracking of last activated\n     * field is reset, so that the following field activation process starts\n     * with the 1st field.\n     *\n     * @override\n     */\n    _setMode: function (mode, recordID) {\n        if ((recordID || this.handle) === this.handle) {\n            this.model.unfreezeOrder(this.handle);\n        }\n        if (this.mode !== mode) {\n            this.renderer.resetLastActivatedField();\n        }\n        return this._super.apply(this, arguments);\n    },\n    /**\n     * @override\n     */\n    _shouldBounceOnClick(element) {\n        return this.mode === 'readonly' &&\n            !!element.closest('.oe_title, .o_inner_group') &&\n            this.quickEditTimeout === undefined;\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Save the record when we are about to leave Odoo.\n     *\n     * @override\n     */\n    _onBeforeUnload: function () {\n        this._urgentSave(this.handle);\n    },\n    /**\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onButtonClicked: function (ev) {\n        // stop the event's propagation as a form controller might have other\n        // form controllers in its descendants (e.g. in a FormViewDialog)\n        ev.stopPropagation();\n        var self = this;\n        var def;\n\n        this._disableButtons();\n\n        function saveAndExecuteAction () {\n            return self.saveRecord(self.handle, {\n                stayInEdit: true,\n            }).then(function () {\n                // we need to reget the record to make sure we have changes made\n                // by the basic model, such as the new res_id, if the record is\n                // new.\n                var record = self.model.get(ev.data.record.id);\n                return self._callButtonAction(attrs, record);\n            });\n        }\n        var attrs = ev.data.attrs;\n        if (attrs.confirm) {\n            def = new Promise(function (resolve, reject) {\n                Dialog.confirm(self, attrs.confirm, {\n                    confirm_callback: saveAndExecuteAction,\n                }).on(\"closed\", null, resolve);\n            });\n        } else if (attrs.special === 'cancel') {\n            def = this._callButtonAction(attrs, ev.data.record);\n        } else if (!attrs.special || attrs.special === 'save') {\n            // save the record but don't switch to readonly mode\n            def = saveAndExecuteAction();\n        } else {\n            console.warn('Unhandled button event', ev);\n            return;\n        }\n\n        // Kind of hack for FormViewDialog: button on footer should trigger the dialog closing\n        // if the `close` attribute is set\n        def.then(function () {\n            self._enableButtons();\n            if (attrs.close) {\n                self.trigger_up('close_dialog');\n            }\n        }).guardedCatch(this._enableButtons.bind(this));\n    },\n    /**\n     * Called when the user wants to create a new record -> @see createRecord\n     *\n     * @private\n     */\n    _onCreate: function () {\n        this.createRecord();\n    },\n    /**\n     * Deletes the current record\n     *\n     * @private\n     */\n    _onDeleteRecord: function () {\n        this._deleteRecords([this.handle]);\n    },\n    /**\n     * Called when the user wants to discard the changes made to the current\n     * record -> @see discardChanges\n     *\n     * @private\n     */\n    _onDiscard: function () {\n        this._disableButtons();\n        this._discardChanges()\n            .then(this._enableButtons.bind(this))\n            .guardedCatch(this._enableButtons.bind(this));\n    },\n    /**\n     * Called when the user clicks on 'Duplicate Record' in the action menus\n     *\n     * @private\n     */\n    _onDuplicateRecord: async function () {\n        const handle = await this.model.duplicateRecord(this.handle);\n        this.handle = handle;\n        this._updateControlPanel();\n        this._setMode('edit');\n    },\n    /**\n     * Called when the user wants to edit the current record -> @see _setMode\n     *\n     */\n    _onEdit: function () {\n        this._setEditMode();\n    },\n    /**\n     * This method is called when someone tries to freeze the order, most likely\n     * in a x2many list view\n     *\n     * @private\n     * @param {OdooEvent} ev\n     * @param {integer} ev.id of the list to freeze while editing a line\n     */\n    _onEditedList: function (ev) {\n        ev.stopPropagation();\n        if (ev.data.id) {\n            this.model.save(ev.data.id, {savePoint: true});\n        }\n        this.model.freezeOrder(ev.data.id);\n    },\n    /**\n     * Set the focus on the first primary button of the controller (likely Edit)\n     *\n     * @private\n     * @param {OdooEvent} event\n     */\n    _onFocusControlButton:function(e) {\n        if (this.$buttons) {\n            e.stopPropagation();\n            this.$buttons.find('.btn-primary:visible:first()').focus();\n        }\n    },\n    /**\n     * Reset the focus on the control that openned a Dialog after it was closed\n     *\n     * @private\n     * @param {OdooEvent} event\n     */\n    _onFormDialogDiscarded: function(ev) {\n        ev.stopPropagation();\n        var isFocused = this.renderer.focusLastActivatedWidget();\n        if (ev.data.callback) {\n            ev.data.callback(_.str.toBool(isFocused));\n        }\n    },\n    /**\n     * Opens a one2many record (potentially new) in a dialog. This handler is\n     * o2m specific as in this case, the changes done on the related record\n     * shouldn't be saved in DB when the user clicks on 'Save' in the dialog,\n     * but later on when he clicks on 'Save' in the main form view. For this to\n     * work correctly, the main model and the local id of the opened record must\n     * be given to the dialog, which will complete the viewInfo of the record\n     * with the one of the form view.\n     *\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onOpenOne2ManyRecord: async function (ev) {\n        ev.stopPropagation();\n        var data = ev.data;\n        var record;\n        if (data.id) {\n            record = this.model.get(data.id, {raw: true});\n        }\n\n        // Sync with the mutex to wait for potential onchanges\n        await this.model.mutex.getUnlockedDef();\n\n        new dialogs.FormViewDialog(this, {\n            context: data.context,\n            domain: data.domain,\n            fields_view: data.fields_view,\n            model: this.model,\n            on_saved: data.on_saved,\n            on_remove: data.on_remove,\n            parentID: data.parentID,\n            readonly: data.readonly,\n            editable: data.editable,\n            deletable: record ? data.deletable : false,\n            disable_multiple_selection: data.disable_multiple_selection,\n            recordID: record && record.id,\n            res_id: record && record.res_id,\n            res_model: data.field.relation,\n            shouldSaveLocally: true,\n            title: (record ? _t(\"Open: \") : _t(\"Create \")) + (ev.target.string || data.field.string),\n        }).open();\n    },\n    /**\n     * Open an existing record in a form view dialog\n     *\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onOpenRecord: function (ev) {\n        ev.stopPropagation();\n        var self = this;\n        var record = this.model.get(ev.data.id, {raw: true});\n        new dialogs.FormViewDialog(self, {\n            context: ev.data.context,\n            fields_view: ev.data.fields_view,\n            on_saved: ev.data.on_saved,\n            on_remove: ev.data.on_remove,\n            readonly: ev.data.readonly,\n            deletable: ev.data.deletable,\n            editable: ev.data.editable,\n            res_id: record.res_id,\n            res_model: record.model,\n            title: _t(\"Open: \") + ev.data.string,\n        }).open();\n    },\n    /**\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onQuickEdit: function (ev) {\n        ev.stopPropagation();\n        clearTimeout(this.quickEditTimeout);\n        if (this.activeActions.edit && !window.getSelection().toString()) {\n            const quickEdit = async () => {\n                if (!this.isDestroyed()) {\n                    await this._setEditMode();\n                    this.renderer.quickEdit(ev.data);\n                }\n                this.quickEditTimeout = undefined;\n            };\n            if (this.multiClickTime > 0) {\n                this.quickEditTimeout = setTimeout(quickEdit, this.multiClickTime);\n            } else {\n                quickEdit();\n            }\n        }\n    },\n    /**\n     * Called when the user wants to save the current record -> @see saveRecord\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onSave: function (ev) {\n        ev.stopPropagation(); // Prevent x2m lines to be auto-saved\n        this._disableButtons();\n        this.saveRecord().then(this._enableButtons.bind(this)).guardedCatch(this._enableButtons.bind(this));\n    },\n    /**\n     * This method is called when someone tries to sort a column, most likely\n     * in a x2many list view\n     *\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onToggleColumnOrder: function (ev) {\n        ev.stopPropagation();\n        var self = this;\n        this.model.setSort(ev.data.id, ev.data.name).then(function () {\n            var field = ev.data.field;\n            var state = self.model.get(self.handle);\n            self.renderer.confirmChange(state, state.id, [field]);\n        });\n    },\n    /**\n     * Called when clicking on 'Archive' or 'Unarchive' in the action menus.\n     *\n     * @private\n     * @param {boolean} archive\n     */\n    _toggleArchiveState: function (archive) {\n        const resIds = this.model.localIdsToResIds([this.handle]);\n        this._archive(resIds, archive);\n    },\n});\n\nreturn FormController;\n\n});\n", "odoo.define('web.FormRenderer', function (require) {\n\"use strict\";\n\nvar BasicRenderer = require('web.BasicRenderer');\nvar config = require('web.config');\nvar core = require('web.core');\nvar dom = require('web.dom');\nvar viewUtils = require('web.viewUtils');\n\nvar _t = core._t;\nvar qweb = core.qweb;\n\nconst scrollUtils = require(\"@web/core/utils/scrolling\");\n// symbol used as key to set the <field> node id on its widget\nconst symbol = Symbol('form');\n\nvar FormRenderer = BasicRenderer.extend({\n    className: \"o_form_view\",\n    events: _.extend({}, BasicRenderer.prototype.events, {\n        'click .o_notification_box .oe_field_translate': '_onTranslate',\n        'click .o_notification_box .close': '_onTranslateNotificationClose',\n        'shown.bs.tab a[data-toggle=\"tab\"]': '_onNotebookTabChanged',\n        'click .o_form_label': '_onFieldLabelClicked',\n    }),\n    custom_events: _.extend({}, BasicRenderer.prototype.custom_events, {\n        'navigation_move':'_onNavigationMove',\n        'activate_next_widget' : '_onActivateNextWidget',\n        'quick_edit': '_onQuickEdit',\n    }),\n    // default col attributes for the rendering of groups\n    INNER_GROUP_COL: 2,\n    OUTER_GROUP_COL: 2,\n    quickEditExclusion: [\n        '.o_list_view tbody',\n        '.oe_button_box',\n        '.oe_subtotal_footer',\n    ],\n\n    /**\n     * @override\n     * @param {Object} params.fieldIdsToNames maps <field> node ids to field names\n     *   (useful when there are several occurrences of the same field in the arch)\n     */\n    init: function (parent, state, params) {\n        this._super.apply(this, arguments);\n        this.fieldIdsToNames = params.fieldIdsToNames;\n        this.idsForLabels = {};\n        this.lastActivatedFieldIndex = -1;\n        this.alertFields = {};\n        this.labelsToPostProcess = [];\n        // The form renderer doesn't render invsible fields (invisible=\"1\") by\n        // default, to speed up the rendering. However, we sometimes have to\n        // display them (e.g. in Studio, in \"show invisible\" mode). This flag\n        // allows to disable this optimization.\n        this.renderInvisible = false;\n        // Keeps track of buttons that are disabled momentarily and need to be renabled.\n        // Needed to compare with buttons that have to stay disabled all the time.\n        this.manuallyDisabledButtons = new Set();\n    },\n    /**\n     * @override\n     */\n    start: function () {\n        this._applyFormSizeClass();\n        return this._super.apply(this, arguments);\n    },\n    /**\n     * Called each time the form view is attached into the DOM\n     */\n    on_attach_callback: function () {\n        this._super.apply(this, arguments);\n        core.bus.on(\"SCROLLER:ANCHOR_LINK_CLICKED\", this, this._onAnchorLinkClicked);\n    },\n     /**\n     * Called each time the form view is detached into the DOM\n     */\n    on_detach_callback: function () {\n        this._super.apply(this, arguments);\n        core.bus.off(\"SCROLLER:ANCHOR_LINK_CLICKED\", this, this._onAnchorLinkClicked);\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Focuses the field having attribute 'default_focus' set, if any, or the\n     * first focusable field otherwise.\n     * In read mode, delegate which button to give the focus to, to the form_renderer\n     *\n     * @returns {int | undefined} the index of the widget activated else\n     * undefined\n     */\n    autofocus: function () {\n        if (this.mode === 'readonly') {\n            var firstPrimaryFormButton =  this.$el.find('button.btn-primary:enabled:visible:first()');\n            if (firstPrimaryFormButton.length > 0) {\n                return firstPrimaryFormButton.focus();\n            } else {\n                return;\n            }\n        }\n        var focusWidget = this.defaultFocusField;\n        if (!focusWidget || !focusWidget.isFocusable()) {\n            var widgets = this.allFieldWidgets[this.state.id];\n            for (var i = 0; i < (widgets ? widgets.length : 0); i++) {\n                var widget = widgets[i];\n                if (widget.isFocusable()) {\n                    focusWidget = widget;\n                    break;\n                }\n            }\n        }\n        if (focusWidget) {\n            return focusWidget.activate({noselect: true, noAutomaticCreate: true});\n        }\n    },\n    /**\n     * Extend the method so that labels also receive the 'o_field_invalid' class\n     * if necessary.\n     *\n     * @override\n     * @see BasicRenderer.canBeSaved\n     * @param {string} recordID\n     * @returns {string[]}\n     */\n    canBeSaved: function () {\n        var fieldNames = this._super.apply(this, arguments);\n\n        var $labels = this.$('label');\n        $labels.removeClass('o_field_invalid');\n\n        const allWidgets = this.allFieldWidgets[this.state.id] || [];\n        const widgets = allWidgets.filter(w => fieldNames.includes(w.name));\n        for (const widget of widgets) {\n            const idForLabel = this.idsForLabels[widget[symbol]];\n            if (idForLabel) {\n                $labels\n                    .filter('[for=' + idForLabel + ']')\n                    .addClass('o_field_invalid');\n            }\n        }\n        return fieldNames;\n    },\n    /*\n     * Updates translation alert fields for the current state and display updated fields\n     *\n     *  @param {Object} alertFields\n     */\n    updateAlertFields: function (alertFields) {\n        if (this.state.res_id) {\n            this.alertFields[this.state.res_id] = _.extend(this.alertFields[this.state.res_id] || {}, alertFields);\n            this.displayTranslationAlert();\n        }\n    },\n    /**\n     * Show a warning message if the user modified a translated field.  For each\n     * field, the notification provides a link to edit the field's translations.\n     */\n    displayTranslationAlert: function () {\n        this.$('.o_notification_box').remove();\n        if (this.alertFields[this.state.res_id]) {\n            var $notification = $(qweb.render('notification-box', {type: 'info'}))\n                .append(qweb.render('translation-alert', {\n                    fields: this.alertFields[this.state.res_id],\n                    lang: _t.database.parameters.name\n                }));\n            if (this.$('.o_form_statusbar').length) {\n                this.$('.o_form_statusbar').after($notification);\n            } else if (this.$('.o_form_sheet_bg').length) {\n                this.$('.o_form_sheet_bg').prepend($notification);\n            } else {\n                this.$el.prepend($notification);\n            }\n        }\n    },\n    /**\n     * @see BasicRenderer.confirmChange\n     *\n     * We need to reapply the idForLabel postprocessing since some widgets may\n     * have recomputed their dom entirely.\n     *\n     * @override\n     */\n    confirmChange: function () {\n        var self = this;\n        return this._super.apply(this, arguments).then(function (resetWidgets) {\n            _.each(resetWidgets, function (widget) {\n                self._setIDForLabel(widget, self.idsForLabels[widget[symbol]]);\n            });\n            if (self.$('.o_field_invalid').length) {\n                self.canBeSaved(self.state.id);\n            }\n            self._postProcessLabels();\n            return resetWidgets;\n        });\n    },\n    /**\n     * Disable statusbar buttons and stat buttons so that they can't be clicked anymore\n     *\n     */\n    disableButtons: function () {\n        const allButtons = this.$el[0].querySelectorAll('.o_statusbar_buttons button, .oe_button_box button');\n        for (const button of allButtons) {\n            if (!button.getAttribute(\"disabled\")) {\n                this.manuallyDisabledButtons.add(button)\n                button.setAttribute(\"disabled\", true)\n            }\n        }\n    },\n    /**\n     * Enable statusbar buttons and stat buttons so they can be clicked again\n     *\n     */\n    enableButtons: function () {\n        const allButtons = this.$el[0].querySelectorAll('.o_statusbar_buttons button, .oe_button_box button');\n        this.manuallyDisabledButtons.forEach((button) => {\n            button.removeAttribute(\"disabled\");\n        });\n        this.manuallyDisabledButtons.clear();\n    },\n    /**\n     * Put the focus on the last activated widget.\n     * This function is used when closing a dialog to give the focus back to the\n     * form that has opened it and ensures that the focus is in the correct\n     * field.\n     */\n    focusLastActivatedWidget: function () {\n        if (this.lastActivatedFieldIndex !== -1) {\n            return this._activateNextFieldWidget(this.state, this.lastActivatedFieldIndex - 1,\n                { noAutomaticCreate: true });\n        }\n        return false;\n    },\n    /**\n     * returns the active tab pages for each notebook\n     *\n     * @todo currently, this method is unused...\n     *\n     * @see setLocalState\n     * @returns {Object} a map from notebook name to the active tab index\n     */\n    getLocalState: function () {\n        const state = {};\n        const sheetBg = this.el.querySelector('.o_form_sheet_bg');\n        if (sheetBg) {\n            state.scrollValue = sheetBg.scrollTop;\n        }\n        for (const notebook of this.el.querySelectorAll(':scope div.o_notebook')) {\n            const name = notebook.dataset.name;\n            const navs = notebook.querySelectorAll(':scope .o_notebook_headers .nav-item > .nav-link');\n            state[name] = Math.max([...navs].findIndex(\n                nav => nav.classList.contains('active')\n            ), 0);\n        }\n        return state;\n    },\n    /**\n     * Quick edits the field we clicked on before the mode switch.\n     *\n     * @param {Object} quickEditInfo\n     * @param {string} quickEditInfo.fieldName\n     * @param {any} quickEditInfo.extraInfo\n     */\n    quickEdit: function (quickEditInfo) {\n        const { fieldName, extraInfo } = quickEditInfo;\n        // We cannot use the field's id because a same field could be defined\n        // twice, one in edit only and the other in read only. Because of this\n        // case, we have to search the field by its name and check if it is focusable.\n        const fieldWidget = this.allFieldWidgets[this.state.id]\n            .find(field => field.name === fieldName && field.isFocusable());\n        if (fieldWidget) {\n            fieldWidget.quickEdit(extraInfo);\n        }\n    },\n    /**\n     * Reset the tracking of the last activated field. The fast entry with\n     * keyboard navigation needs to track the last activated field in order to\n     * set the focus.\n     *\n     * In particular, when there are changes of mode (e.g. edit -> readonly ->\n     * edit), we do not want to auto-set the focus on the previously last\n     * activated field. To avoid this issue, this method should be called\n     * whenever there is a change of mode.\n     */\n    resetLastActivatedField: function () {\n        this.lastActivatedFieldIndex = -1;\n    },\n    /**\n     * Resets state which stores information like scroll position, curently\n     * active page, ...\n     *\n     * @override\n     */\n    resetLocalState() {\n        for (const notebook of this.el.querySelectorAll(':scope div.o_notebook')) {\n            [...notebook.querySelectorAll(':scope .o_notebook_headers .nav-item .nav-link')]\n                .map(nav => nav.classList.remove('active'));\n            [...notebook.querySelectorAll(':scope .tab-content > .tab-pane')]\n                .map(tab => tab.classList.remove('active'));\n        }\n\n    },\n    /**\n     * Restore active tab pages for each notebook. It relies on the implicit fact\n     * that each nav header corresponds to a tab page.\n     *\n     * @param {Object} state the result from a getLocalState call\n     */\n    setLocalState: function (state) {\n        for (const notebook of this.el.querySelectorAll(':scope div.o_notebook')) {\n            if (notebook.closest(\".o_field_widget\")) {\n                continue;\n            }\n            const name = notebook.dataset.name;\n            if (name in state) {\n                const navs = notebook.querySelectorAll(':scope .o_notebook_headers .nav-item');\n                const pages = notebook.querySelectorAll(':scope > .tab-content > .tab-pane');\n                // We can't base the amount on the 'navs' length since some overrides\n                // are adding pageless nav items.\n                const validTabsAmount = pages.length;\n                if (!validTabsAmount) {\n                    continue; // No page defined on the notebook.\n                }\n                let activeIndex = state[name];\n                if (navs[activeIndex].classList.contains('o_invisible_modifier')) {\n                    activeIndex = [...navs].findIndex(\n                        nav => !nav.classList.contains('o_invisible_modifier')\n                    );\n                }\n                if (activeIndex <= 0) {\n                    continue; // No visible tab OR first tab = active tab (no change to make).\n                }\n                for (let i = 0; i < validTabsAmount; i++) {\n                    navs[i].querySelector('.nav-link').classList.toggle('active', activeIndex === i);\n                    pages[i].classList.toggle('active', activeIndex === i);\n                }\n                core.bus.trigger('DOM_updated');\n            }\n        }\n        const sheetBg = this.el.querySelector('.o_form_sheet_bg');\n        if (sheetBg) {\n            sheetBg.scrollTop = state.scrollValue;\n        }\n    },\n    /**\n     * @override method from AbstractRenderer\n     * @param {Object} state a valid state given by the model\n     * @param {Object} params\n     * @param {string} [params.mode] new mode, either 'edit' or 'readonly'\n     * @param {string[]} [params.fieldNames] if given, the renderer will only\n     *   update the fields in this list\n     * @returns {Promise}\n     */\n    updateState: function (state, params) {\n        this._setState(state);\n        this.mode = (params && 'mode' in params) ? params.mode : this.mode;\n\n        // if fieldNames are given, we update the corresponding field widget.\n        // I think this is wrong, and the caller could directly call the\n        // confirmChange method\n        if (params.fieldNames) {\n            // only update the given fields\n            return this.confirmChange(this.state, this.state.id, params.fieldNames);\n        }\n        return this._super.apply(this, arguments);\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Activates the first visible tab from a given list of tab objects. The\n     * first tab having an \"autofocus\" attribute set will be focused in\n     * priority.\n     *\n     * @private\n     * @param {Object[]} tabs\n     */\n    _activateFirstVisibleTab(tabs) {\n        const visibleTabs = tabs.filter(\n            (tab) => !tab.$header.hasClass(\"o_invisible_modifier\")\n        );\n        const autofocusTab = visibleTabs.findIndex(\n            (tab) => tab.node.attrs.autofocus === \"autofocus\"\n        );\n        const tabToFocus = visibleTabs[Math.max(0, autofocusTab)];\n        if (tabToFocus) {\n            tabToFocus.$header.find('.nav-link').addClass('active');\n            tabToFocus.$page.addClass('active');\n        }\n    },\n    /**\n     * @override\n     */\n    _activateNextFieldWidget: function (record, currentIndex) {\n        //if we are the last widget, we should give the focus to the first Primary Button in the form\n        //else do the default behavior\n        if ( (currentIndex + 1) >= (this.allFieldWidgets[record.id] || []).length) {\n            this.trigger_up('focus_control_button');\n            this.lastActivatedFieldIndex = -1;\n        } else {\n            var activatedIndex =  this._super.apply(this, arguments);\n            if (activatedIndex === -1 ) { // no widget have been activated, we should go to the edit/save buttons\n                this.trigger_up('focus_control_button');\n                this.lastActivatedFieldIndex = -1;\n            }\n            else {\n                this.lastActivatedFieldIndex = activatedIndex;\n            }\n        }\n        return this.lastActivatedFieldIndex;\n    },\n    /**\n     * Add a tooltip on a button\n     *\n     * @private\n     * @param {Object} node\n     * @param {jQuery} $button\n     */\n    _addButtonTooltip: function (node, $button) {\n        var self = this;\n        $button.tooltip({\n            title: function () {\n                return qweb.render('WidgetButton.tooltip', {\n                    debug: config.isDebug(),\n                    state: self.state,\n                    node: node,\n                });\n            },\n        });\n    },\n    /**\n     * @private\n     * @param {jQueryElement} $el\n     * @param {Object} node\n     */\n    _addOnClickAction: function ($el, node) {\n        if (node.attrs.special || node.attrs.confirm || node.attrs.type || $el.hasClass('oe_stat_button')) {\n            var self = this;\n            $el.on(\"click\", function () {\n                self.trigger_up('button_clicked', {\n                    attrs: node.attrs,\n                    record: self.state,\n                });\n            });\n        }\n    },\n    _applyFormSizeClass: function () {\n        const formEl = this.$el[0];\n        if (config.device.size_class <= config.device.SIZES.XS) {\n            formEl.classList.add('o_xxs_form_view');\n        } else {\n            formEl.classList.remove('o_xxs_form_view');\n        }\n        if (config.device.size_class === config.device.SIZES.XXL) {\n            formEl.classList.add('o_xxl_form_view');\n        } else {\n            formEl.classList.remove('o_xxl_form_view');\n        }\n    },\n    /**\n     * @private\n     * @param {string} uid a <field> node id\n     * @returns {string}\n     */\n    _getIDForLabel: function (uid) {\n        if (!this.idsForLabels[uid]) {\n            this.idsForLabels[uid] = _.uniqueId('o_field_input_');\n        }\n        return this.idsForLabels[uid];\n    },\n    /**\n     * @override\n     * @private\n     */\n    _getRecord: function (recordId) {\n        return this.state.id === recordId ? this.state : null;\n    },\n    /**\n     * @override\n     * @private\n     */\n    _postProcessField: function (widget, node) {\n        this._super.apply(this, arguments);\n        // set the node id on the widget, as it might be necessary later (tooltips, confirmChange...)\n        widget[symbol] = node.attrs.id;\n        this._setIDForLabel(widget, this._getIDForLabel(node.attrs.id));\n        if (JSON.parse(node.attrs.default_focus || \"0\")) {\n            this.defaultFocusField = widget;\n        }\n    },\n    /**\n     * This function is called once form view is rendered or modifiers are\n     * changed to process labels to add o_form_label_empty.\n     *\n     * @private\n     */\n    _postProcessLabels() {\n        this.labelsToPostProcess.forEach((label) => {\n            label.call();\n        });\n        this.labelsToPostProcess = [];\n    },\n    /**\n     * @private\n     * @param {Object} node\n     * @returns {jQueryElement}\n     */\n    _renderButtonBox: function (node) {\n        var self = this;\n        var $result = $('<' + node.tag + '>', {class: 'o_not_full'});\n\n        // The rendering of buttons may be async (see renderFieldWidget), so we\n        // must wait for the buttons to be ready (and their modifiers to be\n        // applied) before manipulating them, as we check if they are visible or\n        // not. To do so, we extract from this.defs the promises corresponding\n        // to the buttonbox buttons, and wait for them to be resolved.\n        var nextDefIndex = this.defs.length;\n        var buttons = _.map(node.children, function (child) {\n            if (child.tag === 'button') {\n                return self._renderStatButton(child);\n            } else {\n                return self._renderNode(child);\n            }\n        });\n\n        // At this point, each button is an empty div that will be replaced by\n        // the real $el of the button when it is ready (with replaceWith).\n        // However, this only works if the empty div is appended somewhere, so\n        // we here append them into a wrapper, and unwrap them once they have\n        // been replaced.\n        var $tempWrapper = $('<div>');\n        _.each(buttons, function ($button) {\n            $button.appendTo($tempWrapper);\n        });\n        var defs = this.defs.slice(nextDefIndex);\n        Promise.all(defs).then(function () {\n            buttons = $tempWrapper.children();\n            var buttons_partition = _.partition(buttons, function (button) {\n                return $(button).is('.o_invisible_modifier');\n            });\n            var invisible_buttons = buttons_partition[0];\n            var visible_buttons = buttons_partition[1];\n\n            // Get the unfolded buttons according to window size\n            var nb_buttons = self._renderButtonBoxNbButtons();\n            var unfolded_buttons = visible_buttons.slice(0, nb_buttons).concat(invisible_buttons);\n\n            // Get the folded buttons\n            var folded_buttons = visible_buttons.slice(nb_buttons);\n            if (folded_buttons.length === 1) {\n                unfolded_buttons = buttons;\n                folded_buttons = [];\n            }\n\n            // Toggle class to tell if the button box is full (CSS requirement)\n            var full = (visible_buttons.length > nb_buttons);\n            $result.toggleClass('o_full', full).toggleClass('o_not_full', !full);\n\n            // Add the unfolded buttons\n            _.each(unfolded_buttons, function (button) {\n                $(button).appendTo($result);\n            });\n\n            // Add the dropdown with folded buttons if any\n            if (folded_buttons.length) {\n                $result.append(dom.renderButton({\n                    attrs: {\n                        'class': 'oe_stat_button o_button_more dropdown-toggle',\n                        'data-toggle': 'dropdown',\n                    },\n                    text: _t(\"More\"),\n                }));\n\n                var $dropdown = $(\"<div>\", {class: \"dropdown-menu o_dropdown_more\", role: \"menu\"});\n                _.each(folded_buttons, function (button) {\n                    $(button).addClass('dropdown-item').appendTo($dropdown);\n                });\n                $dropdown.appendTo($result);\n            }\n        });\n\n        this._handleAttributes($result, node);\n        this._registerModifiers(node, this.state, $result);\n        return $result;\n    },\n    /**\n    * @private\n    * @returns {integer}\n    */\n    _renderButtonBoxNbButtons: function () {\n        return [2, 2, 2, 4][config.device.size_class] || 7;\n    },\n    /**\n     * Do not render a field widget if it is always invisible.\n     *\n     * @override\n     */\n    _renderFieldWidget(node) {\n        if (!this.renderInvisible && node.attrs.modifiers.invisible === true) {\n            return $();\n        }\n        return this._super(...arguments);\n    },\n    /**\n     * @private\n     * @param {Object} node\n     * @returns {jQueryElement}\n     */\n    _renderGenericTag: function (node) {\n        var $result = $('<' + node.tag + '>', _.omit(node.attrs, 'modifiers'));\n        this._handleAttributes($result, node);\n        this._registerModifiers(node, this.state, $result);\n        $result.append(_.map(node.children, this._renderNode.bind(this)));\n        return $result;\n    },\n    /**\n     * @private\n     * @param {Object} node\n     * @returns {jQueryElement}\n     */\n    _renderHeaderButton: function (node) {\n        var $button = viewUtils.renderButtonFromNode(node);\n\n        // Current API of odoo for rendering buttons is \"if classes are given\n        // use those on top of the 'btn' and 'btn-{size}' classes, otherwise act\n        // as if 'btn-secondary' class was given\". The problem is that, for\n        // header buttons only, we allowed users to only indicate their custom\n        // classes without having to explicitely ask for the 'btn-secondary'\n        // class to be added. We force it so here when no bootstrap btn type\n        // class is found.\n        if ($button.not('.btn-primary, .btn-secondary, .btn-link, .btn-success, .btn-info, .btn-warning, .btn-danger').length) {\n            $button.addClass('btn-secondary');\n        }\n\n        this._addOnClickAction($button, node);\n        this._handleAttributes($button, node);\n        this._registerModifiers(node, this.state, $button);\n\n        // Display tooltip\n        if (config.isDebug() || node.attrs.help) {\n            this._addButtonTooltip(node, $button);\n        }\n        return $button;\n    },\n    /**\n     * @private\n     * @param {Object} node\n     * @returns {jQueryElement}\n     */\n    _renderHeaderButtons: function (node) {\n        var self = this;\n        var buttons = [];\n        _.each(node.children, function (child) {\n            if (child.tag === 'button') {\n                buttons.push(self._renderHeaderButton(child));\n            }\n            if (child.tag === 'widget') {\n                buttons.push(self._renderTagWidget(child));\n            }\n        });\n        return this._renderStatusbarButtons(buttons);\n    },\n    /**\n     * @private\n     * @param {Object} node\n     * @returns {jQueryElement}\n     */\n    _renderInnerGroup: function (node) {\n        var self = this;\n        var $result = $('<table/>', {class: 'o_group o_inner_group'});\n        var $tbody = $('<tbody />').appendTo($result);\n        this._handleAttributes($result, node);\n        this._registerModifiers(node, this.state, $result);\n\n        var col = parseInt(node.attrs.col, 10) || this.INNER_GROUP_COL;\n\n        if (node.attrs.string) {\n            var $sep = $('<tr><td colspan=\"' + col + '\" style=\"width: 100%;\"><div class=\"o_horizontal_separator\">' + node.attrs.string + '</div></td></tr>');\n            $result.append($sep);\n        }\n\n        var rows = [];\n        var $currentRow = $('<tr/>');\n        var currentColspan = 0;\n        node.children.forEach(function (child) {\n            if (child.tag === 'newline') {\n                rows.push($currentRow);\n                $currentRow = $('<tr/>');\n                currentColspan = 0;\n                return;\n            }\n\n            var colspan = parseInt(child.attrs.colspan, 10);\n            var isLabeledField = (child.tag === 'field' && child.attrs.nolabel !== '1');\n            if (!colspan) {\n                if (isLabeledField) {\n                    colspan = 2;\n                } else {\n                    colspan = 1;\n                }\n            }\n            var finalColspan = colspan - (isLabeledField ? 1 : 0);\n            currentColspan += colspan;\n\n            if (currentColspan > col) {\n                rows.push($currentRow);\n                $currentRow = $('<tr/>');\n                currentColspan = colspan;\n            }\n\n            var $tds;\n            if (child.tag === 'field') {\n                $tds = self._renderInnerGroupField(child);\n            } else if (child.tag === 'label') {\n                $tds = self._renderInnerGroupLabel(child);\n            } else {\n                var $td = $('<td/>');\n                var $child = self._renderNode(child);\n                if ($child.hasClass('o_td_label')) { // transfer classname to outer td for css reasons\n                    $td.addClass('o_td_label');\n                    $child.removeClass('o_td_label');\n                }\n                $tds = $td.append($child);\n            }\n            if (finalColspan > 1) {\n                $tds.last().attr('colspan', finalColspan);\n            }\n            $currentRow.append($tds);\n        });\n        rows.push($currentRow);\n\n        _.each(rows, function ($tr) {\n            var nonLabelColSize = 100 / (col - $tr.children('.o_td_label').length);\n            _.each($tr.children(':not(.o_td_label)'), function (el) {\n                var $el = $(el);\n                $el.css('width', ((parseInt($el.attr('colspan'), 10) || 1) * nonLabelColSize) + '%');\n            });\n            $tbody.append($tr);\n        });\n\n        return $result;\n    },\n    /**\n     * @private\n     * @param {Object} node\n     * @returns {jQueryElement}\n     */\n    _renderInnerGroupField: function (node) {\n        var $el = this._renderFieldWidget(node, this.state);\n        var $tds = $('<td/>').append($el);\n\n        if (node.attrs.nolabel !== '1') {\n            var $labelTd = this._renderInnerGroupLabel(node);\n            $tds = $labelTd.add($tds);\n\n            // apply the oe_(edit|read)_only className on the label as well\n            if (/\\boe_edit_only\\b/.test(node.attrs.class)) {\n                $tds.addClass('oe_edit_only');\n            }\n            if (/\\boe_read_only\\b/.test(node.attrs.class)) {\n                $tds.addClass('oe_read_only');\n            }\n        }\n\n        return $tds;\n    },\n    /**\n     * @private\n     * @param {Object} node\n     * @returns {jQueryElement}\n     */\n    _renderInnerGroupLabel: function (node) {\n        return $('<td/>', {class: 'o_td_label'})\n            .append(this._renderTagLabel(node));\n    },\n    /**\n     * Render a node, from the arch of the view. It is a generic method, that\n     * will dispatch on specific other methods.  The rendering of a node is a\n     * jQuery element (or a string), with the correct classes, attrs, and\n     * content.\n     *\n     * For fields, it will return the $el of the field widget. Note that this\n     * method is synchronous, field widgets are instantiated and appended, but\n     * if they are asynchronous, they register their promises in this.defs, and\n     * the _renderView method will properly wait.\n     *\n     * @private\n     * @param {Object} node\n     * @returns {jQueryElement | string}\n     */\n    _renderNode: function (node) {\n        var renderer = this['_renderTag' + _.str.capitalize(node.tag)];\n        if (renderer) {\n            return renderer.call(this, node);\n        }\n        if (node.tag === 'div' && node.attrs.name === 'button_box') {\n            return this._renderButtonBox(node);\n        }\n        if (_.isString(node)) {\n            return node;\n        }\n        return this._renderGenericTag(node);\n    },\n    /**\n     * Renders a 'group' node, which contains 'group' nodes in its children.\n     *\n     * @param {Object} node]\n     * @returns {JQueryElement}\n     */\n    _renderOuterGroup: function (node) {\n        var self = this;\n        var $result = $('<div/>', {class: 'o_group'});\n        var nbCols = parseInt(node.attrs.col, 10) || this.OUTER_GROUP_COL;\n        var colSize = Math.max(1, Math.round(12 / nbCols));\n        if (node.attrs.string) {\n            var $sep = $('<div/>', {class: 'o_horizontal_separator'}).text(node.attrs.string);\n            $result.append($sep);\n        }\n        $result.append(_.map(node.children, function (child) {\n            if (child.tag === 'newline') {\n                return $('<br/>');\n            }\n            var $child = self._renderNode(child);\n            $child.addClass('o_group_col_' + (colSize * (parseInt(child.attrs.colspan, 10) || 1)));\n            return $child;\n        }));\n        this._handleAttributes($result, node);\n        this._registerModifiers(node, this.state, $result);\n        return $result;\n    },\n    /**\n     * @private\n     * @param {Object} node\n     * @returns {jQueryElement}\n     */\n    _renderStatButton: function (node) {\n        var $button = viewUtils.renderButtonFromNode(node, {\n            extraClass: 'oe_stat_button',\n        });\n        $button.append(_.map(node.children, this._renderNode.bind(this)));\n        if (node.attrs.help) {\n            this._addButtonTooltip(node, $button);\n        }\n        this._addOnClickAction($button, node);\n        this._handleAttributes($button, node);\n        this._registerModifiers(node, this.state, $button);\n        return $button;\n    },\n    /**\n     * @private\n     * @param {Array} buttons\n     * @return {jQueryElement}\n     */\n    _renderStatusbarButtons: function (buttons) {\n        var $statusbarButtons = $('<div>', {class: 'o_statusbar_buttons'});\n        buttons.forEach(button => $statusbarButtons.append(button));\n        return $statusbarButtons;\n    },\n    /**\n     * @private\n     * @param {Object} page\n     * @param {string} page_id\n     * @returns {jQueryElement}\n     */\n    _renderTabHeader: function (page, page_id) {\n        var $a = $('<a>', {\n            'data-toggle': 'tab',\n            disable_anchor: 'true',\n            href: '#' + page_id,\n            class: 'nav-link',\n            role: 'tab',\n            text: page.attrs.string,\n        });\n        return $('<li>', {class: 'nav-item'}).append($a);\n    },\n    /**\n     * @private\n     * @param {Object} page\n     * @param {string} page_id\n     * @returns {jQueryElement}\n     */\n    _renderTabPage: function (page, page_id) {\n        var $result = $('<div class=\"tab-pane\" id=\"' + page_id + '\">');\n        $result.append(_.map(page.children, this._renderNode.bind(this)));\n        return $result;\n    },\n    /**\n     * @private\n     * @param {Object} node\n     * @returns {jQueryElement}\n     */\n    _renderTagButton: function (node) {\n        var $button = viewUtils.renderButtonFromNode(node);\n        $button.append(_.map(node.children, this._renderNode.bind(this)));\n        this._addOnClickAction($button, node);\n        this._handleAttributes($button, node);\n        this._registerModifiers(node, this.state, $button);\n\n        // Display tooltip\n        if (config.isDebug() || node.attrs.help) {\n            this._addButtonTooltip(node, $button);\n        }\n\n        return $button;\n    },\n    /**\n     * @private\n     * @param {Object} node\n     * @returns {jQueryElement}\n     */\n    _renderTagField: function (node) {\n        return this._renderFieldWidget(node, this.state);\n    },\n    /**\n     * @private\n     * @param {Object} node\n     * @returns {jQueryElement}\n     */\n    _renderTagForm: function (node) {\n        var $result = $('<div/>');\n        if (node.attrs.class) {\n            $result.addClass(node.attrs.class);\n        }\n        var allNodes = node.children.map(this._renderNode.bind(this));\n        $result.append(allNodes);\n        return $result;\n    },\n    /**\n     * @private\n     * @param {Object} node\n     * @returns {jQueryElement}\n     */\n    _renderTagGroup: function (node) {\n        var isOuterGroup = _.some(node.children, function (child) {\n            return child.tag === 'group';\n        });\n        if (!isOuterGroup) {\n            return this._renderInnerGroup(node);\n        }\n        return this._renderOuterGroup(node);\n    },\n    /**\n     * @private\n     * @param {Object} node\n     * @returns {jQueryElement}\n     */\n    _renderTagHeader: function (node) {\n        var self = this;\n        var $statusbar = $('<div>', {class: 'o_form_statusbar'});\n        $statusbar.append(this._renderHeaderButtons(node));\n        _.each(node.children, function (child) {\n            if (child.tag === 'field') {\n                var $el = self._renderFieldWidget(child, self.state);\n                $statusbar.append($el);\n            }\n        });\n        this._handleAttributes($statusbar, node);\n        this._registerModifiers(node, this.state, $statusbar);\n        return $statusbar;\n    },\n    /**\n     * @private\n     * @param {Object} node\n     * @returns {jQueryElement}\n     */\n    _renderTagLabel: function (node) {\n        if (!this.renderInvisible && node.tag === 'field' &&\n            node.attrs.modifiers.invisible === true) {\n            // skip rendering of invisible fields/labels\n            return $();\n        }\n        var self = this;\n        var text;\n        let fieldName;\n        if (node.tag === 'label') {\n            fieldName = this.fieldIdsToNames[node.attrs.for]; // 'for' references a <field> node id\n        } else {\n            fieldName = node.attrs.name;\n        }\n        if ('string' in node.attrs) { // allow empty string\n            text = node.attrs.string;\n        } else if (fieldName) {\n            text = this.state.fields[fieldName].string;\n        } else {\n            return this._renderGenericTag(node);\n        }\n        var $result = $('<label>', {\n            class: 'o_form_label',\n            for: this._getIDForLabel(node.tag === 'label' ? node.attrs.for : node.attrs.id),\n            text: text,\n        });\n        if (node.tag === 'label') {\n            this._handleAttributes($result, node);\n        }\n        var modifiersOptions;\n        if (fieldName) {\n            modifiersOptions = {\n                callback: function (element, modifiers, record) {\n                    var widgets = self.allFieldWidgets[record.id];\n                    var widget = _.findWhere(widgets, {name: fieldName});\n                    const fieldsInfo = record.fieldsInfo[self.viewType];\n                    if (!widget) {\n                        if (fieldsInfo[fieldName]) {\n                            self.labelsToPostProcess.push(element.callback.bind(self, element, modifiers, record));\n                        }\n                        return;\n                    }\n                    element.$el.toggleClass('o_form_label_empty', !!( // FIXME condition is evaluated twice (label AND widget...)\n                        record.data.id\n                        && (modifiers.readonly || self.mode === 'readonly')\n                        && !widget.isSet()\n                    ));\n                },\n            };\n        }\n        // FIXME if the function is called with a <label/> node, the registered\n        // modifiers will be those on this node. Maybe the desired behavior\n        // would be to merge them with associated field node if any... note:\n        // this worked in 10.0 for \"o_form_label_empty\" reevaluation but not for\n        // \"o_invisible_modifier\" reevaluation on labels...\n        this._registerModifiers(node, this.state, $result, modifiersOptions);\n        return $result;\n    },\n    /**\n     * @private\n     * @param {Object} node\n     * @returns {jQueryElement}\n     */\n    _renderTagNotebook: function (node) {\n        var self = this;\n        var $headers = $('<ul class=\"nav nav-tabs\">');\n        var $pages = $('<div class=\"tab-content\">');\n        // renderedTabs is used to aggregate the generated $headers and $pages\n        // alongside their node, so that their modifiers can be registered once\n        // all tabs have been rendered, to ensure that the first visible tab\n        // is correctly activated\n        var renderedTabs = _.map(node.children, function (child, index) {\n            var pageID = _.uniqueId('notebook_page_');\n            var $header = self._renderTabHeader(child, pageID);\n            var $page = self._renderTabPage(child, pageID);\n            self._handleAttributes($header, child);\n            $headers.append($header);\n            $pages.append($page);\n            return {\n                $header: $header,\n                $page: $page,\n                node: child,\n            };\n        });\n        // register the modifiers for each tab\n        _.each(renderedTabs, function (tab) {\n            self._registerModifiers(tab.node, self.state, tab.$header, {\n                callback: function (element, modifiers) {\n                    // if the active tab is invisible, activate the first visible tab instead\n                    var $link = element.$el.find('.nav-link');\n                    if (modifiers.invisible && $link.hasClass('active')) {\n                        $link.removeClass('active');\n                        tab.$page.removeClass('active');\n                        self.inactiveNotebooks.push(renderedTabs);\n                    }\n                    if (!modifiers.invisible) {\n                        // make first page active if there is only one page to display\n                        var $visibleTabs = $headers.find('li:not(.o_invisible_modifier)');\n                        if ($visibleTabs.length === 1) {\n                            self.inactiveNotebooks.push(renderedTabs);\n                        }\n                    }\n                    // if all pages are invisible then hide notebooks header's ul as well\n                    $headers.toggleClass('o_invisible_modifier', !$headers.find('li:not(.o_invisible_modifier)').length);\n                },\n            });\n        });\n        this._activateFirstVisibleTab(renderedTabs);\n        var $notebookHeaders = $('<div class=\"o_notebook_headers\">').append($headers);\n        var $notebook = $('<div class=\"o_notebook\">').append($notebookHeaders, $pages);\n        $notebook[0].dataset.name = node.attrs.name || '_default_';\n        this._registerModifiers(node, this.state, $notebook);\n        this._handleAttributes($notebook, node);\n        return $notebook;\n    },\n    /**\n     * @private\n     * @param {Object} node\n     * @returns {jQueryElement}\n     */\n    _renderTagSeparator: function (node) {\n        var $separator = $('<div/>').addClass('o_horizontal_separator').text(node.attrs.string);\n        this._handleAttributes($separator, node);\n        this._registerModifiers(node, this.state, $separator);\n        return $separator;\n    },\n    /**\n     * @private\n     * @param {Object} node\n     * @returns {jQueryElement}\n     */\n    _renderTagSheet: function (node) {\n        this.has_sheet = true;\n        var $sheet = $('<div>', {class: 'clearfix position-relative o_form_sheet'});\n        $sheet.append(node.children.map(this._renderNode.bind(this)));\n        return $sheet;\n    },\n    /**\n     * Instantiate custom widgets\n     *\n     * @private\n     * @param {Object} node\n     * @returns {jQueryElement}\n     */\n    _renderTagWidget: function (node) {\n        return this._renderWidget(this.state, node);\n    },\n    /**\n     * Main entry point for the rendering.  From here, we call _renderNode on\n     * the root of the arch, then, when every promise (from the field widgets)\n     * are done, it will resolves itself.\n     *\n     * @private\n     * @override method from BasicRenderer\n     * @returns {Promise}\n     */\n    _renderView: function () {\n        var self = this;\n\n        // render the form and evaluate the modifiers\n        var defs = [];\n        this.defs = defs;\n        this.inactiveNotebooks = [];\n        var $form = this._renderNode(this.arch).addClass(this.className);\n        delete this.defs;\n\n        return Promise.all(defs).then(() => this.__renderView()).then(function () {\n            self._postProcessLabels();\n            self._updateView($form.contents());\n            self.manuallyDisabledButtons.clear();\n            if (self.state.res_id in self.alertFields) {\n                self.displayTranslationAlert();\n            }\n        }).then(function(){\n            if (self.lastActivatedFieldIndex >= 0) {\n                self._activateNextFieldWidget(self.state, self.lastActivatedFieldIndex);\n            }\n        }).guardedCatch(function () {\n            $form.remove();\n        });\n    },\n    /**\n     * Meant to be overridden if asynchronous work needs to be done when\n     * rendering the view. This is called right before attaching the new view\n     * content.\n     * @private\n     * @returns {Promise<any>}\n     */\n    async __renderView() {},\n    /**\n     * This method is overridden to activate the first notebook page if the\n     * current active page is invisible due to modifiers. This is done after\n     * all modifiers are applied on all page elements.\n     *\n     * @override\n     */\n    async _updateAllModifiers() {\n        await this._super(...arguments);\n        for (const tabs of this.inactiveNotebooks) {\n            this._activateFirstVisibleTab(tabs);\n        }\n        this.inactiveNotebooks = [];\n    },\n    /**\n     * Updates the form's $el with new content.\n     *\n     * @private\n     * @see _renderView\n     * @param {JQuery} $newContent\n     */\n    _updateView: function ($newContent) {\n        var self = this;\n\n        // Set the new content of the form view, and toggle classnames\n        this.$el.html($newContent);\n        this.$el.toggleClass('o_form_nosheet', !this.has_sheet);\n        if (this.has_sheet) {\n            this.$el.children().not('.o_FormRenderer_chatterContainer')\n                .wrapAll($('<div/>', {class: 'o_form_sheet_bg', 'data-command-category': \"app\"}));\n        }\n        this.$el.toggleClass('o_form_editable', this.mode === 'edit');\n        this.$el.toggleClass('o_form_readonly', this.mode === 'readonly');\n\n        // Attach the tooltips on the fields' label\n        _.each(this.allFieldWidgets[this.state.id], function (widget) {\n            const idForLabel = self.idsForLabels[widget[symbol]];\n            var $label = idForLabel ? self.$('.o_form_label[for=' + idForLabel + ']') : $();\n            self._addFieldTooltip(widget, $label);\n            if (widget.attrs.widget === 'upgrade_boolean') {\n                // this widget needs a reference to its $label to be correctly\n                // rendered\n                widget.renderWithLabel($label);\n            }\n        });\n    },\n    /**\n     * Sets id attribute of given widget to idForLabel\n     *\n     * @private\n     * @param {AbstractField} widget\n     * @param {idForLabel} string\n     */\n    _setIDForLabel: function (widget, idForLabel) {\n        widget.setIDForLabel(idForLabel);\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onActivateNextWidget: function (ev) {\n        ev.stopPropagation();\n        var index = this.allFieldWidgets[this.state.id].indexOf(ev.data.target);\n        this._activateNextFieldWidget(this.state, index);\n    },\n    /**\n     * Ensure that the pane containing an anchor `element` that has been\n     * targeted by a link will be visible in a notebook.\n     * @param {CustomEvent} ev\n     * @param {object} ev[detail] payload containing the element and the id to look for\n     * \n     */\n    _onAnchorLinkClicked(ev) {\n        // Todo: we might need to search for the element elsewhere to know wich tab to activate\n        // Maybe a t-if rule is hidding the target from the DOM\n        const anchor = ev.detail.element || null;\n        if (!anchor) {\n            return;\n        }\n        function _getNotebookParent() {\n            const notebook = anchor.closest(\".o_notebook\");\n            // If the notebook is containing the element, return the notebook\n            return notebook && notebook.contains(anchor) ? notebook : null;\n        }\n        function _setNotebookPage() {\n            // Simulate a click on the nav link corresponding to the target pane\n            const parentPane = anchor.closest(\".tab-pane\");\n            if (notebook.contains(parentPane) && !parentPane.classList.contains(\".active\")) {\n                const navLink = [...notebook.querySelectorAll(\".nav-link\")].filter((e) =>\n                    e.href.includes(parentPane.id)\n                );\n                navLink[0].click();\n            }\n        }\n        \n        const notebook = _getNotebookParent();\n\n        // If the element is contained in a notebook, the page must be visible\n        if (notebook) {\n            _setNotebookPage();\n            // Prevent the scroll to be handled by the scroller service itself\n            ev.preventDefault();\n            ev.detail.originalEv.preventDefault();\n            scrollUtils.scrollTo(ev.detail.element, { isAnchor: true });\n        }\n    },\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onFieldLabelClicked: function (ev) {\n        const idForLabel = ev.currentTarget.getAttribute('for');\n        const entry = Object.entries(this.idsForLabels)\n            .find(x => x[1] === idForLabel);\n        if (entry) {\n            this.trigger_up('quick_edit', {\n                fieldName: this.fieldIdsToNames[entry[0]],\n                target: ev.currentTarget,\n                extraInfo: {},\n            });\n        }\n    },\n    /**\n     * @override\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onNavigationMove: function (ev) {\n        ev.stopPropagation();\n        // We prevent the default behaviour and stop the propagation of the\n        // originalEvent when the originalEvent is a tab keydown to not let\n        // the browser do it. The action is done by this renderer.\n        if (ev.data.originalEvent && ['next', 'previous'].includes(ev.data.direction)) {\n            ev.data.originalEvent.preventDefault();\n            ev.data.originalEvent.stopPropagation();\n        }\n        var index;\n        let target = ev.data.target || ev.target;\n        if (target.__owl__) {\n            target = target.__owl__.parent; // Owl fields are wrapped by the FieldWrapper\n        }\n        if (ev.data.direction === \"next\") {\n            index = this.allFieldWidgets[this.state.id].indexOf(target);\n            this._activateNextFieldWidget(this.state, index);\n        } else if (ev.data.direction === \"previous\") {\n            index = this.allFieldWidgets[this.state.id].indexOf(target);\n            this._activatePreviousFieldWidget(this.state, index);\n        }\n    },\n    /**\n     * Listen to notebook tab changes and trigger a DOM_updated event such that\n     * widgets in the visible tab can correctly compute their dimensions (e.g.\n     * autoresize on field text)\n     *\n     * @private\n     */\n    _onNotebookTabChanged: function () {\n        core.bus.trigger('DOM_updated');\n    },\n    /**\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onQuickEdit: function (ev) {\n        if (this.mode !== 'readonly' ||\n            this.quickEditExclusion.some(x => ev.data.target.closest(x))\n        ) {\n            ev.stopPropagation();\n        }\n    },\n    /**\n     * open the translation view for the current field\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onTranslate: function (ev) {\n        ev.preventDefault();\n        this.trigger_up('translate', {\n            fieldName: ev.target.name,\n            id: this.state.id,\n            isComingFromTranslationAlert: true,\n        });\n    },\n    /**\n     * remove alert fields of record from alertFields object\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onTranslateNotificationClose: function(ev) {\n        delete this.alertFields[this.state.res_id];\n    },\n});\n\nreturn FormRenderer;\n});\n", "odoo.define('web.FormView', function (require) {\n\"use strict\";\n\nvar BasicView = require('web.BasicView');\nvar Context = require('web.Context');\nvar core = require('web.core');\nvar FormController = require('web.FormController');\nvar FormRenderer = require('web.FormRenderer');\nconst { generateID } = require('web.utils');\n\nvar _lt = core._lt;\n\nvar FormView = BasicView.extend({\n    config: _.extend({}, BasicView.prototype.config, {\n        Renderer: FormRenderer,\n        Controller: FormController,\n    }),\n    display_name: _lt('Form'),\n    icon: 'fa-edit',\n    multi_record: false,\n    withSearchBar: false,\n    searchMenuTypes: [],\n    viewType: 'form',\n    /**\n     * @override\n     */\n    init: function (viewInfo, params) {\n        var hasActionMenus = params.hasActionMenus;\n        this._super.apply(this, arguments);\n\n        var mode = params.mode || (params.currentId ? 'readonly' : 'edit');\n        this.loadParams.type = 'record';\n\n        // this is kind of strange, but the param object is modified by\n        // AbstractView, so we only need to use its hasActionMenus value if it was\n        // not already present in the beginning of this method\n        if (hasActionMenus === undefined) {\n            hasActionMenus = params.hasActionMenus;\n        }\n        this.controllerParams.hasActionMenus = hasActionMenus;\n        this.controllerParams.disableAutofocus = params.disable_autofocus || this.arch.attrs.disable_autofocus;\n        this.controllerParams.toolbarActions = viewInfo.toolbar;\n        this.controllerParams.footerToButtons = params.footerToButtons;\n\n        var defaultButtons = 'default_buttons' in params ? params.default_buttons : true;\n        this.controllerParams.defaultButtons = defaultButtons;\n        this.controllerParams.mode = mode;\n\n        this.rendererParams.mode = mode;\n        this.rendererParams.isFromFormViewDialog = params.isFromFormViewDialog;\n        this.rendererParams.fieldIdsToNames = this.fieldsView.fieldIdsToNames;\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     */\n    getController: function (parent) {\n        return this._loadSubviews(parent).then(this._super.bind(this, parent));\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     */\n    _extractParamsFromAction: function (action) {\n        var params = this._super.apply(this, arguments);\n        var inDialog = action.target === 'new';\n        var inline = action.target === 'inline';\n        var fullscreen = action.target === 'fullscreen';\n        params.withControlPanel = !(inDialog || inline);\n        params.footerToButtons = inDialog;\n        params.hasSearchView = inDialog ? false : params.hasSearchView;\n        params.hasActionMenus = !inDialog && !inline;\n        params.searchMenuTypes = inDialog ? [] : params.searchMenuTypes;\n        if (inDialog || inline || fullscreen) {\n            params.mode = 'edit';\n        } else if (action.context && action.context.form_view_initial_mode) {\n            params.mode = action.context.form_view_initial_mode;\n        }\n        return params;\n    },\n    /**\n     * Loads the subviews for x2many fields when they are not inline\n     *\n     * @private\n     * @param {Widget} parent the parent of the model, if it has to be created\n     * @returns {Promise}\n     */\n    _loadSubviews: function (parent) {\n        var self = this;\n        var defs = [];\n        if (this.loadParams && this.loadParams.fieldsInfo) {\n            var fields = this.loadParams.fields;\n\n            _.each(this.loadParams.fieldsInfo.form, function (attrs, fieldName) {\n                var field = fields[fieldName];\n                if (!field) {\n                    // when a one2many record is opened in a form view, the fields\n                    // of the main one2many view (list or kanban) are added to the\n                    // fieldsInfo of its form view, but those fields aren't in the\n                    // loadParams.fields, as they are not displayed in the view, so\n                    // we can ignore them.\n                    return;\n                }\n                if (field.type !== 'one2many' && field.type !== 'many2many') {\n                    return;\n                }\n\n                if (attrs.Widget.prototype.useSubview && !attrs.__no_fetch && !attrs.views[attrs.mode]) {\n                    var context = {};\n                    var regex = /'([a-z]*_view_ref)' *: *'(.*?)'/g;\n                    var matches;\n                    while (matches = regex.exec(attrs.context)) {\n                        context[matches[1]] = matches[2];\n                    }\n\n                    // Remove *_view_ref coming from parent view\n                    var refinedContext = _.pick(self.loadParams.context, function (value, key) {\n                        return key.indexOf('_view_ref') === -1;\n                    });\n                    // Specify the main model to prevent access rights defined in the context\n                    // (e.g. create: 0) to apply to subviews. We use here the same logic as\n                    // the one applied by the server for inline views.\n                    refinedContext.base_model_name = self.controllerParams.modelName;\n                    defs.push(parent.loadViews(\n                            field.relation,\n                            new Context(context, self.userContext, refinedContext).eval(),\n                            [[null, attrs.mode === 'tree' ? 'list' : attrs.mode]])\n                        .then(function (views) {\n                            for (var viewName in views) {\n                                // clone to make runbot green?\n                                attrs.views[viewName] = self._processFieldsView(views[viewName], viewName);\n                                attrs.views[viewName].fields = attrs.views[viewName].viewFields;\n                                self._processSubViewAttrs(attrs.views[viewName], attrs);\n                            }\n                            self._setSubViewLimit(attrs);\n                        }));\n                } else {\n                    self._setSubViewLimit(attrs);\n                }\n            });\n        }\n        return Promise.all(defs);\n    },\n    /**\n     * @override\n     */\n    _processArch(arch, fv) {\n        fv.fieldIdsToNames = {}; // maps field ids (identifying <field> nodes) to field names\n        return this._super(...arguments);\n    },\n    /**\n     * Override to populate the 'fieldIdsToNames' dict mapping <field> node ids\n     * to field names. Those ids are computed as follows:\n     *   - if set on the node, we use the 'id' attribute\n     *   - otherwise\n     *       - if this is the first occurrence of the field in the arch, we use\n     *         its name as id ('name' attribute)\n     *       - otherwise we generate an id by concatenating the field name with\n     *         a unique id\n     *       - in both cases, we set the id we generated in the attrs, as it\n     *         will be used by the renderer.\n     *\n     * @override\n     */\n    _processNode(node, fv) {\n        if (node.tag === 'field') {\n            const name = node.attrs.name;\n            let uid = node.attrs.id;\n            if (!uid) {\n                uid = name in fv.fieldIdsToNames ? `${name}__${generateID()}__` : name;\n                node.attrs.id = uid;\n            }\n            fv.fieldIdsToNames[uid] = name;\n        }\n        return this._super(...arguments);\n    },\n    /**\n     * We set here the limit for the number of records fetched (in one page).\n     * This method is only called for subviews, not for main views.\n     *\n     * @private\n     * @param {Object} attrs\n     */\n    _setSubViewLimit: function (attrs) {\n        var view = attrs.views && attrs.views[attrs.mode];\n        var limit = view && view.arch.attrs.limit && parseInt(view.arch.attrs.limit, 10);\n        attrs.limit = limit || attrs.Widget.prototype.limit || 40;\n    },\n});\n\nreturn FormView;\n\n});\n", "odoo.define('web.KanbanColumn', function (require) {\n\"use strict\";\n\nvar config = require('web.config');\nvar core = require('web.core');\nvar session = require('web.session');\nvar Dialog = require('web.Dialog');\nvar KanbanRecord = require('web.KanbanRecord');\nvar RecordQuickCreate = require('web.kanban_record_quick_create');\nvar view_dialogs = require('web.view_dialogs');\nvar viewUtils = require('web.viewUtils');\nvar Widget = require('web.Widget');\nvar KanbanColumnProgressBar = require('web.KanbanColumnProgressBar');\n\nvar _t = core._t;\nvar QWeb = core.qweb;\n\nvar KanbanColumn = Widget.extend({\n    template: 'KanbanView.Group',\n    custom_events: {\n        cancel_quick_create: '_onCancelQuickCreate',\n        quick_create_add_record: '_onQuickCreateAddRecord',\n        tweak_column: '_onTweakColumn',\n        tweak_column_records: '_onTweakColumnRecords',\n    },\n    events: {\n        'click .o_column_edit': '_onEditColumn',\n        'click .o_column_delete': '_onDeleteColumn',\n        'click .o_kanban_quick_add': '_onAddQuickCreate',\n        'click .o_kanban_load_more': '_onLoadMore',\n        'click .o_kanban_toggle_fold': '_onToggleFold',\n        'click .o_column_archive_records': '_onArchiveRecords',\n        'click .o_column_unarchive_records': '_onUnarchiveRecords',\n        'click .o_kanban_config .dropdown-menu': '_onConfigDropdownClicked',\n    },\n    /**\n     * @override\n     */\n    init: function (parent, data, options, recordOptions) {\n        this._super(parent);\n        this.db_id = data.id;\n        this.data_records = data.data;\n        this.data = data;\n\n        var value = data.value;\n        this.id = data.res_id;\n        this.folded = !data.isOpen;\n        this.has_active_field = 'active' in data.fields;\n        this.fields = data.fields;\n        this.records = [];\n        this.modelName = data.model;\n\n        this.quick_create = options.quick_create;\n        this.quickCreateView = options.quickCreateView;\n        this.groupedBy = options.groupedBy;\n        this.grouped_by_m2o = options.grouped_by_m2o;\n        this.grouped_by_m2m = options.grouped_by_m2m;\n        this.editable = options.editable;\n        this.deletable = options.deletable;\n        this.archivable = options.archivable;\n        this.draggable = options.draggable;\n        this.KanbanRecord = options.KanbanRecord || KanbanRecord; // the KanbanRecord class to use\n        this.records_editable = options.records_editable;\n        this.records_deletable = options.records_deletable;\n        this.recordsDraggable = options.recordsDraggable;\n        this.relation = options.relation;\n        this.offset = 0;\n        this.loadMoreCount = data.loadMoreCount;\n        this.loadMoreOffset = data.loadMoreOffset;\n        this.canBeFolded = this.folded;\n\n        if (options.hasProgressBar) {\n            this.barOptions = {\n                columnID: this.db_id,\n                progressBarStates: options.progressBarStates,\n            };\n        }\n\n        this.record_options = _.clone(recordOptions);\n\n        if (options.grouped_by_m2o || options.grouped_by_date || options.grouped_by_m2m) {\n            // For many2x and datetime, a false value means that the field is not set.\n            this.title = value ? value : _t('Undefined');\n        } else {\n            // False and 0 might be valid values for these fields.\n            this.title = value === undefined ? _t('Undefined') : value;\n        }\n\n        if (options.group_by_tooltip) {\n            this.tooltipInfo = _.compact(_.map(options.group_by_tooltip, function (help, field) {\n                help = help ? help + \"</br>\" : '';\n                return (data.tooltipData && data.tooltipData[field] && \"<div>\" + help + data.tooltipData[field] + \"</div>\") || '';\n            }));\n            this.tooltipInfo = this.tooltipInfo.join(\"<div class='dropdown-divider' role='separator' />\");\n        }\n    },\n    /**\n     * @override\n     */\n    start: function () {\n        var self = this;\n        var defs = [this._super.apply(this, arguments)];\n        this.$header = this.$('.o_kanban_header');\n\n        for (var i = 0; i < this.data_records.length; i++) {\n            defs.push(this._addRecord(this.data_records[i]));\n        }\n\n        if (this.recordsDraggable) {\n            this.$el.sortable({\n                connectWith: '.o_kanban_group',\n                containment: this.draggable ? false : 'parent',\n                revert: 0,\n                delay: 0,\n                items: '> .o_kanban_record:not(.o_updating)',\n                cursor: 'move',\n                over: function () {\n                    self.$el.addClass('o_kanban_hover');\n                },\n                out: function () {\n                    self.$el.removeClass('o_kanban_hover');\n                },\n                start: function (event, ui) {\n                    ui.item.addClass('o_currently_dragged');\n                },\n                stop: function (event, ui) {\n                    var item = ui.item;\n                    setTimeout(function () {\n                        item.removeClass('o_currently_dragged');\n                    });\n                },\n                update: function (event, ui) {\n                    var record = ui.item.data('record');\n                    var index = self.records.indexOf(record);\n                    record.$el.removeAttr('style');  // jqueryui sortable add display:block inline\n                    if (index >= 0) {\n                        if ($.contains(self.$el[0], record.$el[0])) {\n                            // resequencing records\n                            self.trigger_up('kanban_column_resequence', {ids: self._getIDs()});\n                        }\n                    } else {\n                        // adding record to this column\n                        ui.item.addClass('o_updating');\n                        self.trigger_up('kanban_column_add_record', {record: record, ids: self._getIDs()});\n                    }\n                }\n            });\n        }\n        this.$el.click(function (event) {\n            if (self.folded) {\n                self._onToggleFold(event);\n            }\n        });\n        if (this.barOptions) {\n            this.$el.addClass('o_kanban_has_progressbar');\n            this.progressBar = new KanbanColumnProgressBar(this, this.barOptions, this.data);\n            defs.push(this.progressBar.appendTo(this.$header));\n        }\n\n        var title = this.folded ? this.title + ' (' + this.data.count + ')' : this.title;\n        this.$header.find('.o_column_title').text(title);\n\n        this.$el.toggleClass('o_column_folded', this.canBeFolded);\n        if (this.tooltipInfo) {\n            this.$header.find('.o_kanban_header_title').tooltip({}).attr('data-original-title', this.tooltipInfo);\n        }\n        if (!this.loadMoreCount) {\n            this.$('.o_kanban_load_more').remove();\n        } else {\n            this.$('.o_kanban_load_more').html(QWeb.render('KanbanView.LoadMore', {widget: this}));\n        }\n\n        return Promise.all(defs);\n    },\n    /**\n     * Called when a record has been quick created, as a new column is rendered\n     * and appended into a fragment, before replacing the old column in the DOM.\n     * When this happens, the quick create widget is inserted into the new\n     * column directly, and it should be focused. However, as it is rendered\n     * into a fragment, the focus has to be set manually once in the DOM.\n     */\n    on_attach_callback: function () {\n        _.invoke(this.records, 'on_attach_callback');\n        if (this.quickCreateWidget) {\n            this.quickCreateWidget.on_attach_callback();\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Adds the quick create record to the top of the column.\n     *\n     * @returns {Promise}\n     */\n    addQuickCreate: async function () {\n        if (this.folded) {\n            // first open the column, and then add the quick create\n            this.trigger_up('column_toggle_fold', {\n                openQuickCreate: true,\n            });\n            return;\n        }\n\n        if (this.quickCreateWidget) {\n            return Promise.reject();\n        }\n        this.trigger_up('close_quick_create'); // close other quick create widgets\n        var context = this.data.getContext();\n        var groupByField = viewUtils.getGroupByField(this.groupedBy);\n        context['default_' + groupByField] = viewUtils.getGroupValue(this.data, groupByField);\n        this.quickCreateWidget = new RecordQuickCreate(this, {\n            context: context,\n            formViewRef: this.quickCreateView,\n            model: this.modelName,\n        });\n        await this.quickCreateWidget.appendTo(document.createDocumentFragment());\n        this.trigger_up('start_quick_create');\n        this.quickCreateWidget.$el.insertAfter(this.$header);\n        this.quickCreateWidget.on_attach_callback();\n    },\n    /**\n     * Closes the quick create widget if it isn't dirty.\n     */\n    cancelQuickCreate: function () {\n        if (this.quickCreateWidget) {\n            this.quickCreateWidget.cancel();\n        }\n    },\n    /**\n     * @returns {Boolean} true iff the column is empty\n     */\n    isEmpty: function () {\n        return !this.records.length;\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Adds a record in the column.\n     *\n     * @private\n     * @param {Object} recordState\n     * @param {Object} [options]\n     * @param {string} [options.position]\n     *        'before' to add at the top, add at the bottom by default\n     * @return {Promise}\n     */\n    _addRecord: function (recordState, options) {\n        if (this.grouped_by_m2m) {\n            this.record_options.deletable = false;\n        }\n        var record = new this.KanbanRecord(this, recordState, this.record_options);\n        this.records.push(record);\n        if (options && options.position === 'before') {\n            return record.insertAfter(this.quickCreateWidget ? this.quickCreateWidget.$el : this.$header);\n        } else {\n            var $load_more = this.$('.o_kanban_load_more');\n            if ($load_more.length) {\n                return record.insertBefore($load_more);\n            } else {\n                return record.appendTo(this.$el);\n            }\n        }\n    },\n    /**\n     * Destroys the QuickCreate widget.\n     *\n     * @private\n     */\n    _cancelQuickCreate: function () {\n        this.quickCreateWidget.destroy();\n        this.quickCreateWidget = undefined;\n    },\n    /**\n     * @returns {integer[]} the res_ids of the records in the column\n     */\n    _getIDs: function () {\n        var ids = [];\n        this.$('.o_kanban_record').each(function (index, r) {\n            ids.push($(r).data('record').id);\n        });\n        return ids;\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     */\n    _onAddQuickCreate: function () {\n        this.trigger_up('add_quick_create', { groupId: this.db_id });\n    },\n    /**\n     * @private\n     */\n    _onCancelQuickCreate: function () {\n        this._cancelQuickCreate();\n    },\n    /**\n     * Prevent from closing the config dropdown when the user clicks on a\n     * disabled item (e.g. 'Fold' in sample mode).\n     *\n     * @private\n     */\n    _onConfigDropdownClicked(ev) {\n        ev.stopPropagation();\n    },\n    /**\n     * @private\n     * @param {MouseEvent} event\n     */\n    _onDeleteColumn: function (event) {\n        event.preventDefault();\n        var buttons = [\n            {\n                text: _t(\"Ok\"),\n                classes: 'btn-primary',\n                close: true,\n                click: this.trigger_up.bind(this, 'kanban_column_delete'),\n            },\n            {text: _t(\"Cancel\"), close: true}\n        ];\n        new Dialog(this, {\n            size: 'medium',\n            buttons: buttons,\n            $content: $('<div>', {\n                text: _t(\"Are you sure that you want to remove this column ?\")\n            }),\n        }).open();\n    },\n    /**\n     * @private\n     * @param {MouseEvent} event\n     */\n    _onEditColumn: function (event) {\n        event.preventDefault();\n        new view_dialogs.FormViewDialog(this, {\n            res_model: this.relation,\n            res_id: this.id,\n            context: session.user_context,\n            title: _t(\"Edit Column\"),\n            on_saved: this.trigger_up.bind(this, 'reload'),\n        }).open();\n    },\n    /**\n     * @private\n     * @param {MouseEvent} event\n     */\n    _onLoadMore: function (event) {\n        event.preventDefault();\n        this.trigger_up('kanban_load_column_records', { loadMoreOffset: this.loadMoreOffset });\n    },\n    /**\n     * @private\n     * @param {OdooEvent} event\n     */\n    _onQuickCreateAddRecord: function (event) {\n        this.trigger_up('quick_create_record', event.data);\n    },\n    /**\n     * @private\n     * @param {MouseEvent} event\n     */\n    _onToggleFold: function (event) {\n        event.preventDefault();\n        this.trigger_up('column_toggle_fold');\n    },\n    /**\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onTweakColumn: function (ev) {\n        ev.data.callback(this.$el);\n    },\n    /**\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onTweakColumnRecords: function (ev) {\n        _.each(this.records, function (record) {\n            ev.data.callback(record.$el, record.state.data);\n        });\n    },\n    /**\n     * @private\n     * @param {MouseEvent} event\n     */\n    _onArchiveRecords: function (event) {\n        event.preventDefault();\n        Dialog.confirm(this, _t(\"Are you sure that you want to archive all the records from this column?\"), {\n            confirm_callback: this.trigger_up.bind(this, 'kanban_column_records_toggle_active', {\n                archive: true,\n            }),\n        });\n    },\n    /**\n     * @private\n     * @param {MouseEvent} event\n     */\n    _onUnarchiveRecords: function (event) {\n        event.preventDefault();\n        this.trigger_up('kanban_column_records_toggle_active', {\n            archive: false,\n        });\n    }\n});\n\nreturn KanbanColumn;\n\n});\n", "odoo.define('web.KanbanColumnProgressBar', function (require) {\n'use strict';\n\nconst core = require('web.core');\nvar session = require('web.session');\nvar utils = require('web.utils');\nvar Widget = require('web.Widget');\n\nconst _t = core._t;\n\nvar KanbanColumnProgressBar = Widget.extend({\n    template: 'KanbanView.ColumnProgressBar',\n    events: {\n        'click .progress-bar': '_onProgressBarClick',\n    },\n    /**\n     * Allows to disable animations for tests.\n     * @type {boolean}\n     */\n    ANIMATE: true,\n\n    /**\n     * @constructor\n     */\n    init: function (parent, options, columnState) {\n        this._super.apply(this, arguments);\n\n        this.columnID = options.columnID;\n        this.columnState = columnState;\n        this.activeFilter = {};\n\n        // <progressbar/> attributes\n        this.fieldName = columnState.progressBarValues.field;\n        this.colors = _.extend({}, columnState.progressBarValues.colors, {\n            __false: 'muted', // color to use for false value\n        });\n        this.sumField = columnState.progressBarValues.sum_field;\n        this.sumFieldLabel = this.sumField ? columnState.fields[this.sumField].string : false;\n\n        // Previous progressBar state\n        var state = options.progressBarStates[this.columnID];\n        if (state) {\n            this.groupCount = state.groupCount;\n            this.subgroupCounts = state.subgroupCounts;\n            this.totalCounterValue = state.totalCounterValue;\n            this.activeFilter = columnState.activeFilter || state.activeFilter;\n        }\n\n        // Prepare currency (TODO this should be automatic... use a field ?)\n        var sumFieldInfo = this.sumField && columnState.fieldsInfo.kanban[this.sumField];\n        var currencyField = sumFieldInfo && sumFieldInfo.options && sumFieldInfo.options.currency_field;\n        if (currencyField && columnState.data.length) {\n            this.currency = session.currencies[columnState.data[0].data[currencyField].res_id];\n        }\n    },\n    /**\n     * @override\n     */\n    start: function () {\n        var self = this;\n\n        this.$bars = {};\n        _.each(this.colors, function (val, key) {\n            self.$bars[key] = self.$(`.progress-bar[data-filter=${key}]`);\n        });\n        this.$counter = this.$('.o_kanban_counter_side');\n        this.$number = this.$counter.find('b');\n\n        if (this.currency) {\n            var $currency = $('<span/>', {\n                text: this.currency.symbol,\n            });\n            if (this.currency.position === 'before') {\n                $currency.prependTo(this.$counter);\n            } else {\n                $currency.appendTo(this.$counter);\n            }\n        }\n\n        return this._super.apply(this, arguments).then(function () {\n            // This should be executed when the progressbar is fully rendered\n            // and is in the DOM, this happens to be always the case with\n            // current use of progressbars\n            self.computeCounters();\n            self._notifyState();\n            self._render();\n        });\n    },\n    /**\n     * Computes the count of each sub group and the total count\n     */\n    computeCounters() {\n        const subgroupCounts = {};\n        for (const key of Object.keys(this.colors)) {\n            const subgroupCount = this.columnState.progressBarValues.counts[key] || 0;\n            if (this.activeFilter.value === key && subgroupCount === 0) {\n                this.activeFilter = {};\n            }\n            subgroupCounts[key] = subgroupCount;\n        }\n\n        this.groupCount = this.columnState.count;\n        this.subgroupCounts = subgroupCounts;\n        this.prevTotalCounterValue = this.totalCounterValue;\n        this.totalCounterValue = this.sumField ? (this.columnState.aggregateValues[this.sumField] || 0) : this.columnState.count;\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Updates the rendering according to internal data. This is done without\n     * qweb rendering because there are animations.\n     *\n     * @private\n     */\n    _render: function () {\n        var self = this;\n\n        // Update column display according to active filter\n        this.trigger_up('tweak_column', {\n            callback: function ($el) {\n                $el.removeClass('o_kanban_group_show');\n                _.each(self.colors, function (val, key) {\n                    $el.removeClass('o_kanban_group_show_' + val);\n                });\n                if (self.activeFilter.value) {\n                    $el.addClass('o_kanban_group_show o_kanban_group_show_' + self.colors[self.activeFilter.value]);\n                }\n            },\n        });\n        this.trigger_up('tweak_column_records', {\n            callback: function ($el, recordData) {\n                var categoryValue = recordData[self.fieldName] ? recordData[self.fieldName] : '__false';\n                _.each(self.colors, function (val, key) {\n                    $el.removeClass('oe_kanban_card_' + val);\n                });\n                if (self.colors[categoryValue]) {\n                    $el.addClass('oe_kanban_card_' + self.colors[categoryValue]);\n                }\n            },\n        });\n\n        // Display and animate the progress bars\n        var barNumber = 0;\n        var barMinWidth = 6; // In %\n        const selection = self.columnState.fields[self.fieldName].selection;\n        _.each(self.colors, function (val, key) {\n            var $bar = self.$bars[key];\n            var count = self.subgroupCounts && self.subgroupCounts[key] || 0;\n\n            if (!$bar) {\n                return;\n            }\n\n            // Adapt tooltip\n            let value;\n            if (selection) { // progressbar on a field of type selection\n                const option = selection.find(option => option[0] === key);\n                value = option && option[1] || _t('Other');\n            } else {\n                value = key;\n            }\n            $bar.attr('data-original-title', count + ' ' + value);\n            $bar.tooltip({\n                delay: 0,\n                trigger: 'hover',\n            });\n\n            // Adapt active state\n            $bar.toggleClass('progress-bar-animated progress-bar-striped', key === self.activeFilter.value);\n\n            // Adapt width\n            $bar.removeClass('o_bar_has_records transition-off');\n            window.getComputedStyle($bar[0]).getPropertyValue('width'); // Force reflow so that animations work\n            if (count > 0) {\n                $bar.addClass('o_bar_has_records');\n                // Make sure every bar that has records has some space\n                // and that everything adds up to 100%\n                var maxWidth = 100 - barMinWidth * barNumber;\n                self.$('.progress-bar.o_bar_has_records').css('max-width', maxWidth + '%');\n                $bar.css('width', (count * 100 / self.groupCount) + '%');\n                barNumber++;\n                $bar.attr('aria-valuemin', 0);\n                $bar.attr('aria-valuemax', self.groupCount);\n                $bar.attr('aria-valuenow', count);\n            } else {\n                $bar.css('width', '');\n            }\n        });\n        this.$('.progress-bar').css('min-width', '');\n        this.$('.progress-bar.o_bar_has_records').css('min-width', barMinWidth + '%');\n\n        // Display and animate the counter number\n        var start = this.prevTotalCounterValue;\n        var end = this.totalCounterValue;\n\n        if (this.activeFilter.value) {\n            if (this.sumField) {\n                end = 0;\n                _.each(self.columnState.data, function (record) {\n                    var recordData = record.data;\n                    if (self.activeFilter.value === recordData[self.fieldName] ||\n                        (self.activeFilter.value === '__false' && !recordData[self.fieldName])) {\n                        end += parseFloat(recordData[self.sumField]);\n                    }\n                });\n            } else {\n                end = this.subgroupCounts[this.activeFilter.value];\n            }\n        }\n        this.prevTotalCounterValue = end;\n        var animationClass = start > 999 ? 'o_kanban_grow' : 'o_kanban_grow_huge';\n\n        if (start !== undefined && (end > start || this.activeFilter.value) && this.ANIMATE) {\n            $({currentValue: start}).animate({currentValue: end}, {\n                duration: 1000,\n                start: function () {\n                    self.$counter.addClass(animationClass);\n                },\n                step: function () {\n                    self.$number.html(_getCounterHTML(this.currentValue));\n                },\n                complete: function () {\n                    self.$number.html(_getCounterHTML(this.currentValue));\n                    self.$counter.removeClass(animationClass);\n                },\n            });\n        } else {\n            this.$number.html(_getCounterHTML(end));\n        }\n\n        function _getCounterHTML(value) {\n            return utils.human_number(value, 0, 3);\n        }\n    },\n    /**\n     * Notifies the new progressBar state so that if a full rerender occurs, the\n     * new progressBar that would replace this one will be initialized with\n     * current state, so that animations are correct.\n     *\n     * @private\n     */\n    _notifyState: function () {\n        this.trigger_up('set_progress_bar_state', {\n            columnID: this.columnID,\n            values: {\n                groupCount: this.groupCount,\n                subgroupCounts: this.subgroupCounts,\n                totalCounterValue: this.totalCounterValue,\n                activeFilter: this.activeFilter,\n            },\n        });\n    },\n    /**\n     * Toggles the active filter on this progressbar.\n     * It also computes the corresponding domain extension.\n     *\n     * @private\n     * @param {string} value\n     */\n    _toggleActiveFilter(value) {\n        const activeFilter = Object.assign({}, this.activeFilter);\n        if (activeFilter.value === value) {\n            // If the filter was active and we click again on the same one, deactivate.\n            activeFilter.domain = [];\n            activeFilter.value = false;\n        } else {\n            const field = this.fieldName;\n            if (value === '__false') {\n                const values = Object.keys(this.colors).filter(el => el !== value);\n                activeFilter.domain = ['!', [field, 'in', values]];\n            } else {\n                activeFilter.domain = [[field, '=', value]];\n            }\n            activeFilter.value = value;\n        }\n        this.activeFilter = activeFilter;\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n    /**\n     * @private\n     * @param {Event} ev\n     */\n    _onProgressBarClick: function (ev) {\n        this.$clickedBar = $(ev.currentTarget);\n        const filterValue = this.$clickedBar.data('filter');\n        this._toggleActiveFilter(filterValue);\n        this._notifyState();\n        this.trigger_up('kanban_load_column_records', {\n            activeFilter: this.activeFilter\n        });\n    },\n});\nreturn KanbanColumnProgressBar;\n});\n", "odoo.define('web.kanban_column_quick_create', function (require) {\n\"use strict\";\n\n/**\n * This file defines the ColumnQuickCreate widget for Kanban. It allows to\n * create kanban columns directly from the Kanban view.\n */\n\nvar core = require('web.core');\nvar Dialog = require('web.Dialog');\nvar Widget = require('web.Widget');\n\nvar _t = core._t;\nvar QWeb = core.qweb;\n\nvar ColumnQuickCreate = Widget.extend({\n    template: 'KanbanView.ColumnQuickCreate',\n    events: {\n        'click .o_quick_create_folded': '_onUnfold',\n        'click .o_kanban_add': '_onAddClicked',\n        'click .o_kanban_examples': '_onShowExamples',\n        'keydown': '_onKeydown',\n        'keypress input': '_onKeypress',\n        'blur input': '_onInputBlur',\n        'focus input': '_onInputFocus',\n    },\n\n    /**\n     * @override\n     * @param {Object} [options]\n     * @param {Object} [options.examples]\n     */\n    init: function (parent, options) {\n        this._super.apply(this, arguments);\n        this.applyExamplesText = options.applyExamplesText || _t(\"Use This For My Kanban\");\n        this.examples = options.examples;\n        this.folded = true;\n        this.isMobile = false;\n        this.isFirstColumn = options.isFirstColumn;\n    },\n    /**\n     * @override\n     */\n    start: function () {\n        this.$quickCreateFolded = this.$('.o_quick_create_folded');\n        this.$quickCreateUnfolded = this.$('.o_quick_create_unfolded');\n        this.$input = this.$('input');\n\n        if (!this.isFirstColumn) {\n            // destroy the quick create when the user clicks outside\n            core.bus.on('click', this, this._onWindowClicked);\n        }\n\n        this._update();\n\n        return this._super.apply(this, arguments);\n    },\n    /**\n     * Called each time the quick create is attached into the DOM\n     */\n    on_attach_callback: function () {\n        if (!this.folded) {\n            this.$input.focus();\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Folds/unfolds the Column quick create widget\n     */\n    toggleFold: function () {\n        this.folded = !this.folded;\n        this._update();\n        if (!this.folded) {\n            this.$input.focus();\n            this.trigger_up('scrollTo', {selector: '.o_column_quick_create'});\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Clears the input value and notify the environment to create a column\n     *\n     * @private\n     */\n    _add: function () {\n        var value = this.$input.val().trim();\n        if (!value.length) {\n            this._cancel();\n            return;\n        }\n        this.$input.val('');\n        this.trigger_up('quick_create_add_column', {value: value});\n        this.$input.focus();\n    },\n    /**\n     * Cancels the quick creation\n     *\n     * @private\n     */\n    _cancel: function () {\n        if (!this.folded) {\n            this.$input.val('');\n            this.folded = true;\n            this._update();\n        }\n    },\n    /**\n     * Updates the rendering according to the current state (folded/unfolded)\n     *\n     * @private\n     */\n    _update: function () {\n        this.$quickCreateFolded.toggle(this.folded);\n        this.$quickCreateUnfolded.toggle(!this.folded);\n        this.trigger_up('quick_create_column_updated');\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {MouseEvent} event\n     */\n    _onAddClicked: function (event) {\n        event.stopPropagation();\n        this._add();\n    },\n    /**\n     * When the input is not focused, no key event may occur in the column, so\n     * the discard feature will not work by pressing ESC. We simply hide the\n     * help message in that case, so we do not mislead our users.\n     *\n     * @private\n     * @param {KeyboardEvent} event\n     */\n    _onInputBlur: function () {\n        this.$('.o_discard_msg').hide();\n    },\n    /**\n     * When the input is focused, we need to show the discard help message (it\n     * might have been hidden, @see _onInputBlur)\n     *\n     * @private\n     * @param {KeyboardEvent} event\n     */\n    _onInputFocus: function () {\n        this.$('.o_discard_msg').show();\n    },\n    /**\n     * Cancels quick creation on escape keydown event\n     *\n     * @private\n     * @param {KeyEvent} event\n     */\n    _onKeydown: function (event) {\n        if (event.keyCode === $.ui.keyCode.ESCAPE) {\n            this._cancel();\n        }\n    },\n    /**\n     * Validates quick creation on enter keypress event\n     *\n     * @private\n     * @param {KeyEvent} event\n     */\n    _onKeypress: function (event) {\n        if (event.keyCode === $.ui.keyCode.ENTER) {\n            this._add();\n        }\n    },\n    /**\n     * Opens a dialog containing examples of Kanban processes\n     *\n     * @private\n     */\n    _onShowExamples: function () {\n        var self = this;\n        var dialog = new Dialog(this, {\n            $content: $(QWeb.render('KanbanView.ExamplesDialog', {\n                examples: this.examples,\n            })),\n            buttons: [{\n                classes: 'btn-primary float-right',\n                text: this.applyExamplesText,\n                close: true,\n                click: function () {\n                    const activeExample = self.examples[this.$('.nav-link.active').data(\"exampleIndex\")];\n                    activeExample.columns.forEach(column => {\n                        self.trigger_up('quick_create_add_column', { value: column.toString(), foldQuickCreate: true });\n                    });\n                }\n            }, {\n                classes: 'btn-secondary float-right',\n                close: true,\n                text: _t('Close'),\n            }],\n            size: \"large\",\n            title: _t(\"Kanban Examples\"),\n        }).open();\n        dialog.on('closed', this, function () {\n            self.$input.focus();\n        });\n    },\n    /**\n     * @private\n     */\n    _onUnfold: function () {\n        if (this.folded) {\n            this.toggleFold();\n        }\n    },\n    /**\n     * When a click happens outside the quick create, we want to close it.\n     *\n     * @private\n     * @param {MouseEvent} event\n     */\n    _onWindowClicked: function (event) {\n        // ignore clicks if the quick create is not in the dom\n        if (!document.contains(this.el)) {\n            return;\n        }\n\n        // ignore clicks in modals\n        if ($(event.target).closest('.modal').length) {\n            return;\n        }\n\n        // ignore clicks if target is inside the quick create\n        if (this.el.contains(event.target)) {\n            return;\n        }\n\n        this._cancel();\n    },\n});\n\nreturn ColumnQuickCreate;\n\n});\n", "odoo.define('web.KanbanController', function (require) {\n\"use strict\";\n\n/**\n * The KanbanController is the class that coordinates the kanban model and the\n * kanban renderer.  It also makes sure that update from the search view are\n * properly interpreted.\n */\n\nvar BasicController = require('web.BasicController');\nvar Context = require('web.Context');\nvar core = require('web.core');\nvar Dialog = require('web.Dialog');\nvar Domain = require('web.Domain');\nvar view_dialogs = require('web.view_dialogs');\nvar viewUtils = require('web.viewUtils');\n\nvar _t = core._t;\nvar qweb = core.qweb;\n\nvar KanbanController = BasicController.extend({\n    buttons_template: 'KanbanView.buttons',\n    custom_events: _.extend({}, BasicController.prototype.custom_events, {\n        add_quick_create: '_onAddQuickCreate',\n        quick_create_add_column: '_onAddColumn',\n        quick_create_record: '_onQuickCreateRecord',\n        resequence_columns: '_onResequenceColumn',\n        button_clicked: '_onButtonClicked',\n        kanban_record_delete: '_onRecordDelete',\n        kanban_record_update: '_onUpdateRecord',\n        kanban_column_delete: '_onDeleteColumn',\n        kanban_column_add_record: '_onAddRecordToColumn',\n        kanban_column_resequence: '_onColumnResequence',\n        kanban_load_column_records: '_onLoadColumnRecords',\n        column_toggle_fold: '_onToggleColumn',\n        kanban_column_records_toggle_active: '_onToggleActiveRecords',\n    }),\n    /**\n     * @override\n     * @param {Object} params\n     * @param {boolean} params.quickCreateEnabled set to false to disable the\n     *   quick create feature\n     * @param {SearchPanel} [params.searchPanel]\n     * @param {Array[]} [params.controlPanelDomain=[]] initial domain coming\n     *   from the controlPanel\n     */\n    init: function (parent, model, renderer, params) {\n        this._super.apply(this, arguments);\n        this.on_create = params.on_create;\n        this.hasButtons = params.hasButtons;\n        this.quickCreateEnabled = params.quickCreateEnabled;\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @param {jQuery} [$node]\n     */\n    renderButtons: function ($node) {\n        if (!this.hasButtons || !this.is_action_enabled('create')) {\n            return;\n        }\n        this.$buttons = $(qweb.render(this.buttons_template, {\n            btnClass: 'btn-primary',\n            widget: this,\n        }));\n        this.$buttons.on('click', 'button.o-kanban-button-new', this._onButtonNew.bind(this));\n        this.$buttons.on('keydown', this._onButtonsKeyDown.bind(this));\n        if ($node) {\n            this.$buttons.appendTo($node);\n        }\n    },\n    /**\n     * In grouped mode, set 'Create' button as btn-secondary if there is no column\n     * (except if we can't create new columns)\n     *\n     * @override\n     */\n    updateButtons: function () {\n        if (!this.$buttons) {\n            return;\n        }\n        var state = this.model.get(this.handle, {raw: true});\n        var createHidden = this.is_action_enabled('group_create') && state.isGroupedByM2ONoColumn;\n        this.$buttons.find('.o-kanban-button-new').toggleClass('o_hidden', createHidden);\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Displays the record quick create widget in the requested column, given its\n     * id (in the first column by default). Ensures that we removed sample data\n     * if any, before displaying the quick create.\n     *\n     * @private\n     * @param {string} [groupId]\n     */\n    _addQuickCreate(groupId) {\n        this._removeSampleData(async () => {\n            await this.update({ shouldUpdateSearchComponents: false }, { reload: false });\n            return this.renderer.addQuickCreate(groupId);\n        });\n    },\n    /**\n     * @override method comes from field manager mixin\n     * @private\n     * @param {string} id local id from the basic record data\n     * @returns {Promise}\n     */\n    _confirmSave: function (id) {\n        var data = this.model.get(this.handle, {raw: true});\n        var grouped = data.groupedBy.length;\n        if (grouped) {\n            var columnState = this.model.getColumn(id);\n            return this.renderer.updateColumn(columnState.id, columnState);\n        }\n        return this.renderer.updateRecord(this.model.get(id));\n    },\n    /**\n     * Only display the pager in the ungrouped case, with data.\n     *\n     * @override\n     * @private\n     */\n    _getPagingInfo: function (state) {\n        if (!(state.count && !state.groupedBy.length)) {\n            return null;\n        }\n        return this._super(...arguments);\n    },\n    /**\n     * @private\n     * @param {Widget} kanbanRecord\n     * @param {Object} params\n     */\n    _reloadAfterButtonClick: function (kanbanRecord, params) {\n        var self = this;\n        var recordModel = this.model.localData[params.record.id];\n        var group = this.model.localData[recordModel.parentID];\n        var parent = this.model.localData[group.parentID];\n\n        this.model.reload(params.record.id).then(function (db_id) {\n            var data = self.model.get(db_id);\n            kanbanRecord.update(data);\n\n            // Check if we still need to display the record. Some fields of the domain are\n            // not guaranteed to be in data. This is for example the case if the action\n            // contains a domain on a field which is not in the Kanban view. Therefore,\n            // we need to handle multiple cases based on 3 variables:\n            // domInData: all domain fields are in the data\n            // activeInDomain: 'active' is already in the domain\n            // activeInData: 'active' is available in the data\n\n            var domain = (parent ? parent.domain : group.domain) || [];\n            var domInData = _.every(domain, function (d) {\n                return d[0] in data.data;\n            });\n            var activeInDomain = _.pluck(domain, 0).indexOf('active') !== -1;\n            var activeInData = 'active' in data.data;\n\n            // Case # | domInData | activeInDomain | activeInData\n            //   1    |   true    |      true      |      true     => no domain change\n            //   2    |   true    |      true      |      false    => not possible\n            //   3    |   true    |      false     |      true     => add active in domain\n            //   4    |   true    |      false     |      false    => no domain change\n            //   5    |   false   |      true      |      true     => no evaluation\n            //   6    |   false   |      true      |      false    => no evaluation\n            //   7    |   false   |      false     |      true     => replace domain\n            //   8    |   false   |      false     |      false    => no evaluation\n\n            // There are 3 cases which cannot be evaluated since we don't have all the\n            // necessary information. The complete solution would be to perform a RPC in\n            // these cases, but this is out of scope. A simpler one is to do a try / catch.\n\n            if (domInData && !activeInDomain && activeInData) {\n                domain = domain.concat([['active', '=', true]]);\n            } else if (!domInData && !activeInDomain && activeInData) {\n                domain = [['active', '=', true]];\n            }\n            try {\n                var visible = new Domain(domain).compute(data.evalContext);\n            } catch (e) {\n                return;\n            }\n            if (!visible) {\n                kanbanRecord.destroy();\n            }\n        });\n    },\n    /**\n     * @param {number[]} ids\n     * @private\n     * @returns {Promise}\n     */\n    _resequenceColumns: function (ids) {\n        var state = this.model.get(this.handle, {raw: true});\n        var model = state.fields[state.groupedBy[0]].relation;\n        return this.model.resequence(model, ids, this.handle);\n    },\n    /**\n     * This method calls the server to ask for a resequence.  Note that this\n     * does not rerender the user interface, because in most case, the\n     * resequencing operation has already been displayed by the renderer.\n     *\n     * @private\n     * @param {string} column_id\n     * @param {string[]} ids\n     * @returns {Promise}\n     */\n    _resequenceRecords: function (column_id, ids) {\n        var self = this;\n        return this.model.resequence(this.modelName, ids, column_id);\n    },\n    /**\n     * @override\n     */\n    _shouldBounceOnClick(element) {\n        const state = this.model.get(this.handle, {raw: true});\n        if (!state.count || state.isSample) {\n            const classesList = [\n                'o_kanban_view',\n                'o_kanban_group',\n                'o_kanban_header',\n                'o_column_quick_create',\n                'o_view_nocontent_smiling_face',\n            ];\n            return classesList.some(c => element.classList.contains(c));\n        }\n        return false;\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * This handler is called when an event (from the quick create add column)\n     * event bubbles up. When that happens, we need to ask the model to create\n     * a group and to update the renderer\n     *\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onAddColumn: function (ev) {\n        var self = this;\n        this.mutex.exec(function () {\n            return self.model.createGroup(ev.data.value, self.handle).then(function () {\n                var state = self.model.get(self.handle, {raw: true});\n                var ids = _.pluck(state.data, 'res_id').filter(_.isNumber);\n                return self._resequenceColumns(ids);\n            }).then(function () {\n                return self.update({}, {reload: false});\n            }).then(function () {\n                let quickCreateFolded = self.renderer.quickCreate.folded;\n                if (ev.data.foldQuickCreate ? !quickCreateFolded : quickCreateFolded) {\n                    self.renderer.quickCreateToggleFold();\n                }\n                self.renderer.trigger_up(\"quick_create_column_created\");\n            });\n        });\n    },\n    /**\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onAddRecordToColumn: function (ev) {\n        var self = this;\n        var record = ev.data.record;\n        var column = ev.target;\n        this.alive(this.model.moveRecord(record.db_id, column.db_id, this.handle))\n            .then(function (column_db_ids) {\n                return self._resequenceRecords(column.db_id, ev.data.ids)\n                    .then(function () {\n                        _.each(column_db_ids, function (db_id) {\n                            var data = self.model.get(db_id);\n                            self.renderer.updateColumn(db_id, data);\n                        });\n                    });\n            }).guardedCatch(this.reload.bind(this));\n    },\n    /**\n     * @private\n     * @param {OdooEvent} ev\n     * @returns {string} ev.data.groupId\n     */\n    _onAddQuickCreate(ev) {\n        ev.stopPropagation();\n        this._addQuickCreate(ev.data.groupId);\n    },\n    /**\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onButtonClicked: function (ev) {\n        var self = this;\n        ev.stopPropagation();\n        var attrs = ev.data.attrs;\n        var record = ev.data.record;\n        var def = Promise.resolve();\n        if (attrs.context) {\n            attrs.context = new Context(attrs.context)\n                .set_eval_context({\n                    active_id: record.res_id,\n                    active_ids: [record.res_id],\n                    active_model: record.model,\n                });\n        }\n        if (attrs.confirm) {\n            def = new Promise(function (resolve, reject) {\n                Dialog.confirm(this, attrs.confirm, {\n                    confirm_callback: resolve,\n                    cancel_callback: reject,\n                }).on(\"closed\", null, reject);\n            });\n        }\n        def.then(function () {\n            self.trigger_up('execute_action', {\n                action_data: attrs,\n                env: {\n                    context: record.getContext(),\n                    currentID: record.res_id,\n                    model: record.model,\n                    resIDs: record.res_ids,\n                },\n                on_closed: self._reloadAfterButtonClick.bind(self, ev.target, ev.data),\n            });\n        });\n    },\n    /**\n     * @private\n     */\n    _onButtonNew: function () {\n        var state = this.model.get(this.handle, {raw: true});\n        var quickCreateEnabled = this.quickCreateEnabled && viewUtils.isQuickCreateEnabled(state);\n        if (this.on_create === 'quick_create' && quickCreateEnabled && state.data.length) {\n            // activate the quick create in the first column when the mutex is\n            // unlocked, to ensure that there is no pending re-rendering that\n            // would remove it (e.g. if we are currently adding a new column)\n            this.mutex.getUnlockedDef().then(this._addQuickCreate.bind(this, null));\n        } else if (this.on_create && this.on_create !== 'quick_create') {\n            // Execute the given action\n            this.do_action(this.on_create, {\n                on_close: this.reload.bind(this, {}),\n                additional_context: state.context,\n            });\n        } else {\n            // Open the form view\n            this.trigger_up('switch_view', {\n                view_type: 'form',\n                res_id: undefined\n            });\n        }\n    },\n    /**\n     * Moves the focus from the controller buttons to the first kanban record\n     *\n     * @private\n     * @param {jQueryEvent} ev\n     */\n    _onButtonsKeyDown: function (ev) {\n        switch(ev.keyCode) {\n            case $.ui.keyCode.DOWN:\n                this._giveFocus();\n        }\n    },\n    /**\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onColumnResequence: function (ev) {\n        this._resequenceRecords(ev.target.db_id, ev.data.ids);\n    },\n    /**\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onDeleteColumn: function (ev) {\n        var column = ev.target;\n        var state = this.model.get(this.handle, {raw: true});\n        var relatedModelName = state.fields[state.groupedBy[0]].relation;\n        this.model\n            .deleteRecords([column.db_id], relatedModelName)\n            .then(this.update.bind(this, {}, {}));\n    },\n    /**\n     * @private\n     * @param {OdooEvent} ev\n     * @param {Object} ev.data see model.reload options\n     */\n    async _onLoadColumnRecords(ev) {\n        const column = ev.target;\n        const id = column.columnID || column.db_id;\n        const options = ev.data;\n        const dbID = await this.model.reload(id, options);\n        const data = this.model.get(dbID);\n        return this.renderer.updateColumn(dbID, data);\n    },\n    /**\n     * @private\n     * @param {OdooEvent} ev\n     * @param {KanbanColumn} ev.target the column in which the record should\n     *   be added\n     * @param {Object} ev.data.values the field values of the record to\n     *   create; if values only contains the value of the 'display_name', a\n     *   'name_create' is performed instead of 'create'\n     * @param {function} [ev.data.onFailure] called when the quick creation\n     *   failed\n     */\n    _onQuickCreateRecord: function (ev) {\n        var self = this;\n        var values = ev.data.values;\n        var column = ev.target;\n        var onFailure = ev.data.onFailure || function () {};\n\n        // function that updates the kanban view once the record has been added\n        // it receives the local id of the created record in arguments\n        var update = function (db_id) {\n\n            var columnState = self.model.getColumn(db_id);\n            var state = self.model.get(self.handle);\n            return self.renderer\n                .updateColumn(columnState.id, columnState, {openQuickCreate: true, state: state})\n                .then(function () {\n                    if (ev.data.openRecord) {\n                        self.trigger_up('open_record', {id: db_id, mode: 'edit'});\n                    }\n                });\n        };\n\n        this.model.createRecordInGroup(column.db_id, values)\n            .then(update)\n            .guardedCatch(function (reason) {\n                reason.event.preventDefault();\n                var columnState = self.model.get(column.db_id, {raw: true});\n                var context = columnState.getContext();\n                var state = self.model.get(self.handle, {raw: true});\n                var groupByField = viewUtils.getGroupByField(state.groupedBy[0]);\n                context['default_' + groupByField] = viewUtils.getGroupValue(columnState, groupByField);\n                new view_dialogs.FormViewDialog(self, {\n                    res_model: state.model,\n                    context: _.extend({default_name: values.name || values.display_name}, context),\n                    title: _t(\"Create\"),\n                    disable_multiple_selection: true,\n                    on_saved: function (record) {\n                        self.model.addRecordToGroup(column.db_id, record.res_id)\n                            .then(update);\n                    },\n                }).open().opened(onFailure);\n            });\n    },\n    /**\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onRecordDelete: function (ev) {\n        this._deleteRecords([ev.data.id]);\n    },\n    /**\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onResequenceColumn: function (ev) {\n        var self = this;\n        this._resequenceColumns(ev.data.ids);\n    },\n    /**\n     * @private\n     * @param {OdooEvent} ev\n     * @param {boolean} [ev.data.openQuickCreate=false] if true, opens the\n     *   QuickCreate in the toggled column (it assumes that we are opening it)\n     */\n    _onToggleColumn: function (ev) {\n        var self = this;\n        const columnID = ev.target.db_id || ev.data.db_id;\n        this.model.toggleGroup(columnID)\n            .then(function (db_id) {\n                var data = self.model.get(db_id);\n                var options = {\n                    openQuickCreate: !!ev.data.openQuickCreate,\n                };\n                return self.renderer.updateColumn(db_id, data, options);\n            })\n            .then(function () {\n                if (ev.data.onSuccess) {\n                    ev.data.onSuccess();\n                }\n            });\n    },\n    /**\n     * @todo should simply use field_changed event...\n     *\n     * @private\n     * @param {OdooEvent} ev\n     * @param {function} [ev.data.onSuccess] callback to execute after applying\n     *   changes\n     */\n    _onUpdateRecord: function (ev) {\n        var onSuccess = ev.data.onSuccess;\n        delete ev.data.onSuccess;\n        var changes = _.clone(ev.data);\n        ev.data.force_save = true;\n        this._applyChanges(ev.target.db_id, changes, ev).then(onSuccess);\n    },\n    /**\n     * Allow the user to archive/restore all the records of a column.\n     *\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onToggleActiveRecords: function (ev) {\n        var self = this;\n        var archive = ev.data.archive;\n        var column = ev.target;\n        var recordIds = _.pluck(column.records, 'id');\n        if (recordIds.length) {\n            var prom = archive ?\n              this.model.actionArchive(recordIds, column.db_id) :\n              this.model.actionUnarchive(recordIds, column.db_id);\n            prom.then(function (dbID) {\n                let data = self.model.get(dbID);\n                if (data) {  // Could be null if a wizard is returned for example\n                    self.model.reload(self.handle).then(function () {\n                        // Retrieve fresher data as the reload may have changed it.\n                        data = self.model.get(dbID);\n                        const state = self.model.get(self.handle);\n                        self.renderer.updateColumn(dbID, data, { state });\n                    });\n                }\n            });\n        }\n    },\n});\n\nreturn KanbanController;\n\n});\n", "odoo.define('web.kanban_examples_registry', function (require) {\n\"use strict\";\n\n/**\n * This file instantiates and exports a registry. The purpose of this registry\n * is to store static data displayed in a dialog to help the end user to\n * configure its columns in the grouped Kanban view.\n *\n * To activate a link on the ColumnQuickCreate widget on open such a dialog, the\n * attribute 'examples' on the root arch node must be set to a valid key in this\n * registry.\n *\n * Each value in this registry must be an array of Objects containing the\n * following keys:\n *   - name (string)\n *   - columns (Array[string])\n *   - description (string, optional)\n */\n\nvar Registry = require('web.Registry');\n\nreturn new Registry();\n\n});\n", "odoo.define('web.KanbanModel', function (require) {\n\"use strict\";\n\n/**\n * The KanbanModel extends the BasicModel to add Kanban specific features like\n * moving a record from a group to another, resequencing records...\n */\n\nvar BasicModel = require('web.BasicModel');\nvar viewUtils = require('web.viewUtils');\n\nvar KanbanModel = BasicModel.extend({\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Adds a record to a group in the localData, and fetch the record.\n     *\n     * @param {string} groupID localID of the group\n     * @param {integer} resId id of the record\n     * @returns {Promise<string>} resolves to the local id of the new record\n     */\n    addRecordToGroup: function (groupID, resId) {\n        var self = this;\n        var group = this.localData[groupID];\n        var new_record = this._makeDataPoint({\n            res_id: resId,\n            modelName: group.model,\n            fields: group.fields,\n            fieldsInfo: group.fieldsInfo,\n            viewType: group.viewType,\n            parentID: groupID,\n        });\n\n        var def = this._fetchRecord(new_record).then(function (result) {\n            group.data.unshift(new_record.id);\n            group.res_ids.unshift(resId);\n            group.count++;\n\n            // update the res_ids and count of the parent\n            self.localData[group.parentID].count++;\n            self._updateParentResIDs(group);\n\n            return result.id;\n        });\n        return this._reloadProgressBarGroupFromRecord(new_record.id, def);\n    },\n    /**\n     * Creates a new group from a name (performs a name_create).\n     *\n     * @param {string} name\n     * @param {string} parentID localID of the parent of the group\n     * @returns {Promise<string>} resolves to the local id of the new group\n     */\n    createGroup: function (name, parentID) {\n        var self = this;\n        var parent = this.localData[parentID];\n        var groupBy = parent.groupedBy[0];\n        var groupByField = parent.fields[groupBy];\n        if (!groupByField || groupByField.type !== 'many2one') {\n            return Promise.reject(); // only supported when grouped on m2o\n        }\n        return this._rpc({\n                model: groupByField.relation,\n                method: 'name_create',\n                args: [name],\n                context: parent.context, // todo: combine with view context\n            })\n            .then(function (result) {\n                const createGroupDataPoint = (model, parent) => {\n                    const newGroup = model._makeDataPoint({\n                        modelName: parent.model,\n                        context: parent.context,\n                        domain: parent.domain.concat([[groupBy, \"=\", result[0]]]),\n                        fields: parent.fields,\n                        fieldsInfo: parent.fieldsInfo,\n                        isOpen: true,\n                        limit: parent.limit,\n                        parentID: parent.id,\n                        openGroupByDefault: true,\n                        orderedBy: parent.orderedBy,\n                        value: result,\n                        viewType: parent.viewType,\n                    });\n                    if (parent.progressBar) {\n                        newGroup.progressBarValues = _.extend({\n                            counts: {},\n                        }, parent.progressBar);\n                    }\n                    return newGroup;\n                };\n                const newGroup = createGroupDataPoint(self, parent);\n                parent.data.push(newGroup.id);\n                if (self.isInSampleMode()) {\n                    // in sample mode, create the new group in both models (main + sample)\n                    const sampleParent = self.sampleModel.localData[parentID];\n                    const newSampleGroup = createGroupDataPoint(self.sampleModel, sampleParent);\n                    sampleParent.data.push(newSampleGroup.id);\n                }\n                return newGroup.id;\n            });\n    },\n    /**\n     * Creates a new record from the given value, and add it to the given group.\n     *\n     * @param {string} groupID\n     * @param {Object} values\n     * @returns {Promise} resolved with the local id of the created record\n     */\n    createRecordInGroup: function (groupID, values) {\n        var self = this;\n        var group = this.localData[groupID];\n        var context = this._getContext(group);\n        var parent = this.localData[group.parentID];\n        var groupByField = viewUtils.getGroupByField(parent.groupedBy[0]);\n        context['default_' + groupByField] = viewUtils.getGroupValue(group, groupByField);\n        var def;\n        if (Object.keys(values).length === 1 && 'display_name' in values) {\n            // only 'display_name is given, perform a 'name_create'\n            def = this._rpc({\n                    model: parent.model,\n                    method: 'name_create',\n                    args: [values.display_name],\n                    context: context,\n                }).then(function (records) {\n                    return records[0];\n                });\n        } else {\n            // other fields are specified, perform a classical 'create'\n            def = this._rpc({\n                model: parent.model,\n                method: 'create',\n                args: [values],\n                context: context,\n            });\n        }\n        return def.then(function (resID) {\n            return self.addRecordToGroup(group.id, resID);\n        });\n    },\n    /**\n     * Add the following (kanban specific) keys when performing a `get`:\n     *\n     * - tooltipData\n     * - isGroupedByM2ONoColumn\n     * - progressBarValues\n     * - loadMoreCount\n     * - loadMoreOffset\n     *\n     * @override\n     * @see _readTooltipFields\n     * @returns {Object}\n     */\n    __get: function () {\n        var result = this._super.apply(this, arguments);\n        var dp = result && this.localData[result.id];\n        if (dp) {\n            // Add tooltipData key\n            if (dp.tooltipData) {\n                result.tooltipData = $.extend(true, {}, dp.tooltipData);\n            }\n            // Add isGroupedByM2ONoColumn key\n            if (dp.fields[dp.groupedBy[0]]) {\n                var groupedByM2O = dp.fields[dp.groupedBy[0]].type === 'many2one';\n                result.isGroupedByM2ONoColumn = !dp.data.length && groupedByM2O;\n            } else {\n                result.isGroupedByM2ONoColumn = false;\n            }\n            // Keep activeFilter\n            result.activeFilter = dp.activeFilter;\n            // Add progressBarValues, loadMoreCount and loadMoreOffset key\n            let loadMoreCount = result.count - result.data.length;\n            let loadMoreOffset = result.data.length;\n            if (dp.progressBarValues) {\n                result.progressBarValues = $.extend(true, {}, dp.progressBarValues);\n                if (dp.activeFilter && dp.activeFilter.value) {\n                    // A progressbar filter is in an activated state?\n                    // Then set loadMoreCount and loadMoreOffset accordingly.\n                    // These computations are needed because there might be\n                    // records that doesn't match the current filter, e.g.:\n                    // - newly created records\n                    // - records dragged in the column\n                    const barValues = dp.progressBarValues;\n                    const barField = barValues.field;\n                    const definedBarFieldValues = Object.keys(barValues.colors);\n                    const filterValue = dp.activeFilter.value;\n\n                    const filteredRecordsTotal = barValues.counts[filterValue];\n                    const filteredRecords = result.data.filter(element => {\n                        const elementBarFieldValue = element.data[barField];\n                        return (filterValue === elementBarFieldValue)\n                            || (filterValue === '__false'\n                                && !definedBarFieldValues.includes(elementBarFieldValue));\n                    });\n                    loadMoreCount = filteredRecordsTotal - filteredRecords.length;\n                    loadMoreOffset = filteredRecords.length;\n                }\n            }\n            result.loadMoreCount = loadMoreCount;\n            result.loadMoreOffset = loadMoreOffset;\n        }\n        return result;\n    },\n    /**\n     * Same as @see get but getting the parent element whose ID is given.\n     *\n     * @param {string} id\n     * @returns {Object}\n     */\n    getColumn: function (id) {\n        var element = this.localData[id];\n        if (element) {\n            return this.get(element.parentID);\n        }\n        return null;\n    },\n    /**\n     * @override\n     */\n    __load: function (params) {\n        this.defaultGroupedBy = params.groupBy || [];\n        params.groupedBy = (params.groupedBy && params.groupedBy.length) ? params.groupedBy : this.defaultGroupedBy;\n        return this._super(params);\n    },\n    /**\n     * Moves a record from a group to another.\n     *\n     * @param {string} recordID localID of the record\n     * @param {string} groupID localID of the new group of the record\n     * @param {string} parentID localID of the parent\n     * @returns {Promise<string[]>} resolves to a pair [oldGroupID, newGroupID]\n     */\n    moveRecord: function (recordID, groupID, parentID) {\n        var self = this;\n        var parent = this.localData[parentID];\n        var new_group = this.localData[groupID];\n        var changes = {};\n        var groupedFieldName = viewUtils.getGroupByField(parent.groupedBy[0]);\n        var groupedField = parent.fields[groupedFieldName];\n        // for a date/datetime field, we take the last moment of the group as the group value\n        if (['date', 'datetime'].includes(groupedField.type)) {\n            changes[groupedFieldName] = viewUtils.getGroupValue(new_group, groupedFieldName);\n        } else if (groupedField.type === 'many2one') {\n            changes[groupedFieldName] = {\n                id: new_group.res_id,\n                display_name: new_group.value,\n            };\n        } else if (groupedField.type === 'selection') {\n            var value = _.findWhere(groupedField.selection, {1: new_group.value});\n            changes[groupedFieldName] = value && value[0] || false;\n        } else {\n            changes[groupedFieldName] = new_group.value;\n        }\n\n        // Manually updates groups data. Note: this is done before the actual\n        // save as it might need to perform a read group in some cases so those\n        // updated data might be overridden again.\n        var record = self.localData[recordID];\n        var resID = record.res_id;\n        // Remove record from its current group\n        var old_group;\n        for (var i = 0; i < parent.data.length; i++) {\n            old_group = self.localData[parent.data[i]];\n            var index = _.indexOf(old_group.data, recordID);\n            if (index >= 0) {\n                old_group.data.splice(index, 1);\n                old_group.count--;\n                if (!old_group.activeFilter || old_group.activeFilter.value === record.data[parent.progressBar.field]) {\n                    // Here, the record leaving the old group matches its domain,\n                    // so we must decrease the domainCount too.\n                    old_group.domainCount--;\n                }\n                old_group.res_ids = _.without(old_group.res_ids, resID);\n                self._updateParentResIDs(old_group);\n                break;\n            }\n        }\n        // Add record to its new group\n        new_group.data.push(recordID);\n        new_group.res_ids.push(resID);\n        new_group.count++;\n\n        return this.notifyChanges(recordID, changes).then(function () {\n            return self.save(recordID);\n        }).then(function () {\n            record.parentID = new_group.id;\n            return [old_group.id, new_group.id];\n        });\n    },\n    /**\n     * @override\n     * @param {Object} options.activeFilter\n     */\n    reload: function (id, options) {\n        const element = this.localData[id];\n        // Reset the limit right before reloading a group as a reload\n        // of a kanban view may update the limit of a group. @see BasicModel._readGroup()\n        // (e.g. if we are coming back to the kanban view from a form view)\n        // As this mechanism may only affect grouped kanban views, only reset\n        // the limit if the current element is a group (and thus, has a parent).\n        if (element.parentID) {\n            element.limit = this.loadParams.limit;\n        }\n        // Register the domain extension in the element.\n        if (options && options.activeFilter) {\n            element.activeFilter = options.activeFilter || element.activeFilter;\n            // Cleanup as this option is not used further\n            delete options.activeFilter;\n        }\n        // if the groupBy is given in the options and if it is an empty array,\n        // fallback on the default groupBy\n        if (options && options.groupBy && !options.groupBy.length) {\n            options.groupBy = this.defaultGroupedBy;\n        }\n        return this._super(id, options);\n    },\n    /**\n     * @override\n     */\n    __reload: function (id, options) {\n        var def = this._super(id, options);\n        if (options && options.loadMoreOffset) {\n            return def;\n        }\n        return this._reloadProgressBarGroupFromRecord(id, def);\n    },\n    /**\n     * @override\n     */\n    save: function (recordID) {\n        var def = this._super.apply(this, arguments);\n        return this._reloadProgressBarGroupFromRecord(recordID, def);\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     */\n    _getGroupedListPropsToKeep(list, options) {\n        const propsToKeep = this._super(...arguments);\n        if (list.activeFilter) {\n            propsToKeep.activeFilter = list.activeFilter;\n        }\n        return propsToKeep;\n    },\n    /**\n     * @override\n     */\n    _getUngroupedListDomain(list) {\n        const domainExtension = (list.activeFilter && list.activeFilter.domain) || [];\n        return [...this._super(...arguments), ...domainExtension];\n    },\n    /**\n     * @override\n     */\n    _makeDataPoint: function (params) {\n        var dataPoint = this._super.apply(this, arguments);\n        if (params.progressBar) {\n            dataPoint.progressBar = params.progressBar;\n        }\n        // In Kanban view, we sometimes drag into a group records that are\n        // outside of its domain. Here we make sure to remember the initial\n        // domain count. This is useful for e.g. progressbars computations.\n        dataPoint.domainCount = dataPoint.count;\n        return dataPoint;\n    },\n    /**\n     * @override\n     */\n    _load: function (dataPoint, options) {\n        if (dataPoint.groupedBy.length && dataPoint.progressBar) {\n            return this._readProgressBarGroup(dataPoint, options);\n        }\n        return this._super.apply(this, arguments);\n    },\n    /**\n     * Ensures that there is no nested groups in Kanban (only the first grouping\n     * level is taken into account).\n     *\n     * @override\n     * @private\n     * @param {Object} list valid resource object\n     */\n    _readGroup: function (list) {\n        var self = this;\n        if (list.groupedBy.length > 1) {\n            list.groupedBy = [list.groupedBy[0]];\n        }\n        return this._super.apply(this, arguments).then(function (result) {\n            return self._readTooltipFields(list).then(_.constant(result));\n        });\n    },\n    /**\n     * @private\n     * @param {Object} dataPoint\n     * @returns {Promise<Object>}\n     */\n    async _readProgressBarGroup(list, options) {\n        const groupsDef = this._readGroup(list, options);\n        const progressBarDef = this._readProgressBar(list);\n        const [groups, progressBar] = await Promise.all([groupsDef, progressBarDef]);\n\n        // For each empty group having an active filter, we clear their filter and refetch.\n        // For instance, this could arrive when we drag out all records of a column\n        // having an active filter, or when the view domain has been updated.\n        const groupProms = [];\n        for (const groupId of list.data) {\n            const group = this.localData[groupId];\n            if (group.activeFilter && group.activeFilter.value && !group.data.length) {\n                group.activeFilter = {};\n                groupProms.push(this._fetchUngroupedList(group));\n            }\n        }\n        await Promise.all(groupProms);\n\n        // Compute records count for progressbar field values\n        // not specified in the progressbar attributes\n        for (const groupId of list.data) {\n            const group = this.localData[groupId];\n            let value = group.value;\n            if (value === true) {\n                value = \"True\";\n            } else if (value === false) {\n                value = \"False\";\n            }\n\n            const valuesCount = progressBar[value] || {};\n            const valuesCountTotal = Object.keys(valuesCount).reduce((sum, key) => {\n                return sum + valuesCount[key];\n            }, 0);\n\n            const counts = Object.assign({\n                __false: group.domainCount - valuesCountTotal\n            }, valuesCount);\n\n            group.progressBarValues = Object.assign({\n                counts,\n            }, list.progressBar);\n        }\n        return list;\n    },\n    /**\n     * @param {Object} list valid resource object\n     * @returns {Promise}\n     */\n    _readProgressBar: function (list) {\n        return this._rpc({\n            model: list.model,\n            method: 'read_progress_bar',\n            kwargs: {\n                domain: list.domain,\n                group_by: list.groupedBy[0],\n                progress_bar: list.progressBar,\n                context: list.context,\n            },\n        });\n    },\n    /**\n     * Fetches tooltip specific fields on the group by relation and stores it in\n     * the column datapoint in a special key `tooltipData`.\n     * Data for the tooltips (group_by_tooltip) are fetched in batch for all\n     * groups, to avoid doing multiple calls.\n     * Data are stored in a special key `tooltipData` on the datapoint.\n     * Note that the option `group_by_tooltip` is only for m2o fields.\n     *\n     * @private\n     * @param {Object} list a list of groups\n     * @returns {Promise}\n     */\n    _readTooltipFields: function (list) {\n        var self = this;\n        var groupedByField = list.fields[list.groupedBy[0].split(':')[0]];\n        if (groupedByField.type !== 'many2one') {\n            return Promise.resolve();\n        }\n        var groupIds = _.reduce(list.data, function (groupIds, id) {\n            var res_id = self.get(id, {raw: true}).res_id;\n            // The field on which we are grouping might not be set on all records\n            if (res_id) {\n                groupIds.push(res_id);\n            }\n            return groupIds;\n        }, []);\n        var tooltipFields = [];\n        var groupedByFieldInfo = list.fieldsInfo.kanban[list.groupedBy[0]];\n        if (groupedByFieldInfo && groupedByFieldInfo.options) {\n            tooltipFields = Object.keys(groupedByFieldInfo.options.group_by_tooltip || {});\n        }\n        if (groupIds.length && tooltipFields.length) {\n            var fieldNames = _.union(['display_name'], tooltipFields);\n            return this._rpc({\n                model: groupedByField.relation,\n                method: 'read',\n                args: [groupIds, fieldNames],\n                context: list.context,\n            }).then(function (result) {\n                _.each(list.data, function (id) {\n                    var dp = self.localData[id];\n                    dp.tooltipData = _.findWhere(result, {id: dp.res_id});\n                });\n            });\n        }\n        return Promise.resolve();\n    },\n    /**\n     * Reloads all progressbar data. This is done after given promise and\n     * ensures that the given promise's result is not lost.\n     *\n     * @private\n     * @param {string} recordID\n     * @param {Promise} def\n     * @returns {Promise}\n     */\n   async  _reloadProgressBarGroupFromRecord(recordID, def) {\n       let element = this.localData[recordID];\n       if (element.type === 'list') {\n           if (!element.parentID) {\n               // we are reloading the whole view, so there is no need to manually\n               // reload the progressbars\n               return def;\n           }\n           if (element.activeFilter) {\n               // We must not read_group when an active filter (and thus\n               // a domain extension) is applied to the list datapoint.\n               return def;\n           }\n       }\n        // If we updated a record, then we must potentially update columns'\n        // progressbars, so we need to load groups info again\n        while (element) {\n            if (element.progressBar) {\n                const data = await def;\n                await this._load(element, {\n                    keepEmptyGroups: true,\n                    onlyGroups: true,\n                });\n                return data;\n            }\n            element = this.localData[element.parentID];\n        }\n        return def;\n    },\n});\nreturn KanbanModel;\n});\n", "odoo.define('web.KanbanRecord', function (require) {\n\"use strict\";\n\n/**\n * This file defines the KanbanRecord widget, which corresponds to a card in\n * a Kanban view.\n */\nvar config = require('web.config');\nvar core = require('web.core');\nvar Domain = require('web.Domain');\nvar Dialog = require('web.Dialog');\nvar field_utils = require('web.field_utils');\nconst FieldWrapper = require('web.FieldWrapper');\nvar utils = require('web.utils');\nvar Widget = require('web.Widget');\nconst { WidgetAdapterMixin } = require('web.OwlCompatibility');\nvar widgetRegistry = require('web.widget_registry');\nconst widgetRegistryOwl = require('web.widgetRegistry');\nconst WidgetWrapper = require(\"web.WidgetWrapper\");\n\nvar _t = core._t;\nvar QWeb = core.qweb;\n\nvar KANBAN_RECORD_COLORS = require('web.basic_fields').FieldColorPicker.prototype.RECORD_COLORS;\nvar NB_KANBAN_RECORD_COLORS = KANBAN_RECORD_COLORS.length;\n\nvar KanbanRecord = Widget.extend(WidgetAdapterMixin, {\n    events: {\n        'click .oe_kanban_action': '_onKanbanActionClicked',\n        'click .o_kanban_manage_toggle_button': '_onManageTogglerClicked',\n    },\n    /**\n     * @override\n     */\n    init: function (parent, state, options) {\n        this._super(parent);\n\n        this.fields = state.fields;\n        this.fieldsInfo = state.fieldsInfo.kanban;\n        this.modelName = state.model;\n\n        this.options = options;\n        this.editable = options.editable;\n        this.deletable = options.deletable;\n        this.read_only_mode = options.read_only_mode;\n        this.selectionMode = options.selectionMode;\n        this.qweb = options.qweb;\n        this.subWidgets = {};\n\n        this._setState(state);\n        // avoid quick multiple clicks\n        this._onKanbanActionClicked = _.debounce(this._onKanbanActionClicked, 300, true);\n    },\n    /**\n     * @override\n     */\n    start: function () {\n        return Promise.all([this._super.apply(this, arguments), this._render()]);\n    },\n    /**\n     * @override\n     */\n    destroy: function () {\n        this._super(...arguments);\n        WidgetAdapterMixin.destroy.call(this);\n    },\n    /**\n     * Called each time the record is attached to the DOM.\n     */\n    on_attach_callback: function () {\n        this.isInDOM = true;\n        _.invoke(this.subWidgets, 'on_attach_callback');\n        // call on_attach_callback on child components (tag <widget>)\n        WidgetAdapterMixin.on_attach_callback.call(this);\n    },\n    /**\n     * Called each time the record is detached from the DOM.\n     */\n    on_detach_callback: function () {\n        this.isInDOM = false;\n        _.invoke(this.subWidgets, 'on_detach_callback');\n        // call on_detach_callback on child components (tag <widget>)\n        WidgetAdapterMixin.on_detach_callback.call(this);\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Check if a html content is empty. If there are only formatting tags with\n     * style attributes or a void content. Famous use case is\n     * '<p style=\"...\" class=\"..\"><br></p>' added by some web editor(s).\n     * Note that because the use of this method is limited, we ignore the cases\n     * like there's one <img> tag in the content. In such case, even if it's the\n     * actual content, we consider it empty.\n     *\n     * @param {string} htmlContent\n     * @returns {boolean} true if no content found or if containing only formatting tags\n     */\n    isHtmlEmpty: function (htmlContent) {\n        let div = document.createElement('div');\n        div.innerHTML = htmlContent || \"\";\n        return div.innerText.trim() === \"\";\n    },\n    /**\n     * Re-renders the record with a new state\n     *\n     * @param {Object} state\n     * @returns {Promise}\n     */\n    update: function (state) {\n        // detach the widgets because the record will empty its $el, which will\n        // remove all event handlers on its descendants, and we want to keep\n        // those handlers alive as we will re-use these widgets\n        _.invoke(_.pluck(this.subWidgets, '$el'), 'detach');\n        this._setState(state);\n        return this._render();\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     */\n    _attachTooltip: function () {\n        var self = this;\n        this.$('[tooltip]').each(function () {\n            var $el = $(this);\n            var tooltip = $el.attr('tooltip');\n            if (tooltip) {\n                $el.tooltip({\n                    title: self.qweb.render(tooltip, self.qweb_context)\n                });\n            }\n        });\n    },\n    /**\n     * @private\n     * @param {string} d a stringified domain\n     * @returns {boolean} the domain evaluted with the current values\n     */\n    _computeDomain: function (d) {\n        return new Domain(d).compute(this.state.evalContext);\n    },\n    /**\n     * Generates the color classname from a given variable\n     *\n     * @private\n     * @param {number | string} variable\n     * @return {string} the classname\n     */\n    _getColorClassname: function (variable) {\n        var color = this._getColorID(variable);\n        return 'oe_kanban_color_' + color;\n    },\n    /**\n     * Computes a color id between 0 and 10 from a given value\n     *\n     * @private\n     * @param {number | string} variable\n     * @returns {integer} the color id\n     */\n    _getColorID: function (variable) {\n        if (typeof variable === 'number') {\n            return Math.round(variable) % NB_KANBAN_RECORD_COLORS;\n        }\n        if (typeof variable === 'string') {\n            var index = 0;\n            for (var i = 0; i < variable.length; i++) {\n                index += variable.charCodeAt(i);\n            }\n            return index % NB_KANBAN_RECORD_COLORS;\n        }\n        return 0;\n    },\n    /**\n     * Computes a color name from value\n     *\n     * @private\n     * @param {number | string} variable\n     * @returns {integer} the color name\n     */\n    _getColorname: function (variable) {\n        var colorID = this._getColorID(variable);\n        return KANBAN_RECORD_COLORS[colorID];\n    },\n    file_type_magic_word: {\n        '/': 'jpg',\n        'R': 'gif',\n        'i': 'png',\n        'P': 'svg+xml',\n    },\n    /**\n     * @private\n     * @param {string} model the name of the model\n     * @param {string} field the name of the field\n     * @param {integer} id the id of the resource\n     * @param {string} placeholder\n     * @returns {string} the url of the image\n     */\n    _getImageURL: function (model, field, id, placeholder) {\n        id = (_.isArray(id) ? id[0] : id) || null;\n        var isCurrentRecord = this.modelName === model && (this.recordData.id === id || (!this.recordData.id && !id));\n        var url;\n        if (isCurrentRecord && this.record[field] && this.record[field].raw_value && !utils.is_bin_size(this.record[field].raw_value)) {\n            // Use magic-word technique for detecting image type\n            url = 'data:image/' + this.file_type_magic_word[this.record[field].raw_value[0]] + ';base64,' + this.record[field].raw_value;\n        } else if (placeholder && (!model || !field || !id || (isCurrentRecord && this.record[field] && !this.record[field].raw_value))) {\n            url = placeholder;\n        } else {\n            var session = this.getSession();\n            var params = {\n                model: model,\n                field: field,\n                id: id\n            };\n            if (isCurrentRecord) {\n                params.unique = this.record.__last_update && this.record.__last_update.value.replace(/[^0-9]/g, '');\n            }\n            url = session.url('/web/image', params);\n        }\n        return url;\n    },\n    /**\n     * Triggers up an event to open the record\n     *\n     * @private\n     */\n    _openRecord: function () {\n        var editMode = this.$el.hasClass('oe_kanban_global_click_edit');\n        this.trigger_up('open_record', {\n            id: this.db_id,\n            mode: editMode ? 'edit' : 'readonly',\n        });\n    },\n    /**\n     * Processes each 'field' tag and replaces it by the specified widget, if\n     * any, or directly by the formatted value\n     *\n     * @private\n     */\n    _processFields: function () {\n        var self = this;\n        this.$(\"field\").each(function () {\n            var $field = $(this);\n            var field_name = $field.attr(\"name\");\n            var field_widget = $field.attr(\"widget\");\n\n            // a widget is specified for that field or a field is a many2many ;\n            // in this latest case, we want to display the widget many2manytags\n            // even if it is not specified in the view.\n            if (field_widget || self.fields[field_name].type === 'many2many') {\n                var widget = self.subWidgets[field_name];\n                if (!widget) {\n                    // the widget doesn't exist yet, so instanciate it\n                    var Widget = self.fieldsInfo[field_name].Widget;\n                    if (Widget) {\n                        widget = self._processWidget($field, field_name, Widget);\n                        self.subWidgets[field_name] = widget;\n                    } else if (config.isDebug()) {\n                        // the widget is not implemented\n                        $field.replaceWith($('<span>', {\n                            text: _.str.sprintf(_t('[No widget %s]'), field_widget),\n                        }));\n                    }\n                } else {\n                    // a widget already exists for that field, so reset it with the new state\n                    widget.reset(self.state);\n                    $field.replaceWith(widget.$el);\n                    if (self.isInDOM && widget.on_attach_callback) {\n                        widget.on_attach_callback();\n                    }\n                }\n            } else {\n                self._processField($field, field_name);\n            }\n        });\n    },\n    /**\n     * Replace a field by its formatted value.\n     *\n     * @private\n     * @param {JQuery} $field\n     * @param {String} field_name\n     * @returns {Jquery} the modified node\n     */\n    _processField: function ($field, field_name) {\n        // no widget specified for that field, so simply use a formatter\n        // note: we could have used the widget corresponding to the field's type, but\n        // it is much more efficient to use a formatter\n        var field = this.fields[field_name];\n        var value = this.recordData[field_name];\n        var options = { data: this.recordData, forceString: true };\n        var formatted_value = field_utils.format[field.type](value, field, options);\n        var $result = $('<span>', {\n            text: formatted_value,\n        });\n        $field.replaceWith($result);\n        this._setFieldDisplay($result, field_name);\n        return $result;\n    },\n    /**\n     * Replace a field by its corresponding widget.\n     *\n     * @private\n     * @param {JQuery} $field\n     * @param {String} field_name\n     * @param {Class} Widget\n     * @returns {Widget} the widget instance\n     */\n    _processWidget: function ($field, field_name, Widget) {\n        // some field's attrs might be record dependent (they start with\n        // 't-att-') and should thus be evaluated, which is done by qweb\n        // we here replace those attrs in the dict of attrs of the state\n        // by their evaluted value, to make it transparent from the\n        // field's widgets point of view\n        // that dict being shared between records, we don't modify it\n        // in place\n        var self = this;\n        var attrs = Object.create(null);\n        _.each(this.fieldsInfo[field_name], function (value, key) {\n            if (_.str.startsWith(key, 't-att-')) {\n                key = key.slice(6);\n                value = $field.attr(key);\n            }\n            attrs[key] = value;\n        });\n        var options = _.extend({}, this.options, { attrs: attrs });\n        let widget;\n        let def;\n        if (utils.isComponent(Widget)) {\n            widget = new FieldWrapper(this, Widget, {\n                fieldName: field_name,\n                record: this.state,\n                options: options,\n            });\n            def = widget.mount(document.createDocumentFragment())\n                .then(() => {\n                    $field.replaceWith(widget.$el);\n                });\n        } else {\n            widget = new Widget(this, field_name, this.state, options);\n            def = widget.replace($field);\n        }\n        this.defs.push(def);\n        def.then(function () {\n            self._setFieldDisplay(widget.$el, field_name);\n        });\n        return widget;\n    },\n    _processWidgets: function () {\n        var self = this;\n        this.$(\"widget\").each(function () {\n            var $field = $(this);\n\n            const attrs = {};\n            for (const attr of $field[0].attributes) {\n                attrs[attr.name] = attr.value;\n            }\n            const options = Object.assign({}, self.options, { attrs });\n\n            const name = $field.attr('name');\n            const Widget = widgetRegistryOwl.get(name) || widgetRegistry.get(name);\n            const legacy = !(Widget.prototype instanceof owl.Component);\n            let widget;\n            if (legacy) {\n                widget = new Widget(self, self.state, options);\n            } else {\n                widget = new WidgetWrapper(this, Widget, { record: self.state, options });\n            }\n            // Prepare widget rendering and save the related promise\n            let def;\n            if (legacy) {\n                def = widget._widgetRenderAndInsert(function () { });\n            } else {\n                def = widget.mount(document.createDocumentFragment());\n            }\n\n            self.defs.push(def);\n            def.then(function () {\n                $field.replaceWith(widget.$el);\n                widget.$el.addClass('o_widget');\n            });\n        });\n    },\n    /**\n     * Renders the record\n     *\n     * @returns {Promise}\n     */\n    _render: function () {\n        this.defs = [];\n        // call 'on_detach_callback' on each subwidget as they will be removed\n        // from the DOM at the next line\n        _.invoke(this.subWidgets, 'on_detach_callback');\n        this._replaceElement(this.qweb.render('kanban-box', this.qweb_context));\n        this.$el.addClass('o_kanban_record').attr(\"tabindex\", 0);\n        this.$el.attr('role', 'article');\n        this.$el.data('record', this);\n        // forcefully add class oe_kanban_global_click to have clickable record always to select it\n        if (this.selectionMode) {\n            this.$el.addClass('oe_kanban_global_click');\n        }\n        if (this.$el.hasClass('oe_kanban_global_click') ||\n            this.$el.hasClass('oe_kanban_global_click_edit')) {\n            this.$el.on('click', this._onGlobalClick.bind(this));\n            this.$el.on('keydown', this._onKeyDownCard.bind(this));\n        } else {\n            this.$el.on('keydown', this._onKeyDownOpenFirstLink.bind(this));\n        }\n        this._processFields();\n        this._processWidgets();\n        this._setupColor();\n        this._setupColorPicker();\n        this._attachTooltip();\n\n        // We use boostrap tooltips for better and faster display\n        this.$('span.o_tag').tooltip({ delay: { 'show': 50 } });\n\n        return Promise.all(this.defs);\n    },\n    /**\n     * Sets cover image on a kanban card through an attachment dialog.\n     *\n     * @private\n     * @param {string} fieldName field used to set cover image\n     * @param {boolean} autoOpen automatically open the file choser if there are no attachments\n     */\n    _setCoverImage: function (fieldName, autoOpen) {\n        var self = this;\n        this._rpc({\n            model: 'ir.attachment',\n            method: 'search_read',\n            domain: [\n                ['res_model', '=', this.modelName],\n                ['res_id', '=', this.id],\n                ['mimetype', 'ilike', 'image']\n            ],\n            fields: ['id', 'name'],\n        }).then(function (attachmentIds) {\n            self.imageUploadID = _.uniqueId('o_cover_image_upload');\n            self.accepted_file_extensions = 'image/*';  // prevent uploading of other file types\n            self.attachment_count = attachmentIds.length;\n            var coverId = self.record[fieldName] && self.record[fieldName].raw_value;\n            var $content = $(QWeb.render('KanbanView.SetCoverModal', {\n                coverId: coverId,\n                attachmentIds: attachmentIds,\n                widget: self,\n            }));\n            var $imgs = $content.find('.o_kanban_cover_image');\n            var dialog = new Dialog(self, {\n                title: _t(\"Set a Cover Image\"),\n                $content: $content,\n                buttons: [{\n                    text: _t(\"Select\"),\n                    classes: attachmentIds.length ? 'btn-primary' : 'd-none',\n                    close: true,\n                    disabled: !coverId,\n                    click: function () {\n                        var $img = $imgs.filter('.o_selected').find('img');\n                        var data = {};\n                        data[fieldName] = {\n                            id: $img.data('id'),\n                            display_name: $img.data('name')\n                        };\n                        self.trigger_up('kanban_record_update', data);\n                    },\n                }, {\n                    text: _t('Upload and Set'),\n                    classes: attachmentIds.length ? '' : 'btn-primary',\n                    close: false,\n                    click: function () {\n                        $content.find('input.o_input_file').click();\n                    },\n                }, {\n                    text: _t(\"Remove Cover Image\"),\n                    classes: coverId ? '' : 'd-none',\n                    close: true,\n                    click: function () {\n                        var data = {};\n                        data[fieldName] = false;\n                        self.trigger_up('kanban_record_update', data);\n                    },\n                }, {\n                    text: _t(\"Discard\"),\n                    close: true,\n                }],\n            });\n            dialog.opened().then(function () {\n                var $selectBtn = dialog.$footer.find('.btn-primary');\n                if (autoOpen && !self.attachment_count) {\n                    $selectBtn.click();\n                }\n\n                $content.on('click', '.o_kanban_cover_image', function (ev) {\n                    $imgs.not(ev.currentTarget).removeClass('o_selected');\n                    $selectBtn.prop('disabled', !$(ev.currentTarget).toggleClass('o_selected').hasClass('o_selected'));\n                });\n\n                $content.on('dblclick', '.o_kanban_cover_image', function (ev) {\n                    var $img  = $(ev.currentTarget).find('img');\n                    var data = {};\n                    data[fieldName] = {\n                        id: $img.data('id'),\n                        display_name: $img.data('name')\n                    };\n                    self.trigger_up('kanban_record_update', data);\n                    dialog.close();\n                });\n                $content.on('change', 'input.o_input_file', function () {\n                    $content.find('form.o_form_binary_form').submit();\n                });\n                $(window).on(self.imageUploadID, function () {\n                    var images = Array.prototype.slice.call(arguments, 1);\n                    var data = {};\n                    data[fieldName] = {\n                        id: images[0].id,\n                        display_name: images[0].filename\n                    };\n                    self.trigger_up('kanban_record_update', data);\n                    dialog.close();\n                });\n            });\n            dialog.open();\n        });\n    },\n    /**\n     * Sets particular classnames on a field $el according to the\n     * field's attrs (display or bold attributes)\n     *\n     * @private\n     * @param {JQuery} $el\n     * @param {string} fieldName\n     */\n    _setFieldDisplay: function ($el, fieldName) {\n        // attribute display\n        if (this.fieldsInfo[fieldName].display === 'right') {\n            $el.addClass('float-right');\n        } else if (this.fieldsInfo[fieldName].display === 'full') {\n            $el.addClass('o_text_block');\n        }\n\n        // attribute bold\n        if (this.fieldsInfo[fieldName].bold) {\n            $el.addClass('o_text_bold');\n        }\n    },\n    /**\n     * Sets internal values of the kanban record according to the given state\n     *\n     * @private\n     * @param {Object} recordState\n     */\n    _setState: function (recordState) {\n        this.state = recordState;\n        this.id = recordState.res_id;\n        this.db_id = recordState.id;\n        this.recordData = recordState.data;\n        this.record = this._transformRecord(recordState.data);\n        this.qweb_context = {\n            context: this.state.getContext(),\n            kanban_image: this._getImageURL.bind(this),\n            kanban_color: this._getColorClassname.bind(this),\n            kanban_getcolor: this._getColorID.bind(this),\n            kanban_getcolorname: this._getColorname.bind(this),\n            kanban_compute_domain: this._computeDomain.bind(this),\n            selection_mode: this.selectionMode,\n            read_only_mode: this.read_only_mode,\n            record: this.record,\n            user_context: this.getSession().user_context,\n            widget: this,\n        };\n    },\n    /**\n     * If an attribute `color` is set on the kanban record, adds the\n     * corresponding color classname.\n     *\n     * @private\n     */\n    _setupColor: function () {\n        var color_field = this.$el.attr('color');\n        if (color_field && color_field in this.fields) {\n            var colorHelp = _.str.sprintf(_t(\"Card color: %s\"), this._getColorname(this.recordData[color_field]));\n            var colorClass = this._getColorClassname(this.recordData[color_field]);\n            this.$el.addClass(colorClass);\n            this.$el.prepend('<span title=\"' + colorHelp + '\" aria-label=\"' + colorHelp + '\" role=\"img\" class=\"oe_kanban_color_help\"/>');\n        }\n    },\n    /**\n     * Renders the color picker in the kanban record, and binds the event handler\n     *\n     * @private\n     */\n    _setupColorPicker: function () {\n        var $colorpicker = this.$('ul.oe_kanban_colorpicker');\n        if (!$colorpicker.length) {\n            return;\n        }\n        $colorpicker.html(QWeb.render('KanbanColorPicker', { colors: KANBAN_RECORD_COLORS}));\n        $colorpicker.on('click', 'a', this._onColorChanged.bind(this));\n    },\n    /**\n     * Builds an object containing the formatted record data used in the\n     * template\n     *\n     * @private\n     * @param {Object} recordData\n     * @returns {Object} transformed record data\n     */\n    _transformRecord: function (recordData) {\n        const new_record = Object.create(null);\n        for (const name of this.state.getFieldNames()) {\n            const value = recordData[name];\n            const r = new_record[name] = _.clone(this.fields[name] || {});\n            const formatter = r.type ? field_utils.format[r.type] : _.identity;\n\n            r.raw_value = value;\n            r.value = formatter(value, this.fields[name], recordData, this.state);\n            switch (r.type) {\n            case 'date': case 'datetime':\n                r.raw_value = value && value.toDate();\n                break;\n            case 'one2many': case 'many2many':\n                r.raw_value = value.count ? value.res_ids : [];\n                break;\n            case 'many2one':\n                r.raw_value = value && value.res_id || false;\n                break;\n            case 'html': // or should this be in `format` instead of _.identity?\n                r.value = utils.Markup(value);\n                break;\n            }\n        }\n        return new_record;\n    },\n    /**\n     * Notifies the controller that the record has changed\n     *\n     * @private\n     * @param {Object} data the new values\n     */\n    _updateRecord: function (data) {\n        this.trigger_up('kanban_record_update', data);\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {MouseEvent} event\n     */\n    _onColorChanged: function (event) {\n        event.preventDefault();\n        var data = {};\n        var color_field = $(event.delegateTarget).data('field') || 'color';\n        data[color_field] = $(event.currentTarget).data('color');\n        this.trigger_up('kanban_record_update', data);\n    },\n    /**\n     * @private\n     * @param {MouseEvent} event\n     */\n    _onGlobalClick: function (event) {\n        if ($(event.target).parents('.o_dropdown_kanban').length) {\n            return;\n        }\n        if (this.$el.hasClass('o_currently_dragged')) {\n            // this record is currently being dragged and dropped, so we do not\n            // want to open it.\n            return;\n        }\n        var trigger = true;\n        var elem = event.target;\n        var ischild = true;\n        var children = [];\n        while (elem) {\n            var events = $._data(elem, 'events');\n            if (elem === event.currentTarget) {\n                ischild = false;\n            }\n            var test_event = events && events.click && (events.click.length > 1 || events.click[0].namespace !== 'bs.tooltip');\n            var testLinkWithHref = elem.nodeName.toLowerCase() === 'a' && elem.href;\n            if (ischild) {\n                children.push(elem);\n                if (test_event || testLinkWithHref) {\n                    // Do not trigger global click if one child has a click\n                    // event registered (or it is a link with href)\n                    trigger = false;\n                }\n            }\n            if (trigger && test_event) {\n                _.each(events.click, function (click_event) {\n                    if (click_event.selector) {\n                        // For each parent of original target, check if a\n                        // delegated click is bound to any previously found children\n                        _.each(children, function (child) {\n                            if ($(child).is(click_event.selector)) {\n                                trigger = false;\n                            }\n                        });\n                    }\n                });\n            }\n            elem = elem.parentElement;\n        }\n        if (trigger) {\n            this._openRecord();\n        }\n    },\n    /**\n     * @private\n     * @param {MouseEvent} event\n     */\n    _onKanbanActionClicked: function (event) {\n        event.preventDefault();\n\n        var $action = $(event.currentTarget);\n        var type = $action.data('type') || 'button';\n\n        switch (type) {\n            case 'edit':\n                this.trigger_up('open_record', { id: this.db_id, mode: 'edit' });\n                break;\n            case 'open':\n                this.trigger_up('open_record', { id: this.db_id });\n                break;\n            case 'delete':\n                this.trigger_up('kanban_record_delete', { id: this.db_id, record: this });\n                break;\n            case 'action':\n            case 'object':\n                var attrs = $action.data();\n                attrs.confirm = $action.attr('confirm');\n                this.trigger_up('button_clicked', {\n                    attrs: attrs,\n                    record: this.state,\n                });\n                break;\n            case 'set_cover':\n                var fieldName = $action.data('field');\n                var autoOpen = $action.data('auto-open');\n                if (this.fields[fieldName].type === 'many2one' &&\n                    this.fields[fieldName].relation === 'ir.attachment' &&\n                    this.fieldsInfo[fieldName].widget === 'attachment_image') {\n                    this._setCoverImage(fieldName, autoOpen);\n                } else {\n                    var warning = _.str.sprintf(_t('Could not set the cover image: incorrect field (\"%s\") is provided in the view.'), fieldName);\n                    this.displayNotification({ title: warning, type: 'danger' });\n                }\n                break;\n            default:\n                this.displayNotification({ message: _t(\"Kanban: no action for type: \") + type, type: 'danger' });\n        }\n    },\n    /**\n     * This event is linked to the kanban card when there is a global_click\n     * class on this card\n     *\n     * @private\n     * @param {KeyDownEvent} event\n     */\n    _onKeyDownCard: function (event) {\n        switch (event.keyCode) {\n            case $.ui.keyCode.ENTER:\n                if ($(event.target).hasClass('oe_kanban_global_click')) {\n                    event.preventDefault();\n                    this._onGlobalClick(event);\n                    break;\n                }\n        }\n    },\n    /**\n     * This event is linked ot the kanban card when there is no global_click\n     * class on the card\n     *\n     * @private\n     * @param {KeyDownEvent} event\n     */\n    _onKeyDownOpenFirstLink: function (event) {\n        switch (event.keyCode) {\n            case $.ui.keyCode.ENTER:\n                event.preventDefault();\n                $(event.target).find('a, button').first().click();\n                break;\n        }\n    },\n    /**\n     * Toggles the configuration panel of the record\n     *\n     * @private\n     * @param {MouseEvent} event\n     */\n    _onManageTogglerClicked: function (event) {\n        event.preventDefault();\n        this.$el.parent().find('.o_kanban_record').not(this.$el).removeClass('o_dropdown_open');\n        this.$el.toggleClass('o_dropdown_open');\n        var colorClass = this._getColorClassname(this.recordData.color || 0);\n        this.$('.o_kanban_manage_button_section').toggleClass(colorClass);\n    },\n});\n\nreturn KanbanRecord;\n\n});\n", "odoo.define('web.kanban_record_quick_create', function (require) {\n\"use strict\";\n\n/**\n * This file defines the RecordQuickCreate widget for Kanban. It allows to\n * create kanban records directly from the Kanban view.\n */\n\nvar core = require('web.core');\nvar QuickCreateFormView = require('web.QuickCreateFormView');\nconst session = require('web.session');\nvar Widget = require('web.Widget');\n\nvar RecordQuickCreate = Widget.extend({\n    className: 'o_kanban_quick_create',\n    custom_events: {\n        add: '_onAdd',\n        cancel: '_onCancel',\n    },\n    events: {\n        'click .o_kanban_add': '_onAddClicked',\n        'click .o_kanban_edit': '_onEditClicked',\n        'click .o_kanban_cancel': '_onCancelClicked',\n        'mousedown': '_onMouseDown',\n    },\n    mouseDownInside: false,\n\n    /**\n     * @override\n     * @param {Widget} parent\n     * @param {Object} options\n     * @param {Object} options.context\n     * @param {string|null} options.formViewRef\n     * @param {string} options.model\n     */\n    init: function (parent, options) {\n        this._super.apply(this, arguments);\n        this.context = options.context;\n        this.formViewRef = options.formViewRef;\n        this.model = options.model;\n        this._disabled = false; // to prevent from creating multiple records (e.g. on double-clicks)\n    },\n    /**\n     * Loads the form fieldsView (if not provided), instantiates the form view\n     * and starts the form controller.\n     *\n     * @override\n     */\n    willStart: function () {\n        var self = this;\n        var superWillStart = this._super.apply(this, arguments);\n        var viewsLoaded;\n        if (this.formViewRef) {\n            var views = [[false, 'form']];\n            var context = _.extend({}, this.context, {\n                form_view_ref: this.formViewRef,\n            });\n            viewsLoaded = this.loadViews(this.model, context, views);\n        } else {\n            var fieldsView = {};\n            fieldsView.arch = '<form>' +\n                '<field name=\"display_name\" placeholder=\"Title\" modifiers=\\'{\"required\": true}\\'/>' +\n            '</form>';\n            var fields = {\n                display_name: {string: 'Display name', type: 'char'},\n            };\n            fieldsView.fields = fields;\n            fieldsView.viewFields = fields;\n            viewsLoaded = Promise.resolve({form: fieldsView});\n        }\n        viewsLoaded = viewsLoaded.then(function (fieldsViews) {\n            var formView = new QuickCreateFormView(fieldsViews.form, {\n                context: self.context,\n                modelName: self.model,\n                userContext: session.user_context,\n            });\n            return formView.getController(self).then(function (controller) {\n                self.controller = controller;\n                return self.controller.appendTo(document.createDocumentFragment());\n            });\n        });\n        return Promise.all([superWillStart, viewsLoaded]);\n    },\n    /**\n     * @override\n     */\n    start: function () {\n        this.$el.append(this.controller.$el);\n        this.controller.renderButtons(this.$el);\n\n        // focus the first field\n        this.controller.autofocus();\n\n        // destroy the quick create when the user clicks outside\n        core.bus.on('click', this, this._onWindowClicked);\n\n        return this._super.apply(this, arguments);\n    },\n    /**\n     * Called when the quick create is appended into the DOM.\n     */\n    on_attach_callback: function () {\n        if (this.controller) {\n            this.controller.autofocus();\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Cancels the quick creation if the record isn't dirty, i.e. if no changes\n     * have been made yet\n     *\n     * @private\n     * @returns {Promise}\n     */\n    cancel: function () {\n        var self = this;\n        return this.controller.commitChanges().then(function () {\n            if (!self.controller.isDirty()) {\n                self._cancel();\n            }\n        });\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {Object} [options]\n     * @param {boolean} [options.openRecord] set to true to directly open the\n     *   newly created record in a form view (in edit mode)\n     */\n    _add: function (options) {\n        var self = this;\n        if (this._disabled) {\n            // don't do anything if we are already creating a record\n            return;\n        }\n        // disable the widget to prevent the user from creating multiple records\n        // with the current values ; if the create works, the widget will be\n        // destroyed and another one will be instantiated, so there is no need\n        // to re-enable it in that case\n        this._disableQuickCreate();\n        this.controller.commitChanges().then(function () {\n            var canBeSaved = self.controller.canBeSaved();\n            if (canBeSaved) {\n                self.trigger_up('quick_create_add_record', {\n                    openRecord: options && options.openRecord || false,\n                    values: self.controller.getChanges(),\n                    onFailure: self._enableQuickCreate.bind(self),\n                });\n            } else {\n                self._enableQuickCreate();\n            }\n        }).guardedCatch(this._enableQuickCreate.bind(this));\n    },\n    /**\n     * Notifies the environment that the quick creation must be cancelled\n     *\n     * @private\n     * @returns {Promise}\n     */\n    _cancel: function () {\n        this.trigger_up('cancel_quick_create');\n    },\n    /**\n     * Disable the widget to indicate the user that it can't interact with it.\n     * This function must be called when a record is being created, to prevent\n     * it from being created twice.\n     *\n     * Note that if the record creation works as expected, there is no need to\n     * re-enable the widget as it will be destroyed anyway (and replaced by a\n     * new instance).\n     *\n     * @private\n     */\n    _disableQuickCreate: function () {\n        this._disabled = true; // ensures that the record won't be created twice\n        this.$el.addClass('o_disabled');\n        this.$('input:not(:disabled)')\n            .addClass('o_temporarily_disabled')\n            .attr('disabled', 'disabled');\n    },\n    /**\n     * Re-enable the widget to allow the user to create again.\n     *\n     * @private\n     */\n    _enableQuickCreate: function () {\n        this._disabled = false; // allows to create again\n        this.$el.removeClass('o_disabled');\n        this.$('input.o_temporarily_disabled')\n            .removeClass('o_temporarily_disabled')\n            .attr('disabled', false);\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onAdd: function (ev) {\n        ev.stopPropagation();\n        this._add();\n    },\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onAddClicked: function (ev) {\n        ev.stopPropagation();\n        this._add();\n    },\n    /**\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onCancel: function (ev) {\n        ev.stopPropagation();\n        this._cancel();\n    },\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onCancelClicked: function (ev) {\n        ev.stopPropagation();\n        this._cancel();\n    },\n    /**\n     * Validates the quick creation and directly opens the record in a form\n     * view in edit mode.\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onEditClicked: function (ev) {\n        ev.stopPropagation();\n        this._add({openRecord: true});\n    },\n    /**\n     * When a click happens outside the quick create, we want to close the quick\n     * create.\n     *\n     * This is quite tricky, because in some cases a click is performed outside\n     * the quick create, but is still related to it (e.g. click in a dialog\n     * opened from the quick create).\n     *\n     * @param {MouseEvent} ev\n     */\n    _onWindowClicked: function (ev) {\n        var mouseDownInside = this.mouseDownInside;\n\n        this.mouseDownInside = false;\n        // ignore clicks if the quick create is not in the dom\n        if (!document.contains(this.el)) {\n            return;\n        }\n\n        // ignore clicks on elements that open the quick create widget, to\n        // prevent from closing quick create widget that has just been opened\n        if ($(ev.target).closest('.o-kanban-button-new, .o_kanban_quick_add').length) {\n            return;\n        }\n\n        // ignore clicks in autocomplete dropdowns\n        if ($(ev.target).parents('.ui-autocomplete').length) {\n            return;\n        }\n\n        // ignore clicks in modals\n        if ($(ev.target).closest('.modal').length) {\n            return;\n        }\n\n        // ignore clicks while a modal is just about to open\n        if ($(document.body).hasClass('modal-open')) {\n            return;\n        }\n\n        // ignore clicks if target is no longer in dom (e.g., a click on the\n        // 'delete' trash icon of a m2m tag)\n        if (!document.contains(ev.target)) {\n            return;\n        }\n\n        // ignore clicks if target is inside the quick create\n        if (this.el.contains(ev.target) || this.el === ev.target || mouseDownInside) {\n            return;\n        }\n\n        this.cancel();\n    },\n    /**\n     * Detects if the click is originally from the quick create\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onMouseDown: function(ev){\n        this.mouseDownInside = true;\n    }\n});\n\nreturn RecordQuickCreate;\n\n});\n", "odoo.define('web.KanbanRenderer', function (require) {\n\"use strict\";\n\nvar BasicRenderer = require('web.BasicRenderer');\nvar ColumnQuickCreate = require('web.kanban_column_quick_create');\nvar config = require('web.config');\nvar core = require('web.core');\nvar KanbanColumn = require('web.KanbanColumn');\nvar KanbanRecord = require('web.KanbanRecord');\nvar QWeb = require('web.QWeb');\nvar session = require('web.session');\nvar utils = require('web.utils');\nvar viewUtils = require('web.viewUtils');\n\nvar qweb = core.qweb;\nvar _t = core._t;\n\nfunction findInNode(node, predicate) {\n    if (predicate(node)) {\n        return node;\n    }\n    if (!node.children) {\n        return undefined;\n    }\n    for (var i = 0; i < node.children.length; i++) {\n        if (findInNode(node.children[i], predicate)) {\n            return node.children[i];\n        }\n    }\n}\n\nfunction qwebAddIf(node, condition) {\n    if (node.attrs[qweb.prefix + '-if']) {\n        condition = _.str.sprintf(\"(%s) and (%s)\", node.attrs[qweb.prefix + '-if'], condition);\n    }\n    node.attrs[qweb.prefix + '-if'] = condition;\n}\n\nfunction transformQwebTemplate(node, fields) {\n    // Process modifiers\n    if (node.tag && node.attrs.modifiers) {\n        var modifiers = node.attrs.modifiers || {};\n        if (modifiers.invisible) {\n            qwebAddIf(node, _.str.sprintf(\"!kanban_compute_domain(%s)\", JSON.stringify(modifiers.invisible)));\n        }\n    }\n    switch (node.tag) {\n        case 'button':\n        case 'a':\n            var type = node.attrs.type || '';\n            if (_.indexOf('action,object,edit,open,delete,url,set_cover'.split(','), type) !== -1) {\n                _.each(node.attrs, function (v, k) {\n                    if (_.indexOf('icon,type,name,args,string,context,states,kanban_states'.split(','), k) !== -1) {\n                        node.attrs['data-' + k] = v;\n                        delete(node.attrs[k]);\n                    }\n                });\n                if (node.attrs['data-string']) {\n                    node.attrs.title = node.attrs['data-string'];\n                }\n                if (node.tag === 'a' && node.attrs['data-type'] !== \"url\") {\n                    node.attrs.href = '#';\n                } else {\n                    node.attrs.type = 'button';\n                }\n\n                var action_classes = \" oe_kanban_action oe_kanban_action_\" + node.tag;\n                if (node.attrs['t-attf-class']) {\n                    node.attrs['t-attf-class'] += action_classes;\n                } else if (node.attrs['t-att-class']) {\n                    node.attrs['t-att-class'] += \" + '\" + action_classes + \"'\";\n                } else {\n                    node.attrs['class'] = (node.attrs['class'] || '') + action_classes;\n                }\n            }\n            break;\n    }\n    if (node.children) {\n        for (var i = 0, ii = node.children.length; i < ii; i++) {\n            transformQwebTemplate(node.children[i], fields);\n        }\n    }\n}\n\nvar KanbanRenderer = BasicRenderer.extend({\n    className: 'o_kanban_view',\n    config: { // the KanbanRecord and KanbanColumn classes to use (may be overridden)\n        KanbanColumn: KanbanColumn,\n        KanbanRecord: KanbanRecord,\n    },\n    custom_events: _.extend({}, BasicRenderer.prototype.custom_events || {}, {\n        close_quick_create: '_onCloseQuickCreate',\n        cancel_quick_create: '_onCancelQuickCreate',\n        set_progress_bar_state: '_onSetProgressBarState',\n        start_quick_create: '_onStartQuickCreate',\n        quick_create_column_updated: '_onQuickCreateColumnUpdated',\n    }),\n    events:_.extend({}, BasicRenderer.prototype.events || {}, {\n        'keydown .o_kanban_record' : '_onRecordKeyDown'\n    }),\n    sampleDataTargets: [\n        '.o_kanban_counter',\n        '.o_kanban_record',\n        '.o_kanban_toggle_fold',\n        '.o_column_folded',\n        '.o_column_archive_records',\n        '.o_column_unarchive_records',\n    ],\n\n    /**\n     * @override\n     * @param {Object} params\n     * @param {boolean} params.quickCreateEnabled set to false to disable the\n     *   quick create feature\n     */\n    init: function (parent, state, params) {\n        this._super.apply(this, arguments);\n\n        this.widgets = [];\n        this.qweb = new QWeb(config.isDebug(), {_s: session.origin}, false);\n        var templates = findInNode(this.arch, function (n) { return n.tag === 'templates';});\n        transformQwebTemplate(templates, state.fields);\n        this.qweb.add_template(utils.json_node_to_xml(templates));\n        this.examples = params.examples;\n        this.recordOptions = _.extend({}, params.record_options, {\n            qweb: this.qweb,\n            viewType: 'kanban',\n        });\n        this.columnOptions = _.extend({KanbanRecord: this.config.KanbanRecord}, params.column_options);\n        if (this.columnOptions.hasProgressBar) {\n            this.columnOptions.progressBarStates = {};\n        }\n        this.quickCreateEnabled = params.quickCreateEnabled;\n        if (!params.readOnlyMode) {\n            var handleField = _.findWhere(this.state.fieldsInfo.kanban, {widget: 'handle'});\n            this.handleField = handleField && handleField.name;\n        }\n        this._setState(state);\n    },\n    /**\n     * Called each time the renderer is attached into the DOM.\n     */\n    on_attach_callback: function () {\n        this._super(...arguments);\n        if (this.quickCreate) {\n            this.quickCreate.on_attach_callback();\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Displays the quick create record in the requested column (first one by\n     * default)\n     *\n     * @params {string} [groupId] local id of the group in which the quick create\n     *   must be inserted\n     * @returns {Promise}\n     */\n    addQuickCreate: function (groupId) {\n        let kanbanColumn;\n        if (groupId) {\n            kanbanColumn = this.widgets.find(column => column.db_id === groupId);\n        }\n        kanbanColumn = kanbanColumn || this.widgets[0];\n        return kanbanColumn.addQuickCreate();\n    },\n    /**\n     * Focuses the first kanban record\n     */\n    giveFocus: function () {\n        this.$('.o_kanban_record:first').focus();\n    },\n    /**\n     * Toggle fold/unfold the Column quick create widget\n     */\n    quickCreateToggleFold: function () {\n        this.quickCreate.toggleFold();\n        this._toggleNoContentHelper();\n    },\n    /**\n     * Updates a given column with its new state.\n     *\n     * @param {string} localID the column id\n     * @param {Object} columnState\n     * @param {Object} [options]\n     * @param {Object} [options.state] if set, this represents the new state\n     * @param {boolean} [options.openQuickCreate] if true, directly opens the\n     *   QuickCreate widget in the updated column\n     *\n     * @returns {Promise}\n     */\n    updateColumn: function (localID, columnState, options) {\n        var self = this;\n        var KanbanColumn = this.config.KanbanColumn;\n        var newColumn = new KanbanColumn(this, columnState, this.columnOptions, this.recordOptions);\n        var index = _.findIndex(this.widgets, {db_id: localID});\n        var column = this.widgets[index];\n        this.widgets[index] = newColumn;\n        if (options && options.state) {\n            this._setState(options.state);\n        }\n        return newColumn.appendTo(document.createDocumentFragment()).then(function () {\n            var def;\n            if (options && options.openQuickCreate) {\n                def = newColumn.addQuickCreate();\n            }\n            return Promise.resolve(def).then(function () {\n                newColumn.$el.insertAfter(column.$el);\n                self._toggleNoContentHelper();\n                // When a record has been quick created, the new column directly\n                // renders the quick create widget (to allow quick creating several\n                // records in a row). However, as we render this column in a\n                // fragment, the quick create widget can't be correctly focused. So\n                // we manually call on_attach_callback to focus it once in the DOM.\n                newColumn.on_attach_callback();\n                column.destroy();\n            });\n        });\n    },\n    /**\n     * Updates a given record with its new state.\n     *\n     * @param {Object} recordState\n     * @returns {Promise}\n     */\n    updateRecord: function (recordState) {\n        var isGrouped = !!this.state.groupedBy.length;\n        var record;\n\n        if (isGrouped) {\n            // if grouped, this.widgets are kanban columns so we need to find\n            // the kanban record inside\n            _.each(this.widgets, function (widget) {\n                record = record || _.findWhere(widget.records, {\n                    db_id: recordState.id,\n                });\n            });\n        } else {\n            record = _.findWhere(this.widgets, {db_id: recordState.id});\n        }\n\n        if (record) {\n            return record.update(recordState);\n        }\n        return Promise.resolve();\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {DOMElement} currentColumn\n     */\n    _focusOnNextCard: function (currentCardElement) {\n        var nextCard = currentCardElement.nextElementSibling;\n        if (nextCard) {\n            nextCard.focus();\n        }\n    },\n    /**\n     * Tries to give focus to the previous card, and returns true if successful\n     *\n     * @private\n     * @param {DOMElement} currentColumn\n     * @returns {boolean}\n     */\n    _focusOnPreviousCard: function (currentCardElement) {\n        var previousCard = currentCardElement.previousElementSibling;\n        if (previousCard && previousCard.classList.contains(\"o_kanban_record\")) { //previous element might be column title\n            previousCard.focus();\n            return true;\n        }\n    },\n    /**\n     * Returns the default columns for the kanban view example background.\n     * You can override this method to easily customize the column names.\n     *\n     * @private\n     */\n    _getGhostColumns: function () {\n        if (this.examples && this.examples.ghostColumns) {\n            return this.examples.ghostColumns;\n        }\n        return _.map(_.range(1, 5), function (num) {\n            return _.str.sprintf(_t(\"Column %s\"), num);\n        });\n    },\n    /**\n     * Render the Example Ghost Kanban card on the background\n     *\n     * @private\n     * @param {DocumentFragment} fragment\n     */\n    _renderExampleBackground: function (fragment) {\n        var $background = $(qweb.render('KanbanView.ExamplesBackground', {ghostColumns: this._getGhostColumns()}));\n        $background.appendTo(fragment);\n    },\n    /**\n     * Renders empty invisible divs in a document fragment.\n     *\n     * @private\n     * @param {DocumentFragment} fragment\n     * @param {integer} nbDivs the number of divs to append\n     * @param {Object} [options]\n     * @param {string} [options.inlineStyle]\n     */\n    _renderGhostDivs: function (fragment, nbDivs, options) {\n        var ghostDefs = [];\n        for (var $ghost, i = 0; i < nbDivs; i++) {\n            $ghost = $('<div>').addClass('o_kanban_record o_kanban_ghost');\n            if (options && options.inlineStyle) {\n                $ghost.attr('style', options.inlineStyle);\n            }\n            var def = $ghost.appendTo(fragment);\n            ghostDefs.push(def);\n        }\n        return Promise.all(ghostDefs);\n    },\n    /**\n     * Renders an grouped kanban view in a fragment.\n     *\n     * @private\n     * @param {DocumentFragment} fragment\n     */\n    _renderGrouped: function (fragment) {\n        var self = this;\n\n        // Render columns\n        var KanbanColumn = this.config.KanbanColumn;\n        _.each(this.state.data, function (group) {\n            var column = new KanbanColumn(self, group, self.columnOptions, self.recordOptions);\n            var def;\n            if (!group.value) {\n                def = column.prependTo(fragment); // display the 'Undefined' group first\n                self.widgets.unshift(column);\n            } else {\n                def = column.appendTo(fragment);\n                self.widgets.push(column);\n            }\n            self.defs.push(def);\n        });\n\n        // remove previous sorting\n        if(this.$el.sortable('instance') !== undefined) {\n            this.$el.sortable('destroy');\n        }\n        if (this.groupedByM2O) {\n            // Enable column sorting\n            this.$el.sortable({\n                axis: 'x',\n                items: '> .o_kanban_group',\n                handle: '.o_column_title',\n                cursor: 'move',\n                revert: 150,\n                delay: 100,\n                tolerance: 'pointer',\n                forcePlaceholderSize: true,\n                stop: function () {\n                    var ids = [];\n                    self.$('.o_kanban_group').each(function (index, u) {\n                        // Ignore 'Undefined' column\n                        if (_.isNumber($(u).data('id'))) {\n                            ids.push($(u).data('id'));\n                        }\n                    });\n                    self.trigger_up('resequence_columns', {ids: ids});\n                },\n            });\n\n            if (this.createColumnEnabled) {\n                this.quickCreate = new ColumnQuickCreate(this, {\n                    applyExamplesText: this.examples && this.examples.applyExamplesText,\n                    examples: this.examples && this.examples.examples,\n                    isFirstColumn: !self.state.data.length,\n                });\n                this.defs.push(this.quickCreate.appendTo(fragment).then(function () {\n                    // Open it directly if there is no column yet\n                    if (!self.state.data.length) {\n                        self.quickCreate.toggleFold();\n                        self._renderExampleBackground(fragment);\n                    }\n                }));\n            }\n        }\n    },\n    /**\n     * Renders an ungrouped kanban view in a fragment.\n     *\n     * @private\n     * @param {DocumentFragment} fragment\n     */\n    _renderUngrouped: function (fragment) {\n        var self = this;\n        var KanbanRecord = this.config.KanbanRecord;\n        var kanbanRecord;\n        _.each(this.state.data, function (record) {\n            kanbanRecord = new KanbanRecord(self, record, self.recordOptions);\n            self.widgets.push(kanbanRecord);\n            var def = kanbanRecord.appendTo(fragment);\n            self.defs.push(def);\n        });\n\n        // enable record resequencing if there is a field with widget='handle'\n        // and if there is no orderBy (in this case we assume that the widget\n        // has been put on the first default order field of the model), or if\n        // the first orderBy field is the one with widget='handle'\n        var orderedBy = this.state.orderedBy;\n        var hasHandle = this.handleField &&\n                        (orderedBy.length === 0 || orderedBy[0].name === this.handleField);\n        if (hasHandle) {\n            this.$el.sortable({\n                items: '.o_kanban_record:not(.o_kanban_ghost)',\n                cursor: 'move',\n                revert: 0,\n                delay: 0,\n                tolerance: 'pointer',\n                forcePlaceholderSize: true,\n                stop: function (event, ui) {\n                    self._moveRecord(ui.item.data('record').db_id, ui.item.index());\n                },\n            });\n        }\n\n        // append ghost divs to ensure that all kanban records are left aligned\n        var prom = Promise.all(self.defs).then(function () {\n            var options = {};\n            if (kanbanRecord) {\n                options.inlineStyle = kanbanRecord.$el.attr('style');\n            }\n            return self._renderGhostDivs(fragment, 6, options);\n        });\n        this.defs.push(prom);\n    },\n    /**\n     * @override\n     * @private\n     */\n    _renderView: function () {\n        var self = this;\n\n        // render the kanban view\n        var isGrouped = !!this.state.groupedBy.length;\n        var fragment = document.createDocumentFragment();\n        var defs = [];\n        this.defs = defs;\n        if (isGrouped) {\n            this._renderGrouped(fragment);\n        } else {\n            this._renderUngrouped(fragment);\n        }\n        delete this.defs;\n\n        return this._super.apply(this, arguments).then(function () {\n            return Promise.all(defs).then(function () {\n                self.$el.empty();\n                self.$el.toggleClass('o_kanban_grouped', isGrouped);\n                self.$el.toggleClass('o_kanban_ungrouped', !isGrouped);\n                self.$el.append(fragment);\n                self._toggleNoContentHelper();\n            });\n        });\n    },\n    /**\n     * @param {boolean} [remove] if true, the nocontent helper is always removed\n     * @private\n     */\n    _toggleNoContentHelper: function (remove) {\n        var displayNoContentHelper =\n            !remove &&\n            !this._hasContent() &&\n            !!this.noContentHelp &&\n            !(this.quickCreate && !this.quickCreate.folded) &&\n            !this.state.isGroupedByM2ONoColumn;\n\n        var $noContentHelper = this.$('.o_view_nocontent');\n\n        if (displayNoContentHelper && !$noContentHelper.length) {\n            this._renderNoContentHelper();\n        }\n        if (!displayNoContentHelper && $noContentHelper.length) {\n            $noContentHelper.remove();\n        }\n    },\n    /**\n     * Sets the current state and updates some internal attributes accordingly.\n     *\n     * @override\n     */\n    _setState() {\n        this._super(...arguments);\n        const groupedBy = this.state.groupedBy[0];\n        const groupByFieldName = viewUtils.getGroupByField(groupedBy);\n        const field = this.state.fields[groupByFieldName] || {};\n        const fieldInfo = this.state.fieldsInfo.kanban[groupByFieldName] || {};\n\n        const group_by_tooltip = fieldInfo.options && fieldInfo.options.group_by_tooltip;\n        const grouped_by_date = [\"date\", \"datetime\"].includes(field.type);\n        const grouped_by_m2m = field.type === \"many2many\";\n        const grouped_by_m2o = field.type === \"many2one\";\n        const readonly = !!field.readonly || !!fieldInfo.readonly;\n        const relation = (grouped_by_m2o || grouped_by_m2m) && field.relation;\n        const quick_create = this.quickCreateEnabled && viewUtils.isQuickCreateEnabled(this.state);\n\n        // Deactivate the drag'n'drop either:\n        // - if the groupedBy field is readonly (on the field attrs or in the view)\n        // - if the groupedBy field is of type many2many\n        // - for date and datetime if :\n        //   - allowGroupRangeValue is not true\n        const draggable = !readonly && !grouped_by_m2m &&\n            (!grouped_by_date || fieldInfo.allowGroupRangeValue);\n\n        Object.assign(this.columnOptions, {\n            draggable,\n            groupedBy,\n            grouped_by_date,\n            grouped_by_m2o,\n            grouped_by_m2m,\n            group_by_tooltip,\n            quick_create,\n            relation,\n        });\n\n        this.createColumnEnabled = grouped_by_m2o && this.columnOptions.group_creatable;\n        this.groupedByM2O = grouped_by_m2o;\n    },\n    /**\n     * Moves the focus on the first card of the next column in a given direction\n     * This ignores the folded columns and skips over the empty columns.\n     * In ungrouped kanban, moves the focus to the next/previous card\n     *\n     * @param {DOMElement} eventTarget  the target of the keydown event\n     * @param {string} direction  contains either 'LEFT' or 'RIGHT'\n     */\n    _focusOnCardInColumn: function(eventTarget, direction) {\n        var currentColumn = eventTarget.parentElement;\n        var hasSelectedACard = false;\n        var cannotSelectAColumn = false;\n        while (!hasSelectedACard && !cannotSelectAColumn) {\n            var candidateColumn = direction === 'LEFT' ?\n                                    currentColumn.previousElementSibling :\n                                    currentColumn.nextElementSibling ;\n            currentColumn = candidateColumn;\n            if (candidateColumn) {\n                var allCardsOfCandidateColumn =\n                    candidateColumn.getElementsByClassName('o_kanban_record');\n                if (allCardsOfCandidateColumn.length) {\n                    allCardsOfCandidateColumn[0].focus();\n                    hasSelectedACard = true;\n                }\n            }\n            else { // either there are no more columns in the direction or\n                   // this is not a grouped kanban\n                direction === 'LEFT' ?\n                    this._focusOnPreviousCard(eventTarget) :\n                    this._focusOnNextCard(eventTarget);\n                cannotSelectAColumn = true;\n            }\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     */\n    _onCancelQuickCreate: function () {\n        this._toggleNoContentHelper();\n    },\n    /**\n     * Closes the opened quick create widgets in columns\n     *\n     * @private\n     */\n    _onCloseQuickCreate: function () {\n        if (this.state.groupedBy.length) {\n            _.invoke(this.widgets, 'cancelQuickCreate');\n        }\n        this._toggleNoContentHelper();\n    },\n    /**\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onQuickCreateColumnUpdated: function (ev) {\n        ev.stopPropagation();\n        this._toggleNoContentHelper();\n        this._updateExampleBackground();\n    },\n    /**\n     * @private\n     * @param {KeyboardEvent} e\n     */\n    _onRecordKeyDown: function(e) {\n        switch(e.which) {\n            case $.ui.keyCode.DOWN:\n                this._focusOnNextCard(e.currentTarget);\n                e.stopPropagation();\n                e.preventDefault();\n                break;\n            case $.ui.keyCode.UP:\n                const previousFocused = this._focusOnPreviousCard(e.currentTarget);\n                if (!previousFocused) {\n                    this.trigger_up('navigation_move', { direction: 'up' });\n                }\n                e.stopPropagation();\n                e.preventDefault();\n                break;\n            case $.ui.keyCode.RIGHT:\n                this._focusOnCardInColumn(e.currentTarget, 'RIGHT');\n                e.stopPropagation();\n                e.preventDefault();\n                break;\n            case $.ui.keyCode.LEFT:\n                this._focusOnCardInColumn(e.currentTarget, 'LEFT');\n                e.stopPropagation();\n                e.preventDefault();\n                break;\n        }\n    },\n    /**\n     * Updates progressbar internal states (necessary for animations) with\n     * received data.\n     *\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onSetProgressBarState: function (ev) {\n        if (!this.columnOptions.progressBarStates[ev.data.columnID]) {\n            this.columnOptions.progressBarStates[ev.data.columnID] = {};\n        }\n        _.extend(this.columnOptions.progressBarStates[ev.data.columnID], ev.data.values);\n    },\n    /**\n     * Closes the opened quick create widgets in columns\n     *\n     * @private\n     */\n    _onStartQuickCreate: function () {\n        this._toggleNoContentHelper(true);\n    },\n    /**\n     * Hide or display the background example:\n     *  - displayed when quick create column is display and there is no column else\n     *  - hidden otherwise\n     *\n     * @private\n     **/\n    _updateExampleBackground: function () {\n        var $elem = this.$('.o_kanban_example_background_container');\n        if (!this.state.data.length && !$elem.length) {\n            this._renderExampleBackground(this.$el);\n        } else {\n            $elem.remove();\n        }\n    },\n});\n\nreturn KanbanRenderer;\n\n});\n", "odoo.define('web.KanbanView', function (require) {\n\"use strict\";\n\nvar BasicView = require('web.BasicView');\nvar core = require('web.core');\nvar KanbanController = require('web.KanbanController');\nvar kanbanExamplesRegistry = require('web.kanban_examples_registry');\nvar KanbanModel = require('web.KanbanModel');\nvar KanbanRenderer = require('web.KanbanRenderer');\nvar utils = require('web.utils');\n\nvar _lt = core._lt;\n\nvar KanbanView = BasicView.extend({\n    accesskey: \"k\",\n    display_name: _lt(\"Kanban\"),\n    icon: 'fa-th-large',\n    mobile_friendly: true,\n    config: _.extend({}, BasicView.prototype.config, {\n        Model: KanbanModel,\n        Controller: KanbanController,\n        Renderer: KanbanRenderer,\n    }),\n    jsLibs: [],\n    viewType: 'kanban',\n\n    /**\n     * @constructor\n     */\n    init: function (viewInfo, params) {\n        this._super.apply(this, arguments);\n\n        this.loadParams.limit = this.loadParams.limit || 40;\n        this.loadParams.openGroupByDefault = true;\n        this.loadParams.type = 'list';\n        this.noDefaultGroupby = params.noDefaultGroupby;\n        var progressBar;\n        utils.traverse(this.arch, function (n) {\n            var isProgressBar = (n.tag === 'progressbar');\n            if (isProgressBar) {\n                progressBar = _.clone(n.attrs);\n                progressBar.colors = JSON.parse(progressBar.colors);\n                progressBar.sum_field = progressBar.sum_field || false;\n            }\n            return !isProgressBar;\n        });\n        if (progressBar) {\n            this.loadParams.progressBar = progressBar;\n        }\n\n        var activeActions = this.controllerParams.activeActions;\n        var archAttrs = this.arch.attrs;\n        activeActions = _.extend(activeActions, {\n            group_create: this.arch.attrs.group_create ? !!JSON.parse(archAttrs.group_create) : true,\n            group_edit: archAttrs.group_edit ? !!JSON.parse(archAttrs.group_edit) : true,\n            group_delete: archAttrs.group_delete ? !!JSON.parse(archAttrs.group_delete) : true,\n        });\n\n        this.rendererParams.column_options = {\n            editable: activeActions.group_edit,\n            deletable: activeActions.group_delete,\n            archivable: archAttrs.archivable ? !!JSON.parse(archAttrs.archivable) : true,\n            group_creatable: activeActions.group_create,\n            quickCreateView: archAttrs.quick_create_view || null,\n            recordsDraggable: archAttrs.records_draggable ? !!JSON.parse(archAttrs.records_draggable) : true,\n            hasProgressBar: !!progressBar,\n        };\n        this.rendererParams.record_options = {\n            editable: activeActions.edit,\n            deletable: activeActions.delete,\n            read_only_mode: params.readOnlyMode,\n            selectionMode: params.selectionMode,\n        };\n        this.rendererParams.quickCreateEnabled = this._isQuickCreateEnabled();\n        this.rendererParams.readOnlyMode = params.readOnlyMode;\n        var examples = archAttrs.examples;\n        if (examples) {\n            this.rendererParams.examples = kanbanExamplesRegistry.get(examples);\n        }\n\n        this.controllerParams.on_create = archAttrs.on_create;\n        this.controllerParams.hasButtons = !params.selectionMode ? true : false;\n        this.controllerParams.quickCreateEnabled = this.rendererParams.quickCreateEnabled;\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {Object} viewInfo\n     * @returns {boolean} true iff the quick create feature is not explicitely\n     *   disabled (with create=\"False\" or quick_create=\"False\" in the arch)\n     */\n    _isQuickCreateEnabled: function () {\n        if (!this.controllerParams.activeActions.create) {\n            return false;\n        }\n        if (this.arch.attrs.quick_create !== undefined) {\n            return !!JSON.parse(this.arch.attrs.quick_create);\n        }\n        return true;\n    },\n    /**\n     * Handles the <field> attribute allow_group_range_value,\n     * used to configure, for a date(time) field, whether we want to use the front-end\n     * logic to get the group value. (i.e. with drag&drop and quickCreate features)\n     * if false, those features will be disabled for the current field.\n     * Only handles the following types: date / datetime\n     * if undefined the default is false\n     *\n     * @override\n     */\n    _processField(viewType, field, attrs) {\n        if (['date', 'datetime'].includes(field.type) && 'allow_group_range_value' in attrs) {\n            attrs.allowGroupRangeValue = !!JSON.parse(attrs.allow_group_range_value);\n            delete attrs.allow_group_range_value;\n        }\n        return this._super(...arguments);\n    },\n    /**\n     * Detect <img t-att-src=\"kanban_image(...)\"/> nodes to automatically add the\n     * '__last_update' field in the fieldsInfo to ensure that the images is\n     * properly reloaded when necessary.\n     *\n     * @override\n     */\n    _processNode(node, fv) {\n        const isKanbanImage = node.tag === 'img' &&\n                              node.attrs['t-att-src'] &&\n                              node.attrs['t-att-src'].includes('kanban_image');\n        if (isKanbanImage && !fv.fieldsInfo.kanban.__last_update) {\n            fv.fieldsInfo.kanban.__last_update = { type: 'datetime' };\n        }\n        return this._super(...arguments);\n    },\n    /**\n     * @override\n     * @private\n     */\n    _updateMVCParams: function () {\n        this._super.apply(this, arguments);\n        if (this.searchMenuTypes.includes('groupBy') && !this.noDefaultGroupby && this.arch.attrs.default_group_by) {\n            this.loadParams.groupBy = [this.arch.attrs.default_group_by];\n        }\n    },\n});\n\nreturn KanbanView;\n\n});\n", "odoo.define('web.QuickCreateFormView', function (require) {\n\"use strict\";\n\n/**\n * This file defines the QuickCreateFormView, an extension of the FormView that\n * is used by the RecordQuickCreate in Kanban views.\n */\n\nvar BasicModel = require('web.BasicModel');\nvar FormController = require('web.FormController');\nvar FormRenderer = require('web.FormRenderer');\nvar FormView = require('web.FormView');\nconst { qweb } = require(\"web.core\");\n\nvar QuickCreateFormRenderer = FormRenderer.extend({\n    /**\n     * @override\n     */\n    start: async function () {\n        await this._super.apply(this, arguments);\n        this.$el.addClass('o_xxs_form_view');\n        this.$el.removeClass('o_xxl_form_view');\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Override to do nothing so that the renderer won't resize on window resize\n     *\n     * @override\n     */\n    _applyFormSizeClass() {},\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onNavigationMove: function (ev) {\n        var direction = ev.data.direction;\n        if (direction === 'cancel' || direction === 'next_line') {\n            ev.stopPropagation();\n            this.trigger_up(direction === 'cancel' ? 'cancel' : 'add');\n        } else {\n            this._super.apply(this, arguments);\n        }\n    },\n});\n\nvar QuickCreateFormModel = BasicModel.extend({\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @returns {Object} the changes of the given resource (server commands for\n     *   x2manys)\n     */\n    getChanges: function (localID) {\n        var record = this.localData[localID];\n        return this._generateChanges(record, {changesOnly: false});\n    },\n});\n\nvar QuickCreateFormController = FormController.extend({\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Asks all field widgets to notify the environment with their current value\n     * (useful for instance for input fields that still have the focus and that\n     * could have not notified the environment of their changes yet).\n     * Synchronizes with the controller's mutex in case there would already be\n     * pending changes being applied.\n     *\n     * @return {Promise}\n     */\n    commitChanges: function () {\n        var mutexDef = this.mutex.getUnlockedDef();\n        return Promise.all([mutexDef, this.renderer.commitChanges(this.handle)]);\n    },\n    /**\n     * @returns {Object} the changes done on the current record\n     */\n    getChanges: function () {\n        return this.model.getChanges(this.handle);\n    },\n\n    /**\n     * @override\n     */\n    renderButtons($node) {\n        this.$buttons = $(qweb.render('KanbanView.RecordQuickCreate.buttons'));\n        if ($node) {\n            this.$buttons.appendTo($node);\n        }\n    },\n\n    /**\n     * @override\n     */\n    updateButtons() {/* No need to update the buttons */},\n});\n\nvar QuickCreateFormView = FormView.extend({\n    withControlPanel: false,\n    config: _.extend({}, FormView.prototype.config, {\n        Model: QuickCreateFormModel,\n        Renderer: QuickCreateFormRenderer,\n        Controller: QuickCreateFormController,\n    }),\n});\n\nreturn QuickCreateFormView;\n\n});\n", "/** @odoo-module alias=web.ListConfirmDialog **/\n\nimport core from 'web.core';\nimport Dialog from 'web.Dialog';\nimport FieldWrapper from 'web.FieldWrapper';\nimport { WidgetAdapterMixin } from 'web.OwlCompatibility';\nimport utils from 'web.utils';\n\nconst _t = core._t;\nconst qweb = core.qweb;\n\n/**\n * Multi edition confirmation modal for list views.\n *\n * Handles the display of the amount of changed records (+ valid ones) and\n * of the widget representing the new value.\n *\n * @class\n */\nconst ListConfirmDialog = Dialog.extend(WidgetAdapterMixin, {\n    /**\n     * @constructor\n     * @override\n     * @param {Widget} parent\n     * @param {Object} record edited record with updated value\n     * @param {Object} params\n     * @param {Object} params.isDomainSelected true iff the user selected the\n     *   whole domain\n     * @param {string} params.fields list of field names and labels\n     * @param {number} params.nbRecords number of records (total)\n     * @param {number} params.nbValidRecords number of valid records\n     * @param {Object} [options]\n     */\n    init: function (parent, record, params, options) {\n        options = Object.assign({}, options, {\n            $content: $(qweb.render('ListView.confirmModal', params)),\n            buttons: options.buttons || [{\n                text: _t(\"Ok\"),\n                classes: 'btn-primary',\n                close: true,\n                click: options.confirm_callback,\n            }, {\n                text: _t(\"Cancel\"),\n                close: true,\n                click: options.cancel_callback,\n            }],\n            onForceClose: options.cancel_callback,\n            size: options.size || 'medium',\n            title: options.title || _t(\"Confirmation\"),\n        });\n\n        this._super(parent, options);\n\n        this.fieldWidgets = params.fields.map(({ name }) => {\n            const Widget = record.fieldsInfo.list[name].Widget;\n            const widgetOptions = {\n                mode: 'readonly',\n                viewType: 'list',\n                noOpen: true,\n            };\n            if (!utils.isComponent(Widget)) {\n                return {\n                    isLegacyWidget: true,\n                    fieldWidget: new Widget(this, name, record, widgetOptions),\n                };\n            } else {\n                return {\n                    isLegacyWidget: false,\n                    fieldWidget: new FieldWrapper(this, Widget, {\n                        fieldName: name,\n                        record,\n                        options: widgetOptions,\n                    }),\n                };\n            }\n        });\n    },\n    /**\n     * @override\n     */\n    willStart: function () {\n        const proms = this.fieldWidgets.map(({ isLegacyWidget, fieldWidget }) => {\n            if (isLegacyWidget) {\n                return fieldWidget._widgetRenderAndInsert(function () {});\n            } else {\n                return fieldWidget.mount(document.createDocumentFragment());\n            }\n        });\n        proms.push(this._super.apply(this, arguments));\n        return Promise.all(proms);\n    },\n    /**\n     * @override\n     */\n    start: function () {\n        this.fieldWidgets.forEach(({ fieldWidget }) => {\n            this.$content.find(`.o_changes_widget[data-name=${fieldWidget.name}]`).replaceWith(fieldWidget.$el);\n            fieldWidget.el.style.pointerEvents = 'none';\n        });\n        return this._super.apply(this, arguments);\n    },\n    /**\n     * @override\n     */\n    destroy: function () {\n        WidgetAdapterMixin.destroy.call(this);\n        this._super();\n    },\n});\n\nexport default ListConfirmDialog;\n", "/** @odoo-module alias=web.ListController **/\n\n/**\n * The List Controller controls the list renderer and the list model.  Its role\n * is to allow these two components to communicate properly, and also, to render\n * and bind all extra buttons/pager in the control panel.\n */\n\nimport config from 'web.config';\nimport core from 'web.core';\nimport BasicController from 'web.BasicController';\nimport DataExport from 'web.DataExport';\nimport Dialog from 'web.Dialog';\nimport ListConfirmDialog from 'web.ListConfirmDialog';\nimport session from 'web.session';\nimport viewUtils from 'web.viewUtils';\n\nvar _t = core._t;\nvar qweb = core.qweb;\n\nvar ListController = BasicController.extend({\n    /**\n     * This key contains the name of the buttons template to render on top of\n     * the list view. It can be overridden to add buttons in specific child views.\n     */\n    buttons_template: 'ListView.buttons',\n    events: _.extend({}, BasicController.prototype.events, {\n        'click .o_list_export_xlsx': '_onDirectExportData',\n        'click .o_list_select_domain': '_onSelectDomain',\n    }),\n    custom_events: _.extend({}, BasicController.prototype.custom_events, {\n        activate_next_widget: '_onActivateNextWidget',\n        add_record: '_onAddRecord',\n        button_clicked: '_onButtonClicked',\n        group_edit_button_clicked: '_onEditGroupClicked',\n        edit_line: '_onEditLine',\n        save_line: '_onSaveLine',\n        selection_changed: '_onSelectionChanged',\n        toggle_column_order: '_onToggleColumnOrder',\n        toggle_group: '_onToggleGroup',\n    }),\n    /**\n     * @constructor\n     * @override\n     * @param {Object} params\n     * @param {boolean} params.editable\n     * @param {boolean} params.hasActionMenus\n     * @param {Object[]} [params.headerButtons=[]]: a list of node descriptors\n     *    for controlPanel's action buttons\n     * @param {Object} params.toolbarActions\n     * @param {boolean} params.noLeaf\n     */\n    init: function (parent, model, renderer, params) {\n        this._super.apply(this, arguments);\n        this.hasActionMenus = params.hasActionMenus;\n        this.headerButtons = params.headerButtons || [];\n        this.toolbarActions = params.toolbarActions || {};\n        this.editable = params.editable;\n        this.noLeaf = params.noLeaf;\n        this.selectedRecords = params.selectedRecords || [];\n        this.multipleRecordsSavingPromise = null;\n        this.fieldChangedPrevented = false;\n        this.isPageSelected = false; // true iff all records of the page are selected\n        this.isDomainSelected = false; // true iff the user selected all records matching the domain\n        this.isExportEnable = false;\n    },\n\n    willStart() {\n        const sup = this._super(...arguments);\n        const acl = session.user_has_group('base.group_allow_export').then(hasGroup => {\n            this.isExportEnable = hasGroup;\n        });\n        return Promise.all([sup, acl]);\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     * @returns {Promise}\n     */\n    canBeRemoved: async function () {\n        const _super = this._super.bind(this);\n        await this.renderer.unselectRow({ canDiscard: true });\n        return _super(...arguments);\n    },\n    /*\n     * @override\n     */\n    getOwnedQueryParams: function () {\n        var state = this._super.apply(this, arguments);\n        var orderedBy = this.model.get(this.handle, {raw: true}).orderedBy || [];\n        return _.extend({}, state, {orderedBy: orderedBy});\n    },\n    /**\n     * Returns the list of currently selected res_ids (with the check boxes on\n     * the left)\n     *\n     * @override\n     *\n     * @returns {number[]} list of res_ids\n     */\n    getSelectedIds: function () {\n        return _.map(this.getSelectedRecords(), function (record) {\n            return record.res_id;\n        });\n    },\n\n    /**\n     * Returns the list of currently selected res_ids (with the check boxes on\n     * the left) or the whole domain res_ids if it is selected\n     *\n     * This method should be the implementation of getSelectedIds but it is kept for compatibility reasons\n     *\n     * @returns {Promise<integer[]>}\n     */\n    getSelectedIdsWithDomain: async function () {\n        if (this.isDomainSelected) {\n            const state = this.model.get(this.handle, {raw: true});\n            return await this._domainToResIds(state.getDomain(), session.active_ids_limit);\n        } else {\n            return Promise.resolve(this.model.localIdsToResIds(this.selectedRecords));\n        }\n    },\n\n    /**\n     * Returns the list of currently selected records (with the check boxes on\n     * the left)\n     *\n     * @returns {Object[]} list of records\n     */\n    getSelectedRecords: function () {\n        var self = this;\n        return _.map(this.selectedRecords, function (db_id) {\n            return self.model.get(db_id, {raw: true});\n        });\n    },\n    /**\n     * Returns the list of currently selected records (with the check boxes on\n     * the left) or the whole domain records if it is selected\n     *\n     * @returns {Promise<{id, display_name}[]>}\n     */\n    getSelectedRecordsWithDomain: async function () {\n        if (this.isDomainSelected) {\n            const state = this.model.get(this.handle, {raw: true});\n            return await this._domainToRecords(state.getDomain(), session.active_ids_limit);\n        } else {\n            return Promise.resolve(this.selectedRecords.map(localId => {\n                const data = this.model.localData[localId].data;\n                return { id: data.id, display_name: data.display_name };\n            }));\n        }\n    },\n    /**\n     * Display and bind all buttons in the control panel\n     *\n     * Note: clicking on the \"Save\" button does nothing special. Indeed, all\n     * editable rows are saved once left and clicking on the \"Save\" button does\n     * induce the leaving of the current row.\n     *\n     * @override\n     */\n    renderButtons: function ($node) {\n        if (this.noLeaf || !this.hasButtons) {\n            this.hasButtons = false;\n            this.$buttons = $('<div>');\n        } else {\n            this.$buttons = $(qweb.render(this.buttons_template, {widget: this}));\n            this.$buttons.on('click', '.o_list_button_add', this._onCreateRecord.bind(this));\n            this._assignCreateKeyboardBehavior(this.$buttons.find('.o_list_button_add'));\n            this.$buttons.find('.o_list_button_add').tooltip({\n                delay: {show: 200, hide: 0},\n                title: function () {\n                    return qweb.render('CreateButton.tooltip');\n                },\n                trigger: 'manual',\n            });\n            this.$buttons.on('mousedown', '.o_list_button_discard', this._onDiscardMousedown.bind(this));\n            this.$buttons.on('click', '.o_list_button_discard', this._onDiscard.bind(this));\n            this.$buttons.on('click', '.o_list_select_domain', this._onSelectDomain.bind(this));\n        }\n        if ($node) {\n            this.$buttons.appendTo($node);\n        }\n    },\n    /**\n     * Renders (and updates) the buttons that are described inside the `header`\n     * node of the list view arch. Those buttons are visible when selecting some\n     * records. They will be appended to the controlPanel's buttons.\n     *\n     * @private\n     */\n    _renderHeaderButtons() {\n        if (this.$headerButtons) {\n            this.$headerButtons.remove();\n            this.$headerButtons = null;\n        }\n        if (!this.headerButtons.length || !this.selectedRecords.length) {\n            return;\n        }\n        const btnClasses = 'btn-primary btn-secondary btn-link btn-success btn-info btn-warning btn-danger'.split(' ');\n        let $elms = $();\n        this.headerButtons.forEach(node => {\n            const $btn = viewUtils.renderButtonFromNode(node);\n            $btn.addClass('btn');\n            if (!btnClasses.some(cls => $btn.hasClass(cls))) {\n                $btn.addClass('btn-secondary');\n            }\n            $btn.on(\"click\", this._onHeaderButtonClicked.bind(this, node));\n            $elms = $elms.add($btn);\n        });\n        this.$headerButtons = $elms;\n        this.$headerButtons.appendTo(this.$buttons);\n    },\n    /**\n     * Overrides to update the list of selected records\n     *\n     * @override\n     */\n    update: function (params, options) {\n        var self = this;\n        let res_ids;\n        if (options && options.keepSelection) {\n            // filter out removed records from selection\n            res_ids = this.model.get(this.handle).res_ids;\n            this.selectedRecords = _.filter(this.selectedRecords, function (id) {\n                return _.contains(res_ids, self.model.get(id).res_id);\n            });\n        } else {\n            this.selectedRecords = [];\n        }\n        if (this.selectedRecords.length === 0 || this.selectedRecords.length < res_ids.length) {\n            this.isDomainSelected = false;\n            this.isPageSelected = false;\n        }\n\n        params.selectedRecords = this.selectedRecords;\n        return this._super.apply(this, arguments);\n    },\n    /**\n     * This helper simply makes sure that the control panel buttons matches the\n     * current mode.\n     *\n     * @override\n     * @param {string} mode either 'readonly' or 'edit'\n     */\n    updateButtons: function (mode) {\n        if (this.hasButtons) {\n            this.$buttons.toggleClass('o-editing', mode === 'edit');\n            const state = this.model.get(this.handle, {raw: true});\n            if (state.count) {\n                this.$buttons.find('.o_list_export_xlsx').show();\n            } else {\n                this.$buttons.find('.o_list_export_xlsx').hide();\n            }\n        }\n        this._updateSelectionBox();\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @see BasicController._abandonRecord\n     * If the given abandoned record is not the main one, notifies the renderer\n     * to remove the appropriate subrecord (line).\n     *\n     * @override\n     * @private\n     * @param {string} [recordID] - default to the main recordID\n     */\n    _abandonRecord: function (recordID) {\n        this._super.apply(this, arguments);\n        if ((recordID || this.handle) !== this.handle) {\n            var state = this.model.get(this.handle);\n            this.renderer.removeLine(state, recordID);\n            this._updatePaging(state);\n        }\n    },\n    /**\n     * Adds a new record to the a dataPoint of type 'list'.\n     * Disables the buttons to prevent concurrent record creation or edition.\n     *\n     * @todo make record creation a basic controller feature\n     * @private\n     * @param {string} dataPointId a dataPoint of type 'list' (may be grouped)\n     * @return {Promise}\n     */\n    _addRecord: function (dataPointId) {\n        var self = this;\n        this._disableButtons();\n        return this._removeSampleData(() => {\n            return this.renderer.unselectRow().then(function () {\n                return self.model.addDefaultRecord(dataPointId, {\n                    position: self.editable,\n                });\n            }).then(function (recordID) {\n                var state = self.model.get(self.handle);\n                self._updateRendererState(state, { keepWidths: true })\n                    .then(function () {\n                        self.renderer.editRecord(recordID);\n                    })\n                    .then(() => {\n                        self._updatePaging(state);\n                    });\n            }).then(this._enableButtons.bind(this)).guardedCatch(this._enableButtons.bind(this));\n        });\n    },\n    /**\n     * Assign on the buttons create additionnal behavior to facilitate the work of the users doing input only using the keyboard\n     *\n     * @param {jQueryElement} $createButton  The create button itself\n     */\n    _assignCreateKeyboardBehavior: function($createButton) {\n        var self = this;\n        $createButton.on('keydown', function(e) {\n            $createButton.tooltip('hide');\n            switch(e.which) {\n                case $.ui.keyCode.ENTER:\n                    e.preventDefault();\n                    self._onCreateRecord.apply(self);\n                    break;\n                case $.ui.keyCode.DOWN:\n                    e.preventDefault();\n                    self._giveFocus();\n                    break;\n                case $.ui.keyCode.TAB:\n                    if (\n                        !e.shiftKey &&\n                        e.target.classList.contains(\"btn-primary\") &&\n                        !self.model.isInSampleMode()\n                    ) {\n                        e.preventDefault();\n                        $createButton.tooltip('show');\n                    }\n                    break;\n            }\n        });\n    },\n    /**\n     * This function is the hook called by the field manager mixin to confirm\n     * that a record has been saved.\n     *\n     * @override\n     * @param {string} id a basicmodel valid resource handle.  It is supposed to\n     *   be a record from the list view.\n     * @param {Object} [options] render options\n     * @returns {Promise}\n     */\n    _confirmSave(id, options = {}) {\n        const state = this.model.get(this.handle);\n        return this._updateRendererState(state, { noRender: !state.isM2MGrouped, ...options }).then(\n            this._setMode.bind(this, \"readonly\", id)\n        );\n    },\n    /**\n     * Deletes records matching the current domain. We limit the number of\n     * deleted records to the 'active_ids_limit' config parameter.\n     *\n     * @private\n     */\n    _deleteRecordsInCurrentDomain: function () {\n        const doIt = async () => {\n            const state = this.model.get(this.handle, {raw: true});\n            const resIds = await this._domainToResIds(state.getDomain(), session.active_ids_limit);\n            await this._rpc({\n                model: this.modelName,\n                method: 'unlink',\n                args: [resIds],\n                context: state.getContext(),\n            });\n            if (resIds.length === session.active_ids_limit) {\n                const msg = _.str.sprintf(\n                    _t(\"Only the first %d records have been deleted (out of %d selected)\"),\n                    resIds.length, state.count\n                );\n                this.displayNotification({ message: msg });\n            }\n            this.reload();\n        };\n        if (this.confirmOnDelete) {\n            Dialog.confirm(this, _t(\"Are you sure you want to delete these records ?\"), {\n                confirm_callback: doIt,\n            });\n        } else {\n            doIt();\n        }\n    },\n    /**\n     * To improve performance, list view must not be rerendered if it is asked\n     * to discard all its changes. Indeed, only the in-edition row needs to be\n     * discarded in that case.\n     *\n     * @override\n     * @private\n     * @param {string} [recordID] - default to main recordID\n     * @returns {Promise}\n     */\n    _discardChanges: function (recordID) {\n        if ((recordID || this.handle) === this.handle) {\n            recordID = this.renderer.getEditableRecordID();\n            if (recordID === null) {\n                return Promise.resolve();\n            }\n        }\n        var self = this;\n        return this._super(recordID).then(function () {\n            self.updateButtons('readonly');\n        });\n    },\n    /**\n     * Returns the records matching the given domain.\n     *\n     * @private\n     * @param {Array[]} domain\n     * @param {integer} [limit]\n     * @returns {Promise<{id, display_name}[]>}\n     */\n    _domainToRecords: function (domain, limit) {\n        return this._rpc({\n            model: this.modelName,\n            method: 'search_read',\n            args: [domain],\n            kwargs: {\n                fields: ['display_name'],\n                limit: limit,\n            },\n        });\n    },\n    /**\n     * Returns the ids of records matching the given domain.\n     *\n     * @private\n     * @param {Array[]} domain\n     * @param {integer} [limit]\n     * @returns {integer[]}\n     */\n    _domainToResIds: function (domain, limit) {\n        return this._rpc({\n            model: this.modelName,\n            method: 'search',\n            args: [domain],\n            kwargs: {\n                limit: limit,\n            },\n        });\n    },\n    /**\n     * @returns {DataExport} the export dialog widget\n     * @private\n     */\n    _getExportDialogWidget() {\n        let state = this.model.get(this.handle);\n        let defaultExportFields = this.renderer.columns.filter(field => field.tag === 'field' && state.fields[field.attrs.name].exportable !== false).map(field => field.attrs.name);\n        let groupedBy = this.renderer.state.groupedBy;\n        const domain = this.isDomainSelected && state.getDomain();\n        return new DataExport(this, state, defaultExportFields, groupedBy,\n            domain, this.getSelectedIds());\n    },\n    /**\n     * Only display the pager when there are data to display.\n     *\n     * @override\n     * @private\n     */\n    _getPagingInfo: function (state) {\n        if (!state.count) {\n            return null;\n        }\n        return Object.assign(this._super(...arguments), {\n            validate: () => this.renderer.unselectRow({ canDiscard: true }),\n        });\n    },\n    /**\n     * @override\n     * @private\n     */\n    _getActionMenuItems: function (state) {\n        const { isM2MGrouped } = state;\n        if (!this.hasActionMenus || !this.selectedRecords.length) {\n            return null;\n        }\n        const props = this._super(...arguments);\n        const otherActionItems = [];\n        if (this.isExportEnable) {\n            otherActionItems.push({\n                description: _t(\"Export\"),\n                callback: () => this._onExportData()\n            });\n        }\n        if (this.archiveEnabled && !isM2MGrouped) {\n            otherActionItems.push({\n                description: _t(\"Archive\"),\n                callback: () => {\n                    const dialog = Dialog.confirm(this, _t(\"Are you sure that you want to archive all the selected records?\"), {\n                        confirm_callback: () => {\n                            this._toggleArchiveState(true);\n                            dialog.close();\n                        },\n                    });\n                }\n            }, {\n                description: _t(\"Unarchive\"),\n                callback: () => this._toggleArchiveState(false)\n            });\n        }\n        if (this.activeActions.delete && !isM2MGrouped) {\n            otherActionItems.push({\n                description: _t(\"Delete\"),\n                callback: () => this._onDeleteSelectedRecords()\n            });\n        }\n        return Object.assign(props, {\n            items: Object.assign({}, this.toolbarActions, { other: otherActionItems }),\n            context: state.getContext(),\n            domain: state.getDomain(),\n            isDomainSelected: this.isDomainSelected,\n        });\n    },\n    _isValueSet(fieldType, value) {\n        switch (fieldType) {\n            case 'boolean':\n            case 'one2many':\n            case 'many2many':\n            case 'integer':\n            case 'monetary':\n            case 'float':\n                return true;\n            case 'selection':\n                return value !== false;\n            default:\n                return !!value;\n        }\n    },\n    /**\n     * Saves multiple records at once. This method is called by the _onFieldChanged method\n     * since the record must be confirmed as soon as the focus leaves a dirty cell.\n     * Pseudo-validation is performed with registered modifiers.\n     * Returns a promise that is resolved when confirming and rejected in any other case.\n     *\n     * @private\n     * @param {string} recordId\n     * @param {Object} node\n     * @param {Object} changes\n     * @returns {Promise}\n     */\n    _saveMultipleRecords: function (recordId, node, changes) {\n        var recordIds = _.union([recordId], this.selectedRecords);\n        var fieldName = node.attrs.name;\n        var value = changes[fieldName];\n        var validRecordIds = recordIds.reduce((result, nextRecordId) => {\n            var record = this.model.get(nextRecordId);\n            var modifiers = this.renderer._registerModifiers(node, record);\n            const fieldType = record.fields[fieldName].type;\n            if (!modifiers.readonly && (!modifiers.required || this._isValueSet(fieldType, value))) {\n                result.push(nextRecordId);\n            }\n            return result;\n        }, []);\n        return new Promise((resolve, reject) => {\n            const saveRecords = () => {\n                this.model.saveRecords(this.handle, recordId, validRecordIds, Object.keys(changes))\n                    .then(async () => {\n                        this.updateButtons('readonly');\n                        // If there are changes and the list was multi-editable,\n                        // we do not want to select the next row.\n                        this.selectedRecords = [];\n                        await this._confirmSave(this.handle, {\n                            keepWidths: true,\n                            selectedRecords: [],\n                        });\n                        this._updateSelectionBox();\n                        this.renderer.focusCell(recordId, node);\n                        resolve(!Object.keys(changes).length);\n                    })\n                    .guardedCatch(discardAndReject);\n            };\n            const discardAndReject = () => {\n                this.model.discardChanges(recordId);\n                this._confirmSave(recordId).then(() => {\n                    this.renderer.focusCell(recordId, node);\n                    reject();\n                });\n            };\n            if (validRecordIds.length > 0) {\n                if (recordIds.length === 1) {\n                    // Save without prompt\n                    return saveRecords();\n                }\n                const dialogOptions = {\n                    confirm_callback: saveRecords,\n                    cancel_callback: discardAndReject,\n                };\n                const record = this.model.get(recordId);\n                const params = {\n                    isDomainSelected: this.isDomainSelected,\n                    fields: Object.keys(changes).map((fieldName) => {\n                        let fieldLabel = record.fields[fieldName].string;\n                        if (node.attrs.name === fieldName && node.attrs.string) {\n                            fieldLabel = node.attrs.string;\n                        }\n                        return { name: fieldName, label: fieldLabel };\n                    }),\n                    nbRecords: recordIds.length,\n                    nbValidRecords: validRecordIds.length,\n                };\n                new ListConfirmDialog(this, record, params, dialogOptions)\n                    .open({ shouldFocusButtons: true });\n            } else {\n                Dialog.alert(this, _t(\"No valid record to save\"), {\n                    confirm_callback: discardAndReject,\n                });\n            }\n        });\n    },\n    /**\n     * Overridden to deal with edition of multiple line.\n     *\n     * @override\n     * @param {string} recordId\n     */\n    _saveRecord: function (recordId) {\n        var record = this.model.get(recordId, { raw: true });\n        if (record.isDirty() && this.renderer.isInMultipleRecordEdition(recordId)) {\n            // do not save the record (see _saveMultipleRecords)\n            const prom = this.multipleRecordsSavingPromise || Promise.reject();\n            this.multipleRecordsSavingPromise = null;\n            return prom;\n        }\n        return this._super.apply(this, arguments);\n    },\n    /**\n     * Allows to change the mode of a single row.\n     *\n     * @override\n     * @private\n     * @param {string} mode\n     * @param {string} [recordID] - default to main recordID\n     * @returns {Promise}\n     */\n    _setMode: function (mode, recordID) {\n        if ((recordID || this.handle) !== this.handle) {\n            this.mode = mode;\n            this.updateButtons(mode);\n            return this.renderer.setRowMode(recordID, mode);\n        } else {\n            return this._super.apply(this, arguments);\n        }\n    },\n    /**\n     * @override\n     */\n    _shouldBounceOnClick() {\n        const state = this.model.get(this.handle, {raw: true});\n        return !state.count || state.isSample;\n    },\n    /**\n     * Called when clicking on 'Archive' or 'Unarchive' in the sidebar.\n     *\n     * @private\n     * @param {boolean} archive\n     * @returns {Promise}\n     */\n    _toggleArchiveState: async function (archive) {\n        const resIds = await this.getSelectedIdsWithDomain()\n        const notif = this.isDomainSelected;\n        await this._archive(resIds, archive);\n        const total = this.model.get(this.handle, {raw: true}).count;\n        if (notif && resIds.length === session.active_ids_limit && resIds.length < total) {\n            const msg = _.str.sprintf(\n                _t(\"Of the %d records selected, only the first %d have been archived/unarchived.\"),\n                total, resIds.length\n            );\n            this.displayNotification({ title: _t('Warning'), message: msg });\n        }\n    },\n    /**\n     * Hide the create button in non-empty grouped editable list views, as an\n     * 'Add an item' link is available in each group.\n     *\n     * @private\n     */\n    _toggleCreateButton: function () {\n        if (this.hasButtons) {\n            var state = this.model.get(this.handle);\n            var createHidden = this.editable && state.groupedBy.length && state.data.length;\n            this.$buttons.find('.o_list_button_add').toggleClass('o_hidden', !!createHidden);\n        }\n    },\n    /**\n     * @override\n     * @returns {Promise}\n     */\n    _update: async function () {\n        await this._super(...arguments);\n        this._toggleCreateButton();\n        this.updateButtons('readonly');\n    },\n    /**\n     * When records are selected, a box is displayed in the control panel (next\n     * to the buttons). It indicates the number of selected records, and allows\n     * the user to select the whole domain instead of the current page (when the\n     * page is selected). This function renders and displays this box when at\n     * least one record is selected.\n     * Since header action buttons' display is dependent on the selection, we\n     * refresh them each time the selection is updated.\n     *\n     * @private\n     */\n    _updateSelectionBox() {\n        this._renderHeaderButtons();\n        if (this.$selectionBox) {\n            this.$selectionBox.remove();\n            this.$selectionBox = null;\n        }\n        if (this.selectedRecords.length) {\n            const state = this.model.get(this.handle, {raw: true});\n            this.$selectionBox = $(qweb.render('ListView.selection', {\n                isDomainSelected: this.isDomainSelected,\n                isMobile: config.device.isMobile,\n                isPageSelected: this.isPageSelected,\n                nbSelected: this.selectedRecords.length,\n                nbTotal: state.count,\n            }));\n            this.$selectionBox.appendTo(this.$buttons);\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Triggered when navigating with TAB, when the end of the list has been\n     * reached. Go back to the first row in that case.\n     *\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onActivateNextWidget: function (ev) {\n        ev.stopPropagation();\n        this.renderer.editFirstRecord(ev);\n    },\n    /**\n     * Add a record to the list\n     *\n     * @private\n     * @param {OdooEvent} ev\n     * @param {string} [ev.data.groupId=this.handle] the id of a dataPoint of\n     *   type list to which the record must be added (default: main list)\n     */\n    _onAddRecord: function (ev) {\n        ev.stopPropagation();\n        var dataPointId = ev.data.groupId || this.handle;\n        if (this.activeActions.create) {\n            this._addRecord(dataPointId);\n        } else if (ev.data.onFail) {\n            ev.data.onFail();\n        }\n    },\n    /**\n     * Save the row in edition, if any, when we are about to leave Odoo.\n     *\n     * @override\n     */\n    _onBeforeUnload: function () {\n        const recordId = this.renderer.getEditableRecordID();\n        if (recordId) {\n            this._urgentSave(recordId);\n        }\n    },\n    /**\n     * Handles a click on a button by performing its action.\n     *\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onButtonClicked: function (ev) {\n        ev.stopPropagation();\n        this._callButtonAction(ev.data.attrs, ev.data.record);\n    },\n    /**\n     * When the user clicks on the 'create' button, two things can happen. We\n     * can switch to the form view with no active res_id, so it is in 'create'\n     * mode, or we can edit inline.\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onCreateRecord: function (ev) {\n        // we prevent the event propagation because we don't want this event to\n        // trigger a click on the main bus, which would be then caught by the\n        // list editable renderer and would unselect the newly created row\n        if (ev) {\n            ev.stopPropagation();\n        }\n        var state = this.model.get(this.handle, {raw: true});\n        if (this.editable && !state.groupedBy.length) {\n            this._addRecord(this.handle);\n        } else {\n            this.trigger_up('switch_view', {view_type: 'form', res_id: undefined});\n        }\n    },\n    /**\n     * Called when the 'delete' action is clicked on in the side bar.\n     *\n     * @private\n     */\n    _onDeleteSelectedRecords: async function () {\n        if (this.isDomainSelected) {\n            this._deleteRecordsInCurrentDomain();\n        } else {\n            this._deleteRecords(this.selectedRecords);\n        }\n    },\n    /**\n     * Handler called when the user clicked on the 'Discard' button.\n     *\n     * @param {Event} ev\n     */\n    _onDiscard: function (ev) {\n        ev.stopPropagation(); // So that it is not considered as a row leaving\n        this._discardChanges();\n    },\n    /**\n     * Used to detect if the discard button is about to be clicked.\n     * Some focusout events might occur and trigger a save which\n     * is not always wanted when clicking \"Discard\".\n     *\n     * @param {MouseEvent} ev\n     * @private\n     */\n    _onDiscardMousedown: function (ev) {\n        var self = this;\n        this.fieldChangedPrevented = true;\n        window.addEventListener('mouseup', function (mouseupEvent) {\n            var preventedEvent = self.fieldChangedPrevented;\n            self.fieldChangedPrevented = false;\n            // If the user starts clicking (mousedown) on the button and stops clicking\n            // (mouseup) outside of the button, we want to trigger the original onFieldChanged\n            // Event that was prevented in the meantime.\n            if (ev.target !== mouseupEvent.target && preventedEvent.constructor.name === 'OdooEvent') {\n                self._onFieldChanged(preventedEvent);\n            }\n        }, { capture: true, once: true });\n    },\n    /**\n     * Called when the user asks to edit a row -> Updates the controller buttons\n     *\n     * @param {OdooEvent} ev\n     */\n    _onEditLine: function (ev) {\n        var self = this;\n        ev.stopPropagation();\n        this.trigger_up('mutexify', {\n            action: function () {\n                self._setMode('edit', ev.data.recordId)\n                    .then(ev.data.onSuccess);\n            },\n        });\n    },\n    /**\n     * Opens the Export Dialog\n     *\n     * @private\n     */\n    _onExportData: function () {\n        this._getExportDialogWidget().open();\n    },\n    /**\n     * Export Records in a xls file\n     *\n     * @private\n     */\n    _onDirectExportData() {\n        // access rights check before exporting data\n        return this._rpc({\n            model: 'ir.exports',\n            method: 'search_read',\n            args: [[], ['id']],\n            limit: 1,\n        }).then(() => this._getExportDialogWidget().export())\n    },\n    /**\n     * Opens the related form view.\n     *\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onEditGroupClicked: function (ev) {\n        ev.stopPropagation();\n        this.do_action({\n            context: {create: false},\n            type: 'ir.actions.act_window',\n            views: [[false, 'form']],\n            res_model: ev.data.record.model,\n            res_id: ev.data.record.res_id,\n            flags: {mode: 'edit'},\n        });\n    },\n    /**\n     * Overridden to deal with the edition of multiple records.\n     *\n     * Note that we don't manage saving multiple records on saveLine\n     * because we don't want the onchanges to be applied.\n     *\n     * @private\n     * @override\n     */\n    _onFieldChanged: function (ev) {\n        ev.stopPropagation();\n        const recordId = ev.data.dataPointID;\n\n        if (this.fieldChangedPrevented) {\n            this.fieldChangedPrevented = ev;\n        } else if (this.renderer.isInMultipleRecordEdition(recordId)) {\n            const saveMulti = () => {\n                // if ev.data.__originalComponent is set, it is the field Component\n                // that triggered the event, otherwise ev.target is the legacy field\n                // Widget that triggered the event\n                const target = ev.data.__originalComponent || ev.target;\n                const node = target.__node || ev.data.node;\n                this.multipleRecordsSavingPromise =\n                    this._saveMultipleRecords(ev.data.dataPointID, node, ev.data.changes);\n            };\n            // deal with edition of multiple lines\n            ev.data.onSuccess = saveMulti; // will ask confirmation, and save\n            ev.data.onFailure = saveMulti; // will show the appropriate dialog\n            // disable onchanges as we'll save directly\n            ev.data.notifyChange = false;\n            // In multi edit mode, we will be asked if we want to write on the selected\n            // records, so the force_save for readonly is not necessary.\n            ev.data.force_save = false;\n        }\n        this._super.apply(this, arguments);\n    },\n    /**\n     * @private\n     * @param {Object} node the button's node in the xml\n     * @returns {Promise}\n     */\n    async _onHeaderButtonClicked(node) {\n        this._disableButtons();\n        const state = this.model.get(this.handle);\n        try {\n            const resIds = await this.getSelectedIdsWithDomain();\n            // add the context of the button node (in the xml) and our custom one\n            // (active_ids and domain) to the action's execution context\n            const actionData = Object.assign({}, node.attrs, {\n                context: state.getContext({ additionalContext: node.attrs.context }),\n            });\n            Object.assign(actionData.context, {\n                active_domain: state.getDomain(),\n                active_id: resIds[0],\n                active_ids: resIds,\n                active_model: state.model,\n            });\n            // load the action with the correct context and record parameters (resIDs, model etc...)\n            const recordData = {\n                context: state.getContext(),\n                model: state.model,\n                resIDs: resIds,\n            };\n            await this._executeButtonAction(actionData, recordData);\n        } finally {\n            this._enableButtons();\n        }\n    },\n    /**\n     * Overridden to always reload the main record when grouped by M2M.\n     *\n     * @override\n     */\n    _onReload(ev) {\n        const { isM2MGrouped } = this.model.get(this.handle);\n        if (isM2MGrouped) {\n            // Ask for the main record to be reloaded.\n            ev.data.db_id = this.handle;\n        }\n        this._super(...arguments);\n    },\n    /**\n     * Called when the renderer displays an editable row and the user tries to\n     * leave it -> Saves the record associated to that line.\n     *\n     * @param {OdooEvent} ev\n     */\n    _onSaveLine: function (ev) {\n        this.saveRecord(ev.data.recordID)\n            .then(ev.data.onSuccess)\n            .guardedCatch(ev.data.onFailure);\n    },\n    /**\n     * @private\n     */\n    _onSelectDomain: function (ev) {\n        ev.preventDefault();\n        this.isDomainSelected = true;\n        this._updateSelectionBox();\n        this._updateControlPanel();\n    },\n    /**\n     * When the current selection changes (by clicking on the checkboxes on the\n     * left), we need to display (or hide) the 'sidebar'.\n     *\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onSelectionChanged: function (ev) {\n        this.selectedRecords = ev.data.selection;\n        this.isPageSelected = ev.data.allChecked;\n        this.isDomainSelected = false;\n        this.$('.o_list_export_xlsx').toggle(!this.selectedRecords.length);\n        this._updateSelectionBox();\n        this._updateControlPanel();\n    },\n    /**\n     * If the record is set as dirty while in multiple record edition,\n     * we want to immediatly discard the change.\n     *\n     * @private\n     * @override\n     * @param {OdooEvent} ev\n     */\n    _onSetDirty: function (ev) {\n        var recordId = ev.data.dataPointID;\n        if (this.renderer.isInMultipleRecordEdition(recordId)) {\n            ev.stopPropagation();\n            Dialog.alert(this, _t(\"No valid record to save\"), {\n                confirm_callback: async () => {\n                    this.model.discardChanges(recordId);\n                    await this._confirmSave(recordId);\n                    this.renderer.focusCell(recordId, ev.target.__node);\n                },\n            });\n        } else {\n            this._super.apply(this, arguments);\n        }\n    },\n    /**\n     * When the user clicks on one of the sortable column headers, we need to\n     * tell the model to sort itself properly, to update the pager and to\n     * rerender the view.\n     *\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onToggleColumnOrder: function (ev) {\n        ev.stopPropagation();\n        var state = this.model.get(this.handle);\n        if (!state.groupedBy) {\n            this._updatePaging(state, { currentMinimum: 1 });\n        }\n        var self = this;\n        this.model.setSort(state.id, ev.data.name).then(function () {\n            self.update({});\n        });\n    },\n    /**\n     * In a grouped list view, each group can be clicked on to open/close them.\n     * This method just transfer the request to the model, then update the\n     * renderer.\n     *\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onToggleGroup: function (ev) {\n        ev.stopPropagation();\n        var self = this;\n        this.model\n            .toggleGroup(ev.data.group.id)\n            .then(function () {\n                self.update({}, {keepSelection: true, reload: false}).then(function () {\n                    if (ev.data.onSuccess) {\n                        ev.data.onSuccess();\n                    }\n                });\n            });\n    },\n});\n\nexport default ListController;\n", "/** @odoo-module alias=web.EditableListRenderer **/\n\n/**\n * Editable List renderer\n *\n * The list renderer is reasonably complex, so we split it in two files. This\n * file simply 'includes' the basic ListRenderer to add all the necessary\n * behaviors to enable editing records.\n *\n * Unlike Odoo v10 and before, this list renderer is independant from the form\n * view. It uses the same widgets, but the code is totally stand alone.\n */\nimport core from 'web.core';\nimport dom from 'web.dom';\nimport ListRenderer from 'web.ListRenderer';\nimport utils from 'web.utils';\nimport { WidgetAdapterMixin } from 'web.OwlCompatibility';\n\nvar _t = core._t;\n\nListRenderer.include({\n    RESIZE_DELAY: 200,\n    custom_events: _.extend({}, ListRenderer.prototype.custom_events, {\n        navigation_move: '_onNavigationMove',\n    }),\n    events: _.extend({}, ListRenderer.prototype.events, {\n        'click .o_field_x2many_list_row_add a': '_onAddRecord',\n        'click .o_group_field_row_add a': '_onAddRecordToGroup',\n        'keydown .o_field_x2many_list_row_add a': '_onKeyDownAddRecord',\n        'click tbody td.o_data_cell': '_onCellClick',\n        'click tbody tr:not(.o_data_row)': '_onEmptyRowClick',\n        'click tfoot': '_onFooterClick',\n        'click tr .o_list_record_remove': '_onRemoveIconClick',\n    }),\n    /**\n     * @override\n     * @param {Object} params\n     * @param {boolean} params.addCreateLine\n     * @param {boolean} params.addCreateLineInGroups\n     * @param {boolean} params.addTrashIcon\n     * @param {boolean} params.isMany2Many\n     * @param {boolean} params.isMultiEditable\n     */\n    init: function (parent, state, params) {\n        this._super.apply(this, arguments);\n\n        this.editable = params.editable;\n        this.isMultiEditable = params.isMultiEditable;\n        this.columnWidths = false;\n\n        // if addCreateLine (resp. addCreateLineInGroups) is true, the renderer\n        // will add a 'Add a line' link at the bottom of the list view (resp.\n        // at the bottom of each group)\n        this.addCreateLine = params.addCreateLine;\n        this.addCreateLineInGroups = params.addCreateLineInGroups;\n\n        // Controls allow overriding \"add a line\" by custom controls.\n\n        // Each <control> (only one is actually needed) is a container for (multiple) <create>.\n        // Each <create> will be a \"add a line\" button with custom text and context.\n\n        // The following code will browse the arch to find\n        // all the <create> that are inside <control>\n        this.creates = [];\n        this.arch.children.forEach(child => {\n            if (child.tag !== 'control') {\n                return;\n            }\n            child.children.forEach(child => {\n                if (child.tag !== 'create' || child.attrs.invisible) {\n                    return;\n                }\n                this.creates.push({\n                    context: child.attrs.context,\n                    string: child.attrs.string,\n                });\n            });\n        });\n\n        // Add the default button if we didn't find any custom button.\n        if (this.creates.length === 0) {\n            this.creates.push({\n                string: _t(\"Add a line\"),\n            });\n        }\n\n        // if addTrashIcon is true, there will be a small trash icon at the end\n        // of each line, so the user can delete a record.\n        this.addTrashIcon = params.addTrashIcon;\n\n        // replace the trash icon by X in case of many2many relations\n        // so that it means 'unlink' instead of 'remove'\n        this.isMany2Many = params.isMany2Many;\n\n        this.currentRow = null;\n        this.currentFieldIndex = null;\n        this.isResizing = false;\n        this.eventListeners = [];\n    },\n    /**\n     * @override\n     * @returns {Promise}\n     */\n    start: function () {\n        core.bus.on('click', this, this._onWindowClicked.bind(this));\n        core.bus.on('resize', this, _.debounce(this._onResize.bind(this), this.RESIZE_DELAY));\n        core.bus.on('DOM_updated', this, () => this._freezeColumnWidths());\n        return this._super();\n    },\n    /**\n     * Overriden to unbind all attached listeners\n     *\n     * @override\n     */\n    destroy: function () {\n        this.eventListeners.forEach(listener => {\n            const { type, el, callback, options } = listener;\n            el.removeEventListener(type, callback, options);\n        });\n        return this._super.apply(this, arguments);\n    },\n    /**\n     * The list renderer needs to know if it is in the DOM, and to be notified\n     * when it is attached to the DOM to properly compute column widths.\n     *\n     * @override\n     */\n    on_attach_callback: function () {\n        this._super();\n        // _freezeColumnWidths requests style information, which produces a\n        // repaint, so we call it after _super to prevent flickering (in case\n        // other code would also modify the DOM post rendering/before repaint)\n        this._freezeColumnWidths();\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * If the given recordID is the list main one (or that no recordID is\n     * given), then the whole view can be saved if one of the two following\n     * conditions is true:\n     * - There is no line in edition (all lines are saved so they are all valid)\n     * - The line in edition can be saved\n     *\n     * If the given recordID is a record in the list, toggle a className on its\n     * row's cells for invalid fields, so that we can style those cells\n     * differently.\n     *\n     * @override\n     * @param {string} [recordID]\n     * @returns {string[]}\n     */\n    canBeSaved: function (recordID) {\n        if ((recordID || this.state.id) === this.state.id) {\n            recordID = this.getEditableRecordID();\n            if (recordID === null) {\n                return [];\n            }\n        }\n        var fieldNames = this._super(recordID);\n        this.$('.o_selected_row .o_data_cell').removeClass('o_invalid_cell');\n        this.$('.o_selected_row .o_data_cell:has(> .o_field_invalid)').addClass('o_invalid_cell');\n        return fieldNames;\n    },\n    /**\n     * We need to override the confirmChange method from BasicRenderer to\n     * reevaluate the row decorations.  Since they depends on the current value\n     * of the row, they might have changed between each edit.\n     *\n     * @override\n     */\n    confirmChange: function (state, recordID) {\n        var self = this;\n        return this._super.apply(this, arguments).then(function (widgets) {\n            if (widgets.length) {\n                var $row = self._getRow(recordID);\n                var record = self._getRecord(recordID);\n                self._setDecorationClasses($row, self.rowDecorations, record);\n                self._updateFooter();\n            }\n            return widgets;\n        });\n    },\n    /**\n     * This is a specialized version of confirmChange, meant to be called when\n     * the change may have affected more than one line (so, for example, an\n     * onchange which add/remove a few lines in a x2many.  This does not occur\n     * in a normal list view).\n     *\n     * The update is more difficult when other rows could have been changed. We\n     * need to potentially remove some lines, add some other lines, update some\n     * other lines and maybe reorder a few of them.  This problem would neatly\n     * be solved by using a virtual dom, but we do not have this luxury yet.\n     * So, in the meantime, what we do is basically remove every current row\n     * except the 'main' one (the row which caused the update), then rerender\n     * every new row and add them before/after the main one.\n     *\n     * Note that this function assumes that the list isn't grouped, which is\n     * fine as it's never the case for x2many lists.\n     *\n     * @param {Object} state\n     * @param {string} id\n     * @param {string[]} fields\n     * @param {OdooEvent} ev\n     * @returns {Promise<AbstractField[]>} resolved with the list of widgets\n     *                                      that have been reset\n     */\n    confirmUpdate: function (state, id, fields, ev) {\n        var self = this;\n\n        var oldData = this.state.data;\n        this._setState(state);\n        return this.confirmChange(state, id, fields, ev).then(function () {\n            // If no record with 'id' can be found in the state, the\n            // confirmChange method will have rerendered the whole view already,\n            // so no further work is necessary.\n            var record = self._getRecord(id);\n            if (!record) {\n                return;\n            }\n\n            _.each(oldData, function (rec) {\n                if (rec.id !== id) {\n                    // update modifiers of the other rows for the upcoming rendering\n                    self._updateAllModifiers(rec);\n                    // destroy the widgets of the other rows as new ones will be instantiated\n                    self._destroyFieldWidgets(rec.id);\n                }\n            });\n\n             // Keep ref of the current row's widgets \n             const currentRowFieldWidgets = self.allFieldWidgets[id];\n             // Remove it from the list just for a clean start for generating the new content (avoid later memory leak)\n             delete self.allFieldWidgets[id];\n\n            // re-render whole body (outside the dom)\n            self.defs = [];\n            var $newBody = self._renderBody();\n            var defs = self.defs;\n            delete self.defs;\n\n            return Promise.all(defs).then(function () {\n                // All the field widgets have now be recreated, but we don't want the current row's ones.\n                // We destroy it and get it back from our reference. \n                // This manipulation avoids a memory leak, where field widgets in the current row wouldn't be destroyed and were kept in memory.\n                self._destroyFieldWidgets(id);\n                self.allFieldWidgets[id] = currentRowFieldWidgets;\n\n                // update registered modifiers to edit 'mode' because the call to\n                // _renderBody set baseModeByRecord as 'readonly'\n                _.each(self.columns, function (node) {\n                    self._registerModifiers(node, record, null, {mode: 'edit'});\n                });\n\n                // store the selection range to restore it once the table will\n                // be re-rendered, and the current cell re-selected\n                var currentRowID;\n                var currentWidget;\n                var focusedElement;\n                var selectionRange;\n                if (self.currentRow !== null) {\n                    currentRowID = self._getRecordID(self.currentRow);\n                    currentWidget = self.allFieldWidgets[currentRowID][self.currentFieldIndex];\n                    if (currentWidget) {\n                        focusedElement = currentWidget.getFocusableElement().get(0);\n                        if (currentWidget.formatType !== 'boolean' && focusedElement) {\n                            selectionRange = dom.getSelectionRange(focusedElement);\n                        }\n                    }\n                }\n\n                // remove all data rows except the one being edited, and insert\n                // data rows of the re-rendered body before and after it\n                var $editedRow = self._getRow(id);\n                $editedRow.nextAll('.o_data_row').remove();\n                $editedRow.prevAll('.o_data_row').remove();\n                var $newRow = $newBody.find('.o_data_row[data-id=\"' + id + '\"]');\n                $newRow.prevAll('.o_data_row').get().reverse().forEach(function (row) {\n                    $(row).insertBefore($editedRow);\n                });\n                $newRow.nextAll('.o_data_row').get().reverse().forEach(function (row) {\n                    $(row).insertAfter($editedRow);\n                });\n\n                // Call on_attach_callback methods on widgets that implement it\n                if (self._isInDom) {\n                    for (const handle in self.allFieldWidgets) {\n                        if (handle !== id) {\n                            self.allFieldWidgets[handle].forEach(widget => {\n                                if (widget.on_attach_callback) {\n                                    widget.on_attach_callback();\n                                }\n                            });\n                        }\n                    }\n                }\n\n                if (self.currentRow !== null) {\n                    var newRowIndex = $editedRow.prop('rowIndex') - 1;\n                    self.currentRow = newRowIndex;\n                    return self._selectCell(newRowIndex, self.currentFieldIndex, {force: true})\n                        .then(function () {\n                            // restore the selection range\n                            currentWidget = self.allFieldWidgets[currentRowID][self.currentFieldIndex];\n                            if (currentWidget) {\n                                focusedElement = currentWidget.getFocusableElement().get(0);\n                                if (selectionRange) {\n                                    dom.setSelectionRange(focusedElement, selectionRange);\n                                }\n                            }\n                        });\n                }\n            });\n        });\n    },\n    /**\n     * Edit the first record in the list\n     */\n    editFirstRecord: function (ev) {\n        const $borderRow = this._getBorderRow(ev.data.side || 'first');\n        this._selectCell($borderRow.prop('rowIndex') - 1, ev.data.cellIndex || 0);\n    },\n    /**\n     * Edit a given record in the list\n     *\n     * @param {string} recordID\n     */\n    editRecord: function (recordID) {\n        var $row = this._getRow(recordID);\n        var rowIndex = $row.prop('rowIndex') - 1;\n        return this._selectCell(rowIndex, 0);\n    },\n    /**\n     * Gives focus to a specific cell, given its row and its related column.\n     *\n     * @param {string} recordId\n     * @param {Object} column\n     */\n    focusCell: function (recordId, column) {\n        var $row = this._getRow(recordId);\n        var cellIndex = this.columns.indexOf(column);\n        $row.find('.o_data_cell')[cellIndex].focus();\n    },\n    /**\n     * Returns the recordID associated to the line which is currently in edition\n     * or null if there is no line in edition.\n     *\n     * @returns {string|null}\n     */\n    getEditableRecordID: function () {\n        if (this.currentRow !== null) {\n            return this._getRecordID(this.currentRow);\n        }\n        return null;\n    },\n    /**\n     * Returns whether the list is in multiple record edition from a given record.\n     *\n     * @private\n     * @param {string} recordId\n     * @returns {boolean}\n     */\n    isInMultipleRecordEdition: function (recordId) {\n        return this.isEditable() && this.isMultiEditable && this.selection.includes(recordId);\n    },\n    /**\n     * Returns whether the list can be edited.\n     * It's true when:\n     * - the list `editable` property is set,\n     * - or at least one record is selected (becomes partially editable)\n     *\n     * @returns {boolean}\n     */\n    isEditable: function () {\n        return this.editable || (this.isMultiEditable && this.selection.length);\n    },\n    /**\n     * Removes the line associated to the given recordID (the index of the row\n     * is found thanks to the old state), then updates the state.\n     *\n     * @param {Object} state\n     * @param {string} recordID\n     */\n    removeLine: function (state, recordID) {\n        this._setState(state);\n        var $row = this._getRow(recordID);\n        if ($row.length === 0) {\n            return;\n        }\n        if ($row.prop('rowIndex') - 1 === this.currentRow) {\n            this.currentRow = null;\n            this._enableRecordSelectors();\n        }\n\n        // destroy widgets first\n        this._destroyFieldWidgets(recordID);\n        // remove the row\n        if (this.state.count >= 4) {\n            $row.remove();\n        } else {\n            // we want to always keep at least 4 (possibly empty) rows\n            var $emptyRow = this._renderEmptyRow();\n            $row.replaceWith($emptyRow);\n            // move the empty row we just inserted after last data row\n            const $lastDataRow = this.$('.o_data_row:last');\n            if ($lastDataRow.length) {\n                $emptyRow.insertAfter($lastDataRow);\n            }\n        }\n    },\n    /**\n     * Updates the already rendered row associated to the given recordID so that\n     * it fits the given mode.\n     *\n     * @param {string} recordID\n     * @param {string} mode\n     * @returns {Promise}\n     */\n    setRowMode: function (recordID, mode) {\n        var self = this;\n        var record = self._getRecord(recordID);\n        if (!record) {\n            return Promise.resolve();\n        }\n\n        var editMode = (mode === 'edit');\n        var $row = this._getRow(recordID);\n        this.currentRow = editMode ? $row.prop('rowIndex') - 1 : null;\n        var $tds = $row.children('.o_data_cell');\n        var oldWidgets = _.clone(this.allFieldWidgets[record.id]);\n\n        // Prepare options for cell rendering (this depends on the mode)\n        var options = {\n            renderInvisible: editMode,\n            renderWidgets: editMode,\n        };\n        options.mode = editMode ? 'edit' : 'readonly';\n\n        // Switch each cell to the new mode; note: the '_renderBodyCell'\n        // function might fill the 'this.defs' variables with multiple promise\n        // so we create the array and delete it after the rendering.\n        var defs = [];\n        this.defs = defs;\n        _.each(this.columns, function (node, colIndex) {\n            var $td = $tds.eq(colIndex);\n            var $newTd = self._renderBodyCell(record, node, colIndex, options);\n\n            // Widgets are unregistered of modifiers data when they are\n            // destroyed. This is not the case for simple buttons so we have to\n            // do it here.\n            if ($td.hasClass('o_list_button')) {\n                self._unregisterModifiersElement(node, recordID, $td.children());\n            }\n\n            // For edit mode we only replace the content of the cell with its\n            // new content (invisible fields, editable fields, ...).\n            // For readonly mode, we replace the whole cell so that the\n            // dimensions of the cell are not forced anymore.\n            if (editMode) {\n                $td.empty().append($newTd.contents());\n            } else {\n                self._unregisterModifiersElement(node, recordID, $td);\n                $td.replaceWith($newTd);\n            }\n        });\n        delete this.defs;\n\n        // Destroy old field widgets\n        _.each(oldWidgets, this._destroyFieldWidget.bind(this, recordID));\n\n        // Toggle selected class here so that style is applied at the end\n        $row.toggleClass('o_selected_row', editMode);\n        if (editMode) {\n            this._disableRecordSelectors();\n        } else {\n            this._enableRecordSelectors();\n        }\n\n        return Promise.all(defs).then(function () {\n            // mark Owl sub components as mounted\n            WidgetAdapterMixin.on_attach_callback.call(self);\n\n            // necessary to trigger resize on fieldtexts\n            core.bus.trigger('DOM_updated');\n        });\n    },\n    /**\n     * This method is called whenever we click/move outside of a row that was\n     * in edit mode. This is the moment we save all accumulated changes on that\n     * row, if needed (@see BasicController.saveRecord).\n     *\n     * Note that we have to disable the focusable elements (inputs, ...) to\n     * prevent subsequent editions. These edits would be lost, because the list\n     * view only saves records when unselecting a row.\n     *\n     * @param {Object} [options]\n     * @param {boolean} [options.canDiscard=false] when set to true,\n     *   discard the record if it is new and not dirty otherwise save it\n     * @returns {Promise} The promise resolves if the row was unselected (and\n     *   possibly removed). If may be rejected, when the row is dirty and the\n     *   user refuses to discard its changes.\n     */\n    unselectRow: function (options={}) {\n        // Protect against calling this method when no row is selected\n        if (this.currentRow === null) {\n            return Promise.resolve();\n        }\n        var recordID = this._getRecordID(this.currentRow);\n        var recordWidgets = this.allFieldWidgets[recordID];\n        function toggleWidgets(disabled) {\n            _.each(recordWidgets, function (widget) {\n                var $el = widget.getFocusableElement();\n                $el.prop('disabled', disabled);\n            });\n        }\n\n        toggleWidgets(true);\n        return new Promise(async (resolve, reject) => {\n            const record = this._getRecord(recordID);\n            if (options.canDiscard && record.isNew()) {\n                await this.commitChanges(recordID);\n                if (!record.isDirty()) {\n                    this.trigger_up('mutexify', {\n                        action: () => {\n                            return this.trigger_up('discard_changes', {\n                                recordID: recordID,\n                                onSuccess: resolve,\n                                onFailure: reject,\n                            });\n                        },\n                    });\n                    return;\n                }\n            }\n            this.trigger_up('save_line', {\n                recordID: recordID,\n                onSuccess: resolve,\n                onFailure: reject,\n            });\n        }).then(selectNextRow => {\n            this._enableRecordSelectors();\n            // If any field has changed and if the list is in multiple edition,\n            // we send a truthy boolean to _selectRow to tell it not to select\n            // the following record.\n            return selectNextRow;\n        }).guardedCatch(() => {\n            toggleWidgets(false);\n        });\n    },\n    /**\n     * @override\n     */\n    updateState: function (state, params) {\n        // There are some cases where a record is added to an invisible list\n        // e.g. set a quotation template with optionnal products\n        if (params.keepWidths && this.$el.is(':visible')) {\n            this._storeColumnWidths();\n        }\n        if (params.noRender) {\n            // the state changed, but we won't do a re-rendering right now, so\n            // remove computed modifiers data (as they are obsolete) to force\n            // them to be recomputed at next (sub-)rendering\n            this.allModifiersData = [];\n        }\n        if ('addTrashIcon' in params) {\n            if (this.addTrashIcon !== params.addTrashIcon) {\n                this.columnWidths = false; // columns changed, so forget stored widths\n            }\n            this.addTrashIcon = params.addTrashIcon;\n        }\n        if ('addCreateLine' in params) {\n            this.addCreateLine = params.addCreateLine;\n        }\n        return this._super.apply(this, arguments);\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Used to bind event listeners so that they can be unbound when the list\n     * is destroyed.\n     * There is no reverse method (list._removeEventListener) because there is\n     * no issue with removing an non-existing listener.\n     *\n     * @private\n     * @param {string} type event name\n     * @param {EventTarget} el event target\n     * @param {Function} callback callback function to attach\n     * @param {Object} options event listener options\n     */\n    _addEventListener: function (type, el, callback, options) {\n        el.addEventListener(type, callback, options);\n        this.eventListeners.push({ type, el, callback, options });\n    },\n    /**\n     * Handles the assignation of default widths for each column header.\n     * If the list is empty, an arbitrary absolute or relative width will be\n     * given to the header\n     *\n     * @see _getColumnWidth for detailed information about which width is\n     * given to a certain field type.\n     *\n     * @private\n     */\n    _computeDefaultWidths: function () {\n        const isListEmpty = !this._hasVisibleRecords(this.state);\n        const relativeWidths = [];\n        this.columns.forEach(column => {\n            const th = this._getColumnHeader(column);\n            if (th.offsetParent === null) {\n                relativeWidths.push(false);\n            } else {\n                const width = this._getColumnWidth(column);\n                if (width.match(/[a-zA-Z]/)) { // absolute width with measure unit (e.g. 100px)\n                    if (isListEmpty) {\n                        th.style.width = width;\n                    } else {\n                        // If there are records, we force a min-width for fields with an absolute\n                        // width to ensure a correct rendering in edition\n                        th.style.minWidth = width;\n                    }\n                    relativeWidths.push(false);\n                } else { // relative width expressed as a weight (e.g. 1.5)\n                    relativeWidths.push(parseFloat(width, 10));\n                }\n            }\n        });\n\n        // Assignation of relative widths\n        if (isListEmpty) {\n            const totalWidth = this._getColumnsTotalWidth(relativeWidths);\n            for (let i in this.columns) {\n                if (relativeWidths[i]) {\n                    const th = this._getColumnHeader(this.columns[i]);\n                    th.style.width = (relativeWidths[i] / totalWidth * 100) + '%';\n                }\n            }\n            // Manualy assigns trash icon header width since it's not in the columns\n            const trashHeader = this.el.getElementsByClassName('o_list_record_remove_header')[0];\n            if (trashHeader) {\n                trashHeader.style.width = '32px';\n            }\n        }\n    },\n    /**\n     * Destroy all field widgets corresponding to a record.  Useful when we are\n     * removing a useless row.\n     *\n     * @param {string} recordID\n     */\n    _destroyFieldWidgets: function (recordID) {\n        if (recordID in this.allFieldWidgets) {\n            var widgetsToDestroy = this.allFieldWidgets[recordID].slice();\n            _.each(widgetsToDestroy, this._destroyFieldWidget.bind(this, recordID));\n            delete this.allFieldWidgets[recordID];\n        }\n    },\n    /**\n     * When editing a row, we want to disable all record selectors.\n     *\n     * @private\n     */\n    _disableRecordSelectors: function () {\n        this.$('.o_list_record_selector input').attr('disabled', 'disabled');\n    },\n    /**\n     * @private\n     */\n    _enableRecordSelectors: function () {\n        this.$('.o_list_record_selector input').attr('disabled', false);\n    },\n    /**\n     * This function freezes the column widths and forces a fixed table-layout,\n     * once the browser has computed the optimal width of each column according\n     * to the displayed records. We want to freeze widths s.t. it doesn't\n     * flicker when we switch a row in edition.\n     *\n     * We skip this when there is no record as we don't want to fix widths\n     * according to column's labels. In this case, we fallback on the 'weight'\n     * heuristic, which assigns to each column a fixed or relative width\n     * depending on the widget or field type.\n     *\n     * Note that the list must be in the DOM when this function is called.\n     *\n     * @private\n     */\n    _freezeColumnWidths: function () {\n        if (!this.columnWidths && this.el.offsetParent === null) {\n            // there is no record nor widths to restore or the list is not visible\n            // -> don't force column's widths w.r.t. their label\n            return;\n        }\n        const thElements = [...this.el.querySelectorAll('table thead th')];\n        if (!thElements.length) {\n            return;\n        }\n        const table = this.el.getElementsByClassName('o_list_table')[0];\n        let columnWidths = this.columnWidths;\n\n        if (!columnWidths || !columnWidths.length) { // no column widths to restore\n            // Set table layout auto and remove inline style to make sure that css\n            // rules apply (e.g. fixed width of record selector)\n            table.style.tableLayout = 'auto';\n            thElements.forEach(th => {\n                th.style.width = null;\n                th.style.maxWidth = null;\n            });\n\n            // Resets the default widths computation now that the table is visible.\n            this._computeDefaultWidths();\n\n            // Squeeze the table by applying a max-width on largest columns to\n            // ensure that it doesn't overflow\n            columnWidths = this._squeezeTable();\n        }\n\n        thElements.forEach((th, index) => {\n            // Width already set by default relative width computation\n            if (!th.style.width) {\n                th.style.width = `${columnWidths[index]}px`;\n            }\n        });\n\n        // Set the table layout to fixed\n        table.style.tableLayout = 'fixed';\n    },\n    /**\n     * Returns the first or last editable row of the list\n     *\n     * @private\n     * @returns {integer}\n     */\n    _getBorderRow: function (side) {\n        let $borderDataRow = this.$(`.o_data_row:${side}`);\n        if (!this._isRecordEditable($borderDataRow.data('id'))) {\n            $borderDataRow = this._getNearestEditableRow($borderDataRow, side === 'first');\n        }\n        return $borderDataRow;\n    },\n    /**\n     * Compute the sum of the weights for each column, given an array containing\n     * all relative widths. param `$thead` is useful for studio, in order to\n     * show column hooks.\n     *\n     * @private\n     * @param {jQuery} $thead\n     * @param {number[]} relativeWidths\n     * @return {integer}\n     */\n    _getColumnsTotalWidth(relativeWidths) {\n        return relativeWidths.reduce((acc, width) => acc + width, 0);\n    },\n    /**\n     * Returns the width of a column according the 'width' attribute set in the\n     * arch, the widget or the field type. A fixed width is harcoded for some\n     * field types (e.g. date and numeric fields). By default, the remaining\n     * space is evenly distributed between the other fields (with a factor '1').\n     *\n     * This is only used when there is no record in the list (i.e. when we can't\n     * let the browser compute the optimal width of each column).\n     *\n     * @see _renderHeader\n     * @private\n     * @param {Object} column an arch node\n     * @returns {string} either a weight factor (e.g. '1.5') or a css width\n     *   description (e.g. '120px')\n     */\n    _getColumnWidth: function (column) {\n        if (column.attrs.width) {\n            return column.attrs.width;\n        }\n        const fieldsInfo = this.state.fieldsInfo.list;\n        const name = column.attrs.name;\n        if (!fieldsInfo[name]) {\n            // Unnamed columns get default value\n            return '1';\n        }\n        const widget = fieldsInfo[name].Widget.prototype;\n        if ('widthInList' in widget) {\n            return widget.widthInList;\n        }\n        const field = this.state.fields[name];\n        if (!field) {\n            // this is not a field. Probably a button or something of unknown\n            // width.\n            return '1';\n        }\n        const fixedWidths = {\n            boolean: '70px',\n            date: '92px',\n            datetime: '146px',\n            float: '92px',\n            integer: '74px',\n            monetary: '104px',\n        };\n        let type = field.type;\n        if (fieldsInfo[name].widget in fixedWidths) {\n            type = fieldsInfo[name].widget;\n        }\n        return fixedWidths[type] || '1';\n    },\n    /**\n     * Gets the th element corresponding to a given column.\n     *\n     * @private\n     * @param {Object} column\n     * @returns {HTMLElement}\n     */\n    _getColumnHeader: function (column) {\n        const { icon, name, string } = column.attrs;\n        if (name) {\n            return this.el.querySelector(`thead th[data-name=\"${name}\"]`);\n        } else if (string) {\n            return this.el.querySelector(`thead th[data-string=\"${string}\"]`);\n        } else if (icon) {\n            return this.el.querySelector(`thead th[data-icon=\"${icon}\"]`);\n        }\n    },\n    /**\n     * Returns the nearest editable row starting from a given table row.\n     * If the list is grouped, jumps to the next unfolded group\n     *\n     * @private\n     * @param {jQuery} $row starting point\n     * @param {boolean} next whether the requested row should be the next or the previous one\n     * @return {jQuery|null}\n     */\n    _getNearestEditableRow: function ($row, next) {\n        const direction = next ? 'next' : 'prev';\n        let $nearestRow;\n        if (this.editable) {\n            $nearestRow = $row[direction]();\n            if (!$nearestRow.hasClass('o_data_row')) {\n                var $nextBody = $row.closest('tbody')[direction]();\n                while ($nextBody.length && !$nextBody.find('.o_data_row').length) {\n                    $nextBody = $nextBody[direction]();\n                }\n                $nearestRow = $nextBody.find(`.o_data_row:${next ? 'first' : 'last'}`);\n            }\n        } else {\n            // In readonly lists, look directly into selected records\n            const recordId = $row.data('id');\n            const rowSelectionIndex = this.selection.indexOf(recordId);\n            let nextRowIndex;\n            if (rowSelectionIndex < 0) {\n                nextRowIndex = next ? 0 : this.selection.length - 1;\n            } else {\n                nextRowIndex = rowSelectionIndex + (next ? 1 : -1);\n            }\n            // Index might be out of range, will then return an empty jQuery object\n            $nearestRow = this._getRow(this.selection[nextRowIndex]);\n        }\n        return $nearestRow;\n    },\n    /**\n     * Returns the current number of columns.  The editable renderer may add a\n     * trash icon on the right of a record, so we need to take this into account\n     *\n     * @override\n     * @returns {number}\n     */\n    _getNumberOfCols: function () {\n        var n = this._super();\n        if (this.addTrashIcon) {\n            n++;\n        }\n        return n;\n    },\n    /**\n     * Traverse this.state to find and return the record with given dataPoint id\n     * (for grouped list views, the record could be deep down in state tree).\n     *\n     * @override\n     * @private\n     */\n    _getRecord: function (recordId) {\n        var record;\n        utils.traverse_records(this.state, function (r) {\n            if (r.id === recordId) {\n                record = r;\n            }\n        });\n        return record;\n    },\n    /**\n     * Retrieve the record dataPoint id from a rowIndex as the row DOM element\n     * stores the record id in data.\n     *\n     * @private\n     * @param {integer} rowIndex\n     * @returns {string} record dataPoint id\n     */\n    _getRecordID: function (rowIndex) {\n        var $tr = this.$('table.o_list_table > tbody > tr').eq(rowIndex);\n        return $tr.data('id');\n    },\n    /**\n     * Return the jQuery tr element corresponding to the given record dataPoint\n     * id.\n     *\n     * @private\n     * @param {string} [recordId]\n     * @returns {jQueryElement}\n     */\n    _getRow: function (recordId) {\n        return this.$('.o_data_row[data-id=\"' + recordId + '\"]');\n    },\n    /**\n     * This function returns true iff records are visible in the list, i.e.\n     *   if the list is ungrouped: true iff the list isn't empty;\n     *   if the list is grouped: true iff there is at least one unfolded group\n     *     containing records.\n     *\n     * @param {Object} list a datapoint\n     * @returns {boolean}\n     */\n    _hasVisibleRecords: function (list) {\n        if (!list.groupedBy.length) {\n            return !!list.data.length;\n        } else {\n            var hasVisibleRecords = false;\n            for (var i = 0; i < list.data.length; i++) {\n                hasVisibleRecords = hasVisibleRecords || this._hasVisibleRecords(list.data[i]);\n            }\n            return hasVisibleRecords;\n        }\n    },\n    /**\n     * Returns whether a recordID is currently editable.\n     *\n     * @param {string} recordID\n     * @returns {boolean}\n     */\n    _isRecordEditable: function (recordID) {\n        return this.editable || (this.isMultiEditable && this.selection.includes(recordID));\n    },\n    /**\n     * Moves to the next row in the list\n     *\n     * @private\n     * @params {Object} [options] see @_moveToSideLine\n     */\n    _moveToNextLine: function (options) {\n        this._moveToSideLine(true, options);\n    },\n    /**\n     * Moves to the previous row in the list\n     *\n     * @private\n     * @params {Object} [options] see @_moveToSideLine\n     */\n    _moveToPreviousLine: function (options) {\n        this._moveToSideLine(false, options);\n    },\n    /**\n     * Moves the focus to the nearest editable row before or after the current one.\n     * If we arrive at the end of the list (or of a group in the grouped case) and the list\n     * is editable=\"bottom\", we create a new record, otherwise, we move the\n     * cursor to the first row (of the next group in the grouped case).\n     *\n     * @private\n     * @param {number} next whether to move to the next or previous row\n     * @param {Object} [options]\n     * @param {boolean} [options.forceCreate=false] typically set to true when\n     *   navigating with ENTER ; in this case, if the next row is the 'Add a\n     *   row' one, always create a new record (never skip it, like TAB does\n     *   under some conditions)\n     */\n    _moveToSideLine: function (next, options) {\n        options = options || {};\n        const recordID = this._getRecordID(this.currentRow);\n        this.commitChanges(recordID).then(() => {\n            const record = this._getRecord(recordID);\n            const multiEdit = this.isInMultipleRecordEdition(recordID);\n            if (!multiEdit) {\n                const fieldNames = this.canBeSaved(recordID);\n                if (fieldNames.length && (record.isDirty() || options.forceCreate)) {\n                    // the current row is invalid, we only leave it if it is not dirty\n                    // (we didn't make any change on this row, which is a new one) and\n                    // we are navigating with TAB (forceCreate=false)\n                    return;\n                }\n            }\n            // compute the index of the next (record) row to select, if any\n            const side = next ? 'first' : 'last';\n            const borderRowIndex = this._getBorderRow(side).prop('rowIndex') - 1;\n            const cellIndex = next ? 0 : this.allFieldWidgets[recordID].length - 1;\n            const cellOptions = { inc: next ? 1 : -1, force: true };\n            const $currentRow = this._getRow(recordID);\n            const $nextRow = this._getNearestEditableRow($currentRow, next);\n            let nextRowIndex = null;\n            let groupId;\n\n            if (!this.isGrouped) {\n                // ungrouped case\n                if ($nextRow.length) {\n                    nextRowIndex = $nextRow.prop('rowIndex') - 1;\n                } else if (!this.editable) {\n                    nextRowIndex = borderRowIndex;\n                } else if (!options.forceCreate && !record.isDirty()) {\n                    this.trigger_up('discard_changes', {\n                        recordID: recordID,\n                        onSuccess: this.trigger_up.bind(this, 'activate_next_widget', { side: side }),\n                    });\n                    return;\n                }\n            } else {\n                // grouped case\n                var $directNextRow = $currentRow.next();\n                if (next && this.editable === \"bottom\" && $directNextRow.hasClass('o_add_record_row')) {\n                    // the next row is the 'Add a line' row (i.e. the current one is the last record\n                    // row of the group)\n                    if (options.forceCreate || record.isDirty()) {\n                        // if we modified the current record, add a row to create a new record\n                        groupId = $directNextRow.data('group-id');\n                    } else {\n                        // if we didn't change anything to the current line (e.g. we pressed TAB on\n                        // each cell without modifying/entering any data), we discard that line (if\n                        // it was a new one) and move to the first record of the next group\n                        nextRowIndex = ($nextRow.prop('rowIndex') - 1) || null;\n                        this.trigger_up('discard_changes', {\n                            recordID: recordID,\n                            onSuccess: () => {\n                                if (nextRowIndex !== null) {\n                                    if (!record.res_id) {\n                                        // the current record was a new one, so we decrement\n                                        // nextRowIndex as that row has been removed meanwhile\n                                        nextRowIndex--;\n                                    }\n                                    this._selectCell(nextRowIndex, cellIndex, cellOptions);\n                                } else {\n                                    // we were in the last group, so go back to the top\n                                    this._selectCell(borderRowIndex, cellIndex, cellOptions);\n                                }\n                            },\n                        });\n                        return;\n                    }\n                } else {\n                    // there is no 'Add a line' row (i.e. the create feature is disabled), or the\n                    // list is editable=\"top\", we focus the first record of the next group if any,\n                    // or we go back to the top of the list\n                    nextRowIndex = $nextRow.length ?\n                        ($nextRow.prop('rowIndex') - 1) :\n                        borderRowIndex;\n                }\n            }\n\n            // if there is a (record) row to select, select it, otherwise, add a new record (in the\n            // correct group, if the view is grouped)\n            if (nextRowIndex !== null) {\n                // cellOptions.force = true;\n                this._selectCell(nextRowIndex, cellIndex, cellOptions);\n            } else if (this.editable) {\n                // if for some reason (e.g. create feature is disabled) we can't add a new\n                // record, select the first record row\n                this.unselectRow().then(this.trigger_up.bind(this, 'add_record', {\n                    groupId: groupId,\n                    onFail: this._selectCell.bind(this, borderRowIndex, cellIndex, cellOptions),\n                }));\n            }\n        });\n    },\n    /**\n     * Override to compute the (relative or absolute) width of each column.\n     *\n     * @override\n     * @private\n     */\n    _processColumns: function () {\n        const oldColumns = this.columns;\n        this._super.apply(this, arguments);\n        // check if stored widths still apply\n        if (this.columnWidths && oldColumns && oldColumns.length === this.columns.length) {\n            for (let i = 0; i < oldColumns.length; i++) {\n                if (oldColumns[i] !== this.columns[i]) {\n                    this.columnWidths = false; // columns changed, so forget stored widths\n                    break;\n                }\n            }\n        } else {\n            this.columnWidths = false; // columns changed, so forget stored widths\n        }\n    },\n    /**\n     * @override\n     * @returns {Promise}\n     */\n    _render: function () {\n        this.currentRow = null;\n        this.currentFieldIndex = null;\n        return this._super.apply(this, arguments);\n    },\n    /**\n     * Override to add the 'Add an item' link to the end of last-level opened\n     * groups.\n     *\n     * @override\n     * @private\n     */\n    _renderGroup: function (group) {\n        var result = this._super.apply(this, arguments);\n        if (!group.groupedBy.length && this.addCreateLineInGroups) {\n            var $groupBody = result[0];\n            var $a = $('<a href=\"#\" role=\"button\">')\n                .text(_t(\"Add a line\"))\n                .attr('data-group-id', group.id);\n            var $td = $('<td>')\n                        .attr('colspan', this._getNumberOfCols())\n                        .addClass('o_group_field_row_add')\n                        .attr('tabindex', -1)\n                        .append($a);\n            var $tr = $('<tr>', {class: 'o_add_record_row'})\n                        .attr('data-group-id', group.id)\n                        .append($td);\n            $groupBody.append($tr.prepend($('<td>').html('&nbsp;')));\n        }\n        return result;\n    },\n    /**\n     * The renderer needs to support reordering lines.  This is only active in\n     * edit mode. The handleField attribute is set when there is a sequence\n     * widget.\n     *\n     * @override\n     */\n    _renderBody: function () {\n        var self = this;\n        var $body = this._super.apply(this, arguments);\n        if (this.hasHandle) {\n            $body.sortable({\n                axis: 'y',\n                items: '> tr.o_data_row',\n                helper: 'clone',\n                handle: '.o_row_handle',\n                cursor: \"grabbing\",\n                stop: function (event, ui) {\n                    // update currentID taking moved line into account\n                    if (self.currentRow !== null) {\n                        var currentID = self.state.data[self.currentRow].id;\n                        self.currentRow = self._getRow(currentID).index();\n                    }\n                    self.unselectRow().then(function () {\n                        self._moveRecord(ui.item.data('id'), ui.item.index());\n                    });\n                },\n            });\n        }\n        return $body;\n    },\n    /**\n     * @override\n     * @private\n     */\n    _renderFooter: function () {\n        const $footer = this._super.apply(this, arguments);\n        if (this.addTrashIcon) {\n            $footer.find('tr').append($('<td>'));\n        }\n        return $footer;\n    },\n    /**\n     * Override to optionally add a th in the header for the remove icon column.\n     *\n     * @override\n     * @private\n     */\n    _renderHeader: function () {\n        var $thead = this._super.apply(this, arguments);\n        if (this.addTrashIcon) {\n            $thead.find('tr').append($('<th>', {class: 'o_list_record_remove_header'}));\n        }\n        return $thead;\n    },\n    /**\n     * Overriden to add a resize handle in editable list column headers.\n     * Only applies to headers containing text.\n     *\n     * @override\n     * @private\n     */\n    _renderHeaderCell: function () {\n        const $th = this._super.apply(this, arguments);\n        if ($th[0].innerHTML.length && this._hasVisibleRecords(this.state)) {\n            const resizeHandle = document.createElement('span');\n            resizeHandle.classList = 'o_resize';\n            resizeHandle.onclick = this._onClickResize.bind(this);\n            resizeHandle.onmousedown = this._onStartResize.bind(this);\n            $th.append(resizeHandle);\n        }\n        return $th;\n    },\n    /**\n     * Editable rows are possibly extended with a trash icon on their right, to\n     * allow deleting the corresponding record.\n     * For many2many editable lists, the trash bin is replaced by X.\n     *\n     * @override\n     * @param {any} record\n     * @param {any} index\n     * @returns {jQueryElement}\n     */\n    _renderRow: function (record, index) {\n        var $row = this._super.apply(this, arguments);\n        if (this.addTrashIcon) {\n            var $icon = this.isMany2Many ?\n                $('<button>', {'class': 'fa fa-times', 'name': 'unlink', 'aria-label': _t('Unlink row ') + (index + 1)}) :\n                $('<button>', {'class': 'fa fa-trash-o', 'name': 'delete', 'aria-label': _t('Delete row ') + (index + 1)});\n            var $td = $('<td>', {class: 'o_list_record_remove'}).append($icon);\n            $row.append($td);\n        }\n        return $row;\n    },\n    /**\n     * If the editable list view has the parameter addCreateLine, we need to\n     * add a last row with the necessary control.\n     *\n     * If the list has a handleField, we want to left-align the first button\n     * on the first real column.\n     *\n     * @override\n     * @returns {jQueryElement[]}\n     */\n    _renderRows: function () {\n        var $rows = this._super();\n        if (this.addCreateLine) {\n            var $tr = $('<tr>');\n            var colspan = this._getNumberOfCols();\n\n            if (this.handleField) {\n                colspan = colspan - 1;\n                $tr.append('<td>');\n            }\n\n            var $td = $('<td>')\n                .attr('colspan', colspan)\n                .addClass('o_field_x2many_list_row_add');\n            $tr.append($td);\n            $rows.push($tr);\n\n            if (this.addCreateLine) {\n                _.each(this.creates, function (create, index) {\n                    var $a = $('<a href=\"#\" role=\"button\">')\n                        .attr('data-context', create.context)\n                        .text(create.string);\n                    if (index > 0) {\n                        $a.addClass('ml16');\n                    }\n                    $td.append($a);\n                });\n            }\n        }\n        return $rows;\n    },\n    /**\n     * @override\n     * @private\n     * @returns {Promise} this promise is resolved immediately\n     */\n    _renderView: function () {\n        this.currentRow = null;\n        return this._super.apply(this, arguments).then(() => {\n            const table = this.el.getElementsByClassName('o_list_table')[0];\n            if (table) {\n                table.classList.toggle('o_empty_list', !this._hasVisibleRecords(this.state));\n                this._freezeColumnWidths();\n            }\n        });\n    },\n    /**\n     * This is one of the trickiest method in the editable renderer.  It has to\n     * do a lot of stuff: it has to determine which cell should be selected (if\n     * the target cell is readonly, we need to find another suitable cell), then\n     * unselect the current row, and activate the line where the selected cell\n     * is, if necessary.\n     *\n     * @param {integer} rowIndex\n     * @param {integer} fieldIndex\n     * @param {Object} [options]\n     * @param {Event} [options.event] original target of the event which\n     * @param {boolean} [options.wrap=true] if true and no widget could be\n     *   triggered the cell selection\n     *   selected from the fieldIndex to the last column, then we wrap around and\n     *   try to select a widget starting from the beginning\n     * @param {boolean} [options.force=false] if true, force selecting the cell\n     *   even if seems to be already the selected one (useful after a re-\n     *   rendering, to reset the focus on the correct field)\n     * @param {integer} [options.inc=1] the increment to use when searching for\n     *   the \"next\" possible cell (if the cell to select can't be selected)\n     * @return {Promise} fails if no cell could be selected\n     */\n    _selectCell: function (rowIndex, fieldIndex, options) {\n        options = options || {};\n        // Do nothing if the user tries to select current cell\n        if (!options.force && rowIndex === this.currentRow && fieldIndex === this.currentFieldIndex) {\n            return Promise.resolve();\n        }\n        var wrap = options.wrap === undefined ? true : options.wrap;\n        var recordID = this._getRecordID(rowIndex);\n\n        // Select the row then activate the widget in the correct cell\n        var self = this;\n        return this._selectRow(rowIndex).then(function () {\n            var record = self._getRecord(recordID);\n            if (fieldIndex >= (self.allFieldWidgets[record.id] || []).length) {\n                return Promise.reject();\n            }\n            // _activateFieldWidget might trigger an onchange,\n            // which requires currentFieldIndex to be set\n            // so that the cursor can be restored\n            var oldFieldIndex = self.currentFieldIndex;\n            self.currentFieldIndex = fieldIndex;\n            fieldIndex = self._activateFieldWidget(record, fieldIndex, {\n                inc: options.inc || 1,\n                wrap: wrap,\n                event: options && options.event,\n            });\n            if (fieldIndex < 0) {\n                self.currentFieldIndex = oldFieldIndex;\n                return Promise.reject();\n            }\n            self.currentFieldIndex = fieldIndex;\n        });\n    },\n    /**\n     * Activates the row at the given row index.\n     *\n     * @param {integer} rowIndex\n     * @returns {Promise}\n     */\n    _selectRow: function (rowIndex) {\n        // Do nothing if already selected\n        if (rowIndex === this.currentRow) {\n            return Promise.resolve();\n        }\n        if (!this.columnWidths) {\n            // we don't want the column widths to change when selecting rows\n            this._storeColumnWidths();\n        }\n        var recordId = this._getRecordID(rowIndex);\n        // To select a row, the currently selected one must be unselected first\n        var self = this;\n        return this.unselectRow({ canDiscard: true }).then((selectNextRow = true) => {\n            if (!selectNextRow) {\n                return Promise.resolve();\n            }\n            if (!recordId) {\n                // The row to selected doesn't exist anymore (probably because\n                // an onchange triggered when unselecting the previous one\n                // removes rows)\n                return Promise.reject();\n            }\n            // Notify the controller we want to make a record editable\n            return new Promise(function (resolve) {\n                self.trigger_up('edit_line', {\n                    recordId: recordId,\n                    onSuccess: function () {\n                        self._disableRecordSelectors();\n                        resolve();\n                    },\n                });\n            });\n        });\n    },\n    /**\n     * Set a maximum width on the largest columns in the list in case the table\n     * is overflowing. The idea is to shrink largest columns first, but to\n     * ensure that they are still the largest at the end (maybe in equal measure\n     * with other columns). Button columns aren't impacted by this function, as\n     * we assume that they can't be squeezed (we want all buttons to always be\n     * available, not being replaced by ellipsis).\n     *\n     * @private\n     * @returns {integer[]} width (in px) of each column s.t. the table doesn't\n     *   overflow\n     */\n    _squeezeTable: function () {\n        const table = this.el.getElementsByClassName('o_list_table')[0];\n\n        // Toggle a className used to remove style that could interfer with the ideal width\n        // computation algorithm (e.g. prevent text fields from being wrapped during the\n        // computation, to prevent them from being completely crushed)\n        table.classList.add('o_list_computing_widths');\n\n        const thead = table.getElementsByTagName('thead')[0];\n        const thElements = [...thead.getElementsByTagName('th')];\n        const columnWidths = thElements.map(th => th.offsetWidth);\n        const getWidth = th => columnWidths[thElements.indexOf(th)] || 0;\n        const getTotalWidth = () => thElements.reduce((tot, th, i) => tot + columnWidths[i], 0);\n        const shrinkColumns = (columns, width) => {\n            let thresholdReached = false;\n            columns.forEach(th => {\n                const index = thElements.indexOf(th);\n                let maxWidth = columnWidths[index] - Math.ceil(width / columns.length);\n                if (maxWidth < 92) { // prevent the columns from shrinking under 92px (~ date field)\n                    maxWidth = 92;\n                    thresholdReached = true;\n                }\n                th.style.maxWidth = `${maxWidth}px`;\n                columnWidths[index] = maxWidth;\n            });\n            return thresholdReached;\n        };\n        // Sort columns, largest first\n        const sortedThs = [...thead.querySelectorAll('th:not(.o_list_button)')]\n            .sort((a, b) => getWidth(b) - getWidth(a));\n        const allowedWidth = table.parentNode.offsetWidth;\n\n        let totalWidth = getTotalWidth();\n        let stop = false;\n        let index = 0;\n        while (totalWidth > allowedWidth && !stop) {\n            // Find the largest columns\n            index++;\n            const largests = sortedThs.slice(0, index);\n            while (getWidth(largests[0]) === getWidth(sortedThs[index])) {\n                largests.push(sortedThs[index]);\n                index++;\n            }\n\n            // Compute the number of px to remove from the largest columns\n            const nextLargest = sortedThs[index]; // largest column when omitting those in largests\n            const totalToRemove = totalWidth - allowedWidth;\n            const canRemove = (getWidth(largests[0]) - getWidth(nextLargest)) * largests.length;\n\n            // Shrink the largests columns\n            stop = shrinkColumns(largests, Math.min(totalToRemove, canRemove));\n\n            totalWidth = getTotalWidth();\n        }\n\n        // We are no longer computing widths, so restore the normal style\n        table.classList.remove('o_list_computing_widths');\n\n        return columnWidths;\n    },\n    /**\n     * @private\n     */\n    _storeColumnWidths: function () {\n        this.columnWidths = this.$('thead th').toArray().map(function (th) {\n            return $(th).outerWidth();\n        });\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * This method is called when we click on the 'Add a line' button in a groupby\n     * list view.\n     *\n     * @param {MouseEvent} ev\n     */\n    _onAddRecordToGroup: function (ev) {\n        ev.preventDefault();\n        // we don't want the click to cause other effects, such as unselecting\n        // the row that we are creating, because it counts as a click on a tr\n        ev.stopPropagation();\n\n        var self = this;\n        // This method can be called when selecting the parent of the link.\n        // We need to ensure that the link is the actual target\n        const target = ev.target.tagName !== 'A' ? ev.target.getElementsByTagName('A')[0] : ev.target;\n        const groupId = target.dataset.groupId;\n        this.currentGroupId = groupId;\n        this.unselectRow().then(function () {\n            self.trigger_up('add_record', {\n                groupId: groupId,\n            });\n        });\n    },\n    /**\n     * This method is called when we click on the 'Add a line' button in a sub\n     * list such as a one2many in a form view.\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onAddRecord: function (ev) {\n        // we don't want the browser to navigate to a the # url\n        ev.preventDefault();\n\n        // we don't want the click to cause other effects, such as unselecting\n        // the row that we are creating, because it counts as a click on a tr\n        ev.stopPropagation();\n\n        // but we do want to unselect current row\n        var self = this;\n        this.unselectRow().then(function () {\n            self.trigger_up('add_record', {context: ev.currentTarget.dataset.context && [ev.currentTarget.dataset.context]}); // TODO write a test, the promise was not considered\n        });\n    },\n    /**\n     * When the user clicks on a cell, we simply select it.\n     *\n     * @private\n     * @param {MouseEvent} event\n     */\n    _onCellClick: function (event) {\n        // The special_click property explicitely allow events to bubble all\n        // the way up to bootstrap's level rather than being stopped earlier.\n        var $td = $(event.currentTarget);\n        var $tr = $td.parent();\n        var rowIndex = $tr.prop('rowIndex') - 1;\n        if (!this._isRecordEditable($tr.data('id')) || $(event.target).prop('special_click')) {\n            return;\n        }\n        var fieldIndex = Math.max($tr.find('.o_field_cell').index($td), 0);\n        this._selectCell(rowIndex, fieldIndex, {event: event});\n    },\n    /**\n     * We want to override any default mouse behaviour when clicking on the resize handles\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickResize: function (ev) {\n        ev.stopPropagation();\n        ev.preventDefault();\n    },\n    /**\n     * We need to manually unselect row, because no one else would do it\n     */\n    _onEmptyRowClick: function () {\n        this.unselectRow();\n    },\n    /**\n     * Clicking on a footer should unselect (and save) the currently selected\n     * row. It has to be done this way, because this is a click inside this.el,\n     * and _onWindowClicked ignore those clicks.\n     */\n    _onFooterClick: function () {\n        this.unselectRow();\n    },\n    /**\n     * Manages the keyboard events on the list. If the list is not editable, when the user navigates to\n     * a cell using the keyboard, if he presses enter, enter the model represented by the line\n     *\n     * @private\n     * @param {KeyboardEvent} ev\n     * @override\n     */\n    _onKeyDown: function (ev) {\n        const $target = $(ev.currentTarget);\n        const $tr = $target.closest('tr');\n        const recordEditable = this._isRecordEditable($tr.data('id'));\n\n        if (recordEditable && ev.keyCode === $.ui.keyCode.ENTER && $tr.hasClass('o_selected_row')) {\n            // enter on a textarea for example, let it bubble\n            return;\n        }\n\n        if (recordEditable && ev.keyCode === $.ui.keyCode.ENTER &&\n            !$tr.hasClass('o_selected_row') && !$tr.hasClass('o_group_header')) {\n            ev.stopPropagation();\n            ev.preventDefault();\n            if ($target.closest('td').hasClass('o_group_field_row_add')) {\n                this._onAddRecordToGroup(ev);\n            } else {\n                this._onCellClick(ev);\n            }\n        } else {\n            this._super.apply(this, arguments);\n        }\n    },\n    /**\n     * @private\n     * @param {KeyDownEvent} e\n     */\n    _onKeyDownAddRecord: function (e) {\n        switch (e.keyCode) {\n            case $.ui.keyCode.ENTER:\n                e.stopPropagation();\n                e.preventDefault();\n                this._onAddRecord(e);\n                break;\n        }\n    },\n    /**\n     * Handles the keyboard navigation according to events triggered by field\n     * widgets.\n     * - previous: move to the first activable cell on the left if any, if not\n     *          move to the rightmost activable cell on the row above.\n     * - next: move to the first activable cell on the right if any, if not move\n     *          to the leftmost activable cell on the row below.\n     * - next_line: move to leftmost activable cell on the row below.\n     *\n     * Note: moving to a line below if on the last line or moving to a line\n     * above if on the first line automatically creates a new line.\n     *\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onNavigationMove: function (ev) {\n        var self = this;\n        // Don't stop the propagation when navigating up while not editing any row\n        if (this.currentRow === null && ev.data.direction === 'up') {\n            return;\n        }\n        ev.stopPropagation(); // stop the event, the action is done by this renderer\n        if (ev.data.originalEvent && ['next', 'previous'].includes(ev.data.direction)) {\n            ev.data.originalEvent.preventDefault();\n            ev.data.originalEvent.stopPropagation();\n        }\n        switch (ev.data.direction) {\n            case 'previous':\n                if (this.currentFieldIndex > 0) {\n                    this._selectCell(this.currentRow, this.currentFieldIndex - 1, {inc: -1, wrap: false})\n                        .guardedCatch(this._moveToPreviousLine.bind(this));\n                } else {\n                    this._moveToPreviousLine();\n                }\n                break;\n            case 'next':\n                if (this.currentFieldIndex + 1 < this.columns.length) {\n                    this._selectCell(this.currentRow, this.currentFieldIndex + 1, {wrap: false})\n                        .guardedCatch(this._moveToNextLine.bind(this));\n                } else {\n                    this._moveToNextLine();\n                }\n                break;\n            case 'next_line':\n                // If the list is readonly and the current is the only record editable, we unselect the line\n                if (!this.editable && this.selection.length === 1 &&\n                    this._getRecordID(this.currentRow) === ev.target.dataPointID) {\n                    this.unselectRow();\n                } else {\n                    this._moveToNextLine({ forceCreate: true });\n                }\n                break;\n            case 'cancel':\n                // stop the original event (typically an ESCAPE keydown), to\n                // prevent from closing the potential dialog containing this list\n                // also auto-focus the 1st control, if any.\n                ev.data.originalEvent.stopPropagation();\n                var rowIndex = this.currentRow;\n                var cellIndex = this.currentFieldIndex + 1;\n                this.trigger_up('discard_changes', {\n                    recordID: ev.target.dataPointID,\n                    onSuccess: function () {\n                        self._enableRecordSelectors();\n                        var recordId = self._getRecordID(rowIndex);\n                        if (recordId) {\n                            var correspondingRow = self._getRow(recordId);\n                            correspondingRow.children().eq(cellIndex).focus();\n                        } else if (self.currentGroupId) {\n                            self.$('a[data-group-id=\"' + self.currentGroupId + '\"]').focus();\n                        } else {\n                            self.$('.o_field_x2many_list_row_add a:first').focus(); // FIXME\n                        }\n                    }\n                });\n                break;\n        }\n    },\n    /**\n     * Triggers a remove event. I don't know why we stop the propagation of the\n     * event.\n     *\n     * @param {MouseEvent} event\n     */\n    _onRemoveIconClick: function (event) {\n        event.stopPropagation();\n        var $row = $(event.target).closest('tr');\n        var id = $row.data('id');\n        if ($row.hasClass('o_selected_row')) {\n            this.trigger_up('list_record_remove', {id: id});\n        } else {\n            var self = this;\n            this.unselectRow().then(function () {\n                self.trigger_up('list_record_remove', {id: id});\n            });\n        }\n    },\n    /**\n     * React to window resize events by recomputing the width of each column.\n     *\n     * @private\n     */\n    _onResize: function () {\n        this.columnWidths = false;\n        this._freezeColumnWidths();\n    },\n    /**\n     * If the list view editable, just let the event bubble. We don't want to\n     * open the record in this case anyway.\n     *\n     * @override\n     * @private\n     */\n    _onRowClicked: function (ev) {\n        if (!this._isRecordEditable(ev.currentTarget.dataset.id)) {\n            // If there is an edited record, tries to save it and do not open the clicked record\n            if (this.getEditableRecordID()) {\n                this.unselectRow();\n            } else {\n                this._super.apply(this, arguments);\n            }\n        }\n    },\n    /**\n     * Overrides to prevent from sorting if we are currently editing a record.\n     *\n     * @override\n     * @private\n     */\n    _onSortColumn: function () {\n        if (this.currentRow === null && !this.isResizing) {\n            this._super.apply(this, arguments);\n        }\n    },\n    /**\n     * Handles the resize feature on the column headers\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onStartResize: function (ev) {\n        // Only triggered by left mouse button\n        if (ev.which !== 1) {\n            return;\n        }\n        ev.preventDefault();\n        ev.stopPropagation();\n\n        this.isResizing = true;\n\n        const table = this.el.getElementsByClassName('o_list_table')[0];\n        const th = ev.target.closest('th');\n        table.style.width = `${table.offsetWidth}px`;\n        const thPosition = [...th.parentNode.children].indexOf(th);\n        const resizingColumnElements = [...table.getElementsByTagName('tr')]\n            .filter(tr => tr.children.length === th.parentNode.children.length)\n            .map(tr => tr.children[thPosition]);\n        const optionalDropdown = this.el.getElementsByClassName('o_optional_columns')[0];\n        const initialX = ev.pageX;\n        const initialWidth = th.offsetWidth;\n        const initialTableWidth = table.offsetWidth;\n        const initialDropdownX = optionalDropdown ? optionalDropdown.offsetLeft : null;\n        const resizeStoppingEvents = [\n            'keydown',\n            'mousedown',\n            'mouseup',\n        ];\n\n        // Fix container width to prevent the table from overflowing when being resized\n        if (!this.el.style.width) {\n            this.el.style.width = `${this.el.offsetWidth}px`;\n        }\n\n        // Apply classes to table and selected column\n        table.classList.add('o_resizing');\n        resizingColumnElements.forEach(el => el.classList.add('o_column_resizing'));\n\n        // Mousemove event : resize header\n        const resizeHeader = ev => {\n            ev.preventDefault();\n            ev.stopPropagation();\n            const delta = ev.pageX - initialX;\n            const newWidth = Math.max(10, initialWidth + delta);\n            const tableDelta = newWidth - initialWidth;\n            th.style.width = `${newWidth}px`;\n            th.style.maxWidth = `${newWidth}px`;\n            table.style.width = `${initialTableWidth + tableDelta}px`;\n            if (optionalDropdown) {\n                optionalDropdown.style.left = `${initialDropdownX + tableDelta}px`;\n            }\n        };\n        this._addEventListener('mousemove', window, resizeHeader);\n\n        // Mouse or keyboard events : stop resize\n        const stopResize = ev => {\n            // Ignores the initial 'left mouse button down' event in order\n            // to not instantly remove the listener\n            if (ev.type === 'mousedown' && ev.which === 1) {\n                return;\n            }\n            ev.preventDefault();\n            ev.stopPropagation();\n            // We need a small timeout to not trigger a click on column header\n            clearTimeout(this.resizeTimeout);\n            this.resizeTimeout = setTimeout(() => {\n                this.isResizing = false;\n            }, 100);\n            window.removeEventListener('mousemove', resizeHeader);\n            table.classList.remove('o_resizing');\n            resizingColumnElements.forEach(el => el.classList.remove('o_column_resizing'));\n            resizeStoppingEvents.forEach(stoppingEvent => {\n                window.removeEventListener(stoppingEvent, stopResize);\n            });\n\n            // we remove the focus to make sure that the there is no focus inside\n            // the tr.  If that is the case, there is some css to darken the whole\n            // thead, and it looks quite weird with the small css hover effect.\n            document.activeElement.blur();\n        };\n        // We have to listen to several events to properly stop the resizing function. Those are:\n        // - mousedown (e.g. pressing right click)\n        // - mouseup : logical flow of the resizing feature (drag & drop)\n        // - keydown : (e.g. pressing 'Alt' + 'Tab' or 'Windows' key)\n        resizeStoppingEvents.forEach(stoppingEvent => {\n            this._addEventListener(stoppingEvent, window, stopResize);\n        });\n    },\n    /**\n     * Unselect the row before adding the optional column to the listview\n     *\n     * @override\n     * @private\n     */\n    _onToggleOptionalColumnDropdown: function (ev) {\n        this.unselectRow().then(this._super.bind(this, ev));\n    },\n    /**\n     * When a click happens outside the list view, or outside a currently\n     * selected row, we want to unselect it.\n     *\n     * This is quite tricky, because in many cases, such as an autocomplete\n     * dropdown opened by a many2one in a list editable row, we actually don't\n     * want to unselect (and save) the current row.\n     *\n     * So, we try to ignore clicks on subelements of the renderer that are\n     * appended in the body, outside the table)\n     *\n     * @param {MouseEvent} event\n     */\n    _onWindowClicked: function (event) {\n        // ignore clicks on readonly lists with no selected rows\n        if (!this.isEditable()) {\n            return;\n        }\n\n        // ignore clicks if this renderer is not in the dom.\n        if (!document.contains(this.el)) {\n            return;\n        }\n\n        // there is currently no selected row\n        if (this.currentRow === null) {\n            return;\n        }\n\n        // ignore clicks in autocomplete dropdowns\n        if ($(event.target).closest('.ui-autocomplete').length) {\n            return;\n        }\n\n        // ignore clicks if there is a modal, except if the list is in the last\n        // (active) modal\n        const $modal = $('.modal[role=\"dialog\"]:last');\n        if ($modal.length) {\n            var $listModal = this.$el.closest('.modal');\n            if ($modal.prop('id') !== $listModal.prop('id')) {\n                return;\n            }\n        }\n\n        // ignore clicks if target is no longer in dom.  For example, a click on\n        // the 'delete' trash icon of a m2m tag.\n        if (!document.contains(event.target)) {\n            return;\n        }\n\n        // ignore clicks if target is inside the list. In that case, they are\n        // handled directly by the renderer.\n        if (this.el.contains(event.target) && this.el !== event.target) {\n            return;\n        }\n\n        // ignore click if search facet is removed as it will re-render whole\n        // listview again\n        if ($(event.target).hasClass('o_facet_remove')) {\n            return;\n        }\n\n        this.unselectRow({\n            // if save button is clicked then save the record forcefully even if\n            // it is non dirty\n            canDiscard: ![...event.target.classList].includes('o_list_button_save')\n        });\n    },\n});\n\n", "/** @odoo-module alias=web.ListModel **/\n\n    import BasicModel from 'web.BasicModel';\n\n    var ListModel = BasicModel.extend({\n\n        /**\n         * @override\n         * @param {Object} params.groupbys\n         */\n        init: function (parent, params) {\n            this._super.apply(this, arguments);\n\n            this.groupbys = params.groupbys;\n        },\n\n        //--------------------------------------------------------------------------\n        // Public\n        //--------------------------------------------------------------------------\n\n        /**\n         * overridden to add `groupData` when performing get on list datapoints.\n         *\n         * @override\n         * @see _readGroupExtraFields\n         */\n        __get: function () {\n            var result = this._super.apply(this, arguments);\n            var dp = result && this.localData[result.id];\n            if (dp && dp.groupData) {\n                result.groupData = this.get(dp.groupData);\n            }\n            return result;\n        },\n        /**\n         * For a list of records, performs a write with all changes and fetches\n         * all data.\n         *\n         * @param {string} listDatapointId id of the parent list\n         * @param {string} referenceRecordId the record datapoint used to\n         *  generate the changes to apply to recordIds\n         * @param {string[]} recordIds a list of record datapoint ids\n         * @param {string} fieldName the field to write\n         */\n        saveRecords: function (listDatapointId, referenceRecordId, recordIds, fieldName) {\n            var self = this;\n            var referenceRecord = this.localData[referenceRecordId];\n            var list = this.localData[listDatapointId];\n            // generate all record values to ensure that we'll write something\n            // (e.g. 2 records selected, edit a many2one in the first one, but\n            // reset same value, we still want to save this value on the other\n            // record)\n            var allChanges = this._generateChanges(referenceRecord, {changesOnly: false});\n            var changes = _.pick(allChanges, fieldName);\n            var records = recordIds.map(function (recordId) {\n                return self.localData[recordId];\n            });\n            var model = records[0].model;\n            var recordResIds = _.pluck(records, 'res_id');\n            var fieldNames = records[0].getFieldNames();\n            var context = records[0].getContext();\n\n            return this._rpc({\n                model: model,\n                method: 'write',\n                args: [recordResIds, changes],\n                context: context,\n            }).then(function () {\n                return self._rpc({\n                    model: model,\n                    method: 'read',\n                    args: [recordResIds, fieldNames],\n                    context: context,\n                });\n            }).then(function (results) {\n                const updateLocalRecord = (id, data) => {\n                    const record = self.localData[id];\n                    record.data = _.extend({}, record.data, data);\n                    record._changes = {};\n                    record._isDirty = false;\n                    self._parseServerData(fieldNames, record, record.data);\n                };\n\n                results.forEach(function (data) {\n                    const record = _.findWhere(records, { res_id: data.id });\n                    updateLocalRecord(record.id, data);\n\n                    // Also update same resId records\n                    self._updateDuplicateRecords(record.id, (id) => updateLocalRecord(id, data));\n                });\n            }).then(function () {\n                if (!list.groupedBy.length) {\n                    return Promise.all([\n                        self._fetchX2ManysBatched(list),\n                        self._fetchReferencesBatched(list)\n                    ]);\n                } else {\n                    return Promise.all([\n                        self._fetchX2ManysSingleBatch(list),\n                        self._fetchReferencesSingleBatch(list)\n                    ]);\n                }\n            });\n        },\n\n        //--------------------------------------------------------------------------\n        // Private\n        //--------------------------------------------------------------------------\n\n        /**\n         *\n         * @override\n         * @private\n         */\n        _readGroup: function (list, options) {\n            var self = this;\n            options = options || {};\n            options.fetchRecordsWithGroups = true;\n            return this._super(list, options).then(function (result) {\n                return self._readGroupExtraFields(list).then(_.constant(result));\n            });\n        },\n        /**\n         * Fetches group specific fields on the group by relation and stores it\n         * in the column datapoint in a special key `groupData`.\n         * Data for the groups are fetched in batch for all groups, to avoid\n         * doing multiple calls.\n         * Note that the option is only for m2o fields.\n         *\n         * @private\n         * @param {Object} list\n         * @returns {Promise}\n         */\n        _readGroupExtraFields: function (list) {\n            var self = this;\n            var groupByFieldName = list.groupedBy[0].split(':')[0];\n            var groupedByField = list.fields[groupByFieldName];\n            if (groupedByField.type !== 'many2one' || !this.groupbys[groupByFieldName]) {\n                return Promise.resolve();\n            }\n            var groupIds = _.reduce(list.data, function (groupIds, id) {\n                var resId = self.get(id, { raw: true }).res_id;\n                if (resId) { // the field might be undefined when grouping\n                    groupIds.push(resId);\n                }\n                return groupIds;\n            }, []);\n            var groupFields = Object.keys(this.groupbys[groupByFieldName].viewFields);\n            var prom;\n            if (groupIds.length && groupFields.length) {\n                prom = this._rpc({\n                    model: groupedByField.relation,\n                    method: 'read',\n                    args: [groupIds, groupFields],\n                    context: list.context,\n                });\n            }\n            return Promise.resolve(prom).then(function (result) {\n                var fvg = self.groupbys[groupByFieldName];\n                _.each(list.data, function (id) {\n                    var dp = self.localData[id];\n                    var groupData = result && _.findWhere(result, {\n                        id: dp.res_id,\n                    });\n                    var groupDp = self._makeDataPoint({\n                        context: dp.context,\n                        data: groupData,\n                        fields: fvg.fields,\n                        fieldsInfo: fvg.fieldsInfo,\n                        modelName: groupedByField.relation,\n                        parentID: dp.id,\n                        res_id: dp.res_id,\n                        viewType: 'groupby',\n                    });\n                    dp.groupData = groupDp.id;\n                    self._parseServerData(groupFields, groupDp, groupDp.data);\n                });\n            });\n        },\n    });\n    export default ListModel;\n", "/** @odoo-module alias=web.ListRenderer **/\n\nimport BasicRenderer from 'web.BasicRenderer';\nimport { ComponentWrapper } from 'web.OwlCompatibility';\nimport config from 'web.config';\nimport core from 'web.core';\nimport dom from 'web.dom';\nimport field_utils from 'web.field_utils';\nimport Pager from 'web.Pager';\nimport utils from 'web.utils';\nimport viewUtils from 'web.viewUtils';\n\nvar _t = core._t;\n\n// Allowed decoration on the list's rows: bold, italic and bootstrap semantics classes\nvar DECORATIONS = [\n    'decoration-bf',\n    'decoration-it',\n    'decoration-danger',\n    'decoration-info',\n    'decoration-muted',\n    'decoration-primary',\n    'decoration-success',\n    'decoration-warning'\n];\n\nvar FIELD_CLASSES = {\n    char: 'o_list_char',\n    float: 'o_list_number',\n    integer: 'o_list_number',\n    monetary: 'o_list_number',\n    text: 'o_list_text',\n    many2one: 'o_list_many2one',\n};\n\nvar ListRenderer = BasicRenderer.extend({\n    className: 'o_list_view',\n    events: {\n        \"mousedown\": \"_onMouseDown\",\n        \"click .o_optional_columns_dropdown .dropdown-item\": \"_onToggleOptionalColumn\",\n        \"click .o_optional_columns_dropdown_toggle\": \"_onToggleOptionalColumnDropdown\",\n        'click tbody tr': '_onRowClicked',\n        'change tbody .o_list_record_selector': '_onSelectRecord',\n        'click thead th.o_column_sortable': '_onSortColumn',\n        'click .o_list_record_selector': '_onToggleCheckbox',\n        'click .o_group_header': '_onToggleGroup',\n        'change thead .o_list_record_selector input': '_onToggleSelection',\n        'keypress thead tr td': '_onKeyPress',\n        'keydown td': '_onKeyDown',\n        'keydown th': '_onKeyDown',\n    },\n    sampleDataTargets: [\n        '.o_data_row',\n        '.o_group_header',\n        '.o_list_table > tfoot',\n        '.o_list_table > thead .o_list_record_selector',\n    ],\n    /**\n     * @constructor\n     * @param {Widget} parent\n     * @param {any} state\n     * @param {Object} params\n     * @param {boolean} params.hasSelectors\n     */\n    init: function (parent, state, params) {\n        this._super.apply(this, arguments);\n        this._preprocessColumns();\n        this.columnInvisibleFields = params.columnInvisibleFields || {};\n        this.rowDecorations = this._extractDecorationAttrs(this.arch);\n        this.fieldDecorations = {};\n        for (const field of this.arch.children.filter(c => c.tag === 'field')) {\n            const decorations = this._extractDecorationAttrs(field);\n            this.fieldDecorations[field.attrs.name] = decorations;\n        }\n        this.hasSelectors = params.hasSelectors;\n        this.selection = params.selectedRecords || [];\n        this.pagers = []; // instantiated pagers (only for grouped lists)\n        this.isGrouped = this.state.groupedBy.length > 0;\n        this.groupbys = params.groupbys;\n        this.no_open = params.no_open;\n    },\n    /**\n     * Compute columns visilibity. This can't be done earlier as we need the\n     * controller to respond to the load_optional_fields call of processColumns.\n     *\n     * @override\n     */\n    willStart: function () {\n        this._processColumns(this.columnInvisibleFields);\n        return this._super.apply(this, arguments);\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Order to focus to be given to the content of the current view\n     *\n     * @override\n     */\n    giveFocus: function () {\n        this.$('th:eq(0) input, th:eq(1)').first().focus();\n    },\n    /**\n     * @override\n     */\n    updateState: function (state, params) {\n        this._setState(state);\n        this.isGrouped = this.state.groupedBy.length > 0;\n        this.columnInvisibleFields = params.columnInvisibleFields || {};\n        this._processColumns(this.columnInvisibleFields);\n        if (params.selectedRecords) {\n            this.selection = params.selectedRecords;\n        }\n        return this._super.apply(this, arguments);\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * This method does a in-memory computation of the aggregate values, for\n     * each columns that corresponds to a numeric field with a proper aggregate\n     * function.\n     *\n     * The result of these computations is stored in the 'aggregate' key of each\n     * column of this.columns.  This will be then used by the _renderFooter\n     * method to display the appropriate amount.\n     *\n     * @private\n     */\n    _computeAggregates: function () {\n        var self = this;\n        var data = [];\n        if (this.selection.length) {\n            utils.traverse_records(this.state, function (record) {\n                if (_.contains(self.selection, record.id)) {\n                    data.push(record); // find selected records\n                }\n            });\n        } else {\n            data = this.state.data;\n        }\n\n        _.each(this.columns, this._computeColumnAggregates.bind(this, data));\n    },\n    /**\n     * Compute the aggregate values for a given column and a set of records.\n     * The aggregate values are then written, if applicable, in the 'aggregate'\n     * key of the column object.\n     *\n     * @private\n     * @param {Object[]} data a list of selected/all records\n     * @param {Object} column\n     */\n    _computeColumnAggregates: function (data, column) {\n        var attrs = column.attrs;\n        var field = this.state.fields[attrs.name];\n        if (!field) {\n            return;\n        }\n        var type = field.type;\n        if (type !== 'integer' && type !== 'float' && type !== 'monetary') {\n            return;\n        }\n        var func = (attrs.sum && 'sum') || (attrs.avg && 'avg') ||\n            (attrs.max && 'max') || (attrs.min && 'min');\n        if (func) {\n            var count = 0;\n            var aggregateValue = 0;\n            if (func === 'max') {\n                aggregateValue = -Infinity;\n            } else if (func === 'min') {\n                aggregateValue = Infinity;\n            }\n            _.each(data, function (d) {\n                var value = (d.type === 'record') ? d.data[attrs.name] : d.aggregateValues[attrs.name];\n                if (Number(value) !== value) {\n                    return;\n                }\n                count += 1;\n                if (func === 'avg') {\n                    aggregateValue += value;\n                } else if (func === 'sum') {\n                    aggregateValue += value;\n                } else if (func === 'max') {\n                    aggregateValue = Math.max(aggregateValue, value);\n                } else if (func === 'min') {\n                    aggregateValue = Math.min(aggregateValue, value);\n                }\n            });\n            if (func === 'avg') {\n                aggregateValue = count ? aggregateValue / count : aggregateValue;\n            }\n            if (count) {\n                column.aggregate = {\n                    help: attrs[func],\n                    value: aggregateValue,\n                };\n            } else {\n                delete column.aggregate;\n            }\n        }\n    },\n    /**\n     * Extract the decoration attributes (e.g. decoration-danger) of a node. The\n     * condition is processed such that it is ready to be evaluated.\n     *\n     * @private\n     * @param {Object} node the <tree> or a <field> node\n     * @returns {Object}\n     */\n    _extractDecorationAttrs: function (node) {\n        const decorations = {};\n        for (const [key, expr] of Object.entries(node.attrs)) {\n            if (DECORATIONS.includes(key)) {\n                let cssClass;\n                if (key === 'decoration-bf') {\n                    cssClass = 'font-weight-bold';\n                } else if (key === 'decoration-it') {\n                    cssClass = 'font-italic';\n                } else {\n                    cssClass = key.replace('decoration', 'text');\n                }\n                decorations[cssClass] = py.parse(py.tokenize(expr));\n            }\n        }\n        return decorations;\n    },\n    /**\n     *\n     * @private\n     * @param {jQuery} $cell\n     * @param {string} direction\n     * @param {integer} colIndex\n     * @returns {jQuery|null}\n     */\n    _findConnectedCell: function ($cell, direction, colIndex) {\n        var $connectedRow = $cell.closest('tr')[direction]('tr');\n\n        if (!$connectedRow.length) {\n            // Is there another group ? Look at our parent's sibling\n            // We can have th in tbody so we can't simply look for thead\n            // if cell is a th and tbody instead\n            var tbody = $cell.closest('tbody, thead');\n            var $connectedGroup = tbody[direction]('tbody, thead');\n            if ($connectedGroup.length) {\n                // Found another group\n                var $connectedRows = $connectedGroup.find('tr');\n                var rowIndex;\n                if (direction === 'prev') {\n                    rowIndex = $connectedRows.length - 1;\n                } else {\n                    rowIndex = 0;\n                }\n                $connectedRow = $connectedRows.eq(rowIndex);\n            } else {\n                // End of the table\n                return;\n            }\n        }\n\n        var $connectedCell;\n        if ($connectedRow.hasClass('o_group_header')) {\n            $connectedCell = $connectedRow.children();\n            this.currentColIndex = colIndex;\n        } else if ($connectedRow.has('td.o_group_field_row_add').length) {\n            $connectedCell = $connectedRow.find('.o_group_field_row_add');\n            this.currentColIndex = colIndex;\n        } else {\n            var connectedRowChildren = $connectedRow.children();\n            if (colIndex === -1) {\n                colIndex = connectedRowChildren.length - 1;\n            }\n            $connectedCell = connectedRowChildren.eq(colIndex);\n        }\n\n        return $connectedCell;\n    },\n    /**\n     * return the number of visible columns.  Note that this number depends on\n     * the state of the renderer.  For example, in editable mode, it could be\n     * one more that in non editable mode, because there may be a visible 'trash\n     * icon'.\n     *\n     * @private\n     * @returns {integer}\n     */\n    _getNumberOfCols: function () {\n        var n = this.columns.length;\n        return this.hasSelectors ? n + 1 : n;\n    },\n    /**\n     * Returns the local storage key for stored enabled optional columns\n     *\n     * @private\n     * @returns {string}\n     */\n    _getOptionalColumnsStorageKeyParts: function () {\n        var self = this;\n        return {\n            fields: _.map(this.state.fieldsInfo[this.viewType], function (_, fieldName) {\n                return {name: fieldName, type: self.state.fields[fieldName].type};\n            }),\n        };\n    },\n    /**\n     * Returns the jQuery node used to update the selection\n     *\n     * @private\n     * @return {jQuery}\n     */\n    _getSelectableRecordCheckboxes: function () {\n        return this.$('tbody .o_list_record_selector input:visible:not(:disabled)');\n    },\n    /**\n     * Adjacent buttons (in the arch) are displayed in a single column. This\n     * function iterates over the arch's nodes and replaces \"button\" nodes by\n     * \"button_group\" nodes, with a single \"button_group\" node for adjacent\n     * \"button\" nodes. A \"button_group\" node has a \"children\" attribute\n     * containing all \"button\" nodes in the group.\n     *\n     * @private\n     */\n    _groupAdjacentButtons: function () {\n        const children = [];\n        let groupId = 0;\n        let buttonGroupNode = null;\n        for (const c of this.arch.children) {\n            if (c.tag === 'button') {\n                if (!buttonGroupNode) {\n                    buttonGroupNode = {\n                        tag: 'button_group',\n                        children: [c],\n                        attrs: {\n                            name: `button_group_${groupId++}`,\n                            modifiers: {},\n                        },\n                    };\n                    children.push(buttonGroupNode);\n                } else {\n                    buttonGroupNode.children.push(c);\n                }\n            } else {\n                buttonGroupNode = null;\n                children.push(c);\n            }\n        }\n        this.arch.children = children;\n    },\n    /**\n     * Processes arch's child nodes for the needs of the list view:\n     *   - detects oe_read_only/oe_edit_only classnames\n     *   - groups adjacent buttons in a single column.\n     * This function is executed only once, at initialization.\n     *\n     * @private\n     */\n    _preprocessColumns: function () {\n        this._processModeClassNames();\n        this._groupAdjacentButtons();\n\n        // set as readOnly (resp. editOnly) button groups containing only\n        // readOnly (resp. editOnly) buttons, s.t. no column is rendered\n        this.arch.children.filter(c => c.tag === 'button_group').forEach(c => {\n            c.attrs.editOnly = c.children.every(n => n.attrs.editOnly);\n            c.attrs.readOnly = c.children.every(n => n.attrs.readOnly);\n        });\n    },\n    /**\n     * Removes the columns which should be invisible. This function is executed\n     * at each (re-)rendering of the list.\n     *\n     * @param  {Object} columnInvisibleFields contains the column invisible modifier values\n     */\n    _processColumns: function (columnInvisibleFields) {\n        var self = this;\n        this.handleField = null;\n        this.columns = [];\n        this.optionalColumns = [];\n        this.optionalColumnsEnabled = [];\n        var storedOptionalColumns;\n        this.trigger_up('load_optional_fields', {\n            keyParts: this._getOptionalColumnsStorageKeyParts(),\n            callback: function (res) {\n                storedOptionalColumns = res;\n            },\n        });\n        _.each(this.arch.children, function (c) {\n            if (c.tag !== 'control' && c.tag !== 'groupby' && c.tag !== 'header') {\n                var reject = c.attrs.modifiers.column_invisible;\n                // If there is an evaluated domain for the field we override the node\n                // attribute to have the evaluated modifier value.\n                if (c.tag === \"button_group\") {\n                    // FIXME: 'column_invisible' attribute is available for fields *and* buttons,\n                    // so 'columnInvisibleFields' variable name is misleading, it should be renamed\n                    reject = c.children.every(child => columnInvisibleFields[child.attrs.name]);\n                } else if (c.attrs.name in columnInvisibleFields) {\n                    reject = columnInvisibleFields[c.attrs.name];\n                }\n                if (!reject && c.attrs.widget === 'handle') {\n                    self.handleField = c.attrs.name;\n                    if (self.isGrouped) {\n                        reject = true;\n                    }\n                }\n\n                if (!reject && c.attrs.optional) {\n                    self.optionalColumns.push(c);\n                    var enabled;\n                    if (storedOptionalColumns === undefined) {\n                        enabled = c.attrs.optional === 'show';\n                    } else {\n                        enabled = _.contains(storedOptionalColumns, c.attrs.name);\n                    }\n                    if (enabled) {\n                        self.optionalColumnsEnabled.push(c.attrs.name);\n                    }\n                    reject = !enabled;\n                }\n\n                if (!reject) {\n                    self.columns.push(c);\n                }\n            }\n        });\n    },\n    /**\n     * Classnames \"oe_edit_only\" and \"oe_read_only\" aim to only display the cell\n     * in the corresponding mode. This only concerns lists inside form views\n     * (for x2many fields). This function detects the className and stores a\n     * flag on the node's attrs accordingly, to ease further computations.\n     *\n     * @private\n     */\n    _processModeClassNames: function () {\n        this.arch.children.forEach(c => {\n            if (c.attrs.class) {\n                c.attrs.editOnly = /\\boe_edit_only\\b/.test(c.attrs.class);\n                c.attrs.readOnly = /\\boe_read_only\\b/.test(c.attrs.class);\n            }\n        });\n    },\n    /**\n     * Render a list of <td>, with aggregates if available.  It can be displayed\n     * in the footer, or for each open groups.\n     *\n     * @private\n     * @param {any} aggregateValues\n     * @returns {jQueryElement[]} a list of <td> with the aggregate values\n     */\n    _renderAggregateCells: function (aggregateValues) {\n        var self = this;\n\n        return _.map(this.columns, function (column) {\n            var $cell = $('<td>');\n            if (config.isDebug()) {\n                $cell.addClass(column.attrs.name);\n            }\n            if (column.attrs.editOnly) {\n                $cell.addClass('oe_edit_only');\n            }\n            if (column.attrs.readOnly) {\n                $cell.addClass('oe_read_only');\n            }\n            if (column.attrs.name in aggregateValues) {\n                var field = self.state.fields[column.attrs.name];\n                var value = aggregateValues[column.attrs.name].value;\n                var help = aggregateValues[column.attrs.name].help;\n                var formatFunc = field_utils.format[column.attrs.widget];\n                if (!formatFunc) {\n                    formatFunc = field_utils.format[field.type];\n                }\n                var formattedValue = formatFunc(value, field, {\n                    escape: true,\n                    digits: column.attrs.digits ? JSON.parse(column.attrs.digits) : undefined,\n                });\n                $cell.addClass('o_list_number').attr('title', help).html(formattedValue);\n            }\n            return $cell;\n        });\n    },\n    /**\n     * Render the main body of the table, with all its content.  Note that it\n     * has been decided to always render at least 4 rows, even if we have less\n     * data.  The reason is that lists with 0 or 1 lines don't really look like\n     * a table.\n     *\n     * @private\n     * @returns {jQueryElement} a jquery element <tbody>\n     */\n    _renderBody: function () {\n        var self = this;\n        var $rows = this._renderRows();\n        while ($rows.length < 4) {\n            $rows.push(self._renderEmptyRow());\n        }\n        return $('<tbody>').append($rows);\n    },\n    /**\n     * Render a cell for the table. For most cells, we only want to display the\n     * formatted value, with some appropriate css class. However, when the\n     * node was explicitely defined with a 'widget' attribute, then we\n     * instantiate the corresponding widget.\n     *\n     * @private\n     * @param {Object} record\n     * @param {Object} node\n     * @param {integer} colIndex\n     * @param {Object} [options]\n     * @param {Object} [options.mode]\n     * @param {Object} [options.renderInvisible=false]\n     *        force the rendering of invisible cell content\n     * @param {Object} [options.renderWidgets=false]\n     *        force the rendering of the cell value thanks to a widget\n     * @returns {jQueryElement} a <td> element\n     */\n    _renderBodyCell: function (record, node, colIndex, options) {\n        var tdClassName = 'o_data_cell';\n        if (node.tag === 'button_group') {\n            tdClassName += ' o_list_button';\n        } else if (node.tag === 'field') {\n            tdClassName += ' o_field_cell';\n            var typeClass = FIELD_CLASSES[this.state.fields[node.attrs.name].type];\n            if (typeClass) {\n                tdClassName += (' ' + typeClass);\n            }\n            if (node.attrs.widget) {\n                tdClassName += (' o_' + node.attrs.widget + '_cell');\n            }\n        }\n        if (node.attrs.editOnly) {\n            tdClassName += ' oe_edit_only';\n        }\n        if (node.attrs.readOnly) {\n            tdClassName += ' oe_read_only';\n        }\n        var $td = $('<td>', { class: tdClassName, tabindex: -1 });\n\n        // We register modifiers on the <td> element so that it gets the correct\n        // modifiers classes (for styling)\n        var modifiers = this._registerModifiers(node, record, $td, _.pick(options, 'mode'));\n        // If the invisible modifiers is true, the <td> element is left empty.\n        // Indeed, if the modifiers was to change the whole cell would be\n        // rerendered anyway.\n        if (modifiers.invisible && !(options && options.renderInvisible)) {\n            return $td;\n        }\n\n        if (node.tag === 'button_group') {\n            for (const buttonNode of node.children) {\n                if (!this.columnInvisibleFields[buttonNode.attrs.name]) {\n                    $td.append(this._renderButton(record, buttonNode));\n                }\n            }\n            return $td;\n        } else if (node.tag === 'widget') {\n            return $td.append(this._renderWidget(record, node));\n        }\n        if (node.attrs.widget || (options && options.renderWidgets)) {\n            var $el = this._renderFieldWidget(node, record, _.pick(options, 'mode'));\n            return $td.append($el);\n        }\n        this._handleAttributes($td, node);\n        this._setDecorationClasses($td, this.fieldDecorations[node.attrs.name], record);\n\n        var name = node.attrs.name;\n        var field = this.state.fields[name];\n        var value = record.data[name];\n        var formatter = field_utils.format[field.type];\n        var formatOptions = {\n            escape: true,\n            data: record.data,\n            isPassword: 'password' in node.attrs,\n            digits: node.attrs.digits && JSON.parse(node.attrs.digits),\n        };\n        var formattedValue = formatter(value, field, formatOptions);\n        var title = '';\n        if (field.type !== 'boolean') {\n            title = formatter(value, field, _.extend(formatOptions, {escape: false}));\n        }\n        return $td.html(formattedValue).attr('title', title).attr('name', name);\n    },\n    /**\n     * Renders the button element associated to the given node and record.\n     *\n     * @private\n     * @param {Object} record\n     * @param {Object} node\n     * @returns {jQuery} a <button> element\n     */\n    _renderButton: function (record, node) {\n        var self = this;\n        var nodeWithoutWidth = Object.assign({}, node);\n        delete nodeWithoutWidth.attrs.width;\n\n        let extraClass = '';\n        if (node.attrs.icon) {\n            // if there is an icon, we force the btn-link style, unless a btn-xxx\n            // style class is explicitely provided\n            const btnStyleRegex = /\\bbtn-[a-z]+\\b/;\n            if (!btnStyleRegex.test(nodeWithoutWidth.attrs.class)) {\n                extraClass = 'btn-link o_icon_button';\n            }\n        }\n        var $button = viewUtils.renderButtonFromNode(nodeWithoutWidth, {\n            extraClass: extraClass,\n        });\n        this._handleAttributes($button, node);\n        this._registerModifiers(node, record, $button);\n\n        if (record.res_id) {\n            // TODO this should be moved to a handler\n            const debouncedClick = _.debounce(() => {\n                self.trigger_up('button_clicked', {\n                    attrs: node.attrs,\n                    record: record,\n                });\n            }, 500, true);\n            $button.on(\"click\", (e) => {\n                e.stopPropagation();\n                debouncedClick();\n            });\n        } else {\n            if (node.attrs.options.warn) {\n                $button.on(\"click\", function (e) {\n                    e.stopPropagation();\n                    self.displayNotification({ message: _t('Please click on the \"save\" button first'), type: 'danger' });\n                });\n            } else {\n                $button.prop('disabled', true);\n            }\n        }\n\n        return $button;\n    },\n    /**\n     * Render a complete empty row.  This is used to fill in the blanks when we\n     * have less than 4 lines to display.\n     *\n     * @private\n     * @returns {jQueryElement} a <tr> element\n     */\n    _renderEmptyRow: function () {\n        var $td = $('<td>&nbsp;</td>').attr('colspan', this._getNumberOfCols());\n        return $('<tr>').append($td);\n    },\n    /**\n     * Render the footer.  It is a <tfoot> with a single row, containing all\n     * aggregates, if applicable.\n     *\n     * @private\n     * @returns {jQueryElement} a <tfoot> element\n     */\n    _renderFooter: function () {\n        var aggregates = {};\n        _.each(this.columns, function (column) {\n            if ('aggregate' in column) {\n                aggregates[column.attrs.name] = column.aggregate;\n            }\n        });\n        var $cells = this._renderAggregateCells(aggregates);\n        if (this.hasSelectors) {\n            $cells.unshift($('<td>'));\n        }\n        return $('<tfoot>').append($('<tr>').append($cells));\n    },\n    /**\n     * Renders the group button element.\n     *\n     * @private\n     * @param {Object} record\n     * @param {Object} group\n     * @returns {jQuery} a <button> element\n     */\n    _renderGroupButton: function (list, node) {\n        var $button = viewUtils.renderButtonFromNode(node, {\n            extraClass: node.attrs.icon ? 'o_icon_button' : undefined,\n            textAsTitle: !!node.attrs.icon,\n        });\n        this._handleAttributes($button, node);\n        this._registerModifiers(node, list.groupData, $button);\n\n        // TODO this should be moved to event handlers\n        $button.on(\"click\", this._onGroupButtonClicked.bind(this, list.groupData, node));\n        $button.on(\"keydown\", this._onGroupButtonKeydown.bind(this));\n\n        return $button;\n    },\n    /**\n     * Renders the group buttons.\n     *\n     * @private\n     * @param {Object} record\n     * @param {Object} group\n     * @returns {jQuery} a <button> element\n     */\n    _renderGroupButtons: function (list, group) {\n        var self = this;\n        var $buttons = $();\n        if (list.value) {\n            // buttons make no sense for 'Undefined' group\n            group.arch.children.forEach(function (child) {\n                if (child.tag === 'button') {\n                    $buttons = $buttons.add(self._renderGroupButton(list, child));\n                }\n            });\n        }\n        return $buttons;\n    },\n    /**\n     * Render the row that represent a group\n     *\n     * @private\n     * @param {Object} group\n     * @param {integer} groupLevel the nesting level (0 for root groups)\n     * @returns {jQueryElement} a <tr> element\n     */\n    _renderGroupRow: function (group, groupLevel) {\n        var cells = [];\n\n        const groupBy = this.state.groupedBy[groupLevel];\n        const groupByFieldName = groupBy.split(':')[0];\n        const groupByField = group.fields[groupByFieldName];\n        const name = groupByField.type === \"boolean\"\n            ? (group.value === undefined ? _t('Undefined') : group.value)\n            : (group.value === undefined || group.value === false ? _t('Undefined') : group.value);\n        var $th = $('<th>')\n            .addClass('o_group_name')\n            .attr('tabindex', -1)\n            .text(name + ' (' + group.count + ')');\n        var $arrow = $('<span>')\n            .css('padding-left', 2 + (groupLevel * 20) + 'px')\n            .css('padding-right', '5px')\n            .addClass('fa');\n        if (group.count > 0) {\n            $arrow.toggleClass('fa-caret-right', !group.isOpen)\n                .toggleClass('fa-caret-down', group.isOpen);\n        }\n        $th.prepend($arrow);\n        cells.push($th);\n\n        var aggregateKeys = Object.keys(group.aggregateValues);\n        var aggregateValues = _.mapObject(group.aggregateValues, function (value) {\n            return { value: value };\n        });\n        var aggregateCells = this._renderAggregateCells(aggregateValues);\n        var firstAggregateIndex = _.findIndex(this.columns, function (column) {\n            return column.tag === 'field' && _.contains(aggregateKeys, column.attrs.name);\n        });\n        var colspanBeforeAggregate;\n        if (firstAggregateIndex !== -1) {\n            // if there are aggregates, the first $th goes until the first\n            // aggregate then all cells between aggregates are rendered\n            colspanBeforeAggregate = firstAggregateIndex;\n            var lastAggregateIndex = _.findLastIndex(this.columns, function (column) {\n                return column.tag === 'field' && _.contains(aggregateKeys, column.attrs.name);\n            });\n            cells = cells.concat(aggregateCells.slice(firstAggregateIndex, lastAggregateIndex + 1));\n            var colSpan = this.columns.length - 1 - lastAggregateIndex;\n            if (colSpan > 0) {\n                cells.push($('<th>').attr('colspan', colSpan));\n            }\n        } else {\n            var colN = this.columns.length;\n            colspanBeforeAggregate = colN > 1 ? colN - 1 : 1;\n            if (colN > 1) {\n                cells.push($('<th>'));\n            }\n        }\n        if (this.hasSelectors) {\n            colspanBeforeAggregate += 1;\n        }\n        $th.attr('colspan', colspanBeforeAggregate);\n\n        if (group.isOpen && !group.groupedBy.length && (group.count > group.data.length)) {\n            const lastCell = cells[cells.length - 1][0];\n            this._renderGroupPager(group, lastCell);\n        }\n        if (group.isOpen && this.groupbys[groupBy]) {\n            var $buttons = this._renderGroupButtons(group, this.groupbys[groupBy]);\n            if ($buttons.length) {\n                var $buttonSection = $('<div>', {\n                    class: 'o_group_buttons',\n                }).append($buttons);\n                $th.append($buttonSection);\n            }\n        }\n        return $('<tr>')\n            .addClass('o_group_header')\n            .toggleClass('o_group_open', group.isOpen)\n            .toggleClass('o_group_has_content', group.count > 0)\n            .data('group', group)\n            .append(cells);\n    },\n    /**\n     * Render the content of a given opened group.\n     *\n     * @private\n     * @param {Object} group\n     * @param {integer} groupLevel the nesting level (0 for root groups)\n     * @returns {jQueryElement} a <tr> element\n     */\n    _renderGroup: function (group, groupLevel) {\n        var self = this;\n        if (group.groupedBy.length) {\n            // the opened group contains subgroups\n            return this._renderGroups(group.data, groupLevel + 1);\n        } else {\n            // the opened group contains records\n            var $records = _.map(group.data, function (record) {\n                return self._renderRow(record);\n            });\n            return [$('<tbody>').append($records)];\n        }\n    },\n    /**\n     * Renders the pager for a given group\n     *\n     * @private\n     * @param {Object} group\n     * @param {HTMLElement} target\n     */\n    _renderGroupPager: function (group, target) {\n        const currentMinimum = group.offset + 1;\n        const limit = group.limit;\n        const size = group.count;\n        if (!this._shouldRenderPager(currentMinimum, limit, size)) {\n            return;\n        }\n        const pager = new ComponentWrapper(this, Pager, { currentMinimum, limit, size });\n        const pagerMounting = pager.mount(target).then(() => {\n            // Event binding is done here to get the related group and wrapper.\n            pager.el.addEventListener('pager-changed', ev => this._onPagerChanged(ev, group));\n            // Prevent pager clicks to toggle the group.\n            pager.el.addEventListener('click', ev => ev.stopPropagation());\n        });\n        this.defs.push(pagerMounting);\n        this.pagers.push(pager);\n    },\n    /**\n     * Render all groups in the view.  We assume that the view is in grouped\n     * mode.\n     *\n     * Note that each group is rendered inside a <tbody>, which contains a group\n     * row, then possibly a bunch of rows for each record.\n     *\n     * @private\n     * @param {Object} data the dataPoint containing the groups\n     * @param {integer} [groupLevel=0] the nesting level. 0 is for the root group\n     * @returns {jQueryElement[]} a list of <tbody>\n     */\n    _renderGroups: function (data, groupLevel) {\n        var self = this;\n        groupLevel = groupLevel || 0;\n        var result = [];\n        var $tbody = $('<tbody>');\n        _.each(data, function (group) {\n            if (!$tbody) {\n                $tbody = $('<tbody>');\n            }\n            $tbody.append(self._renderGroupRow(group, groupLevel));\n            if (group.data.length) {\n                result.push($tbody);\n                result = result.concat(self._renderGroup(group, groupLevel));\n                $tbody = null;\n            }\n        });\n        if ($tbody) {\n            result.push($tbody);\n        }\n        return result;\n    },\n    /**\n     * Render the main header for the list view.  It is basically just a <thead>\n     * with the name of each fields\n     *\n     * @private\n     * @returns {jQueryElement} a <thead> element\n     */\n    _renderHeader: function () {\n        var $tr = $('<tr>')\n            .append(_.map(this.columns, this._renderHeaderCell.bind(this)));\n        if (this.hasSelectors) {\n            $tr.prepend(this._renderSelector('th'));\n        }\n        return $('<thead>').append($tr);\n    },\n    /**\n     * Render a single <th> with the informations for a column. If it is not a\n     * field or nolabel attribute is set to \"1\", the th will be empty.\n     * Otherwise, it will contains all relevant information for the field.\n     *\n     * @private\n     * @param {Object} node\n     * @returns {jQueryElement} a <th> element\n     */\n    _renderHeaderCell: function (node) {\n        const { icon, name, string } = node.attrs;\n        var order = this.state.orderedBy;\n        var isNodeSorted = order[0] && order[0].name === name;\n        var field = this.state.fields[name];\n        var $th = $('<th>');\n        if (name) {\n            $th.attr('data-name', name);\n        } else if (string) {\n            $th.attr('data-string', string);\n        } else if (icon) {\n            $th.attr('data-icon', icon);\n        }\n        if (node.attrs.editOnly) {\n            $th.addClass('oe_edit_only');\n        }\n        if (node.attrs.readOnly) {\n            $th.addClass('oe_read_only');\n        }\n        if (node.tag === 'button_group') {\n            $th.addClass('o_list_button');\n        }\n        if (!field || node.attrs.nolabel === '1') {\n            return $th;\n        }\n        var description = string || field.string;\n        if (node.attrs.widget) {\n            $th.addClass(' o_' + node.attrs.widget + '_cell');\n            const FieldWidget = this.state.fieldsInfo.list[name].Widget;\n            if (FieldWidget.prototype.noLabel) {\n                description = '';\n            } else if (FieldWidget.prototype.label) {\n                description = FieldWidget.prototype.label;\n            }\n        }\n        $th.text(description)\n            .attr('tabindex', -1)\n            .toggleClass('o-sort-down', isNodeSorted ? !order[0].asc : false)\n            .toggleClass('o-sort-up', isNodeSorted ? order[0].asc : false)\n            .addClass((field.sortable || this.state.fieldsInfo.list[name].options.allow_order || false) && 'o_column_sortable');\n\n        if (isNodeSorted) {\n            $th.attr('aria-sort', order[0].asc ? 'ascending' : 'descending');\n        }\n\n        if (field.type === 'float' || field.type === 'integer' || field.type === 'monetary') {\n            $th.addClass('o_list_number_th');\n        }\n\n        if (config.isDebug()) {\n            var fieldDescr = {\n                field: field,\n                name: name,\n                string: description || name,\n                record: this.state,\n                attrs: _.extend({}, node.attrs, this.state.fieldsInfo.list[name]),\n            };\n            this._addFieldTooltip(fieldDescr, $th);\n        } else {\n            $th.attr('title', description);\n        }\n        return $th;\n    },\n    /**\n     * Render a row, corresponding to a record.\n     *\n     * @private\n     * @param {Object} record\n     * @returns {jQueryElement} a <tr> element\n     */\n    _renderRow: function (record) {\n        var self = this;\n        var $cells = this.columns.map(function (node, index) {\n            return self._renderBodyCell(record, node, index, { mode: 'readonly' });\n        });\n\n        var $tr = $('<tr/>', { class: 'o_data_row' })\n            .attr('data-id', record.id)\n            .append($cells);\n        if (this.hasSelectors) {\n            $tr.prepend(this._renderSelector('td', !record.res_id));\n        }\n        if (this.no_open && this.mode === \"readonly\") {\n            $tr.addClass('o_list_no_open');\n        }\n        this._setDecorationClasses($tr, this.rowDecorations, record);\n        return $tr;\n    },\n    /**\n     * Render all rows. This method should only called when the view is not\n     * grouped.\n     *\n     * @private\n     * @returns {jQueryElement[]} a list of <tr>\n     */\n    _renderRows: function () {\n        return this.state.data.map(this._renderRow.bind(this));\n    },\n    /**\n     * Render a single <th> with dropdown menu to display optional columns of view.\n     *\n     * @private\n     * @returns {jQueryElement} a <th> element\n     */\n    _renderOptionalColumnsDropdown: function () {\n        var self = this;\n        var $optionalColumnsDropdown = $('<div>', {\n            class: 'o_optional_columns text-center dropdown',\n        });\n        var $a = $(\"<a>\", {\n            'class': \"dropdown-toggle text-dark o-no-caret\",\n            'href': \"#\",\n            'role': \"button\",\n            'data-toggle': \"dropdown\",\n            'data-display': \"static\",\n            'aria-expanded': false,\n            'aria-label': _t('Optional columns'),\n        });\n        $a.appendTo($optionalColumnsDropdown);\n\n        // Set the expansion direction of the dropdown\n        // The button is located at the end of the list headers\n        // We want the dropdown to expand towards the list rather than away from it\n        // https://getbootstrap.com/docs/4.0/components/dropdowns/#menu-alignment\n        var direction = _t.database.parameters.direction;\n        var dropdownMenuClass = direction === 'rtl' ? 'dropdown-menu-left' : 'dropdown-menu-right';\n        var $dropdown = $(\"<div>\", {\n            class: 'dropdown-menu o_optional_columns_dropdown ' + dropdownMenuClass,\n            role: 'menu',\n        });\n        this.optionalColumns.forEach(function (col) {\n            var txt = (col.attrs.string || self.state.fields[col.attrs.name].string) +\n                (config.isDebug() ? (' (' + col.attrs.name + ')') : '');\n            var $checkbox = dom.renderCheckbox({\n                text: txt,\n                role: \"menuitemcheckbox\",\n                prop: {\n                    name: col.attrs.name,\n                    checked: _.contains(self.optionalColumnsEnabled, col.attrs.name),\n                }\n            });\n            $dropdown.append($(\"<div>\", {\n                class: \"dropdown-item\",\n            }).append($checkbox));\n        });\n        $dropdown.appendTo($optionalColumnsDropdown);\n        return $optionalColumnsDropdown;\n    },\n    /**\n     * A 'selector' is the small checkbox on the left of a record in a list\n     * view.  This is rendered as an input inside a div, so we can properly\n     * style it.\n     *\n     * Note that it takes a tag in argument, because selectors in the header\n     * are renderd in a th, and those in the tbody are in a td.\n     *\n     * @private\n     * @param {string} tag either th or td\n     * @param {boolean} disableInput if true, the input generated will be disabled\n     * @returns {jQueryElement}\n     */\n    _renderSelector: function (tag, disableInput) {\n        var $content = dom.renderCheckbox();\n        if (disableInput) {\n            $content.find(\"input[type='checkbox']\").prop('disabled', disableInput);\n        }\n        return $('<' + tag + '>')\n            .addClass('o_list_record_selector')\n            .append($content);\n    },\n    /**\n     * Main render function for the list.  It is rendered as a table. For now,\n     * this method does not wait for the field widgets to be ready.\n     *\n     * @override\n     * @returns {Promise} resolved when the view has been rendered\n     */\n    async _renderView() {\n        const oldPagers = this.pagers;\n        let prom;\n        let tableWrapper;\n        if (this.state.count > 0 || !this.noContentHelp) {\n            // render a table if there are records, or if there is no no content\n            // helper (empty table in this case)\n            this.pagers = [];\n\n            const orderedBy = this.state.orderedBy;\n            this.hasHandle = orderedBy.length === 0 || orderedBy[0].name === this.handleField;\n            this._computeAggregates();\n\n            const $table = $(\n                '<table class=\"o_list_table table table-sm table-hover table-striped\"/>'\n            );\n            $table.toggleClass('o_list_table_grouped', this.isGrouped);\n            $table.toggleClass('o_list_table_ungrouped', !this.isGrouped);\n            const defs = [];\n            this.defs = defs;\n            if (this.isGrouped) {\n                $table.append(this._renderHeader());\n                $table.append(this._renderGroups(this.state.data));\n                $table.append(this._renderFooter());\n\n            } else {\n                $table.append(this._renderHeader());\n                $table.append(this._renderBody());\n                $table.append(this._renderFooter());\n            }\n            tableWrapper = Object.assign(document.createElement('div'), {\n                className: 'table-responsive',\n            });\n            tableWrapper.appendChild($table[0]);\n            delete this.defs;\n            prom = Promise.all(defs);\n        }\n\n        await Promise.all([this._super.apply(this, arguments), prom]);\n\n        this.el.innerHTML = \"\";\n        this.el.classList.remove('o_list_optional_columns');\n\n        // destroy the previously instantiated pagers, if any\n        oldPagers.forEach(pager => pager.destroy());\n\n        // append the table (if any) to the main element\n        if (tableWrapper) {\n            this.el.appendChild(tableWrapper);\n            if (document.body.contains(this.el)) {\n                this.pagers.forEach(pager => pager.on_attach_callback());\n            }\n            if (this._shouldRenderOptionalColumnsDropdown()) {\n                this.el.classList.add('o_list_optional_columns');\n                this.$('table').append(\n                    $('<i class=\"o_optional_columns_dropdown_toggle fa fa-ellipsis-v\"/>')\n                );\n                this.$el.append(this._renderOptionalColumnsDropdown());\n            }\n            if (this.selection.length) {\n                const $checked_rows = this.$('tr').filter(\n                    (i, el) => this.selection.includes(el.dataset.id)\n                );\n                $checked_rows.find('.o_list_record_selector input').prop('checked', true);\n                if ($checked_rows.length === this.$('.o_data_row').length) { // all rows are checked\n                    this.$('thead .o_list_record_selector input').prop('checked', true);\n                }\n            }\n        }\n\n        // display the no content helper if necessary\n        if (!this._hasContent() && !!this.noContentHelp) {\n            this._renderNoContentHelper();\n        }\n    },\n    /**\n     * Each line or cell can be decorated according to a few simple rules. The\n     * arch description of the list or the field nodes may have one of the\n     * decoration-X attributes with a python expression as value. Then, for each\n     * record, we evaluate the python expression, and conditionnaly add the\n     * text-X css class to the element.  This method is concerned with the\n     * computation of the list of css classes for a given record.\n     *\n     * @private\n     * @param {jQueryElement} $el the element to which to add the classes (a tr\n     *   or td)\n     * @param {Object} decorations keys are the decoration classes (e.g.\n     *   'font-weight-bold') and values are the python expressions to evaluate\n     * @param {Object} record a basic model record\n     */\n    _setDecorationClasses: function ($el, decorations, record) {\n        for (const [cssClass, expr] of Object.entries(decorations)) {\n            $el.toggleClass(cssClass, py.PY_isTrue(py.evaluate(expr, record.evalContext)));\n        }\n    },\n    /**\n     * @private\n     * @returns {boolean}\n     */\n    _shouldRenderPager: function (currentMinimum, limit, size) {\n        if (!limit || !size) {\n            return false;\n        }\n        const maximum = Math.min(currentMinimum + limit - 1, size);\n        const singlePage = (1 === currentMinimum) && (maximum === size);\n        return !singlePage;\n    },\n    /**\n     * @private\n     * @returns {boolean}\n     */\n    _shouldRenderOptionalColumnsDropdown: function () {\n        return this.optionalColumns.length;\n    },\n    /**\n     * Update the footer aggregate values.  This method should be called each\n     * time the state of some field is changed, to make sure their sum are kept\n     * in sync.\n     *\n     * @private\n     */\n    _updateFooter: function () {\n        this._computeAggregates();\n        this.$('tfoot').replaceWith(this._renderFooter());\n    },\n    /**\n     * Whenever we change the state of the selected rows, we need to call this\n     * method to keep the this.selection variable in sync, and also to recompute\n     * the aggregates.\n     *\n     * @private\n     */\n    _updateSelection: function () {\n        const previousSelection = JSON.stringify(this.selection);\n        this.selection = [];\n        var self = this;\n        var $inputs = this._getSelectableRecordCheckboxes();\n        var allChecked = $inputs.length > 0;\n        $inputs.each(function (index, input) {\n            if (input.checked) {\n                self.selection.push($(input).closest('tr').data('id'));\n            } else {\n                allChecked = false;\n            }\n        });\n        this.$('thead .o_list_record_selector input').prop('checked', allChecked);\n        if (JSON.stringify(this.selection) !== previousSelection) {\n            this.trigger_up('selection_changed', { allChecked, selection: this.selection });\n        }\n        this._updateFooter();\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {Object} record a record dataPoint on which the button applies\n     * @param {Object} node arch node of the button\n     * @param {Object} node.attrs the attrs of the button in the arch\n     * @param {jQueryEvent} ev\n     */\n    _onGroupButtonClicked: function (record, node, ev) {\n        ev.stopPropagation();\n        if (node.attrs.type === 'edit') {\n            this.trigger_up('group_edit_button_clicked', {\n                record: record,\n            });\n        } else {\n            this.trigger_up('button_clicked', {\n                attrs: node.attrs,\n                record: record,\n            });\n        }\n    },\n    /**\n     * If the user presses ENTER on a group header button, we want to execute\n     * the button action. This is done automatically as the click handler is\n     * called. However, we have to stop the propagation of the event to prevent\n     * another handler from closing the group (see _onKeyDown).\n     *\n     * @private\n     * @param {jQueryEvent} ev\n     */\n    _onGroupButtonKeydown: function (ev) {\n        if (ev.keyCode === $.ui.keyCode.ENTER) {\n            ev.stopPropagation();\n        }\n    },\n    /**\n     * When the user clicks on the checkbox in optional fields dropdown the\n     * column is added to listview and displayed\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onToggleOptionalColumn: function (ev) {\n        var self = this;\n        ev.stopPropagation();\n        // when the input's label is clicked, the click event is also raised on the\n        // input itself (https://developer.mozilla.org/en-US/docs/Web/HTML/Element/label),\n        // so this handler is executed twice (except if the rendering is quick enough,\n        // as when we render, we empty the HTML)\n        ev.preventDefault();\n        var input = ev.currentTarget.querySelector('input');\n        var fieldIndex = this.optionalColumnsEnabled.indexOf(input.name);\n        if (fieldIndex >= 0) {\n            this.optionalColumnsEnabled.splice(fieldIndex, 1);\n        } else {\n            this.optionalColumnsEnabled.push(input.name);\n        }\n        this.trigger_up('save_optional_fields', {\n            keyParts: this._getOptionalColumnsStorageKeyParts(),\n            optionalColumnsEnabled: this.optionalColumnsEnabled,\n        });\n        this._processColumns(this.columnInvisibleFields);\n        this._render().then(function () {\n            self._onToggleOptionalColumnDropdown(ev);\n        });\n    },\n    /**\n     * When the user clicks on the three dots (ellipsis), toggle the optional\n     * fields dropdown.\n     *\n     * @private\n     */\n    _onToggleOptionalColumnDropdown: function (ev) {\n        // The dropdown toggle is inside the overflow hidden container because\n        // the ellipsis is always in the last column, but we want the actual\n        // dropdown to be outside of the overflow hidden container since it\n        // could easily have a higher height than the table. However, separating\n        // the toggle and the dropdown itself is not supported by popper.js by\n        // default, which is why we need to toggle the dropdown manually.\n        ev.stopPropagation();\n        this.$('.o_optional_columns .dropdown-toggle').dropdown('toggle');\n        // Explicitly set left/right of the optional column dropdown as it is pushed\n        // inside this.$el, so we need to position it at the end of top left corner.\n        var position = (this.$(\".table-responsive\").css('overflow') === \"auto\" ? this.$el.width() :\n            this.$('table').width());\n        var direction = \"left\";\n        if (_t.database.parameters.direction === 'rtl') {\n            position = position - this.$('.o_optional_columns .o_optional_columns_dropdown').width();\n            direction = \"right\";\n        }\n        this.$('.o_optional_columns').css(direction, position);\n    },\n    /**\n     * Manages the keyboard events on the list. If the list is not editable, when the user navigates to\n     * a cell using the keyboard, if he presses enter, enter the model represented by the line\n     *\n     * @private\n     * @param {KeyboardEvent} ev\n     */\n    _onKeyDown: function (ev) {\n        var $cell = $(ev.currentTarget);\n        var $tr;\n        var $futureCell;\n        var colIndex;\n        if (this.state.isSample) {\n            return; // we disable keyboard navigation inside the table in \"sample\" mode\n        }\n        switch (ev.keyCode) {\n            case $.ui.keyCode.LEFT:\n                ev.preventDefault();\n                $tr = $cell.closest('tr');\n                $tr.closest('tbody').addClass('o_keyboard_navigation');\n                if ($tr.hasClass('o_group_header') && $tr.hasClass('o_group_open')) {\n                    this._onToggleGroup(ev);\n                } else {\n                    $futureCell = $cell.prev();\n                }\n                break;\n            case $.ui.keyCode.RIGHT:\n                ev.preventDefault();\n                $tr = $cell.closest('tr');\n                $tr.closest('tbody').addClass('o_keyboard_navigation');\n                if ($tr.hasClass('o_group_header') && !$tr.hasClass('o_group_open')) {\n                    this._onToggleGroup(ev);\n                } else {\n                    $futureCell = $cell.next();\n                }\n                break;\n            case $.ui.keyCode.UP:\n                ev.preventDefault();\n                $cell.closest('tbody').addClass('o_keyboard_navigation');\n                colIndex = this.currentColIndex || $cell.index();\n                $futureCell = this._findConnectedCell($cell, 'prev', colIndex);\n                if (!$futureCell) {\n                    this.trigger_up('navigation_move', { direction: 'up' });\n                }\n                break;\n            case $.ui.keyCode.DOWN:\n                ev.preventDefault();\n                $cell.closest('tbody').addClass('o_keyboard_navigation');\n                colIndex = this.currentColIndex || $cell.index();\n                $futureCell = this._findConnectedCell($cell, 'next', colIndex);\n                break;\n            case $.ui.keyCode.ENTER:\n                ev.preventDefault();\n                $tr = $cell.closest('tr');\n                if ($tr.hasClass('o_group_header')) {\n                    this._onToggleGroup(ev);\n                } else {\n                    var id = $tr.data('id');\n                    if (id) {\n                        this.trigger_up('open_record', { id: id, target: ev.target });\n                    }\n                }\n                break;\n        }\n        if ($futureCell) {\n            // If the cell contains activable elements, focus them instead (except if it is in a\n            // group header, in which case we want to activate the whole header, so that we can\n            // open/close it with RIGHT/LEFT keystrokes)\n            var isInGroupHeader = $futureCell.closest('tr').hasClass('o_group_header');\n            var $activables = !isInGroupHeader && $futureCell.find(':focusable');\n            if ($activables.length) {\n                $activables[0].focus();\n            } else {\n                $futureCell.focus();\n            }\n        }\n    },\n    /**\n     * @private\n     */\n    _onMouseDown: function () {\n        $('.o_keyboard_navigation').removeClass('o_keyboard_navigation');\n    },\n    /**\n     * @private\n     * @param {OwlEvent} ev\n     * @param {Object} group\n     */\n    _onPagerChanged: async function (ev, group) {\n        ev.stopPropagation();\n        const { currentMinimum, limit } = ev.detail;\n        this.trigger_up('load', {\n            id: group.id,\n            limit: limit,\n            offset: currentMinimum - 1,\n            on_success: reloadedGroup => {\n                Object.assign(group, reloadedGroup);\n                this._render();\n            },\n        });\n    },\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onRowClicked: function (ev) {\n        // The special_click property explicitely allow events to bubble all\n        // the way up to bootstrap's level rather than being stopped earlier.\n        if (!ev.target.closest('.o_list_record_selector') && !$(ev.target).prop('special_click') && !this.no_open) {\n            var id = $(ev.currentTarget).data('id');\n            if (id) {\n                this.trigger_up('open_record', { id: id, target: ev.target });\n            }\n        }\n    },\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onSelectRecord: function (ev) {\n        ev.stopPropagation();\n        this._updateSelection();\n    },\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onSortColumn: function (ev) {\n        var name = $(ev.currentTarget).data('name');\n        this.trigger_up('toggle_column_order', { id: this.state.id, name: name });\n    },\n    /**\n     * When the user clicks on the whole record selector cell, we want to toggle\n     * the checkbox, to make record selection smooth.\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onToggleCheckbox: function (ev) {\n        const $recordSelector = $(ev.target).find('input[type=checkbox]:not(\":disabled\")');\n        $recordSelector.prop('checked', !$recordSelector.prop(\"checked\"));\n        $recordSelector.change(); // s.t. th and td checkbox cases are handled by their own handler\n    },\n    /**\n     * @private\n     * @param {DOMEvent} ev\n     */\n    _onToggleGroup: function (ev) {\n        ev.preventDefault();\n        var group = $(ev.currentTarget).closest('tr').data('group');\n        if (group.count) {\n            this.trigger_up('toggle_group', {\n                group: group,\n                onSuccess: () => {\n                    this._updateSelection();\n                    // Refocus the header after re-render unless the user\n                    // already focused something else by now\n                    if (document.activeElement.tagName === 'BODY') {\n                        var groupHeaders = $('tr.o_group_header:data(\"group\")');\n                        var header = groupHeaders.filter(function () {\n                            return $(this).data('group').id === group.id;\n                        });\n                        header.find('.o_group_name').focus();\n                    }\n                },\n            });\n        }\n    },\n    /**\n     * When the user clicks on the row selection checkbox in the header, we\n     * need to update the checkbox of the row selection checkboxes in the body.\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onToggleSelection: function (ev) {\n        var checked = $(ev.currentTarget).prop('checked') || false;\n        this.$('tbody .o_list_record_selector input:not(\":disabled\")').prop('checked', checked);\n        this._updateSelection();\n    },\n});\n\nexport default ListRenderer;\n", "/** @odoo-module alias=web.ListView **/\n\n/**\n * The list view is one of the core and most basic view: it is used to look at\n * a list of records in a table.\n *\n * Note that a list view is not instantiated to display a one2many field in a\n * form view. Only a ListRenderer is used in that case.\n */\n\nimport BasicView from 'web.BasicView';\nimport core from 'web.core';\nimport ListModel from 'web.ListModel';\nimport ListRenderer from 'web.ListRenderer';\nimport ListController from 'web.ListController';\nimport pyUtils from 'web.py_utils';\n\nvar _lt = core._lt;\n\nvar ListView = BasicView.extend({\n    accesskey: \"l\",\n    display_name: _lt('List'),\n    icon: 'fa-list-ul',\n    config: _.extend({}, BasicView.prototype.config, {\n        Model: ListModel,\n        Renderer: ListRenderer,\n        Controller: ListController,\n    }),\n    viewType: 'list',\n    /**\n     * @override\n     *\n     * @param {Object} viewInfo\n     * @param {Object} params\n     * @param {boolean} params.hasActionMenus\n     * @param {boolean} [params.hasSelectors=true]\n     */\n    init: function (viewInfo, params) {\n        var self = this;\n        this._super.apply(this, arguments);\n        var selectedRecords = []; // there is no selected records by default\n\n        var pyevalContext = py.dict.fromJSON(_.pick(params.context, function(value, key, object) {return !_.isUndefined(value)}) || {});\n        var expandGroups = !!JSON.parse(pyUtils.py_eval(this.arch.attrs.expand || \"0\", {'context': pyevalContext}));\n\n        this.groupbys = {};\n        this.headerButtons = [];\n        this.arch.children.forEach(function (child) {\n            if (child.tag === 'groupby') {\n                self._extractGroup(child);\n            }\n            if (child.tag === 'header') {\n                self._extractHeaderButtons(child);\n            }\n        });\n\n        let editable = false;\n        if ((!this.arch.attrs.edit || !!JSON.parse(this.arch.attrs.edit)) && !params.readonly) {\n            editable = this.arch.attrs.editable;\n        }\n\n        this.controllerParams.activeActions.export_xlsx = this.arch.attrs.export_xlsx ? !!JSON.parse(this.arch.attrs.export_xlsx): true;\n        this.controllerParams.editable = editable;\n        this.controllerParams.hasActionMenus = params.hasActionMenus;\n        this.controllerParams.headerButtons = this.headerButtons;\n        this.controllerParams.toolbarActions = viewInfo.toolbar;\n        this.controllerParams.mode = 'readonly';\n        this.controllerParams.selectedRecords = selectedRecords;\n\n        this.rendererParams.arch = this.arch;\n        this.rendererParams.groupbys = this.groupbys;\n        this.rendererParams.hasSelectors =\n                'hasSelectors' in params ? params.hasSelectors : true;\n        this.rendererParams.editable = editable;\n        this.rendererParams.selectedRecords = selectedRecords;\n        this.rendererParams.addCreateLine = false;\n        this.rendererParams.addCreateLineInGroups = editable && this.controllerParams.activeActions.create;\n        this.rendererParams.isMultiEditable = this.arch.attrs.multi_edit && !!JSON.parse(this.arch.attrs.multi_edit);\n\n        this.modelParams.groupbys = this.groupbys;\n\n        this.loadParams.limit = this.loadParams.limit || 80;\n        this.loadParams.openGroupByDefault = expandGroups;\n        this.loadParams.type = 'list';\n        var groupsLimit = parseInt(this.arch.attrs.groups_limit, 10);\n        this.loadParams.groupsLimit = groupsLimit || (expandGroups ? 10 : 80);\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {Object} node\n     */\n    _extractGroup: function (node) {\n        var innerView = this.fields[node.attrs.name].views.groupby;\n        this.groupbys[node.attrs.name] = this._processFieldsView(innerView, 'groupby');\n    },\n    /**\n     * Extracts action buttons definitions from the <header> node of the list\n     * view definition\n     *\n     * @private\n     * @param {Object} node\n     */\n    _extractHeaderButtons(node) {\n        node.children.forEach(child => {\n            if (child.tag === 'button' && !child.attrs.modifiers.invisible) {\n                this.headerButtons.push(child);\n            }\n        });\n    },\n    /**\n     * @override\n     */\n    _extractParamsFromAction: function (action) {\n        var params = this._super.apply(this, arguments);\n        var inDialog = action.target === 'new';\n        var inline = action.target === 'inline';\n        params.hasActionMenus = !inDialog && !inline;\n        return params;\n    },\n    /**\n     * @override\n     */\n    _updateMVCParams: function () {\n        this._super.apply(this, arguments);\n        this.controllerParams.noLeaf = !!this.loadParams.context.group_by_no_leaf;\n    },\n});\n\nexport default ListView;\n", "/** @odoo-module alias=web.qweb **/\n\n/**\n * Client-side implementation of a qweb view.\n */\n\nimport core from 'web.core';\nimport AbstractView from '../abstract_view';\nimport AbstractModel from '../abstract_model';\nimport AbstractRenderer from '../abstract_renderer';\nimport AbstractController from '../abstract_controller';\nimport registry from 'web.view_registry';\n\nvar _lt = core._lt;\n\n/**\n * model\n */\nvar Model = AbstractModel.extend({\n    /**\n     * init\n     */\n    init: function () {\n        this._super.apply(this, arguments);\n        this._state = {\n            viewId: false,\n            modelName: false,\n            body: '',\n            context: {},\n            domain: [],\n        };\n    },\n    /**\n     * fetches the rendered qweb view\n     */\n    _fetch: function () {\n        var state = this._state;\n        return this._rpc({\n            model: state.modelName,\n            method: 'qweb_render_view',\n            kwargs: {\n                view_id: state.viewId,\n                domain: state.domain,\n                context: state.context\n            }\n        }).then(function (r) {\n            state.body = r;\n            return state.viewId;\n        });\n    },\n    /**\n     * get\n     */\n    __get: function () {\n        return this._state;\n    },\n    /**\n     * load\n     */\n    __load: function (params) {\n        _.extend(this._state, _.pick(params, ['viewId', 'modelName', 'domain', 'context']));\n\n        return this._fetch();\n    },\n    /**\n     * reload\n     */\n    __reload: function (_id, params) {\n        _.extend(this._state, _.pick(params, ['domain', 'context']));\n\n        return this._fetch();\n    }\n});\n/**\n * renderer\n */\nvar Renderer = AbstractRenderer.extend({\n    /**\n     * render\n     */\n    _render: function () {\n        var self = this;\n        return this._super.apply(this, arguments).then(function () {\n            self.$el.html(self.state.body);\n        });\n    }\n});\n/**\n * controller\n */\nvar Controller = AbstractController.extend({\n    events: _.extend({}, AbstractController.prototype.events, {\n        'click [type=\"toggle\"]': '_onLazyToggle',\n        'click [type=\"action\"]' : '_onActionClicked',\n    }),\n\n    init: function () {\n        this._super.apply(this, arguments);\n    },\n\n    /**\n     * @override\n     */\n    renderButtons: function ($node) {\n        this.$buttons = $('<nav/>');\n        if ($node) {\n            $node.append(this.$buttons);\n        }\n    },\n    _update: function () {\n        var self = this;\n        return this._super.apply(this, arguments).then(function () {\n            // move control panel buttons from the view to the control panel\n            // area\n            var $cp_buttons = self.renderer.$('nav.o_qweb_cp_buttons');\n            $cp_buttons.children().appendTo(self.$buttons.empty());\n            $cp_buttons.remove();\n        });\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Lazy toggle. Content is not remembered between unfolds.\n     */\n    _onLazyToggle: function (e) {\n        // TODO: add support for view (possibly action as well?)\n        var $target = $(e.target);\n        var $t = $target.closest('[data-model]');\n        if (!($target.hasClass('fa-caret-down') || $target.hasClass('fa-caret-right'))) {\n            $target = $t.find('.fa-caret-down, .fa-caret-right');\n        }\n\n        var data = $t.data();\n        if (this._fold($t)) {\n            $target.removeClass('fa-caret-down').addClass('fa-caret-right');\n            return;\n        }\n\n        // NB: $.data() automatically parses json attributes, but does not\n        //     automatically parse lone float literals in data-*, so a\n        //     data-args (as a json object) is very convenient\n        var args = data.args || _.omit(data, 'model', 'method', 'id');\n\n        return this._rpc({\n            model: data.model,\n            method: data.method,\n            args: data.id ? [data.id] : undefined,\n            kwargs: args // FIXME: context?\n        }).then(function (s) {\n            return $(s);\n        }).then(function ($newcontent) {\n            $t.data('children', $newcontent).after($newcontent);\n            $target.removeClass('fa-caret-right').addClass('fa-caret-down');\n        });\n    },\n    /**\n     * Attempts to fold the parameter, returns whether that happened.\n     */\n    _fold: function ($el) {\n        var $children = $el.data('children');\n        if (!$children) {\n            return false;\n        }\n\n        var self = this;\n        $children.each(function (_i, e) {\n            self._fold($(e));\n        }).remove();\n        $el.removeData('children');\n        return true;\n    }\n});\n\n/**\n * view\n */\nvar QWebView = AbstractView.extend({\n    display_name: _lt('Freedom View'),\n    icon: 'fa-file-picture-o',\n    viewType: 'qweb',\n    // groupable?\n    enableTimeRangeMenu: true,\n    config: _.extend({}, AbstractView.prototype.config, {\n        Model: Model,\n        Renderer: Renderer,\n        Controller: Controller,\n    }),\n\n    /**\n     * init method\n     */\n    init: function (viewInfo, params) {\n        this._super.apply(this, arguments);\n        this.loadParams.viewId = viewInfo.view_id;\n    }\n});\n\nregistry.add('qweb', QWebView);\nexport default {\n    View: QWebView,\n    Controller: Controller,\n    Renderer: Renderer,\n    Model: Model\n};\n", "/** @odoo-module alias=web.RendererWrapper **/\n\n\n    import { ComponentWrapper } from 'web.OwlCompatibility';\n\n    class RendererWrapper extends ComponentWrapper {\n        getLocalState() { }\n        setLocalState() { }\n        giveFocus() { }\n        resetLocalState() { }\n    }\n\n    export default RendererWrapper;\n", "/** @odoo-module alias=web.SampleServer **/\n\n    import session from 'web.session';\n    import utils from 'web.utils';\n    import Registry from 'web.Registry';\n    import viewUtils from 'web.viewUtils';\n\n    class UnimplementedRouteError extends Error {}\n\n    /**\n     * Helper function returning the value from a list of sample strings\n     * corresponding to the given ID.\n     * @param {number} id\n     * @param {string[]} sampleTexts\n     * @returns {string}\n     */\n    function getSampleFromId(id, sampleTexts) {\n        return sampleTexts[(id - 1) % sampleTexts.length];\n    }\n\n    /**\n     * Helper function returning a regular expression specifically matching\n     * a given 'term' in a fieldName. For example `fieldNameRegex('abc')`:\n     * will match:\n     * - \"abc\"\n     * - \"field_abc__def\"\n     * will not match:\n     * - \"aabc\"\n     * - \"abcd_ef\"\n     * @param {...string} term\n     * @returns {RegExp}\n     */\n    function fieldNameRegex(...terms) {\n        return new RegExp(`\\\\b((\\\\w+)?_)?(${terms.join('|')})(_(\\\\w+)?)?\\\\b`);\n    }\n\n    const DESCRIPTION_REGEX = fieldNameRegex('description', 'label', 'title', 'subject', 'message');\n    const EMAIL_REGEX = fieldNameRegex('email');\n    const PHONE_REGEX = fieldNameRegex('phone');\n    const URL_REGEX = fieldNameRegex('url');\n\n    /**\n     * Sample server class\n     *\n     * Represents a static instance of the server used when a RPC call sends\n     * empty values/groups while the attribute 'sample' is set to true on the\n     * view.\n     *\n     * This server will generate fake data and send them in the adequate format\n     * according to the route/method used in the RPC.\n     */\n    class SampleServer {\n\n        /**\n         * @param {string} modelName\n         * @param {Object} fields\n         */\n        constructor(modelName, fields) {\n            this.mainModel = modelName;\n            this.data = {};\n            this.data[modelName] = {\n                fields,\n                records: [],\n            };\n            // Generate relational fields' co models\n            for (const fieldName in fields) {\n                const field = fields[fieldName];\n                if (['many2one', 'one2many', 'many2many'].includes(field.type)) {\n                    this.data[field.relation] = this.data[field.relation] || {\n                        fields: {\n                            display_name: { type: 'char' },\n                            id: { type: 'integer' },\n                            color: { type: 'integer' },\n                        },\n                        records: [],\n                    };\n                }\n            }\n            // On some models, empty grouped Kanban or List view still contain\n            // real (empty) groups. In this case, we re-use the result of the\n            // web_read_group rpc to tweak sample data s.t. those real groups\n            // contain sample records.\n            this.existingGroups = null;\n            // Sample records generation is only done if necessary, so we delay\n            // it to the first \"mockRPC\" call. These flags allow us to know if\n            // the records have been generated or not.\n            this.populated = false;\n            this.existingGroupsPopulated = false;\n        }\n\n        //---------------------------------------------------------------------\n        // Public\n        //---------------------------------------------------------------------\n\n        /**\n         * This is the main entry point of the SampleServer. Mocks a request to\n         * the server with sample data.\n         * @param {Object} params\n         * @returns {any} the result obtained with the sample data\n         * @throws {Error} If called on a route/method we do not handle\n         */\n        mockRpc(params) {\n            if (!(params.model in this.data)) {\n                throw new Error(`SampleServer: unknown model ${params.model}`);\n            }\n            this._populateModels();\n            switch (params.method || params.route) {\n                case '/web/dataset/search_read':\n                    return this._mockSearchReadController(params);\n                case 'web_read_group':\n                    return this._mockWebReadGroup(params);\n                case 'read_group':\n                    return this._mockReadGroup(params);\n                case 'read_progress_bar':\n                    return this._mockReadProgressBar(params);\n                case 'read':\n                    return this._mockRead(params);\n            }\n            // this rpc can't be mocked by the SampleServer itself, so check if there is an handler\n            // in the mockRegistry: either specific for this model (with key 'model/method'), or\n            // global (with key 'method')\n            const method = params.method || params.route;\n            const mockFunction = SampleServer.mockRegistry.get(`${params.model}/${method}`) ||\n                                 SampleServer.mockRegistry.get(method);\n            if (mockFunction) {\n                return mockFunction.call(this, params);\n            }\n            console.log(`SampleServer: unimplemented route \"${params.method || params.route}\"`);\n            throw new SampleServer.UnimplementedRouteError();\n        }\n\n        setExistingGroups(groups) {\n            this.existingGroups = groups;\n        }\n\n        //---------------------------------------------------------------------\n        // Private\n        //---------------------------------------------------------------------\n\n        /**\n         * @param {Object[]} measures, each measure has the form { fieldName, type }\n         * @param {Object[]} records\n         * @returns {Object}\n         */\n        _aggregateFields(measures, records) {\n            const values = {};\n            for (const { fieldName, type } of measures) {\n                if (['float', 'integer', 'monetary'].includes(type)) {\n                    if (records.length) {\n                        let value = 0;\n                        for (const record of records) {\n                            value += record[fieldName];\n                        }\n                        values[fieldName] = this._sanitizeNumber(value);\n                    } else {\n                        values[fieldName] = null;\n                    }\n                }\n                if (type === 'many2one') {\n                    const ids = new Set(records.map(r => r[fieldName]));\n                    values.fieldName = ids.size || null;\n                }\n            }\n            return values;\n        }\n\n        /**\n         * @param {any} value\n         * @param {Object} options\n         * @param {string} [options.interval]\n         * @param {string} [options.relation]\n         * @param {string} [options.type]\n         * @returns {any}\n         */\n        _formatValue(value, options) {\n            if (!value) {\n                return false;\n            }\n            const { type, interval, relation } = options;\n            if (['date', 'datetime'].includes(type)) {\n                const fmt = SampleServer.FORMATS[interval];\n                return moment(value).format(fmt);\n            } else if (type === 'many2one') {\n                const rec = this.data[relation].records.find(({id}) => id === value);\n                return [value, rec.display_name];\n            } else {\n                return value;\n            }\n        }\n\n        /**\n         * Generates field values based on heuristics according to field types\n         * and names.\n         *\n         * @private\n         * @param {string} modelName\n         * @param {string} fieldName\n         * @param {number} id the record id\n         * @returns {any} the field value\n         */\n        _generateFieldValue(modelName, fieldName, id) {\n            const field = this.data[modelName].fields[fieldName];\n            switch (field.type) {\n                case \"boolean\":\n                    return fieldName === 'active' ? true : this._getRandomBool();\n                case \"char\":\n                case \"text\":\n                    if ([\"display_name\", \"name\"].includes(fieldName)) {\n                        if (SampleServer.PEOPLE_MODELS.includes(modelName)) {\n                            return getSampleFromId(id, SampleServer.SAMPLE_PEOPLE);\n                        } else if (modelName === 'res.country') {\n                            return getSampleFromId(id, SampleServer.SAMPLE_COUNTRIES);\n                        }\n                    }\n                    if (fieldName === 'display_name') {\n                        return getSampleFromId(id, SampleServer.SAMPLE_TEXTS);\n                    } else if ([\"name\", \"reference\"].includes(fieldName)) {\n                        return `REF${String(id).padStart(4, '0')}`;\n                    } else if (DESCRIPTION_REGEX.test(fieldName)) {\n                        return getSampleFromId(id, SampleServer.SAMPLE_TEXTS);\n                    } else if (EMAIL_REGEX.test(fieldName)) {\n                        const emailName = getSampleFromId(id, SampleServer.SAMPLE_PEOPLE)\n                            .replace(/ /, \".\")\n                            .toLowerCase();\n                        return `${emailName}@sample.demo`;\n                    } else if (PHONE_REGEX.test(fieldName)) {\n                        return `+1 555 754 ${String(id).padStart(4, '0')}`;\n                    } else if (URL_REGEX.test(fieldName)) {\n                        return `http://sample${id}.com`;\n                    }\n                    return false;\n                case \"date\":\n                case \"datetime\": {\n                    const format = field.type === \"date\" ?\n                        \"YYYY-MM-DD\" :\n                        \"YYYY-MM-DD HH:mm:ss\";\n                    return this._getRandomDate(format);\n                }\n                case \"float\":\n                    return this._getRandomFloat(SampleServer.MAX_FLOAT);\n                case \"integer\": {\n                    let max = SampleServer.MAX_INTEGER;\n                    if (fieldName.includes('color')) {\n                        max = this._getRandomBool() ? SampleServer.MAX_COLOR_INT : 0;\n                    }\n                    return this._getRandomInt(max);\n                }\n                case \"monetary\":\n                    return this._getRandomInt(SampleServer.MAX_MONETARY);\n                case \"many2one\":\n                    if (field.relation === 'res.currency') {\n                        return session.company_currency_id;\n                    }\n                    if (field.relation === 'ir.attachment') {\n                        return false;\n                    }\n                    return this._getRandomSubRecordId();\n                case \"one2many\":\n                case \"many2many\": {\n                    const ids = [this._getRandomSubRecordId(), this._getRandomSubRecordId()];\n                    return [...new Set(ids)];\n                }\n                case \"selection\": {\n                    // I hoped we wouldn't have to implement such special cases, but here it is.\n                    // If this (mail) field is set, 'Warning' is displayed instead of the last\n                    // activity, and we don't want to see a bunch of 'Warning's in a list. In the\n                    // future, if we have to implement several special cases like that, we'll setup\n                    // a proper hook to allow external modules to define extensions of this function.\n                    // For now, as we have only one use case, I guess that doing it here is fine.\n                    if (fieldName === 'activity_exception_decoration') {\n                        return false;\n                    }\n                    if (field.selection.length > 0) {\n                        return this._getRandomArrayEl(field.selection)[0];\n                    }\n                    return false;\n                }\n                default:\n                    return false;\n            }\n        }\n\n        /**\n         * @private\n         * @param {any[]} array\n         * @returns {any}\n         */\n        _getRandomArrayEl(array) {\n            return array[Math.floor(Math.random() * array.length)];\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _getRandomBool() {\n            return Math.random() < 0.5;\n        }\n\n        /**\n         * @private\n         * @param {string} format\n         * @returns {moment}\n         */\n        _getRandomDate(format) {\n            const delta = Math.floor(\n                (Math.random() - Math.random()) * SampleServer.DATE_DELTA\n            );\n            return new moment()\n                .add(delta, \"hour\")\n                .format(format);\n        }\n\n        /**\n         * @private\n         * @param {number} max\n         * @returns {number} float in [O, max[\n         */\n        _getRandomFloat(max) {\n            return this._sanitizeNumber(Math.random() * max);\n        }\n\n        /**\n         * @private\n         * @param {number} max\n         * @returns {number} int in [0, max[\n         */\n        _getRandomInt(max) {\n            return Math.floor(Math.random() * max);\n        }\n\n        /**\n         * @private\n         * @returns {number} id in [1, SUB_RECORDSET_SIZE]\n         */\n        _getRandomSubRecordId() {\n            return Math.floor(Math.random() * SampleServer.SUB_RECORDSET_SIZE) + 1;\n        }\n        /**\n         * Mocks calls to the read method.\n         * @private\n         * @param {Object} params\n         * @param {string} params.model\n         * @param {Array[]} params.args (args[0] is the list of ids, args[1] is\n         *   the list of fields)\n         * @returns {Object[]}\n         */\n        _mockRead(params) {\n            const model = this.data[params.model];\n            const ids = params.args[0];\n            const fieldNames = params.args[1];\n            const records = [];\n            for (const r of model.records) {\n                if (!ids.includes(r.id)) {\n                    continue;\n                }\n                const record = { id: r.id };\n                for (const fieldName of fieldNames) {\n                    const field = model.fields[fieldName];\n                    if (!field) {\n                        record[fieldName] = false; // unknown field\n                    } else if (field.type === 'many2one') {\n                        const relModel = this.data[field.relation];\n                        const relRecord = relModel.records.find(\n                            relR => r[fieldName] === relR.id\n                        );\n                        record[fieldName] = relRecord ?\n                            [relRecord.id, relRecord.display_name] :\n                            false;\n                    } else {\n                        record[fieldName] = r[fieldName];\n                    }\n                }\n                records.push(record);\n            }\n            return records;\n        }\n\n        /**\n         * Mocks calls to the read_group method.\n         *\n         * @param {Object} params\n         * @param {string} params.model\n         * @param {string[]} [params.fields] defaults to the list of all fields\n         * @param {string[]} params.groupBy\n         * @param {boolean} [params.lazy=true]\n         * @returns {Object[]} Object with keys groups and length\n         */\n        _mockReadGroup(params) {\n            const lazy = 'lazy' in params ? params.lazy : true;\n            const model = params.model;\n            const fields = this.data[model].fields;\n            const records = this.data[model].records;\n\n            const normalizedGroupBys = [];\n            let groupBy = [];\n            if (params.groupBy.length) {\n                groupBy = lazy ? [params.groupBy[0]] : params.groupBy;\n            }\n            for (const groupBySpec of groupBy) {\n                let [fieldName, interval] = groupBySpec.split(':');\n                interval = interval || 'month';\n                const { type, relation } = fields[fieldName];\n                if (type) {\n                    const gb = { fieldName, type, interval, relation, alias: groupBySpec };\n                    normalizedGroupBys.push(gb);\n                }\n            }\n            const groups = utils.groupBy(records, (record) => {\n                const vals = {};\n                for (const gb of normalizedGroupBys) {\n                    const { fieldName, type } = gb;\n                    let value;\n                    if (['date', 'datetime'].includes(type)) {\n                        value = this._formatValue(record[fieldName], gb);\n                    } else {\n                        value = record[fieldName];\n                    }\n                    vals[fieldName] = value;\n                }\n                return JSON.stringify(vals);\n            });\n            const measures = [];\n            for (const measureSpec of (params.fields || Object.keys(fields))) {\n                const [fieldName, aggregateFunction] = measureSpec.split(':');\n                const { type } = fields[fieldName];\n                if (!params.groupBy.includes(fieldName) && type &&\n                (type !== 'many2one' || aggregateFunction !== 'count_distinct')) {\n                    measures.push({ fieldName, type });\n                }\n            }\n\n            let result = [];\n            for (const id in groups) {\n                const records = groups[id];\n                const group = { __domain: [] };\n                let countKey = `__count`;\n                if (normalizedGroupBys.length && lazy) {\n                    countKey = `${normalizedGroupBys[0].fieldName}_count`;\n                }\n                group[countKey] = records.length;\n                const firstElem = records[0];\n                for (const gb of normalizedGroupBys) {\n                    const { alias, fieldName } = gb;\n                    group[alias] = this._formatValue(firstElem[fieldName], gb);\n                }\n                Object.assign(group, this._aggregateFields(measures, records));\n                result.push(group);\n            }\n            if (normalizedGroupBys.length > 0) {\n                const { alias, interval, type } = normalizedGroupBys[0];\n                result = utils.sortBy(result, (group) => {\n                    const val = group[alias];\n                    if (['date', 'datetime'].includes(type)) {\n                        return moment(val, SampleServer.FORMATS[interval]);\n                    }\n                    return val;\n                });\n            }\n            return result;\n        }\n\n        /**\n         * Mocks calls to the read_progress_bar method.\n         * @private\n         * @param {Object} params\n         * @param {string} params.model\n         * @param {Object} params.kwargs\n         * @return {Object}\n         */\n        _mockReadProgressBar(params) {\n            const groupByFieldName = viewUtils.getGroupByField(params.kwargs.group_by);\n            const progress_bar = params.kwargs.progress_bar;\n            const groupByField = this.data[params.model].fields[groupByFieldName];\n            const data = {};\n            for (const record of this.data[params.model].records) {\n                let groupByValue = record[groupByFieldName];\n                if (groupByField.type === \"many2one\") {\n                    const relatedRecords = this.data[groupByField.relation].records;\n                    const relatedRecord = relatedRecords.find(r => r.id === groupByValue);\n                    groupByValue = relatedRecord.display_name;\n                }\n                // special case for bool values: rpc call response with capitalized strings\n                if (!(groupByValue in data)) {\n                    if (groupByValue === true) {\n                        groupByValue = \"True\";\n                    } else if (groupByValue === false) {\n                        groupByValue = \"False\";\n                    }\n                }\n                if (!(groupByValue in data)) {\n                    data[groupByValue] = {};\n                    for (const key in progress_bar.colors) {\n                        data[groupByValue][key] = 0;\n                    }\n                }\n                const fieldValue = record[progress_bar.field];\n                if (fieldValue in data[groupByValue]) {\n                    data[groupByValue][fieldValue]++;\n                }\n            }\n            return data;\n        }\n\n        /**\n         * Mocks calls to the /web/dataset/search_read route to return sample\n         * records.\n         * @private\n         * @param {Object} params\n         * @param {string} params.model\n         * @param {string[]} params.fields\n         * @returns {{ records: Object[], length: number }}\n         */\n        _mockSearchReadController(params) {\n            const model = this.data[params.model];\n            const rawRecords = model.records.slice(0, SampleServer.SEARCH_READ_LIMIT);\n            const records = this._mockRead({\n                model: params.model,\n                args: [rawRecords.map(r => r.id), params.fields],\n            });\n            return { records, length: records.length };\n        }\n\n        /**\n         * Mocks calls to the web_read_group method to return groups populated\n         * with sample records. Only handles the case where the real call to\n         * web_read_group returned groups, but none of these groups contain\n         * records. In this case, we keep the real groups, and populate them\n         * with sample records.\n         * @private\n         * @param {Object} params\n         * @param {Object} [result] the result of a real call to web_read_group\n         * @returns {{ groups: Object[], length: number }}\n         */\n        _mockWebReadGroup(params) {\n            let groups;\n            if (this.existingGroups) {\n                this._tweakExistingGroups(params);\n                groups = this.existingGroups;\n            } else {\n                groups = this._mockReadGroup(params);\n            }\n            return {\n                groups,\n                length: groups.length,\n            };\n        }\n\n        /**\n         * Updates the sample data such that the existing groups (in database)\n         * also exists in the sample, and such that there are sample records in\n         * those groups.\n         * @private\n         * @param {Object[]} groups empty groups returned by the server\n         * @param {Object} params\n         * @param {string} params.model\n         * @param {string[]} params.groupBy\n         */\n        _populateExistingGroups(params) {\n            if (!this.existingGroupsPopulated) {\n                const groups = this.existingGroups;\n                this.groupsInfo = groups;\n                const groupBy = params.groupBy[0];\n                const groupByFieldName = viewUtils.getGroupByField(groupBy);\n                const groupByField = this.data[params.model].fields[groupByFieldName];\n                const values = groups.map(g => {\n                    if (['date', 'datetime'].includes(groupByField.type)) {\n                        // we arbitrarily take the first date of the group as a default value to populate\n                        // date/datetime groups\n                        return g.__range[groupByFieldName] ? g.__range[groupByFieldName].from : false;\n                    } else {\n                        return g[groupBy];\n                    }\n                });\n                const groupedByM2O = groupByField.type === 'many2one';\n                if (groupedByM2O) { // re-populate co model with relevant records\n                    this.data[groupByField.relation].records = values.map(v => {\n                        return { id: v[0], display_name: v[1] };\n                    });\n                }\n                for (const r of this.data[params.model].records) {\n                    const value = getSampleFromId(r.id, values);\n                    r[groupByFieldName] = groupedByM2O ? value[0] : value;\n                }\n                this.existingGroupsPopulated = true;\n            }\n        }\n\n        /**\n         * Generates sample records for the models in this.data. Records will be\n         * generated once, and subsequent calls to this function will be skipped.\n         * @private\n         */\n        _populateModels() {\n            if (!this.populated) {\n                for (const modelName in this.data) {\n                    const model = this.data[modelName];\n                    const fieldNames = Object.keys(model.fields).filter(f => f !== 'id');\n                    const size = modelName === this.mainModel ?\n                        SampleServer.MAIN_RECORDSET_SIZE :\n                        SampleServer.SUB_RECORDSET_SIZE;\n                    for (let id = 1; id <= size; id++) {\n                        const record = { id };\n                        for (const fieldName of fieldNames) {\n                            record[fieldName] = this._generateFieldValue(modelName, fieldName, id);\n                        }\n                        model.records.push(record);\n                    }\n                }\n                this.populated = true;\n            }\n        }\n\n        /**\n         * Rounds the given number value according to the configured precision.\n         * @private\n         * @param {number} value\n         * @returns {number}\n         */\n        _sanitizeNumber(value) {\n            return parseFloat(value.toFixed(SampleServer.FLOAT_PRECISION));\n        }\n\n        /**\n         * A real (web_)read_group call has been done, and it has returned groups,\n         * but they are all empty. This function updates the sample data such\n         * that those group values exist and those groups contain sample records.\n         * @private\n         * @param {Object[]} groups empty groups returned by the server\n         * @param {Object} params\n         * @param {string} params.model\n         * @param {string[]} params.fields\n         * @param {string[]} params.groupBy\n         * @returns {Object[]} groups with count and aggregate values updated\n         *\n         * TODO: rename\n         */\n        _tweakExistingGroups(params) {\n            const groups = this.existingGroups;\n            this._populateExistingGroups(params);\n\n            // update count and aggregates for each group\n            const groupBy = params.groupBy[0];\n            const groupByFieldName = viewUtils.getGroupByField(groupBy);\n            const groupByField = this.data[params.model].fields[groupByFieldName];\n            const records = this.data[params.model].records;\n            for (const g of groups) {\n                let groupValue = g[groupBy];\n                if (groupByField.type === 'many2one') {\n                    groupValue = g[groupBy][0];\n                } else if (['date', 'datetime'].includes(groupByField.type)) {\n                    // we arbitrarily take the first date of the group as a default value to tweak\n                    // date/datetime groups\n                    groupValue = g.__range[groupByFieldName] ? g.__range[groupByFieldName].from : false;\n                }\n                const recordsInGroup = records.filter(r => r[groupByFieldName] === groupValue);\n                g[`${groupByFieldName}_count`] = recordsInGroup.length;\n                for (const field of params.fields) {\n                    const fieldType = this.data[params.model].fields[field].type;\n                    if (['integer, float', 'monetary'].includes(fieldType)) {\n                        g[field] = recordsInGroup.reduce((acc, r) => acc + r[field], 0);\n                    }\n                }\n                g.__data = {\n                    records: this._mockRead({\n                        model: params.model,\n                        args: [recordsInGroup.map(r => r.id), params.fields],\n                    }),\n                    length: recordsInGroup.length,\n                };\n            }\n        }\n    }\n\n    SampleServer.FORMATS = {\n        hour: 'HH[:00] DD MMM',\n        day: 'YYYY-MM-DD',\n        week: '[W]ww YYYY',\n        month: 'MMMM YYYY',\n        quarter: '[Q]Q YYYY',\n        year: 'Y',\n    };\n    SampleServer.DISPLAY_FORMATS = Object.assign({}, SampleServer.FORMATS, { day: 'DD MMM YYYY' });\n\n    SampleServer.MAIN_RECORDSET_SIZE = 16;\n    SampleServer.SUB_RECORDSET_SIZE = 5;\n    SampleServer.SEARCH_READ_LIMIT = 10;\n\n    SampleServer.MAX_FLOAT = 100;\n    SampleServer.MAX_INTEGER = 50;\n    SampleServer.MAX_COLOR_INT = 7;\n    SampleServer.MAX_MONETARY = 100000;\n    SampleServer.DATE_DELTA = 24 * 60; // in hours -> 60 days\n    SampleServer.FLOAT_PRECISION = 2;\n\n    SampleServer.SAMPLE_COUNTRIES = [\"Belgium\", \"France\", \"Portugal\", \"Singapore\", \"Australia\"];\n    SampleServer.SAMPLE_PEOPLE = [\n        \"John Miller\", \"Henry Campbell\", \"Carrie Helle\", \"Wendi Baltz\", \"Thomas Passot\",\n    ];\n    SampleServer.SAMPLE_TEXTS = [\n        \"Laoreet id\", \"Volutpat blandit\", \"Integer vitae\", \"Viverra nam\", \"In massa\",\n    ];\n    SampleServer.PEOPLE_MODELS = [\n        'res.users', 'res.partner', 'hr.employee', 'mail.followers', 'mailing.contact'\n    ];\n\n    SampleServer.UnimplementedRouteError = UnimplementedRouteError;\n\n    // mockRegistry allows to register mock version of methods or routes,\n    // for all models:\n    //   SampleServer.mockRegistry.add('some_route', () => \"abcd\");\n    // for a specific model (e.g. 'res.partner'):\n    //   SampleServer.mockRegistry.add('res.partner/some_method', () => 23);\n    SampleServer.mockRegistry = new Registry();\n\n    export default SampleServer;\n", "/** @odoo-module alias=web.searchPanel **/\n\n    import { Model, useModel } from \"web.Model\";\n\n    const { Component, hooks } = owl;\n    const { useState, useSubEnv } = hooks;\n\n    /**\n     * Search panel\n     *\n     * Represent an extension of the search interface located on the left side of\n     * the view. It is divided in sections defined in a \"<searchpanel>\" node located\n     * inside of a \"<search>\" arch. Each section is represented by a list of different\n     * values (categories or ungrouped filters) or groups of values (grouped filters).\n     * Its state is directly affected by its model (@see SearchPanelModelExtension).\n     * @extends Component\n     */\n    class SearchPanel extends Component {\n        setup() {\n            useSubEnv({ searchModel: this.props.searchModel });\n\n            this.state = useState({\n                active: {},\n                expanded: {},\n            });\n            this.model = useModel(\"searchModel\");\n            this.scrollTop = 0;\n            this.hasImportedState = false;\n\n            this.importState(this.props.importedState);\n        }\n\n        async willStart() {\n            this._expandDefaultValue();\n            this._updateActiveValues();\n        }\n\n        mounted() {\n            this._updateGroupHeadersChecked();\n            if (this.hasImportedState) {\n                this.el.scroll({ top: this.scrollTop });\n            }\n        }\n\n        async willUpdateProps() {\n            this._updateActiveValues();\n        }\n\n        //---------------------------------------------------------------------\n        // Getters\n        //---------------------------------------------------------------------\n\n        get sections() {\n            return this.model.get(\"sections\", s => !s.empty);\n        }\n\n        //---------------------------------------------------------------------\n        // Public\n        //---------------------------------------------------------------------\n\n        exportState() {\n            const exported = {\n                expanded: this.state.expanded,\n                scrollTop: this.el.scrollTop,\n            };\n            return JSON.stringify(exported);\n        }\n\n        importState(stringifiedState) {\n            this.hasImportedState = Boolean(stringifiedState);\n            if (this.hasImportedState) {\n                const state = JSON.parse(stringifiedState);\n                this.state.expanded = state.expanded;\n                this.scrollTop = state.scrollTop;\n            }\n        }\n\n        //---------------------------------------------------------------------\n        // Private\n        //---------------------------------------------------------------------\n\n        /**\n         * Expands category values holding the default value of a category.\n         * @private\n         */\n        _expandDefaultValue() {\n            if (this.hasImportedState) {\n                return;\n            }\n            const categories = this.model.get(\"sections\", s => s.type === \"category\");\n            for (const category of categories) {\n                this.state.expanded[category.id] = {};\n                if (category.activeValueId) {\n                    const ancestorIds = this._getAncestorValueIds(category, category.activeValueId);\n                    for (const ancestorId of ancestorIds) {\n                        this.state.expanded[category.id][ancestorId] = true;\n                    }\n                }\n            }\n        }\n\n        /**\n         * @private\n         * @param {Object} category\n         * @param {number} categoryValueId\n         * @returns {number[]} list of ids of the ancestors of the given value in\n         *   the given category.\n         */\n        _getAncestorValueIds(category, categoryValueId) {\n            const { parentId } = category.values.get(categoryValueId);\n            return parentId ? [...this._getAncestorValueIds(category, parentId), parentId] : [];\n        }\n\n        /**\n         * Prevent unnecessary calls to the model by ensuring a different category\n         * is clicked.\n         * @private\n         * @param {Object} category\n         * @param {Object} value\n         */\n        async _toggleCategory(category, value) {\n            if (value.childrenIds.length) {\n                const categoryState = this.state.expanded[category.id];\n                if (categoryState[value.id] && category.activeValueId === value.id) {\n                    delete categoryState[value.id];\n                } else {\n                    categoryState[value.id] = true;\n                }\n            }\n            if (category.activeValueId !== value.id) {\n                this.state.active[category.id] = value.id;\n                this.model.dispatch(\"toggleCategoryValue\", category.id, value.id);\n            }\n        }\n\n        /**\n         * @private\n         * @param {number} filterId\n         * @param {{ values: Map<Object> }} group\n         */\n        _toggleFilterGroup(filterId, { values }) {\n            const valueIds = [];\n            const checked = [...values.values()].every(\n                (value) => this.state.active[filterId][value.id]\n            );\n            values.forEach(({ id }) => {\n                valueIds.push(id);\n                this.state.active[filterId][id] = !checked;\n            });\n            this.model.dispatch(\"toggleFilterValues\", filterId, valueIds, !checked);\n        }\n\n        /**\n         * @private\n         * @param {number} filterId\n         * @param {Object} [group]\n         * @param {number} valueId\n         * @param {MouseEvent} ev\n         */\n        _toggleFilterValue(filterId, valueId, { currentTarget }) {\n            this.state.active[filterId][valueId] = currentTarget.checked;\n            this._updateGroupHeadersChecked();\n            this.model.dispatch(\"toggleFilterValues\", filterId, [valueId]);\n        }\n\n        _updateActiveValues() {\n            for (const section of this.model.get(\"sections\")) {\n                if (section.type === \"category\") {\n                    this.state.active[section.id] = section.activeValueId;\n                } else {\n                    this.state.active[section.id] = {};\n                    if (section.groups) {\n                        for (const group of section.groups.values()) {\n                            for (const value of group.values.values()) {\n                                this.state.active[section.id][value.id] = value.checked;\n                            }\n                        }\n                    }\n                    if (section && section.values) {\n                        for (const value of section.values.values()) {\n                            this.state.active[section.id][value.id] = value.checked;\n                        }\n                    }\n                }\n            }\n        }\n\n        /**\n         * Updates the \"checked\" or \"indeterminate\" state of each of the group\n         * headers according to the state of their values.\n         * @private\n         */\n        _updateGroupHeadersChecked() {\n            const groups = this.el.querySelectorAll(\":scope .o_search_panel_filter_group\");\n            for (const group of groups) {\n                const header = group.querySelector(\":scope .o_search_panel_group_header input\");\n                const vals = [...group.querySelectorAll(\":scope .o_search_panel_filter_value input\")];\n                header.checked = false;\n                header.indeterminate = false;\n                if (vals.every((v) => v.checked)) {\n                    header.checked = true;\n                } else if (vals.some((v) => v.checked)) {\n                    header.indeterminate = true;\n                }\n            }\n        }\n    }\n    SearchPanel.modelExtension = \"SearchPanel\";\n\n    SearchPanel.props = {\n        className: { type: String, optional: 1 },\n        importedState: { type: String, optional: 1 },\n        searchModel: Model,\n    };\n    SearchPanel.template = \"web.Legacy.SearchPanel\";\n\n    export default SearchPanel;\n", "/** @odoo-module alias=web.searchPanelModelExtension **/\n\n\n    import ActionModel from \"web.ActionModel\";\n    import { sortBy } from \"web.utils\";\n    import Domain from \"web.Domain\";\n    import pyUtils from \"web.py_utils\";\n\n    // DefaultViewTypes is the list of view types for which the searchpanel is\n    // present by default (if not explicitly stated in the \"view_types\" attribute\n    // in the arch).\n    const DEFAULT_VIEW_TYPES = [\"kanban\", \"tree\"];\n    const DEFAULT_LIMIT = 200;\n    let nextSectionId = 1;\n\n    /**\n     * @param {Filter} filter\n     * @returns {boolean}\n     */\n    function hasDomain(filter) {\n        return filter.domain !== \"[]\";\n    }\n\n    /**\n     * @param {Section} section\n     * @returns {boolean}\n     */\n    function hasValues({ errorMsg, groups, type, values }) {\n        if (errorMsg) {\n            return true;\n        } else if (groups) {\n            return [...groups.values()].some((g) => g.values.size);\n        } else if (type === \"category\") {\n            return values && values.size > 1; // false item ignored\n        } else {\n            return values && values.size > 0;\n        }\n    }\n\n    /**\n     * Returns a serialised array of the given map with its values being the\n     * shallow copies of the original values.\n     * @param {Map<any, Object>} map\n     * @return {Array[]}\n     */\n    function serialiseMap(map) {\n        return [...map].map(([key, val]) => [key, Object.assign({}, val)]);\n    }\n\n    /**\n     * @typedef Section\n     * @prop {string} color\n     * @prop {string} description\n     * @prop {boolean} enableCounters\n     * @prop {boolean} expand\n     * @prop {string} fieldName\n     * @prop {string} icon\n     * @prop {number} id\n     * @prop {number} index\n     * @prop {number} limit\n     * @prop {string} type\n     */\n\n    /**\n     * @typedef {Section} Category\n     * @prop {boolean} hierarchize\n     */\n\n    /**\n     * @typedef {Section} Filter\n     * @prop {string} domain\n     * @prop {string} groupBy\n     */\n\n    /**\n     * @function sectionPredicate\n     * @param {Section} section\n     * @returns {boolean}\n     */\n\n    /**\n     * @property {{ sections: Map<number, Section> }} state\n     * @extends ActionModel.Extension\n     */\n    class SearchPanelModelExtension extends ActionModel.Extension {\n        constructor() {\n            super(...arguments);\n\n            this.categoriesToLoad = [];\n            this.defaultValues = {};\n            this.filtersToLoad = [];\n            this.initialStateImport = false;\n            this.searchDomain = [];\n            for (const key in this.config.context) {\n                const match = /^searchpanel_default_(.*)$/.exec(key);\n                if (match) {\n                    this.defaultValues[match[1]] = this.config.context[key];\n                }\n            }\n        }\n\n        //---------------------------------------------------------------------\n        // Public\n        //---------------------------------------------------------------------\n\n        /**\n         * @override\n         */\n        async callLoad(params) {\n            const searchDomain = this._getExternalDomain();\n            params.searchDomainChanged = (\n                JSON.stringify(this.searchDomain) !== JSON.stringify(searchDomain)\n            );\n            if (!this.shouldLoad && !this.initialStateImport) {\n                const isFetchable = (section) => section.enableCounters ||\n                    (params.searchDomainChanged && !section.expand);\n                this.categoriesToLoad = this.categories.filter(isFetchable);\n                this.filtersToLoad = this.filters.filter(isFetchable);\n                this.shouldLoad = params.searchDomainChanged ||\n                    Boolean(this.categoriesToLoad.length + this.filtersToLoad.length);\n            }\n            this.searchDomain = searchDomain;\n            this.initialStateImport = false;\n            await super.callLoad(params);\n        }\n\n        /**\n         * @override\n         */\n        exportState() {\n            const state = Object.assign({}, super.exportState());\n            state.sections = serialiseMap(state.sections);\n            for (const [id, section] of state.sections) {\n                section.values = serialiseMap(section.values);\n                if (section.groups) {\n                    section.groups = serialiseMap(section.groups);\n                    for (const [id, group] of section.groups) {\n                        group.values = serialiseMap(group.values);\n                    }\n                }\n            }\n            return state;\n        }\n\n        /**\n         * @override\n         * @returns {any}\n         */\n        get(property, ...args) {\n            switch (property) {\n                case \"domain\": return this.getDomain();\n                case \"sections\": return this.getSections(...args);\n            }\n        }\n\n        /**\n         * @override\n         */\n        importState(importedState) {\n            this.initialStateImport = false;\n            super.importState(...arguments);\n            if (importedState) {\n                this.state.sections = new Map(this.state.sections);\n                for (const section of this.state.sections.values()) {\n                    section.values = new Map(section.values);\n                    if ([...section.values.keys()].some(e => e !== false)) {\n                        this.initialStateImport = true;\n                    }\n                    if (section.groups) {\n                        section.groups = new Map(section.groups);\n                        for (const group of section.groups.values()) {\n                            group.values = new Map(group.values);\n                        }\n                    }\n                }\n            }\n        }\n\n        /**\n         * @override\n         */\n        async isReady() {\n            await this.sectionsPromise;\n        }\n\n        /**\n         * @override\n         */\n        async load(params) {\n            this.sectionsPromise = this._fetchSections(params.isInitialLoad);\n            if (this._shouldWaitForData(params)) {\n                await this.sectionsPromise;\n            }\n        }\n\n        /**\n         * @override\n         */\n        prepareState() {\n            Object.assign(this.state, { sections: new Map() });\n            this._createSectionsFromArch();\n        }\n\n        //---------------------------------------------------------------------\n        // Actions / Getters\n        //---------------------------------------------------------------------\n\n        /**\n         * Returns the concatenation of the category domain ad the filter\n         * domain.\n         * @returns {Array[]}\n         */\n        getDomain() {\n            return Domain.prototype.normalizeArray([\n                ...this._getCategoryDomain(),\n                ...this._getFilterDomain(),\n            ]);\n        }\n\n        /**\n         * Returns a sorted list of a copy of all sections. This list can be\n         * filtered by a given predicate.\n         * @param {sectionPredicate} [predicate] used to determine\n         *      which subsets of sections is wanted\n         * @returns {Section[]}\n         */\n        getSections(predicate) {\n            let sections = [...this.state.sections.values()].map((section) =>\n                Object.assign({}, section, { empty: !hasValues(section) })\n            );\n            if (predicate) {\n                sections = sections.filter(predicate);\n            }\n            return sections.sort((s1, s2) => s1.index - s2.index);\n        }\n\n        /**\n         * Sets the active value id of a given category.\n         * @param {number} sectionId\n         * @param {number} valueId\n         */\n        toggleCategoryValue(sectionId, valueId) {\n            const category = this.state.sections.get(sectionId);\n            category.activeValueId = valueId;\n        }\n\n        /**\n         * Toggles a the filter value of a given section. The value will be set\n         * to \"forceTo\" if provided, else it will be its own opposed value.\n         * @param {number} sectionId\n         * @param {number[]} valueIds\n         * @param {boolean} [forceTo=null]\n         */\n        toggleFilterValues(sectionId, valueIds, forceTo = null) {\n            const section = this.state.sections.get(sectionId);\n            for (const valueId of valueIds) {\n                const value = section.values.get(valueId);\n                value.checked = forceTo === null ? !value.checked : forceTo;\n            }\n        }\n\n        //---------------------------------------------------------------------\n        // Internal getters\n        //---------------------------------------------------------------------\n\n        /**\n         * Shorthand access to sections of type \"category\".\n         * @returns {Category[]}\n         */\n        get categories() {\n            return [...this.state.sections.values()].filter(s => s.type === \"category\");\n        }\n\n        /**\n         * Shorthand access to sections of type \"filter\".\n         * @returns {Filter[]}\n         */\n        get filters() {\n            return [...this.state.sections.values()].filter(s => s.type === \"filter\");\n        }\n\n        //---------------------------------------------------------------------\n        // Private\n        //---------------------------------------------------------------------\n\n        /**\n         * Sets active values for each filter (coming from context). This needs\n         * to be done only once at initialization.\n         * @private\n         */\n        _applyDefaultFilterValues() {\n            for (const { fieldName, values } of this.filters) {\n                const defaultValues = this.defaultValues[fieldName] || [];\n                for (const valueId of defaultValues) {\n                    const value = values.get(valueId);\n                    if (value) {\n                        value.checked = true;\n                    }\n                }\n            }\n        }\n\n        /**\n         * @private\n         * @param {string} sectionId\n         * @param {Object} result\n         */\n        _createCategoryTree(sectionId, result) {\n            const category = this.state.sections.get(sectionId);\n\n            let { error_msg, parent_field: parentField, values, } = result;\n            if (error_msg) {\n                category.errorMsg = error_msg;\n                values = [];\n            }\n            if (category.hierarchize) {\n                category.parentField = parentField;\n            }\n            for (const value of values) {\n                category.values.set(\n                    value.id,\n                    Object.assign({}, value, {\n                        childrenIds: [],\n                        parentId: value[parentField] || false,\n                    })\n                );\n            }\n            for (const value of values) {\n                const { parentId } = category.values.get(value.id);\n                if (parentId && category.values.has(parentId)) {\n                    category.values.get(parentId).childrenIds.push(value.id);\n                }\n            }\n            // collect rootIds\n            category.rootIds = [false];\n            for (const value of values) {\n                const { parentId } = category.values.get(value.id);\n                if (!parentId) {\n                    category.rootIds.push(value.id);\n                }\n            }\n            // Set active value from context\n            const valueIds = [false, ...values.map((val) => val.id)];\n            this._ensureCategoryValue(category, valueIds);\n        }\n\n        /**\n         * @private\n         * @param {string} sectionId\n         * @param {Object} result\n         */\n        _createFilterTree(sectionId, result) {\n            const filter = this.state.sections.get(sectionId);\n\n            let { error_msg, values, } = result;\n            if (error_msg) {\n                filter.errorMsg = error_msg;\n                values = [];\n            }\n\n            // restore checked property\n            values.forEach((value) => {\n                const oldValue = filter.values.get(value.id);\n                value.checked = oldValue ? oldValue.checked : false;\n            });\n\n            filter.values = new Map();\n            const groupIds = [];\n            if (filter.groupBy) {\n                const groups = new Map();\n                for (const value of values) {\n                    const groupId = value.group_id;\n                    if (!groups.has(groupId)) {\n                        if (groupId) {\n                            groupIds.push(groupId);\n                        }\n                        groups.set(groupId, {\n                            id: groupId,\n                            name: value.group_name,\n                            values: new Map(),\n                            tooltip: value.group_tooltip,\n                            sequence: value.group_sequence,\n                            hex_color: value.group_hex_color,\n                        });\n                        // restore former checked state\n                        const oldGroup =\n                            filter.groups && filter.groups.get(groupId);\n                        groups.get(groupId).state =\n                            (oldGroup && oldGroup.state) || false;\n                    }\n                    groups.get(groupId).values.set(value.id, value);\n                }\n                filter.groups = groups;\n                filter.sortedGroupIds = sortBy(\n                    groupIds,\n                    (id) => groups.get(id).sequence || groups.get(id).name\n                );\n                for (const group of filter.groups.values()) {\n                    for (const [valueId, value] of group.values) {\n                        filter.values.set(valueId, value);\n                    }\n                }\n            } else {\n                for (const value of values) {\n                    filter.values.set(value.id, value);\n                }\n            }\n        }\n\n        /**\n         * Adds a section in this.state.sections for each visible field found\n         * in the search panel arch.\n         * @private\n         */\n        _createSectionsFromArch() {\n            let hasCategoryWithCounters = false;\n            let hasFilterWithDomain = false;\n            this.config.archNodes.forEach(({ attrs, tag }, index) => {\n                if (tag !== \"field\" || attrs.invisible === \"1\") {\n                    return;\n                }\n                const type = attrs.select === \"multi\" ? \"filter\" : \"category\";\n                const section = {\n                    color: attrs.color,\n                    description:\n                        attrs.string || this.config.fields[attrs.name].string,\n                    enableCounters: !!pyUtils.py_eval(\n                        attrs.enable_counters || \"0\"\n                    ),\n                    expand: !!pyUtils.py_eval(attrs.expand || \"0\"),\n                    fieldName: attrs.name,\n                    icon: attrs.icon,\n                    id: nextSectionId++,\n                    index,\n                    limit: pyUtils.py_eval(attrs.limit || String(DEFAULT_LIMIT)),\n                    type,\n                    values: new Map(),\n                };\n                if (type === \"category\") {\n                    section.activeValueId = this.defaultValues[attrs.name];\n                    section.icon = section.icon || \"fa-folder\";\n                    section.hierarchize = !!pyUtils.py_eval(\n                        attrs.hierarchize || \"1\"\n                    );\n                    section.values.set(false, {\n                        childrenIds: [],\n                        display_name: this.env._t(\"All\"),\n                        id: false,\n                        bold: true,\n                        parentId: false,\n                    });\n                    hasCategoryWithCounters = hasCategoryWithCounters || section.enableCounters;\n                } else {\n                    section.domain = attrs.domain || \"[]\";\n                    section.groupBy = attrs.groupby;\n                    section.icon = section.icon || \"fa-filter\";\n                    hasFilterWithDomain = hasFilterWithDomain || section.domain !== \"[]\";\n                }\n                this.state.sections.set(section.id, section);\n            });\n            /**\n             * Category counters are automatically disabled if a filter domain is found\n             * to avoid inconsistencies with the counters. The underlying problem could\n             * actually be solved by reworking the search panel and the way the\n             * counters are computed, though this is not the current priority\n             * considering the time it would take, hence this quick \"fix\".\n             */\n            if (hasCategoryWithCounters && hasFilterWithDomain) {\n                // If incompatibilities are found -> disables all category counters\n                for (const category of this.categories) {\n                    category.enableCounters = false;\n                }\n                // ... and triggers a warning\n                console.warn(\n                    \"Warning: categories with counters are incompatible with filters having a domain attribute.\",\n                    \"All category counters have been disabled to avoid inconsistencies.\",\n                );\n            }\n        }\n\n        /**\n         * Ensures that the active value of a category is one of its own\n         * existing values.\n         * @private\n         * @param {Category} category\n         * @param {number[]} valueIds\n         */\n        _ensureCategoryValue(category, valueIds) {\n            if (!valueIds.includes(category.activeValueId)) {\n                category.activeValueId = valueIds[0];\n            }\n        }\n\n        /**\n         * Fetches values for each category at startup. At reload a category is\n         * only fetched if needed.\n         * @private\n         * @param {Category[]} categories\n         * @returns {Promise} resolved when all categories have been fetched\n         */\n        async _fetchCategories(categories) {\n            const filterDomain = this._getFilterDomain();\n            await Promise.all(categories.map(async (category) => {\n                const result = await this.env.services.rpc({\n                    method: \"search_panel_select_range\",\n                    model: this.config.modelName,\n                    args: [category.fieldName],\n                    kwargs: {\n                        category_domain: this._getCategoryDomain(category.id),\n                        enable_counters: category.enableCounters,\n                        expand: category.expand,\n                        filter_domain: filterDomain,\n                        hierarchize: category.hierarchize,\n                        limit: category.limit,\n                        search_domain: this.searchDomain,\n                    },\n                    params: {\n                        context: this.config.context,\n                    },\n                });\n                this._createCategoryTree(category.id, result);\n            }));\n        }\n\n        /**\n         * Fetches values for each filter. This is done at startup and at each\n         * reload if needed.\n         * @private\n         * @param {Filter[]} filters\n         * @returns {Promise} resolved when all filters have been fetched\n         */\n        async _fetchFilters(filters) {\n            const evalContext = {};\n            for (const category of this.categories) {\n                evalContext[category.fieldName] = category.activeValueId;\n            }\n            const categoryDomain = this._getCategoryDomain();\n            await Promise.all(filters.map(async (filter) => {\n                const result = await this.env.services.rpc({\n                    method: \"search_panel_select_multi_range\",\n                    model: this.config.modelName,\n                    args: [filter.fieldName],\n                    kwargs: {\n                        category_domain: categoryDomain,\n                        comodel_domain: Domain.prototype.stringToArray(\n                            filter.domain,\n                            evalContext\n                        ),\n                        enable_counters: filter.enableCounters,\n                        filter_domain: this._getFilterDomain(filter.id),\n                        expand: filter.expand,\n                        group_by: filter.groupBy || false,\n                        group_domain: this._getGroupDomain(filter),\n                        limit: filter.limit,\n                        search_domain: this.searchDomain,\n                    },\n                    params: {\n                        context: this.config.context,\n                    },\n                });\n                this._createFilterTree(filter.id, result);\n            }));\n        }\n\n        /**\n         * @private\n         * @param {boolean} isInitialLoad\n         * @returns {Promise}\n         */\n        async _fetchSections(isInitialLoad) {\n            await this._fetchCategories(\n                isInitialLoad ? this.categories : this.categoriesToLoad\n            );\n            await this._fetchFilters(\n                isInitialLoad ? this.filters : this.filtersToLoad\n            );\n            if (isInitialLoad) {\n                this._applyDefaultFilterValues();\n            }\n        }\n\n        /**\n         * Computes and returns the domain based on the current active\n         * categories. If \"excludedCategoryId\" is provided, the category with\n         * that id is not taken into account in the domain computation.\n         * @private\n         * @param {string} [excludedCategoryId]\n         * @returns {Array[]}\n         */\n        _getCategoryDomain(excludedCategoryId) {\n            const domain = [];\n            for (const category of this.categories) {\n                if (\n                    category.id === excludedCategoryId ||\n                    !category.activeValueId\n                ) {\n                    continue;\n                }\n                const field = this.config.fields[category.fieldName];\n                const operator =\n                    field.type === \"many2one\" && category.parentField ? \"child_of\" : \"=\";\n                domain.push([\n                    category.fieldName,\n                    operator,\n                    category.activeValueId,\n                ]);\n            }\n            return domain;\n        }\n\n        /**\n         * Returns the domain retrieved from the other model extensions.\n         * @private\n         * @returns {Array[]}\n         */\n        _getExternalDomain() {\n            const domains = this.config.get(\"domain\");\n            const domain = domains.reduce((acc, dom) => [...acc, ...dom], []);\n            return Domain.prototype.normalizeArray(domain);\n        }\n\n        /**\n         * Computes and returns the domain based on the current checked\n         * filters. The values of a single filter are combined using a simple\n         * rule: checked values within a same group are combined with an \"OR\"\n         * operator (this is expressed as single condition using a list) and\n         * groups are combined with an \"AND\" operator (expressed by\n         * concatenation of conditions).\n         * If a filter has no group, its checked values are implicitely\n         * considered as forming a group (and grouped using an \"OR\").\n         * If excludedFilterId is provided, the filter with that id is not\n         * taken into account in the domain computation.\n         * @private\n         * @param {string} [excludedFilterId]\n         * @returns {Array[]}\n         */\n        _getFilterDomain(excludedFilterId) {\n            const domain = [];\n\n            function addCondition(fieldName, valueMap) {\n                const ids = [];\n                for (const [valueId, value] of valueMap) {\n                    if (value.checked) {\n                        ids.push(valueId);\n                    }\n                }\n                if (ids.length) {\n                    domain.push([fieldName, \"in\", ids]);\n                }\n            }\n\n            for (const filter of this.filters) {\n                if (filter.id === excludedFilterId) {\n                    continue;\n                }\n                const { fieldName, groups, values } = filter;\n                if (groups) {\n                    for (const group of groups.values()) {\n                        addCondition(fieldName, group.values);\n                    }\n                } else {\n                    addCondition(fieldName, values);\n                }\n            }\n            return domain;\n        }\n\n        /**\n         * Returns a domain or an object of domains used to complement\n         * the filter domains to accurately describe the constrains on\n         * records when computing record counts associated to the filter\n         * values (if a groupBy is provided). The idea is that the checked\n         * values within a group should not impact the counts for the other\n         * values in the same group.\n         * @private\n         * @param {string} filter\n         * @returns {Object<string, Array[]> | Array[] | null}\n         */\n        _getGroupDomain(filter) {\n            const { fieldName, groups, enableCounters } = filter;\n            const { type: fieldType } = this.config.fields[fieldName];\n\n            if (!enableCounters || !groups) {\n                return {\n                    many2one: [],\n                    many2many: {},\n                }[fieldType];\n            }\n            let groupDomain = null;\n            if (fieldType === \"many2one\") {\n                for (const group of groups.values()) {\n                    const valueIds = [];\n                    let active = false;\n                    for (const [valueId, value] of group.values) {\n                        const { checked } = value;\n                        valueIds.push(valueId);\n                        if (checked) {\n                            active = true;\n                        }\n                    }\n                    if (active) {\n                        if (groupDomain) {\n                            groupDomain = [[0, \"=\", 1]];\n                            break;\n                        } else {\n                            groupDomain = [[fieldName, \"in\", valueIds]];\n                        }\n                    }\n                }\n            } else if (fieldType === \"many2many\") {\n                const checkedValueIds = new Map();\n                groups.forEach(({ values }, groupId) => {\n                    values.forEach(({ checked }, valueId) => {\n                        if (checked) {\n                            if (!checkedValueIds.has(groupId)) {\n                                checkedValueIds.set(groupId, []);\n                            }\n                            checkedValueIds.get(groupId).push(valueId);\n                        }\n                    });\n                });\n                groupDomain = {};\n                for (const [gId, ids] of checkedValueIds.entries()) {\n                    for (const groupId of groups.keys()) {\n                        if (gId !== groupId) {\n                            const key = JSON.stringify(groupId);\n                            if (!groupDomain[key]) {\n                                groupDomain[key] = [];\n                            }\n                            groupDomain[key].push([fieldName, \"in\", ids]);\n                        }\n                    }\n                }\n            }\n            return groupDomain;\n        }\n\n        /**\n         * Returns whether the query informations should be considered as ready\n         * before or after having (re-)fetched the sections data.\n         * @private\n         * @param {Object} params\n         * @param {boolean} params.isInitialLoad\n         * @param {boolean} params.searchDomainChanged\n         * @returns {boolean}\n         */\n        _shouldWaitForData({ isInitialLoad, searchDomainChanged }) {\n            if (isInitialLoad && Object.keys(this.defaultValues).length) {\n                // Default values need to be checked on initial load\n                return true;\n            }\n            if (this.categories.length && this.filters.some(hasDomain)) {\n                // Selected category value might affect the filter values\n                return true;\n            }\n            if (!this.searchDomain.length) {\n                // No search domain -> no need to check for expand\n                return false;\n            }\n            return [...this.state.sections.values()].some(\n                (section) => !section.expand && searchDomainChanged\n            );\n        }\n\n        //---------------------------------------------------------------------\n        // Static\n        //---------------------------------------------------------------------\n\n        /**\n         * @override\n         * @returns {{ attrs: Object, children: Object[] } | null}\n         */\n        static extractArchInfo(archs, viewType) {\n            const { children } = archs.search;\n            const spNode = children.find(c => c.tag === \"searchpanel\");\n            const isObject = (obj) => typeof obj === \"object\" && obj !== null;\n            if (spNode) {\n                const actualType = viewType === \"list\" ? \"tree\" : viewType;\n                const { view_types } = spNode.attrs;\n                const viewTypes = view_types ?\n                    view_types.split(\",\") :\n                    DEFAULT_VIEW_TYPES;\n                if (viewTypes.includes(actualType)) {\n                    return {\n                        attrs: spNode.attrs,\n                        children: spNode.children.filter(isObject),\n                    };\n                }\n            }\n            return null;\n        }\n    }\n    SearchPanelModelExtension.layer = 1;\n\n    ActionModel.registry.add(\"SearchPanel\", SearchPanelModelExtension, 30);\n\n    export default SearchPanelModelExtension;\n", "odoo.define('web.select_create_controllers_registry', function (require) {\n\"use strict\";\n\nreturn {};\n\n});\n\nodoo.define('web._select_create_controllers_registry', function (require) {\n\"use strict\";\n\nvar KanbanController = require('web.KanbanController');\nvar ListController = require('web.ListController');\nvar select_create_controllers_registry = require('web.select_create_controllers_registry');\n\nvar SelectCreateKanbanController = KanbanController.extend({\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Override to select the clicked record instead of opening it\n     *\n     * @override\n     * @private\n     */\n    _onOpenRecord: function (ev) {\n        var selectedRecord = this.model.get(ev.data.id);\n        this.trigger_up('select_record', {\n            id: selectedRecord.res_id,\n            display_name: selectedRecord.data.display_name,\n        });\n    },\n});\n\nvar SelectCreateListController = ListController.extend({\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Override to select the clicked record instead of opening it\n     *\n     * @override\n     * @private\n     */\n    _onOpenRecord: function (ev) {\n        var selectedRecord = this.model.get(ev.data.id);\n        this.trigger_up('select_record', {\n            id: selectedRecord.res_id,\n            display_name: selectedRecord.data.display_name,\n        });\n    },\n});\n\n_.extend(select_create_controllers_registry, {\n    SelectCreateListController: SelectCreateListController,\n    SelectCreateKanbanController: SelectCreateKanbanController,\n});\n\n});\n", "/** @odoo-module alias=web.signature_dialog **/\n\nimport core from 'web.core';\nimport Dialog from 'web.Dialog';\nimport { NameAndSignature } from 'web.name_and_signature';\n\nvar _t = core._t;\n\n// The goal of this dialog is to ask the user a signature request.\n// It uses @see SignNameAndSignature for the name and signature fields.\nvar SignatureDialog = Dialog.extend({\n    template: 'web.signature_dialog',\n    xmlDependencies: Dialog.prototype.xmlDependencies.concat(\n        ['/web/static/src/legacy/xml/name_and_signature.xml']\n    ),\n    custom_events: {\n        'signature_changed': '_onChangeSignature',\n    },\n\n    /**\n     * @constructor\n     * @param {Widget} parent\n     * @param {Object} options\n     * @param {string} [options.title='Adopt Your Signature'] - modal title\n     * @param {string} [options.size='medium'] - modal size\n     * @param {Object} [options.nameAndSignatureOptions={}] - options for\n     *  @see NameAndSignature.init()\n     */\n    init: function (parent, options) {\n        var self = this;\n        options = options || {};\n\n        options.title = options.title || _t(\"Adopt Your Signature\");\n        options.size = options.size || 'medium';\n        options.technical = false;\n\n        if (!options.buttons) {\n            options.buttons = [];\n            options.buttons.push({text: _t(\"Adopt and Sign\"), classes: \"btn-primary\", disabled: true, click: function (e) {\n                self._onConfirm();\n            }});\n            options.buttons.push({text: _t(\"Cancel\"), close: true});\n        }\n\n        this._super(parent, options);\n\n        this.nameAndSignature = new NameAndSignature(this, options.nameAndSignatureOptions);\n    },\n    /**\n     * Start the nameAndSignature widget and wait for it.\n     *\n     * @override\n     */\n    willStart: function () {\n        return Promise.all([\n            this.nameAndSignature.appendTo($('<div>')),\n            this._super.apply(this, arguments)\n        ]);\n    },\n    /**\n     * Initialize the name and signature widget when the modal is opened.\n     *\n     * @override\n     */\n    start: function () {\n        var self = this;\n        this.$primaryButton = this.$footer.find('.btn-primary');\n\n        this.opened().then(function () {\n            self.$('.o_web_sign_name_and_signature').replaceWith(self.nameAndSignature.$el);\n            // initialize the signature area\n            self.nameAndSignature.resetSignature();\n        });\n\n        return this._super.apply(this, arguments);\n    },\n\n    //----------------------------------------------------------------------\n    // Public\n    //----------------------------------------------------------------------\n\n    /**\n     * Returns whether the drawing area is currently empty.\n     *\n     * @see NameAndSignature.isSignatureEmpty()\n     * @returns {boolean} Whether the drawing area is currently empty.\n     */\n    isSignatureEmpty: function () {\n        return this.nameAndSignature.isSignatureEmpty();\n    },\n\n    //----------------------------------------------------------------------\n    // Handlers\n    //----------------------------------------------------------------------\n\n    /**\n     * Toggles the submit button depending on the signature state.\n     *\n     * @private\n     */\n    _onChangeSignature: function () {\n        var isEmpty = this.nameAndSignature.isSignatureEmpty();\n        this.$primaryButton.prop('disabled', isEmpty);\n    },\n    /**\n     * Upload the signature image when confirm.\n     *\n     * @private\n     */\n    _onConfirm: function (fct) {\n        this.trigger_up('upload_signature', {\n            name: this.nameAndSignature.getName(),\n            signatureImage: this.nameAndSignature.getSignatureImage(),\n        });\n    },\n});\n\nexport default SignatureDialog;\n", "/** @odoo-module alias=web.StandaloneFieldManagerMixin **/\n\nimport FieldManagerMixin from 'web.FieldManagerMixin';\n\n/**\n * The StandaloneFieldManagerMixin is a mixin, designed to be used by a widget\n * that instanciates its own field widgets.\n *\n * @mixin\n * @name StandaloneFieldManagerMixin\n * @mixes FieldManagerMixin\n * @property {Function} _confirmChange\n * @property {Function} _registerWidget\n */\nvar StandaloneFieldManagerMixin = _.extend({}, FieldManagerMixin, {\n\n    /**\n     * @override\n     */\n    init: function () {\n        FieldManagerMixin.init.apply(this, arguments);\n\n        // registeredWidgets is a dict of all field widgets used by the widget\n        this.registeredWidgets = {};\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * This method will be called whenever a field value has changed (and has\n     * been confirmed by the model).\n     *\n     * @private\n     * @param {string} id basicModel Id for the changed record\n     * @param {string[]} fields the fields (names) that have been changed\n     * @param {OdooEvent} event the event that triggered the change\n     * @returns {Promise}\n     */\n    _confirmChange: function (id, fields, event) {\n        var result = FieldManagerMixin._confirmChange.apply(this, arguments);\n        var record = this.model.get(id);\n        _.each(this.registeredWidgets[id], function (widget, fieldName) {\n            if (_.contains(fields, fieldName)) {\n                widget.reset(record, event);\n            }\n        });\n        return result;\n    },\n\n    _registerWidget: function (datapointID, fieldName, widget) {\n        if (!this.registeredWidgets[datapointID]) {\n            this.registeredWidgets[datapointID] = {};\n        }\n        this.registeredWidgets[datapointID][fieldName] = widget;\n    },\n});\n\nexport default StandaloneFieldManagerMixin;\n", "/** @odoo-module alias=web.view_dialogs **/\n\nimport config from 'web.config';\nimport core from 'web.core';\nimport Dialog from 'web.Dialog';\nimport dom from 'web.dom';\nimport view_registry from 'web.view_registry';\nimport select_create_controllers_registry from 'web.select_create_controllers_registry';\n\nvar _t = core._t;\n\n/**\n * Class with everything which is common between FormViewDialog and\n * SelectCreateDialog.\n */\nvar ViewDialog = Dialog.extend({\n    custom_events: _.extend({}, Dialog.prototype.custom_events, {\n        push_state: '_onPushState',\n    }),\n    /**\n     * @constructor\n     * @param {Widget} parent\n     * @param {options} [options]\n     * @param {string} [options.dialogClass=o_act_window]\n     * @param {string} [options.res_model] the model of the record(s) to open\n     * @param {any[]} [options.domain]\n     * @param {Object} [options.context]\n     */\n    init: function (parent, options) {\n        options = options || {};\n        options.fullscreen = config.device.isMobile;\n        options.dialogClass = options.dialogClass || '' + ' o_act_window';\n\n        this._super(parent, $.extend(true, {}, options));\n\n        this.res_model = options.res_model || null;\n        this.domain = options.domain || [];\n        this.context = options.context || {};\n        this.options = _.extend(this.options || {}, options || {});\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * We stop all push_state events from bubbling up.  It would be weird to\n     * change the url because a dialog opened.\n     *\n     * @param {OdooEvent} event\n     */\n    _onPushState: function (event) {\n        event.stopPropagation();\n    },\n});\n\n/**\n * Create and edit dialog (displays a form view record and leave once saved)\n */\nvar FormViewDialog = ViewDialog.extend({\n    /**\n     * @param {Widget} parent\n     * @param {Object} [options]\n     * @param {string} [options.parentID] the id of the parent record. It is\n     *   useful for situations such as a one2many opened in a form view dialog.\n     *   In that case, we want to be able to properly evaluate domains with the\n     *   'parent' key.\n     * @param {integer} [options.res_id] the id of the record to open\n     * @param {Object} [options.form_view_options] dict of options to pass to\n     *   the Form View @todo: make it work\n     * @param {Object} [options.fields_view] optional form fields_view\n     * @param {boolean} [options.readonly=false] only applicable when not in\n     *   creation mode\n     * @param {boolean} [options.deletable=false] whether or not the record can\n     *   be deleted\n     * @param {boolean} [options.editable=true] whether or not the record can\n     *   be edited\n     * @param {boolean} [options.disable_multiple_selection=false] set to true\n     *   to remove the possibility to create several records in a row\n     * @param {function} [options.on_saved] callback executed after saving a\n     *   record.  It will be called with the record data, and a boolean which\n     *   indicates if something was changed\n     * @param {function} [options.on_remove] callback executed when the user\n     *   clicks on the 'Remove' button\n     * @param {BasicModel} [options.model] if given, it will be used instead of\n     *  a new form view model\n     * @param {string} [options.recordID] if given, the model has to be given as\n     *   well, and in that case, it will be used without loading anything.\n     * @param {boolean} [options.shouldSaveLocally] if true, the view dialog\n     *   will save locally instead of actually saving (useful for one2manys)\n     * @param {function} [options._createContext] function to get context for name field\n     *   useful for many2many_tags widget where we want to removed default_name field\n     *   context.\n     */\n    init: function (parent, options) {\n        var self = this;\n        options = options || {};\n\n        this.res_id = options.res_id || null;\n        this.on_saved = options.on_saved || (function () {});\n        this.on_remove = options.on_remove || (function () {});\n        this.context = options.context;\n        this._createContext = options._createContext;\n        this.model = options.model;\n        this.parentID = options.parentID;\n        this.recordID = options.recordID;\n        this.shouldSaveLocally = options.shouldSaveLocally;\n        this.readonly = options.readonly;\n        this.deletable = options.deletable;\n        this.editable = options.editable;\n        this.disable_multiple_selection = options.disable_multiple_selection;\n        var oBtnRemove = 'o_btn_remove';\n\n        var multi_select = !_.isNumber(options.res_id) && !options.disable_multiple_selection;\n        var readonly = _.isNumber(options.res_id) && options.readonly;\n\n        if (!options.buttons) {\n            options.buttons = [{\n                text: options.close_text || (readonly ? _t(\"Close\") : _t(\"Discard\")),\n                classes: \"btn-secondary o_form_button_cancel\",\n                close: true,\n                click: function () {\n                    if (!readonly) {\n                        self.form_view.model.discardChanges(self.form_view.handle, {\n                            rollback: self.shouldSaveLocally,\n                        });\n                    }\n                },\n            }];\n\n            if (!readonly) {\n                options.buttons.unshift({\n                    text: options.save_text || (multi_select ? _t(\"Save & Close\") : _t(\"Save\")),\n                    classes: \"btn-primary\",\n                    click: function () {\n                        self._save().then(self.close.bind(self));\n                    }\n                });\n\n                if (multi_select) {\n                    options.buttons.splice(1, 0, {\n                        text: _t(\"Save & New\"),\n                        classes: \"btn-primary\",\n                        click: function () {\n                            self._save()\n                                .then(function () {\n                                    // reset default name field from context when Save & New is clicked, pass additional\n                                    // context so that when getContext is called additional context resets it\n                                    const additionalContext = self._createContext && self._createContext(false);\n                                    self.form_view.createRecord(self.parentID, additionalContext);\n                                })\n                                .then(function () {\n                                    if (!self.deletable) {\n                                        return;\n                                    }\n                                    self.deletable = false;\n                                    self.buttons = self.buttons.filter(function (button) {\n                                        return button.classes.split(' ').indexOf(oBtnRemove) < 0;\n                                    });\n                                    self.set_buttons(self.buttons);\n                                    self.set_title(_t(\"Create \") + _.str.strRight(self.title, _t(\"Open: \")));\n                                });\n                        },\n                    });\n                }\n\n                var multi = options.disable_multiple_selection;\n                if (!multi && this.deletable) {\n                    this._setRemoveButtonOption(options, oBtnRemove);\n                }\n            }\n        }\n        this._super(parent, options);\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Open the form view dialog.  It is necessarily asynchronous, but this\n     * method returns immediately.\n     *\n     * @returns {FormViewDialog} this instance\n     */\n    open: function () {\n        var self = this;\n        var _super = this._super.bind(this);\n        var FormView = view_registry.get('form');\n        var fields_view_def;\n        if (this.options.fields_view) {\n            fields_view_def = Promise.resolve(this.options.fields_view);\n        } else {\n            fields_view_def = this.loadFieldView(this.res_model, this.context, this.options.view_id, 'form');\n        }\n\n        fields_view_def.then(function (viewInfo) {\n            var refinedContext = _.pick(self.context, function (value, key) {\n                return key.indexOf('_view_ref') === -1;\n            });\n            var formview = new FormView(viewInfo, {\n                modelName: self.res_model,\n                context: refinedContext,\n                ids: self.res_id ? [self.res_id] : [],\n                currentId: self.res_id || undefined,\n                index: 0,\n                mode: self.res_id && self.options.readonly ? 'readonly' : 'edit',\n                footerToButtons: true,\n                default_buttons: false,\n                withControlPanel: false,\n                model: self.model,\n                parentID: self.parentID,\n                recordID: self.recordID,\n                isFromFormViewDialog: true,\n                editable: self.editable\n            });\n            return formview.getController(self);\n        }).then(function (formView) {\n            self.form_view = formView;\n            var fragment = document.createDocumentFragment();\n            if (self.recordID && self.shouldSaveLocally) {\n                self.model.save(self.recordID, {savePoint: true});\n            }\n            return self.form_view.appendTo(fragment)\n                .then(function () {\n                    self.opened().then(function () {\n                        var $buttons = $('<div>');\n                        self.form_view.renderButtons($buttons);\n                        if ($buttons.children().length) {\n                            self.$footer.empty().append($buttons.contents());\n                        }\n                        dom.append(self.$el, fragment, {\n                            callbacks: [{widget: self.form_view}],\n                            in_DOM: true,\n                        });\n                        self.form_view.updateButtons();\n                        self.trigger_up('dialog_form_loaded');\n                    });\n                    return _super();\n                });\n        });\n\n        return this;\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     */\n    _focusOnClose: function() {\n        var isFocusSet = false;\n        this.trigger_up('form_dialog_discarded', {\n            callback: function (isFocused) {\n                isFocusSet = isFocused;\n            },\n        });\n        return isFocusSet;\n    },\n\n    /**\n     * @private\n     */\n    _remove: function () {\n        return Promise.resolve(this.on_remove());\n    },\n\n    /**\n     * @private\n     * @returns {Promise}\n     */\n    _save: function () {\n        var self = this;\n        return this.form_view.saveRecord(this.form_view.handle, {\n            stayInEdit: true,\n            reload: false,\n            savePoint: this.shouldSaveLocally,\n            viewType: 'form',\n        }).then(function (changedFields) {\n            // record might have been changed by the save (e.g. if this was a new record, it has an\n            // id now), so don't re-use the copy obtained before the save\n            var record = self.form_view.model.get(self.form_view.handle);\n            return self.on_saved(record, !!changedFields.length);\n        });\n    },\n\n    /**\n     * Set the \"remove\" button into the options' buttons list\n     *\n     * @private\n     * @param {Object} options The options object to modify\n     * @param {string} btnClasses The classes for the remove button\n     */\n    _setRemoveButtonOption(options, btnClasses) {\n        const self = this;\n        options.buttons.push({\n            text: _t(\"Remove\"),\n            classes: 'btn-secondary ' + btnClasses,\n            click: function() {\n                self._remove().then(self.close.bind(self));\n            }\n        });\n    },\n});\n\n/**\n * Search dialog (displays a list of records and permits to create a new one by switching to a form view)\n */\nvar SelectCreateDialog = ViewDialog.extend({\n    custom_events: _.extend({}, ViewDialog.prototype.custom_events, {\n        select_record: function (event) {\n            if (!this.options.readonly) {\n                this.on_selected([event.data]);\n                this.close();\n            }\n        },\n        selection_changed: function (event) {\n            event.stopPropagation();\n            this.$footer.find(\".o_select_button\").prop('disabled', !event.data.selection.length);\n        },\n    }),\n\n    /**\n     * options:\n     * - initial_ids\n     * - initial_view: form or search (default search)\n     * - list_view_options: dict of options to pass to the List View\n     * - on_selected: optional callback to execute when records are selected\n     * - disable_multiple_selection: true to allow create/select multiple records\n     * - dynamicFilters: filters to add to the searchview\n     */\n    init: function () {\n        this._super.apply(this, arguments);\n        _.defaults(this.options, { initial_view: 'search' });\n        this.on_selected = this.options.on_selected || (function () {});\n        this.on_closed = this.options.on_closed || (function () {});\n        this.initialIDs = this.options.initial_ids;\n        this.viewType = 'list';\n    },\n\n    open: function () {\n        if (this.options.initial_view !== \"search\") {\n            return this.create_edit_record();\n        }\n        var self = this;\n        var _super = this._super.bind(this);\n        var viewRefID = this.viewType === 'kanban' ?\n            (this.options.kanban_view_ref && JSON.parse(this.options.kanban_view_ref) || false) : false;\n        const searchviewId = this.options.searchViewId || false;\n        return this.loadViews(this.res_model, this.context, [[viewRefID, this.viewType], [searchviewId, 'search']], {load_filters: true})\n            .then(this.setup.bind(this))\n            .then(function (fragment) {\n                self.opened().then(function () {\n                    dom.append(self.$el, fragment, {\n                        callbacks: [{widget: self.viewController}],\n                        in_DOM: true,\n                    });\n                    self.set_buttons(self.__buttons);\n                });\n                return _super();\n            });\n    },\n\n    setup: function (fieldsViews) {\n        var self = this;\n        var fragment = document.createDocumentFragment();\n\n        var domain = this.domain;\n        if (this.initialIDs) {\n            domain = domain.concat([['id', 'in', this.initialIDs]]);\n        }\n        var ViewClass = view_registry.get(this.viewType);\n        var viewOptions = {};\n        var selectCreateController;\n        if (this.viewType === 'list') { // add listview specific options\n            _.extend(viewOptions, {\n                hasSelectors: !this.options.disable_multiple_selection,\n                readonly: true,\n\n            }, this.options.list_view_options);\n            selectCreateController = select_create_controllers_registry.SelectCreateListController;\n        }\n        if (this.viewType === 'kanban') {\n            _.extend(viewOptions, {\n                noDefaultGroupby: true,\n                selectionMode: this.options.selectionMode || false,\n            });\n            selectCreateController = select_create_controllers_registry.SelectCreateKanbanController;\n        }\n        var view = new ViewClass(fieldsViews[this.viewType], _.extend(viewOptions, {\n            action: {\n                controlPanelFieldsView: fieldsViews.search,\n                help: _.str.sprintf(\"<p>%s</p>\", _t(\"No records found!\")),\n            },\n            action_buttons: false,\n            dynamicFilters: this.options.dynamicFilters,\n            context: this.context,\n            domain: domain,\n            modelName: this.res_model,\n            withBreadcrumbs: false,\n            withSearchPanel: false,\n        }));\n        view.setController(selectCreateController);\n        return view.getController(this).then(function (controller) {\n            self.viewController = controller;\n            // render the footer buttons\n            self._prepareButtons();\n            return self.viewController.appendTo(fragment);\n        }).then(function () {\n            return fragment;\n        });\n    },\n    close: function () {\n        this._super.apply(this, arguments);\n        this.on_closed();\n    },\n    create_edit_record: function () {\n        var self = this;\n        var dialog = new FormViewDialog(this, _.extend({}, this.options, {\n            on_saved: function (record) {\n                var values = [{\n                    id: record.res_id,\n                    display_name: record.data.display_name || record.data.name,\n                }];\n                self.on_selected(values);\n            },\n        })).open();\n        dialog.on('closed', this, this.close);\n        return dialog;\n    },\n    /**\n     * @override\n     */\n    _focusOnClose: function() {\n        var isFocusSet = false;\n        this.trigger_up('form_dialog_discarded', {\n            callback: function (isFocused) {\n                isFocusSet = isFocused;\n            },\n        });\n        return isFocusSet;\n    },\n    /**\n     * prepare buttons for dialog footer based on options\n     *\n     * @private\n     */\n    _prepareButtons: function () {\n        this.__buttons = [{\n            text: _t(\"Cancel\"),\n            classes: 'btn-secondary o_form_button_cancel',\n            close: true,\n        }];\n        if (!this.options.no_create) {\n            this.__buttons.unshift({\n                text: _t(\"Create\"),\n                classes: 'btn-primary',\n                click: this.create_edit_record.bind(this)\n            });\n        }\n        if (!this.options.disable_multiple_selection) {\n            this.__buttons.unshift({\n                text: _t(\"Select\"),\n                classes: 'btn-primary o_select_button',\n                disabled: true,\n                close: true,\n                click: async () => {\n                    const values = await this.viewController.getSelectedRecordsWithDomain();\n                    this.on_selected(values);\n                },\n            });\n        }\n    },\n});\n\nexport default {\n    FormViewDialog: FormViewDialog,\n    SelectCreateDialog: SelectCreateDialog,\n};\n", "odoo.define('web.view_registry', function (require) {\n\"use strict\";\n\n/**\n * This module defines the view_registry. Web views are added to the registry\n * in the 'web._view_registry' module to avoid cyclic dependencies.\n * Views defined in other addons should be added in this registry as well,\n * ideally in another module than the one defining the view, in order to\n * separate the declarative part of a module (the view definition) from its\n * 'side-effects' part.\n */\n\nvar Registry = require('web.Registry');\n\nreturn new Registry();\n\n});\n\nodoo.define('web._view_registry', function (require) {\n\"use strict\";\n\n/**\n * The purpose of this module is to add the web views in the view_registry.\n * This can't be done directly in the module defining the view_registry as it\n * would produce cyclic dependencies.\n */\n\nvar FormView = require('web.FormView');\nvar KanbanView = require('web.KanbanView');\nvar ListView = require('web.ListView');\nvar CalendarView = require('web.CalendarView');\nvar view_registry = require('web.view_registry');\n\nview_registry\n    .add('form', FormView)\n    .add('list', ListView)\n    .add('kanban', KanbanView)\n    .add('calendar', CalendarView);\n});\n", "/** @odoo-module alias=web.viewUtils **/\n\n\nimport * as dom from 'web.dom';\nimport * as utils from 'web.utils';\n\nvar viewUtils = {\n    /**\n     * Since a date field can have a granularity in a groupby (date_field:granularity),\n     * when we require only the field name, we have to split out the\n     * eventual granularity\n     * \n     * @param {string} groupedBy the groupby with the eventual granularity\n     * @returns {string}\n     */\n    getGroupByField: function(groupedBy) {\n        return groupedBy && groupedBy.split(':')[0];\n    },\n    /**\n     * Returns the value of a group dataPoint, i.e. the value of the groupBy\n     * field for the records in that group.\n     *\n     * @param {Object} group dataPoint of type list, corresponding to a group\n     * @param {string} groupByField the name of the groupBy field\n     * @returns {string | integer | false}\n     */\n    getGroupValue: function (group, groupByField) {\n        var groupedByField = group.fields[groupByField];\n        switch (groupedByField.type) {\n            case 'many2one':\n                return group.res_id || false;\n            case 'selection':\n                var descriptor = _.find(groupedByField.selection, function (option) {\n                    return option[1] === group.value;\n                });\n                return descriptor && descriptor[0];\n            case 'char':\n            case 'boolean':\n                return group.value;\n            // for a date/datetime field, we take the last moment of the group as the group value\n            case 'date':\n            case 'datetime':\n                const [format, granularity] = groupedByField.type === 'date' ?\n                    [\"YYYY-MM-DD\", 'day'] : [\"YYYY-MM-DD HH:mm:ss\", 'second'];\n                return group.range[groupByField] ?\n                    moment.utc(group.range[groupByField].to).subtract(1, granularity).locale('en').format(format) : false;\n            default:\n                return false; // other field types are not handled\n        }\n    },\n    /**\n     * States whether or not the quick create feature is available for the given\n     * datapoint, depending on its groupBy field.\n     *\n     * @param {Object} list dataPoint of type list\n     * @returns {Boolean} true iff the kanban quick create feature is available\n     */\n    isQuickCreateEnabled: function (list) {\n        var groupByField = list.groupedBy[0] && viewUtils.getGroupByField(list.groupedBy[0]);\n        if (!groupByField) {\n            return false;\n        }\n        var dateTypes = ['date', 'datetime'];\n        if (!list.fields[groupByField].readonly &&\n            _.contains(dateTypes, list.fields[groupByField].type)) {\n            return list.fieldsInfo && list.fieldsInfo[list.viewType][groupByField] &&\n                list.fieldsInfo[list.viewType][groupByField].allowGroupRangeValue;\n        }\n        var availableTypes = ['char', 'boolean', 'many2one', 'selection'];\n        return _.contains(availableTypes, list.fields[groupByField].type);\n    },\n    /**\n     * @param {string} arch view arch\n     * @returns {Object} parsed arch\n     */\n    parseArch: function (arch) {\n        var doc = $.parseXML(arch).documentElement;\n        var stripWhitespaces = doc.nodeName.toLowerCase() !== 'kanban';\n        return utils.xml_to_json(doc, stripWhitespaces);\n    },\n    /**\n     * Renders a button according to a given arch node element.\n     *\n     * @param {Object} node\n     * @param {Object} [options]\n     * @param {string} [options.extraClass]\n     * @param {boolean} [options.textAsTitle=false]\n     * @returns {jQuery}\n     */\n    renderButtonFromNode: function (node, options) {\n        var btnOptions = {\n            attrs: _.omit(node.attrs, 'icon', 'string', 'type', 'attrs', 'modifiers', 'options', 'effect'),\n            icon: node.attrs.icon,\n        };\n        if (options && options.extraClass) {\n            var classes = btnOptions.attrs.class ? btnOptions.attrs.class.split(' ') : [];\n            btnOptions.attrs.class = _.uniq(classes.concat(options.extraClass.split(' '))).join(' ');\n        }\n        var str = (node.attrs.string || '').replace(/_/g, '');\n        if (str) {\n            if (options && options.textAsTitle) {\n                btnOptions.attrs.title = str;\n            } else {\n                btnOptions.text = str;\n            }\n        }\n        return dom.renderButton(btnOptions);\n    },\n};\n\nexport default viewUtils;\n", "odoo.define('web.ChangePassword', function (require) {\n\"use strict\";\n\n/**\n * This file defines a client action that opens in a dialog (target='new') and\n * allows the user to change his password.\n */\n\nvar AbstractAction = require('web.AbstractAction');\nvar core = require('web.core');\nvar Dialog = require('web.Dialog');\nvar web_client = require('web.web_client');\n\nvar _t = core._t;\n\nvar ChangePassword = AbstractAction.extend({\n    template: \"ChangePassword\",\n\n    /**\n     * @fixme: weird interaction with the parent for the $buttons handling\n     *\n     * @override\n     * @returns {Promise}\n     */\n    start: function () {\n        var self = this;\n        web_client.set_title(_t(\"Change Password\"));\n        var $button = self.$('.oe_form_button');\n        $button.appendTo(this.getParent().$footer);\n        $button.eq(1).click(function () {\n            self.$el.parents('.modal').modal('hide');\n        });\n        $button.eq(0).click(function () {\n            self._rpc({\n                    route: '/web/session/change_password',\n                    params: {\n                        fields: $('form[name=change_password_form]').serializeArray()\n                    }\n                })\n                .then(function (result) {\n                    if (result.error) {\n                        self.displayNotification({\n                            message: result.error,\n                            type: 'danger'\n                        });\n                    } else {\n                        self.do_action('logout');\n                    }\n                });\n        });\n    },\n});\n\ncore.action_registry.add(\"change_password\", ChangePassword);\n\nreturn ChangePassword;\n\n});\n", "odoo.define('web.DataExport', function (require) {\n\"use strict\";\n\nvar config = require('web.config');\nvar core = require('web.core');\nvar Dialog = require('web.Dialog');\nvar data = require('web.data');\nvar framework = require('web.framework');\nvar pyUtils = require('web.py_utils');\n\nvar QWeb = core.qweb;\nvar _t = core._t;\n\nvar DataExport = Dialog.extend({\n    template: 'ExportDialog',\n    events: {\n        'change .o_exported_lists_select': '_onChangeExportList',\n        'change .o_import_compat input': '_onChangeCompatibleInput',\n        'click .o_add_field': '_onClickAddField',\n        'click .o_delete_exported_list': '_onClickDeleteExportListBtn',\n        'click .o_expand': '_onClickExpand',\n        'click .o_remove_field': '_onClickRemoveField',\n        'click .o_save_list .o_save_list_btn': '_onClickSaveListBtn',\n        'click .o_save_list .o_cancel_list_btn': '_resetTemplateField',\n        'click .o_export_tree_item': '_onClickTreeItem',\n        'dblclick .o_export_tree_item:not(.haschild)': '_onDblclickTreeItem',\n        'keydown .o_export_tree_item': '_onKeydownTreeItem',\n        'keydown .o_save_list_name': '_onKeydownSaveList',\n        'input .o_export_search_input': '_onSearchInput',\n    },\n    /**\n     * @constructor\n     * @param {Widget} parent\n     * @param {Object} record\n     * @param {string[]} defaultExportFields\n     */\n    init: function (parent, record, defaultExportFields, groupedBy, activeDomain, idsToExport) {\n        var options = {\n            title: _t(\"Export Data\"),\n            buttons: [\n                {text: _t(\"Export\"), click: this._onExportData, classes: 'btn-primary'},\n                {text: _t(\"Close\"), close: true},\n            ],\n            fullscreen: config.device.isMobile,\n        };\n        this._super(parent, options);\n        this.records = {};\n        this.record = record;\n        this.defaultExportFields = defaultExportFields;\n        this.groupby = groupedBy;\n        this.exports = new data.DataSetSearch(this, 'ir.exports', this.record.getContext());\n        this.rowIndex = 0;\n        this.rowIndexLevel = 0;\n        this.isCompatibleMode = false;\n        this.domain = activeDomain || this.record.domain;\n        this.idsToExport = activeDomain ? false: idsToExport;\n    },\n    /**\n     * @override\n     */\n    start: function () {\n        var self = this;\n        var proms = [this._super.apply(this, arguments)];\n\n        // The default for the \".modal_content\" element is \"max-height: 100%;\"\n        // but we want it to always expand to \"height: 100%;\" for this modal.\n        // This can be achieved thanks to CSS modification without touching\n        // the \".modal-content\" rules... but not with Internet explorer (11).\n        this.$modal.find('.modal-content').css('height', '100%');\n\n        this.$fieldsList = this.$('.o_fields_list');\n\n        proms.push(this._rpc({route: '/web/export/formats'}).then(doSetupExportFormats));\n        proms.push(this._onChangeCompatibleInput().then(function () {\n            _.each(self.defaultExportFields, function (field) {\n                var record = self.records[field];\n                self._addField(record.id, record.string);\n            });\n        }));\n\n        proms.push(this._showExportsList());\n\n        // Bind sortable events after Dialog is open\n        this.opened().then(function () {\n            self.$('.o_fields_list').sortable({\n                axis: 'y',\n                cursor: 'grabbing',\n                handle: '.o_short_field',\n                forcePlaceholderSize: true,\n                placeholder: 'o-field-placeholder',\n                update: self.proxy('_resetTemplateField'),\n            });\n        });\n        return Promise.all(proms);\n\n        function doSetupExportFormats(formats) {\n            var $fmts = self.$('.o_export_format');\n\n            _.each(formats, function (format) {\n                var $radio = $('<input/>', {type: 'radio', value: format.tag, name: 'o_export_format_name', class: 'form-check-input', id: 'o_radio' + format.label});\n                var $label = $('<label/>', {html: format.label, class: 'form-check-label', for: 'o_radio' + format.label});\n\n                if (format.error) {\n                    $radio.prop('disabled', true);\n                    $label.html(_.str.sprintf(\"%s \u2014 %s\", format.label, format.error));\n                }\n\n                $fmts.append($(\"<div class='radio form-check form-check-inline pl-4'></div>\").append($radio, $label));\n            });\n\n            self.$exportFormatInputs = $fmts.find('input');\n            self.$exportFormatInputs.filter(':enabled').first().prop('checked', true);\n        }\n    },\n\n    /**\n     * Export all data with default values (fields, domain)\n     */\n    export() {\n        let exportedFields = this.defaultExportFields.map(field => ({\n            name: field,\n            label: this.record.fields[field].string,\n            store: this.record.fields[field].store,\n            type: this.record.fields[field].type,\n        }));\n        this._exportData(exportedFields, 'xlsx', false);\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Add the field in the export list\n     *\n     * @private\n     * @param {string} fieldID\n     * @param {string} label\n     */\n    _addField: function (fieldID, label) {\n        var $fieldList = this.$('.o_fields_list');\n        if (!$fieldList.find(\".o_export_field[data-field_id='\" + fieldID + \"']\").length) {\n            $fieldList.append(\n                $('<li>', {'class': 'o_export_field', 'data-field_id': fieldID}).append(\n                    $('<span>', {'class': \"fa fa-sort o_short_field mx-1\"}),\n                    label.trim(),\n                    $('<span>', {'class': 'fa fa-trash m-1 pull-right o_remove_field', 'title': _t(\"Remove field\")})\n                )\n            );\n        }\n    },\n\n    /**\n     * Submit the user data and export the file\n     *\n     * @private\n     */\n    _exportData(exportedFields, exportFormat, idsToExport) {\n\n        if (_.isEmpty(exportedFields)) {\n            Dialog.alert(this, _t(\"Please select fields to export...\"));\n            return;\n        }\n        if (this.isCompatibleMode) {\n            exportedFields.unshift({ name: 'id', label: _t('External ID') });\n        }\n\n        framework.blockUI();\n        this.getSession().get_file({\n            url: '/web/export/' + exportFormat,\n            data: {\n                data: JSON.stringify({\n                    model: this.record.model,\n                    fields: exportedFields,\n                    ids: idsToExport,\n                    domain: this.domain,\n                    groupby: this.groupby,\n                    context: pyUtils.eval('contexts', [this.record.getContext()]),\n                    import_compat: this.isCompatibleMode,\n                })\n            },\n            complete: framework.unblockUI,\n            error: (error) => this.call('crash_manager', 'rpc_error', error),\n        });\n    },\n    /**\n     * @private\n     * @returns {string[]} exportFields\n     */\n    _getFields: function () {\n        var exportFields = this.$('.o_export_field').map(function () {\n            return $(this).data('field_id');\n        }).get();\n        if (exportFields.length === 0) {\n            Dialog.alert(this, _t(\"Please select fields to save export list...\"));\n        }\n        return exportFields;\n    },\n    /**\n     * Fetch the field info for the relational field. This method will be\n     * invoked when the user expands the relational field from keyboard/mouse.\n     *\n     * @private\n     * @param {Object} record\n     */\n    _onExpandAction: function (record) {\n        var self = this;\n        if (!record.children) {\n            return;\n        }\n\n        var model = record.params.model;\n        var prefix = record.params.prefix;\n        var name = record.params.name;\n        var excludeFields = [];\n        if (record.relation_field) {\n            excludeFields.push(record.relation_field);\n        }\n\n        if (!record.loaded) {\n            this._rpc({\n                route: '/web/export/get_fields',\n                params: {\n                    model: model,\n                    prefix: prefix,\n                    parent_name: name,\n                    import_compat: this.isCompatibleMode,\n                    parent_field_type: record.field_type,\n                    parent_field: record.params.parent_field,\n                    exclude: excludeFields,\n                },\n            }).then(function (results) {\n                record.loaded = true;\n                self._onShowData(results, record.id);\n            });\n        } else {\n            this._showContent(record.id);\n        }\n    },\n    /**\n     * After the fetching the fields info for the relational field, this method\n     * will render a list of a field for expanded relational field.\n     *\n     * @private\n     * @param {Object[]} records\n     * @param {string} expansion\n     */\n    _onShowData: function (records, expansion) {\n        var self = this;\n        if (expansion) {\n            this.$('.o_export_tree_item[data-id=\"' + expansion + '\"]')\n                .addClass('show')\n                .find('.o_expand_parent')\n                .toggleClass('fa-chevron-right fa-chevron-down')\n                .next()\n                .after(QWeb.render('Export.TreeItems', {fields: records, debug: config.isDebug()}));\n        } else {\n            this.$('.o_left_field_panel').empty().append(\n                $('<div/>').addClass('o_field_tree_structure')\n                           .append(QWeb.render('Export.TreeItems', {fields: records, debug: config.isDebug()}))\n            );\n        }\n\n        _.extend(this.records, _.object(_.pluck(records, 'id'), records));\n        this.$records = this.$('.o_export_tree_item');\n        this.$records.each(function (i, el) {\n            var $el = $(el);\n            $el.find('.o_tree_column').first().toggleClass('o_required', !!self.records[$el.data('id')].required);\n        });\n    },\n    /**\n     * @private\n     */\n    _addNewTemplate: function () {\n        this.$('.o_exported_lists').addClass('d-none');\n\n        this.$(\".o_save_list\")\n            .show()\n            .find(\".o_save_list_name\")\n                .val(\"\")\n                .focus();\n    },\n    /**\n     * @private\n     */\n    _resetTemplateField: function () {\n        this.$('.o_exported_lists_select').val(\"\");\n        this.$('.o_delete_exported_list').addClass('d-none');\n        this.$('.o_exported_lists').removeClass('d-none');\n\n        this.$(\".o_save_list\")\n            .hide()\n            .find(\".o_save_list_name\").val(\"\");\n    },\n    /**\n     * If relational fields info is already fetched then this method is\n     * used to display fields.\n     *\n     * @private\n     * @param {string} fieldID\n     */\n    _showContent: function (fieldID) {\n        var $item = this.$('.o_export_tree_item[data-id=\"' + fieldID + '\"]');\n        $item.toggleClass('show');\n        var isOpen = $item.hasClass('show');\n\n        $item.children('.o_expand_parent').toggleClass('fa-chevron-down', !!isOpen).toggleClass('fa-chevron-right', !isOpen);\n\n        var $childField = $item.find('.o_export_tree_item');\n        var childLength = (fieldID.split('/')).length + 1;\n        for (var i = 0 ; i < $childField.length ; i++) {\n            var $child = $childField.eq(i);\n            if (!isOpen) {\n                $child.hide();\n            } else if (childLength === $childField.eq(i).data('id').split('/').length) {\n                if ($child.hasClass('show')) {\n                    $child.removeClass('show');\n                    $child.children('.o_expand_parent').removeClass('fa-chevron-down').addClass('fa-chevron-right');\n                }\n                $child.show();\n            }\n        }\n    },\n    /**\n     * Fetches the saved export list for the current model\n     *\n     * @private\n     * @returns {Deferred}\n     */\n    _showExportsList: function () {\n        var self = this;\n        if (this.$('.o_exported_lists_select').is(':hidden')) {\n            this.$('.o_exported_lists').show();\n            return Promise.resolve();\n        }\n\n        return this._rpc({\n            model: 'ir.exports',\n            method: 'search_read',\n            fields: ['name'],\n            domain: [['resource', '=', this.record.model]]\n        }).then(function (exportList) {\n            self.$('.o_exported_lists').append(QWeb.render('Export.SavedList', {\n                existing_exports: exportList,\n            }));\n        });\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * This method will fill fields to export when user change exported field list\n     *\n     * @private\n     */\n    _onChangeExportList: function () {\n        var self = this;\n        var exportID = this.$('.o_exported_lists_select option:selected').val();\n        this.$('.o_delete_exported_list').toggleClass('d-none', !exportID);\n        if (exportID && exportID !== 'new_template') {\n            this.$('.o_fields_list').empty();\n            this._rpc({\n                route: '/web/export/namelist',\n                params: {\n                    model: this.record.model,\n                    export_id: parseInt(exportID, 10),\n                },\n            }).then(function (fieldList) {\n                _.each(fieldList, function (field) {\n                    self._addField(field.name, field.label);\n                });\n            });\n        } else if (exportID === 'new_template') {\n            self._addNewTemplate();\n        }\n    },\n    /**\n     * @private\n     * @returns {Deferred}\n     */\n    _onChangeCompatibleInput: function () {\n        var self = this;\n        this.isCompatibleMode = this.$('.o_import_compat input').is(':checked');\n\n        this.$('.o_field_tree_structure').remove();\n        this._resetTemplateField();\n        return this._rpc({\n            route: '/web/export/get_fields',\n            params: {\n                model: this.record.model,\n                import_compat: this.isCompatibleMode,\n            },\n        }).then(function (records) {\n            var compatibleFields = _.map(records, function (record) { return record.id; });\n            self._onShowData(records);\n            self.$('.o_fields_list').empty();\n\n            _.chain(self.$fieldsList.find('.o_export_field'))\n            .map(function (field) { return $(field).data('field_id'); })\n            .union(self.defaultExportFields)\n            .intersection(compatibleFields)\n            .each(function (field) {\n                var record = _.find(records, function (rec) {\n                    return rec.id === field;\n                });\n                self._addField(record.id, record.string);\n            });\n            self.$('#o-export-search-filter').val('');\n        });\n    },\n    /**\n     * Add a field to export list\n     *\n     * @private\n     * @param {Event} ev\n     */\n    _onClickAddField: function(ev) {\n        ev.stopPropagation();\n        var $field = $(ev.currentTarget);\n        this._resetTemplateField();\n        this._addField($field.closest('.o_export_tree_item').data('id'), $field.closest('.o_tree_column').text());\n    },\n    /**\n     * Delete selected export list item from the saved export list\n     *\n     * @private\n     */\n    _onClickDeleteExportListBtn: function () {\n        var self = this;\n        var selectExp = this.$('.o_exported_lists_select option:selected');\n        var options = {\n            confirm_callback: function () {\n                if (selectExp.val()) {\n                    self.exports.unlink([parseInt(selectExp.val(), 10)]);\n                    selectExp.remove();\n                    if (self.$('.o_exported_lists_select option').length <= 1) {\n                        self.$('.o_exported_lists').hide();\n                    }\n                }\n            }\n        };\n        Dialog.confirm(this, _t(\"Do you really want to delete this export template?\"), options);\n    },\n    /**\n     * @private\n     * @param {Event} ev\n     */\n    _onClickExpand: function (ev) {\n        this._onExpandAction(this.records[$(ev.target).closest('.o_export_tree_item').data('id')]);\n    },\n    /**\n     * Remove selected field from export field list\n     *\n     * @private\n     * @param {Event} ev\n     */\n    _onClickRemoveField: function (ev) {\n        $(ev.currentTarget).closest('.o_export_field').remove();\n        this._resetTemplateField();\n    },\n    /**\n     * This method will create a record in 'ir.exports' model with list of\n     * selected fields.\n     *\n     * @private\n     */\n    _onClickSaveListBtn: function () {\n        var self = this;\n        var $saveList = this.$('.o_save_list');\n\n        var value = $saveList.find('input').val();\n        if (!value) {\n            Dialog.alert(this, _t(\"Please enter save field list name\"));\n            return;\n        }\n\n        var fields = this._getFields();\n        if (fields.length === 0) {\n            return;\n        }\n\n        $saveList.hide();\n\n        this.exports.create({\n            name: value,\n            resource: this.record.model,\n            export_fields: _.map(fields, function (field) {\n                return [0, 0, { name: field }];\n            }),\n        }).then(function (exportListID) {\n            if (!exportListID) {\n                return;\n            }\n            var $select = self.$('.o_exported_lists_select');\n            if ($select.length === 0 || $select.is(':hidden')) {\n                self._showExportsList();\n            }\n            $select.append(new Option(value, exportListID));\n            self.$('.o_exported_lists').removeClass('d-none');\n            $select.val(exportListID);\n        });\n    },\n    /**\n     * @private\n     * @param ev\n     */\n    _onClickTreeItem: function (ev) {\n        ev.stopPropagation();\n        var $elem = $(ev.currentTarget);\n\n        var rowIndex = $elem.prevAll('.o_export_tree_item').length;\n        var rowIndexLevel = $elem.parents('.o_export_tree_item').length;\n\n        if (ev.shiftKey && rowIndexLevel === this.rowIndexLevel) {\n            var minIndex = Math.min(rowIndex, this.rowIndex);\n            var maxIndex = Math.max(rowIndex, this.rowIndex);\n\n            this.$records.filter(function () { return ($elem.parent()[0] === $(this).parent()[0]); })\n                .slice(minIndex, maxIndex + 1)\n                .addClass('o_selected')\n                .filter(':not(:last)')\n                .each(processChildren);\n        }\n\n        this.rowIndex = rowIndex;\n        this.rowIndexLevel = rowIndexLevel;\n\n        if (ev.ctrlKey) {\n            $elem.toggleClass('o_selected').focus();\n        } else if (ev.shiftKey) {\n            $elem.addClass('o_selected').focus();\n        } else {\n            this.$('.o_selected').removeClass('o_selected');\n            $elem.addClass('o_selected').focus();\n        }\n\n        function processChildren() {\n            var $child = $(this);\n            if ($child.hasClass('show')) {\n                $child.children('.o_export_tree_item')\n                    .addClass('o_selected')\n                    .each(processChildren);\n            }\n        }\n    },\n    /**\n     * Submit the user data and export the file\n     *\n     * @private\n     */\n    _onExportData() {\n        let exportedFields = this.$('.o_export_field').map((i, field) => ({\n                name: $(field).data('field_id'),\n                label: field.textContent,\n            }\n        )).get();\n        let exportFormat = this.$exportFormatInputs.filter(':checked').val();\n        this._exportData(exportedFields, exportFormat, this.idsToExport);\n    },\n    /**\n     * Add a field to export field list on double click\n     *\n     * @private\n     * @param {Event} ev\n     */\n    _onDblclickTreeItem: function (ev) {\n        var self = this;\n        this._resetTemplateField();\n        function addElement(el) {\n            self._addField(el.getAttribute('data-id'), el.querySelector('.o_tree_column').textContent);\n        }\n        var target = ev.currentTarget;\n        target.classList.remove('o_selected');\n        // Add parent fields to export\n        [].reverse.call($(target).parents('.o_export_tree_item')).each(function () {\n            addElement(this);\n        });\n        // add field itself\n        addElement(target);\n    },\n    /**\n     * @private\n     * @param ev\n     */\n    _onKeydownSaveList: function (ev) {\n        if (ev.keyCode === $.ui.keyCode.ENTER) {\n            this._onClickSaveListBtn();\n        }\n    },\n    /**\n     * Handles the keyboard navigation for the fields\n     *\n     * @private\n     * @param ev\n     */\n    _onKeydownTreeItem: function (ev) {\n        ev.stopPropagation();\n        var $el = $(ev.currentTarget);\n        var record = this.records[$el.data('id')];\n\n        switch (ev.keyCode || ev.which) {\n            case $.ui.keyCode.LEFT:\n                if ($el.hasClass('show')) {\n                    this._onExpandAction(record);\n                }\n                break;\n            case $.ui.keyCode.RIGHT:\n                if (!$el.hasClass('show')) {\n                    this._onExpandAction(record);\n                }\n                break;\n            case $.ui.keyCode.UP:\n                var $prev = $el.prev('.o_export_tree_item');\n                if ($prev.length === 1) {\n                    while ($prev.hasClass('show')) {\n                        $prev = $prev.children('.o_export_tree_item').last();\n                    }\n                } else {\n                    $prev = $el.parent('.o_export_tree_item');\n                    if ($prev.length === 0) {\n                        break;\n                    }\n                }\n\n                $el.removeClass('o_selected').blur();\n                $prev.addClass(\"o_selected\").focus();\n                break;\n            case $.ui.keyCode.DOWN:\n                var $next;\n                if ($el.hasClass('show')) {\n                    $next = $el.children('.o_export_tree_item').first();\n                } else {\n                    $next = $el.next('.o_export_tree_item');\n                    if ($next.length === 0) {\n                        $next = $el.parent('.o_export_tree_item').next('.o_export_tree_item');\n                        if ($next.length === 0) {\n                            break;\n                        }\n                    }\n                }\n\n                $el.removeClass('o_selected').blur();\n                $next.addClass('o_selected').focus();\n                break;\n        }\n    },\n    /**\n     * Search fields from a field list.\n     *\n     * @private\n     */\n    _onSearchInput: function (ev) {\n        var searchText = $(ev.currentTarget).val().trim().toUpperCase();\n        if (!searchText) {\n            this.$('.o_no_match').remove();\n            this.$(\".o_export_tree_item\").show();\n            this.$(\".o_export_tree_item.haschild:not(.show) .o_export_tree_item\").hide();\n            return;\n        }\n\n        var matchItems = this.$(\".o_tree_column\").filter(function () {\n            var title = this.getAttribute('title');\n            return this.innerText.toUpperCase().indexOf(searchText) >= 0\n                || title && title.toUpperCase().indexOf(searchText) >= 0;\n        }).parent();\n        this.$(\".o_export_tree_item\").hide();\n        if (matchItems.length) {\n            this.$('.o_no_match').remove();\n            _.each(matchItems, function (col) {\n                var $col = $(col);\n                $col.show();\n                $col.parents('.haschild.show').show();\n                if (!$col.parent().hasClass('show') && !$col.parent().hasClass('o_field_tree_structure')) {\n                    $col.hide();\n                }\n            });\n        } else if (!this.$('.o_no_match').length) {\n            this.$(\".o_field_tree_structure\").append($(\"<h3/>\", {\n                class: 'text-center text-muted mt-5 o_no_match',\n                text: _t(\"No match found.\")\n            }));\n        }\n    },\n});\n\nreturn DataExport;\n\n});\n", "odoo.define('web.datepicker', function (require) {\n\"use strict\";\n\nvar core = require('web.core');\nvar field_utils = require('web.field_utils');\nvar time = require('web.time');\nvar Widget = require('web.Widget');\n\nvar _t = core._t;\n\nvar DateWidget = Widget.extend({\n    template: \"web.datepicker\",\n    type_of_date: \"date\",\n    events: {\n        'error.datetimepicker': 'errorDatetime',\n        'change .o_datepicker_input': 'changeDatetime',\n        'click input': '_onInputClicked',\n        'input input': '_onInput',\n        'keydown': '_onKeydown',\n        'show.datetimepicker': '_onDateTimePickerShow',\n        'hide.datetimepicker': '_onDateTimePickerHide',\n    },\n    /**\n     * @override\n     */\n    init: function (parent, options) {\n        this._super.apply(this, arguments);\n\n        this.name = parent.name;\n        this.options = _.extend({\n            locale: moment.locale(),\n            format : this.type_of_date === 'datetime' ? time.getLangDatetimeFormat() : time.getLangDateFormat(),\n            minDate: moment({ y: 1000 }),\n            maxDate: moment({ y: 9999, M: 11, d: 31 }),\n            useCurrent: false,\n            icons: {\n                time: 'fa fa-clock-o',\n                date: 'fa fa-calendar',\n                up: 'fa fa-chevron-up',\n                down: 'fa fa-chevron-down',\n                previous: 'fa fa-chevron-left',\n                next: 'fa fa-chevron-right',\n                today: 'fa fa-calendar-check-o',\n                clear: 'fa fa-trash',\n                close: 'fa fa-check primary',\n            },\n            calendarWeeks: true,\n            buttons: {\n                showToday: false,\n                showClear: false,\n                showClose: false,\n            },\n            widgetParent: 'body',\n            keyBinds: null,\n        }, options || {});\n\n        this.__libInput = 0;\n        // tempusdominus doesn't offer any elegant way to check whether the\n        // datepicker is open or not, so we have to listen to hide/show events\n        // and manually keep track of the 'open' state\n        this.__isOpen = false;\n    },\n    /**\n     * @override\n     */\n    start: function () {\n        this.$input = this.$('input.o_datepicker_input');\n        this.__libInput++;\n        this.$el.datetimepicker(this.options);\n        this.__libInput--;\n        this._setReadonly(false);\n    },\n    /**\n     * @override\n     */\n    destroy: function () {\n        if (this._onScroll) {\n            window.removeEventListener('wheel', this._onScroll, true);\n        }\n        this.__libInput++;\n        this.$el.datetimepicker('destroy');\n        this.__libInput--;\n        this._super.apply(this, arguments);\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * set datetime value\n     */\n    changeDatetime: function () {\n        if (this.__libInput > 0) {\n            if (this.options.warn_future) {\n                this._warnFuture(this.getValue());\n            }\n            this.trigger(\"datetime_changed\");\n            return;\n        }\n        var oldValue = this.getValue();\n        if (this.isValid()) {\n            this._setValueFromUi();\n            var newValue = this.getValue();\n            var hasChanged = !oldValue !== !newValue;\n            if (oldValue && newValue) {\n                var formattedOldValue = oldValue.format(time.getLangDatetimeFormat());\n                var formattedNewValue = newValue.format(time.getLangDatetimeFormat());\n                if (formattedNewValue !== formattedOldValue) {\n                    hasChanged = true;\n                }\n            }\n            if (hasChanged) {\n                if (this.options.warn_future) {\n                    this._warnFuture(newValue);\n                }\n                this.trigger(\"datetime_changed\");\n            }\n        } else {\n            var formattedValue = oldValue ? this._formatClient(oldValue) : null;\n            this.$input.val(formattedValue);\n        }\n    },\n    /**\n     * Library clears the wrong date format so just ignore error\n     */\n    errorDatetime: function (e) {\n        return false;\n    },\n    /**\n     * Focuses the datepicker input. This function must be called in order to\n     * prevent 'input' events triggered by the lib to bubble up, and to cause\n     * unwanted effects (like triggering 'field_changed' events)\n     */\n    focus: function () {\n        this.__libInput++;\n        this.$input.focus();\n        this.__libInput--;\n    },\n    /**\n     * @returns {Moment|false}\n     */\n    getValue: function () {\n        var value = this.get('value');\n        return value && value.clone();\n    },\n    /**\n     * @returns {boolean}\n     */\n    isValid: function () {\n        var value = this.$input.val();\n        if (value === \"\") {\n            return true;\n        } else {\n            try {\n                this._parseClient(value);\n                return true;\n            } catch (e) {\n                return false;\n            }\n        }\n    },\n    /**\n     * @returns {Moment|false} value\n     */\n    maxDate: function (date) {\n        this.__libInput++;\n        this.$el.datetimepicker('maxDate', date || null);\n        this.__libInput--;\n    },\n    /**\n     * @returns {Moment|false} value\n     */\n    minDate: function (date) {\n        this.__libInput++;\n        this.$el.datetimepicker('minDate', date || null);\n        this.__libInput--;\n    },\n    /**\n     * @param {Moment|false} value\n     */\n    setValue: function (value) {\n        this.set({'value': value});\n        var formatted_value = value ? this._formatClient(value) : null;\n        this.$input.val(formatted_value);\n        this._setLibInputValue(value);\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * add a warning to communicate that a date in the future has been set\n     *\n     * @private\n     * @param {Moment} currentDate\n     */\n    _warnFuture: function (currentDate) {\n        if (!this.$warning) {\n            this.$warning = $('<span>', {\n                class: 'fa fa-exclamation-triangle o_tz_warning o_datepicker_warning',\n            });\n            var title = _t(\"This date is in the future. Make sure this is what you expect.\");\n            this.$warning.attr('title', title);\n            this.$input.after(this.$warning);\n        }\n        // Get rid of time and TZ crap for comparison\n        if (currentDate && currentDate.format('YYYY-MM-DD') > moment().format('YYYY-MM-DD')) {\n            this.$warning.show();\n        } else {\n            this.$warning.hide();\n        }\n    },\n\n    /**\n     * @private\n     * @param {Moment} v\n     * @returns {string}\n     */\n    _formatClient: function (v) {\n        return field_utils.format[this.type_of_date](v, null, {timezone: false});\n    },\n    /**\n     * @private\n     * @param {string|false} v\n     * @returns {Moment}\n     */\n    _parseClient: function (v) {\n        return field_utils.parse[this.type_of_date](v, null, {timezone: false});\n    },\n    /**\n     * @private\n     * @param {Moment|false} value\n     */\n    _setLibInputValue: function (value) {\n        this.__libInput++;\n        this.$el.datetimepicker('date', value || null);\n        this.__libInput--;\n    },\n    /**\n     * @private\n     * @param {boolean} readonly\n     */\n    _setReadonly: function (readonly) {\n        this.readonly = readonly;\n        this.$input.prop('readonly', this.readonly);\n    },\n    /**\n     * set the value from the input value\n     *\n     * @private\n     */\n    _setValueFromUi: function () {\n        var value = this.$input.val() || false;\n        this.setValue(this._parseClient(value));\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Reacts to the datetimepicker being hidden\n     * Used to unbind the scroll event from the datetimepicker\n     *\n     * @private\n     */\n    _onDateTimePickerHide: function () {\n        this.__isOpen = false;\n        this.changeDatetime();\n        if (this._onScroll) {\n            window.removeEventListener('wheel', this._onScroll, true);\n        }\n        this.changeDatetime();\n    },\n    /**\n     * Reacts to the datetimepicker being shown\n     * Could set/verify our widget value\n     * And subsequently update the datetimepicker\n     *\n     * @private\n     */\n    _onDateTimePickerShow: function () {\n        this.__isOpen = true;\n        if (this.$input.val().length !== 0 && this.isValid()) {\n            this.$input.select();\n        }\n        var self = this;\n        this._onScroll = function (ev) {\n            if (ev.target !== self.$input.get(0)) {\n                self.__libInput++;\n                self.$el.datetimepicker('hide');\n                self.__libInput--;\n            }\n        };\n        window.addEventListener('wheel', this._onScroll, true);\n    },\n    /**\n     * @private\n     * @param {KeyEvent} ev\n     */\n    _onKeydown: function (ev) {\n        if (ev.which === $.ui.keyCode.ESCAPE) {\n            if (this.__isOpen) {\n                // we don't want any other effects than closing the datepicker,\n                // like leaving the edition of a row in editable list view\n                ev.stopImmediatePropagation();\n                this.__libInput++;\n                this.$el.datetimepicker('hide');\n                this.__libInput--;\n                this.focus();\n            }\n        }\n    },\n    /**\n     * Prevents 'input' events triggered by the library to bubble up, as they\n     * might have unwanted effects (like triggering 'field_changed' events in\n     * the context of field widgets)\n     *\n     * @private\n     * @param {Event} ev\n     */\n    _onInput: function (ev) {\n        if (this.__libInput > 0) {\n            ev.stopImmediatePropagation();\n        }\n    },\n    /**\n     * @private\n     */\n    _onInputClicked: function () {\n        this.__libInput++;\n        this.$el.datetimepicker('toggle');\n        this.__libInput--;\n        this.focus();\n    },\n});\n\nvar DateTimeWidget = DateWidget.extend({\n    type_of_date: \"datetime\",\n    init: function (parent, options) {\n        this._super(parent, _.extend({\n            buttons: {\n                showToday: false,\n                showClear: false,\n                showClose: true,\n            },\n        }, options || {}));\n    },\n});\n\nreturn {\n    DateWidget: DateWidget,\n    DateTimeWidget: DateTimeWidget,\n};\n\n});\n", "odoo.define(\"web.DomainSelectorDialog\", function (require) {\n\"use strict\";\n\nvar core = require(\"web.core\");\nvar Dialog = require(\"web.Dialog\");\nvar Domain = require(\"web.Domain\");\nvar DomainSelector = require(\"web.DomainSelector\");\n\nvar _t = core._t;\n\n/**\n * @class DomainSelectorDialog\n */\nreturn Dialog.extend({\n    custom_events: _.extend({}, Dialog.prototype.custom_events, {\n        domain_changed: \"_onDomainChange\",\n    }),\n    init: function (parent, model, domain, options) {\n        this.model = model;\n        this.newDomain = null;\n        this.options = _.extend({\n            readonly: true,\n            debugMode: false,\n        }, options || {});\n\n        var buttons;\n        if (this.options.readonly) {\n            buttons = [\n                {text: _t(\"Close\"), close: true},\n            ];\n        } else {\n            buttons = [\n                {text: _t(\"Save\"), classes: \"btn-primary\", close: true, click: function () {\n                    this.trigger_up(\"domain_selected\", {\n                        domain: this.newDomain !== null ? this.newDomain : this.domainSelector.getDomain(),\n                    });\n                }},\n                {text: _t(\"Discard\"), close: true},\n            ];\n        }\n\n        this._super(parent, _.extend({}, {\n            title: _t(\"Domain\"),\n            buttons: buttons,\n        }, options || {}));\n        this.domainSelector = new DomainSelector(this, model, Domain.prototype.arrayToString(domain), options);\n    },\n    start: function () {\n        var self = this;\n        this.opened().then(function () {\n            // this restores default modal height (bootstrap) and allows field selector to overflow\n            self.$el.css('overflow', 'visible').closest('.modal-dialog').css('height', 'auto');\n        });\n        return Promise.all([\n            this._super.apply(this, arguments),\n            this.domainSelector.appendTo(this.$el)\n        ]);\n    },\n    /**\n     * Called when the domain selector value is changed.\n     *\n     * @param {OdooEvent} ev\n     */\n    _onDomainChange: function (ev) {\n        ev.stopPropagation();\n        this.newDomain = ev.data.domain;\n    },\n});\n});\n", "odoo.define(\"web.DomainSelector\", function (require) {\n\"use strict\";\n\nvar core = require(\"web.core\");\nvar datepicker = require(\"web.datepicker\");\nvar dom = require('web.dom');\nvar Domain = require(\"web.Domain\");\nvar field_utils = require(\"web.field_utils\");\nvar ModelFieldSelector = require(\"web.ModelFieldSelector\");\nvar Widget = require(\"web.Widget\");\n\nvar _t = core._t;\nvar _lt = core._lt;\n\n// \"child_of\", \"parent_of\", \"like\", \"not like\", \"=like\", \"=ilike\"\n// are only used if user entered them manually or if got from demo data\nvar operator_mapping = {\n    \"=\": \"=\",\n    \"!=\": _lt(\"is not =\"),\n    \">\": \">\",\n    \"<\": \"<\",\n    \">=\": \">=\",\n    \"<=\": \"<=\",\n    \"ilike\": _lt(\"contains\"),\n    \"not ilike\": _lt(\"does not contain\"),\n    \"in\": _lt(\"in\"),\n    \"not in\": _lt(\"not in\"),\n\n    \"child_of\": _lt(\"child of\"),\n    \"parent_of\": _lt(\"parent of\"),\n    \"like\": \"like\",\n    \"not like\": \"not like\",\n    \"=like\": \"=like\",\n    \"=ilike\": \"=ilike\",\n\n    // custom\n    \"set\": _lt(\"is set\"),\n    \"not set\": _lt(\"is not set\"),\n};\n\n/**\n * Abstraction for widgets which can represent and allow edition of a domain.\n */\nvar DomainNode = Widget.extend({\n    events: {\n        // If click on the node add or delete button, notify the parent and let\n        // it handle the addition/removal\n        \"click .o_domain_add_node_button\": \"_onAddButtonClick\",\n        \"click .o_domain_delete_node_button\": \"_onDeleteButtonClick\",\n        // Handle visual feedback and animation\n        \"mouseenter button\": \"_onButtonEntered\",\n        \"mouseleave button\": \"_onButtonLeft\",\n    },\n    /**\n     * A DomainNode needs a model and domain to work. It can also receive a set\n     * of options.\n     *\n     * @param {Object} parent\n     * @param {string} model - the model name\n     * @param {Array|string} domain - the prefix representation of the domain\n     * @param {Object} [options] - an object with possible values:\n     * @param {boolean} [options.readonly=true] - true if is readonly\n     * @param {Array} [options.default] - default domain used when creating a\n     *   new node\n     * @param {string[]} [options.operators=null]\n     *        a list of available operators (null = all of supported ones)\n     * @param {boolean} [options.debugMode=false] - true if should be in debug\n     *\n     * @see ModelFieldSelector for other options\n     */\n    init: function (parent, model, domain, options) {\n        this._super.apply(this, arguments);\n\n        this.model = model;\n        this.options = _.extend({\n            readonly: true,\n            operators: null,\n            debugMode: false,\n        }, options || {});\n\n        this.readonly = this.options.readonly;\n        this.debug = this.options.debugMode;\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Should return if the node is representing a well-formed domain, whose\n     * field chains properly belong to the associated model.\n     *\n     * @abstract\n     * @returns {boolean}\n     */\n    isValid: function () {},\n    /**\n     * Should return the prefix domain the widget is currently representing\n     * (an array).\n     *\n     * @abstract\n     * @returns {Array}\n     */\n    getDomain: function () {},\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Called when the add button is clicked -> trigger_up an event to ask\n     * creation of a new child in its parent.\n     *\n     * @param {Event} e\n     */\n    _onAddButtonClick: function (e) {\n        e.preventDefault();\n        e.stopPropagation();\n        this.trigger_up(\"add_node_clicked\", {newBranch: !!$(e.currentTarget).data(\"branch\"), child: this});\n    },\n    /**\n     * Called when the delete button is clicked -> trigger_up an event to ask\n     * deletion of this node from its parent.\n     *\n     * @param {Event} e\n     */\n    _onDeleteButtonClick: function (e) {\n        e.preventDefault();\n        e.stopPropagation();\n        this.trigger_up(\"delete_node_clicked\", {child: this});\n    },\n    /**\n     * Called when a \"controlpanel\" button is hovered -> add classes to the\n     * domain node to add animation effects.\n     *\n     * @param {Event} e\n     */\n    _onButtonEntered: function (e) {\n        e.preventDefault();\n        e.stopPropagation();\n        var $target = $(e.currentTarget);\n        this.$el.toggleClass(\"o_hover_btns\", $target.hasClass(\"o_domain_delete_node_button\"));\n        this.$el.toggleClass(\"o_hover_add_node\", $target.hasClass(\"o_domain_add_node_button\"));\n        this.$el.toggleClass(\"o_hover_add_inset_node\", !!$target.data(\"branch\"));\n    },\n    /**\n     * Called when a \"controlpanel\" button is not hovered anymore -> remove\n     * classes from the domain node to stop animation effects.\n     *\n     * @param {Event} e\n     */\n    _onButtonLeft: function (e) {\n        e.preventDefault();\n        e.stopPropagation();\n        this.$el.removeClass(\"o_hover_btns o_hover_add_node o_hover_add_inset_node\");\n    },\n});\n\n/**\n * DomainNode which can handle subdomains (a domain which is composed of\n * multiple parts). It thus will be composed of other DomainTree instances\n * and/or leaf parts of a domain (@see DomainLeaf).\n */\nvar DomainTree = DomainNode.extend({\n    template: \"DomainTree\",\n    events: _.extend({}, DomainNode.prototype.events, {\n        \"click .o_domain_tree_operator_selector .dropdown-item\": \"_onOperatorChange\",\n    }),\n    custom_events: {\n        // If a domain child sends a request to add a child or remove one, call\n        // the appropriate methods. Propagates the event until success.\n        \"add_node_clicked\": \"_onNodeAdditionAsk\",\n        \"delete_node_clicked\": \"_onNodeDeletionAsk\",\n    },\n    /**\n     * @constructor\n     * @see DomainNode.init\n     * The initialization of a DomainTree creates a \"children\" array attribute\n     * which will contain the the DomainNode children. It also deduces the\n     * operator from the domain.\n     * @see DomainTree._addFlattenedChildren\n     */\n    init: function (parent, model, domain) {\n        this._super.apply(this, arguments);\n        var parsedDomain = this._parseDomain(domain);\n        if (parsedDomain) {\n            this._initialize(parsedDomain);\n        }\n    },\n    /**\n     * @see DomainNode.start\n     * @returns {Promise}\n     */\n    start: function () {\n        this._postRender();\n        return Promise.all([\n            this._super.apply(this, arguments),\n            this._renderChildrenTo(this.$childrenContainer)\n        ]);\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @see DomainNode.isValid\n     * @returns {boolean}\n     */\n    isValid: function () {\n        for (var i = 0 ; i < this.children.length ; i++) {\n            var cValid = this.children[i].isValid();\n            if (!cValid) {\n                return cValid;\n            }\n        }\n        return this._isValid;\n    },\n    /**\n     * @see DomainNode.getDomain\n     * @returns {Array}\n     */\n    getDomain: function () {\n        var childDomains = [];\n        var nbChildren = 0;\n        _.each(this.children, function (child) {\n            var childDomain = child.getDomain();\n            if (childDomain.length) {\n                nbChildren++;\n                childDomains = childDomains.concat(child.getDomain());\n            }\n        });\n        var nbChildRequired = this.operator === \"!\" ? 1 : 2;\n        var operators = _.times(nbChildren - nbChildRequired + 1, _.constant(this.operator));\n        return operators.concat(childDomains);\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Adds a domain part to the widget.\n     * -> trigger_up \"domain_changed\" if the child is added\n     *\n     * @private\n     * @param {Array} domain - the prefix-like domain to build and add to the\n     *                       widget\n     * @param {DomainNode} afterNode - the node after which the new domain part\n     *                               must be added (at the end if not given)\n     * @returns {boolean} true if the part was added\n     *                   false otherwise (the afterNode was not found)\n     */\n    _addChild: function (domain, afterNode) {\n        var i = afterNode ? _.indexOf(this.children, afterNode) : this.children.length;\n        if (i < 0) return false;\n\n        this.children.splice(i+1, 0, instantiateNode(this, this.model, domain, this.options));\n        this.trigger_up(\"domain_changed\", {child: this});\n        return true;\n    },\n    /**\n     * Adds a child which represents the given domain. If the child has children\n     * and that the child main domain operator is the same as the current widget\n     * one, the 2-children prefix hierarchy is then simplified by making the\n     * child's children the widget's own children.\n     *\n     * @private\n     * @param {Array|string} domain - the domain of the child to add\n     */\n    _addFlattenedChildren: function (domain) {\n        var node = instantiateNode(this, this.model, domain, this.options);\n        if (node === null) {\n            return;\n        }\n        if (!node.children || node.operator !== this.operator) {\n            this.children.push(node);\n            return;\n        }\n        _.each(node.children, (function (child) {\n            child.setParent(this);\n            this.children.push(child);\n        }).bind(this));\n        node.destroy();\n    },\n    /**\n     * Changes the operator of the domain tree and notifies the parent if\n     * necessary (not silent).\n     *\n     * @private\n     * @param {string} operator - the new operator\n     * @param {boolean} silent - true if the parents should not be notified of\n     *                         the change\n     */\n    _changeOperator: function (operator, silent) {\n        this.operator = operator;\n        if (!silent) this.trigger_up(\"domain_changed\", {child: this});\n    },\n    /**\n     * @see DomainTree.init\n     * @private\n     */\n    _initialize: function (domain) {\n        this._isValid = true;\n        this.operator = domain[0];\n        this.children = [];\n        if (domain.length <= 1) {\n            return;\n        }\n\n        // Add flattened children by search the appropriate number of children\n        // in the rest of the domain (after the operator)\n        var nbLeafsToFind = 1;\n        for (var i = 1 ; i < domain.length ; i++) {\n            if (domain[i] === \"&\" || domain[i] === \"|\") {\n                nbLeafsToFind++;\n            } else if (domain[i] !== \"!\") {\n                nbLeafsToFind--;\n            }\n\n            if (!nbLeafsToFind) {\n                var partLeft = domain.slice(1, i+1);\n                var partRight = domain.slice(i+1);\n                if (partLeft.length) {\n                    this._addFlattenedChildren(partLeft);\n                }\n                if (partRight.length) {\n                    this._addFlattenedChildren(partRight);\n                }\n                break;\n            }\n        }\n        this._isValid = (nbLeafsToFind === 0);\n\n        // Mark \"!\" tree children so that they do not allow to add other\n        // children around them\n        if (this.operator === \"!\") {\n            this.children[0].noControlPanel = true;\n        }\n    },\n    /**\n     * @see DomainTree.start\n     * Initializes variables which depend on the rendered widget.\n     * @private\n     */\n    _postRender: function () {\n        this.$childrenContainer = this.$(\"> .o_domain_node_children_container\");\n    },\n    /**\n     * Removes a given child from the widget.\n     * -> trigger_up domain_changed if the child is removed\n     *\n     * @private\n     * @param {DomainNode} oldChild - the child instance to remove\n     * @returns {boolean} true if the child was removed, false otherwise (the\n     *                   widget does not own the child)\n     */\n    _removeChild: function (oldChild) {\n        var i = _.indexOf(this.children, oldChild);\n        if (i < 0) return false;\n\n        this.children[i].destroy();\n        this.children.splice(i, 1);\n        this.trigger_up(\"domain_changed\", {child: this});\n        return true;\n    },\n    /**\n     * @see DomainTree.start\n     * Appends the children domain node to the given node. This is used to\n     * render the children widget in a dummy element before adding them in the\n     * DOM, otherwhise they could be misordered as they rendering is not\n     * synchronous.\n     *\n     * @private\n     * @param {jQuery} $to - the jQuery node to which the children must be added\n     * @returns {Promise}\n     */\n    _renderChildrenTo: function ($to) {\n        var $div = $(\"<div/>\");\n        const children = this.children;\n        return Promise.all(_.map(children, (function (child) {\n            return child.appendTo($div);\n        }).bind(this))).then((function () {\n            _.each(children, function (child) {\n                child.$el.appendTo($to); // Forced to do it this way so that the\n                                         // children are not misordered\n            });\n        }).bind(this));\n    },\n    /**\n     * @param {string} domain\n     * @returns {Array[]}\n     */\n    _parseDomain: function (domain) {\n        var parsedDomain = false;\n        try {\n            parsedDomain = Domain.prototype.stringToArray(domain);\n            this.invalidDomain = false;\n        } catch (err) {\n            // TODO: domain could contain `parent` for example, which is\n            // currently not handled by the DomainSelector\n            this.invalidDomain = true;\n            this.children = [];\n        }\n        return parsedDomain;\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Called when the operator select value is changed -> change the internal\n     * operator state\n     *\n     * @param {Event} e\n     */\n    _onOperatorChange: function (e) {\n        e.preventDefault();\n        e.stopPropagation();\n        this._changeOperator($(e.target).data(\"operator\"));\n    },\n    /**\n     * Called when a node addition was asked -> add the new domain part if on\n     * the right node or let the propagation continue.\n     *\n     * @param {OdooEvent} e\n     */\n    _onNodeAdditionAsk: function (e) {\n        var domain = this.options.default || [[\"id\", \"=\", 1]];\n        if (e.data.newBranch) {\n            domain = [this.operator === \"&\" ? \"|\" : \"&\"].concat(domain).concat(domain);\n        }\n        if (this._addChild(domain, e.data.child)) {\n            e.stopPropagation();\n        }\n    },\n    /**\n     * Called when a node deletion was asked -> remove the domain part if on\n     * the right node or let the propagation continue.\n     *\n     * @param {OdooEvent} e\n     */\n    _onNodeDeletionAsk: function (e) {\n        if (this._removeChild(e.data.child)) {\n            e.stopPropagation();\n        }\n    },\n});\n\n/**\n * The DomainSelector widget can be used to build prefix char domain. It is the\n * DomainTree specialization to use to have a fully working widget.\n *\n * Known limitations:\n *\n * - Some operators like \"child_of\", \"parent_of\", \"like\", \"not like\",\n *   \"=like\", \"=ilike\" will come only if you use them from demo data or\n *   debug input.\n * - Some kind of domain can not be build right now\n *   e.g (\"country_id\", \"in\", [1,2,3]) but you can insert from debug input.\n */\nvar DomainSelector = DomainTree.extend({\n    template: \"DomainSelector\",\n    events: _.extend({}, DomainTree.prototype.events, {\n        \"click .o_domain_add_first_node_button\": \"_onAddFirstButtonClick\",\n        \"change .o_domain_debug_input\": \"_onDebugInputChange\",\n    }),\n    custom_events: _.extend({}, DomainTree.prototype.custom_events, {\n        domain_changed: \"_onDomainChange\",\n    }),\n\n    init(parent, model, domain) {\n        this._super(...arguments);\n        this.rawDomain = domain;\n        this._redrawId = 0;\n    },\n\n    start: function () {\n        var self = this;\n        return this._super.apply(this, arguments).then(function () {\n            if (self.invalidDomain) {\n                var msg = _t(\"This domain is not supported.\");\n                self.$el.html(msg);\n            }\n        });\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Changes the internal domain value and forces a reparsing and rerendering.\n     * If the internal domain value was already equal to the given one, this\n     * does nothing.\n     *\n     * @param {string} domain\n     * @returns {Promise} resolved when the rerendering is finished\n     */\n    setDomain: function (domain) {\n        if (domain === Domain.prototype.arrayToString(this.getDomain())) {\n            return Promise.resolve();\n        }\n        var parsedDomain = this._parseDomain(domain);\n        if (parsedDomain) {\n            return this._redraw(parsedDomain);\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @see DomainTree._initialize\n     */\n    _initialize: function (domain) {\n        // Check if the domain starts with implicit \"&\" operators and make them\n        // explicit. As the DomainSelector is a specialization of a DomainTree,\n        // it is waiting for a tree and not a leaf. So [] and [A] will be made\n        // explicit with [\"&\"], [\"&\", A] so that tree parsing is made correctly.\n        // Note: the domain is considered to be a valid one\n        if (domain.length > 1) {\n            Domain.prototype.normalizeArray(domain);\n        } else {\n            domain = [\"&\"].concat(domain);\n        }\n        return this._super(domain);\n    },\n    /**\n     * @see DomainTree._postRender\n     * Warns the user if the domain is not valid after rendering.\n     */\n    _postRender: function () {\n        this._super.apply(this, arguments);\n\n        // Display technical domain if in debug mode\n        this.$debugInput = this.$(\".o_domain_debug_input\");\n        if (this.$debugInput.length) {\n            this.$debugInput.val(this.rawDomain);\n            dom.autoresize(this.$debugInput);\n        }\n\n        // Warn the user if the domain is not valid after rendering\n        if (!this._isValid) {\n            this.displayNotification({ message: _t(\"Domain not supported\"), type: 'danger' });\n        }\n    },\n    /**\n     * This method is ugly but achieves the right behavior without flickering.\n     *\n     * @param {Array|string} domain\n     * @returns {Promise}\n     */\n    _redraw: function (domain) {\n        const _redrawId = ++this._redrawId;\n        var oldChildren = this.children.slice();\n        this._initialize(domain || this.getDomain());\n        return this._renderChildrenTo($(\"<div/>\")).then((function () {\n            if (_redrawId !== this._redrawId) {\n                return;\n            }\n            _.each(oldChildren, function (child) { child.destroy(); });\n            this.renderElement();\n            this._postRender();\n            _.each(this.children, (function (child) { child.$el.appendTo(this.$childrenContainer); }).bind(this));\n        }).bind(this));\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Called when the \"add a filter\" button is clicked -> adds a first domain\n     * node\n     */\n    _onAddFirstButtonClick: function () {\n        this._addChild(this.options.default || [[\"id\", \"=\", 1]]);\n    },\n    /**\n     * Called when the debug input value is changed -> notifies the change if\n     * valid or warn the user if invalid.\n     *\n     * @param {Event} e\n     */\n    _onDebugInputChange: function (e) {\n        // When the debug input changes, the string prefix domain is read. If it\n        // is syntax-valid a \"domain_changed\" event is triggered to notify the\n        // parent, but the widget isn't redrawn.\n        // If the domain is not valid, a warning is shown to the user.\n        const rawDomain = e.currentTarget.value;\n        try {\n            Domain.prototype.stringToArray(rawDomain);\n        } catch (err) { // If there is a syntax error, just ignore the change\n            this.displayNotification({ title: _t(\"Syntax error\"), message: _t(\"Domain not properly formed\"), type: 'danger' });\n            return;\n        }\n        this.trigger_up(\"domain_changed\", {\n            child: this,\n            noRedraw: true,\n            domain: rawDomain,\n            debug: true,\n        });\n    },\n    /**\n     * Called when a (child's) domain has changed -> redraw the entire tree\n     * representation if necessary\n     *\n     * @param {OdooEvent} e\n     */\n    _onDomainChange: function (e) {\n        // Add the current domain to the payload if not already there\n        e.data.domain = e.data.domain || this.getDomain();\n        this.rawDomain = Domain.prototype.arrayToString(e.data.domain);\n        // If a subdomain notifies that it underwent some modifications, the\n        // DomainSelector catches the message and performs a full re-rendering.\n        if (!e.data.noRedraw) {\n            this._redraw();\n        }\n    },\n});\n\n/**\n * DomainNode which handles a domain which cannot be split in another\n * subdomains, i.e. composed of a field chain, an operator and a value.\n */\nvar DomainLeaf = DomainNode.extend({\n    template: \"DomainLeaf\",\n    events: _.extend({}, DomainNode.prototype.events, {\n        \"change .o_domain_leaf_operator_select\": \"_onOperatorSelectChange\",\n        \"change .o_domain_leaf_value_input\": \"_onValueInputChange\",\n\n        // Handle the tags widget part (TODO should be an independant widget)\n        \"click .o_domain_leaf_value_add_tag_button\": \"on_add_tag\",\n        \"keyup .o_domain_leaf_value_tags input\": \"on_add_tag\",\n        \"click .o_domain_leaf_value_remove_tag_button\": \"on_remove_tag\",\n    }),\n    custom_events: {\n        \"field_chain_changed\": \"_onFieldChainChange\",\n    },\n    /**\n     * @see DomainNode.init\n     */\n    init: function (parent, model, domain, options) {\n        this._super.apply(this, arguments);\n\n        var currentDomain = Domain.prototype.stringToArray(domain);\n        this.chain = currentDomain[0][0];\n        this.operator = currentDomain[0][1];\n        this.value = currentDomain[0][2];\n\n        this.operator_mapping = operator_mapping;\n    },\n    /**\n     * Prepares the information the rendering of the widget will need by\n     * pre-instantiating its internal field selector widget.\n     *\n     * @returns {Promise}\n     */\n    willStart: function () {\n        var defs = [this._super.apply(this, arguments)];\n\n        // In edit mode, instantiate a field selector. This is done here in\n        // willStart and prepared by appending it to a dummy element because the\n        // DomainLeaf rendering need some information which cannot be computed\n        // before the ModelFieldSelector is fully rendered (TODO).\n        this.fieldSelector = new ModelFieldSelector(\n            this,\n            this.model,\n            this.chain !== undefined ? this.chain.toString().split(\".\") : [],\n            this.options\n        );\n        defs.push(this.fieldSelector.appendTo($(\"<div/>\")).then((function () {\n            var wDefs = [];\n\n            if (!this.readonly) {\n                // Set list of operators according to field type\n                var selectedField = this.fieldSelector.getSelectedField() || {};\n                this.operators = this._getOperatorsFromType(selectedField.type);\n                if (_.contains([\"child_of\", \"parent_of\", \"like\", \"not like\", \"=like\", \"=ilike\"], this.operator)) {\n                    // In case user entered manually or from demo data\n                    this.operators[this.operator] = operator_mapping[this.operator];\n                } else if (!this.operators[this.operator]) {\n                    // In case the domain uses an unsupported operator for the\n                    // field type\n                    this.operators[this.operator] = \"?\";\n                }\n\n                // Set list of values according to field type\n                this.selectionChoices = null;\n                if (selectedField.type === \"boolean\") {\n                    this.selectionChoices = [[\"1\", _t(\"set (true)\")], [\"0\", _t(\"not set (false)\")]];\n                } else if (selectedField.type === \"selection\") {\n                    this.selectionChoices = selectedField.selection;\n                }\n\n                // Adapt display value and operator for rendering\n                this.displayValue = this.value;\n                try {\n                    if (selectedField && !selectedField.relation && !_.isArray(this.value)) {\n                        this.displayValue = field_utils.format[selectedField.type](this.value, selectedField);\n                    }\n                } catch (err) {/**/}\n                this.displayOperator = this.operator;\n                if (selectedField.type === \"boolean\") {\n                    this.displayValue = this.value ? \"1\" : \"0\";\n                } else if ((this.operator === \"!=\" || this.operator === \"=\") && this.value === false) {\n                    this.displayOperator = this.operator === \"!=\" ? \"set\" : \"not set\";\n                }\n\n                // TODO the value could be a m2o input, etc...\n                if (_.contains([\"date\", \"datetime\"], selectedField.type)) {\n                    this.valueWidget = new (selectedField.type === \"datetime\" ? datepicker.DateTimeWidget : datepicker.DateWidget)(this);\n                    wDefs.push(this.valueWidget.appendTo(\"<div/>\").then((function () {\n                        this.valueWidget.$el.addClass(\"o_domain_leaf_value_input\");\n                        this.valueWidget.setValue(moment(this.value));\n                        this.valueWidget.on(\"datetime_changed\", this, function () {\n                            this._changeValue(this.valueWidget.getValue());\n                        });\n                    }).bind(this)));\n                }\n\n                return Promise.all(wDefs);\n            }\n        }).bind(this)));\n\n        return Promise.all(defs);\n    },\n    /**\n     * @see DomainNode.start\n     * Appends the prepared field selector and value widget.\n     *\n     * @returns {Promise}\n     */\n    start: function () {\n        this.fieldSelector.$el.prependTo(this.$(\"> .o_domain_leaf_info, > .o_domain_leaf_edition\")); // place the field selector\n        if (!this.readonly && this.valueWidget) { // In edit mode, place the value widget if any\n            this.$(\".o_domain_leaf_value_input\").replaceWith(this.valueWidget.$el);\n        }\n        return this._super.apply(this, arguments);\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @see DomainNode.isValid\n     * @returns {boolean}\n     */\n    isValid: function () {\n        return this.fieldSelector && this.fieldSelector.isValid();\n    },\n    /**\n     * @see DomainNode.getDomain\n     * @returns {Array}\n     */\n    getDomain: function () {\n        return [[this.chain, this.operator, this.value]];\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Handles a field chain change in the domain. In that case, the operator\n     * should be adapted to a valid one for the new field and the value should\n     * also be adapted to the new field and/or operator.\n     *\n     * -> trigger_up domain_changed event to ask for a re-rendering (if not\n     * silent)\n     *\n     * @param {string[]} chain - the new field chain\n     * @param {boolean} silent - true if the method call should not trigger_up a\n     *                         domain_changed event\n     */\n    _changeFieldChain: function (chain, silent) {\n        this.chain = chain.join(\".\");\n        this.fieldSelector.setChain(chain).then((function () {\n            if (!this.fieldSelector.isValid()) return;\n\n            var selectedField = this.fieldSelector.getSelectedField() || {};\n            var operators = this._getOperatorsFromType(selectedField.type);\n            if (operators[this.operator] === undefined) {\n                this._changeOperator(\"=\", true);\n            }\n            this._changeValue(this.value, true);\n\n            if (!silent) this.trigger_up(\"domain_changed\", {child: this});\n        }).bind(this));\n    },\n    /**\n     * Handles an operator change in the domain. In that case, the value should\n     * be adapted to a valid one for the new operator.\n     *\n     * -> trigger_up domain_changed event to ask for a re-rendering\n     * (if not silent)\n     *\n     * @param {string} operator - the new operator\n     * @param {boolean} silent - true if the method call should not trigger_up a\n     *                         domain_changed event\n     */\n    _changeOperator: function (operator, silent) {\n        this.operator = operator;\n\n        if (_.contains([\"set\", \"not set\"], this.operator)) {\n            this.operator = this.operator === \"not set\" ? \"=\" : \"!=\";\n            this.value = false;\n        } else if (_.contains([\"in\", \"not in\"], this.operator)) {\n            this.value = _.isArray(this.value) ? this.value : this.value ? (\"\" + this.value).split(\",\") : [];\n        } else {\n            if (_.isArray(this.value)) {\n                this.value = this.value.join(\",\");\n            }\n            this._changeValue(this.value, true);\n        }\n\n        if (!silent) this.trigger_up(\"domain_changed\", {child: this});\n    },\n    /**\n     * Handles a formatted value change in the domain. In that case, the value\n     * should be adapted to a valid technical one.\n     *\n     * -> trigger_up \"domain_changed\" event to ask for a re-rendering (if not\n     * silent)\n     *\n     * @param {*} value - the new formatted value\n     * @param {boolean} silent - true if the method call should not trigger_up a\n     *                         domain_changed event\n     */\n    _changeValue: function (value, silent) {\n        var couldNotParse = false;\n        var selectedField = this.fieldSelector.getSelectedField() || {};\n        try {\n            this.value = field_utils.parse[selectedField.type](value, selectedField);\n        } catch (err) {\n            this.value = value;\n            couldNotParse = true;\n        }\n\n        if (selectedField.type === \"boolean\") {\n            if (!_.isBoolean(this.value)) { // Convert boolean-like value to boolean\n                this.value = !!parseFloat(this.value);\n            }\n        } else if (selectedField.type === \"selection\") {\n            if (!_.some(selectedField.selection, (function (option) { return option[0] === this.value; }).bind(this))) {\n                this.value = selectedField.selection[0][0];\n            }\n        } else if (_.contains([\"date\", \"datetime\"], selectedField.type)) {\n            if (couldNotParse || _.isBoolean(this.value)) {\n                this.value = field_utils.parse[selectedField.type](field_utils.format[selectedField.type](moment())).toJSON(); // toJSON to get date with server format\n            } else {\n                this.value = this.value.toJSON(); // toJSON to get date with server format\n            }\n        } else {\n            // Never display \"true\" or \"false\" strings from boolean value\n            if (_.isBoolean(this.value)) {\n                this.value = \"\";\n            } else if (_.isObject(this.value) && !_.isArray(this.value)) { // Can be object if parsed to x2x representation\n                this.value = this.value.id || value || \"\";\n            }\n        }\n\n        if (!silent) this.trigger_up(\"domain_changed\", {child: this});\n    },\n    /**\n     * Returns the mapping of \"technical operator\" to \"display operator value\"\n     * of the operators which are available for the given field type.\n     *\n     * @private\n     * @param {string} type - the field type\n     * @returns {Object} a map of all associated operators and their label\n     */\n    _getOperatorsFromType: function (type) {\n        var operators = {};\n\n        switch (type) {\n            case \"boolean\":\n                operators = {\n                    \"=\": _t(\"is\"),\n                    \"!=\": _t(\"is not\"),\n                };\n                break;\n\n            case \"char\":\n            case \"text\":\n            case \"html\":\n                operators = _.pick(operator_mapping, \"=\", \"!=\", \"ilike\", \"not ilike\", \"set\", \"not set\", \"in\", \"not in\");\n                break;\n\n            case \"many2many\":\n            case \"one2many\":\n            case \"many2one\":\n                operators = _.pick(operator_mapping, \"=\", \"!=\", \"ilike\", \"not ilike\", \"set\", \"not set\");\n                break;\n\n            case \"integer\":\n            case \"float\":\n            case \"monetary\":\n                operators = _.pick(operator_mapping, \"=\", \"!=\", \">\", \"<\", \">=\", \"<=\", \"ilike\", \"not ilike\", \"set\", \"not set\");\n                break;\n\n            case \"selection\":\n                operators = _.pick(operator_mapping, \"=\", \"!=\", \"set\", \"not set\");\n                break;\n\n            case \"date\":\n            case \"datetime\":\n                operators = _.pick(operator_mapping, \"=\", \"!=\", \">\", \"<\", \">=\", \"<=\", \"set\", \"not set\");\n                break;\n\n            default:\n                operators = _.extend({}, operator_mapping);\n                break;\n        }\n\n        if (this.options.operators) {\n            operators = _.pick.apply(_, [operators].concat(this.options.operators));\n        }\n\n        return operators;\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Called when the operator select value is change -> change the operator\n     * internal state and adapt\n     *\n     * @param {Event} e\n     */\n    _onOperatorSelectChange: function (e) {\n        this._changeOperator($(e.currentTarget).val());\n    },\n    /**\n     * Called when the value input value is changed -> change the internal value\n     * state and adapt\n     *\n     * @param {Event} e\n     */\n    _onValueInputChange: function (e) {\n        if (e.currentTarget !== e.target) return;\n        this._changeValue($(e.currentTarget).val());\n    },\n    /**\n     * Called when the field selector value is changed -> change the internal\n     * chain state and adapt\n     *\n     * @param {OdooEvent} e\n     */\n    _onFieldChainChange: function (e) {\n        this._changeFieldChain(e.data.chain);\n    },\n\n    // TODO The two following functions should be in an independant widget\n    on_add_tag: function (e) {\n        if (e.type === \"keyup\" && e.which !== $.ui.keyCode.ENTER) return;\n        if (!_.contains([\"not in\", \"in\"], this.operator)) return;\n\n        var values = _.isArray(this.value) ? this.value.slice() : [];\n\n        var $input = this.$(\".o_domain_leaf_value_tags input\");\n        var val = $input.val().trim();\n        if (val && values.indexOf(val) < 0) {\n            values.push(val);\n            _.defer(this._changeValue.bind(this, values));\n            $input.focus();\n        }\n    },\n    on_remove_tag: function (e) {\n        var values = _.isArray(this.value) ? this.value.slice() : [];\n        var val = this.$(e.currentTarget).data(\"value\");\n\n        var index = values.indexOf(val);\n        if (index >= 0) {\n            values.splice(index, 1);\n            _.defer(this._changeValue.bind(this, values));\n        }\n    },\n});\n\n/**\n * Instantiates a DomainTree if the given domain contains several parts and a\n * DomainLeaf if it only contains one part. Returns null otherwise.\n *\n * @param {Object} parent\n * @param {string} model - the model name\n * @param {Array|string} domain - the prefix representation of the domain\n * @param {Object} options - @see DomainNode.init.options\n * @returns {DomainTree|DomainLeaf|null}\n */\nfunction instantiateNode(parent, model, domain, options) {\n    if (domain.length > 1) {\n        return new DomainTree(parent, model, domain, options);\n    } else if (domain.length === 1) {\n        return new DomainLeaf(parent, model, domain, options);\n    }\n    return null;\n}\n\nreturn DomainSelector;\n});\n", "odoo.define('web.IFrameWidget', function (require) {\n\"use strict\";\n\nvar Widget = require('web.Widget');\n\n/**\n * Generic widget to create an iframe that listens for clicks\n *\n * It should be extended by overwriting the methods::\n *\n *      init: function(parent) {\n *          this._super(parent, <url_of_iframe>);\n *      },\n *      _onIFrameClicked: function(e){\n *          filter the clicks you want to use and apply\n *          an action on it\n *      }\n */\nvar IFrameWidget = Widget.extend({\n    tagName: 'iframe',\n    /**\n     * @constructor\n     * @param {Widget} parent\n     * @param {string} url\n     */\n    init: function (parent, url) {\n        this._super(parent);\n        this.url = url;\n    },\n    /**\n     * @override\n     * @returns {Promise}\n     */\n    start: function () {\n        this.$el.css({height: '100%', width: '100%', border: 0});\n        this.$el.attr({src: this.url});\n        this.$el.on(\"load\", this._bindEvents.bind(this));\n        return this._super();\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Called when the iframe is ready\n     */\n    _bindEvents: function (){\n        this.$el.contents().click(this._onIFrameClicked.bind(this));\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @param {MouseEvent} event\n     */\n    _onIFrameClicked: function (event){\n    }\n});\n\nreturn IFrameWidget;\n\n});\n", "odoo.define(\"web.ModelFieldSelector\", function (require) {\n\"use strict\";\n\nvar core = require(\"web.core\");\nvar Widget = require(\"web.Widget\");\nconst { fuzzyLookup } = require('@web/core/utils/search');\n\nvar _t = core._t;\n\n/**\n * Field Selector Cache - TODO Should be improved to use external cache ?\n * - Stores fields per model used in field selector\n * @see ModelFieldSelector._getModelFieldsFromCache\n */\nvar modelFieldsCache = {\n    cache: {},\n    cacheDefs: {},\n};\n\ncore.bus.on('clear_cache', null, function () {\n    modelFieldsCache.cache = {};\n    modelFieldsCache.cacheDefs = {};\n});\n\n/**\n * The ModelFieldSelector widget can be used to display/select a particular\n * field chain from a given model.\n */\nvar ModelFieldSelector = Widget.extend({\n    template: \"ModelFieldSelector\",\n    events: {},\n    editionEvents: {\n        // Handle popover opening and closing\n        \"focusin\": \"_onFocusIn\",\n        \"focusout\": \"_onFocusOut\",\n        \"click .o_field_selector_close\": \"_onCloseClick\",\n\n        // Handle popover field navigation\n        \"click .o_field_selector_prev_page\": \"_onPrevPageClick\",\n        \"click .o_field_selector_next_page\": \"_onNextPageClick\",\n        \"click li.o_field_selector_select_button\": \"_onLastFieldClick\",\n\n        // Handle a direct change in the debug input\n        \"change input.o_field_selector_debug\": \"_onDebugInputChange\",\n\n        // Handle a change in the search input\n        \"keyup .o_field_selector_search > input\": \"_onSearchInputChange\",\n\n        // Handle keyboard and mouse navigation to build the field chain\n        \"mouseover li.o_field_selector_item\": \"_onItemHover\",\n        \"keydown\": \"_onKeydown\",\n    },\n    /**\n     * @constructor\n     * The ModelFieldSelector requires a model and a field chain to work with.\n     *\n     * @param {string} model - the model name (e.g. \"res.partner\")\n     * @param {string[]} chain - list of the initial field chain parts\n     * @param {Object} [options] - some key-value options\n     * @param {string} [options.order='string']\n     *                 an ordering key for displayed fields\n     * @param {boolean} [options.readonly=true] - true if should be readonly\n     * @param {function} [options.filter]\n     *                 a function to filter the fetched fields\n     * @param {Object} [options.filters]\n     *                 some key-value options to filter the fetched fields\n     * @param {boolean} [options.filters.searchable=true]\n     *                  true if only the searchable fields have to be used\n     * @param {Object[]} [options.fields=null]\n     *                   the list of fields info to use when no relation has\n     *                   been followed (null indicates the widget has to request\n     *                   the fields itself)\n     * @param {boolean|function} [options.followRelations=true]\n     *                  true if can follow relation when building the chain\n     * @param {boolean} [options.showSearchInput=true]\n     *                  false to hide a search input to filter displayed fields\n     * @param {boolean} [options.debugMode=false]\n     *                  true if the widget is in debug mode, false otherwise\n     */\n    init: function (parent, model, chain, options) {\n        this._super.apply(this, arguments);\n\n        this.model = model;\n        this.chain = chain;\n        this.options = _.extend({\n            order: 'string',\n            readonly: true,\n            filters: {},\n            fields: null,\n            filter: function () {return true;},\n            followRelations: true,\n            debugMode: false,\n            showSearchInput: true,\n        }, options || {});\n        this.options.filters = _.extend({\n            searchable: true,\n        }, this.options.filters);\n\n        if (typeof this.options.followRelations !== 'function') {\n            this.options.followRelations = this.options.followRelations ?\n                function () {return true;} :\n                function () {return false;};\n        }\n\n        this.pages = [];\n        this.dirty = false;\n\n        if (!this.options.readonly) {\n            _.extend(this.events, this.editionEvents);\n        }\n\n        this.searchValue = '';\n    },\n    /**\n     * @see Widget.willStart()\n     * @returns {Promise}\n     */\n    willStart: function () {\n        return Promise.all([\n            this._super.apply(this, arguments),\n            this._prefill()\n        ]);\n    },\n    /**\n     * @see Widget.start\n     * @returns {Promise}\n     */\n    start: function () {\n        this.$value = this.$(\".o_field_selector_value\");\n        this.$popover = this.$(\".o_field_selector_popover\");\n        this.$input = this.$popover.find(\".o_field_selector_popover_footer > input\");\n        this.$searchInput = this.$popover.find(\".o_field_selector_search > input\");\n        this.$valid = this.$(\".o_field_selector_warning\");\n\n        this._render();\n\n        return this._super.apply(this, arguments);\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Returns the field information selected by the field chain.\n     *\n     * @returns {Object}\n     */\n    getSelectedField: function () {\n        return _.findWhere(this.pages[this.chain.length - 1], {name: _.last(this.chain)});\n    },\n    /**\n     * Indicates if the field chain is valid. If the field chain has not been\n     * processed yet (the widget is not ready), this method will return\n     * undefined.\n     *\n     * @returns {boolean}\n     */\n    isValid: function () {\n        return this.valid;\n    },\n    /**\n     * Saves a new field chain (array) and re-render.\n     *\n     * @param {string[]} chain - the new field chain\n     * @returns {Promise} resolved once the re-rendering is finished\n     */\n    setChain: function (chain) {\n        if (_.isEqual(chain, this.chain)) {\n            return Promise.resolve();\n        }\n\n        this.chain = chain;\n        return this._prefill().then(this._render.bind(this));\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Adds a field name to the current field chain and marks it as dirty.\n     *\n     * @private\n     * @param {string} fieldName - the new field name to add at the end of the\n     *                           current field chain\n     */\n    _addChainNode: function (fieldName) {\n        this.dirty = true;\n        this.chain = this.chain.slice(0, this.pages.length-1);\n        this.chain.push(fieldName);\n\n        this.searchValue = '';\n        this.$searchInput.val('');\n    },\n    /**\n     * Searches a field in the last page by its name.\n     *\n     * @private\n     * @param {string} name - the name of the field to find\n     * @returns {Object} the field data found in the last popover page thanks\n     *                   to its name\n     /*/\n    _getLastPageField: function (name) {\n        return _.findWhere(_.last(this.pages), {\n            name: name,\n        });\n    },\n    /**\n     * Searches the cache for the given model fields, according to the given\n     * filter. If the cache does not know about the model, the cache is updated.\n     *\n     * @private\n     * @param {string} model\n     * @param {Object} filters @see ModelFieldSelector.init.options.filters\n     * @returns {Object[]} a list of the model fields info, sorted by field\n     *                     non-technical names\n     */\n    _getModelFieldsFromCache: function (model, filters) {\n        var self = this;\n        var def = modelFieldsCache.cacheDefs[model];\n        if (!def) {\n            def = modelFieldsCache.cacheDefs[model] = this._rpc({\n                    model: model,\n                    method: 'fields_get',\n                    args: [\n                        false,\n                        [\"store\", \"searchable\", \"type\", \"string\", \"relation\", \"selection\", \"related\"]\n                    ],\n                    context: this.getSession().user_context,\n                })\n                .then((function (fields) {\n                    modelFieldsCache.cache[model] = sortFields(fields, model, self.options.order);\n                }).bind(this));\n        }\n        return def.then((function () {\n            return _.filter(modelFieldsCache.cache[model], function (f) {\n                return (!filters.searchable || f.searchable) && self.options.filter(f);\n            });\n        }).bind(this));\n    },\n    /**\n     * Adds a new page to the popover following the given field relation and\n     * adapts the chain node according to this given field.\n     *\n     * @private\n     * @param {Object} field - the field to add to the chain node\n     */\n    _goToNextPage: function (field) {\n        if (!_.isEqual(this._getLastPageField(field.name), field)) return;\n\n        this._validate(true);\n        this._addChainNode(field.name);\n        this._pushPageData(field.relation).then(this._render.bind(this));\n    },\n    /**\n     * Removes the last page, adapts the field chain and displays the new\n     * last page.\n     *\n     * @private\n     */\n    _goToPrevPage: function () {\n        if (this.pages.length <= 0) return;\n\n        this._validate(true);\n        this._removeChainNode();\n        if (this.pages.length > 1) {\n            this.pages.pop();\n        }\n        this._render();\n    },\n    /**\n     * Closes the popover and marks the field as selected. If the field chain\n     * changed, it notifies its parents. If not open, this does nothing.\n     *\n     * @private\n     */\n    _hidePopover: function () {\n        if (!this._isOpen) return;\n\n        this._isOpen = false;\n        this.$popover.addClass('d-none');\n\n        let $modalBodyEl = this.$el.closest('.modal-body');\n        if ($modalBodyEl.length !== 0) {\n            $modalBodyEl.css('overflow', '');\n        }\n\n        if (this.dirty) {\n            this.dirty = false;\n            this.trigger_up(\"field_chain_changed\", {chain: this.chain});\n        }\n    },\n    /**\n     * Prepares the popover by filling its pages according to the current field\n     * chain.\n     *\n     * @private\n     * @returns {Promise} resolved once the whole field chain has been\n     *                     processed\n     */\n    _prefill: function () {\n        this.pages = [];\n        return this._pushPageData(this.model).then((function () {\n            this._validate(true);\n            return (this.chain.length ? processChain.call(this, this.chain.slice().reverse()) : Promise.resolve());\n        }).bind(this));\n\n        function processChain(chain) {\n            var fieldName = chain.pop();\n            var field = this._getLastPageField(fieldName);\n            if (field && field.relation) {\n                if (chain.length) { // Fetch next chain node if any and possible\n                    return this._pushPageData(field.relation).then(processChain.bind(this, chain));\n                } else { // Simply update the last popover page\n                    return this._pushPageData(field.relation);\n                }\n            } else if (field && chain.length === 0) { // Last node fetched\n                return Promise.resolve();\n            } else if (!field && fieldName === \"1\") { // TRUE_LEAF\n                this._validate(true);\n            } else if (!field && fieldName === \"0\") { // FALSE_LEAF\n                this._validate(true);\n            } else { // Wrong node chain\n                this._validate(false);\n            }\n            return Promise.resolve();\n        }\n    },\n    /**\n     * Gets the fields of a particular model and adds them to a new last\n     * popover page.\n     *\n     * @private\n     * @param {string} model - the model name whose fields have to be fetched\n     * @returns {Promise} resolved once the fields have been added\n     */\n    _pushPageData: function (model) {\n        var def;\n        if (this.model === model && this.options.fields) {\n            def = Promise.resolve(sortFields(this.options.fields, model, this.options.order));\n        } else {\n            def = this._getModelFieldsFromCache(model, this.options.filters);\n        }\n        return def.then((function (fields) {\n            this.pages.push(fields);\n        }).bind(this));\n    },\n    /**\n     * Removes the last field name at the end of the current field chain and\n     * marks it as dirty.\n     *\n     * @private\n     */\n    _removeChainNode: function () {\n        this.dirty = true;\n        this.chain = this.chain.slice(0, this.pages.length-1);\n        this.chain.pop();\n    },\n    /**\n     * Updates the rendering of the value (the serie of tags separated by\n     * arrows). It also adapts the content of the popover.\n     *\n     * @private\n     */\n    _render: function () {\n\n        // Render the chain value\n        this.$value.html(core.qweb.render(this.template + \".value\", {\n            chain: this.chain,\n            pages: this.pages,\n        }));\n\n        // Toggle the warning message\n        this.$valid.toggleClass('d-none', !!this.isValid());\n\n        // Adapt the popover content\n        var page = _.last(this.pages);\n        var title = \"\";\n        if (this.pages.length > 1) {\n            var prevField = _.findWhere(this.pages[this.pages.length - 2], {\n                name: (this.chain.length === this.pages.length) ? this.chain[this.chain.length - 2] : _.last(this.chain),\n            });\n            if (prevField) title = prevField.string;\n        }\n        this.$(\".o_field_selector_popover_header .o_field_selector_title\").text(title);\n\n        var lines = _.filter(page, this.options.filter);\n        if (this.searchValue) {\n            lines = fuzzyLookup(this.searchValue, lines, (l) => l.string);\n        }\n\n        this.$(\".o_field_selector_page\").replaceWith(core.qweb.render(this.template + \".page\", {\n            lines: lines,\n            followRelations: this.options.followRelations,\n            debug: this.options.debugMode,\n        }));\n        this.$input.val(this.chain.join(\".\"));\n    },\n    /**\n     * Selects the given field and adapts the chain node according to it.\n     * It also closes the popover and so notifies the parents about the change.\n     *\n     * @param {Object} field - the field to select\n     */\n    _selectField: function (field) {\n        if (!_.isEqual(this._getLastPageField(field.name), field)) return;\n\n        this._validate(true);\n        this._addChainNode(field.name);\n        this._render();\n        this._hidePopover();\n    },\n    /**\n     * Shows the popover to select the field chain. This assumes that the\n     * popover has finished its rendering (fully rendered widget or resolved\n     * deferred of @see setChain). If already open, this does nothing.\n     *\n     * @private\n     */\n    _showPopover: function () {\n        if (this._isOpen) return;\n\n        let $modalBodyEl = this.$el.closest('.modal-body');\n        if ($modalBodyEl.length !== 0) {\n            $modalBodyEl.css('overflow', 'visible');\n        }\n\n        this._isOpen = true;\n        this.$popover.removeClass('d-none');\n    },\n    /**\n     * Toggles the valid status of the widget and display the error message if\n     * it is not valid.\n     *\n     * @private\n     * @param {boolean} valid - true if the widget is valid, false otherwise\n     */\n    _validate: function (valid) {\n        this.valid = !!valid;\n\n        if (!this.valid) {\n            this.displayNotification({\n                message: _t(\"Invalid field chain. You may have used a non-existing field name or followed a non-relational field.\"),\n                type: 'danger',\n            });\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Called when the widget is focused -> opens the popover\n     */\n    _onFocusIn: function () {\n        clearTimeout(this._hidePopoverTimeout);\n        this._showPopover();\n    },\n    /**\n     * Called when the widget is blurred -> closes the popover\n     */\n    _onFocusOut: function () {\n        this._hidePopoverTimeout = _.defer(this._hidePopover.bind(this));\n    },\n    /**\n     * Called when the popover \"cross\" icon is clicked -> closes the popover\n     */\n    _onCloseClick: function () {\n        this._hidePopover();\n    },\n    /**\n     * Called when the popover \"previous\" icon is clicked -> removes last chain\n     * node\n     */\n    _onPrevPageClick: function () {\n        this._goToPrevPage();\n    },\n    /**\n     * Called when a popover relation field button is clicked -> adds it to\n     * the chain\n     *\n     * @param {Event} e\n     */\n    _onNextPageClick: function (e) {\n        e.stopPropagation();\n        this._goToNextPage(this._getLastPageField($(e.currentTarget).data(\"name\")));\n    },\n    /**\n     * Called when a popover non-relation field button is clicked -> adds it to\n     * chain and closes the popover\n     *\n     * @param {Event} e\n     */\n    _onLastFieldClick: function (e) {\n        this._selectField(this._getLastPageField($(e.currentTarget).data(\"name\")));\n    },\n    /**\n     * Called when the debug input value is changed -> adapts the chain\n     */\n    _onDebugInputChange: function () {\n        var userChainStr = this.$input.val();\n        var userChain = userChainStr.split(\".\");\n        if (!this.options.followRelations && userChain.length > 1) {\n            this.displayNotification({\n                title: _t(\"Relation not allowed\"),\n                message: _t(\"You cannot follow relations for this field chain construction\"),\n                type: 'danger',\n            });\n            userChain = [userChain[0]];\n        }\n        this.setChain(userChain).then((function () {\n            this.trigger_up(\"field_chain_changed\", {chain: this.chain});\n        }).bind(this));\n    },\n    /**\n     * Called when the search input value is changed -> adapts the popover\n     */\n    _onSearchInputChange: function () {\n        this.searchValue = this.$searchInput.val();\n        this._render();\n    },\n    /**\n     * Called when a popover field button item is hovered -> toggles its\n     * \"active\" status\n     *\n     * @param {Event} e\n     */\n    _onItemHover: function (e) {\n        this.$(\"li.o_field_selector_item\").removeClass(\"active\");\n        $(e.currentTarget).addClass(\"active\");\n    },\n    /**\n     * Called when the user uses the keyboard when the widget is focused\n     * -> handles field keyboard navigation\n     *\n     * @param {Event} e\n     */\n    _onKeydown: function (e) {\n        if (!this.$popover.is(\":visible\")) return;\n        var inputHasFocus = this.$input.is(\":focus\");\n        var searchInputHasFocus = this.$searchInput.is(\":focus\");\n\n        switch (e.which) {\n            case $.ui.keyCode.UP:\n            case $.ui.keyCode.DOWN:\n                e.preventDefault();\n                var $active = this.$(\"li.o_field_selector_item.active\");\n                var $to = $active[e.which === $.ui.keyCode.DOWN ? \"next\" : \"prev\"](\".o_field_selector_item\");\n                if ($to.length) {\n                    $active.removeClass(\"active\");\n                    $to.addClass(\"active\");\n                    this.$popover.focus();\n\n                    var $page = $to.closest(\".o_field_selector_page\");\n                    var full_height = $page.height();\n                    var el_position = $to.position().top;\n                    var el_height = $to.outerHeight();\n                    var current_scroll = $page.scrollTop();\n                    if (el_position < 0) {\n                        $page.scrollTop(current_scroll - el_height);\n                    } else if (full_height < el_position + el_height) {\n                        $page.scrollTop(current_scroll + el_height);\n                    }\n                }\n                break;\n            case $.ui.keyCode.RIGHT:\n                if (inputHasFocus) break;\n                e.preventDefault();\n                var name = this.$(\"li.o_field_selector_item.active\").data(\"name\");\n                if (name) {\n                    var field = this._getLastPageField(name);\n                    if (field.relation) {\n                        this._goToNextPage(field);\n                    }\n                }\n                break;\n            case $.ui.keyCode.LEFT:\n                if (inputHasFocus) break;\n                e.preventDefault();\n                this._goToPrevPage();\n                break;\n            case $.ui.keyCode.ESCAPE:\n                e.stopPropagation();\n                this._hidePopover();\n                break;\n            case $.ui.keyCode.ENTER:\n                if (inputHasFocus || searchInputHasFocus) break;\n                e.preventDefault();\n                this._selectField(this._getLastPageField(this.$(\"li.o_field_selector_item.active\").data(\"name\")));\n                break;\n        }\n    }\n});\n\nreturn ModelFieldSelector;\n\n/**\n * Allows to transform a mapping field name -> field info in an array of the\n * field infos, sorted by field user name (\"string\" value). The field infos in\n * the final array contain an additional key \"name\" with the field name.\n *\n * @param {Object} fields - the mapping field name -> field info\n * @param {string} model\n * @returns {Object[]} the field infos sorted by field \"string\" (field infos\n *                     contain additional keys \"model\" and \"name\" with the field\n *                     name)\n */\nfunction sortFields(fields, model, order) {\n    var array = _.chain(fields)\n        .pairs()\n        .sortBy(function (p) { return p[1].string; });\n    if (order !== 'string') {\n        array = array.sortBy(function (p) {return p[1][order]; });\n    }\n    return array.map(function (p) {\n            return _.extend({\n                name: p[0],\n                model: model,\n            }, p[1]);\n        }).value();\n}\n});\n", "odoo.define('web.PieChart', function (require) {\n\"use strict\";\n\n/**\n * This widget render a Pie Chart. It is used in the dashboard view.\n */\n\nvar core = require('web.core');\nvar Domain = require('web.Domain');\nvar viewRegistry = require('web.view_registry');\nvar Widget = require('web.Widget');\nvar widgetRegistry = require('web.widget_registry');\nconst { loadLegacyViews } = require(\"@web/legacy/legacy_views\");\n\nvar qweb = core.qweb;\n\nvar PieChart = Widget.extend({\n    className: 'o_pie_chart',\n    xmlDependencies: ['/web/static/src/legacy/xml/chart.xml'],\n\n    /**\n     * @override\n     * @param {Widget} parent\n     * @param {Object} record\n     * @param {Object} node node from arch\n     */\n    init: function (parent, record, node) {\n        this._super.apply(this, arguments);\n\n        var modifiers = node.attrs.modifiers;\n        var domain = record.domain.concat(\n            Domain.prototype.stringToArray(modifiers.domain || '[]'));\n        var arch = qweb.render('web.PieChart', {\n            modifiers: modifiers,\n            title: node.attrs.title || modifiers.title || modifiers.measure,\n        });\n\n        var pieChartContext = JSON.parse(JSON.stringify(record.context));\n        delete pieChartContext.graph_mode;\n        delete pieChartContext.graph_measure;\n        delete pieChartContext.graph_groupbys;\n\n        this.subViewParams = {\n            modelName: record.model,\n            withButtons: false,\n            withControlPanel: false,\n            withSearchPanel: false,\n            isEmbedded: true,\n            useSampleModel: record.isSample,\n            mode: 'pie',\n        };\n        this.subViewParams.searchQuery = {\n            context: pieChartContext,\n            domain: domain,\n            groupBy: [],\n            timeRanges: record.timeRanges || {},\n        };\n\n        this.viewInfo = {\n            arch: arch,\n            fields: record.fields,\n            viewFields: record.fieldsInfo.dashboard,\n        };\n    },\n    /**\n     * Instantiates the pie chart view and starts the graph controller.\n     *\n     * @override\n     */\n    willStart: async function () {\n        var self = this;\n        const _super = this._super.bind(this, ...arguments);\n        await loadLegacyViews({ rpc: this._rpc.bind(this) });\n        var def1 = _super();\n\n        var SubView = viewRegistry.get('graph');\n        var subView = new SubView(this.viewInfo, this.subViewParams);\n        var def2 = subView.getController(this).then(function (controller) {\n            self.controller = controller;\n            return self.controller.appendTo(document.createDocumentFragment());\n        });\n        return Promise.all([def1, def2]);\n    },\n    /**\n     * @override\n     */\n    start: function () {\n        this.$el.append(this.controller.$el);\n        return this._super.apply(this, arguments);\n    },\n    /**\n     * Call `on_attach_callback` for each subview\n     *\n     * @override\n     */\n    on_attach_callback: function () {\n        this.controller.on_attach_callback();\n    },\n});\n\nwidgetRegistry.add('pie_chart', PieChart);\n\nreturn PieChart;\n\n});\n", "odoo.define('web.ribbon', function (require) {\n    'use strict';\n\n    /**\n     * This widget adds a ribbon on the top right side of the form\n     *\n     *      - You can specify the text with the title attribute.\n     *      - You can specify the tooltip with the tooltip attribute.\n     *      - You can specify a background color for the ribbon with the bg_color attribute\n     *        using bootstrap classes :\n     *        (bg-primary, bg-secondary, bg-success, bg-danger, bg-warning, bg-info,\n     *        bg-light, bg-dark, bg-white)\n     *\n     *        If you don't specify the bg_color attribute the bg-success class will be used\n     *        by default.\n     */\n\n    var widgetRegistry = require('web.widget_registry');\n    var Widget = require('web.Widget');\n\n    var RibbonWidget = Widget.extend({\n        template: 'web.ribbon',\n        xmlDependencies: ['/web/static/src/legacy/xml/ribbon.xml'],\n\n        /**\n         * @param {Object} options\n         * @param {string} options.attrs.title\n         * @param {string} options.attrs.text same as title\n         * @param {string} options.attrs.tooltip\n         * @param {string} options.attrs.bg_color\n         */\n        init: function (parent, data, options) {\n            this._super.apply(this, arguments);\n            this.text = options.attrs.title || options.attrs.text;\n            this.tooltip = options.attrs.tooltip;\n            this.className = options.attrs.bg_color ? options.attrs.bg_color : 'bg-success';\n            if (this.text.length > 15) {\n                this.className += ' o_small';\n            } else if (this.text.length > 10) {\n                this.className += ' o_medium';\n            }\n        },\n    });\n\n    widgetRegistry.add('web_ribbon', RibbonWidget);\n\n    return RibbonWidget;\n});\n", "odoo.define('web.WeekDays', function (require) {\n    'use strict';\n\n    const CustomCheckbox = require('web.CustomCheckbox');\n    const Registry = require('web.widgetRegistry');\n    const utils = require('web.utils');\n    const { useState } = owl.hooks;\n\n\n    class WeekDays extends owl.Component {\n        constructor(parent) {\n            super(...arguments);\n            this.parent = parent;\n            this.weekdaysShort = [];\n            this._sortWeekdays();\n            this.state = useState({ days: this._prepareData(this.props.record.data) });\n            this.mode = this.props.options.mode;\n        }\n\n        /**\n         * @override\n         * @param {Object} nextProps\n         * @param {Object} nextProps.record\n         */\n        async willUpdateProps(nextProps) {\n            this.state.days = this._prepareData(nextProps.record.data);\n            this.mode = nextProps.options.mode;\n        }\n\n        //--------------------------------------------------------------------------\n        // Private\n        //--------------------------------------------------------------------------\n\n        /**\n         * Prepares weekdays data for state\n         * @private\n         * @param {Object} data\n         */\n        _prepareData(data) {\n            const weekdays = {};\n            this.weekdaysShort.forEach((day) => {\n                weekdays[day] = {\n                    id: `${day}-${utils.generateID()}`,\n                    value: data[day],\n                };\n            });\n            return weekdays;\n        }\n        /**\n         * Generates short week days as per start of the week of language\n         * @private\n         */\n        _sortWeekdays() {\n            const weekStart = this.env._t.database.parameters.week_start;\n            const weekdaysShort = ['mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun'];\n            const slicedArray1 = weekdaysShort.slice(weekStart - 1, weekdaysShort.length);\n            const slicedArray2 = weekdaysShort.slice(0, weekStart - 1);\n            this.weekdaysShort = slicedArray1.concat(slicedArray2);\n        }\n\n        //--------------------------------------------------------------------------\n        // Handlers\n        //--------------------------------------------------------------------------\n\n        /**\n         * @private\n         * @param {MouseEvent} ev\n         */\n        _onChange(ev) {\n            const field = ev.target.id.split(\"-\")[0];\n            this.trigger('field-changed', {\n                dataPointID: this.props.record.id,\n                changes: { [field]: ev.target.checked },\n            });\n        }\n    }\n\n    WeekDays.components = { CustomCheckbox };\n    WeekDays.template = \"web.RecurrentTask\";\n    WeekDays.fieldDependencies = {\n        sun: {type: 'boolean'},\n        mon: {type: 'boolean'},\n        tue: {type: 'boolean'},\n        wed: {type: 'boolean'},\n        thu: {type: 'boolean'},\n        fri: {type: 'boolean'},\n        sat: {type: 'boolean'},\n    };\n\n    Registry.add('week_days', WeekDays);\n\n    return WeekDays;\n});\n", "odoo.define('web.signature_widget', function (require) {\n\"use strict\";\n\nconst framework = require('web.framework');\nconst SignatureDialog = require('web.signature_dialog');\nconst widgetRegistry = require('web.widget_registry');\nconst Widget = require('web.Widget');\n\n\nconst WidgetSignature = Widget.extend({\n    custom_events: Object.assign({}, Widget.prototype.custom_events, {\n        upload_signature: '_onUploadSignature',\n    }),\n    events: Object.assign({}, Widget.prototype.events, {\n        'click .o_sign_label': '_onClickSignature',\n    }),\n    template: 'SignButton',\n    /**\n     * @constructor\n     * @param {Widget} parent\n     * @param {Object} record\n     * @param {Object} nodeInfo\n     */\n    init: function (parent, record, nodeInfo) {\n        this._super.apply(this, arguments);\n        this.res_id = record.res_id;\n        this.res_model = record.model;\n        this.state = record;\n        this.node = nodeInfo;\n        // signature_field is the field on which the signature image will be\n        // saved (`signature` by default).\n        this.signature_field = this.node.attrs.signature_field || 'signature';\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Open a dialog to sign.\n     *\n     * @private\n     */\n    _onClickSignature: function () {\n        const nameAndSignatureOptions = {\n            displaySignatureRatio: 3,\n            mode: 'draw',\n            noInputName: true,\n            signatureType: 'signature',\n        };\n\n        if (this.node.attrs.full_name) {\n            let signName;\n            const fieldFullName = this.state.data[this.node.attrs.full_name];\n            if (fieldFullName && fieldFullName.type === 'record') {\n                signName = fieldFullName.data.display_name;\n            } else {\n                signName = fieldFullName;\n            }\n            nameAndSignatureOptions.defaultName = signName || undefined;\n        }\n\n        nameAndSignatureOptions.defaultFont = this.node.attrs.default_font || '';\n        this.signDialog = new SignatureDialog(this, {\n            nameAndSignatureOptions: nameAndSignatureOptions,\n        });\n        this.signDialog.open();\n    },\n    /**\n     * Upload the signature image (write it on the corresponding field) and\n     * close the dialog.\n     *\n     * @returns {Promise}\n     * @private\n     */\n    _onUploadSignature: function (ev) {\n        const file = ev.data.signatureImage[1];\n        const always = () => {\n            this.trigger_up('reload');\n            framework.unblockUI();\n        };\n        framework.blockUI();\n        const rpcProm = this._rpc({\n            model: this.res_model,\n            method: 'write',\n            args: [[this.res_id], {\n                [this.signature_field]: file,\n            }],\n        });\n        rpcProm.then(always).guardedCatch(always);\n        return rpcProm;\n    },\n});\n\nwidgetRegistry.add('signature', WidgetSignature);\n\n});\n", "odoo.define('web.AttachDocument', function (require) {\n\"use static\";\n\nvar core = require('web.core');\nvar framework = require('web.framework');\nvar {Markup} = require('web.utils');\nvar widgetRegistry = require('web.widget_registry');\nvar Widget = require('web.Widget');\n\nvar _t = core._t;\n\nvar AttachDocument = Widget.extend({\n    template: 'AttachDocument',\n    events: {\n        'click': '_onClickAttachDocument',\n        'change input.o_input_file': '_onFileChanged',\n    },\n    /**\n     * @constructor\n     * @param {Widget} parent\n     * @param {Object} record\n     * @param {Object} nodeInfo\n     */\n    init: function (parent, record, nodeInfo) {\n        this._super.apply(this, arguments);\n        this.res_id = record.res_id;\n        this.res_model = record.model;\n        this.state = record;\n        this.node = nodeInfo;\n        this.fileuploadID = _.uniqueId('o_fileupload');\n    },\n    /**\n     * @override\n     */\n    start: function () {\n        $(window).on(this.fileuploadID, this._onFileLoaded.bind(this));\n        return this._super.apply(this, arguments);\n    },\n    /**\n     * @override\n     */\n    destroy: function () {\n        $(window).off(this.fileuploadID);\n        this._super.apply(this, arguments);\n    },\n\n    //--------------------------------------------------------------------------\n    // private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Helper function to display a warning that some fields have an invalid\n     * value. This is used when a save operation cannot be completed.\n     *\n     * @private\n     * @param {string[]} invalidFields - list of field names\n     */\n    _notifyInvalidFields: function (invalidFields) {\n        var fields = this.state.fields;\n        var warnings = invalidFields.map(function (fieldName) {\n            var fieldStr = fields[fieldName].string;\n            return _.str.sprintf('<li>%s</li>', _.escape(fieldStr));\n        });\n        warnings.unshift('<ul>');\n        warnings.push('</ul>');\n        this.displayNotification({\n            title: _t(\"Invalid fields:\"),\n            message: Markup(warnings.join('')),\n            type: 'danger',\n        });\n     },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Opens File Explorer dialog if all fields are valid and record is saved\n     *\n     * @private\n     * @param {Event} ev\n     */\n    _onClickAttachDocument: function (ev) {\n        if ($(ev.target).is('input.o_input_file')) {\n            return;\n        }\n        var fieldNames = this.getParent().canBeSaved(this.state.id);\n        if (fieldNames.length) {\n            return this._notifyInvalidFields(fieldNames);\n        }\n        // We want to save record on widget click and then open File Selection Explorer\n        // but due to this security restriction give warning to save record first.\n        // https://stackoverflow.com/questions/29728705/trigger-click-on-input-file-on-asynchronous-ajax-done/29873845#29873845\n        if (!this.res_id) {\n            return this.displayNotification({ message: _t('Please save before attaching a file'), type: 'danger' });\n        }\n        this.$('input.o_input_file').trigger('click');\n    },\n    /**\n     * Submits file\n     *\n     * @private\n     * @param {Event} ev\n     */\n    _onFileChanged: function (ev) {\n        ev.stopPropagation();\n        this.$('form.o_form_binary_form').trigger('submit');\n        framework.blockUI();\n    },\n    /**\n     * Call action given as node attribute after file submission\n     *\n     * @private\n     */\n    _onFileLoaded: function () {\n        var self = this;\n        // the first argument isn't a file but the jQuery.Event\n        var files = Array.prototype.slice.call(arguments, 1);\n        return new Promise(function (resolve) {\n            if (self.node.attrs.action) {\n                self._rpc({\n                    model: self.res_model,\n                    method: self.node.attrs.action,\n                    args: [self.res_id],\n                    kwargs: {\n                        attachment_ids: _.map(files, function (file) {\n                            return file.id;\n                        }),\n                    }\n                }).then(function () {\n                    resolve();\n                });\n            } else {\n                resolve();\n            }\n        }).then(function () {\n            self.trigger_up('reload');\n            framework.unblockUI();\n        });\n    },\n\n});\nwidgetRegistry.add('attach_document', AttachDocument);\n});\n", "odoo.define('web.Apps', function (require) {\n\"use strict\";\n\nvar AbstractAction = require('web.AbstractAction');\nvar config = require('web.config');\nvar core = require('web.core');\nvar framework = require('web.framework');\nvar session = require('web.session');\n\nvar _t = core._t;\n\nvar apps_client = null;\n\nvar Apps = AbstractAction.extend({\n    contentTemplate: 'EmptyComponent',\n    remote_action_tag: 'loempia.embed',\n    failback_action_id: 'base.open_module_tree',\n\n    init: function(parent, action) {\n        this._super(parent, action);\n        var options = action.params || {};\n        this.params = options;  // NOTE forwarded to embedded client action\n    },\n\n    get_client: function() {\n        // return the client via a promise, resolved or rejected depending if\n        // the remote host is available or not.\n        var check_client_available = function(client) {\n            var i = new Image();\n            var def = new Promise(function (resolve, reject) {\n                i.onerror = function() {\n                    reject(client);\n                };\n                i.onload = function() {\n                    resolve(client);\n                };\n            });\n            var ts = new Date().getTime();\n            i.src = _.str.sprintf('%s/web/static/src/img/sep-a.gif?%s', client.origin, ts);\n            return def;\n        };\n        if (apps_client) {\n            return check_client_available(apps_client);\n        } else {\n            return this._rpc({model: 'ir.module.module', method: 'get_apps_server'})\n                .then(function(u) {\n                    var link = $(_.str.sprintf('<a href=\"%s\"></a>', u))[0];\n                    var host = _.str.sprintf('%s//%s', link.protocol, link.host);\n                    var dbname = link.pathname;\n                    if (dbname[0] === '/') {\n                        dbname = dbname.substr(1);\n                    }\n                    var client = {\n                        origin: host,\n                        dbname: dbname\n                    };\n                    apps_client = client;\n                    return check_client_available(client);\n                });\n        }\n    },\n\n    destroy: function() {\n        $(window).off(\"message.\" + this.uniq);\n        if (this.$ifr) {\n            this.$ifr.remove();\n            this.$ifr = null;\n        }\n        return this._super();\n    },\n\n    _on_message: function($e) {\n        var self = this, client = this.client, e = $e.originalEvent;\n\n        if (e.origin !== client.origin) {\n            return;\n        }\n\n        var dispatcher = {\n            'event': function(m) { self.trigger('message:' + m.event, m); },\n            'action': function(m) {\n                self.do_action(m.action).then(function(r) {\n                    var w = self.$ifr[0].contentWindow;\n                    w.postMessage({id: m.id, result: r}, client.origin);\n                });\n            },\n            'rpc': function(m) {\n                return self._rpc({route: m.args[0], params: m.args[1]}).then(function(r) {\n                    var w = self.$ifr[0].contentWindow;\n                    w.postMessage({id: m.id, result: r}, client.origin);\n                });\n            },\n            'Model': function(m) {\n                return self._rpc({model: m.model, method: m.args[0], args: m.args[1]})\n                    .then(function(r) {\n                        var w = self.$ifr[0].contentWindow;\n                        w.postMessage({id: m.id, result: r}, client.origin);\n                    });\n            },\n        };\n        // console.log(e.data);\n        if (!_.isObject(e.data)) { return; }\n        if (dispatcher[e.data.type]) {\n            dispatcher[e.data.type](e.data);\n        }\n    },\n\n    start: function() {\n        var self = this;\n        return new Promise(function (resolve, reject) {\n            self.get_client().then(function (client) {\n                self.client = client;\n\n                var qs = {db: client.dbname};\n                if (config.isDebug()) {\n                    qs.debug = odoo.debug;\n                }\n                var u = $.param.querystring(client.origin + \"/apps/embed/client\", qs);\n                var css = {width: '100%', height: '750px'};\n                self.$ifr = $('<iframe>').attr('src', u);\n\n                self.uniq = _.uniqueId('apps');\n                $(window).on(\"message.\" + self.uniq, self.proxy('_on_message'));\n\n                self.on('message:ready', self, function(m) {\n                    var w = this.$ifr[0].contentWindow;\n                    var act = {\n                        type: 'ir.actions.client',\n                        tag: this.remote_action_tag,\n                        params: _.extend({}, this.params, {\n                            db: session.db,\n                            origin: session.origin,\n                        })\n                    };\n                    w.postMessage({type:'action', action: act}, client.origin);\n                });\n\n                self.on('message:set_height', self, function(m) {\n                    this.$ifr.height(m.height);\n                });\n\n                self.on('message:blockUI', self, function() { framework.blockUI(); });\n                self.on('message:unblockUI', self, function() { framework.unblockUI(); });\n                self.on('message:warn', self, function(m) {self.displayNotification({ title: m.title, message: m.message, sticky: m.sticky, type: 'danger' }); });\n\n                self.$ifr.appendTo(self.$('.o_content')).css(css).addClass('apps-client');\n\n                resolve();\n            }, function() {\n                self.displayNotification({ title: _t('Odoo Apps will be available soon'), message: _t('Showing locally available modules'), sticky: true, type: 'danger' });\n                return self._rpc({\n                    route: '/web/action/load',\n                    params: {action_id: self.failback_action_id},\n                }).then(function(action) {\n                    return self.do_action(action, {clear_breadcrumbs: true});\n                }).then(reject, reject);\n            });\n        });\n    }\n});\n\nvar AppsUpdates = Apps.extend({\n    remote_action_tag: 'loempia.embed.updates',\n});\n\ncore.action_registry.add(\"apps\", Apps);\ncore.action_registry.add(\"apps.updates\", AppsUpdates);\n\nreturn Apps;\n\n});\n", "/** @odoo-module alias=web.env **/\n\n/**\n * This file defines the env to use in the webclient.\n */\n\nimport commonEnv from 'web.commonEnv';\nimport dataManager from 'web.data_manager';\nimport { blockUI, unblockUI } from \"web.framework\";\n\nconst env = Object.assign(commonEnv, { dataManager });\nenv.services = Object.assign(env.services, { blockUI, unblockUI });\n\nexport default env;\n", "odoo.define(\"web.Model\", function (require) {\n    \"use strict\";\n\n    const { groupBy, partitionBy } = require(\"web.utils\");\n    const Registry = require(\"web.Registry\");\n\n    const { Component, core } = owl;\n    const { EventBus, Observer } = core;\n    const isNotNull = (val) => val !== null && val !== undefined;\n\n    /**\n     * Feature extension of the class Model.\n     * @see {Model}\n     */\n    class ModelExtension {\n        /**\n         * @param {Object} config\n         * @param {Object} config.env\n         */\n        constructor(config) {\n            this.config = config;\n            this.env = this.config.env;\n            this.shouldLoad = true;\n            this.state = {};\n        }\n\n        //---------------------------------------------------------------------\n        // Public\n        //---------------------------------------------------------------------\n\n        /**\n         * Used by the parent model to initiate a load action. The actual\n         * loading of the extension is determined by the \"shouldLoad\" property.\n         * @param {Object} params\n         */\n        async callLoad(params) {\n            if (this.shouldLoad) {\n                this.shouldLoad = false;\n                await this.load(params);\n            }\n        }\n\n        /**\n         * @param {string} method\n         * @param  {...any} args\n         */\n        dispatch(method, ...args) {\n            if (method in this) {\n                this[method](...args);\n            }\n        }\n\n        /**\n         * Exports the current state of the extension.\n         * @returns {Object}\n         */\n        exportState() {\n            return this.state;\n        }\n\n        /**\n         * Meant to return the result of the appropriate getter or do nothing\n         * if not concerned by the given property.\n         * @abstract\n         * @param {string} property\n         * @param  {...any} args\n         * @returns {null}\n         */\n        get() {\n            return null;\n        }\n\n        /**\n         * Imports the given state after parsing it. If no state is given the\n         * extension will prepare a new state and will need to be loaded.\n         * @param {Object} [state]\n         */\n        importState(state) {\n            this.shouldLoad = !state;\n            if (this.shouldLoad) {\n                this.prepareState();\n            } else {\n                Object.assign(this.state, state);\n            }\n        }\n\n        /**\n         * Called and awaited on initial model load.\n         * @abstract\n         * @param {Object} params\n         * @returns {Promise}\n         */\n        async load(/* params */) {\n            /* ... */\n        }\n\n        /**\n         * Called on initialization if no imported state for the extension is\n         * found.\n         * @abstract\n         */\n        prepareState() {\n            /* ... */\n        }\n    }\n    /**\n     * The layer of an extension indicates with which other extensions this one\n     * will be loaded. This property must be overridden in case the model\n     * depends on other extensions to be loaded first.\n     */\n    ModelExtension.layer = 0;\n\n    /**\n     * Model\n     *\n     * The purpose of the class Model and the associated hook useModel\n     * is to offer something similar to an owl store but with no automatic\n     * notification (and rendering) of components when the 'state' used in the\n     * model would change. Instead, one should call the \"__notifyComponents\"\n     * function whenever it is useful to alert registered component.\n     * Nevertheless, when calling a method through the 'dispatch' method, a\n     * notification does take place automatically, and registered components\n     * (via useModel) are rendered.\n     *\n     * It is highly expected that this class will change in a near future. We\n     * don't have the necessary hindsight to be sure its actual form is good.\n     *\n     * The following snippets show a typical use case of the model system: a\n     * search model with a control panel extension feature.\n     *\n     *-------------------------------------------------------------------------\n     * MODEL AND EXTENSIONS DEFINITION\n     *-------------------------------------------------------------------------\n     *\n     * 1. Definition of the main model\n     * @see Model\n     * ```\n     *  class ActionModel extends Model {\n     *      // ...\n     *  }\n     * ```\n     *\n     * 2. Definition of the model extension\n     * @see ModelExtension\n     * ```\n     *  class ControlPanelModelExtension extends ActionModel.Extension {\n     *      // ...\n     *  }\n     * ```\n     *\n     * 3. Registration of the extension into the main model\n     * @see Registry()\n     * ```\n     *  ActionModel.registry.add(\"ControlPanel\", ControlPanelModelExtension, 10);\n     * ```\n     *\n     *-------------------------------------------------------------------------\n     * ON VIEW/ACTION INIT\n     *-------------------------------------------------------------------------\n     *\n     * 4. Creation of the core model and its extensions\n     * @see Model.prototype.constructor()\n     * ```\n     *  const extensions = {\n     *      SearchPanel: {\n     *          // ...\n     *      }\n     *  }\n     *  const searchModelConfig = {\n     *      // ...\n     *  };\n     *  const actionModel = new ActionModel(extensions, searchModelConfig);\n     * ```\n     *\n     * 5. Loading of all extensions' asynchronous data\n     * @see Model.prototype.load()\n     * ```\n     *  await actionModel.load();\n     * ```\n     *\n     * 6. Subscribing to the model changes\n     * @see useModel()\n     * ```\n     *  class ControlPanel extends Component {\n     *      constructor() {\n     *          super(...arguments);\n     *          // env must contain the actionModel\n     *          this.actionModel = useModel('actionModel');\n     *      }\n     *  }\n     * ```\n     *\n     *-------------------------------------------------------------------------\n     * MODEL USAGE ON RUNTIME\n     *-------------------------------------------------------------------------\n     *\n     * Case: dispatch an action\n     * @see Model.prototype.dispatch()\n     * ```\n     *  actionModel.dispatch(\"updateProperty\", value);\n     * ```\n     *\n     * Case: call a getter\n     * @see Model.prototype.get()\n     * ```\n     *  const result = actionModel.get(\"property\");\n     * ```\n     *\n     * @abstract\n     * @extends EventBus\n     */\n    class Model extends EventBus {\n        /**\n         * Instantiated extensions are determined by the `extensions` argument:\n         * - keys are the extensions names as added in the registry\n         * - values are the local configurations given to each extension\n         * The extensions are grouped by the sequence number they where\n         * registered with in the registry. Extensions being on the same level\n         * will be loaded in parallel; this means that all extensions belonging\n         * to the same group are awaited before loading the next group.\n         * @param {Object<string, any>} [extensions={}]\n         * @param {Object} [globalConfig={}] global configuration: can be\n         *      accessed by itself and each of the added extensions.\n         * @param {Object} [globalConfig.env]\n         * @param {string} [globalConfig.importedState]\n         */\n        constructor(extensions = {}, globalConfig = {}) {\n            super();\n\n            this.config = globalConfig;\n            this.env = this.config.env;\n\n            this.dispatching = false;\n            this.extensions = [];\n            this.externalState = {};\n            this.mapping = {};\n            this.rev = 1;\n\n            const { name, registry } = this.constructor;\n            if (!registry || !(registry instanceof Registry)) {\n                throw new Error(`Unimplemented registry on model \"${name}\".`);\n            }\n            // Order, group and sequencially instantiate all extensions\n            const registryExtensions = Object.entries(registry.entries());\n            const extensionNameLayers = registryExtensions.map(\n                ([name, { layer }]) => ({ name, layer })\n            );\n            const groupedNameLayers = groupBy(extensionNameLayers, \"layer\");\n            for (const groupNameLayers of Object.values(groupedNameLayers)) {\n                for (const { name } of groupNameLayers) {\n                    if (name in extensions) {\n                        this.addExtension(name, extensions[name]);\n                    }\n                }\n            }\n            this.importState(this.config.importedState);\n        }\n\n        //---------------------------------------------------------------------\n        // Public\n        //---------------------------------------------------------------------\n\n        /**\n         * Method used internally to instantiate all extensions. Can also be\n         * called externally to add extensions after model instantiation.\n         * @param {string} extensionName\n         * @param {Object} extensionConfig\n         */\n        addExtension(extensionName, extensionConfig) {\n            const { name, registry } = this.constructor;\n            const Extension = registry.get(extensionName);\n            if (!Extension) {\n                throw new Error(`Unknown model extension \"${extensionName}\" in model \"${name}\"`);\n            }\n            // Extension config = this.config \u222a extension.config\n            const get = this.__get.bind(this, Extension.name);\n            const trigger = this.trigger.bind(this);\n            const config = Object.assign({ get, trigger }, this.config, extensionConfig);\n            const extension = new Extension(config);\n            if (!(Extension.layer in this.extensions)) {\n                this.extensions[Extension.layer] = [];\n            }\n            this.extensions[Extension.layer].push(extension);\n        }\n\n        /**\n         * Returns the result of the first related method on any instantiated\n         * extension. This method must be overridden if multiple extensions\n         * return a value with a common method (and dispatchAll does not\n         * suffice). After the dispatch of the action, all models are partially\n         * reloaded and components are notified afterwards.\n         * @param {string} method\n         * @param {...any} args\n         */\n        dispatch(method, ...args) {\n            const isInitialDispatch = !this.dispatching;\n            this.dispatching = true;\n            for (const extension of this.extensions.flat()) {\n                extension.dispatch(method, ...args);\n            }\n            if (!isInitialDispatch) {\n                return;\n            }\n            this.dispatching = false;\n            let rev = this.rev;\n            // Calls 'after dispatch' hooks\n            // Purpose: fetch updated data from the server. This is considered\n            // a loading action and is thus performed by groups instead of\n            // loading all extensions at once.\n            this._loadExtensions({ isInitialLoad: false }).then(() => {\n                // Notifies subscribed components\n                // Purpose: re-render components bound by 'useModel'\n                if (rev === this.rev) {\n                    this._notifyComponents();\n                }\n            });\n        }\n\n        /**\n         * Stringifies and exports an object holding the exported state of each\n         * active extension.\n         * @returns {string}\n         */\n        exportState() {\n            const exported = {};\n            for (const extension of this.extensions.flat()) {\n                exported[extension.constructor.name] = extension.exportState();\n            }\n            const fullState = Object.assign({}, this.externalState, exported);\n            return JSON.stringify(fullState);\n        }\n\n        /**\n         * Returns the result of the first related getter on any instantiated\n         * extension. This method must be overridden if multiple extensions\n         * share a common getter (and getAll does not make the job).\n         * @param {string} property\n         * @param  {...any} args\n         * @returns {any}\n         */\n        get(property, ...args) {\n            for (const extension of this.extensions.flat()) {\n                const result = extension.get(property, ...args);\n                if (isNotNull(result)) {\n                    return result;\n                }\n            }\n            return null;\n        }\n\n        /**\n         * Parses the given stringified state object and imports each state\n         * part to its related extension.\n         * @param {string} [stringifiedState=\"null\"]\n         */\n        importState(stringifiedState = \"null\") {\n            const state = JSON.parse(stringifiedState) || {};\n            Object.assign(this.externalState, state);\n            for (const extension of this.extensions.flat()) {\n                extension.importState(state[extension.constructor.name]);\n            }\n        }\n\n        /**\n         * Must be called after construction and state preparation/import.\n         * Waits for all asynchronous work needed by the model extensions to be\n         * ready.\n         * /!\\ The current model extensions do not require a smarter system at\n         * the moment (therefore using layers instead of dependencies). It\n         * should be changed if at some point an extension needs another\n         * specific extension to be loaded instead of a whole batch (with the\n         * current system some promises will be waited needlessly).\n         * @returns {Promise}\n         */\n        async load() {\n            await this._loadExtensions({ isInitialLoad: true });\n        }\n\n        //---------------------------------------------------------------------\n        // Private\n        //---------------------------------------------------------------------\n\n        /**\n         * Returns the list of the results of all extensions providing a getter\n         * for the given property returning a non-null value, excluding the\n         * extension whose name is equal to \"excluded\". This method is given to\n         * each extension in the \"config\" object bound to the model scope and\n         * having the extension name bound as the first argument.\n         * @private\n         * @param {string} excluded\n         * @param {string} property\n         * @param  {...any} args\n         * @returns {any[]}\n         */\n        __get(excluded, property, ...args) {\n            const results = [];\n            for (const extension of this.extensions.flat()) {\n                if (extension.constructor.name !== excluded) {\n                    const result = extension.get(property, ...args);\n                    if (isNotNull(result)) {\n                        results.push(result);\n                    }\n                }\n            }\n            return results;\n        }\n\n        /**\n         * Private handler to loop over all extension layers sequencially and\n         * wait for a given callback to be completed on all extensions of a\n         * same layer.\n         * @private\n         * @param {Object} params\n         * @param {boolean} params.isInitialLoad whether this call comes\n         *      from the initial load.\n         * @returns {Promise}\n         */\n        async _loadExtensions(params) {\n            for (let layer = 0; layer < this.extensions.length; layer++) {\n                await Promise.all(this.extensions[layer].map(\n                    (extension) => extension.callLoad(params)\n                ));\n            }\n        }\n\n        /**\n         * @see Context.__notifyComponents() in owl.js for explanation\n         * @private\n         */\n        async _notifyComponents() {\n            const rev = ++this.rev;\n            const subscriptions = this.subscriptions.update || [];\n            const groups = partitionBy(subscriptions, (s) =>\n                s.owner ? s.owner.__owl__.depth : -1\n            );\n            for (let group of groups) {\n                const proms = group.map((sub) =>\n                    sub.callback.call(sub.owner, rev)\n                );\n                Component.scheduler.flush();\n                await Promise.all(proms);\n            }\n        }\n    }\n\n    Model.Extension = ModelExtension;\n\n    /**\n     * This is more or less the hook 'useContextWithCB' from owl only slightly\n     * simplified.\n     *\n     * @param {string} modelName\n     * @returns {model}\n     */\n    function useModel(modelName) {\n        const component = Component.current;\n        const model = component.env[modelName];\n        if (!(model instanceof Model)) {\n            throw new Error(`No Model found when connecting '${\n                component.name\n                }'`);\n        }\n\n        const mapping = model.mapping;\n        const __owl__ = component.__owl__;\n        const componentId = __owl__.id;\n        if (!__owl__.observer) {\n            __owl__.observer = new Observer();\n            __owl__.observer.notifyCB = component.render.bind(component);\n        }\n        const currentCB = __owl__.observer.notifyCB;\n        __owl__.observer.notifyCB = function () {\n            if (model.rev > mapping[componentId]) {\n                return;\n            }\n            currentCB();\n        };\n        mapping[componentId] = 0;\n        const renderFn = __owl__.renderFn;\n        __owl__.renderFn = function (comp, params) {\n            mapping[componentId] = model.rev;\n            return renderFn(comp, params);\n        };\n\n        model.on(\"update\", component, async (modelRev) => {\n            if (mapping[componentId] < modelRev) {\n                mapping[componentId] = modelRev;\n                await component.render();\n            }\n        });\n\n        const __destroy = component.__destroy;\n        component.__destroy = (parent) => {\n            model.off(\"update\", component);\n            __destroy.call(component, parent);\n        };\n\n        return model;\n    }\n\n    return {\n        Model,\n        useModel,\n    };\n});\n", "odoo.define('web.OwlCompatibility', function () {\n    \"use strict\";\n\n    /**\n     * This file defines the necessary tools for the transition phase where Odoo\n     * legacy widgets and Owl components will coexist. There are two possible\n     * scenarios:\n     *  1) An Owl component has to instantiate legacy widgets\n     *  2) A legacy widget has to instantiate Owl components\n     */\n\n    const { Component, hooks, tags } = owl;\n    const { useRef, useSubEnv } = hooks;\n    const { xml } = tags;\n\n    const widgetSymbol = odoo.widgetSymbol;\n    const children = new WeakMap(); // associates legacy widgets with their Owl children\n\n    const templateForLegacy = tags.xml`<div/>`;\n    const templateForOwl = tags.xml`<t t-component=\"props.Component\" t-props=\"childProps\" />`;\n    /**\n     * Case 1) An Owl component has to instantiate legacy widgets\n     * ----------------------------------------------------------\n     *\n     * The ComponentAdapter is an Owl component meant to be used as universal\n     * adapter for Owl components that embed Odoo legacy widgets (or dynamically\n     * both Owl components and Odoo legacy widgets), e.g.:\n     *\n     *                           Owl Component\n     *                                 |\n     *                         ComponentAdapter (Owl component)\n     *                                 |\n     *                       Legacy Widget(s) (or Owl component(s))\n     *\n     *\n     * The adapter takes the component/widget class as 'Component' prop, and the\n     * arguments (except first arg 'parent') to initialize it as props.\n     * For instance:\n     *     <ComponentAdapter Component=\"LegacyWidget\" params=\"params\"/>\n     * will be translated to:\n     *     const LegacyWidget = this.props.Component;\n     *     const legacyWidget = new LegacyWidget(this, this.props.params);\n     *\n     * If more than one argument (in addition to 'parent') is given to initialize\n     * the legacy widget, the arguments order (to initialize the sub widget) has\n     * to be somehow specified. There are two alternatives. One can either (1)\n     * specify the prop 'widgetArgs', corresponding to the array of arguments,\n     * otherwise (2) a subclass of ComponentAdapter has to be defined. This\n     * subclass must override the 'widgetArgs' getter to translate arguments\n     * received as props to an array of arguments for the call to init.\n     * For instance:\n     *     (1) <ComponentAdapter Component=\"LegacyWidget\" firstArg=\"a\" secondArg=\"b\" widgetsArgs=\"[a, b]\"/>\n     *     (2) class SpecificAdapter extends ComponentAdapter {\n     *             get widgetArgs() {\n     *                 return [this.props.firstArg, this.props.secondArg];\n     *             }\n     *         }\n     *         <SpecificAdapter Component=\"LegacyWidget\" firstArg=\"a\" secondArg=\"b\"/>\n     *\n     * If the legacy widget has to be updated when props change, one must define\n     * a subclass of ComponentAdapter to override 'updateWidget' and 'renderWidget'. The\n     * 'updateWidget' function takes the nextProps as argument, and should update the\n     * internal state of the widget (might be async, and return a Promise).\n     * However, to ensure that the DOM is updated all at once, it shouldn't do\n     * a re-rendering. This is the role of function 'renderWidget', which will be\n     * called just before patching the DOM, and which thus must be synchronous.\n     * For instance:\n     *     class SpecificAdapter extends ComponentAdapter {\n     *         updateWidget(nextProps) {\n     *             return this.widget.updateState(nextProps);\n     *         }\n     *         renderWidget() {\n     *             return this.widget.render();\n     *         }\n     *     }\n     */\n    class ComponentAdapter extends Component {\n        /**\n         * Creates the template on-the-fly, depending on the type of Component\n         * (legacy widget or Owl component).\n         *\n         * @override\n         */\n        constructor(parent, props) {\n            if (!props.Component) {\n                throw Error(`ComponentAdapter: 'Component' prop is missing.`);\n            }\n            let template;\n            if (!(props.Component.prototype instanceof Component)) {\n                template = templateForLegacy;\n            } else {\n                template = templateForOwl;\n            }\n            ComponentAdapter.template = template;\n            super(...arguments);\n            this.template = template;\n            ComponentAdapter.template = null;\n\n            this.widget = null; // widget instance, if Component is a legacy widget\n        }\n\n        get childProps() {\n            if (!this._childProps) {\n                this._childProps = Object.assign({}, this.props);\n                delete this._childProps.Component;\n            }\n            return this._childProps;\n        }\n\n        /**\n         * Starts the legacy widget (not in the DOM yet)\n         *\n         * @override\n         */\n        willStart() {\n            if (!(this.props.Component.prototype instanceof Component)) {\n                this.widget = new this.props.Component(this, ...this.widgetArgs);\n                return this.widget._widgetRenderAndInsert(() => {});\n            }\n        }\n\n        /**\n         * Updates the internal state of the legacy widget (but doesn't re-render\n         * it yet).\n         *\n         * @override\n         */\n        willUpdateProps(nextProps) {\n            if (this.widget) {\n                return this.updateWidget(nextProps);\n            }\n        }\n\n        /**\n         * Hooks just before the actual patch to replace the fake div in the\n         * vnode by the actual node of the legacy widget. If the widget has to\n         * be re-render (because it has previously been updated), re-render it.\n         * This must be synchronous.\n         *\n         * @override\n         */\n        __patch(target, vnode) {\n            if (this.widget) {\n                if (this.__owl__.vnode) { // not at first rendering\n                    this.renderWidget();\n                }\n                vnode.elm = this.widget.el;\n            }\n            const result = super.__patch(...arguments);\n            if (this.widget && this.el !== this.widget.el) {\n                this.__owl__.vnode.elm = this.widget.el;\n            }\n            return result;\n        }\n\n        /**\n         * @override\n         */\n        mounted() {\n            if (this.widget && this.widget.on_attach_callback) {\n                this.widget.on_attach_callback();\n            }\n        }\n\n        /**\n         * @override\n         */\n        willUnmount() {\n            if (this.widget && this.widget.on_detach_callback) {\n                this.widget.on_detach_callback();\n            }\n        }\n\n        /**\n         * @override\n         */\n        __destroy() {\n            super.__destroy(...arguments);\n            if (this.widget) {\n                this.widget.destroy();\n            }\n        }\n\n        /**\n         * Getter that translates the props (except 'Component') into the array\n         * of arguments used to initialize the legacy widget.\n         *\n         * Must be overriden if at least two props (other that Component) are\n         * given.\n         *\n         * @returns {Array}\n         */\n        get widgetArgs() {\n            if (this.props.widgetArgs) {\n                return this.props.widgetArgs;\n            }\n            const args = Object.keys(this.props);\n            args.splice(args.indexOf('Component'), 1);\n            if (args.length > 1) {\n                throw new Error(`ComponentAdapter has more than 1 argument, 'widgetArgs' must be overriden.`);\n            }\n            return args.map(a => this.props[a]);\n        }\n\n        /**\n         * Can be overriden to update the internal state of the widget when props\n         * change. To ensure that the DOM is updated at once, this function should\n         * not do a re-rendering (which should be done by 'render' instead).\n         *\n         * @param {Object} nextProps\n         * @returns {Promise}\n         */\n        updateWidget(/*nextProps*/) {\n            if (this.env.isDebug('assets')) {\n                console.warn(`ComponentAdapter: Widget could not be updated, maybe override 'updateWidget' function?`);\n            }\n        }\n\n        /**\n         * Can be overriden to re-render the widget after an update. This\n         * function will be called just before patchin the DOM, s.t. the DOM is\n         * updated at once. It must be synchronous\n         */\n        renderWidget() {\n            if (this.env.isDebug('assets')) {\n                console.warn(`ComponentAdapter: Widget could not be re-rendered, maybe override 'renderWidget' function?`);\n            }\n        }\n\n        /**\n         * Mocks _trigger_up to redirect Odoo legacy events to OWL events.\n         *\n         * @private\n         * @param {OdooEvent} ev\n         */\n        _trigger_up(ev) {\n            const evType = ev.name;\n            const payload = ev.data;\n            if (evType === 'call_service') {\n                let args = payload.args || [];\n                if (payload.service === 'ajax' && payload.method === 'rpc') {\n                    // ajax service uses an extra 'target' argument for rpc\n                    args = args.concat(ev.target);\n                }\n                const service = this.env.services[payload.service];\n                //If the service doesn't exist it means that it was translated to Owl\n                if (service) {\n                    const result = service[payload.method].apply(service, args);\n                    payload.callback(result);\n                } else {\n                    throw new Error(\n                        `The service \"${payload.service}\" is not present in the legacy owl environment.\n                         You should probably create a mapper in @web/legacy/utils`\n                    );\n                }\n            } else if (evType === 'get_session') {\n                if (payload.callback) {\n                    payload.callback(this.env.session);\n                }\n            } else if (evType === 'load_views') {\n                const params = {\n                    model: payload.modelName,\n                    context: payload.context,\n                    views_descr: payload.views,\n                };\n                this.env.dataManager\n                    .load_views(params, payload.options || {})\n                    .then(payload.on_success);\n            } else if (evType === 'load_filters') {\n                return this.env.dataManager\n                    .load_filters(payload)\n                    .then(payload.on_success);\n            } else {\n                payload.__targetWidget = ev.target;\n                this.trigger(evType.replace(/_/g, '-'), payload);\n            }\n        }\n    }\n\n\n    /**\n     * Case 2) A legacy widget has to instantiate Owl components\n     * ---------------------------------------------------------\n     *\n     * The WidgetAdapterMixin and the ComponentWrapper are meant to be used\n     * together when an Odoo legacy widget needs to instantiate Owl components.\n     * In this case, the widgets/components hierarchy would look like:\n     *\n     *             Legacy Widget + WidgetAdapterMixin\n     *                          |\n     *                 ComponentWrapper (Owl component)\n     *                          |\n     *                    Owl Component\n     *\n     * In this case, the parent legacy widget must use the WidgetAdapterMixin,\n     * which ensures that Owl hooks (mounted, willUnmount, destroy...) are\n     * properly called on the sub components. Moreover, it must instantiate a\n     * ComponentWrapper, and provide it the Owl component class to use alongside\n     * its props. This wrapper will ensure that the Owl component will be\n     * correctly updated (with willUpdateProps) like it would be if it was embed\n     * in an Owl hierarchy. Moreover, this wrapper automatically redirects all\n     * events triggered by the Owl component (or its descendants) to legacy\n     * custom events (trigger_up) on the parent legacy widget.\n\n     * For example:\n     *      class MyComponent extends Component {}\n     *      MyComponent.template = xml`<div>Owl component with value <t t-esc=\"props.value\"/></div>`;\n     *      const MyWidget = Widget.extend(WidgetAdapterMixin, {\n     *          start() {\n     *              this.component = new ComponentWrapper(this, MyComponent, {value: 44});\n     *              return this.component.mount(this.el);\n     *          },\n     *          update() {\n     *              return this.component.update({value: 45});\n     *          },\n     *      });\n     */\n    const WidgetAdapterMixin = {\n        /**\n         * Calls on_attach_callback on each child ComponentWrapper, which will\n         * call __callMounted on each sub component (recursively), to mark them\n         * as mounted.\n         */\n        on_attach_callback() {\n            for (const component of children.get(this) || []) {\n                component.on_attach_callback();\n            }\n        },\n        /**\n         * Calls on_detach_callback on each child ComponentWrapper, which will\n         * call __callWillUnmount to mark itself and its children as no longer\n         * mounted.\n         */\n        on_detach_callback() {\n            for (const component of children.get(this) || []) {\n                component.on_detach_callback();\n            }\n        },\n        /**\n         * Destroys each sub component when the widget is destroyed. We call the\n         * private __destroy function as there is no need to remove the el from\n         * the DOM (will be removed alongside this widget).\n         */\n        destroy() {\n            for (const component of children.get(this) || []) {\n                component.env.qweb.off(\"update\", component);\n                component.__destroy();\n            }\n            children.delete(this);\n        },\n    };\n    class ComponentWrapper extends Component {\n        /**\n         * Stores the reference of the instance in the parent (in __components).\n         * Also creates a sub environment with a function that will be called\n         * just before events are triggered (see component_extension.js). This\n         * allows to add DOM event listeners on-the-fly, to redirect those Owl\n         * custom (yet DOM) events to legacy custom events (trigger_up).\n         *\n         * @override\n         * @param {Widget|null} parent\n         * @param {Component} Component this is a Class, not an instance\n         * @param {Object} props\n         */\n        constructor(parent, Component, props) {\n            if (parent instanceof Component) {\n                throw new Error('ComponentWrapper must be used with a legacy Widget as parent');\n            }\n            super(null, props);\n            if (parent) {\n                this._register(parent);\n            }\n            useSubEnv({\n                [widgetSymbol]: this._addListener.bind(this)\n            });\n\n            this.parentWidget = parent;\n            this.Component = Component;\n            this.props = props || {};\n            this._handledEvents = new Set(); // Owl events we are redirecting\n\n            this.componentRef = useRef(\"component\");\n        }\n\n        /**\n         * Calls __callMounted on itself and on each sub component (as this\n         * function isn't recursive) when the component is appended into the DOM.\n         */\n        on_attach_callback() {\n            function recursiveCallMounted(component) {\n                const { status, currentFiber } = component.__owl__;\n\n                if (status === 2 && currentFiber && !currentFiber.isCompleted) {\n                    // the component is rendered but another rendering is being done\n                    // it would be foolish to declare the component and children as mounted\n                    return;\n                }\n                if (\n                   status !== 2 /* RENDERED */ &&\n                   status !== 3 /* MOUNTED */ &&\n                   status !== 4 /* UNMOUNTED */\n                ) {\n                    // Avoid calling mounted on a component that is not even\n                    // rendered. Doing otherwise will lead to a crash if a\n                    // specific mounted callback is legitimately relying on the\n                    // component being mounted.\n                    return;\n                }\n                for (const key in component.__owl__.children) {\n                    recursiveCallMounted(component.__owl__.children[key]);\n                }\n                component.__callMounted();\n            }\n            recursiveCallMounted(this);\n        }\n        /**\n         * Calls __callWillUnmount to notify the component it will be unmounted.\n         */\n        on_detach_callback() {\n            this.__callWillUnmount();\n        }\n\n        /**\n         * Overrides to remove the reference to this component in the parent.\n         *\n         * @override\n         */\n        destroy() {\n            if (this.parentWidget) {\n                const parentChildren = children.get(this.parentWidget);\n                if (parentChildren) {\n                    const index = parentChildren.indexOf(this);\n                    children.get(this.parentWidget).splice(index, 1);\n                }\n            }\n            super.destroy();\n        }\n\n        /**\n         * Changes the parent of the wrapper component. This is a function of the\n         * legacy widgets (ParentedMixin), so we have to handle it someway.\n         * It simply removes the reference of this component in the current\n         * parent (if there was one), and adds the reference to the new one.\n         *\n         * We have at least one usecase for this: in views, the renderer is\n         * instantiated without parent, then a controller is instantiated with\n         * the renderer as argument, and finally, setParent is called to set the\n         * controller as parent of the renderer. This implies that Owl renderers\n         * can't trigger events in their constructor.\n         *\n         * @param {Widget} parent\n         */\n        setParent(parent) {\n            if (parent instanceof Component) {\n                throw new Error('ComponentWrapper must be used with a legacy Widget as parent');\n            }\n            this._register(parent);\n            if (this.parentWidget) {\n                const parentChildren = children.get(this.parentWidget);\n                parentChildren.splice(parentChildren.indexOf(this), 1);\n            }\n            this.parentWidget = parent;\n        }\n\n        /**\n         * Updates the props and re-render the component.\n         *\n         * @async\n         * @param {Object} props\n         * @return {Promise}\n         */\n        async update(props = {}) {\n            if (this.__owl__.status === 5 /* destroyed */) {\n                return new Promise(() => {});\n            }\n\n            Object.assign(this.props, props);\n\n            let prom;\n            if (this.__owl__.status === 3 /* mounted */) {\n                prom = this.render();\n            } else {\n                // we may not be in the DOM, but actually want to be redrawn\n                // (e.g. we were detached from the DOM, and now we're going to\n                // be re-attached, but we need to be reloaded first). In this\n                // case, we have to call 'mount' as Owl would skip the rendering\n                // if we simply call render.\n                prom = this.mount(...this._mountArgs);\n            }\n            return prom;\n        }\n\n        /**\n         * Adds an event handler that will redirect the given Owl event to an\n         * Odoo legacy event. This function is called just before the event is\n         * actually triggered.\n         *\n         * @private\n         * @param {string} evType\n         */\n        _addListener(evType) {\n            if (this.parentWidget && !this._handledEvents.has(evType)) {\n                this._handledEvents.add(evType);\n                this.el.addEventListener(evType, ev => {\n                    // as the WrappeComponent has the same root node as the\n                    // actual sub Component, we have to check that the event\n                    // hasn't been stopped by that component (it would naturally\n                    // call stopPropagation, whereas it should actually call\n                    // stopImmediatePropagation to prevent from getting here)\n                    if (!ev.cancelBubble) {\n                        ev.stopPropagation();\n                        const detail = Object.assign({}, ev.detail, {\n                            __originalComponent: ev.originalComponent,\n                        });\n                        this.parentWidget.trigger_up(ev.type.replace(/-/g, '_'), detail);\n                    }\n                });\n            }\n        }\n\n        /**\n         * Registers this instance as a child of the given parent in the\n         * 'children' weakMap.\n         *\n         * @private\n         * @param {Widget} parent\n         */\n        _register(parent) {\n            let parentChildren = children.get(parent);\n            if (!parentChildren) {\n                parentChildren = [];\n                children.set(parent, parentChildren);\n            }\n            parentChildren.push(this);\n        }\n        /**\n         * Stores mount target and position at first mount. That way, when updating\n         * while out of DOM, we know where and how to remount.\n         * @see update()\n         * @override\n         */\n        async mount(target, options) {\n            if (options && options.position === 'self') {\n                throw new Error(\n                    'Unsupported position: \"self\" is not allowed for wrapper components. ' +\n                    'Contact the JS Framework team or open an issue if your use case is relevant.'\n                );\n            }\n            this._mountArgs = arguments;\n            return super.mount(...arguments);\n        }\n\n        //----------------------------------------------------------------------\n        // Getters\n        //----------------------------------------------------------------------\n\n        get $el() {\n            return $(this.el);\n        }\n    }\n    ComponentWrapper.template = xml`<t t-component=\"Component\" t-props=\"props\" t-ref=\"component\"/>`;\n\n    return {\n        ComponentAdapter,\n        ComponentWrapper,\n        WidgetAdapterMixin,\n    };\n});\n", "odoo.define('base_setup.ResConfigDevTool', function (require) {\n    \"use strict\";\n\n    var config = require('web.config');\n    var Widget = require('web.Widget');\n    var widget_registry = require('web.widget_registry');\n\n    var ResConfigDevTool = Widget.extend({\n        template: 'res_config_dev_tool',\n        events: {\n            'click .o_web_settings_force_demo': '_onClickForceDemo',\n        },\n\n        init: function () {\n            this._super.apply(this, arguments);\n            this.isDebug = config.isDebug();\n            this.isAssets = config.isDebug(\"assets\");\n            this.isTests = config.isDebug(\"tests\");\n        },\n\n        willStart: function () {\n            var self = this;\n            return this._super.apply(this, arguments).then(function () {\n                return self._rpc({\n                    route: '/base_setup/demo_active',\n                }).then(function (demo_active) {\n                    self.demo_active = demo_active;\n                });\n            });\n        },\n\n        //--------------------------------------------------------------------------\n        // Handlers\n        //--------------------------------------------------------------------------\n\n        /**\n         * Forces demo data to be installed in a database without demo data installed.\n         *\n         * @private\n         * @param {MouseEvent} ev\n         */\n        _onClickForceDemo: function (ev) {\n            ev.preventDefault();\n            this.do_action('base.demo_force_install_action');\n        },\n    });\n\n    widget_registry.add('res_config_dev_tool', ResConfigDevTool);\n});\n", "odoo.define('base_setup.ResConfigEdition', function (require) {\n    \"use strict\";\n\n    var Widget = require('web.Widget');\n    var widget_registry = require('web.widget_registry');\n    var session = require ('web.session');\n\n    var ResConfigEdition = Widget.extend({\n        template: 'res_config_edition',\n\n       /**\n        * @override\n        */\n        init: function () {\n            this._super.apply(this, arguments);\n            this.server_version = session.server_version;\n            this.expiration_date = session.expiration_date\n                ? moment(session.expiration_date)\n                : moment().add(30, 'd');\n        },\n   });\n\n   widget_registry.add('res_config_edition', ResConfigEdition);\n\n    return ResConfigEdition;\n});\n", "odoo.define('base_setup.ResConfigInviteUsers', function (require) {\n    \"use strict\";\n\n    var Widget = require('web.Widget');\n    var widget_registry = require('web.widget_registry');\n    var core = require('web.core');\n\n    var _t = core._t;\n\n    var ResConfigInviteUsers = Widget.extend({\n        template: 'res_config_invite_users',\n\n        events: {\n            'click .o_web_settings_invite': '_onClickInvite',\n            'click .o_web_settings_user': '_onClickUser',\n            'click .o_web_settings_more': '_onClickMore',\n            'keydown .o_user_emails': '_onKeydownUserEmails',\n        },\n\n        /**\n         * @override\n         */\n        init: function () {\n            this._super.apply(this, arguments);\n            this.emails = [];\n        },\n\n        willStart: function () {\n            var self = this;\n\n            return this._super.apply(this, arguments).then(function () {\n                return self.load();\n            });\n        },\n\n        load: function () {\n            var self = this;\n\n            return this._rpc({\n                route: '/base_setup/data',\n            }).then(function (data) {\n                self.active_users = data.active_users;\n                self.pending_users = data.pending_users;\n                self.action_pending_users = data.action_pending_users;\n                self.pending_count = data.pending_count;\n                self.resend_invitation = data.resend_invitation || false;\n            });\n        },\n\n        //--------------------------------------------------------------------------\n        // Private\n        //--------------------------------------------------------------------------\n\n        /**\n         * @private\n         * @param {string} email\n         * @returns {boolean} true if the given email address is valid\n         */\n        _validateEmail: function (email) {\n            var re = /^([a-z0-9][-a-z0-9_\\+\\.]*)@((?:[\\w-]+\\.)*\\w[\\w-]{0,66})\\.([a-z]{2,63}(?:\\.[a-z]{2})?)$/i;\n            return re.test(email);\n        },\n\n        /**\n         * Send invitation for valid and unique email addresses\n         *\n         * @private\n         */\n        _invite: function () {\n            var self = this;\n\n            var $userEmails = this.$('.o_user_emails');\n            $userEmails.prop('disabled', true);\n            this.$('.o_web_settings_invite').prop('disabled', true);\n            var value = $userEmails.val().trim();\n            if (value) {\n                // filter out duplicates\n                var emails = _.uniq(value.split(/[ ,;\\n]+/));\n\n                // filter out invalid email addresses\n                var invalidEmails = _.reject(emails, this._validateEmail);\n                if (invalidEmails.length) {\n                    this.displayNotification({ message: _.str.sprintf(\n                        _t('Invalid email addresses: %s.'),\n                        invalidEmails.join(', ')\n                    ), type: 'danger' });\n                }\n                emails = _.difference(emails, invalidEmails);\n\n                if (!this.resend_invitation) {\n                    // filter out already processed or pending addresses\n                    var pendingEmails = _.map(this.pending_users, function (info) {\n                        return info[1];\n                    });\n                    var existingEmails = _.intersection(emails, this.emails.concat(pendingEmails));\n                    if (existingEmails.length) {\n                        this.displayNotification({ message: _.str.sprintf(\n                            _t('Email addresses already existing: %s.'),\n                            existingEmails.join(', ')\n                        ), type: 'danger' });\n                    }\n                    emails = _.difference(emails, existingEmails);\n                }\n\n                if (emails.length) {\n                    $userEmails.val('');\n                    this._rpc({\n                        model: 'res.users',\n                        method: 'web_create_users',\n                        args: [emails],\n                    }).then(function () {\n                        return self.load().then(function () {\n                            self.renderElement();\n                            self.$('.o_user_emails').focus();\n                        });\n                    });\n                } else {\n                    $userEmails.prop('disabled', false);\n                    this.$('.o_web_settings_invite').prop('disabled', false);\n                    self.$('.o_user_emails').focus();\n                }\n            }\n        },\n\n        //--------------------------------------------------------------------------\n        // Handlers\n        //--------------------------------------------------------------------------\n\n        /**\n         * @private\n         * @param {MouseEvent} ev\n         */\n        _onClickInvite: function (ev) {\n            if (this.$('.o_user_emails').val().length) {\n                var $button = $(ev.target);\n                $button.button('loading');\n                return this._invite();\n            }\n        },\n        /**\n         * @private\n         * @param {MouseEvent} ev\n         */\n        _onClickMore: function (ev) {\n            ev.preventDefault();\n            this.do_action(this.action_pending_users);\n        },\n        /**\n         * @private\n         * @param {MouseEvent} ev\n         */\n        _onClickUser: function (ev) {\n            ev.preventDefault();\n            var user_id = $(ev.currentTarget).data('user-id');\n\n            var action = Object.assign({}, this.action_pending_users, {res_id: user_id});\n            this.do_action(action);\n        },\n        /**\n         * @private\n         * @param {KeyboardEvent} ev\n         */\n        _onKeydownUserEmails: function (ev) {\n            var keyCodes = [$.ui.keyCode.TAB, $.ui.keyCode.COMMA, $.ui.keyCode.ENTER];\n            if (_.contains(keyCodes, ev.which)) {\n                ev.preventDefault();\n                this._invite();\n            }\n        },\n    });\n\n   widget_registry.add('res_config_invite_users', ResConfigInviteUsers);\n\n});\n", "odoo.define('bus.CrossTab', function (require) {\n\"use strict\";\n\nvar Longpolling = require('bus.Longpolling');\n\nvar session = require('web.session');\n\n/**\n * CrossTab\n *\n * This is an extension of the longpolling bus with browser cross-tab synchronization.\n * It uses a Master/Slaves with Leader Election architecture:\n * - a single tab handles longpolling.\n * - tabs are synchronized by means of the local storage.\n *\n * localStorage used keys are:\n * - {LOCAL_STORAGE_PREFIX}.{sanitizedOrigin}.channels : shared public channel list to listen during the poll\n * - {LOCAL_STORAGE_PREFIX}.{sanitizedOrigin}.options : shared options\n * - {LOCAL_STORAGE_PREFIX}.{sanitizedOrigin}.notification : the received notifications from the last poll\n * - {LOCAL_STORAGE_PREFIX}.{sanitizedOrigin}.tab_list : list of opened tab ids\n * - {LOCAL_STORAGE_PREFIX}.{sanitizedOrigin}.tab_master : generated id of the master tab\n *\n * trigger:\n * - window_focus : when the window is focused\n * - notification : when a notification is receive from the long polling\n * - become_master : when this tab became the master\n * - no_longer_master : when this tab is not longer the master (the user swith tab)\n */\nvar CrossTabBus = Longpolling.extend({\n    // constants\n    TAB_HEARTBEAT_PERIOD: 10000, // 10 seconds\n    MASTER_TAB_HEARTBEAT_PERIOD: 1500, // 1.5 seconds\n    HEARTBEAT_OUT_OF_DATE_PERIOD: 5000, // 5 seconds\n    HEARTBEAT_KILL_OLD_PERIOD: 15000, // 15 seconds\n    LOCAL_STORAGE_PREFIX: 'bus',\n\n    // properties\n    _isMasterTab: false,\n    _isRegistered: false,\n\n    /**\n     * @override\n     */\n    init: function () {\n        this._super.apply(this, arguments);\n        var now = new Date().getTime();\n        // used to prefix localStorage keys\n        this._sanitizedOrigin = session.origin.replace(/:\\/{0,2}/g, '_');\n        this._currentTabChannels = new Set();\n        // prevents collisions between different tabs and in tests\n        this._id = _.uniqueId(this.LOCAL_STORAGE_PREFIX) + ':' + now;\n        if (this._callLocalStorage('getItem', 'last_ts', 0) + 50000 < now) {\n            this._callLocalStorage('removeItem', 'last');\n        }\n        this._lastNotificationID = this._callLocalStorage('getItem', 'last', 0);\n        this.call('local_storage', 'onStorage', this, this._onStorage);\n    },\n    destroy: function () {\n        this._super();\n        clearTimeout(this._heartbeatTimeout);\n    },\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n    /**\n     * Share the bus channels with the others tab by the local storage\n     *\n     * @override\n     */\n    addChannel: function (channel) {\n        this._currentTabChannels.add(channel);\n        this._super.apply(this, arguments);\n        this._updateChannels();\n    },\n    /**\n     * Share the bus channels with the others tab by the local storage\n     *\n     * @override\n     */\n    deleteChannel: function (channel) {\n        this._currentTabChannels.delete(channel);\n        this._super.apply(this, arguments);\n        this._updateChannels();\n    },\n    /**\n     * @return {string}\n     */\n    getTabId: function () {\n        return this._id;\n    },\n    /**\n     * Tells whether this bus is related to the master tab.\n     *\n     * @returns {boolean}\n     */\n    isMasterTab: function () {\n        return this._isMasterTab;\n    },\n    /**\n     * Use the local storage to share the long polling from the master tab.\n     *\n     * @override\n     */\n    startPolling: function () {\n        if (this._isActive === null) {\n            this._heartbeat = this._heartbeat.bind(this);\n        }\n        if (!this._isRegistered) {\n            this._isRegistered = true;\n\n            var peers = this._callLocalStorage('getItem', 'peers', {});\n            peers[this._id] = new Date().getTime();\n            this._callLocalStorage('setItem', 'peers', peers);\n\n            this._registerWindowUnload();\n\n            if (!this._callLocalStorage('getItem', 'master')) {\n                this._startElection();\n            }\n\n            this._heartbeat();\n\n            if (this._isMasterTab) {\n                this._callLocalStorage('setItem', 'options', this._options);\n            } else {\n                this._options = this._callLocalStorage('getItem', 'options', this._options);\n            }\n            this._updateChannels();\n            return;  // startPolling will be called again on tab registration\n        }\n\n        if (this._isMasterTab) {\n            this._super.apply(this, arguments);\n        }\n    },\n    /**\n     * Share the option with the local storage\n     *\n     * @override\n     */\n    updateOption: function () {\n        this._super.apply(this, arguments);\n        this._callLocalStorage('setItem', 'options', this._options);\n    },\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n    /**\n     * Call local_storage service\n     *\n     * @private\n     * @param {string} method (getItem, setItem, removeItem, on)\n     * @param {string} key\n     * @param {any} param\n     * @returns service information\n     */\n    _callLocalStorage: function (method, key, param) {\n        return this.call('local_storage', method, this._generateKey(key), param);\n    },\n    /**\n     * Generates localStorage keys prefixed by bus. (LOCAL_STORAGE_PREFIX = the name\n     * of this addon), and the sanitized origin, to prevent keys from\n     * conflicting when several bus instances (polling different origins)\n     * co-exist.\n     *\n     * @private\n     * @param {string} key\n     * @returns key prefixed with the origin\n     */\n    _generateKey: function (key) {\n        return this.LOCAL_STORAGE_PREFIX + '.' + this._sanitizedOrigin + '.' + key;\n    },\n    /**\n     * @override\n     * @returns {integer} number of milliseconds since 1 January 1970 00:00:00\n     */\n    _getLastPresence: function () {\n        return this._callLocalStorage('getItem', 'lastPresence') || this._super();\n    },\n    /**\n     * Check all the time (according to the constants) if the tab is the master tab and\n     * check if it is active. Use the local storage for this checks.\n     *\n     * @private\n     * @see _startElection method\n     */\n    _heartbeat: function () {\n        var now = new Date().getTime();\n        var heartbeatValue = parseInt(this._callLocalStorage('getItem', 'heartbeat', 0));\n        var peers = this._callLocalStorage('getItem', 'peers', {});\n\n        if ((heartbeatValue + this.HEARTBEAT_OUT_OF_DATE_PERIOD) < now) {\n            // Heartbeat is out of date. Electing new master\n            this._startElection();\n            heartbeatValue = parseInt(this._callLocalStorage('getItem', 'heartbeat', 0));\n        }\n\n        if (this._isMasterTab) {\n            //walk through all peers and kill old\n            var cleanedPeers = {};\n            for (var peerName in peers) {\n                if (peers[peerName] + this.HEARTBEAT_KILL_OLD_PERIOD > now) {\n                    cleanedPeers[peerName] = peers[peerName];\n                }\n            }\n\n            if (heartbeatValue !== this.lastHeartbeat) {\n                // someone else is also master...\n                // it should not happen, except in some race condition situation.\n                this._isMasterTab = false;\n                this.lastHeartbeat = 0;\n                peers[this._id] = now;\n                this._callLocalStorage('setItem', 'peers', peers);\n                this.stopPolling();\n                this.trigger('no_longer_master');\n            } else {\n                this.lastHeartbeat = now;\n                this._callLocalStorage('setItem', 'heartbeat', now);\n                this._callLocalStorage('setItem', 'peers', cleanedPeers);\n            }\n        } else {\n            //update own heartbeat\n            peers[this._id] = now;\n            this._callLocalStorage('setItem', 'peers', peers);\n        }\n\n        // Write lastPresence in local storage if it has been updated since last heartbeat\n        var hbPeriod = this._isMasterTab ? this.MASTER_TAB_HEARTBEAT_PERIOD : this.TAB_HEARTBEAT_PERIOD;\n        if (this._lastPresenceTime + hbPeriod > now) {\n            this._callLocalStorage('setItem', 'lastPresence', this._lastPresenceTime);\n        }\n\n        this._heartbeatTimeout = setTimeout(this._heartbeat.bind(this), hbPeriod);\n    },\n    /**\n     * @private\n     */\n    _registerWindowUnload: function () {\n        $(window).on('unload.' + this._id, this._onUnload.bind(this));\n    },\n    /**\n     * Check with the local storage if the current tab is the master tab.\n     * If this tab became the master, trigger 'become_master' event\n     *\n     * @private\n     */\n    _startElection: function () {\n        if (this._isMasterTab) {\n            return;\n        }\n        //check who's next\n        var now = new Date().getTime();\n        var peers = this._callLocalStorage('getItem', 'peers', {});\n        var heartbeatKillOld = now - this.HEARTBEAT_KILL_OLD_PERIOD;\n        var newMaster;\n        for (var peerName in peers) {\n            //check for dead peers\n            if (peers[peerName] < heartbeatKillOld) {\n                continue;\n            }\n            newMaster = peerName;\n            break;\n        }\n\n        if (newMaster === this._id) {\n            //we're next in queue. Electing as master\n            this.lastHeartbeat = now;\n            this._callLocalStorage('setItem', 'heartbeat', this.lastHeartbeat);\n            this._callLocalStorage('setItem', 'master', true);\n            this._isMasterTab = true;\n            this.startPolling();\n            this.trigger('become_master');\n\n            //removing master peer from queue\n            delete peers[newMaster];\n            this._callLocalStorage('setItem', 'peers', peers);\n        }\n    },\n    /**\n     * Update localstorage channels of with the channels of this tab.\n     *\n     * @private\n     * @return {boolean} true if the aggregated channels has changed.\n     */\n    _updateChannels: function () {\n        const currentPeerIds = new Set(Object.keys(this._callLocalStorage('getItem', 'peers') || {}));\n        const peerChannels = this._callLocalStorage('getItem', 'channels')  || {};\n        const peerChannelsBefore = JSON.stringify(peerChannels);\n        peerChannels[this._id] = Array.from(this._currentTabChannels);\n\n        // Clean outdated channels.\n        for (const channelPeerId of Object.keys(peerChannels)) {\n            if (!currentPeerIds.has(channelPeerId)) {\n                delete peerChannels[channelPeerId];\n            }\n        }\n\n        const peerChannelsAfter = JSON.stringify(peerChannels);\n        if (peerChannelsBefore !== peerChannelsAfter) {\n            this._callLocalStorage('setItem', 'channels', peerChannels);\n        }\n\n        const allChannels = new Set();\n        for (const channels of Object.values(peerChannels)) {\n            for (const channel of channels) {\n                allChannels.add(channel);\n            }\n        }\n        // Insure the current tab channels are always in the aggregated channels\n        // in case this tab is not in the currentPeerIds nor peerChannels.\n        for (const channel of this._currentTabChannels) {\n            allChannels.add(channel);\n        }\n        const allChannelsSorted = Array.from(allChannels).sort();\n        if (JSON.stringify(allChannelsSorted) === JSON.stringify(this._channels.sort())) {\n            return false;\n        } else {\n            this._channels = allChannelsSorted;\n            return true;\n        };\n    },\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n    /**\n     * @override\n     */\n    _onFocusChange: function (params) {\n        this._super.apply(this, arguments);\n        this._callLocalStorage('setItem', 'focus', params.focus);\n    },\n    /**\n     * If it's the master tab, the notifications ares broadcasted to other tabs by the\n     * local storage.\n     *\n     * @override\n     */\n    _onPoll: function (notifications) {\n        var notifs = this._super(notifications);\n        if (this._isMasterTab && notifs.length) {\n            this._callLocalStorage('setItem', 'last', this._lastNotificationID);\n            this._callLocalStorage('setItem', 'last_ts', new Date().getTime());\n            this._callLocalStorage('setItem', 'notification', notifs);\n        }\n    },\n    /**\n     * Handler when the local storage is updated\n     *\n     * @private\n     * @param {OdooEvent} event\n     * @param {string} event.key\n     * @param {string} event.newValue\n     */\n    _onStorage: function (e) {\n        var value = JSON.parse(e.newValue);\n        var key = e.key;\n\n        if (this._isRegistered && key === this._generateKey('master') && !value) {\n            //master was unloaded\n            this._startElection();\n        }\n\n        // last notification id changed\n        if (key === this._generateKey('last')) {\n            this._lastNotificationID = value || 0;\n        }\n        // notifications changed\n        else if (key === this._generateKey('notification')) {\n            if (!this._isMasterTab) {\n                this.trigger(\"notification\", value);\n            }\n        }\n        // update channels\n        else if (key === this._generateKey('channels')) {\n            if (this._updateChannels()) {\n                this._restartPolling();\n            };\n        }\n        // update options\n        else if (key === this._generateKey('options')) {\n            this._options = value;\n        }\n        // update focus\n        else if (key === this._generateKey('focus')) {\n            this._isOdooFocused = value;\n            this.trigger('window_focus', this._isOdooFocused);\n        }\n    },\n    /**\n     * Handler when unload the window\n     *\n     * @private\n     */\n    _onUnload: function () {\n        // unload peer\n        var peers = this._callLocalStorage('getItem', 'peers') || {};\n        delete peers[this._id];\n        this._callLocalStorage('setItem', 'peers', peers);\n        this._currentTabChannels.clear();\n        this._updateChannels();\n\n        // unload master\n        if (this._isMasterTab) {\n            this._callLocalStorage('removeItem', 'master');\n        }\n    },\n});\n\nreturn CrossTabBus;\n\n});\n\n", "odoo.define('bus.Longpolling', function (require) {\n\"use strict\";\n\nvar Bus = require('web.Bus');\nvar ServicesMixin = require('web.ServicesMixin');\n\n\n/**\n * Event Longpolling bus used to bind events on the server long polling return\n *\n * trigger:\n * - window_focus : when the window focus change (true for focused, false for blur)\n * - notification : when a notification is receive from the long polling\n *\n * @class Longpolling\n */\nvar LongpollingBus = Bus.extend(ServicesMixin, {\n    // constants\n    PARTNERS_PRESENCE_CHECK_PERIOD: 30000,  // don't check presence more than once every 30s\n    ERROR_RETRY_DELAY: 10000, // 10 seconds\n    POLL_ROUTE: '/longpolling/poll',\n\n    // properties\n    _isActive: null,\n    _lastNotificationID: 0,\n    _isOdooFocused: true,\n    _pollRetryTimeout: null,\n\n    /**\n     * @override\n     */\n    init: function (parent, params) {\n        this._super.apply(this, arguments);\n        this._id = _.uniqueId('bus');\n\n        // the _id is modified by crosstab_bus, so we can't use it to unbind the events in the destroy.\n        this._longPollingBusId = this._id;\n        this._options = {};\n        this._channels = [];\n\n        // bus presence\n        this._lastPresenceTime = new Date().getTime();\n        $(window).on(\"focus.\" + this._longPollingBusId, this._onFocusChange.bind(this, {focus: true}));\n        $(window).on(\"blur.\" + this._longPollingBusId, this._onFocusChange.bind(this, {focus: false}));\n        $(window).on(\"unload.\" + this._longPollingBusId, this._onFocusChange.bind(this, {focus: false}));\n\n        $(window).on(\"click.\" + this._longPollingBusId, this._onPresence.bind(this));\n        $(window).on(\"keydown.\" + this._longPollingBusId, this._onPresence.bind(this));\n        $(window).on(\"keyup.\" + this._longPollingBusId, this._onPresence.bind(this));\n    },\n    /**\n     * @override\n     */\n    destroy: function () {\n        this.stopPolling();\n        $(window).off(\"focus.\" + this._longPollingBusId);\n        $(window).off(\"blur.\" + this._longPollingBusId);\n        $(window).off(\"unload.\" + this._longPollingBusId);\n        $(window).off(\"click.\" + this._longPollingBusId);\n        $(window).off(\"keydown.\" + this._longPollingBusId);\n        $(window).off(\"keyup.\" + this._longPollingBusId);\n        this._super();\n    },\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n    /**\n     * Register a new channel to listen on the longpoll (ignore if already\n     * listening on this channel).\n     * Aborts a pending longpoll, in order to re-start another longpoll, so\n     * that we can immediately get notifications on newly registered channel.\n     *\n     * @param {string} channel\n     */\n    addChannel: function (channel) {\n        if (this._channels.indexOf(channel) === -1) {\n            this._channels.push(channel);\n            this._restartPolling();\n        }\n    },\n    /**\n     * Unregister a channel from listening on the longpoll.\n     *\n     * Aborts a pending longpoll, in order to re-start another longpoll, so\n     * that we immediately remove ourselves from listening on notifications\n     * on this channel.\n     *\n     * @param {string} channel\n     */\n    deleteChannel: function (channel) {\n        var index = this._channels.indexOf(channel);\n        if (index !== -1) {\n            this._channels.splice(index, 1);\n            if (this._pollRpc) {\n                this._pollRpc.abort();\n            }\n        }\n    },\n    /**\n     * Tell whether odoo is focused or not\n     *\n     * @returns {boolean}\n     */\n    isOdooFocused: function () {\n        return this._isOdooFocused;\n    },\n    /**\n     * Start a long polling, i.e. it continually opens a long poll\n     * connection as long as it is not stopped (@see `stopPolling`)\n     */\n    startPolling: function () {\n        if (this._isActive === null) {\n            this._poll = this._poll.bind(this);\n        }\n        if (!this._isActive) {\n            this._isActive = true;\n            this._poll();\n        }\n    },\n    /**\n     * Stops any started long polling\n     *\n     * Aborts a pending longpoll so that we immediately remove ourselves\n     * from listening on notifications on this channel.\n     */\n    stopPolling: function () {\n        this._isActive = false;\n        this._channels = [];\n        clearTimeout(this._pollRetryTimeout);\n        if (this._pollRpc) {\n            this._pollRpc.abort();\n        }\n    },\n    /**\n     * Add or update an option on the longpoll bus.\n     * Stored options are sent to the server whenever a poll is started.\n     *\n     * @param {string} key\n     * @param {any} value\n     */\n    updateOption: function (key, value) {\n        this._options[key] = value;\n    },\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n    /**\n     * returns the last recorded presence\n     *\n     * @private\n     * @returns {integer} number of milliseconds since 1 January 1970 00:00:00\n     */\n    _getLastPresence: function () {\n        return this._lastPresenceTime;\n    },\n    /**\n     * Continually start a poll:\n     *\n     * A poll is a connection that is kept open for a relatively long period\n     * (up to 1 minute). Local bus data are sent to the server each time a poll\n     * is initiated, and the server may return some \"real-time\" notifications\n     * about registered channels.\n     *\n     * A poll ends on timeout, on abort, on receiving some notifications, or on\n     * receiving an error. Another poll usually starts afterward, except if the\n     * poll is aborted or stopped (@see stopPolling).\n     *\n     * @private\n     */\n    _poll: function () {\n        var self = this;\n        if (!this._isActive) {\n            return;\n        }\n        var now = new Date().getTime();\n        var options = _.extend({}, this._options, {\n            bus_inactivity: now - this._getLastPresence(),\n        });\n        var data = {channels: this._channels, last: this._lastNotificationID, options: options};\n        // The backend has a maximum cycle time of 50 seconds so give +10 seconds\n        this._pollRpc = this._makePoll(data);\n        this._pollRpc.then(function (result) {\n            self._pollRpc = false;\n            self._onPoll(result);\n            self._poll();\n        }).guardedCatch(function (result) {\n            self._pollRpc = false;\n            // no error popup if request is interrupted or fails for any reason\n            result.event.preventDefault();\n            if (result.message === \"XmlHttpRequestError abort\") {\n                self._poll();\n            } else {\n                // random delay to avoid massive longpolling\n                self._pollRetryTimeout = setTimeout(self._poll, self.ERROR_RETRY_DELAY + (Math.floor((Math.random()*20)+1)*1000));\n            }\n        });\n    },\n\n    /**\n     * @private\n     * @param data: object with poll parameters\n     */\n    _makePoll: function(data) {\n        return this._rpc({route: this.POLL_ROUTE, params: data}, {shadow : true, timeout: 60000});\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n    /**\n     * Handler when the focus of the window change.\n     * Trigger the 'window_focus' event.\n     *\n     * @private\n     * @param {Object} params\n     * @param {Boolean} params.focus\n     */\n    _onFocusChange: function (params) {\n        this._isOdooFocused = params.focus;\n        if (params.focus) {\n            this._lastPresenceTime = new Date().getTime();\n            this.trigger('window_focus', this._isOdooFocused);\n        }\n    },\n    /**\n     * Handler when the long polling receive the new notifications\n     * Update the last notification id received.\n     * Triggered the 'notification' event with a list [channel, message] from notifications.\n     *\n     * @private\n     * @param {Object[]} notifications, Input notifications have an id, channel, message\n     * @returns {Array[]} Output arrays have notification's channel and message\n     */\n    _onPoll: function (notifications) {\n        var self = this;\n        var notifs = _.map(notifications, function (notif) {\n            if (notif.id > self._lastNotificationID) {\n                self._lastNotificationID = notif.id;\n            }\n            return notif.message;\n        });\n        this.trigger(\"notification\", notifs);\n        return notifs;\n    },\n    /**\n     * Handler when they are an activity on the window (click, keydown, keyup)\n     * Update the last presence date.\n     *\n     * @private\n     */\n    _onPresence: function () {\n        this._lastPresenceTime = new Date().getTime();\n    },\n    /**\n     * Restart polling.\n     *\n     * @private\n     */\n    _restartPolling() {\n        if (this._pollRpc) {\n            this._pollRpc.abort();\n        } else {\n            this.startPolling();\n        }\n    },\n});\n\nreturn LongpollingBus;\n\n});\n", "/** @odoo-module **/\n\nimport { browser } from \"@web/core/browser/browser\";\nimport { registry } from \"@web/core/registry\";\nimport { session } from \"@web/session\";\n\nexport const assetsWatchdogService = {\n    dependencies: [\"notification\"],\n\n    start(env, { notification }) {\n        let isNotificationDisplayed = false;\n        let bundleNotifTimerID = null;\n\n        env.bus.on(\"WEB_CLIENT_READY\", null, async () => {\n            const legacyEnv = owl.Component.env;\n            legacyEnv.services.bus_service.onNotification(this, onNotification);\n            legacyEnv.services.bus_service.startPolling();\n        });\n\n        /**\n         * Displays one notification on user's screen when assets have changed\n         */\n        function displayBundleChangedNotification() {\n            if (!isNotificationDisplayed) {\n                // Wrap the notification inside a delay.\n                // The server may be overwhelmed with recomputing assets\n                // We wait until things settle down\n                browser.clearTimeout(bundleNotifTimerID);\n                bundleNotifTimerID = browser.setTimeout(() => {\n                    notification.add(\n                        env._t(\"The page appears to be out of date.\"),\n                        {\n                            title: env._t(\"Refresh\"),\n                            type: \"warning\",\n                            sticky: true,\n                            buttons: [\n                                {\n                                    name: env._t(\"Refresh\"),\n                                    primary: true,\n                                    onClick: () => {\n                                        browser.location.reload();\n                                    },\n                                },\n                            ],\n                            onClose: () => {\n                                isNotificationDisplayed = false;\n                            },\n                        }\n                    );\n                    isNotificationDisplayed = true;\n                }, getBundleNotificationDelay());\n            }\n        }\n\n        /**\n         * Computes a random delay to avoid hammering the server\n         * when bundles change with all the users reloading\n         * at the same time\n         *\n         * @return {number} delay in milliseconds\n         */\n        function getBundleNotificationDelay() {\n            return 10000 + Math.floor(Math.random() * 50) * 1000;\n        }\n\n        /**\n         * Reacts to bus's notification\n         *\n         * @param {Array} notifications: list of received notifications\n         */\n        function onNotification(notifications) {\n            for (const { payload, type } of notifications) {\n                if (type === 'bundle_changed') {\n                    if (payload.server_version !== session.server_version) {\n                        displayBundleChangedNotification();\n                        break;\n                    }\n                }\n            }\n        }\n    },\n};\n\nregistry.category(\"services\").add(\"assetsWatchdog\", assetsWatchdogService);\n", "odoo.define('bus.BusService', function (require) {\n\"use strict\";\n\nvar CrossTab = require('bus.CrossTab');\nvar core = require('web.core');\nvar ServicesMixin = require('web.ServicesMixin');\nconst session = require('web.session');\n\nvar BusService =  CrossTab.extend(ServicesMixin, {\n    dependencies : ['local_storage'],\n\n    // properties\n    _audio: null,\n\n    /**\n     * As the BusService doesn't extend AbstractService, we have to replicate\n     * here what is done in AbstractService\n     *\n     * @param {Object} env\n     */\n    init: function (env) {\n        this.env = env;\n        this._super();\n    },\n\n    /**\n     * Replicate the behavior of AbstractService:\n     *\n     * Directly calls the requested service, instead of triggering a\n     * 'call_service' event up, which wouldn't work as services have no parent.\n     *\n     * @param {OdooEvent} ev\n     */\n    _trigger_up: function (ev) {\n        if (ev.name === 'call_service') {\n            const payload = ev.data;\n            let args = payload.args || [];\n            if (payload.service === 'ajax' && payload.method === 'rpc') {\n                // ajax service uses an extra 'target' argument for rpc\n                args = args.concat(ev.target);\n            }\n            const service = this.env.services[payload.service];\n            const result = service[payload.method].apply(service, args);\n            payload.callback(result);\n        }\n    },\n    /**\n     * This method is necessary in order for this Class to be used to instantiate services\n     *\n     * @abstract\n     */\n    start: function () {},\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Send a notification, and notify once per browser's tab\n     *\n     * @param {function} [callback] if given callback will be called when user clicks on notification\n     * @param {Object} options\n     * @param {string} options.message\n     * @param {string} options.title\n     * @param {string} [options.type] 'info', 'success', 'warning', 'danger' or ''\n     */\n    sendNotification(options, callback) {\n        if (window.Notification && Notification.permission === \"granted\") {\n            if (this.isMasterTab()) {\n                try {\n                    this._sendNativeNotification(options.title, options.message, callback);\n                } catch (error) {\n                    // Notification without Serviceworker in Chrome Android doesn't works anymore\n                    // So we fallback to displayNotification() in this case\n                    // https://bugs.chromium.org/p/chromium/issues/detail?id=481856\n                    if (error.message.indexOf('ServiceWorkerRegistration') > -1) {\n                        this.displayNotification(options);\n                        this._beep();\n                    } else {\n                        throw error;\n                    }\n                }\n            }\n        } else {\n            this.displayNotification(options);\n            if (this.isMasterTab()) {\n                this._beep();\n            }\n        }\n    },\n    /**\n     * Register listeners on notifications received on this bus service\n     *\n     * @param {Object} receiver\n     * @param {function} func\n     */\n    onNotification: function () {\n        this.on.apply(this, [\"notification\"].concat(Array.prototype.slice.call(arguments)));\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Lazily play the 'beep' audio on sent notification\n     *\n     * @private\n     */\n    _beep: function () {\n        if (typeof(Audio) !== \"undefined\") {\n            if (!this._audio) {\n                this._audio = new Audio();\n                var ext = this._audio.canPlayType(\"audio/ogg; codecs=vorbis\") ? \".ogg\" : \".mp3\";\n                this._audio.src = session.url(\"/mail/static/src/audio/ting\" + ext);\n            }\n            Promise.resolve(this._audio.play()).catch(_.noop);\n        }\n    },\n    /**\n     * Show a browser notification\n     *\n     * @private\n     * @param {string} title\n     * @param {string} content\n     * @param {function} [callback] if given callback will be called when user clicks on notification\n     */\n    _sendNativeNotification: function (title, content, callback) {\n        var notification = new Notification(\n            // The native Notification API works with plain text and not HTML\n            // unescaping is safe because done only at the **last** step\n            _.unescape(title),\n            {\n                body: _.unescape(content),\n                icon: \"/mail/static/src/img/odoobot_transparent.png\"\n            });\n        notification.onclick = function () {\n            window.focus();\n            if (this.cancel) {\n                this.cancel();\n            } else if (this.close) {\n                this.close();\n            }\n            if (callback) {\n                callback();\n            }\n        };\n    },\n\n});\n\ncore.serviceRegistry.add('bus_service', BusService);\n\nreturn BusService;\n\n});\n", "/** @odoo-module **/\n\nimport { browser } from \"@web/core/browser/browser\";\nimport { registry } from \"@web/core/registry\";\nimport ToursDialog from \"@web_tour/debug/tour_dialog_component\";\nimport utils from \"web_tour.utils\";\n\nexport function disableTours({ env }) {\n    if (!env.services.user.isSystem) {\n        return null;\n    }\n    const activeTours = env.services.tour.getActiveTours();\n    if (activeTours.length === 0) {\n        return null;\n    }\n    return {\n        type: \"item\",\n        description: env._t(\"Disable Tours\"),\n        callback: async () => {\n            const tourNames = activeTours.map(tour => tour.name);\n            await env.services.orm.call(\"web_tour.tour\", \"consume\", [tourNames]);\n            for (const tourName of tourNames) {\n                browser.localStorage.removeItem(utils.get_debugging_key(tourName));\n            }\n            browser.location.reload();\n        },\n        sequence: 50,\n    };\n}\n\nexport function startTour({ env }) {\n    if (!env.services.user.isSystem) {\n        return null;\n    }\n    return {\n        type: \"item\",\n        description: env._t(\"Start Tour\"),\n        callback: async () => {\n            env.services.dialog.add(ToursDialog);\n        },\n        sequence: 60,\n    };\n}\n\nregistry\n    .category(\"debug\")\n    .category(\"default\")\n    .add(\"web_tour.startTour\", startTour)\n    .add(\"web_tour.disableTours\", disableTours);\n", "/** @odoo-module **/\n\nimport { useService } from \"@web/core/utils/hooks\";\nimport { Dialog } from \"@web/core/dialog/dialog\";\nimport { _lt } from \"@web/core/l10n/translation\";\n\nexport default class ToursDialog extends Dialog {\n    setup() {\n        super.setup();\n        this.tourService = useService(\"tour\");\n        this.onboardingTours = this.tourService.getOnboardingTours();\n        this.testingTours = this.tourService.getTestingTours();\n    }\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Resets the given tour to its initial step, in onboarding mode.\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onStartTour(ev) {\n        this.tourService.reset(ev.target.dataset.name);\n        this.close();\n    }\n    /**\n     * Starts the given tour in test mode.\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onTestTour(ev) {\n        this.tourService.run(ev.target.dataset.name);\n        this.close();\n    }\n}\nToursDialog.bodyTemplate = \"web_tour.ToursDialog\";\nToursDialog.title = _lt(\"Tours\");\n", "/** @odoo-module **/\n\nimport { registry } from \"@web/core/registry\";\nimport tourManager from \"web_tour.tour\";\n\nexport const tourService = {\n    start() {\n        /**\n         * @private\n         * @returns {Object} All the tours as a map\n         */\n        function _getAllTourMap() {\n            return tourManager.tours;\n        }\n\n        /**\n         * @private\n         * @returns {Object} All the active tours as a map\n         */\n        function _getActiveTourMap() {\n            return Object.fromEntries(\n                Object.entries(_getAllTourMap()).filter(\n                    ([key, value]) => !tourManager.consumed_tours.includes(key)\n                )\n            );\n        }\n\n        /**\n         * @private\n         * @returns {Array} Takes an Object (map) of tours and returns all the values\n         */\n        function _fromTourMapToArray(tourMap) {\n            return Object.values(tourMap).sort((t1, t2) => {\n                return t1.sequence - t2.sequence || (t1.name < t2.name ? -1 : 1);\n            });\n        }\n\n        /**\n         * @returns {Array} All the tours\n         */\n        function getAllTours() {\n            return _fromTourMapToArray(_getAllTourMap());\n        }\n\n        /**\n         * @returns {Array} All the active tours\n         */\n        function getActiveTours() {\n            return _fromTourMapToArray(_getActiveTourMap());\n        }\n\n        /**\n         * @returns {Array} The onboarding tours\n         */\n        function getOnboardingTours() {\n            return getAllTours().filter((t) => !t.test);\n        }\n\n        /**\n         * @returns {Array} The testing tours\n         */\n        function getTestingTours() {\n            return getAllTours().filter((t) => t.test);\n        }\n\n        /**\n         * @param {string} tourName\n         * Run a tour\n         */\n        function run(tourName) {\n            return tourManager.run(tourName);\n        }\n\n        /**\n         * @param {string} tourName\n         * Reset a tour\n         */\n        function reset(tourName) {\n            return tourManager.reset(tourName);\n        }\n\n        return {\n            getAllTours,\n            getActiveTours,\n            getOnboardingTours,\n            getTestingTours,\n            run,\n            reset,\n        };\n    },\n};\n\nregistry.category(\"services\").add(\"tour\", tourService);\n", "/** @odoo-module **/\n\nimport * as mailUtils from '@mail/js/utils';\n\nimport AbstractField from 'web.AbstractField';\nimport BasicModel from 'web.BasicModel';\nimport config from 'web.config';\nimport core from 'web.core';\nimport field_registry from 'web.field_registry';\nimport session from 'web.session';\nimport framework from 'web.framework';\nimport time from 'web.time';\n\nvar QWeb = core.qweb;\nvar _t = core._t;\nconst _lt = core._lt;\n\n/**\n * Fetches activities and postprocesses them.\n *\n * This standalone function performs an RPC, but to do so, it needs an instance\n * of a widget that implements the _rpc() function.\n *\n * @todo i'm not very proud of the widget instance given in arguments, we should\n *   probably try to do it a better way in the future.\n *\n * @param {Widget} self a widget instance that can perform RPCs\n * @param {Array} ids the ids of activities to read\n * @return {Promise<Array>} resolved with the activities\n */\nfunction _readActivities(self, ids) {\n    if (!ids.length) {\n        return Promise.resolve([]);\n    }\n    var context = self.getSession().user_context;\n    if (self.record && !_.isEmpty(self.record.getContext())) {\n        context = self.record.getContext();\n    }\n    return self._rpc({\n        model: 'mail.activity',\n        method: 'activity_format',\n        args: [ids],\n        context: context,\n    }).then(function (activities) {\n        // convert create_date and date_deadline to moments\n        _.each(activities, function (activity) {\n            activity.create_date = moment(time.auto_str_to_date(activity.create_date));\n            activity.date_deadline = moment(time.auto_str_to_date(activity.date_deadline));\n        });\n         // sort activities by due date\n        activities = _.sortBy(activities, 'date_deadline');\n        return activities;\n    });\n}\n\nBasicModel.include({\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Fetches the activities displayed by the activity field widget in form\n     * views.\n     *\n     * @private\n     * @param {Object} record - an element from the localData\n     * @param {string} fieldName\n     * @return {Promise<Array>} resolved with the activities\n     */\n    _fetchSpecialActivity: function (record, fieldName) {\n        var localID = (record._changes && fieldName in record._changes) ?\n                        record._changes[fieldName] :\n                        record.data[fieldName];\n        return _readActivities(this, this.localData[localID].res_ids);\n    },\n});\n\n/**\n * Set the 'label_delay' entry in activity data according to the deadline date\n *\n * @param {Array} activities list of activity Object\n * @return {Array} : list of modified activity Object\n */\nvar setDelayLabel = function (activities) {\n    var today = moment().startOf('day');\n    _.each(activities, function (activity) {\n        var toDisplay = '';\n        var diff = activity.date_deadline.diff(today, 'days', true); // true means no rounding\n        if (diff === 0) {\n            toDisplay = _t(\"Today\");\n        } else {\n            if (diff < 0) { // overdue\n                if (diff === -1) {\n                    toDisplay = _t(\"Yesterday\");\n                } else {\n                    toDisplay = _.str.sprintf(_t(\"%d days overdue\"), Math.abs(diff));\n                }\n            } else { // due\n                if (diff === 1) {\n                    toDisplay = _t(\"Tomorrow\");\n                } else {\n                    toDisplay = _.str.sprintf(_t(\"Due in %d days\"), Math.abs(diff));\n                }\n            }\n        }\n        activity.label_delay = toDisplay;\n    });\n    return activities;\n};\n\n/**\n * Set the file upload identifier for 'upload_file' type activities\n *\n * @param {Array} activities list of activity Object\n * @return {Array} : list of modified activity Object\n */\nvar setFileUploadID = function (activities) {\n    _.each(activities, function (activity) {\n        if (activity.activity_category === 'upload_file') {\n            activity.fileuploadID = _.uniqueId('o_fileupload');\n        }\n    });\n    return activities;\n};\n\nvar BasicActivity = AbstractField.extend({\n    events: {\n        'click .o_edit_activity': '_onEditActivity',\n        'change input.o_input_file': '_onFileChanged',\n        'click .o_mark_as_done': '_onMarkActivityDone',\n        'click .o_mark_as_done_upload_file': '_onMarkActivityDoneUploadFile',\n        'click .o_activity_template_preview': '_onPreviewMailTemplate',\n        'click .o_schedule_activity': '_onScheduleActivity',\n        'click .o_activity_template_send': '_onSendMailTemplate',\n        'click .o_unlink_activity': '_onUnlinkActivity',\n    },\n    init: function () {\n        this._super.apply(this, arguments);\n        this._draftFeedback = {};\n    },\n\n    //------------------------------------------------------------\n    // Public\n    //------------------------------------------------------------\n\n    /**\n     * @param {integer} previousActivityTypeID\n     * @return {Promise}\n     */\n    scheduleActivity: function () {\n        var callback = this._reload.bind(this, { activity: true, thread: true });\n        return this._openActivityForm(false, callback);\n    },\n\n    //------------------------------------------------------------\n    // Private\n    //------------------------------------------------------------\n\n    _getActivityFormAction(id) {\n        return {\n            type: 'ir.actions.act_window',\n            name: _t(\"Schedule Activity\"),\n            res_model: 'mail.activity',\n            view_mode: 'form',\n            views: [[false, 'form']],\n            target: 'new',\n            context: {\n                default_res_id: this.res_id,\n                default_res_model: this.model,\n            },\n            res_id: id || false,\n        };\n    },\n    /**\n     * Send a feedback and reload page in order to mark activity as done\n     *\n     * @private\n     * @param {Object} params\n     * @param {integer} params.activityID\n     * @param {integer[]} params.attachmentIds\n     * @param {string} params.feedback\n     *\n     * @return {$.Promise}\n     */\n    _markActivityDone: function (params) {\n        var activityID = params.activityID;\n        var feedback = params.feedback || false;\n        var attachmentIds = params.attachmentIds || [];\n\n        return this._sendActivityFeedback(activityID, feedback, attachmentIds)\n            .then(this._reload.bind(this, { activity: true, thread: true }));\n    },\n    /**\n     * Send a feedback and proposes to schedule next activity\n     * previousActivityTypeID will be given to new activity to propose activity\n     * type based on recommended next activity\n     *\n     * @private\n     * @param {Object} params\n     * @param {integer} params.activityID\n     * @param {string} params.feedback\n     */\n    _markActivityDoneAndScheduleNext: function (params) {\n        var activityID = params.activityID;\n        var feedback = params.feedback;\n        var self = this;\n        this._rpc({\n            model: 'mail.activity',\n            method: 'action_feedback_schedule_next',\n            args: [[activityID]],\n            kwargs: {feedback: feedback},\n            context: this.record.getContext(),\n        }).then(\n            function (rslt_action) {\n                if (rslt_action) {\n                    self.do_action(rslt_action, {\n                        on_close: function () {\n                            self.trigger_up('reload', { keepChanges: true });\n                        },\n                    });\n                } else {\n                    self.trigger_up('reload', { keepChanges: true });\n                }\n            }\n        );\n    },\n    /**\n     * @private\n     * @param {integer} id\n     * @param {function} callback\n     * @return {Promise}\n     */\n    _openActivityForm: function (id, callback) {\n        var action = this._getActivityFormAction(id);\n        return this.do_action(action, { on_close: callback });\n    },\n    /**\n     * @private\n     * @param {integer} activityID\n     * @param {string} feedback\n     * @param {integer[]} attachmentIds\n     * @return {Promise}\n     */\n    _sendActivityFeedback: function (activityID, feedback, attachmentIds) {\n        return this._rpc({\n                model: 'mail.activity',\n                method: 'action_feedback',\n                args: [[activityID]],\n                kwargs: {\n                    feedback: feedback,\n                    attachment_ids: attachmentIds || [],\n                },\n                context: this.record.getContext(),\n            });\n    },\n\n    //------------------------------------------------------------\n    // Handlers\n    //------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {Object[]} activities\n     */\n    _bindOnUploadAction: function (activities) {\n        var self = this;\n        _.each(activities, function (activity) {\n            if (activity.fileuploadID) {\n                $(window).on(activity.fileuploadID, function () {\n                    framework.unblockUI();\n                    // find the button clicked and display the feedback popup on it\n                    var files = Array.prototype.slice.call(arguments, 1);\n                    self._markActivityDone({\n                        activityID: activity.id,\n                        attachmentIds: _.pluck(files, 'id')\n                    }).then(function () {\n                        self.trigger_up('reload', { keepChanges: true });\n                    });\n                });\n            }\n        });\n    },\n    /** Binds a focusout handler on a bootstrap popover\n     *  Useful to do some operations on the popover's HTML,\n     *  like keeping the user's input for the feedback\n     *  @param {JQuery} $popover_el: the element on which\n     *    the popover() method has been called\n     */\n    _bindPopoverFocusout: function ($popover_el) {\n        var self = this;\n        // Retrieve the actual popover's HTML\n        var $popover = $($popover_el.data(\"bs.popover\").tip);\n        var activityID = $popover_el.data('activity-id');\n        $popover.off('focusout');\n        $popover.focusout(function (e) {\n            // outside click of popover hide the popover\n            // e.relatedTarget is the element receiving the focus\n            if (!$popover.is(e.relatedTarget) && !$popover.find(e.relatedTarget).length) {\n                self._draftFeedback[activityID] = $popover.find('#activity_feedback').val();\n                $popover.popover('hide');\n            }\n        });\n    },\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     * @returns {Promise}\n     */\n    _onEditActivity: function (ev) {\n        ev.preventDefault();\n        var activityID = $(ev.currentTarget).data('activity-id');\n        return this._openActivityForm(activityID, this._reload.bind(this, { activity: true, thread: true }));\n    },\n    /**\n     * @private\n     * @param {FormEvent} ev\n     */\n    _onFileChanged: function (ev) {\n        ev.stopPropagation();\n        ev.preventDefault();\n        var $form = $(ev.currentTarget).closest('form');\n        $form.submit();\n        framework.blockUI();\n    },\n    /**\n     * Called when marking an activity as done\n     *\n     * It lets the current user write a feedback in a popup menu.\n     * After writing the feedback and confirm mark as done\n     * is sent, it marks this activity as done for good with the feedback linked\n     * to it.\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onMarkActivityDone: function (ev) {\n        ev.stopPropagation();\n        ev.preventDefault();\n        var self = this;\n        var $markDoneBtn = $(ev.currentTarget);\n        var activityID = $markDoneBtn.data('activity-id');\n        var previousActivityTypeID = $markDoneBtn.data('previous-activity-type-id') || false;\n        var chainingTypeActivity = $markDoneBtn.data('chaining-type-activity');\n\n        if ($markDoneBtn.data('toggle') === 'collapse') {\n            var $actLi = $markDoneBtn.parents('.o_log_activity');\n            var $panel = self.$('#o_activity_form_' + activityID);\n\n            if (!$panel.data('bs.collapse')) {\n                var $form = $(QWeb.render('mail.activity_feedback_form', {\n                    previous_activity_type_id: previousActivityTypeID,\n                    chaining_type: chainingTypeActivity\n                }));\n                $panel.append($form);\n                self._onMarkActivityDoneActions($markDoneBtn, $form, activityID);\n\n                // Close and reset any other open panels\n                _.each($panel.siblings('.o_activity_form'), function (el) {\n                    if ($(el).data('bs.collapse')) {\n                        $(el).empty().collapse('dispose').removeClass('show');\n                    }\n                });\n\n                // Scroll  to selected activity\n                $markDoneBtn.parents('.o_activity_log_container').scrollTo($actLi.position().top, 100);\n            }\n\n            // Empty and reset panel on close\n            $panel.on('hidden.bs.collapse', function () {\n                if ($panel.data('bs.collapse')) {\n                    $actLi.removeClass('o_activity_selected');\n                    $panel.collapse('dispose');\n                    $panel.empty();\n                }\n            });\n\n            this.$('.o_activity_selected').removeClass('o_activity_selected');\n            $actLi.toggleClass('o_activity_selected');\n            $panel.collapse('toggle');\n\n        } else if (!$markDoneBtn.data('bs.popover')) {\n            $markDoneBtn.popover({\n                template: $(Popover.Default.template).addClass('o_mail_activity_feedback')[0].outerHTML, // Ugly but cannot find another way\n                container: $markDoneBtn,\n                title: _t(\"Feedback\"),\n                html: true,\n                trigger: 'manual',\n                placement: 'right', // FIXME: this should work, maybe a bug in the popper lib\n                content: function () {\n                    var $popover = $(QWeb.render('mail.activity_feedback_form', {\n                        previous_activity_type_id: previousActivityTypeID,\n                        chaining_type: chainingTypeActivity\n                    }));\n                    self._onMarkActivityDoneActions($markDoneBtn, $popover, activityID);\n                    return $popover;\n                },\n            }).on('shown.bs.popover', function () {\n                var $popover = $($(this).data(\"bs.popover\").tip);\n                $(\".o_mail_activity_feedback.popover\").not($popover).popover(\"hide\");\n                $popover.addClass('o_mail_activity_feedback').attr('tabindex', 0);\n                $popover.find('#activity_feedback').focus();\n                self._bindPopoverFocusout($(this));\n            }).popover('show');\n        } else {\n            var popover = $markDoneBtn.data('bs.popover');\n            if ($('#' + popover.tip.id).length === 0) {\n               popover.show();\n            }\n        }\n    },\n    /**\n    * Bind all necessary actions to the 'mark as done' form\n    *\n    * @private\n    * @param {Object} $form\n    * @param {integer} activityID\n    */\n    _onMarkActivityDoneActions: function ($btn, $form, activityID) {\n        var self = this;\n        $form.find('#activity_feedback').val(self._draftFeedback[activityID]);\n        $form.on('click', '.o_activity_popover_done', function (ev) {\n            ev.stopPropagation();\n            self._markActivityDone({\n                activityID: activityID,\n                feedback: $form.find('#activity_feedback').val(),\n            });\n        });\n        $form.on('click', '.o_activity_popover_done_next', function (ev) {\n            ev.stopPropagation();\n            self._markActivityDoneAndScheduleNext({\n                activityID: activityID,\n                feedback: $form.find('#activity_feedback').val(),\n            });\n        });\n        $form.on('click', '.o_activity_popover_discard', function (ev) {\n            ev.stopPropagation();\n            if ($btn.data('bs.popover')) {\n                $btn.popover('hide');\n            } else if ($btn.data('toggle') === 'collapse') {\n                self.$('#o_activity_form_' + activityID).collapse('hide');\n            }\n        });\n    },\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onMarkActivityDoneUploadFile: function (ev) {\n        ev.preventDefault();\n        ev.stopPropagation();\n        var fileuploadID = $(ev.currentTarget).data('fileupload-id');\n        var $input = this.$(\"[target='\" + fileuploadID + \"'] > input.o_input_file\");\n        $input.click();\n    },\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     * @returns {Promise}\n     */\n    _onPreviewMailTemplate: function (ev) {\n        ev.stopPropagation();\n        ev.preventDefault();\n        var self = this;\n        var templateID = $(ev.currentTarget).data('template-id');\n        var action = {\n            name: _t('Compose Email'),\n            type: 'ir.actions.act_window',\n            res_model: 'mail.compose.message',\n            views: [[false, 'form']],\n            target: 'new',\n            context: {\n                default_res_id: this.res_id,\n                default_model: this.model,\n                default_use_template: true,\n                default_template_id: templateID,\n                force_email: true,\n            },\n        };\n        return this.do_action(action, { on_close: function () {\n            self.trigger_up('reload', { keepChanges: true });\n        } });\n    },\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     * @returns {Promise}\n     */\n    _onSendMailTemplate: function (ev) {\n        ev.stopPropagation();\n        ev.preventDefault();\n        var templateID = $(ev.currentTarget).data('template-id');\n        return this._rpc({\n                model: this.model,\n                method: 'activity_send_mail',\n                args: [[this.res_id], templateID],\n            })\n            .then(this._reload.bind(this, {activity: true, thread: true, followers: true}));\n    },\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     * @returns {Promise}\n     */\n    _onScheduleActivity: function (ev) {\n        ev.preventDefault();\n        return this._openActivityForm(false, this._reload.bind(this));\n    },\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     * @param {Object} options\n     * @returns {Promise}\n     */\n    _onUnlinkActivity: function (ev, options) {\n        ev.preventDefault();\n        var activityID = $(ev.currentTarget).data('activity-id');\n        options = _.defaults(options || {}, {\n            model: 'mail.activity',\n            args: [[activityID]],\n        });\n        return this._rpc({\n                model: options.model,\n                method: 'unlink',\n                args: options.args,\n            })\n            .then(this._reload.bind(this, {activity: true}));\n    },\n    /**\n     * Unbind event triggered when a file is uploaded.\n     *\n     * @private\n     * @param {Array} activities: list of activity to unbind\n     */\n    _unbindOnUploadAction: function (activities) {\n        _.each(activities, function (activity) {\n            if (activity.fileuploadID) {\n                $(window).off(activity.fileuploadID);\n            }\n        });\n    },\n});\n\n// -----------------------------------------------------------------------------\n// Activities Widget for Kanban views ('kanban_activity' widget)\n// -----------------------------------------------------------------------------\nvar KanbanActivity = BasicActivity.extend({\n    template: 'mail.KanbanActivity',\n    events: _.extend({}, BasicActivity.prototype.events, {\n        'show.bs.dropdown': '_onDropdownShow',\n    }),\n    fieldDependencies: _.extend({}, BasicActivity.prototype.fieldDependencies, {\n        activity_exception_decoration: {type: 'selection'},\n        activity_exception_icon: {type: 'char'},\n        activity_state: {type: 'selection'},\n    }),\n\n    /**\n     * @override\n     */\n    init: function (parent, name, record) {\n        this._super.apply(this, arguments);\n        var selection = {};\n        _.each(record.fields.activity_state.selection, function (value) {\n            selection[value[0]] = value[1];\n        });\n        this.selection = selection;\n        this._setState(record);\n    },\n    /**\n     * @override\n     */\n    destroy: function () {\n        this._unbindOnUploadAction();\n        return this._super.apply(this, arguments);\n    },\n    //------------------------------------------------------------\n    // Private\n    //------------------------------------------------------------\n\n    /**\n     * @private\n     */\n    _reload: function () {\n        this.trigger_up('reload', { db_id: this.record_id, keepChanges: true });\n    },\n    /**\n     * @override\n     * @private\n     */\n    _render: function () {\n        // span classes need to be updated manually because the template cannot\n        // be re-rendered eaasily (because of the dropdown state)\n        const spanClasses = ['fa', 'fa-lg', 'fa-fw'];\n        spanClasses.push('o_activity_color_' + (this.activityState || 'default'));\n        if (this.recordData.activity_exception_decoration) {\n            spanClasses.push('text-' + this.recordData.activity_exception_decoration);\n            spanClasses.push(this.recordData.activity_exception_icon);\n        } else {\n            spanClasses.push('fa-clock-o');\n        }\n        this.$('.o_activity_btn > span').removeClass().addClass(spanClasses.join(' '));\n\n        if (this.$el.hasClass('show')) {\n            // note: this part of the rendering might be asynchronous\n            this._renderDropdown();\n        }\n    },\n    /**\n     * @private\n     */\n    _renderDropdown: function () {\n        var self = this;\n        this.$('.o_activity')\n            .toggleClass('dropdown-menu-right', config.device.isMobile)\n            .html(QWeb.render('mail.KanbanActivityLoading'));\n        return _readActivities(this, this.value.res_ids).then(function (activities) {\n            activities = setFileUploadID(activities);\n            self.$('.o_activity').html(QWeb.render('mail.KanbanActivityDropdown', {\n                selection: self.selection,\n                records: _.groupBy(setDelayLabel(activities), 'state'),\n                session: session,\n                widget: self,\n            }));\n            self._bindOnUploadAction(activities);\n        });\n    },\n    /**\n     * @override\n     * @private\n     * @param {Object} record\n     */\n    _reset: function (record) {\n        this._super.apply(this, arguments);\n        this._setState(record);\n    },\n    /**\n     * @private\n     * @param {Object} record\n     */\n    _setState: function (record) {\n        this.record_id = record.id;\n        this.activityState = this.recordData.activity_state;\n    },\n\n    //------------------------------------------------------------\n    // Handlers\n    //------------------------------------------------------------\n\n    /**\n     * @private\n     */\n    _onDropdownShow: function () {\n        this._renderDropdown();\n    },\n});\n\n// -----------------------------------------------------------------------------\n// Activities Widget for List views ('list_activity' widget)\n// -----------------------------------------------------------------------------\nconst ListActivity = KanbanActivity.extend({\n    template: 'mail.ListActivity',\n    events: Object.assign({}, KanbanActivity.prototype.events, {\n        'click .dropdown-menu.o_activity': '_onDropdownClicked',\n    }),\n    fieldDependencies: _.extend({}, KanbanActivity.prototype.fieldDependencies, {\n        activity_summary: {type: 'char'},\n        activity_type_id: {type: 'many2one', relation: 'mail.activity.type'},\n        activity_type_icon: {type: 'char'},\n    }),\n    label: _lt('Next Activity'),\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     * @private\n     */\n    _render: async function () {\n        await this._super(...arguments);\n        // set the 'special_click' prop on the activity icon to prevent from\n        // opening the record when the user clicks on it (as it opens the\n        // activity dropdown instead)\n        this.$('.o_activity_btn > span').prop('special_click', true);\n        if (this.value.count) {\n            let text;\n            if (this.recordData.activity_exception_decoration) {\n                text = _t('Warning');\n            } else {\n                text = this.recordData.activity_summary ||\n                          this.recordData.activity_type_id.data.display_name;\n            }\n            this.$('.o_activity_summary').text(text);\n        }\n        if (this.recordData.activity_type_icon) {\n            this.el.querySelector('.o_activity_btn > span').classList.replace('fa-clock-o', this.recordData.activity_type_icon);\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * As we are in a list view, we don't want clicks inside the activity\n     * dropdown to open the record in a form view.\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onDropdownClicked: function (ev) {\n        ev.stopPropagation();\n    },\n    /**\n     * @override\n     * @private\n     */\n    _onDropdownShow() {\n        if (!this.res_id) {\n            return this.displayNotification({\n                message: _t(\"Save the record before scheduling an activity!\"),\n                type: \"danger\",\n            });\n        }\n        this._super(...arguments);\n    },\n});\n\n// -----------------------------------------------------------------------------\n// Activity Exception Widget to display Exception icon ('activity_exception' widget)\n// -----------------------------------------------------------------------------\n\nvar ActivityException = AbstractField.extend({\n    noLabel: true,\n    fieldDependencies: _.extend({}, AbstractField.prototype.fieldDependencies, {\n        activity_exception_icon: {type: 'char'}\n    }),\n\n    //------------------------------------------------------------\n    // Private\n    //------------------------------------------------------------\n\n    /**\n     * There is no edit mode for this widget, the icon is always readonly.\n     *\n     * @override\n     * @private\n     */\n    _renderEdit: function () {\n        return this._renderReadonly();\n    },\n\n    /**\n     * Displays the exception icon if there is one.\n     *\n     * @override\n     * @private\n     */\n    _renderReadonly: function () {\n        this.$el.empty();\n        if (this.value) {\n            this.$el.attr({\n                title: _t('This record has an exception activity.'),\n                class: \"pull-right mt-1 text-\" + this.value + \" fa \" + this.recordData.activity_exception_icon\n            });\n        }\n    }\n});\n\nfield_registry\n    .add('kanban_activity', KanbanActivity)\n    .add('list_activity', ListActivity)\n    .add('activity_exception', ActivityException);\n", "/** @odoo-module **/\n\nimport BasicView from 'web.BasicView';\n\nconst mailWidgets = ['kanban_activity'];\n\nBasicView.include({\n    init: function () {\n        this._super.apply(this, arguments);\n        const post_refresh = this._getFieldOption('message_ids', 'post_refresh', false);\n        const followers_post_refresh = this._getFieldOption('message_follower_ids', 'post_refresh', false);\n        this.chatterFields = {\n            hasActivityIds: this._hasField('activity_ids'),\n            hasMessageFollowerIds: this._hasField('message_follower_ids'),\n            hasMessageIds: this._hasField('message_ids'),\n            hasRecordReloadOnAttachmentsChanged: post_refresh === 'always',\n            hasRecordReloadOnMessagePosted: !!post_refresh,\n            hasRecordReloadOnFollowersUpdate: !!followers_post_refresh,\n            isAttachmentBoxVisibleInitially: (\n                this._getFieldOption('message_ids', 'open_attachments', false) ||\n                this._getFieldOption('message_follower_ids', 'open_attachments', false)\n            ),\n        };\n        const fieldsInfo = this.fieldsInfo[this.viewType];\n        this.rendererParams.chatterFields = this.chatterFields;\n\n        // LEGACY for widget kanban_activity\n        this.mailFields = {};\n        for (const fieldName in fieldsInfo) {\n            const fieldInfo = fieldsInfo[fieldName];\n            if (_.contains(mailWidgets, fieldInfo.widget)) {\n                this.mailFields[fieldInfo.widget] = fieldName;\n                fieldInfo.__no_fetch = true;\n            }\n        }\n        this.rendererParams.activeActions = this.controllerParams.activeActions;\n        this.rendererParams.mailFields = this.mailFields;\n    },\n    /**\n     * Gets the option value of a field if present.\n     *\n     * @private\n     * @param {string} fieldName the desired field name\n     * @param {string} optionName the desired option name\n     * @param {*} defaultValue the default value if option or field is not found.\n     * @returns {*}\n     */\n    _getFieldOption(fieldName, optionName, defaultValue) {\n        const field = this.fieldsInfo[this.viewType][fieldName];\n        if (field && field.options && field.options[optionName] !== undefined) {\n            return field.options[optionName];\n        }\n        return defaultValue;\n    },\n    /**\n     * Checks whether the view has a given field.\n     *\n     * @private\n     * @param {string} fieldName the desired field name\n     * @returns {boolean}\n     */\n    _hasField(fieldName) {\n        return !!this.fieldsInfo[this.viewType][fieldName];\n    },\n});\n", "/** @odoo-module **/\n\nimport { TranslationDataBase } from 'web.translation';\n\nTranslationDataBase.include({\n    /**\n     * @override\n     */\n    set_bundle() {\n        const res = this._super(...arguments);\n        if (owl.Component.env.services && owl.Component.env.services.messaging) {\n            // During boot `env.services` might not even be set yet, in this\n            // case this can safely be ignored as messaging will then load\n            // locale information during its initialization.\n            owl.Component.env.services.messaging.get().then(messaging => {\n                // Update messaging locale whenever the translation bundle changes.\n                // In particular if messaging is created before the end of the\n                // `load_translations` RPC, the default values have to be\n                // updated by the received ones.\n                messaging.locale.update({\n                    language: this.parameters.code,\n                    textDirection: this.parameters.direction,\n                });\n            });\n        }\n        return res;\n    },\n});\n", "/** @odoo-module **/\n\nimport CustomFilterItem from 'web.CustomFilterItem';\nimport { patch } from 'web.utils';\n\npatch(CustomFilterItem.prototype, 'mail.CustomFilterItem', {\n\n    /**\n     * With the `mail` module installed, we want to filter out some of the\n     * available fields in 'Add custom filter' menu (@see CustomFilterItem).\n     * @override\n     */\n    _validateField(field) {\n        return this._super(...arguments) &&\n            field.relation !== 'mail.message' &&\n            field.name !== 'message_ids';\n    },\n});\n\nexport default CustomFilterItem;\n", "/** @odoo-module **/\n\nimport core from 'web.core';\nimport Widget from 'web.Widget';\nimport { hidePDFJSButtons } from '@web/legacy/js/libs/pdfjs';\n\nvar QWeb = core.qweb;\n\nvar SCROLL_ZOOM_STEP = 0.1;\nvar ZOOM_STEP = 0.5;\n\n/**\n * This widget is deprecated, and should instead use AttachmentViewer component.\n * @see `mail/static/src/components/attachment_viewer/attachment_viewer.js`\n * TODO: remove this widget when it's not longer used\n *\n * @deprecated\n */\nvar DocumentViewer = Widget.extend({\n    template: \"DocumentViewer\",\n    events: {\n        'click .o_download_btn': '_onDownload',\n        'click .o_viewer_img': '_onImageClicked',\n        'click .o_viewer_video': '_onVideoClicked',\n        'click .move_next': '_onNext',\n        'click .move_previous': '_onPrevious',\n        'click .o_rotate': '_onRotate',\n        'click .o_zoom_in': '_onZoomIn',\n        'click .o_zoom_out': '_onZoomOut',\n        'click .o_zoom_reset': '_onZoomReset',\n        'click .o_close_btn, .o_viewer_img_wrapper': '_onClose',\n        'click .o_print_btn': '_onPrint',\n        'DOMMouseScroll .o_viewer_content': '_onScroll',    // Firefox\n        'mousewheel .o_viewer_content': '_onScroll',        // Chrome, Safari, IE\n        'keydown': '_onKeydown',\n        'keyup': '_onKeyUp',\n        'mousedown .o_viewer_img': '_onStartDrag',\n        'mousemove .o_viewer_content': '_onDrag',\n        'mouseup .o_viewer_content': '_onEndDrag'\n    },\n    /**\n     * The documentViewer takes an array of objects describing attachments in\n     * argument, and the ID of an active attachment (the one to display first).\n     * Documents that are not of type image or video are filtered out.\n     *\n     * @override\n     * @param {Array<Object>} attachments list of attachments\n     * @param {integer} activeAttachmentID\n     */\n    init: function (parent, attachments, activeAttachmentID) {\n        this._super.apply(this, arguments);\n        this.attachment = _.filter(attachments, function (attachment) {\n            var match = attachment.type === 'url' ? attachment.url.match(\"(youtu|.png|.jpg|.gif)\") : attachment.mimetype.match(\"(image|video|application/pdf|text)\");\n            if (match) {\n                attachment.fileType = match[1];\n                if (match[1].match(\"(.png|.jpg|.gif)\")) {\n                    attachment.fileType = 'image';\n                }\n                if (match[1] === 'youtu') {\n                    var youtube_array = attachment.url.split('/');\n                    var youtube_token = youtube_array[youtube_array.length-1];\n                    if (youtube_token.indexOf('watch') !== -1) {\n                        youtube_token = youtube_token.split('v=')[1];\n                        var amp = youtube_token.indexOf('&')\n                        if (amp !== -1){\n                            youtube_token = youtube_token.substring(0, amp);\n                        }\n                    }\n                    attachment.youtube = youtube_token;\n                }\n                return true;\n            }\n        });\n        this.activeAttachment = _.findWhere(attachments, {id: activeAttachmentID});\n        this.modelName = 'ir.attachment';\n        this._reset();\n    },\n    /**\n     * Do some actions after the widget is appended to the DOM\n     * @override\n     */\n    setElement: function () {\n        const result = this._super(...arguments);\n        this._hidePdfButtonsIfPresent();\n        return result;\n    },\n    /**\n     * Open a modal displaying the active attachment\n     * @override\n     */\n    start: function () {\n        this.$el.modal('show');\n        this.$el.on('hidden.bs.modal', _.bind(this._onDestroy, this));\n        this.$('.o_viewer_img').on(\"load\", _.bind(this._onImageLoaded, this));\n        this.$('[data-toggle=\"tooltip\"]').tooltip({delay: 0});\n        return this._super.apply(this, arguments);\n    },\n    /**\n     * @override\n     */\n    destroy: function () {\n        if (this.isDestroyed()) {\n            return;\n        }\n        this.$el.modal('hide');\n        this.$el.remove();\n        this._super.apply(this, arguments);\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //---------------------------------------------------------------------------\n\n    /**\n     * Hide some buttons in PDF.js\n     * @override\n     */\n    _hidePdfButtonsIfPresent: function () {\n        if (this.activeAttachment.mimetype === 'application/pdf') {\n            hidePDFJSButtons(this.el);\n        }\n    },\n    /**\n     * @private\n     */\n    _next: function () {\n        var index = _.findIndex(this.attachment, this.activeAttachment);\n        index = (index + 1) % this.attachment.length;\n        this.activeAttachment = this.attachment[index];\n        this._updateContent();\n    },\n    /**\n     * @private\n     */\n    _previous: function () {\n        var index = _.findIndex(this.attachment, this.activeAttachment);\n        index = index === 0 ? this.attachment.length - 1 : index - 1;\n        this.activeAttachment = this.attachment[index];\n        this._updateContent();\n    },\n    /**\n     * @private\n     */\n    _reset: function () {\n        this.scale = 1;\n        this.dragStartX = this.dragstopX = 0;\n        this.dragStartY = this.dragstopY = 0;\n    },\n    /**\n     * Render the active attachment\n     *\n     * @private\n     */\n    _updateContent: function () {\n        this.$('.o_viewer_content').html(QWeb.render('DocumentViewer.Content', {\n            widget: this\n        }));\n        this.$('.o_viewer_img').on(\"load\", _.bind(this._onImageLoaded, this));\n        this._hidePdfButtonsIfPresent();\n        this.$('[data-toggle=\"tooltip\"]').tooltip({delay: 0});\n        this._reset();\n    },\n    /**\n     * Get CSS transform property based on scale and angle\n     *\n     * @private\n     * @param {float} scale\n     * @param {float} angle\n     */\n    _getTransform: function(scale, angle) {\n        return 'scale3d(' + scale + ', ' + scale + ', 1) rotate(' + angle + 'deg)';\n    },\n    /**\n     * Rotate image clockwise by provided angle\n     *\n     * @private\n     * @param {float} angle\n     */\n    _rotate: function (angle) {\n        this._reset();\n        var new_angle = (this.angle || 0) + angle;\n        this.$('.o_viewer_img').css('transform', this._getTransform(this.scale, new_angle));\n        this.$('.o_viewer_img').css('max-width', new_angle % 180 !== 0 ? $(document).height() : '100%');\n        this.$('.o_viewer_img').css('max-height', new_angle % 180 !== 0 ? $(document).width() : '100%');\n        this.angle = new_angle;\n    },\n    /**\n     * Zoom in/out image by provided scale\n     *\n     * @private\n     * @param {integer} scale\n     */\n    _zoom: function (scale) {\n        if (scale > 0.5) {\n            this.$('.o_viewer_img').css('transform', this._getTransform(scale, this.angle || 0));\n            this.scale = scale;\n        }\n        this.$('.o_zoom_reset').add('.o_zoom_out').toggleClass('disabled', scale === 1);\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {MouseEvent} e\n     */\n    _onClose: function (e) {\n        e.preventDefault();\n        this.destroy();\n    },\n    /**\n     * When popup close complete destroyed modal even DOM footprint too\n     *\n     * @private\n     */\n    _onDestroy: function () {\n        this.destroy();\n    },\n    /**\n     * @private\n     * @param {MouseEvent} e\n     */\n    _onDownload: function (e) {\n        e.preventDefault();\n        window.location = '/web/content/' + this.modelName + '/' + this.activeAttachment.id + '/' + 'datas' + '?download=true';\n    },\n    /**\n     * @private\n     * @param {MouseEvent} e\n     */\n    _onDrag: function (e) {\n        e.preventDefault();\n        if (this.enableDrag) {\n            var $image = this.$('.o_viewer_img');\n            var $zoomer = this.$('.o_viewer_zoomer');\n            var top = $image.prop('offsetHeight') * this.scale > $zoomer.height() ? e.clientY - this.dragStartY : 0;\n            var left = $image.prop('offsetWidth') * this.scale > $zoomer.width() ? e.clientX - this.dragStartX : 0;\n            $zoomer.css(\"transform\", \"translate3d(\"+ left +\"px, \" + top + \"px, 0)\");\n            $image.css('cursor', 'move');\n        }\n    },\n    /**\n     * @private\n     * @param {MouseEvent} e\n     */\n    _onEndDrag: function (e) {\n        e.preventDefault();\n        if (this.enableDrag) {\n            this.enableDrag = false;\n            this.dragstopX = e.clientX - this.dragStartX;\n            this.dragstopY = e.clientY - this.dragStartY;\n            this.$('.o_viewer_img').css('cursor', '');\n        }\n    },\n    /**\n     * On click of image do not close modal so stop event propagation\n     *\n     * @private\n     * @param {MouseEvent} e\n     */\n    _onImageClicked: function (e) {\n        e.stopPropagation();\n    },\n    /**\n     * Remove loading indicator when image loaded\n     * @private\n     */\n    _onImageLoaded: function () {\n        this.$('.o_loading_img').hide();\n    },\n    /**\n     * Move next previous attachment on keyboard right left key\n     *\n     * @private\n     * @param {KeyEvent} e\n     */\n    _onKeydown: function (e){\n        switch (e.which) {\n            case $.ui.keyCode.RIGHT:\n                e.preventDefault();\n                this._next();\n                break;\n            case $.ui.keyCode.LEFT:\n                e.preventDefault();\n                this._previous();\n                break;\n        }\n    },\n    /**\n     * Close popup on ESCAPE keyup\n     *\n     * @private\n     * @param {KeyEvent} e\n     */\n    _onKeyUp: function (e) {\n        switch (e.which) {\n            case $.ui.keyCode.ESCAPE:\n                e.preventDefault();\n                this._onClose(e);\n                break;\n        }\n    },\n    /**\n     * @private\n     * @param {MouseEvent} e\n     */\n    _onNext: function (e) {\n        e.preventDefault();\n        this._next();\n    },\n    /**\n     * @private\n     * @param {MouseEvent} e\n     */\n    _onPrevious: function (e) {\n        e.preventDefault();\n        this._previous();\n    },\n    /**\n     * @private\n     * @param {MouseEvent} e\n     */\n    _onPrint: function (e) {\n        e.preventDefault();\n        var src = this.$('.o_viewer_img').prop('src');\n        var script = QWeb.render('PrintImage', {\n            src: src\n        });\n        var printWindow = window.open('about:blank', \"_new\");\n        printWindow.document.open();\n        printWindow.document.write(script);\n        printWindow.document.close();\n    },\n    /**\n     * Zoom image on scroll\n     *\n     * @private\n     * @param {MouseEvent} e\n     */\n    _onScroll: function (e) {\n        var scale;\n        if (e.originalEvent.wheelDelta > 0 || e.originalEvent.detail < 0) {\n            scale = this.scale + SCROLL_ZOOM_STEP;\n            this._zoom(scale);\n        } else {\n            scale = this.scale - SCROLL_ZOOM_STEP;\n            this._zoom(scale);\n        }\n    },\n    /**\n     * @private\n     * @param {MouseEvent} e\n     */\n    _onStartDrag: function (e) {\n        e.preventDefault();\n        this.enableDrag = true;\n        this.dragStartX = e.clientX - (this.dragstopX || 0);\n        this.dragStartY = e.clientY - (this.dragstopY || 0);\n    },\n    /**\n     * On click of video do not close modal so stop event propagation\n     * and provide play/pause the video instead of quitting it\n     *\n     * @private\n     * @param {MouseEvent} e\n     */\n    _onVideoClicked: function (e) {\n        e.stopPropagation();\n        var videoElement = e.target;\n        if (videoElement.paused) {\n            videoElement.play();\n        } else {\n            videoElement.pause();\n        }\n    },\n    /**\n     * @private\n     * @param {MouseEvent} e\n     */\n    _onRotate: function (e) {\n        e.preventDefault();\n        this._rotate(90);\n    },\n    /**\n     * @private\n     * @param {MouseEvent} e\n     */\n    _onZoomIn: function (e) {\n        e.preventDefault();\n        var scale = this.scale + ZOOM_STEP;\n        this._zoom(scale);\n    },\n    /**\n     * @private\n     * @param {MouseEvent} e\n     */\n    _onZoomOut: function (e) {\n        e.preventDefault();\n        var scale = this.scale - ZOOM_STEP;\n        this._zoom(scale);\n    },\n    /**\n     * @private\n     * @param {MouseEvent} e\n     */\n    _onZoomReset: function (e) {\n        e.preventDefault();\n        this.$('.o_viewer_zoomer').css(\"transform\", \"\");\n        this._zoom(1);\n    },\n});\n\nexport default DocumentViewer;\n", "/** @odoo-module **/\n\n/**\n * This module exports the list of all available emojis on the client side.\n * An emoji object has the following properties:\n *\n *      - {string[]} sources: the character representations of the emoji\n *      - {string} unicode: the unicode representation of the emoji\n *      - {string} description: the description of the emoji\n */\n\n/**\n * This data represent all the available emojis that are supported on the web\n * client:\n *\n * - key: this is the source representation of an emoji, i.e. its \"character\"\n *        representation. This is a string that can be easily typed by the\n *        user and then translated to its unicode representation (see value)\n * - value: this is the unicode representation of an emoji, i.e. its \"true\"\n *          representation in the system.\n */\nconst data = {\n    \":)\":             \"\ud83d\ude0a\",\n    \":-)\":            \"\ud83d\ude0a\", // alternative (alt.)\n    \"=)\":             \"\ud83d\ude0a\", // alt.\n    \":]\":             \"\ud83d\ude0a\", // alt.\n    \":D\":             \"\ud83d\ude03\",\n    \":-D\":            \"\ud83d\ude03\", // alt.\n    \"=D\":             \"\ud83d\ude03\", // alt.\n    \"xD\":             \"\ud83d\ude06\",\n    \"XD\":             \"\ud83d\ude06\", // alt.\n    \"x'D\":            \"\ud83d\ude02\",\n    \";)\":             \"\ud83d\ude09\",\n    \";-)\":            \"\ud83d\ude09\", // alt.\n    \"B)\":             \"\ud83d\ude0e\",\n    \"8)\":             \"\ud83d\ude0e\", // alt.\n    \"B-)\":            \"\ud83d\ude0e\", // alt.\n    \"8-)\":            \"\ud83d\ude0e\", // alt.\n    \";p\":             \"\ud83d\ude1c\",\n    \";P\":             \"\ud83d\ude1c\", // alt.\n    \":p\":             \"\ud83d\ude0b\",\n    \":P\":             \"\ud83d\ude0b\", // alt.\n    \":-p\":            \"\ud83d\ude0b\", // alt.\n    \":-P\":            \"\ud83d\ude0b\", // alt.\n    \"=P\":             \"\ud83d\ude0b\", // alt.\n    \"xp\":             \"\ud83d\ude1d\",\n    \"xP\":             \"\ud83d\ude1d\", // alt.\n    \"o_o\":            \"\ud83d\ude33\",\n    \":|\":             \"\ud83d\ude10\",\n    \":-|\":            \"\ud83d\ude10\", // alt.\n    \":/\":             \"\ud83d\ude15\", // alt.\n    \":-/\":            \"\ud83d\ude15\", // alt.\n    \":(\":             \"\ud83d\ude1e\",\n    \":@\":             \"\ud83d\ude31\",\n    \":O\":             \"\ud83d\ude32\",\n    \":-O\":            \"\ud83d\ude32\", // alt.\n    \":o\":             \"\ud83d\ude32\", // alt.\n    \":-o\":            \"\ud83d\ude32\", // alt.\n    \":'o\":            \"\ud83d\ude28\",\n    \"3:(\":            \"\ud83d\ude20\",\n    \">:(\":            \"\ud83d\ude20\", // alt.\n    \"3:)\":            \"\ud83d\ude08\",\n    \">:)\":            \"\ud83d\ude08\", // alt.\n    \":*\":             \"\ud83d\ude18\",\n    \":-*\":            \"\ud83d\ude18\", // alt.\n    \"o:)\":            \"\ud83d\ude07\",\n    \":'(\":            \"\ud83d\ude22\",\n    \":'-(\":           \"\ud83d\ude2d\",\n    \":\\\"(\":           \"\ud83d\ude2d\", // alt.\n    \"<3\":             \"\u2764\ufe0f\",\n    \"&lt;3\":          \"\u2764\ufe0f\",\n    \":heart\":         \"\u2764\ufe0f\", // alt.\n    \"</3\":            \"\ud83d\udc94\",\n    \"&lt;/3\":         \"\ud83d\udc94\",\n    \":heart_eyes\":    \"\ud83d\ude0d\",\n    \":turban\":        \"\ud83d\udc73\",\n    \":+1\":            \"\ud83d\udc4d\",\n    \":-1\":            \"\ud83d\udc4e\",\n    \":ok\":            \"\ud83d\udc4c\",\n    \":poop\":          \"\ud83d\udca9\",\n    \":no_see\":        \"\ud83d\ude48\",\n    \":no_hear\":       \"\ud83d\ude49\",\n    \":no_speak\":      \"\ud83d\ude4a\",\n    \":bug\":           \"\ud83d\udc1e\",\n    \":kitten\":        \"\ud83d\ude3a\",\n    \":bear\":          \"\ud83d\udc3b\",\n    \":snail\":         \"\ud83d\udc0c\",\n    \":boar\":          \"\ud83d\udc17\",\n    \":clover\":        \"\ud83c\udf40\",\n    \":sunflower\":     \"\ud83c\udf39\",\n    \":fire\":          \"\ud83d\udd25\",\n    \":sun\":           \"\u2600\ufe0f\",\n    \":partly_sunny:\": \"\u26c5\ufe0f\",\n    \":rainbow\":       \"\ud83c\udf08\",\n    \":cloud\":         \"\u2601\ufe0f\",\n    \":zap\":           \"\u26a1\ufe0f\",\n    \":star\":          \"\u2b50\ufe0f\",\n    \":cookie\":        \"\ud83c\udf6a\",\n    \":pizza\":         \"\ud83c\udf55\",\n    \":hamburger\":     \"\ud83c\udf54\",\n    \":fries\":         \"\ud83c\udf5f\",\n    \":cake\":          \"\ud83c\udf82\",\n    \":cake_part\":     \"\ud83c\udf70\",\n    \":coffee\":        \"\u2615\ufe0f\",\n    \":banana\":        \"\ud83c\udf4c\",\n    \":sushi\":         \"\ud83c\udf63\",\n    \":rice_ball\":     \"\ud83c\udf59\",\n    \":beer\":          \"\ud83c\udf7a\",\n    \":wine\":          \"\ud83c\udf77\",\n    \":cocktail\":      \"\ud83c\udf78\",\n    \":tropical\":      \"\ud83c\udf79\",\n    \":beers\":         \"\ud83c\udf7b\",\n    \":ghost\":         \"\ud83d\udc7b\",\n    \":skull\":         \"\ud83d\udc80\",\n    \":et\":            \"\ud83d\udc7d\",\n    \":alien\":         \"\ud83d\udc7d\", // alt.\n    \":party\":         \"\ud83c\udf89\",\n    \":trophy\":        \"\ud83c\udfc6\",\n    \":key\":           \"\ud83d\udd11\",\n    \":pin\":           \"\ud83d\udccc\",\n    \":postal_horn\":   \"\ud83d\udcef\",\n    \":music\":         \"\ud83c\udfb5\",\n    \":trumpet\":       \"\ud83c\udfba\",\n    \":guitar\":        \"\ud83c\udfb8\",\n    \":run\":           \"\ud83c\udfc3\",\n    \":bike\":          \"\ud83d\udeb2\",\n    \":soccer\":        \"\u26bd\ufe0f\",\n    \":football\":      \"\ud83c\udfc8\",\n    \":8ball\":         \"\ud83c\udfb1\",\n    \":clapper\":       \"\ud83c\udfac\",\n    \":microphone\":    \"\ud83c\udfa4\",\n    \":cheese\":        \"\ud83e\uddc0\",\n};\n\n// list of emojis in a dictionary, indexed by emoji unicode\nvar emojiDict = {};\n_.each(data, function (unicode, source) {\n    if (!emojiDict[unicode]) {\n        emojiDict[unicode] = {\n            sources: [source],\n            unicode: unicode,\n            description: source,\n        };\n    } else {\n        emojiDict[unicode].sources.push(source);\n    }\n});\n\nexport const emojis = _.values(emojiDict);\n\nexport default emojis;\n", "/** @odoo-module **/\n\nimport emojis from '@mail/js/emojis';\n\n/**\n * This mixin gathers a few methods that are used to handle emojis.\n *\n * It's used to:\n *\n * - handle the click on an emoji from a dropdown panel and add it to the related textarea/input\n * - format text and wrap the emojis around <span class=\"o_mail_emoji\"> to make them look nicer\n *\n * Methods are based on the collections of emojis available in mail.emojis\n *\n */\nexport default {\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * This method should be bound to a click event on an emoji.\n     * (used in text element's emojis dropdown list)\n     *\n     * It assumes that a ``_getTargetTextElement`` method is defined that will return the related\n     * textarea/input element in which the emoji will be inserted.\n     *\n     * @param {MouseEvent} ev\n     */\n    _onEmojiClick: function (ev) {\n        var unicode = ev.currentTarget.textContent.trim();\n        var textInput = this._getTargetTextElement($(ev.currentTarget))[0];\n        var selectionStart = textInput.selectionStart;\n\n        textInput.value = textInput.value.slice(0, selectionStart) + unicode + textInput.value.slice(selectionStart);\n        textInput.focus();\n        textInput.setSelectionRange(selectionStart + unicode.length, selectionStart + unicode.length);\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * This method is used to wrap emojis in a text message with <span class=\"o_mail_emoji\">\n     * As this returns html to be used in a 't-raw' argument, it first makes sure that the\n     * passed text message is html escaped for safety reasons.\n     *\n     * @param {String} message a text message to format\n     */\n    _formatText: function (message) {\n        message = this._htmlEscape(message);\n        message = this._wrapEmojis(message);\n        message = message.replace(/(?:\\r\\n|\\r|\\n)/g, '<br>');\n\n        return message;\n    },\n\n    /**\n     * Adapted from qweb2.js#html_escape to avoid formatting '&'\n     *\n     * @param {String} s\n     * @private\n     */\n    _htmlEscape: function (s) {\n        if (s == null) {\n            return '';\n        }\n        return String(s).replace(/</g, '&lt;').replace(/>/g, '&gt;');\n    },\n\n    /**\n     * Will use the mail.emojis library to wrap emojis unicode around a span with a special font\n     * that will make them look nicer (colored, ...).\n     *\n     * @param {String} message\n     */\n    _wrapEmojis: function (message) {\n        emojis.forEach(function (emoji) {\n            message = message.replace(\n                new RegExp(emoji.unicode.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'), 'g'),\n                '<span class=\"o_mail_emoji\">' + emoji.unicode + '</span>'\n            );\n        });\n\n        return message;\n    }\n};\n", "/** @odoo-module **/\n\nimport { FieldChar } from 'web.basic_fields';\n\nFieldChar.include({\n\n    //--------------------------------------------------------------------------\n    // Public\n    //-------------------------------------------------------------------------\n\n    /**\n     * Support a key-based onchange in text field.\n     * The _triggerOnchange method is debounced to run 2 seconds after typing ends.\n     *\n     */\n    init: function () {\n        this._super.apply(this, arguments);\n        this._triggerOnchange = _.debounce(this._triggerOnchange, 2000);\n    },\n\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Trigger the 'change' event at key down. It allows to trigger an onchange\n     * while typing which may be interesting in some cases. Otherwise onchange\n     * is triggered only on blur.\n     *\n     * @override\n     * @private\n     */\n    _onKeydown: function () {\n        this._super.apply(this, arguments);\n        if (this.nodeOptions.onchange_on_keydown) {\n            this._triggerOnchange();\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Triggers the 'change' event to refresh the value.\n     * This method is debounced to run 2 seconds after typing ends.\n     * (to avoid spamming the server while the user is typing his message)\n     *\n     * @private\n     */\n    _triggerOnchange: function () {\n        this.$input.trigger('change');\n    },\n});\n", "/** @odoo-module **/\n\nimport MailEmojisMixin from '@mail/js/emojis_mixin';\nimport FieldEmojiCommon from '@mail/js/field_emojis_common';\n\nimport basicFields from 'web.basic_fields';\nimport registry from 'web.field_registry';\n\n/**\n * Extension of the FieldChar that will add emojis support\n */\nvar FieldCharEmojis = basicFields.FieldChar.extend(MailEmojisMixin, FieldEmojiCommon);\n\nregistry.add('char_emojis', FieldCharEmojis);\n\nexport default FieldCharEmojis;\n", "/** @odoo-module **/\n\nimport emojis from '@mail/js/emojis';\nimport MailEmojisMixin from '@mail/js/emojis_mixin';\n\nimport basicFields from 'web.basic_fields';\nimport core from 'web.core';\n\nvar _onEmojiClickMixin = MailEmojisMixin._onEmojiClick;\nvar QWeb = core.qweb;\n\n/*\n * Common code for FieldTextEmojis and FieldCharEmojis\n */\nvar FieldEmojiCommon = {\n    /**\n     * @override\n     * @private\n     */\n    init: function () {\n        this._super.apply(this, arguments);\n        this._triggerOnchange = _.debounce(this._triggerOnchange, 2000);\n        this.emojis = emojis;\n    },\n\n    /**\n     * @override\n     */\n    on_attach_callback: function () {\n        this._attachEmojisDropdown();\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     * @private\n     */\n    _render: function () {\n        this._super.apply(this, arguments);\n\n        if (this.mode !== 'edit') {\n            this.$el.html(this._formatText(this.$el.text()));\n        }\n    },\n\n    /**\n     * Overridden because we need to add the Emoji to the input AND trigger\n     * the 'change' event to refresh the value.\n     *\n     * @override\n     * @private\n     */\n    _onEmojiClick: function () {\n        _onEmojiClickMixin.apply(this, arguments);\n        this._isDirty = true;\n        this.$input.trigger('change');\n    },\n\n    /**\n     *\n     * By default, the 'change' event is only triggered when the text element is blurred.\n     *\n     * We override this method because we want to update the value while\n     * the user is typing his message (and not only on blur).\n     *\n     * @override\n     * @private\n     */\n    _onKeydown: function () {\n        this._super.apply(this, arguments);\n        if (this.nodeOptions.onchange_on_keydown) {\n            this._triggerOnchange();\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Used by MailEmojisMixin, check its document for more info.\n     *\n     * @private\n     */\n    _getTargetTextElement() {\n        return this.$el;\n    },\n\n    /**\n     * Triggers the 'change' event to refresh the value.\n     * This method is debounced to run 2 seconds after typing ends.\n     * (to avoid spamming the server while the user is typing his message)\n     *\n     * @private\n     */\n    _triggerOnchange: function () {\n        this.$input.trigger('change');\n    },\n\n    /**\n     * This will add an emoji button that shows the emojis selection dropdown.\n     *\n     * Should be used inside 'on_attach_callback' because we need the element to be attached to the form first.\n     * That's because the $emojisIcon element needs to be rendered outside of this $el\n     * (which is an text element, that can't 'contain' any other elements).\n     *\n     * @private\n     */\n    _attachEmojisDropdown: function () {\n        if (!this.$emojisIcon) {\n            this.$emojisIcon = $(QWeb.render('mail.EmojisDropdown', {widget: this}));\n            this.$emojisIcon.find('.o_mail_emoji').on('click', this._onEmojiClick.bind(this));\n\n            if (this.$el.filter('span.o_field_translate').length) {\n                // multi-languages activated, place the button on the left of the translation button\n                this.$emojisIcon.addClass('o_mail_emojis_dropdown_translation');\n            }\n            if (this.$el.filter('textarea').length) {\n                this.$emojisIcon.addClass('o_mail_emojis_dropdown_textarea');\n            }\n            this.$el.last().after(this.$emojisIcon);\n        }\n\n        if (this.mode === 'edit') {\n            this.$emojisIcon.show();\n        } else {\n            this.$emojisIcon.hide();\n        }\n    }\n};\n\nexport default FieldEmojiCommon;\n", "/** @odoo-module **/\n\nimport MailEmojisMixin from '@mail/js/emojis_mixin';\nimport FieldEmojiCommon from '@mail/js/field_emojis_common';\n\nimport basicFields from 'web.basic_fields';\nimport registry from 'web.field_registry';\n\n/**\n * Extension of the FieldText that will add emojis support\n */\nvar FieldTextEmojis = basicFields.FieldText.extend(MailEmojisMixin, FieldEmojiCommon);\n\nregistry.add('text_emojis', FieldTextEmojis);\n\nexport default FieldTextEmojis;\n", "/** @odoo-module **/\n\nimport core from 'web.core';\nimport fieldRegistry from 'web.field_registry';\nimport { FieldMany2ManyTagsAvatar, KanbanMany2ManyTagsAvatar, ListMany2ManyTagsAvatar, Many2OneAvatar } from 'web.relational_fields';\nimport session from 'web.session';\n\nconst { Component } = owl;\n\n\n// This module defines extensions of the Many2OneAvatar and Many2ManyAvatar\n// widgets, which are integrated with the messaging system. They are designed\n// to display people, and when the avatar of those people is clicked, it\n// opens a DM chat window with the corresponding user.\n//\n// These widgets are supported on many2one and many2many fields pointing to\n// 'res.users'.\n//\n// Usage:\n//   <field name=\"user_id\" widget=\"many2one_avatar_user\"/>\n//\n// The widgets are designed to be extended, to support fields pointing to other\n// models than 'res.users'.\n\nconst M2XAvatarMixin = {\n    supportedModels: ['res.users'],\n\n    init() {\n        this._super(...arguments);\n        if (!this.supportedModels.includes(this.field.relation)) {\n            throw new Error(`This widget is only supported on many2one and many2many fields pointing to ${JSON.stringify(this.supportedModels)}`);\n        }\n        this.className = `${this.className || ''} o_clickable_m2x_avatar`.trim();\n        this.noOpenChat = this.nodeOptions.no_open_chat || false;\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Opens a chat window with the given user id.\n     *\n     * @private\n     * @param {Object} params\n     * @returns {Promise}\n     */\n    async _openChat(params) {\n        if (!this.noOpenChat) {\n            const messaging = await Component.env.services.messaging.get();\n            return messaging.openChat(params);\n        }\n        return Promise.resolve();\n    },\n};\n\nexport const Many2OneAvatarUser = Many2OneAvatar.extend(M2XAvatarMixin, {\n    events: Object.assign({}, Many2OneAvatar.prototype.events, {\n        'click .o_m2o_avatar > img': '_onAvatarClicked',\n    }),\n\n    on_attach_callback() {\n        this._registerCommandAssignTo()\n    },\n    on_detach_callback(){\n        this._unregisterCommandAssignTo()\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     * @private\n     */\n     _registerCommandAssignTo() {\n        const self = this;\n        if (self.viewType === \"form\") {\n            let provide = async (env, options) => {\n                if (self.isDestroyed()) {\n                    return\n                }\n                const records = await self._searchAssignTo(options.searchValue, 10)\n                return records.map((record) => ({\n                    name: record[1],\n                    action: () => {\n                        if (self.isDestroyed()) {\n                            return\n                        }\n                        self.reinitialize({ id: record[0], display_name: record[1] });\n                    }\n                }))\n            }\n            let getCommandDefinition = (env) => ({\n                name: env._t(\"Assign to ...\"),\n                options: {\n                    activeElement: env.services.ui.getActiveElementOf(self.el),\n                    category: \"smart_action\",\n                    hotkey: \"alt+i\",\n                },\n                async action() {\n                    return env.services.command.openPalette({\n                        emptyMessageByNamespace: { \"default\": env._t(\"No users found\") },\n                        placeholder: env._t(\"Select a user...\"),\n                        providers: [{ provide }],\n                    })\n                },\n            });\n            core.bus.trigger(\"set_legacy_command\", \"web.Many2OneAvatar.assignTo\", getCommandDefinition, self.el);\n\n\n            getCommandDefinition = (env) => ({\n                name: env._t(\"Assign/unassign to me\"),\n                options: {\n                    activeElement: env.services.ui.getActiveElementOf(self.el),\n                    category: \"smart_action\",\n                    hotkey: \"alt+shift+i\",\n                },\n                action() {\n                    if (self.isDestroyed()) {\n                        return\n                    }\n                    if (self.value.res_id === session.user_id[0]) {\n                        self._setValue({\n                            operation: 'DELETE',\n                            ids: [session.user_id[0]],\n                            });\n                    } else {\n                        self.reinitialize({ id: session.user_id[0], display_name: session.name });\n                    }\n                },\n            });\n            core.bus.trigger(\"set_legacy_command\", \"web.Many2OneAvatar.assignToMe\", getCommandDefinition);\n        }\n    },\n\n    /**\n     * @override\n     * @private\n     */\n    _unregisterCommandAssignTo() {\n        core.bus.trigger(\"remove_legacy_command\", \"web.Many2OneAvatar.assignTo\");\n        core.bus.trigger(\"remove_legacy_command\", \"web.Many2OneAvatar.assignToMe\");\n    },\n\n    /**\n     * @override\n     * @private\n     */\n    _searchAssignTo(searchValue, limit) {\n        const value = searchValue.trim();\n        const domain = this.record.getDomain(this.recordParams);\n        const context = Object.assign(\n            this.record.getContext(this.recordParams),\n            this.additionalContext,\n        );\n\n        // Exclude black-listed ids from the domain\n        const blackListedIds = this._getSearchBlacklist();\n        if (blackListedIds.length) {\n            domain.push(['id', 'not in', blackListedIds]);\n        }\n\n        const nameSearch = this._rpc({\n            model: this.field.relation,\n            method: \"name_search\",\n            kwargs: {\n                name: value,\n                args: domain,\n                operator: \"ilike\",\n                limit: limit + 1,\n                context,\n            }\n        });\n        return this.orderer.add(nameSearch);\n    },\n    //----------------------------------------------------------------------\n    // Handlers\n    //----------------------------------------------------------------------\n\n    /**\n     * When the avatar is clicked, open a DM chat window with the\n     * corresponding user.\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onAvatarClicked(ev) {\n        ev.stopPropagation(); // in list view, prevent from opening the record\n        this._openChat({ userId: this.value.res_id });\n    },\n});\n\nexport const KanbanMany2OneAvatarUser = Many2OneAvatarUser.extend({\n    _template: 'mail.KanbanMany2OneAvatarUser',\n});\n\nconst M2MAvatarMixin = Object.assign(M2XAvatarMixin, {\n    events: Object.assign({}, FieldMany2ManyTagsAvatar.prototype.events, {\n        'click .o_m2m_avatar': '_onAvatarClicked',\n    }),\n\n    //----------------------------------------------------------------------\n    // Handlers\n    //----------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onAvatarClicked(ev) {\n        ev.stopPropagation(); // in list view, prevent from opening the record\n        const userId = parseInt(ev.target.getAttribute('data-id'), 10);\n        this._openChat({ userId: userId });\n    },\n});\n\nexport const Many2ManyAvatarUser = FieldMany2ManyTagsAvatar.extend(M2MAvatarMixin, {\n\n    on_attach_callback() {\n        this._registerCommandAssignTo()\n    },\n    on_detach_callback(){\n        this._unregisterCommandAssignTo()\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     * @private\n     */\n     _registerCommandAssignTo() {\n        const self = this;\n        if (self.viewType === \"form\") {\n            const provide = async (env, options) => {\n                if (self.isDestroyed()) {\n                    return\n                }\n                const many2one = new Many2OneAvatarUser(self, self.name, self.record, {\n                    mode: 'edit',\n                    noOpen: true,\n                    noCreate: !self.canCreate,\n                    viewType: self.viewType,\n                    attrs: self.attrs,\n                });\n                many2one._getSearchBlacklist = function () {\n                    return self.value.res_ids;\n                };\n                const records = await many2one._searchAssignTo(options.searchValue, 10)\n                return records.map((record) => ({\n                    name: record[1],\n                    action: () => {\n                        if (self.isDestroyed()) {\n                            return\n                        }\n                        self._setValue({\n                            operation: 'ADD_M2M',\n                            ids: { id: record[0], display_name: record[1] }\n                        });\n                    },\n                }))\n            };\n            let getCommandDefinition = (env) => ({\n                name: env._t(\"Assign to ...\"),\n                options: {\n                    activeElement: env.services.ui.getActiveElementOf(self.el),\n                    category: \"smart_action\",\n                    hotkey: \"alt+i\",\n                },\n                action() {\n                    return env.services.command.openPalette({\n                        emptyMessageByNamespace: { \"default\": env._t(\"No users found\") },\n                        placeholder: env._t(\"Select a user...\"),\n                        providers: [{ provide }],\n                    })\n                },\n            })\n            core.bus.trigger(\"set_legacy_command\", \"web.FieldMany2ManyTagsAvatar.assignTo\", getCommandDefinition)\n\n            getCommandDefinition = (env) => ({\n                name: env._t(\"Assign/unassign to me\"),\n                options: {\n                    activeElement: env.services.ui.getActiveElementOf(self.el),\n                    category: \"smart_action\",\n                    hotkey: \"alt+shift+i\",\n                },\n                action() {\n                    if (self.isDestroyed()) {\n                        return\n                    }\n                    if (self.value.res_ids.includes(session.user_id[0])) {\n                        self._setValue({\n                            operation: 'DELETE',\n                            ids: [session.user_id[0]],\n                            });\n                    } else {\n                        self._setValue({\n                            operation: 'ADD_M2M',\n                            ids: { id:  session.user_id[0], display_name: session.name }\n                        });\n                    }\n                },\n            });\n            core.bus.trigger(\"set_legacy_command\", \"web.Many2OneAvatar.assignToMe\", getCommandDefinition);\n        }\n    },\n\n    /**\n     * @override\n     * @private\n     */\n     _unregisterCommandAssignTo() {\n        core.bus.trigger(\"remove_legacy_command\", \"web.FieldMany2ManyTagsAvatar.assignTo\");\n        core.bus.trigger(\"remove_legacy_command\", \"web.Many2OneAvatar.assignToMe\");\n     }\n});\n\nexport const KanbanMany2ManyAvatarUser = KanbanMany2ManyTagsAvatar.extend(M2MAvatarMixin, {});\n\nexport const ListMany2ManyAvatarUser = ListMany2ManyTagsAvatar.extend(M2MAvatarMixin, {});\n\nfieldRegistry.add('many2one_avatar_user', Many2OneAvatarUser);\nfieldRegistry.add('kanban.many2one_avatar_user', KanbanMany2OneAvatarUser);\nfieldRegistry.add('activity.many2one_avatar_user', KanbanMany2OneAvatarUser);\nfieldRegistry.add('many2many_avatar_user', Many2ManyAvatarUser);\nfieldRegistry.add('kanban.many2many_avatar_user', KanbanMany2ManyAvatarUser);\nfieldRegistry.add('list.many2many_avatar_user', ListMany2ManyAvatarUser);\n", "/** @odoo-module **/\n\nimport BasicModel from 'web.BasicModel';\nimport core from 'web.core';\nimport form_common from 'web.view_dialogs';\nimport field_registry from 'web.field_registry';\nimport relational_fields from 'web.relational_fields';\n\nvar M2MTags = relational_fields.FieldMany2ManyTags;\nvar _t = core._t;\n\nBasicModel.include({\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {Object} record - an element from the localData\n     * @param {string} fieldName\n     * @return {Promise<Object>} the promise is resolved with the\n     *                            invalidPartnerIds\n     */\n    _setInvalidMany2ManyTagsEmail: function (record, fieldName) {\n        var self = this;\n        var localID = (record._changes && fieldName in record._changes) ?\n                        record._changes[fieldName] :\n                        record.data[fieldName];\n        var list = this._applyX2ManyOperations(this.localData[localID]);\n        var invalidPartnerIds = [];\n        _.each(list.data, function (id) {\n            var record = self.localData[id];\n            if (!record.data.email) {\n                invalidPartnerIds.push(record);\n            }\n        });\n        var def;\n        if (invalidPartnerIds.length) {\n            // remove invalid partners\n            var changes = {operation: 'DELETE', ids: _.pluck(invalidPartnerIds, 'id')};\n            def = this._applyX2ManyChange(record, fieldName, changes);\n        }\n        return Promise.resolve(def).then(function () {\n            return {\n                invalidPartnerIds: _.pluck(invalidPartnerIds, 'res_id'),\n            };\n        });\n    },\n});\n\nvar FieldMany2ManyTagsEmail = M2MTags.extend({\n    tag_template: \"FieldMany2ManyTagsEmail\",\n    fieldsToFetch: _.extend({}, M2MTags.prototype.fieldsToFetch, {\n        email: {type: 'char'},\n    }),\n    specialData: \"_setInvalidMany2ManyTagsEmail\",\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Open a popup for each invalid partners (without email) to fill the email.\n     *\n     * @private\n     * @returns {Promise}\n     */\n    _checkEmailPopup: function () {\n        var self = this;\n\n        var popupDefs = [];\n        var validPartners = [];\n\n        // propose the user to correct invalid partners\n        _.each(this.record.specialData[this.name].invalidPartnerIds, function (resID) {\n            var def = new Promise(function (resolve, reject) {\n                var pop = new form_common.FormViewDialog(self, {\n                    res_model: self.field.relation,\n                    res_id: resID,\n                    context: self.record.context,\n                    title: \"\",\n                    on_saved: function (record) {\n                        if (record.data.email) {\n                            validPartners.push(record.res_id);\n                        }\n                    },\n                }).open();\n                pop.on('closed', self, function () {\n                    resolve();\n                });\n            });\n            popupDefs.push(def);\n        });\n        return Promise.all(popupDefs).then(function() {\n            // All popups have been processed for the given ids\n            // It is now time to set the final value with valid partners ids.\n            validPartners = _.uniq(validPartners);\n            if (validPartners.length) {\n                var values = _.map(validPartners, function (id) {\n                    return {id: id};\n                });\n                self._setValue({\n                    operation: 'ADD_M2M',\n                    ids: values,\n                });\n            }\n        });\n    },\n    /**\n     * Override to check if all many2many values have an email set before\n     * rendering the widget.\n     *\n     * @override\n     * @private\n     */\n    _render: function () {\n        var self = this;\n        var _super = this._super.bind(this);\n        return new Promise(function (resolve, reject) {\n            if (self.record.specialData[self.name].invalidPartnerIds.length) {\n                resolve(self._checkEmailPopup());\n            } else {\n                resolve();\n            }\n        }).then(function () {\n            return _super.apply(self, arguments);\n        });\n    },\n});\n\nfield_registry.add('many2many_tags_email', FieldMany2ManyTagsEmail);\n", "/** @odoo-module **/\n\nimport { qweb as QWeb } from 'web.core';\nimport session  from 'web.session';\nimport SystrayMenu from 'web.SystrayMenu';\nimport Widget from 'web.Widget';\nimport Time from 'web.time';\n\nconst { Component } = owl;\n\n/**\n * Menu item appended in the systray part of the navbar, redirects to the next\n * activities of all app\n */\nvar ActivityMenu = Widget.extend({\n    name: 'activity_menu',\n    template:'mail.systray.ActivityMenu',\n    events: {\n        'click .o_mail_activity_action': '_onActivityActionClick',\n        'click .o_mail_preview': '_onActivityFilterClick',\n        'show.bs.dropdown': '_onActivityMenuShow',\n        'hide.bs.dropdown': '_onActivityMenuHide',\n    },\n    start: function () {\n        this._$activitiesPreview = this.$('.o_mail_systray_dropdown_items');\n        Component.env.bus.on('activity_updated', this, this._updateCounter);\n        this._updateCounter();\n        this._updateActivityPreview();\n        return this._super();\n    },\n    //--------------------------------------------------\n    // Private\n    //--------------------------------------------------\n    /**\n     * Make RPC and get current user's activity details\n     * @private\n     */\n    _getActivityData: function () {\n        var self = this;\n\n        return self._rpc({\n            model: 'res.users',\n            method: 'systray_get_activities',\n            args: [],\n            kwargs: {context: session.user_context},\n        }).then(function (data) {\n            self._activities = data;\n            self.activityCounter = _.reduce(data, function (total_count, p_data) { return total_count + p_data.total_count || 0; }, 0);\n            self.$('.o_notification_counter').text(self.activityCounter);\n            self.$el.toggleClass('o_no_notification', !self.activityCounter);\n        });\n    },\n    /**\n     * Get particular model view to redirect on click of activity scheduled on that model.\n     * @private\n     * @param {string} model\n     */\n    _getActivityModelViewID: function (model) {\n        return this._rpc({\n            model: model,\n            method: 'get_activity_view_id'\n        });\n    },\n    /**\n     * Return views to display when coming from systray depending on the model.\n     *\n     * @private\n     * @param {string} model\n     * @returns {Array[]} output the list of views to display.\n     */\n    _getViewsList(model) {\n        return [[false, 'kanban'], [false, 'list'], [false, 'form']];\n    },\n    /**\n     * Update(render) activity system tray view on activity updation.\n     * @private\n     */\n    _updateActivityPreview: function () {\n        var self = this;\n        self._getActivityData().then(function (){\n            self._$activitiesPreview.html(QWeb.render('mail.systray.ActivityMenu.Previews', {\n                widget: self,\n                Time: Time\n            }));\n        });\n    },\n    /**\n     * update counter based on activity status(created or Done)\n     * @private\n     * @param {Object} [data] key, value to decide activity created or deleted\n     * @param {String} [data.type] notification type\n     * @param {Boolean} [data.activity_deleted] when activity deleted\n     * @param {Boolean} [data.activity_created] when activity created\n     */\n    _updateCounter: function (data) {\n        if (data) {\n            if (data.activity_created) {\n                this.activityCounter ++;\n            }\n            if (data.activity_deleted && this.activityCounter > 0) {\n                this.activityCounter --;\n            }\n            this.$('.o_notification_counter').text(this.activityCounter);\n            this.$el.toggleClass('o_no_notification', !this.activityCounter);\n        }\n    },\n\n    //------------------------------------------------------------\n    // Handlers\n    //------------------------------------------------------------\n\n    /**\n     * Redirect to specific action given its xml id or to the activity\n     * view of the current model if no xml id is provided\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onActivityActionClick: function (ev) {\n        ev.stopPropagation();\n        this.$('.dropdown-toggle').dropdown('toggle');\n        var targetAction = $(ev.currentTarget);\n        var actionXmlid = targetAction.data('action_xmlid');\n        if (actionXmlid) {\n            this.do_action(actionXmlid);\n        } else {\n            var domain = [['activity_ids.user_id', '=', session.uid]]\n            if (targetAction.data('domain')) {\n                domain = domain.concat(targetAction.data('domain'))\n            }\n\n            this.do_action({\n                type: 'ir.actions.act_window',\n                name: targetAction.data('model_name'),\n                views: [[false, 'activity'], [false, 'kanban'], [false, 'list'], [false, 'form']],\n                view_mode: 'activity',\n                res_model: targetAction.data('res_model'),\n                domain: domain,\n            }, {\n                clear_breadcrumbs: true,\n            });\n        }\n    },\n\n    /**\n     * Redirect to particular model view\n     * @private\n     * @param {MouseEvent} event\n     */\n    _onActivityFilterClick: function (event) {\n        // fetch the data from the button otherwise fetch the ones from the parent (.o_mail_preview).\n        var data = _.extend({}, $(event.currentTarget).data(), $(event.target).data());\n        var context = {};\n        if (data.filter === 'my') {\n            context['search_default_activities_overdue'] = 1;\n            context['search_default_activities_today'] = 1;\n        } else {\n            context['search_default_activities_' + data.filter] = 1;\n        }\n        // Necessary because activity_ids of mail.activity.mixin has auto_join\n        // So, duplicates are faking the count and \"Load more\" doesn't show up\n        context['force_search_count'] = 1;\n\n        var domain = [['activity_ids.user_id', '=', session.uid]]\n        if (data.domain) {\n            domain = domain.concat(data.domain)\n        }\n\n        this.do_action({\n            type: 'ir.actions.act_window',\n            name: data.model_name,\n            res_model:  data.res_model,\n            views: this._getViewsList(data.res_model),\n            search_view_id: [false],\n            domain: domain,\n            context:context,\n        }, {\n            clear_breadcrumbs: true,\n        });\n    },\n    /**\n     * @private\n     */\n    _onActivityMenuShow: function () {\n        document.body.classList.add('modal-open');\n         this._updateActivityPreview();\n    },\n    /**\n     * @private\n     */\n    _onActivityMenuHide: function () {\n        document.body.classList.remove('modal-open');\n    },\n});\n\nSystrayMenu.Items.push(ActivityMenu);\n\nexport default ActivityMenu;\n", "/** @odoo-module **/\n\nimport { registry } from \"@web/core/registry\";\n\nexport function manageMessages({ action, component, env }) {\n    const selectedIds = component.widget.getSelectedIds();\n    if (!selectedIds.length) {\n        return null; // No record\n    }\n    const description = env._t(\"Manage Messages\");\n    return {\n        type: \"item\",\n        description,\n        callback: () => {\n            env.services.action.doAction({\n                res_model: \"mail.message\",\n                name: description,\n                views: [\n                    [false, \"list\"],\n                    [false, \"form\"],\n                ],\n                type: \"ir.actions.act_window\",\n                domain: [\n                    [\"res_id\", \"=\", selectedIds[0]],\n                    [\"model\", \"=\", action.res_model],\n                ],\n                context: {\n                    default_res_model: action.res_model,\n                    default_res_id: selectedIds[0],\n                },\n            });\n        },\n        sequence: 325,\n    };\n}\n\nregistry.category(\"debug\").category(\"form\").add(\"mail.manageMessages\", manageMessages);\n", "/** @odoo-module **/\n\nimport { _t } from 'web.core';\nimport { Markup } from 'web.utils';\nimport tour from 'web_tour.tour';\n\ntour.register('mail_tour', {\n    url: \"/web#action=mail.widgets.discuss\",\n    sequence: 80,\n}, [{\n    trigger: '.o_DiscussSidebar_categoryChannel .o_DiscussSidebarCategory_commandAdd',\n    content: Markup(_t(\"<p>Channels make it easy to organize information across different topics and groups.</p> <p>Try to <b>create your first channel</b> (e.g. sales, marketing, product XYZ, after work party, etc).</p>\")),\n    position: 'bottom',\n}, {\n    trigger: '.o_DiscussSidebarCategory_itemNewInput',\n    content: Markup(_t(\"<p>Create a channel here.</p>\")),\n    position: 'bottom',\n    auto: true,\n    run: function (actions) {\n        var t = new Date().getTime();\n        actions.text(\"SomeChannel_\" + t, this.$anchor);\n    },\n}, {\n    trigger: \".o_DiscussSidebarCategory_newChannelAutocompleteSuggestions\",\n    content: Markup(_t(\"<p>Create a public or private channel.</p>\")),\n    position: 'right',\n    run() {\n        this.$consumeEventAnchors.find('li:first').click();\n    },\n}, {\n    trigger: '.o_Discuss_thread .o_ComposerTextInput_textarea',\n    content: Markup(_t(\"<p><b>Write a message</b> to the members of the channel here.</p> <p>You can notify someone with <i>'@'</i> or link another channel with <i>'#'</i>. Start your message with <i>'/'</i> to get the list of possible commands.</p>\")),\n    position: \"top\",\n    width: 350,\n    run: function (actions) {\n        var t = new Date().getTime();\n        actions.text(\"SomeText_\" + t, this.$anchor);\n    },\n}, {\n    trigger: '.o_Discuss_thread .o_Composer_buttonSend',\n    content: _t(\"Post your message on the thread\"),\n    position: \"top\",\n}, {\n    trigger: '.o_Discuss_thread .o_Message',\n    content: _t(\"Click on your message\"),\n    position: \"top\",\n}, {\n    trigger: '.o_Discuss_thread .o_MessageActionList_actionStar',\n    content: Markup(_t(\"Messages can be <b>starred</b> to remind you to check back later.\")),\n    position: \"bottom\",\n}, {\n    trigger: '.o_DiscussSidebarMailbox.o-starred-box',\n    content: _t(\"Once a message has been starred, you can come back and review it at any time here.\"),\n    position: \"bottom\",\n}, {\n    trigger: '.o_DiscussSidebar_categoryChat .o_DiscussSidebarCategory_commandAdd',\n    content: Markup(_t(\"<p><b>Chat with coworkers</b> in real-time using direct messages.</p><p><i>You might need to invite users from the Settings app first.</i></p>\")),\n    position: 'bottom',\n}]);\n", "/** @odoo-module **/\n\nimport core from 'web.core';\n\nvar _t = core._t;\n\n/**\n * WARNING: this is not enough to unescape potential XSS contained in htmlString, transformFunction\n * should handle it or it should be handled after/before calling parseAndTransform. So if the result\n * of this function is used in a t-raw, be very careful.\n *\n * @param {string} htmlString\n * @param {function} transformFunction\n * @returns {string}\n */\nfunction parseAndTransform(htmlString, transformFunction) {\n    var openToken = \"OPEN\" + Date.now();\n    var string = htmlString.replace(/&lt;/g, openToken);\n    var children;\n    try {\n        children = $('<div>').html(string).contents();\n    } catch (e) {\n        children = $('<div>').html('<pre>' + string + '</pre>').contents();\n    }\n    return _parseAndTransform(children, transformFunction)\n                .replace(new RegExp(openToken, \"g\"), \"&lt;\");\n}\n\n/**\n * @param {Node[]} nodes\n * @param {function} transformFunction with:\n *   param node\n *   param function\n *   return string\n * @return {string}\n */\nfunction _parseAndTransform(nodes, transformFunction) {\n    return _.map(nodes, function (node) {\n        return transformFunction(node, function () {\n            return _parseAndTransform(node.childNodes, transformFunction);\n        });\n    }).join(\"\");\n}\n\n/**\n * Escape < > & as html entities (copy from _.escape with less escaped characters)\n *\n * @param {string}\n * @return {string}\n */\nvar _escapeEntities = (function () {\n    var map = {\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\"};\n    var escaper = function(match) {\n        return map[match];\n    };\n    var testRegexp = RegExp('(?:&|<|>)');\n    var replaceRegexp = RegExp('(?:&|<|>)', 'g');\n    return function(string) {\n        string = string == null ? '' : '' + string;\n        return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n    };\n})();\n\n// Suggested URL Javascript regex of http://stackoverflow.com/questions/3809401/what-is-a-good-regular-expression-to-match-a-url\n// Adapted to make http(s):// not required if (and only if) www. is given. So `should.notmatch` does not match.\n// And further extended to include Latin-1 Supplement, Latin Extended-A, Latin Extended-B and Latin Extended Additional.\nvar urlRegexp = /\\b(?:https?:\\/\\/\\d{1,3}(?:\\.\\d{1,3}){3}|(?:https?:\\/\\/|(?:www\\.))[-a-z0-9@:%._+~#=\\u00C0-\\u024F\\u1E00-\\u1EFF]{2,256}\\.[a-z]{2,13})\\b(?:[-a-z0-9@:%_+.~#?&'$//=;\\u00C0-\\u024F\\u1E00-\\u1EFF]*)/gi;\n/**\n * @param {string} text\n * @param {Object} [attrs={}]\n * @return {string} linkified text\n */\nfunction linkify(text, attrs) {\n    attrs = attrs || {};\n    if (attrs.target === undefined) {\n        attrs.target = '_blank';\n    }\n    if (attrs.target === '_blank') {\n      attrs.rel = 'noreferrer noopener';\n    }\n    attrs = _.map(attrs, function (value, key) {\n        return key + '=\"' + _.escape(value) + '\"';\n    }).join(' ');\n    var curIndex = 0;\n    var result = \"\";\n    var match;\n    while ((match = urlRegexp.exec(text)) !== null) {\n        result += _escapeEntities(text.slice(curIndex, match.index));\n        var url = match[0];\n        var href = (!/^https?:\\/\\//i.test(url)) ? \"http://\" + _.escape(url) : _.escape(url);\n        result += '<a ' + attrs + ' href=\"' + href + '\">' + _escapeEntities(url) + '</a>';\n        curIndex = match.index + match[0].length;\n    }\n    return result + _escapeEntities(text.slice(curIndex));\n}\n\nfunction addLink(node, transformChildren) {\n    if (node.nodeType === 3) {  // text node\n        const linkified = linkify(node.data);\n        if (linkified !== node.data) {\n            const div = document.createElement('div');\n            div.innerHTML = linkified;\n            for (const childNode of [...div.childNodes]) {\n                node.parentNode.insertBefore(childNode, node);\n            }\n            node.parentNode.removeChild(node);\n            return linkified;\n        }\n        return node.textContent;\n    }\n    if (node.tagName === \"A\") return node.outerHTML;\n    transformChildren();\n    return node.outerHTML;\n}\n\n/**\n * @param {string} htmlString\n * @return {string}\n */\nfunction htmlToTextContentInline(htmlString) {\n    const fragment = document.createDocumentFragment();\n    const div = document.createElement('div');\n    fragment.appendChild(div);\n    htmlString = htmlString.replace(/<br\\s*\\/?>/gi,' ');\n    try {\n        div.innerHTML = htmlString;\n    } catch (e) {\n        div.innerHTML = `<pre>${htmlString}</pre>`;\n    }\n    return div\n        .textContent\n        .trim()\n        .replace(/[\\n\\r]/g, '')\n        .replace(/\\s\\s+/g, ' ');\n}\n\nfunction stripHTML(node, transformChildren) {\n    if (node.nodeType === 3) return node.data;  // text node\n    if (node.tagName === \"BR\") return \"\\n\";\n    return transformChildren();\n}\n\nfunction inline(node, transform_children) {\n    if (node.nodeType === 3) return node.data;\n    if (node.nodeType === 8) return \"\";\n    if (node.tagName === \"BR\") return \" \";\n    if (node.tagName.match(/^(A|P|DIV|PRE|BLOCKQUOTE)$/)) return transform_children();\n    node.innerHTML = transform_children();\n    return node.outerHTML;\n}\n\n// Parses text to find email: Tagada <address@mail.fr> -> [Tagada, address@mail.fr] or False\nfunction parseEmail(text) {\n    if (text){\n        var result = text.match(/(.*)<(.*@.*)>/);\n        if (result) {\n            name = _.str.trim(result[1]).replace(/(^\"|\"$)/g, '')\n            return [name, _.str.trim(result[2])];\n        }\n        result = text.match(/(.*@.*)/);\n        if (result) {\n            return [_.str.trim(result[1]), _.str.trim(result[1])];\n        }\n        return [text, false];\n    }\n}\n\n/**\n * Returns an escaped conversion of a content.\n *\n * @param {string} content\n * @returns {string}\n */\nfunction escapeAndCompactTextContent(content) {\n    //Removing unwanted extra spaces from message\n    let value = owl.utils.escape(content).trim();\n    value = value.replace(/(\\r|\\n){2,}/g, '<br/><br/>');\n    value = value.replace(/(\\r|\\n)/g, '<br/>');\n\n    // prevent html space collapsing\n    value = value.replace(/ /g, '&nbsp;').replace(/([^>])&nbsp;([^<])/g, '$1 $2');\n    return value;\n}\n\n// Replaces textarea text into html text (add <p>, <a>)\n// TDE note : should be done server-side, in Python -> use mail.compose.message ?\nfunction getTextToHTML(text) {\n    return text\n        .replace(/((?:https?|ftp):\\/\\/[\\S]+)/g,'<a href=\"$1\">$1</a> ')\n        .replace(/[\\n\\r]/g,'<br/>');\n}\n\nfunction timeFromNow(date) {\n    if (moment().diff(date, 'seconds') < 45) {\n        return _t(\"now\");\n    }\n    return date.fromNow();\n}\n\nexport {\n    addLink,\n    escapeAndCompactTextContent,\n    getTextToHTML,\n    htmlToTextContentInline,\n    inline,\n    linkify,\n    parseAndTransform,\n    parseEmail,\n    stripHTML,\n    timeFromNow,\n};\n", "/** @odoo-module **/\n\nimport '@mail/js/activity';\n\nimport field_registry from 'web.field_registry';\n\nconst KanbanActivity = field_registry.get('kanban_activity');\n\nconst ActivityCell = KanbanActivity.extend({\n    init(parent, name, record, options) {\n        this._super.apply(this, arguments);\n        this.activityType = options && options.activityType;\n    },\n    /**\n     * @private\n     * @override\n     */\n    _getActivityFormAction(id) {\n        const action = this._super.apply(this, arguments);\n        action.context['default_activity_type_id'] = this.activityType;\n        return action;\n    },\n    /**\n     * @override\n     * @private\n     */\n    _render() {\n        // replace clock by closest deadline\n        const $date = $('<div class=\"o_closest_deadline\">');\n        const date = moment(this.record.data.closest_deadline).toDate();\n        // To remove year only if current year\n        if (moment().year() === moment(date).year()) {\n            $date.text(date.toLocaleDateString(moment().locale(), {\n                day: 'numeric', month: 'short'\n            }));\n        } else {\n            $date.text(moment(date).format('ll'));\n        }\n        this.$('a').html($date);\n        if (this.record.data.activity_ids.res_ids.length > 1) {\n            this.$('a').append($('<span>', {\n                class: 'badge badge-light badge-pill border-0 ' + this.record.data.activity_state,\n                text: this.record.data.activity_ids.res_ids.length,\n            }));\n        }\n        if (this.$el.hasClass('show')) {\n            // note: this part of the rendering might be asynchronous\n            this._renderDropdown();\n        }\n    }\n});\n\nexport default ActivityCell;\n", "/** @odoo-module **/\n\nimport '@mail/js/activity';\n\nimport BasicController from 'web.BasicController';\nimport core from 'web.core';\nimport field_registry from 'web.field_registry';\nimport ViewDialogs from 'web.view_dialogs';\n\nvar KanbanActivity = field_registry.get('kanban_activity');\nvar _t = core._t;\n\nvar ActivityController = BasicController.extend({\n    custom_events: _.extend({}, BasicController.prototype.custom_events, {\n        empty_cell_clicked: '_onEmptyCell',\n        send_mail_template: '_onSendMailTemplate',\n        schedule_activity: '_onScheduleActivity',\n    }),\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     * @param parent\n     * @param model\n     * @param renderer\n     * @param {Object} params\n     * @param {String} params.title The title used in schedule activity dialog\n     */\n    init: function (parent, model, renderer, params) {\n        this._super.apply(this, arguments);\n        this.title = params.title;\n        this.searchViewId = params.searchViewId;\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Overridden to remove the pager as it makes no sense in this view.\n     *\n     * @override\n     */\n    _getPagingInfo: function () {\n        return null;\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     */\n    _onScheduleActivity: function () {\n        var self = this;\n        var state = this.model.get(this.handle);\n        new ViewDialogs.SelectCreateDialog(this, {\n            res_model: state.model,\n            searchViewId: this.searchViewId,\n            domain: this.model.originalDomain,\n            title: _.str.sprintf(_t(\"Search: %s\"), this.title),\n            no_create: !this.activeActions.create,\n            disable_multiple_selection: true,\n            context: state.context,\n            on_selected: function (record) {\n                var fakeRecord = state.getKanbanActivityData({}, record[0]);\n                var widget = new KanbanActivity(self, 'activity_ids', fakeRecord, {});\n                widget.scheduleActivity();\n            },\n        }).open();\n    },\n    /**\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onEmptyCell: function (ev) {\n        var state = this.model.get(this.handle);\n        this.do_action({\n            type: 'ir.actions.act_window',\n            res_model: 'mail.activity',\n            view_mode: 'form',\n            view_type: 'form',\n            views: [[false, 'form']],\n            target: 'new',\n            context: {\n                default_res_id: ev.data.resId,\n                default_res_model: state.model,\n                default_activity_type_id: ev.data.activityTypeId,\n            },\n            res_id: false,\n        }, {\n            on_close: this.reload.bind(this),\n        });\n    },\n    /**\n     * @private\n     * @param {CustomEvent} ev\n     */\n    _onSendMailTemplate: function (ev) {\n        var templateID = ev.data.templateID;\n        var activityTypeID = ev.data.activityTypeID;\n        var state = this.model.get(this.handle);\n        var groupedActivities = state.grouped_activities;\n        var resIDS = [];\n        Object.keys(groupedActivities).forEach(function (resID) {\n            var activityByType = groupedActivities[resID];\n            var activity = activityByType[activityTypeID];\n            if (activity) {\n                resIDS.push(parseInt(resID));\n            }\n        });\n        this._rpc({\n            model: this.model.modelName,\n            method: 'activity_send_mail',\n            args: [resIDS, templateID],\n        });\n    },\n});\n\nexport default ActivityController;\n", "/** @odoo-module **/\n\nimport BasicModel from 'web.BasicModel';\nimport session from 'web.session';\n\nconst ActivityModel = BasicModel.extend({\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n    /**\n     * Add the following (activity specific) keys when performing a `get` on the\n     * main list datapoint:\n     * - activity_types\n     * - activity_res_ids\n     * - grouped_activities\n     *\n     * @override\n     */\n    __get: function () {\n        var result = this._super.apply(this, arguments);\n        if (result && result.model === this.modelName && result.type === 'list') {\n            _.extend(result, this.additionalData, {getKanbanActivityData: this.getKanbanActivityData});\n        }\n        return result;\n    },\n    /**\n     * @param {Object} activityGroup\n     * @param {integer} resId\n     * @returns {Object}\n     */\n    getKanbanActivityData(activityGroup, resId) {\n        return {\n            data: {\n                activity_ids: {\n                    model: 'mail.activity',\n                    res_ids: activityGroup.ids,\n                },\n                activity_state: activityGroup.state,\n                closest_deadline: activityGroup.o_closest_deadline,\n            },\n            fields: {\n                activity_ids: {},\n                activity_state: {\n                    selection: [\n                        ['overdue', \"Overdue\"],\n                        ['today', \"Today\"],\n                        ['planned', \"Planned\"],\n                    ],\n                },\n            },\n            fieldsInfo: {},\n            model: this.model,\n            type: 'record',\n            res_id: resId,\n            getContext: function () {\n                return {};\n            },\n        };\n    },\n    /**\n     * @override\n     * @param {Array[]} params.domain\n     */\n    __load: function (params) {\n        this.originalDomain = _.extend([], params.domain);\n        params.domain.push(['activity_ids', '!=', false]);\n        this.domain = params.domain;\n        this.modelName = params.modelName;\n        params.groupedBy = [];\n        var def = this._super.apply(this, arguments);\n        return Promise.all([def, this._fetchData()]).then(function (result) {\n            return result[0];\n        });\n    },\n    /**\n     * @override\n     * @param {Array[]} [params.domain]\n     */\n    __reload: function (handle, params) {\n        if (params && 'domain' in params) {\n            this.originalDomain = _.extend([], params.domain);\n            params.domain.push(['activity_ids', '!=', false]);\n            this.domain = params.domain;\n        }\n        if (params && 'groupBy' in params) {\n            params.groupBy = [];\n        }\n        var def = this._super.apply(this, arguments);\n        return Promise.all([def, this._fetchData()]).then(function (result) {\n            return result[0];\n        });\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Fetch activity data.\n     *\n     * @private\n     * @returns {Promise}\n     */\n    _fetchData: function () {\n        var self = this;\n        return this._rpc({\n            model: \"mail.activity\",\n            method: 'get_activity_data',\n            kwargs: {\n                res_model: this.modelName,\n                domain: this.domain,\n                context: session.user_context,\n            }\n        }).then(function (result) {\n            self.additionalData = result;\n        });\n    },\n});\n\nexport default ActivityModel;\n", "/** @odoo-module **/\n\nimport KanbanRecord from 'web.KanbanRecord';\n\nvar ActivityRecord = KanbanRecord.extend({\n    /**\n     * @override\n     */\n    init: function (parent, state) {\n        this._super.apply(this,arguments);\n\n        this.fieldsInfo = state.fieldsInfo.activity;\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     * @private\n     */\n    _render: function () {\n        this.defs = [];\n        this._replaceElement(this.qweb.render('activity-box', this.qweb_context));\n        this.$el.on('click', this._onGlobalClick.bind(this));\n        this.$el.addClass('o_activity_record');\n        this._processFields();\n        this._setupColor();\n        return Promise.all(this.defs);\n    },\n    /**\n     * @override\n     * @private\n     */\n    _setFieldDisplay: function ($el, fieldName) {\n        this._super.apply(this, arguments);\n\n        // attribute muted\n        if (this.fieldsInfo[fieldName].muted) {\n            $el.addClass('text-muted');\n        }\n    },\n    /**\n     * @override\n     * @private\n     */\n    _setState: function () {\n        this._super.apply(this, arguments);\n\n        // activity has a different qweb context\n        this.qweb_context = {\n            activity_image: this._getImageURL.bind(this),\n            record: this.record,\n            user_context: this.getSession().user_context,\n            widget: this,\n        };\n    },\n});\n\nexport default ActivityRecord;\n", "/** @odoo-module **/\n\nimport ActivityCell from '@mail/js/views/activity/activity_cell';\nimport ActivityRecord from '@mail/js/views/activity/activity_record';\n\nimport AbstractRendererOwl from 'web.AbstractRendererOwl';\nimport core  from 'web.core';\nimport KanbanColumnProgressBar from 'web.KanbanColumnProgressBar';\nimport { ComponentAdapter } from 'web.OwlCompatibility';\nimport QWeb from 'web.QWeb';\nimport session from 'web.session';\nimport utils from 'web.utils';\n\nconst _t = core._t;\n\nconst { useState } = owl.hooks;\n\n/**\n * Owl Component Adapter for ActivityRecord which is KanbanRecord (Odoo Widget)\n * TODO: Remove this adapter when ActivityRecord is a Component\n */\nclass ActivityRecordAdapter extends ComponentAdapter {\n    renderWidget() {\n        _.invoke(_.pluck(this.widget.subWidgets, '$el'), 'detach');\n        this.widget._render();\n    }\n\n    updateWidget(nextProps) {\n        const state = nextProps.widgetArgs[0];\n        this.widget._setState(state);\n    }\n}\n\n/**\n * Owl Component Adapter for ActivityCell which is BasicActivity (AbstractField)\n * TODO: Remove this adapter when ActivityCell is a Component\n */\nclass ActivityCellAdapter extends ComponentAdapter {\n    renderWidget() {\n        this.widget._render();\n    }\n\n    updateWidget(nextProps) {\n        const record = nextProps.widgetArgs[1];\n        this.widget._reset(record);\n    }\n}\n\n/**\n * Owl Component Adapter for KanbanColumnProgressBar (Odoo Widget)\n * TODO: Remove this adapter when KanbanColumnProgressBar is a Component\n */\nclass KanbanColumnProgressBarAdapter extends ComponentAdapter {\n    renderWidget() {\n        this.widget._render();\n    }\n\n    updateWidget(nextProps) {\n        const options = nextProps.widgetArgs[0];\n        const columnState = nextProps.widgetArgs[1];\n\n        const columnId = options.columnID;\n        const nextActiveFilter = options.progressBarStates[columnId].activeFilter;\n        this.widget.activeFilter = nextActiveFilter ? this.widget.activeFilter : false;\n        this.widget.columnState = columnState;\n        this.widget.computeCounters();\n    }\n\n    _trigger_up(ev) {\n        // KanbanColumnProgressBar triggers 3 events before being mounted\n        // but we don't need to listen to them in our case.\n        if (this.el) {\n            super._trigger_up(ev);\n        }\n    }\n}\n\nclass ActivityRenderer extends AbstractRendererOwl {\n    constructor(parent, props) {\n        super(...arguments);\n        this.qweb = new QWeb(this.env.isDebug(), {_s: session.origin});\n        this.qweb.add_template(utils.json_node_to_xml(props.templates));\n        this.activeFilter = useState({\n            state: null,\n            activityTypeId: null,\n            resIds: []\n        });\n        this.widgetComponents = {\n            ActivityRecord,\n            ActivityCell,\n            KanbanColumnProgressBar,\n        };\n    }\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Gets all activity resIds in the view.\n     *\n     * @returns filtered resIds first then the rest.\n     */\n    get activityResIds() {\n        const copiedActivityResIds = Array.from(this.props.activity_res_ids)\n        return copiedActivityResIds.sort((a, b) => this.activeFilter.resIds.includes(a) ? -1 : 0);\n    }\n\n    /**\n     * Gets all existing activity type ids.\n     */\n    get activityTypeIds() {\n        const activities = Object.values(this.props.grouped_activities);\n        const activityIds = activities.flatMap(Object.keys);\n        const uniqueIds = Array.from(new Set(activityIds));\n        return uniqueIds.map(Number);\n    }\n\n    getProgressBarOptions(typeId) {\n        return {\n            columnID: typeId,\n            progressBarStates: {\n                [typeId]: {\n                    activeFilter: this.activeFilter.activityTypeId === typeId,\n                },\n            },\n        };\n    }\n\n    getProgressBarColumnState(typeId) {\n        const counts = { planned: 0, today: 0, overdue: 0 };\n        for (let activities of Object.values(this.props.grouped_activities)) {\n            if (typeId in activities) {\n                counts[activities[typeId].state] += 1;\n            }\n        }\n        return {\n            count: Object.values(counts).reduce((x, y) => x + y),\n            fields: {\n                activity_state: {\n                    type: 'selection',\n                    selection: [\n                        ['planned', _t('Planned')],\n                        ['today', _t('Today')],\n                        ['overdue', _t('Overdue')],\n                    ],\n                },\n            },\n            progressBarValues: {\n                field: 'activity_state',\n                colors: { planned: 'success', today: 'warning', overdue: 'danger' },\n                counts: counts,\n            },\n        };\n    }\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onEmptyCellClicked(ev) {\n        this.trigger('empty_cell_clicked', {\n            resId: parseInt(ev.currentTarget.dataset.resId, 10),\n            activityTypeId: parseInt(ev.currentTarget.dataset.activityTypeId, 10),\n        });\n    }\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onSendMailTemplateClicked(ev) {\n        this.trigger('send_mail_template', {\n            activityTypeID: parseInt(ev.currentTarget.dataset.activityTypeId, 10),\n            templateID: parseInt(ev.currentTarget.dataset.templateId, 10),\n        });\n    }\n    /**\n     * @private\n     * @param {CustomEvent} ev\n     */\n    _onSetProgressBarState(ev) {\n        if (ev.detail.values.activeFilter) {\n            this.activeFilter.state = ev.detail.values.activeFilter;\n            this.activeFilter.activityTypeId = ev.detail.columnID;\n            this.activeFilter.resIds = Object.entries(this.props.grouped_activities)\n                .filter(([, resIds]) => ev.detail.columnID in resIds &&\n                    resIds[ev.detail.columnID].state === ev.detail.values.activeFilter.value)\n                .map(([key]) => parseInt(key));\n        } else {\n            this.activeFilter.state = null;\n            this.activeFilter.activityTypeId = null;\n            this.activeFilter.resIds = [];\n        }\n    }\n}\n\nActivityRenderer.components = {\n    ActivityRecordAdapter,\n    ActivityCellAdapter,\n    KanbanColumnProgressBarAdapter,\n};\nActivityRenderer.template = 'mail.ActivityRenderer';\n\nexport default ActivityRenderer;\n", "/** @odoo-module **/;\n\nimport ActivityController from '@mail/js/views/activity/activity_controller';\nimport ActivityModel from '@mail/js/views/activity/activity_model';\nimport ActivityRenderer from '@mail/js/views/activity/activity_renderer';\n\nimport BasicView from 'web.BasicView';\nimport core from 'web.core';\nimport RendererWrapper from 'web.RendererWrapper';\nimport view_registry from 'web.view_registry';\n\nconst _lt = core._lt;\n\nconst ActivityView = BasicView.extend({\n    accesskey: \"a\",\n    display_name: _lt('Activity'),\n    icon: 'fa-clock-o',\n    config: _.extend({}, BasicView.prototype.config, {\n        Controller: ActivityController,\n        Model: ActivityModel,\n        Renderer: ActivityRenderer,\n    }),\n    viewType: 'activity',\n    searchMenuTypes: ['filter', 'favorite'],\n\n    /**\n     * @override\n     */\n    init: function (viewInfo, params) {\n        this._super.apply(this, arguments);\n\n        const { search_view_id } = params.action || {};\n        this.controllerParams.searchViewId = search_view_id ? search_view_id[0] : false;\n        this.loadParams.type = 'list';\n        // limit makes no sense in this view as we display all records having activities\n        this.loadParams.limit = false;\n\n        this.rendererParams.templates = _.findWhere(this.arch.children, { 'tag': 'templates' });\n        this.controllerParams.title = this.arch.attrs.string;\n    },\n    /**\n     *\n     * @override\n     */\n    getRenderer(parent, state) {\n        state = Object.assign({}, state, this.rendererParams);\n        return new RendererWrapper(null, this.config.Renderer, state);\n    },\n});\n\nview_registry.add('activity', ActivityView);\n\nexport default ActivityView;\n", "/** @odoo-module **/\n\n/**\n * @returns {Deferred}\n */\nexport function makeDeferred() {\n    let resolve;\n    let reject;\n    const prom = new Promise(function (res, rej) {\n        resolve = res.bind(this);\n        reject = rej.bind(this);\n    });\n    prom.resolve = (...args) => resolve(...args);\n    prom.reject = (...args) => reject(...args);\n    return prom;\n}\n", "/** @odoo-module **/\n\n// Broad human voice range of frequencies in hz.\nconst HUMAN_VOICE_FREQUENCY_RANGE = [80, 1000];\n\n//------------------------------------------------------------------------------\n// Public\n//------------------------------------------------------------------------------\n\n/**\n * monitors the activity of an audio mediaStreamTrack\n *\n * @param {MediaStreamTrack} track\n * @param {Object} [processorOptions] options for the audio processor\n * @param {Array<number>} [processorOptions.frequencyRange] the range of frequencies to monitor in hz\n * @param {number} [processorOptions.minimumActiveCycles] how many cycles have to pass since the\n *          last time the threshold was exceeded to go back to inactive state, this prevents\n *          stuttering when the speech volume oscillates around the threshold value.\n * @param {function(boolean):void} [processorOptions.onThreshold] a function to be called when the threshold is passed\n * @param {function(number):void} [processorOptions.onTic] a function to be called at each tics\n * @param {number} [processorOptions.volumeThreshold] the normalized minimum value for audio detection\n * @returns {Object} returnValue\n * @returns {function} returnValue.disconnect callback to cleanly end the monitoring\n */\nexport async function monitorAudio(track, processorOptions) {\n    // cloning the track so it is not affected by the enabled change of the original track.\n    const monitoredTrack = track.clone();\n    monitoredTrack.enabled = true;\n    const stream = new window.MediaStream([monitoredTrack]);\n    const AudioContext = window.AudioContext || window.webkitAudioContext;\n    if (!AudioContext) {\n        throw 'missing audio context';\n    }\n    const audioContext = new AudioContext();\n    const source = audioContext.createMediaStreamSource(stream);\n\n    let processor;\n    try {\n        processor = await _loadAudioWorkletProcessor(source, audioContext, processorOptions);\n    } catch (e) {\n        // In case Worklets are not supported by the browser (eg: Safari)\n        processor = _loadScriptProcessor(source, audioContext, processorOptions);\n    }\n\n    return async () => {\n        processor.disconnect();\n        source.disconnect();\n        monitoredTrack.stop();\n        try {\n            await audioContext.close();\n        } catch (e) {\n            if (e.name === 'InvalidStateError') {\n                return; // the audio context is already closed\n            }\n            throw e;\n        }\n    }\n}\n\n//------------------------------------------------------------------------------\n// Private\n//------------------------------------------------------------------------------\n\n/**\n * @param {MediaStreamSource} source\n * @param {AudioContext} audioContext\n * @param {Object} [param2] options\n * @returns {Object} returnValue\n * @returns {function} returnValue.disconnect disconnect callback\n */\nfunction _loadScriptProcessor(source, audioContext, { frequencyRange = HUMAN_VOICE_FREQUENCY_RANGE, minimumActiveCycles = 10, onThreshold, onTic, volumeThreshold = 0.3 } = {}) {\n    // audio setup\n    const bitSize = 1024;\n    const analyser = audioContext.createAnalyser();\n    source.connect(analyser);\n    const scriptProcessorNode = audioContext.createScriptProcessor(bitSize, 1, 1);\n    analyser.connect(scriptProcessorNode);\n    analyser.fftsize = bitSize;\n    scriptProcessorNode.connect(audioContext.destination);\n\n    // timing variables\n    const processInterval = 50; // how many ms between each computation\n    const intervalInFrames = processInterval / 1000 * analyser.context.sampleRate;\n    let nextUpdateFrame = processInterval;\n\n    // process variables\n    let activityBuffer = 0;\n    let wasAboveThreshold = undefined;\n    let isAboveThreshold = false;\n\n    scriptProcessorNode.onaudioprocess = () => {\n        // throttles down the processing tic rate\n        nextUpdateFrame -= bitSize;\n        if (nextUpdateFrame >= 0) {\n            return;\n        }\n        nextUpdateFrame += intervalInFrames;\n\n        // computes volume and threshold\n        const normalizedVolume = getFrequencyAverage(analyser, frequencyRange[0], frequencyRange[1]);\n        if (normalizedVolume >= volumeThreshold) {\n            activityBuffer = minimumActiveCycles;\n        } else if (normalizedVolume < volumeThreshold && activityBuffer > 0) {\n            activityBuffer--;\n        }\n        isAboveThreshold = activityBuffer > 0;\n\n        onTic && onTic(normalizedVolume);\n        if (wasAboveThreshold !== isAboveThreshold) {\n            wasAboveThreshold = isAboveThreshold;\n            onThreshold && onThreshold(isAboveThreshold);\n        }\n    };\n    return {\n        disconnect: () => {\n            analyser.disconnect();\n            scriptProcessorNode.disconnect();\n            scriptProcessorNode.onaudioprocess = null;\n        },\n    };\n}\n\n/**\n * @param {MediaStreamSource} source\n * @param {AudioContext} audioContext\n * @param {Object} [param2] options\n * @returns {Object} returnValue\n * @returns {function} returnValue.disconnect disconnect callback\n */\nasync function _loadAudioWorkletProcessor(source, audioContext, { frequencyRange = HUMAN_VOICE_FREQUENCY_RANGE, minimumActiveCycles = 10, onThreshold, onTic, volumeThreshold = 0.3 } = {}) {\n    await audioContext.resume();\n    // Safari does not support Worklet.addModule\n    await audioContext.audioWorklet.addModule('/mail/rtc/audio_worklet_processor');\n    const thresholdProcessor = new window.AudioWorkletNode(audioContext, 'audio-processor', {\n        processorOptions: {\n            minimumActiveCycles,\n            volumeThreshold,\n            frequencyRange,\n            postAllTics: !!onTic,\n        }\n    });\n    source.connect(thresholdProcessor);\n    thresholdProcessor.port.onmessage = (event) => {\n        const { isAboveThreshold, volume } = event.data;\n        onThreshold && isAboveThreshold !== undefined && onThreshold(isAboveThreshold);\n        onTic && volume !== undefined && onTic(volume);\n    };\n    return {\n        disconnect: () => {\n            thresholdProcessor.disconnect();\n        },\n    };\n}\n\n/**\n * @param {AnalyserNode} analyser\n * @param {number} lowerFrequency lower bound for relevant frequencies to monitor\n * @param {number} higherFrequency upper bound for relevant frequencies to monitor\n * @returns {number} normalized [0...1] average quantity of the relevant frequencies\n */\nfunction getFrequencyAverage(analyser, lowerFrequency, higherFrequency) {\n    const frequencies = new window.Uint8Array(analyser.frequencyBinCount);\n    analyser.getByteFrequencyData(frequencies);\n    const sampleRate = analyser.context.sampleRate;\n    const startIndex = _getFrequencyIndex(lowerFrequency, sampleRate, analyser.frequencyBinCount);\n    const endIndex = _getFrequencyIndex(higherFrequency, sampleRate, analyser.frequencyBinCount);\n    const count = endIndex - startIndex;\n    let sum = 0;\n    for (let index = startIndex; index < endIndex; index++) {\n        sum += frequencies[index] / 255;\n    }\n    if (!count) {\n        return 0;\n    }\n    return sum / count;\n}\n\n/**\n * @param {number} targetFrequency in Hz\n * @param {number} sampleRate the sample rate of the audio\n * @param {number} binCount AnalyserNode.frequencyBinCount\n * @returns {number} the index of the targetFrequency within binCount\n */\nfunction _getFrequencyIndex(targetFrequency, sampleRate, binCount) {\n    const index = Math.round(targetFrequency / (sampleRate / 2) * binCount);\n    return Math.min(Math.max(0, index), binCount);\n}\n", "/** @odoo-module **/\n\nimport { makeDeferred } from '@mail/utils/deferred/deferred';\n\n/**\n * This module define an utility function that enables throttling calls on a\n * provided function. Such throttled calls can be canceled, flushed and/or\n * cleared:\n *\n * - cancel: Canceling a throttle function call means that if a function call is\n *   pending invocation, cancel removes this pending call invocation. It however\n *   preserves the internal timer of the cooling down phase of this throttle\n *   function, meaning that any following throttle function call will be pending\n *   and has to wait for the remaining time of the cooling down phase before\n *   being invoked.\n *\n * - flush: Flushing a throttle function call means that if a function call is\n *   pending invocation, flush immediately terminates the cooling down phase and\n *   the pending function call is immediately invoked. Flush also works without\n *   any pending function call: it just terminates the cooling down phase, so\n *   that a following function call is guaranteed to be immediately called.\n *\n * - clear: Clearing a throttle function combines canceling and flushing\n *   together.\n */\n\n//------------------------------------------------------------------------------\n// Errors\n//------------------------------------------------------------------------------\n\n/**\n * List of internal and external Throttle errors.\n * Internal errors are prefixed with `_`.\n */\n\n /**\n  * Error when throttle function has been canceled with `.cancel()`. Used to\n  * let the caller know of throttle function that the call has been canceled,\n  * which means the inner function will not be called. Usually caller should\n  * just accept it and kindly treat this error as a polite warning.\n  */\nclass ThrottleCanceledError extends Error {\n    /**\n     * @override\n     */\n    constructor(throttleId, ...args) {\n        super(...args);\n        this.name = 'ThrottleCanceledError';\n        this.throttleId = throttleId;\n    }\n}\n/**\n * Error when throttle function has been reinvoked again. Used to let know\n * caller of throttle function that the call has been canceled and replaced with\n * another one, which means the (potentially) following inner function will be\n * in the context of another call. Same as for `ThrottleCanceledError`, usually\n * caller should just accept it and kindly treat this error as a polite\n * warning.\n */\nclass ThrottleReinvokedError extends Error {\n    /**\n     * @override\n     */\n    constructor(throttleId, ...args) {\n        super(...args);\n        this.name = 'ThrottleReinvokedError';\n        this.throttleId = throttleId;\n    }\n}\n/**\n * Error when throttle function has been flushed with `.flush()`. Used\n * internally to immediately invoke pending inner functions, since a flush means\n * the termination of cooling down phase.\n *\n * @private\n */\nclass _ThrottleFlushedError extends Error {\n    /**\n     * @override\n     */\n    constructor(throttleId, ...args) {\n        super(...args);\n        this.name = '_ThrottleFlushedError';\n        this.throttleId = throttleId;\n    }\n}\n\n//------------------------------------------------------------------------------\n// Private\n//------------------------------------------------------------------------------\n\n/**\n * This class models the behaviour of the cancelable, flushable and clearable\n * throttle version of a provided function. See definitions at the top of this\n * file.\n */\nclass Throttle {\n\n    /**\n     * @param {Object} env the OWL env\n     * @param {function} func provided function for making throttled version.\n     * @param {integer} duration duration of the 'cool down' phase, i.e.\n     *   the minimum duration between the most recent function call that has\n     *   been made and the following function call (of course, assuming no flush\n     *   in-between).\n     */\n    constructor(env, func, duration) {\n        /**\n         * Reference to the OWL envirionment. Useful to fine-tune control of\n         * time flow in tests.\n         * @see mail/static/src/utils/test_utils.js:start.hasTimeControl\n         */\n        this.env = env;\n        /**\n         * Unique id of this throttle function. Useful for the ThrottleError\n         * management, in order to determine whether these errors come from\n         * this throttle or from another one (e.g. inner function makes use of\n         * another throttle).\n         */\n        this.id = _.uniqueId('throttle_');\n        /**\n         * Deferred of current cooling down phase in progress. Defined only when\n         * there is a cooling down phase in progress. Resolved when cooling down\n         * phase terminates from timeout, and rejected if flushed.\n         *\n         * @see _ThrottleFlushedError for rejection of this deferred.\n         */\n        this._coolingDownDeferred = undefined;\n        /**\n         * Duration, in milliseconds, of the cool down phase.\n         */\n        this._duration = duration;\n        /**\n         * Inner function to be invoked and throttled.\n         */\n        this._function = func;\n        /**\n         * Determines whether the throttle function is currently in cool down\n         * phase. Cool down phase happens just after inner function has been\n         * invoked, and during this time any following function call are pending\n         * and will be invoked only after the end of the cool down phase (except\n         * if canceled).\n         */\n        this._isCoolingDown = false;\n        /**\n         * Deferred of a currently pending invocation to inner function. Defined\n         * only during a cooling down phase and just after when throttle\n         * function has been called during this cooling down phase. It is kept\n         * until cooling down phase ends (either from timeout or flushed\n         * throttle) or until throttle is canceled (i.e. removes pending invoke\n         * while keeping cooling down phase live on).\n         */\n        this._pendingInvokeDeferred = undefined;\n    }\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Cancel any buffered function call while keeping the cooldown phase\n     * running.\n     */\n    cancel() {\n        if (!this._isCoolingDown) {\n            return;\n        }\n        if (!this._pendingInvokeDeferred) {\n            return;\n        }\n        this._pendingInvokeDeferred.reject(new ThrottleCanceledError(this.id));\n    }\n\n    /**\n     * Clear any buffered function call and immediately terminates any cooling\n     * down phase in progress.\n     */\n    clear() {\n        this.cancel();\n        this.flush();\n    }\n\n    /**\n     * Called when there is a call to the function. This function is throttled,\n     * so the time it is called depends on whether the \"cooldown stage\" occurs\n     * or not:\n     *\n     * - no cooldown stage: function is called immediately, and it starts\n     *      the cooldown stage when successful.\n     * - in cooldown stage: function is called when the cooldown stage has\n     *      ended from timeout.\n     *\n     * Note that after the cooldown stage, only the last attempted function\n     * call will be considered.\n     *\n     * @param {...any} args\n     * @throws {ThrottleReinvokedError|ThrottleCanceledError}\n     * @returns {any} result of called function, if it's called.\n     */\n    async do(...args) {\n        if (!this._isCoolingDown) {\n            return this._invokeFunction(...args);\n        }\n        if (this._pendingInvokeDeferred) {\n            this._pendingInvokeDeferred.reject(new ThrottleReinvokedError(this.id));\n        }\n        try {\n            this._pendingInvokeDeferred = makeDeferred();\n            await Promise.race([this._coolingDownDeferred, this._pendingInvokeDeferred]);\n        } catch (error) {\n            if (\n                !(error instanceof _ThrottleFlushedError) ||\n                error.throttleId !== this.id\n            ) {\n                throw error;\n            }\n        } finally {\n            this._pendingInvokeDeferred = undefined;\n        }\n        return this._invokeFunction(...args);\n    }\n\n    /**\n     * Flush the internal throttle timer, so that the following function call\n     * is immediate. For instance, if there is a cooldown stage, it is aborted.\n     */\n    flush() {\n        if (!this._isCoolingDown) {\n            return;\n        }\n        const coolingDownDeferred = this._coolingDownDeferred;\n        this._coolingDownDeferred = undefined;\n        this._isCoolingDown = false;\n        coolingDownDeferred.reject(new _ThrottleFlushedError(this.id));\n    }\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Invoke the inner function of this throttle and starts cooling down phase\n     * immediately after.\n     *\n     * @private\n     * @param  {...any} args\n     */\n    _invokeFunction(...args) {\n        const res = this._function(...args);\n        this._startCoolingDown();\n        return res;\n    }\n\n    /**\n     * Called just when the inner function is being called. Starts the cooling\n     * down phase, which turn any call to this throttle function as pending\n     * inner function calls. This will be called after the end of cooling down\n     * phase (except if canceled).\n     */\n    async _startCoolingDown() {\n        if (this._coolingDownDeferred) {\n            throw new Error(\"Cannot start cooling down if there's already a cooling down in progress.\");\n        }\n        // Keep local reference of cooling down deferred, because the one stored\n        // on `this` could be overwritten by another call to this throttle.\n        const coolingDownDeferred = makeDeferred();\n        this._coolingDownDeferred = coolingDownDeferred;\n        this._isCoolingDown = true;\n        const cooldownTimeoutId = this.env.browser.setTimeout(\n            () => coolingDownDeferred.resolve(),\n            this._duration\n        );\n        let unexpectedError;\n        try {\n            await coolingDownDeferred;\n        } catch (error) {\n            if (\n                !(error instanceof _ThrottleFlushedError) ||\n                error.throttleId !== this.id\n            ) {\n                // This branching should never happen.\n                // Still defined in case of programming error.\n                unexpectedError = error;\n            }\n        } finally {\n            this.env.browser.clearTimeout(cooldownTimeoutId);\n            this._coolingDownDeferred = undefined;\n            this._isCoolingDown = false;\n        }\n        if (unexpectedError) {\n            throw unexpectedError;\n        }\n    }\n\n}\n\n//------------------------------------------------------------------------------\n// Public\n//------------------------------------------------------------------------------\n\n/**\n * A function that creates a cancelable, flushable and clearable throttle\n * version of a provided function. See definitions at the top of this file.\n *\n * This throttle mechanism allows calling a function at most once during a\n * certain period:\n *\n * - When a function call is made, it enters a 'cooldown' phase, in which any\n *     attempt to call the function is buffered until the cooldown phase ends.\n * - At most 1 function call can be buffered during the cooldown phase, and the\n *     latest one in this phase will be considered at its end.\n * - When a cooldown phase ends, any buffered function call will be performed\n *     and another cooldown phase will follow up.\n *\n * @param {Object} env the OWL env\n * @param {function} func the function to throttle.\n * @param {integer} duration duration, in milliseconds, of the cooling down\n *   phase of the throttling.\n * @param {Object} [param2={}]\n * @param {boolean} [param2.silentCancelationErrors=true] if unset, caller\n *   of throttle function will observe some errors that come from current\n *   throttle call that has been canceled, such as when throttle function has\n *   been explicitly canceled with `.cancel()` or when another new throttle call\n *   has been registered.\n *   @see ThrottleCanceledError for when a call has been canceled from explicit\n *     call.\n *   @see ThrottleReinvokedError for when a call has been canceled from another\n *     new throttle call has been registered.\n * @returns {function} the cancelable, flushable and clearable throttle version\n *   of the provided function.\n */\nfunction throttle(\n    env,\n    func,\n    duration,\n    { silentCancelationErrors = true } = {}\n) {\n    const throttleObj = new Throttle(env, func, duration);\n    const callable = async (...args) => {\n        try {\n            // await is important, otherwise errors are not intercepted.\n            return await throttleObj.do(...args);\n        } catch (error) {\n            const isSelfReinvokedError = (\n                error instanceof ThrottleReinvokedError &&\n                error.throttleId === throttleObj.id\n            );\n            const isSelfCanceledError = (\n                error instanceof ThrottleCanceledError &&\n                error.throttleId === throttleObj.id\n            );\n\n            if (silentCancelationErrors && (isSelfReinvokedError || isSelfCanceledError)) {\n                // Silently ignore cancelation errors.\n                // Promise is indefinitely pending for async functions.\n                return new Promise(() => {});\n            } else {\n                throw error;\n            }\n        }\n    };\n    Object.assign(callable, {\n        cancel: () => throttleObj.cancel(),\n        clear: () => throttleObj.clear(),\n        flush: () => throttleObj.flush(),\n    });\n    return callable;\n}\n\n/**\n * Make external throttle errors accessible from throttle function.\n */\nObject.assign(throttle, {\n    ThrottleReinvokedError,\n    ThrottleCanceledError,\n});\n\n\nexport default throttle;\n", "/** @odoo-module **/\n\nimport { makeDeferred } from '@mail/utils/deferred/deferred';\n\n//------------------------------------------------------------------------------\n// Errors\n//------------------------------------------------------------------------------\n\n/**\n * List of Timer errors.\n */\n\n /**\n  * Error when timer has been cleared with `.clear()` or `.reset()`. Used to\n  * let know caller of timer that the countdown has been aborted, which\n  * means the inner function will not be called. Usually caller should just\n  * accept it and kindly treated this error as a polite warning.\n  */\n class TimerClearedError extends Error {\n    /**\n     * @override\n     */\n    constructor(timerId, ...args) {\n        super(...args);\n        this.name = 'TimerClearedError';\n        this.timerId = timerId;\n    }\n}\n\n//------------------------------------------------------------------------------\n// Private\n//------------------------------------------------------------------------------\n\n/**\n * This class creates a timer which, when times out, calls a function.\n * Note that the timer is not started on initialization (@see start method).\n */\nclass Timer {\n\n    /**\n     * @param {Object} env the OWL env\n     * @param {function} onTimeout\n     * @param {integer} duration\n     * @param {Object} [param3={}]\n     * @param {boolean} [param3.silentCancelationErrors=true] if unset, caller\n     *   of timer will observe some errors that come from current timer calls\n     *   that has been cleared with `.clear()` or `.reset()`.\n     *   @see TimerClearedError for when timer has been aborted from `.clear()`\n     *     or `.reset()`.\n     */\n    constructor(env, onTimeout, duration, { silentCancelationErrors = true } = {}) {\n        this.env = env;\n        /**\n         * Determine whether the timer has a pending timeout.\n         */\n        this.isRunning = false;\n        /**\n         * Duration, in milliseconds, until timer times out and calls the\n         * timeout function.\n         */\n        this._duration = duration;\n        /**\n         * Determine whether the caller of timer `.start()` and `.reset()`\n         * should observe cancelation errors from `.clear()` or `.reset()`.\n         */\n        this._hasSilentCancelationErrors = silentCancelationErrors;\n        /**\n         * The function that is called when the timer times out.\n         */\n        this._onTimeout = onTimeout;\n        /**\n         * Deferred of a currently pending invocation to inner function on\n         * timeout.\n         */\n        this._timeoutDeferred = undefined;\n        /**\n         * Internal reference of `setTimeout()` that is used to invoke function\n         * when timer times out. Useful to clear it when timer is cleared/reset.\n         */\n        this._timeoutId = undefined;\n    }\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Clear the timer, which basically sets the state of timer as if it was\n     * just instantiated, without being started. This function makes sense only\n     * when this timer is running.\n     */\n    clear() {\n        this.env.browser.clearTimeout(this._timeoutId);\n        this.isRunning = false;\n        if (!this._timeoutDeferred) {\n            return;\n        }\n        this._timeoutDeferred.reject(new TimerClearedError(this.id));\n    }\n\n    /**\n     * Reset the timer, i.e. the pending timeout is refreshed with initial\n     * duration. This function makes sense only when this timer is running.\n     */\n    async reset() {\n        this.clear();\n        await this.start();\n    }\n\n    /**\n     * Starts the timer, i.e. after a certain duration, it times out and calls\n     * a function back. This function makes sense only when this timer is not\n     * yet running.\n     *\n     * @throws {Error} in case the timer is already running.\n     */\n    async start() {\n        if (this.isRunning) {\n            throw new Error(\"Cannot start a timer that is currently running.\");\n        }\n        this.isRunning = true;\n        const timeoutDeferred = makeDeferred();\n        this._timeoutDeferred = timeoutDeferred;\n        const timeoutId = this.env.browser.setTimeout(\n            () => {\n                this.isRunning = false;\n                timeoutDeferred.resolve(this._onTimeout());\n            },\n            this._duration\n        );\n        this._timeoutId = timeoutId;\n        let result;\n        try {\n            result = await timeoutDeferred;\n        } catch (error) {\n            if (\n                !this._hasSilentCancelationErrors ||\n                !(error instanceof TimerClearedError) ||\n                error.timerId !== this.id\n            ) {\n                // This branching should never happens.\n                // Still defined in case of programming error.\n                throw error;\n            }\n        } finally {\n            this.env.browser.clearTimeout(timeoutId);\n            this._timeoutDeferred = undefined;\n            this.isRunning = false;\n        }\n        return result;\n    }\n\n}\n\n/**\n * Make external timer errors accessible from timer class.\n */\nObject.assign(Timer, {\n    TimerClearedError,\n});\n\nexport default Timer;\n", "/** @odoo-module */\n\nimport { useModels } from \"@mail/component_hooks/use_models/use_models\";\nimport { useShouldUpdateBasedOnProps } from \"@mail/component_hooks/use_should_update_based_on_props/use_should_update_based_on_props\";\n\nconst componentRegistry = {};\n\n/**\n * Allows a component to lean on the messaging features: the component is\n * subscribed to changes in messaging models in its environment, the component\n * will only be rerenderd if its props change, and the component has access to\n * all components that are registered with this function without having to\n * explicitly import them.\n *\n * @param {Component} ComponentClass the constructor of the component to be\n *      registered. Its name will be used as its key in the registry.\n * @param {Object} [param1]\n * @param {Object} [param1.propsCompareDepth] @see useShouldUpdateBasedOnProps\n */\nexport function registerMessagingComponent(ComponentClass, { propsCompareDepth = {} } = {}) {\n    const { name, components } = ComponentClass;\n    if (componentRegistry[name]) {\n        throw new Error(`There already is a registered component with the name \"${name}\"`);\n    }\n    const decoratedName = `@messaging ${name}`;\n    // Defining the class in an object and immediately taking it out so that it\n    // has \"decoratedName\" as its class name in stack traces and stuff.\n    const MessagingClass = { [decoratedName]: class extends ComponentClass {\n        setup(...args) {\n            super.setup(...args);\n            // useModels must be defined after useRenderedValues, indeed records and\n            // fields accessed during useRenderedValues should be observed by\n            // useModels as if they were part of the OWL rendering itself.\n            useModels();\n            useShouldUpdateBasedOnProps({ propsCompareDepth });\n        }\n        get messaging() {\n            return this.env.services.messaging.modelManager.messaging;\n        }\n        /**\n         * @returns {string}\n         */\n        toString() {\n            return `component(${decoratedName}, props: ${Object.entries(this.props || {})})`;\n        }\n    } }[decoratedName];\n    // Create an object whose prototype is the component registry with the values of the original\n    // Component.components. This means that trying to get a value from this object will first look\n    // into the original Component's components, and fall back on the registry if not found.\n    MessagingClass.components = Object.assign(Object.create(componentRegistry), components);\n    componentRegistry[name] = MessagingClass;\n}\n\n/**\n * Unregisters a component from the registry. The component will not be\n * unpatched as the main purpose of this method is to clean up the registry\n * when using one-off components in tests.\n *\n * @param {function} ComponentClass the constructor of the component to be\n *      unregistered. Its name will be used as its key in the registry.\n */\nexport function unregisterMessagingComponent(ComponentClass) {\n    delete componentRegistry[ComponentClass.name];\n}\n\n/**\n * Returns the currently registered component in the registry for a given name.\n *\n * @param {string} name the class name of the component to get\n * @returns {Component} the decorated component\n */\nexport function getMessagingComponent(name) {\n    return componentRegistry[name];\n}\n", "/** @odoo-module **/\n\nimport { delay } from 'web.concurrency';\nimport {\n    patch as webUtilsPatch,\n    unaccent,\n    unpatch as webUtilsUnpatch,\n} from 'web.utils';\n\n//------------------------------------------------------------------------------\n// Public\n//------------------------------------------------------------------------------\n\nconst classPatchMap = new WeakMap();\nconst eventHandledWeakMap = new WeakMap();\n\n/**\n * Returns the given string after cleaning it. The goal of the clean is to give\n * more convenient results when comparing it to potential search results, on\n * which the clean should also be called before comparing them.\n *\n * @param {string} searchTerm\n * @returns {string}\n */\nfunction cleanSearchTerm(searchTerm) {\n    return unaccent(searchTerm.toLowerCase());\n}\n\n/**\n * Executes the provided functions in order, but with a potential delay between\n * them if they take too much time. This is done in order to avoid blocking the\n * main thread for too long.\n *\n * @param {function[]} functions\n * @param {integer} [maxTimeFrame=100] time (in ms) until a delay is introduced\n */\nasync function executeGracefully(functions, maxTimeFrame = 100) {\n    let startDate = new Date();\n    for (const func of functions) {\n        if (new Date() - startDate > maxTimeFrame) {\n            await new Promise(resolve => setTimeout(resolve));\n            startDate = new Date();\n        }\n        await func();\n    }\n}\n\n/**\n * Returns whether the given event has been handled with the given markName.\n *\n * @param {Event} ev\n * @param {string} markName\n * @returns {boolean}\n */\nfunction isEventHandled(ev, markName) {\n    if (!eventHandledWeakMap.get(ev)) {\n        return false;\n    }\n    return eventHandledWeakMap.get(ev).includes(markName);\n}\n\n/**\n * Marks the given event as handled by the given markName. Useful to allow\n * handlers in the propagation chain to make a decision based on what has\n * already been done.\n *\n * @param {Event} ev\n * @param {string} markName\n */\nfunction markEventHandled(ev, markName) {\n    if (!eventHandledWeakMap.get(ev)) {\n        eventHandledWeakMap.set(ev, []);\n    }\n    eventHandledWeakMap.get(ev).push(markName);\n}\n\n/**\n * Wait a task tick, so that anything in micro-task queue that can be processed\n * is processed.\n */\nasync function nextTick() {\n    await delay(0);\n}\n\n/**\n * Inspired by web.utils:patch utility function\n *\n * @param {Class} Class\n * @param {string} patchName\n * @param {Object} patch\n * @returns {function} unpatch function\n */\nfunction patchClassMethods(Class, patchName, patch) {\n    let metadata = classPatchMap.get(Class);\n    if (!metadata) {\n        metadata = {\n            origMethods: {},\n            patches: {},\n            current: []\n        };\n        classPatchMap.set(Class, metadata);\n    }\n    if (metadata.patches[patchName]) {\n        throw new Error(`Patch [${patchName}] already exists`);\n    }\n    metadata.patches[patchName] = patch;\n    applyPatch(Class, patch);\n    metadata.current.push(patchName);\n\n    function applyPatch(Class, patch) {\n        Object.keys(patch).forEach(function (methodName) {\n            const method = patch[methodName];\n            if (typeof method === \"function\") {\n                const original = Class[methodName];\n                if (!(methodName in metadata.origMethods)) {\n                    metadata.origMethods[methodName] = original;\n                }\n                Class[methodName] = function (...args) {\n                    const previousSuper = this._super;\n                    this._super = original;\n                    const res = method.call(this, ...args);\n                    this._super = previousSuper;\n                    return res;\n                };\n            }\n        });\n    }\n\n    return () => unpatchClassMethods.bind(Class, patchName);\n}\n\n/**\n * @param {Class} Class\n * @param {string} patchName\n * @param {Object} patch\n * @returns {function} unpatch function\n */\nfunction patchInstanceMethods(Class, patchName, patch) {\n    return webUtilsPatch(Class.prototype, patchName, patch);\n}\n\n/**\n * Inspired by web.utils:unpatch utility function\n *\n * @param {Class} Class\n * @param {string} patchName\n */\nfunction unpatchClassMethods(Class, patchName) {\n    let metadata = classPatchMap.get(Class);\n    if (!metadata) {\n        return;\n    }\n    classPatchMap.delete(Class);\n\n    // reset to original\n    for (let k in metadata.origMethods) {\n        Class[k] = metadata.origMethods[k];\n    }\n\n    // apply other patches\n    for (let name of metadata.current) {\n        if (name !== patchName) {\n            patchClassMethods(Class, name, metadata.patches[name]);\n        }\n    }\n}\n\n/**\n * @param {Class} Class\n * @param {string} patchName\n */\nfunction unpatchInstanceMethods(Class, patchName) {\n    return webUtilsUnpatch(Class.prototype, patchName);\n}\n\n//------------------------------------------------------------------------------\n// Export\n//------------------------------------------------------------------------------\n\nexport {\n    cleanSearchTerm,\n    executeGracefully,\n    isEventHandled,\n    markEventHandled,\n    nextTick,\n    patchClassMethods,\n    patchInstanceMethods,\n    unpatchClassMethods,\n    unpatchInstanceMethods,\n};\n", "/** @odoo-module **/\n\nimport { clear } from '@mail/model/model_field_command';\n\nconst { onWillUpdateProps, useComponent } = owl.hooks;\n\n/**\n * This hook provides support for saving the reference of the component directly\n * into the field of a record, and appropriately updates it when necessary\n * (props change or destroy).\n *\n * @param {Object} param0\n * @param {string} param0.fieldName Name of the field on the target record.\n * @param {string} param0.modelName Name of the model of the target record.\n * @param {string} param0.propNameAsRecordLocalId Name of the prop of this\n *  component containing the localId of the target record.\n */\nexport function useComponentToModel({ fieldName, modelName, propNameAsRecordLocalId }) {\n    const component = useComponent();\n    const { modelManager } = component.env.services.messaging;\n    const record = modelManager.models[modelName].get(component.props[propNameAsRecordLocalId]);\n    if (record) {\n        record.update({ [fieldName]: component });\n    }\n    onWillUpdateProps(nextProps => {\n        const currentRecord = modelManager.models[modelName].get(component.props[propNameAsRecordLocalId]);\n        const nextRecord = modelManager.models[modelName].get(nextProps[propNameAsRecordLocalId]);\n        if (currentRecord && currentRecord !== nextRecord) {\n            currentRecord.update({ [fieldName]: clear() });\n        }\n        if (nextRecord) {\n            nextRecord.update({ [fieldName]: component });\n        }\n    });\n    const __render = component.__render;\n    component.__render = fiber => {\n        const record = modelManager.models[modelName].get(component.props[propNameAsRecordLocalId]);\n        if (record && !record[fieldName]) {\n            // When the record is deleted then created again, its\n            // localId can be the same. In this scenario, the Component\n            // would not call setup neither willUpdateprops. Therefore,\n            // we need to set the component for this new record.\n            record.update({ [fieldName]: component });\n        }\n        __render.call(component, fiber);\n    };\n    const __destroy = component.__destroy;\n    component.__destroy = parent => {\n        const record = modelManager.models[modelName].get(component.props[propNameAsRecordLocalId]);\n        if (record) {\n            record.update({ [fieldName]: clear() });\n        }\n        __destroy.call(component, parent);\n    };\n}\n", "/** @odoo-module **/\n\nconst { useState, onMounted, onWillUnmount } = owl.hooks;\n\n/**\n * This hook handle the visibility of the dropzone based on drag & drop events.\n * It needs a ref to a dropzone, so you need to specify a t-ref=\"dropzone\" in\n * the template of your component.\n *\n * @returns {Object}\n */\nexport function useDragVisibleDropZone() {\n    /**\n     * Determine whether the drop zone should be visible or not.\n     * Note that this is an observed value, and primitive types such as\n     * boolean cannot be observed, hence this is an object with boolean\n     * value accessible from `.value`\n     */\n    const isVisible = useState({ value: false });\n\n    /**\n     * Counts how many drag enter/leave happened globally. This is the only\n     * way to know if a file has been dragged out of the browser window.\n     */\n    let dragCount = 0;\n\n    // COMPONENTS HOOKS\n    onMounted(() => {\n        document.addEventListener('dragenter', _onDragenterListener, true);\n        document.addEventListener('dragleave', _onDragleaveListener, true);\n        document.addEventListener('drop', _onDropListener, true);\n\n        // Thoses Events prevent the browser to open or download the file if\n        // it's dropped outside of the dropzone\n        window.addEventListener('dragover', preventDefault);\n        window.addEventListener('drop', preventDefault);\n    });\n\n    onWillUnmount(() => {\n        document.removeEventListener('dragenter', _onDragenterListener, true);\n        document.removeEventListener('dragleave', _onDragleaveListener, true);\n        document.removeEventListener('drop', _onDropListener, true);\n\n        window.removeEventListener('dragover', preventDefault);\n        window.removeEventListener('drop', preventDefault);\n    });\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    function preventDefault(ev) {\n        ev.preventDefault();\n    }\n\n    /**\n     * Shows the dropzone when entering the browser window, to let the user know\n     * where he can drop its file.\n     * Avoids changing state when entering inner dropzones.\n     *\n     * @private\n     * @param {DragEvent} ev\n     */\n    function _onDragenterListener(ev) {\n        if (\n            dragCount === 0 &&\n            ev.dataTransfer &&\n            ev.dataTransfer.types.includes('Files')\n        ) {\n            isVisible.value = true;\n        }\n        dragCount++;\n    }\n\n    /**\n     * @private\n     * @param {DragEvent} ev\n     */\n    function _onDragleaveListener(ev) {\n        dragCount--;\n        if (dragCount === 0) {\n            isVisible.value = false;\n        }\n    }\n\n    /**\n     * @private\n     * @param {DragEvent} ev\n     */\n    function _onDropListener(ev) {\n        dragCount = 0;\n        isVisible.value = false;\n    }\n\n    return isVisible;\n}\n", "/** @odoo-module **/\n\nimport { Listener } from '@mail/model/model_listener';\n\nconst { useComponent } = owl.hooks;\n\n/**\n * This hook provides support for automatically re-rendering when used records\n * or fields changed.\n */\nexport function useModels() {\n    const component = useComponent();\n    const { modelManager } = component.env.services.messaging;\n    const listener = new Listener({\n        isLocking: false, // unfortunately __render has side effects such as children components updating their reference to their corresponding model\n        name: `useModels() of ${component}`,\n        onChange: () => component.render(),\n    });\n    const __render = component.__render;\n    component.__render = fiber => {\n        if (modelManager) {\n            modelManager.startListening(listener);\n        }\n        __render.call(component, fiber);\n        if (modelManager) {\n            modelManager.stopListening(listener);\n        }\n    };\n    const __destroy = component.__destroy;\n    component.__destroy = parent => {\n        if (modelManager) {\n            modelManager.removeListener(listener);\n        }\n        __destroy.call(component, parent);\n    };\n    modelManager.messagingCreatedPromise.then(() => {\n        component.render();\n    });\n}\n", "/** @odoo-module **/\n\nimport { clear } from '@mail/model/model_field_command';\n\nconst { onWillUpdateProps, useComponent, useRef } = owl.hooks;\n\n/**\n * This hook provides support for saving the result of useRef directly into the\n * field of a record, and appropriately updates it when necessary (props change\n * or destroy).\n *\n * @param {Object} param0\n * @param {string} param0.fieldName Name of the field on the target record.\n * @param {string} param0.modelName Name of the model of the target record.\n * @param {string} param0.propNameAsRecordLocalId Name of the prop of this\n *  component containing the localId of the target record.\n * @param {string} param0.refName Name of the t-ref on this component.\n */\nexport function useRefToModel({ fieldName, modelName, propNameAsRecordLocalId, refName }) {\n    const component = useComponent();\n    const { modelManager } = component.env.services.messaging;\n    const record = modelManager.models[modelName].get(component.props[propNameAsRecordLocalId]);\n    const ref = useRef(refName);\n    if (record) {\n        record.update({ [fieldName]: ref });\n    }\n    onWillUpdateProps(nextProps => {\n        const currentRecord = modelManager.models[modelName].get(component.props[propNameAsRecordLocalId]);\n        const nextRecord = modelManager.models[modelName].get(nextProps[propNameAsRecordLocalId]);\n        if (currentRecord && currentRecord !== nextRecord) {\n            currentRecord.update({ [fieldName]: clear() });\n        }\n        if (nextRecord) {\n            nextRecord.update({ [fieldName]: ref });\n        }\n    });\n    const __render = component.__render;\n    component.__render = fiber => {\n        const record = modelManager.models[modelName].get(component.props[propNameAsRecordLocalId]);\n        if (record && !record[fieldName]) {\n            // When the record is deleted then created again, its\n            // localId can be the same. In this scenario, the Component\n            // would not call setup neither willUpdateprops. Therefore,\n            // we need to set the ref for this new record.\n            record.update({ [fieldName]: ref });\n        }\n        __render.call(component, fiber);\n    };\n    const __destroy = component.__destroy;\n    component.__destroy = parent => {\n        const record = modelManager.models[modelName].get(component.props[propNameAsRecordLocalId]);\n        if (record) {\n            record.update({ [fieldName]: clear() });\n        }\n        __destroy.call(component, parent);\n    };\n}\n", "/** @odoo-module **/\n\nconst { Component } = owl;\n\n/**\n * This hook provides support for dynamic-refs.\n *\n * @returns {function} returns object whose keys are t-ref values of active refs.\n *   and values are refs.\n */\nexport function useRefs() {\n    const component = Component.current;\n    return function () {\n        return component.__owl__.refs || {};\n    };\n}\n", "/** @odoo-module **/\n\nconst { Component } = owl;\nconst { onMounted, onPatched } = owl.hooks;\n\n/**\n * This hooks provides support for accessing the values returned by the given\n * selector at the time of the last render. The values will be updated after\n * every mount/patch.\n *\n * @param {function} selector function that will be executed at the time of the\n *  render and of which the result will be stored for future reference.\n * @returns {function} function to call to retrieve the last rendered values.\n */\nexport function useRenderedValues(selector) {\n    const component = Component.current;\n    let renderedValues;\n    let patchedValues;\n\n    const __render = component.__render.bind(component);\n    component.__render = function () {\n        renderedValues = selector();\n        return __render(...arguments);\n    };\n    onMounted(onUpdate);\n    onPatched(onUpdate);\n    function onUpdate() {\n        patchedValues = renderedValues;\n    }\n    return () => patchedValues;\n}\n", "/** @odoo-module **/\n'use strict';\n\nconst { Component } = owl;\nconst { onPatched } = owl.hooks;\n\n/**\n * Compares `a` and `b` up to the given `propsCompareDepth`.\n *\n * @param {any} a\n * @param {any} b\n * @param {Object|integer} propsCompareDepth\n * @returns {boolean}\n */\nfunction isEqual(a, b, propsCompareDepth) {\n    const keys = Object.keys(a);\n    if (Object.keys(b).length !== keys.length) {\n        return false;\n    }\n    for (const key of keys) {\n        // the depth can be given either as a number (for all keys) or as\n        // an object (for each key)\n        let depth;\n        if (typeof propsCompareDepth === 'number') {\n            depth = propsCompareDepth;\n        } else {\n            depth = propsCompareDepth[key] || 0;\n        }\n        if (depth === 0 && a[key] !== b[key]) {\n            return false;\n        }\n        if (depth !== 0) {\n            let nextDepth;\n            if (typeof depth === 'number') {\n                nextDepth = depth - 1;\n            } else {\n                nextDepth = depth;\n            }\n            if (!isEqual(a[key], b[key], nextDepth)) {\n                return false;\n            }\n        }\n    }\n    return true;\n}\n\n/**\n * This hook overrides the `shouldUpdate` method to ensure the component is only\n * updated if its props actually changed. This is especially useful to use on\n * components for which an extra render costs proportionally a lot more than\n * comparing props.\n *\n * @param {Object} [param0={}]\n * @param {Object} [param0.propsCompareDepth={}] allows to specify the comparison\n *  depth to use for each prop. Default is shallow compare (depth = 0).\n */\nexport function useShouldUpdateBasedOnProps({ propsCompareDepth = {} } = {}) {\n    const component = Component.current;\n    let forceRender = false;\n    component.shouldUpdate = nextProps => {\n        if (forceRender) {\n            return true;\n        }\n        const allNewProps = Object.assign({}, nextProps);\n        const defaultProps = component.constructor.defaultProps;\n        for (const key in defaultProps) {\n            if (allNewProps[key] === undefined) {\n                allNewProps[key] = defaultProps[key];\n            }\n        }\n        forceRender = !isEqual(component.props, allNewProps, propsCompareDepth);\n        return forceRender;\n    };\n    onPatched(() => forceRender = false);\n}\n", "/** @odoo-module **/\n\nimport { Listener } from '@mail/model/model_listener';\n\nconst { onMounted, onPatched, useComponent } = owl.hooks;\n\n/**\n * This hook provides support for executing code after update (render or patch).\n *\n * @param {Object} param0\n * @param {function} param0.func the function to execute after the update.\n */\nexport function useUpdate({ func }) {\n    const component = useComponent();\n    const { modelManager } = component.env.services.messaging;\n    const listener = new Listener({\n        isLocking: false, // unfortunately onUpdate methods often have side effect\n        name: `useUpdate() of ${component}`,\n        onChange: () => component.render(),\n    });\n    function onUpdate() {\n        if (modelManager) {\n            modelManager.startListening(listener);\n        }\n        func();\n        if (modelManager) {\n            modelManager.stopListening(listener);\n        }\n    }\n    onMounted(onUpdate);\n    onPatched(onUpdate);\n    const __destroy = component.__destroy;\n    component.__destroy = parent => {\n        if (modelManager) {\n            modelManager.removeListener(listener);\n        }\n        __destroy.call(component, parent);\n    };\n}\n", "/** @odoo-module **/\n\nimport { useUpdate } from '@mail/component_hooks/use_update/use_update';\n\nconst { useComponent } = owl.hooks;\n\n/**\n * This hook provides support for binding the onMounted/onPatched hooks to the\n * method of a target record.\n *\n * @param {Object} param0\n * @param {string} param0.methodName Name of the method on the target record.\n * @param {string} param0.modelName Name of the model of the target record.\n * @param {string} param0.propNameAsRecordLocalId Name of the prop of this component\n *  containing the localId of the target record.\n */\nexport function useUpdateToModel({ methodName, modelName, propNameAsRecordLocalId }) {\n    const component = useComponent();\n    useUpdate({ func: () => {\n        const record = component.env.services.messaging.modelManager.models[modelName].get(component.props[propNameAsRecordLocalId]);\n        if (record) {\n            record[methodName]();\n        }\n    } });\n}\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nimport {\n    auto_str_to_date,\n    getLangDateFormat,\n    getLangDatetimeFormat,\n} from 'web.time';\n\nconst { Component, useState } = owl;\nconst { useRef } = owl.hooks;\n\nexport class Activity extends Component {\n\n    /**\n     * @override\n     */\n    constructor(...args) {\n        super(...args);\n        this.state = useState({\n            areDetailsVisible: false,\n        });\n        /**\n         * Reference of the file uploader.\n         * Useful to programmatically prompts the browser file uploader.\n         */\n        this._fileUploaderRef = useRef('fileUploader');\n    }\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @returns {mail.activity}\n     */\n    get activity() {\n        return this.messaging && this.messaging.models['mail.activity'].get(this.props.activityLocalId);\n    }\n\n    /**\n     * @returns {string}\n     */\n    get assignedUserText() {\n        return _.str.sprintf(this.env._t(\"for %s\"), this.activity.assignee.nameOrDisplayName);\n    }\n\n    /**\n     * @returns {string}\n     */\n    get delayLabel() {\n        const today = moment().startOf('day');\n        const momentDeadlineDate = moment(auto_str_to_date(this.activity.dateDeadline));\n        // true means no rounding\n        const diff = momentDeadlineDate.diff(today, 'days', true);\n        if (diff === 0) {\n            return this.env._t(\"Today:\");\n        } else if (diff === -1) {\n            return this.env._t(\"Yesterday:\");\n        } else if (diff < 0) {\n            return _.str.sprintf(this.env._t(\"%d days overdue:\"), Math.abs(diff));\n        } else if (diff === 1) {\n            return this.env._t(\"Tomorrow:\");\n        } else {\n            return _.str.sprintf(this.env._t(\"Due in %d days:\"), Math.abs(diff));\n        }\n    }\n\n    /**\n     * @returns {string}\n     */\n    get formattedCreateDatetime() {\n        const momentCreateDate = moment(auto_str_to_date(this.activity.dateCreate));\n        const datetimeFormat = getLangDatetimeFormat();\n        return momentCreateDate.format(datetimeFormat);\n    }\n\n    /**\n     * @returns {string}\n     */\n    get formattedDeadlineDate() {\n        const momentDeadlineDate = moment(auto_str_to_date(this.activity.dateDeadline));\n        const datetimeFormat = getLangDateFormat();\n        return momentDeadlineDate.format(datetimeFormat);\n    }\n\n    /**\n     * @returns {string}\n     */\n    get MARK_DONE() {\n        return this.env._t(\"Mark Done\");\n    }\n\n    /**\n     * @returns {string}\n     */\n    get summary() {\n        return _.str.sprintf(this.env._t(\"\u201c%s\u201d\"), this.activity.summary);\n    }\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {CustomEvent} ev\n     * @param {Object} ev.detail\n     * @param {mail.attachment} ev.detail.attachment\n     */\n    async _onAttachmentCreated(ev) {\n        await this.activity.markAsDone({ attachments: [ev.detail.attachment] });\n        this.trigger('o-attachments-changed');\n    }\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClick(ev) {\n        if (\n            ev.target.tagName === 'A' &&\n            ev.target.dataset.oeId &&\n            ev.target.dataset.oeModel\n        ) {\n            this.messaging.openProfile({\n                id: Number(ev.target.dataset.oeId),\n                model: ev.target.dataset.oeModel,\n            });\n            // avoid following dummy href\n            ev.preventDefault();\n        }\n    }\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    async _onClickCancel(ev) {\n        ev.preventDefault();\n        await this.activity.deleteServerRecord();\n        this.trigger('reload', { keepChanges: true });\n    }\n\n    /**\n     * @private\n     */\n    _onClickDetailsButton(ev) {\n        ev.preventDefault();\n        this.state.areDetailsVisible = !this.state.areDetailsVisible;\n    }\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    async _onClickEdit(ev) {\n        await this.activity.edit();\n        this.trigger('reload', { keepChanges: true });\n    }\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickUploadDocument(ev) {\n        this._fileUploaderRef.comp.openBrowserFileUploader();\n    }\n\n}\n\nObject.assign(Activity, {\n    props: {\n        activityLocalId: String,\n    },\n    template: 'mail.Activity',\n});\n\nregisterMessagingComponent(Activity);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nconst { Component } = owl;\n\nexport class ActivityBox extends Component {\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @returns {Chatter}\n     */\n    get chatter() {\n        return this.messaging.models['mail.chatter'].get(this.props.chatterLocalId);\n    }\n\n}\n\nObject.assign(ActivityBox, {\n    props: {\n        chatterLocalId: String,\n    },\n    template: 'mail.ActivityBox',\n});\n\nregisterMessagingComponent(ActivityBox);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nconst { Component } = owl;\nconst { useRef } = owl.hooks;\n\nexport class ActivityMarkDonePopover extends Component {\n\n    /**\n     * @override\n     */\n    constructor(...args) {\n        super(...args);\n        this._feedbackTextareaRef = useRef('feedbackTextarea');\n    }\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    mounted() {\n        this._feedbackTextareaRef.el.focus();\n        if (this.activity.feedbackBackup) {\n            this._feedbackTextareaRef.el.value = this.activity.feedbackBackup;\n        }\n    }\n\n    /**\n     * @returns {mail.activity}\n     */\n    get activity() {\n        return this.messaging && this.messaging.models['mail.activity'].get(this.props.activityLocalId);\n    }\n\n    /**\n     * @returns {string}\n     */\n    get DONE_AND_SCHEDULE_NEXT() {\n        return this.env._t(\"Done & Schedule Next\");\n    }\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     */\n    _close() {\n        this.trigger('o-popover-close');\n    }\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     */\n    _onBlur() {\n        this.activity.update({\n            feedbackBackup: this._feedbackTextareaRef.el.value,\n        });\n    }\n\n    /**\n     * @private\n     */\n    _onClickDiscard() {\n        this._close();\n    }\n\n    /**\n     * @private\n     */\n    async _onClickDone() {\n        await this.activity.markAsDone({\n            feedback: this._feedbackTextareaRef.el.value,\n        });\n        this.trigger('reload', { keepChanges: true });\n    }\n\n    /**\n     * @private\n     */\n    async _onClickDoneAndScheduleNext() {\n        await this.activity.markAsDoneAndScheduleNext({\n            feedback: this._feedbackTextareaRef.el.value,\n        });\n        this.trigger('reload', { keepChanges: true });\n    }\n\n    /**\n     * @private\n     */\n    _onKeydown(ev) {\n        if (ev.key === 'Escape') {\n            this._close();\n        }\n    }\n\n}\n\nObject.assign(ActivityMarkDonePopover, {\n    props: {\n        activityLocalId: String,\n    },\n    template: 'mail.ActivityMarkDonePopover',\n});\n\nregisterMessagingComponent(ActivityMarkDonePopover);\n", "/** @odoo-module **/\n\nimport { useDragVisibleDropZone } from '@mail/component_hooks/use_drag_visible_dropzone/use_drag_visible_dropzone';\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nconst { Component } = owl;\nconst { useRef } = owl.hooks;\n\nexport class AttachmentBox extends Component {\n\n    /**\n     * @override\n     */\n    constructor(...args) {\n        super(...args);\n        this.isDropZoneVisible = useDragVisibleDropZone();\n        /**\n         * Reference of the file uploader.\n         * Useful to programmatically prompts the browser file uploader.\n         */\n        this._fileUploaderRef = useRef('fileUploader');\n    }\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @returns {mail.chatter|undefined}\n     */\n    get chatter() {\n        return this.messaging && this.messaging.models['mail.chatter'].get(this.props.chatterLocalId);\n    }\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {Event} ev\n     */\n    _onAttachmentCreated(ev) {\n        // FIXME Could be changed by spying attachments count (task-2252858)\n        this.trigger('o-attachments-changed');\n    }\n\n    /**\n     * @private\n     * @param {Event} ev\n     */\n    _onAttachmentRemoved(ev) {\n        // FIXME Could be changed by spying attachments count (task-2252858)\n        this.trigger('o-attachments-changed');\n    }\n\n    /**\n     * @private\n     * @param {Event} ev\n     */\n    _onClickAdd(ev) {\n        ev.preventDefault();\n        ev.stopPropagation();\n        this._fileUploaderRef.comp.openBrowserFileUploader();\n    }\n\n    /**\n     * @private\n     * @param {CustomEvent} ev\n     * @param {Object} ev.detail\n     * @param {FileList} ev.detail.files\n     */\n    async _onDropZoneFilesDropped(ev) {\n        ev.stopPropagation();\n        await this._fileUploaderRef.comp.uploadFiles(ev.detail.files);\n        this.isDropZoneVisible.value = false;\n    }\n\n}\n\nObject.assign(AttachmentBox, {\n    props: {\n        chatterLocalId: String,\n    },\n    template: 'mail.AttachmentBox',\n});\n\nregisterMessagingComponent(AttachmentBox);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\nimport { useComponentToModel } from '@mail/component_hooks/use_component_to_model/use_component_to_model';\nconst { Component } = owl;\n\nexport class AttachmentCard extends Component {\n\n    setup() {\n        super.setup();\n        useComponentToModel({ fieldName: 'component', modelName: 'mail.attachment_card', propNameAsRecordLocalId: 'attachmentCardLocalId' });\n    }\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @returns {mail.attachment_card}\n     */\n    get attachmentCard() {\n        return this.messaging && this.messaging.models['mail.attachment_card'].get(this.props.attachmentCardLocalId);\n    }\n\n}\n\nObject.assign(AttachmentCard, {\n    props: {\n        attachmentCardLocalId: String,\n    },\n    template: 'mail.AttachmentCard',\n});\n\nregisterMessagingComponent(AttachmentCard);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nimport Dialog from 'web.OwlDialog';\n\nconst { Component } = owl;\nconst { useRef } = owl.hooks;\n\nexport class AttachmentDeleteConfirmDialog extends Component {\n\n    /**\n     * @override\n     */\n    constructor(...args) {\n        super(...args);\n        // to manually trigger the dialog close event\n        this._dialogRef = useRef('dialog');\n    }\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @returns {mail.attachment}\n     */\n    get attachment() {\n        return this.messaging && this.messaging.models['mail.attachment'].get(this.props.attachmentLocalId);\n    }\n\n    /**\n     * @returns {string}\n     */\n    getBody() {\n        return _.str.sprintf(\n            this.env._t(`Do you really want to delete \"%s\"?`),\n            owl.utils.escape(this.attachment.displayName)\n        );\n    }\n\n    /**\n     * @returns {string}\n     */\n    getTitle() {\n        return this.env._t(\"Confirmation\");\n    }\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     */\n    _onClickCancel() {\n        this._dialogRef.comp._close();\n    }\n\n    /**\n     * @private\n     */\n    async _onClickOk() {\n        await this.attachment.remove();\n        this._dialogRef.comp._close();\n        this.trigger('o-attachment-removed', { attachmentLocalId: this.props.attachmentLocalId });\n    }\n\n}\n\nObject.assign(AttachmentDeleteConfirmDialog, {\n    components: { Dialog },\n    props: {\n        attachmentLocalId: String,\n    },\n    template: 'mail.AttachmentDeleteConfirmDialog',\n});\n\nregisterMessagingComponent(AttachmentDeleteConfirmDialog);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\nimport { useComponentToModel } from '@mail/component_hooks/use_component_to_model/use_component_to_model';\nconst { Component } = owl;\n\nexport class AttachmentImage extends Component {\n\n    setup() {\n        super.setup();\n        useComponentToModel({ fieldName: 'component', modelName: 'mail.attachment_image', propNameAsRecordLocalId: 'attachmentImageLocalId' });\n    }\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @returns {mail.attachment_image}\n     */\n    get attachmentImage() {\n        return this.messaging && this.messaging.models['mail.attachment_image'].get(this.props.attachmentImageLocalId);\n    }\n\n}\n\nObject.assign(AttachmentImage, {\n    props: {\n        attachmentImageLocalId: String,\n    },\n    template: 'mail.AttachmentImage',\n});\n\nregisterMessagingComponent(AttachmentImage);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nconst { Component } = owl;\n\nexport class AttachmentList extends Component {\n\n    /**\n     * @returns {mail.attachment_list}\n     */\n    get attachmentList() {\n        return this.messaging && this.messaging.models['mail.attachment_list'].get(this.props.attachmentListLocalId);\n    }\n\n}\n\nObject.assign(AttachmentList, {\n    props: {\n        attachmentListLocalId: String,\n    },\n    template: 'mail.AttachmentList',\n});\n\nregisterMessagingComponent(AttachmentList);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\nimport { useRefs } from '@mail/component_hooks/use_refs/use_refs';\nimport { link } from '@mail/model/model_field_command';\n\nimport { hidePDFJSButtons } from '@web/legacy/js/libs/pdfjs';\n\nconst { Component } = owl;\nconst { useRef } = owl.hooks;\n\nconst MIN_SCALE = 0.5;\nconst SCROLL_ZOOM_STEP = 0.1;\nconst ZOOM_STEP = 0.5;\n\nexport class AttachmentViewer extends Component {\n\n    /**\n     * @override\n     */\n    constructor(...args) {\n        super(...args);\n        this.MIN_SCALE = MIN_SCALE;\n        /**\n         * Used to ensure that the ref is always up to date, which seems to be needed if the element\n         * has a t-key, which was added to force the rendering of a new element when the src of the image changes.\n         * This was made to remove the display of the previous image as soon as the src changes.\n         */\n        this._getRefs = useRefs();\n        /**\n         * Determine whether the user is currently dragging the image.\n         * This is useful to determine whether a click outside of the image\n         * should close the attachment viewer or not.\n         */\n        this._isDragging = false;\n        /**\n         * Reference of the zoomer node. Useful to apply translate\n         * transformation on image visualisation.\n         */\n        this._zoomerRef = useRef('zoomer');\n        /**\n         * Reference of the IFRAME node when the attachment is a PDF.\n         */\n        this._iframeViewerPdfRef = useRef('iframeViewerPdf');\n        /**\n         * Tracked translate transformations on image visualisation. This is\n         * not observed for re-rendering because they are used to compute zoomer\n         * style, and this is changed directly on zoomer for performance\n         * reasons (overhead of making vdom is too significant for each mouse\n         * position changes while dragging)\n         */\n        this._translate = { x: 0, y: 0, dx: 0, dy: 0 };\n        this._onClickGlobal = this._onClickGlobal.bind(this);\n    }\n\n    mounted() {\n        this.el.focus();\n        this._handleImageLoad();\n        this._hideUnwantedPdfJsButtons();\n        document.addEventListener('click', this._onClickGlobal);\n    }\n\n    /**\n     * When a new image is displayed, show a spinner until it is loaded.\n     */\n    patched() {\n        this._handleImageLoad();\n        this._hideUnwantedPdfJsButtons();\n    }\n\n    willUnmount() {\n        document.removeEventListener('click', this._onClickGlobal);\n    }\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @returns {mail.attachment_viewer}\n     */\n    get attachmentViewer() {\n        return this.messaging && this.messaging.models['mail.attachment_viewer'].get(this.props.localId);\n    }\n\n    /**\n     * Compute the style of the image (scale + rotation).\n     *\n     * @returns {string}\n     */\n    get imageStyle() {\n        const attachmentViewer = this.attachmentViewer;\n        let style = `transform: ` +\n            `scale3d(${attachmentViewer.scale}, ${attachmentViewer.scale}, 1) ` +\n            `rotate(${attachmentViewer.angle}deg);`;\n\n        if (attachmentViewer.angle % 180 !== 0) {\n            style += `` +\n                `max-height: ${window.innerWidth}px; ` +\n                `max-width: ${window.innerHeight}px;`;\n        } else {\n            style += `` +\n                `max-height: 100%; ` +\n                `max-width: 100%;`;\n        }\n        return style;\n    }\n\n    /**\n     * Mandatory method for dialog components.\n     * Prevent closing the dialog when clicking on the mask when the user is\n     * currently dragging the image.\n     *\n     * @returns {boolean}\n     */\n    isCloseable() {\n        return !this._isDragging;\n    }\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Close the dialog with this attachment viewer.\n     *\n     * @private\n     */\n    _close() {\n        this.attachmentViewer.close();\n    }\n\n    /**\n     * Download the attachment.\n     *\n     * @private\n     */\n    _download() {\n        this.attachmentViewer.attachment.download();\n    }\n\n    /**\n     * Determine whether the current image is rendered for the 1st time, and if\n     * that's the case, display a spinner until loaded.\n     *\n     * @private\n     */\n    _handleImageLoad() {\n        if (!this.attachmentViewer || !this.attachmentViewer.attachment) {\n            return;\n        }\n        const refs = this._getRefs();\n        const image = refs[`image_${this.attachmentViewer.attachment.id}`];\n        if (\n            this.attachmentViewer.attachment.isImage &&\n            (!image || !image.complete)\n        ) {\n            this.attachmentViewer.update({ isImageLoading: true });\n        }\n    }\n\n    /**\n     * @see 'hidePDFJSButtons'\n     *\n     * @private\n     */\n    _hideUnwantedPdfJsButtons() {\n        if (this._iframeViewerPdfRef.el) {\n            hidePDFJSButtons(this._iframeViewerPdfRef.el);\n        }\n    }\n\n    /**\n     * Display the previous attachment in the list of attachments.\n     *\n     * @private\n     */\n    _next() {\n        const attachmentViewer = this.attachmentViewer;\n        const index = attachmentViewer.attachments.findIndex(attachment =>\n            attachment === attachmentViewer.attachment\n        );\n        const nextIndex = (index + 1) % attachmentViewer.attachments.length;\n        attachmentViewer.update({\n            attachment: link(attachmentViewer.attachments[nextIndex]),\n        });\n    }\n\n    /**\n     * Display the previous attachment in the list of attachments.\n     *\n     * @private\n     */\n    _previous() {\n        const attachmentViewer = this.attachmentViewer;\n        const index = attachmentViewer.attachments.findIndex(attachment =>\n            attachment === attachmentViewer.attachment\n        );\n        const nextIndex = index === 0\n            ? attachmentViewer.attachments.length - 1\n            : index - 1;\n        attachmentViewer.update({\n            attachment: link(attachmentViewer.attachments[nextIndex]),\n        });\n    }\n\n    /**\n     * Prompt the browser print of this attachment.\n     *\n     * @private\n     */\n    _print() {\n        const printWindow = window.open('about:blank', '_new');\n        printWindow.document.open();\n        printWindow.document.write(`\n            <html>\n                <head>\n                    <script>\n                        function onloadImage() {\n                            setTimeout('printImage()', 10);\n                        }\n                        function printImage() {\n                            window.print();\n                            window.close();\n                        }\n                    </script>\n                </head>\n                <body onload='onloadImage()'>\n                    <img src=\"${this.attachmentViewer.imageUrl}\" alt=\"\"/>\n                </body>\n            </html>`);\n        printWindow.document.close();\n    }\n\n    /**\n     * Rotate the image by 90 degrees to the right.\n     *\n     * @private\n     */\n    _rotate() {\n        this.attachmentViewer.update({ angle: this.attachmentViewer.angle + 90 });\n    }\n\n    /**\n     * Stop dragging interaction of the user.\n     *\n     * @private\n     */\n    _stopDragging() {\n        this._isDragging = false;\n        this._translate.x += this._translate.dx;\n        this._translate.y += this._translate.dy;\n        this._translate.dx = 0;\n        this._translate.dy = 0;\n        this._updateZoomerStyle();\n    }\n\n    /**\n     * Update the style of the zoomer based on translate transformation. Changes\n     * are directly applied on zoomer, instead of triggering re-render and\n     * defining them in the template, for performance reasons.\n     *\n     * @private\n     * @returns {string}\n     */\n    _updateZoomerStyle() {\n        const attachmentViewer = this.attachmentViewer;\n        const refs = this._getRefs();\n        const image = refs[`image_${this.attachmentViewer.attachment.id}`];\n        const tx = image.offsetWidth * attachmentViewer.scale > this._zoomerRef.el.offsetWidth\n            ? this._translate.x + this._translate.dx\n            : 0;\n        const ty = image.offsetHeight * attachmentViewer.scale > this._zoomerRef.el.offsetHeight\n            ? this._translate.y + this._translate.dy\n            : 0;\n        if (tx === 0) {\n            this._translate.x = 0;\n        }\n        if (ty === 0) {\n            this._translate.y = 0;\n        }\n        this._zoomerRef.el.style = `transform: ` +\n            `translate(${tx}px, ${ty}px)`;\n    }\n\n    /**\n     * Zoom in the image.\n     *\n     * @private\n     * @param {Object} [param0={}]\n     * @param {boolean} [param0.scroll=false]\n     */\n    _zoomIn({ scroll = false } = {}) {\n        this.attachmentViewer.update({\n            scale: this.attachmentViewer.scale + (scroll ? SCROLL_ZOOM_STEP : ZOOM_STEP),\n        });\n        this._updateZoomerStyle();\n    }\n\n    /**\n     * Zoom out the image.\n     *\n     * @private\n     * @param {Object} [param0={}]\n     * @param {boolean} [param0.scroll=false]\n     */\n    _zoomOut({ scroll = false } = {}) {\n        if (this.attachmentViewer.scale === MIN_SCALE) {\n            return;\n        }\n        const unflooredAdaptedScale = (\n            this.attachmentViewer.scale -\n            (scroll ? SCROLL_ZOOM_STEP : ZOOM_STEP)\n        );\n        this.attachmentViewer.update({\n            scale: Math.max(MIN_SCALE, unflooredAdaptedScale),\n        });\n        this._updateZoomerStyle();\n    }\n\n    /**\n     * Reset the zoom scale of the image.\n     *\n     * @private\n     */\n    _zoomReset() {\n        this.attachmentViewer.update({ scale: 1 });\n        this._updateZoomerStyle();\n    }\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Called when clicking on mask of attachment viewer.\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClick(ev) {\n        if (this._isDragging) {\n            return;\n        }\n        // TODO: clicking on the background should probably be handled by the dialog?\n        // task-2092965\n        this._close();\n    }\n\n    /**\n     * Called when clicking on cross icon.\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickClose(ev) {\n        this._close();\n    }\n\n    /**\n     * Called when clicking on download icon.\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickDownload(ev) {\n        ev.stopPropagation();\n        this._download();\n    }\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickGlobal(ev) {\n        if (!this._isDragging) {\n            return;\n        }\n        ev.stopPropagation();\n        this._stopDragging();\n    }\n\n    /**\n     * Called when clicking on the header. Stop propagation of event to prevent\n     * closing the dialog.\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickHeader(ev) {\n        ev.stopPropagation();\n    }\n\n    /**\n     * Called when clicking on image. Stop propagation of event to prevent\n     * closing the dialog.\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickImage(ev) {\n        if (this._isDragging) {\n            return;\n        }\n        ev.stopPropagation();\n    }\n\n    /**\n     * Called when clicking on next icon.\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickNext(ev) {\n        ev.stopPropagation();\n        this._next();\n    }\n\n    /**\n     * Called when clicking on previous icon.\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickPrevious(ev) {\n        ev.stopPropagation();\n        this._previous();\n    }\n\n    /**\n     * Called when clicking on print icon.\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickPrint(ev) {\n        ev.stopPropagation();\n        this._print();\n    }\n\n    /**\n     * Called when clicking on rotate icon.\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickRotate(ev) {\n        ev.stopPropagation();\n        this._rotate();\n    }\n\n    /**\n     * Called when clicking on embed video player. Stop propagation to prevent\n     * closing the dialog.\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickVideo(ev) {\n        ev.stopPropagation();\n    }\n\n    /**\n     * Called when clicking on zoom in icon.\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickZoomIn(ev) {\n        ev.stopPropagation();\n        this._zoomIn();\n    }\n\n    /**\n     * Called when clicking on zoom out icon.\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickZoomOut(ev) {\n        ev.stopPropagation();\n        this._zoomOut();\n    }\n\n    /**\n     * Called when clicking on reset zoom icon.\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickZoomReset(ev) {\n        ev.stopPropagation();\n        this._zoomReset();\n    }\n\n    /**\n     * @private\n     * @param {KeyboardEvent} ev\n     */\n    _onKeydown(ev) {\n        switch (ev.key) {\n            case 'ArrowRight':\n                this._next();\n                break;\n            case 'ArrowLeft':\n                this._previous();\n                break;\n            case 'Escape':\n                this._close();\n                break;\n            case 'q':\n                this._close();\n                break;\n            case 'r':\n                this._rotate();\n                break;\n            case '+':\n                this._zoomIn();\n                break;\n            case '-':\n                this._zoomOut();\n                break;\n            case '0':\n                this._zoomReset();\n                break;\n            default:\n                return;\n        }\n        ev.stopPropagation();\n    }\n\n    /**\n     * Called when new image has been loaded\n     *\n     * @private\n     * @param {Event} ev\n     */\n    _onLoadImage(ev) {\n        ev.stopPropagation();\n        this.attachmentViewer.update({ isImageLoading: false });\n    }\n\n    /**\n     * @private\n     * @param {DragEvent} ev\n     */\n    _onMousedownImage(ev) {\n        if (this._isDragging) {\n            return;\n        }\n        if (ev.button !== 0) {\n            return;\n        }\n        ev.stopPropagation();\n        this._isDragging = true;\n        this._dragstartX = ev.clientX;\n        this._dragstartY = ev.clientY;\n    }\n\n    /**\n     * @private\n     * @param {DragEvent}\n     */\n    _onMousemoveView(ev) {\n        if (!this._isDragging) {\n            return;\n        }\n        this._translate.dx = ev.clientX - this._dragstartX;\n        this._translate.dy = ev.clientY - this._dragstartY;\n        this._updateZoomerStyle();\n    }\n\n    /**\n     * @private\n     * @param {Event} ev\n     */\n    _onWheelImage(ev) {\n        ev.stopPropagation();\n        if (!this.el) {\n            return;\n        }\n        if (ev.deltaY > 0) {\n            this._zoomOut({ scroll: true });\n        } else {\n            this._zoomIn({ scroll: true });\n        }\n    }\n\n}\n\nObject.assign(AttachmentViewer, {\n    props: {\n        localId: String,\n    },\n    template: 'mail.AttachmentViewer',\n});\n\nregisterMessagingComponent(AttachmentViewer);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nconst { Component } = owl;\n\nexport class AutocompleteInput extends Component {\n\n    mounted() {\n        if (this.props.isFocusOnMount) {\n            this.el.focus();\n        }\n\n        let args = {\n            autoFocus: true,\n            select: (ev, ui) => this._onAutocompleteSelect(ev, ui),\n            source: (req, res) => this._onAutocompleteSource(req, res),\n            focus: ev => this._onAutocompleteFocus(ev),\n            html: this.props.isHtml || false,\n        };\n\n        if (this.props.customClass) {\n            args.classes = { 'ui-autocomplete': this.props.customClass };\n        }\n\n        const autoCompleteElem = $(this.el).autocomplete(args);\n        // Resize the autocomplete dropdown options to handle the long strings\n        // By setting the width of dropdown based on the width of the input element.\n        autoCompleteElem.data(\"ui-autocomplete\")._resizeMenu = function () {\n            const ul = this.menu.element;\n            ul.outerWidth(this.element.outerWidth());\n        };\n    }\n\n    willUnmount() {\n        $(this.el).autocomplete('destroy');\n    }\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Returns whether the given node is self or a children of self, including\n     * the suggestion menu.\n     *\n     * @param {Node} node\n     * @returns {boolean}\n     */\n    contains(node) {\n        if (!this.el) {\n            return false;\n        }\n        if (this.el.contains(node)) {\n            return true;\n        }\n        if (!this.props.customClass) {\n            return false;\n        }\n        const element = document.querySelector(`.${this.props.customClass}`);\n        if (!element) {\n            return false;\n        }\n        return element.contains(node);\n    }\n\n    focus() {\n        if (!this.el) {\n            return;\n        }\n        this.el.focus();\n    }\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {FocusEvent} ev\n     */\n    _onAutocompleteFocus(ev) {\n        if (this.props.focus) {\n            this.props.focus(ev);\n        } else {\n            ev.preventDefault();\n        }\n    }\n\n    /**\n     * @private\n     * @param {Event} ev\n     * @param {Object} ui\n     */\n    _onAutocompleteSelect(ev, ui) {\n        if (this.props.select) {\n            this.props.select(ev, ui);\n        }\n    }\n\n    /**\n     * @private\n     * @param {Object} req\n     * @param {function} res\n     */\n    _onAutocompleteSource(req, res) {\n        if (this.props.source) {\n            this.props.source(req, res);\n        }\n    }\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onBlur(ev) {\n        this.trigger('o-hide');\n    }\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onKeydown(ev) {\n        if (ev.key === 'Escape') {\n            this.trigger('o-hide');\n        }\n    }\n\n}\n\nObject.assign(AutocompleteInput, {\n    defaultProps: {\n        isFocusOnMount: false,\n        isHtml: false,\n        placeholder: '',\n    },\n    props: {\n        customClass: {\n            type: String,\n            optional: true,\n        },\n        focus: {\n            type: Function,\n            optional: true,\n        },\n        isFocusOnMount: Boolean,\n        isHtml: Boolean,\n        placeholder: String,\n        select: {\n            type: Function,\n            optional: true,\n        },\n        source: {\n            type: Function,\n            optional: true,\n        },\n    },\n    template: 'mail.AutocompleteInput',\n});\n\nregisterMessagingComponent(AutocompleteInput);\n", "/** @odoo-module **/\n\nimport { useComponentToModel } from '@mail/component_hooks/use_component_to_model/use_component_to_model';\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\nimport { useRefToModel } from '@mail/component_hooks/use_ref_to_model/use_ref_to_model';\nimport { useUpdateToModel } from '@mail/component_hooks/use_update_to_model/use_update_to_model';\n\nconst { Component } = owl;\n\nexport class ChannelInvitationForm extends Component {\n\n    /**\n     * @override\n     */\n    setup() {\n        super.setup();\n        useComponentToModel({ fieldName: 'component', modelName: 'mail.channel_invitation_form', propNameAsRecordLocalId: 'localId' });\n        useRefToModel({ fieldName: 'searchInputRef', modelName: 'mail.channel_invitation_form', propNameAsRecordLocalId: 'localId', refName: 'searchInput' });\n        useUpdateToModel({ methodName: 'onComponentUpdate', modelName: 'mail.channel_invitation_form', propNameAsRecordLocalId: 'localId' });\n    }\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    get channelInvitationForm() {\n        return this.messaging && this.messaging.models['mail.channel_invitation_form'].get(this.props.localId);\n    }\n\n}\n\nObject.assign(ChannelInvitationForm, {\n    props: {\n        localId: {\n            type: String,\n        },\n    },\n    template: 'mail.ChannelInvitationForm',\n});\n\nregisterMessagingComponent(ChannelInvitationForm);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nconst { Component } = owl;\n\nexport class ChannelMemberList extends Component {\n\n    /**\n     * @returns {mail.thread}\n     */\n    get channel() {\n        return this.messaging.models['mail.thread'].get(this.props.channelLocalId);\n    }\n\n}\n\nObject.assign(ChannelMemberList, {\n    props: {\n        channelLocalId: String,\n    },\n    template: 'mail.ChannelMemberList',\n});\n\nregisterMessagingComponent(ChannelMemberList);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\nimport { useUpdate } from '@mail/component_hooks/use_update/use_update';\nimport { isEventHandled } from '@mail/utils/utils';\n\nconst { Component } = owl;\nconst { useRef } = owl.hooks;\n\nexport class ChatWindow extends Component {\n\n    /**\n     * @override\n     */\n    constructor(...args) {\n        super(...args);\n        useUpdate({ func: () => this._update() });\n        /**\n         * Reference of the header of the chat window.\n         * Useful to prevent click on header from wrongly focusing the window.\n         */\n        this._chatWindowHeaderRef = useRef('header');\n        /**\n         * Reference of the autocomplete input (new_message chat window only).\n         * Useful when focusing this chat window, which consists of focusing\n         * this input.\n         */\n        this._inputRef = useRef('input');\n        /**\n         * Reference of thread in the chat window (chat window with thread\n         * only). Useful to save/restore scroll position.\n         */\n        this._threadRef = useRef('thread');\n        // the following are passed as props to children\n        this._onAutocompleteSelect = this._onAutocompleteSelect.bind(this);\n        this._onAutocompleteSource = this._onAutocompleteSource.bind(this);\n        this._constructor(...args);\n    }\n\n    /**\n     * Allows patching constructor.\n     */\n    _constructor() {}\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @returns {mail.chat_window}\n     */\n    get chatWindow() {\n        return this.messaging && this.messaging.models['mail.chat_window'].get(this.props.chatWindowLocalId);\n    }\n\n    /**\n     * Get the content of placeholder for the autocomplete input of\n     * 'new_message' chat window.\n     *\n     * @returns {string}\n     */\n    get newMessageFormInputPlaceholder() {\n        return this.env._t(\"Search user...\");\n    }\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Apply visual position of the chat window.\n     *\n     * @private\n     */\n    _applyVisibleOffset() {\n        const textDirection = this.messaging.locale.textDirection;\n        const offsetFrom = textDirection === 'rtl' ? 'left' : 'right';\n        const oppositeFrom = offsetFrom === 'right' ? 'left' : 'right';\n        this.el.style[offsetFrom] = this.chatWindow.visibleOffset + 'px';\n        this.el.style[oppositeFrom] = 'auto';\n    }\n\n    /**\n     * Save the scroll positions of the chat window in the store.\n     * This is useful in order to remount chat windows and keep previous\n     * scroll positions. This is necessary because when toggling on/off\n     * home menu, the chat windows have to be remade from scratch.\n     *\n     * @private\n     */\n    _saveThreadScrollTop() {\n        if (\n            !this._threadRef.comp ||\n            !this.chatWindow ||\n            !this.chatWindow.threadViewer\n        ) {\n            return;\n        }\n        if (\n            this.chatWindow.threadViewer.threadView &&\n            this.chatWindow.threadViewer.threadView.componentHintList.length > 0\n        ) {\n            // the current scroll position is likely incorrect due to the\n            // presence of hints to adjust it\n            return;\n        }\n        this.chatWindow.threadViewer.saveThreadCacheScrollHeightAsInitial(\n            this._threadRef.comp.getScrollHeight()\n        );\n        this.chatWindow.threadViewer.saveThreadCacheScrollPositionsAsInitial(\n            this._threadRef.comp.getScrollTop()\n        );\n    }\n\n    /**\n     * @private\n     */\n    _update() {\n        if (!this.chatWindow) {\n            // chat window is being deleted\n            return;\n        }\n        if (this.chatWindow.isDoFocus) {\n            this.chatWindow.update({ isDoFocus: false });\n            if (this._inputRef.comp) {\n                this._inputRef.comp.focus();\n            }\n        }\n        this._applyVisibleOffset();\n    }\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Called when selecting an item in the autocomplete input of the\n     * 'new_message' chat window.\n     *\n     * @private\n     * @param {Event} ev\n     * @param {Object} ui\n     * @param {Object} ui.item\n     * @param {integer} ui.item.id\n     */\n    async _onAutocompleteSelect(ev, ui) {\n        const chat = await this.messaging.getChat({ partnerId: ui.item.id });\n        if (!chat) {\n            return;\n        }\n        this.messaging.chatWindowManager.openThread(chat, {\n            makeActive: true,\n            replaceNewMessage: true,\n        });\n    }\n\n    /**\n     * Called when typing in the autocomplete input of the 'new_message' chat\n     * window.\n     *\n     * @private\n     * @param {Object} req\n     * @param {string} req.term\n     * @param {function} res\n     */\n    _onAutocompleteSource(req, res) {\n        this.messaging.models['mail.partner'].imSearch({\n            callback: (partners) => {\n                const suggestions = partners.map(partner => {\n                    return {\n                        id: partner.id,\n                        value: partner.nameOrDisplayName,\n                        label: partner.nameOrDisplayName,\n                    };\n                });\n                res(_.sortBy(suggestions, 'label'));\n            },\n            keyword: _.escape(req.term),\n            limit: 10,\n        });\n    }\n\n    /**\n     * Called when clicking on header of chat window. Usually folds the chat\n     * window.\n     *\n     * @private\n     * @param {CustomEvent} ev\n     */\n    _onClickedHeader(ev) {\n        ev.stopPropagation();\n        if (this.messaging.device.isMobile) {\n            return;\n        }\n        if (this.chatWindow.isFolded) {\n            this.chatWindow.unfold();\n            this.chatWindow.focus();\n        } else {\n            this._saveThreadScrollTop();\n            this.chatWindow.fold();\n        }\n    }\n\n    /**\n     * Called when an element in the thread becomes focused.\n     *\n     * @private\n     * @param {FocusEvent} ev\n     */\n    _onFocusinThread(ev) {\n        ev.stopPropagation();\n        if (!this.chatWindow) {\n            // prevent crash on destroy\n            return;\n        }\n        this.chatWindow.update({ isFocused: true });\n    }\n\n    /**\n     * Focus out the chat window.\n     *\n     * @private\n     */\n    _onFocusout() {\n        if (!this.chatWindow) {\n            // ignore focus out due to record being deleted\n            return;\n        }\n        this.chatWindow.update({ isFocused: false });\n    }\n\n    /**\n     * @private\n     * @param {KeyboardEvent} ev\n     */\n    _onKeydown(ev) {\n        if (!this.chatWindow) {\n            // prevent crash during delete\n            return;\n        }\n        switch (ev.key) {\n            case 'Tab':\n                ev.preventDefault();\n                if (ev.shiftKey) {\n                    this.chatWindow.focusPreviousVisibleUnfoldedChatWindow();\n                } else {\n                    this.chatWindow.focusNextVisibleUnfoldedChatWindow();\n                }\n                break;\n            case 'Escape':\n                if (isEventHandled(ev, 'ComposerTextInput.closeSuggestions')) {\n                    break;\n                }\n                if (isEventHandled(ev, 'Composer.closeEmojisPopover')) {\n                    break;\n                }\n                ev.preventDefault();\n                this.chatWindow.focusNextVisibleUnfoldedChatWindow();\n                this.chatWindow.close();\n                break;\n        }\n    }\n\n}\n\nObject.assign(ChatWindow, {\n    defaultProps: {\n        hasCloseAsBackButton: false,\n        isExpandable: false,\n        isFullscreen: false,\n    },\n    props: {\n        chatWindowLocalId: String,\n        hasCloseAsBackButton: Boolean,\n        isExpandable: Boolean,\n        isFullscreen: Boolean,\n    },\n    template: 'mail.ChatWindow',\n});\n\nregisterMessagingComponent(ChatWindow);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\nimport {\n    isEventHandled,\n    markEventHandled,\n} from '@mail/utils/utils';\n\nconst { Component } = owl;\n\nexport class ChatWindowHeader extends Component {\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @returns {mail.chat_window}\n     */\n    get chatWindow() {\n        return this.messaging && this.messaging.models['mail.chat_window'].get(this.props.chatWindowLocalId);\n    }\n\n    /**\n     * @returns {string}\n     */\n    get shiftNextText() {\n        if (this.messaging.locale.textDirection === 'rtl') {\n            return this.env._t(\"Shift left\");\n        }\n        return this.env._t(\"Shift right\");\n    }\n\n    /**\n     * @returns {string}\n     */\n    get shiftPrevText() {\n        if (this.messaging.locale.textDirection === 'rtl') {\n            return this.env._t(\"Shift right\");\n        }\n        return this.env._t(\"Shift left\");\n    }\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClick(ev) {\n        if (\n            isEventHandled(ev, 'ChatWindow.onClickCommand') ||\n            isEventHandled(ev, 'ChatWindowHeader.ClickShiftNext') ||\n            isEventHandled(ev, 'ChatWindowHeader.ClickShiftPrev') ||\n            isEventHandled(ev, 'ChatWindow.onClickHideMemberList') ||\n            isEventHandled(ev, 'ChatWindow.onClickShowMemberList')\n        ) {\n            return;\n        }\n        const chatWindow = this.chatWindow;\n        this.trigger('o-clicked', { chatWindow });\n    }\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickClose(ev) {\n        ev.stopPropagation();\n        if (!this.chatWindow) {\n            return;\n        }\n        this.chatWindow.close();\n    }\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    async _onClickCamera(ev) {\n        ev.stopPropagation();\n        if (this.chatWindow.thread.hasPendingRtcRequest) {\n            return;\n        }\n        await this.chatWindow.thread.toggleCall({ startWithVideo: true });\n    }\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    async _onClickPhone(ev) {\n        ev.stopPropagation();\n        if (this.chatWindow.thread.hasPendingRtcRequest) {\n            return;\n        }\n        await this.chatWindow.thread.toggleCall();\n    }\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickExpand(ev) {\n        ev.stopPropagation();\n        this.chatWindow.expand();\n    }\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickShiftPrev(ev) {\n        markEventHandled(ev, 'ChatWindowHeader.ClickShiftPrev');\n        this.chatWindow.shiftPrev();\n    }\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickShiftNext(ev) {\n        markEventHandled(ev, 'ChatWindowHeader.ClickShiftNext');\n        this.chatWindow.shiftNext();\n    }\n\n}\n\nObject.assign(ChatWindowHeader, {\n    defaultProps: {\n        hasCloseAsBackButton: false,\n        isExpandable: false,\n    },\n    props: {\n        chatWindowLocalId: String,\n        hasCloseAsBackButton: Boolean,\n        isExpandable: Boolean,\n    },\n    template: 'mail.ChatWindowHeader',\n});\n\nregisterMessagingComponent(ChatWindowHeader);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nconst { Component } = owl;\nconst { useRef } = owl.hooks;\n\nexport class ChatWindowHiddenMenu extends Component {\n\n    /**\n     * @override\n     */\n    constructor(...args) {\n        super(...args);\n        this._onClickCaptureGlobal = this._onClickCaptureGlobal.bind(this);\n        /**\n         * Reference of the dropup list. Useful to auto-set max height based on\n         * browser screen height.\n         */\n        this._listRef = useRef('list');\n        /**\n         * The intent of the toggle button depends on the last rendered state.\n         */\n        this._wasMenuOpen;\n    }\n\n    mounted() {\n        this._apply();\n        document.addEventListener('click', this._onClickCaptureGlobal, true);\n    }\n\n    patched() {\n        this._apply();\n    }\n\n    willUnmount() {\n        document.removeEventListener('click', this._onClickCaptureGlobal, true);\n    }\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     */\n    _apply() {\n        if (!this.messaging) {\n            return;\n        }\n        this._applyListHeight();\n        this._applyOffset();\n        this._wasMenuOpen = this.messaging.chatWindowManager.isHiddenMenuOpen;\n    }\n\n    /**\n     * @private\n     */\n    _applyListHeight() {\n        const device = this.messaging.device;\n        const height = device.globalWindowInnerHeight / 2;\n        this._listRef.el.style['max-height'] = `${height}px`;\n    }\n\n    /**\n     * @private\n     */\n    _applyOffset() {\n        const textDirection = this.messaging.locale.textDirection;\n        const offsetFrom = textDirection === 'rtl' ? 'left' : 'right';\n        const oppositeFrom = offsetFrom === 'right' ? 'left' : 'right';\n        const offset = this.messaging.chatWindowManager.visual.hidden.offset;\n        this.el.style[offsetFrom] = `${offset}px`;\n        this.el.style[oppositeFrom] = 'auto';\n    }\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Closes the menu when clicking outside.\n     * Must be done as capture to avoid stop propagation.\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickCaptureGlobal(ev) {\n        if (!this.el || this.el.contains(ev.target)) {\n            return;\n        }\n        this.messaging.chatWindowManager.closeHiddenMenu();\n    }\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickToggle(ev) {\n        if (this._wasMenuOpen) {\n            this.messaging.chatWindowManager.closeHiddenMenu();\n        } else {\n            this.messaging.chatWindowManager.openHiddenMenu();\n        }\n    }\n\n    /**\n     * @private\n     * @param {CustomEvent} ev\n     * @param {Object} ev.detail\n     * @param {mail.chat_window} ev.detail.chatWindow\n     */\n    _onClickedChatWindow(ev) {\n        const chatWindow = ev.detail.chatWindow;\n        chatWindow.makeActive();\n        this.messaging.chatWindowManager.closeHiddenMenu();\n    }\n\n}\n\nObject.assign(ChatWindowHiddenMenu, {\n    props: {},\n    template: 'mail.ChatWindowHiddenMenu',\n});\n\nregisterMessagingComponent(ChatWindowHiddenMenu);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nconst { Component } = owl;\n\nexport class ChatWindowManager extends Component {}\n\nObject.assign(ChatWindowManager, {\n    props: {},\n    template: 'mail.ChatWindowManager',\n});\n\nregisterMessagingComponent(ChatWindowManager);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\nimport { useUpdate } from '@mail/component_hooks/use_update/use_update';\nimport { useComponentToModel } from '@mail/component_hooks/use_component_to_model/use_component_to_model';\nimport { useRefToModel } from '@mail/component_hooks/use_ref_to_model/use_ref_to_model';\n\nconst { Component } = owl;\nconst { useRef } = owl.hooks;\n\nexport class Chatter extends Component {\n\n    /**\n     * @override\n     */\n    constructor(...args) {\n        super(...args);\n        useUpdate({ func: () => this._update() });\n        useComponentToModel({ fieldName: 'component', modelName: 'mail.chatter', propNameAsRecordLocalId: 'chatterLocalId' });\n        useRefToModel({ fieldName: 'threadRef', modelName: 'mail.chatter', propNameAsRecordLocalId: 'chatterLocalId', refName: 'thread' });\n        /**\n         * Reference of the scroll Panel (Real scroll element). Useful to pass the Scroll element to\n         * child component to handle proper scrollable element.\n         */\n        this._scrollPanelRef = useRef('scrollPanel');\n        this.getScrollableElement = this.getScrollableElement.bind(this);\n    }\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @returns {mail.chatter}\n     */\n    get chatter() {\n        return this.messaging && this.messaging.models['mail.chatter'].get(this.props.chatterLocalId);\n    }\n\n    /**\n     * @returns {Element|undefined} Scrollable Element\n     */\n    getScrollableElement() {\n        if (!this._scrollPanelRef.el) {\n            return;\n        }\n        return this._scrollPanelRef.el;\n    }\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     */\n    _notifyRendered() {\n        this.trigger('o-chatter-rendered', {\n            attachments: this.chatter.thread.allAttachments,\n            thread: this.chatter.thread.localId,\n        });\n    }\n\n    /**\n     * @private\n     */\n    _update() {\n        if (!this.chatter) {\n            return;\n        }\n        if (this.chatter.thread) {\n            this._notifyRendered();\n        }\n    }\n\n}\n\nObject.assign(Chatter, {\n    props: {\n        chatterLocalId: String,\n    },\n    template: 'mail.Chatter',\n});\n\nregisterMessagingComponent(Chatter);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\nimport { clear } from '@mail/model/model_field_command';\n\nconst { Component } = owl;\n\nconst getChatterNextTemporaryId = (function () {\n    let tmpId = 0;\n    return () => {\n        tmpId += 1;\n        return tmpId;\n    };\n})();\n\n/**\n * This component abstracts chatter component to its parent, so that it can be\n * mounted and receive chatter data even when a chatter component cannot be\n * created. Indeed, in order to create a chatter component, we must create\n * a chatter record, the latter requiring messaging to be initialized. The view\n * may attempt to create a chatter before messaging has been initialized, so\n * this component delays the mounting of chatter until it becomes initialized.\n */\nexport class ChatterContainer extends Component {\n\n    /**\n     * @override\n     */\n    constructor(...args) {\n        super(...args);\n        this.chatter = undefined;\n        this.chatterId = getChatterNextTemporaryId();\n        this._insertFromProps(this.props);\n    }\n\n    /**\n     * @override\n     */\n    willUpdateProps(nextProps) {\n        this._insertFromProps(nextProps);\n        return super.willUpdateProps(...arguments);\n    }\n\n    /**\n     * @override\n     */\n    destroy() {\n        super.destroy();\n        if (this.chatter) {\n            this.chatter.delete();\n        }\n    }\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     */\n    async _insertFromProps(props) {\n        const messaging = await this.env.services.messaging.get();\n        if (this.__owl__.status === 5 /* destroyed */) {\n            return;\n        }\n        const values = { id: this.chatterId, ...props };\n        if (values.threadId === undefined) {\n            values.threadId = clear();\n        }\n        this.chatter = messaging.models['mail.chatter'].insert(values);\n        this.chatter.refresh();\n        this.render();\n    }\n\n}\n\nObject.assign(ChatterContainer, {\n    props: {\n        hasActivities: {\n            type: Boolean,\n            optional: true,\n        },\n        hasExternalBorder: {\n            type: Boolean,\n            optional: true,\n        },\n        hasFollowers: {\n            type: Boolean,\n            optional: true,\n        },\n        hasMessageList: {\n            type: Boolean,\n            optional: true,\n        },\n        hasMessageListScrollAdjust: {\n            type: Boolean,\n            optional: true,\n        },\n        hasTopbarCloseButton: {\n            type: Boolean,\n            optional: true,\n        },\n        isAttachmentBoxVisibleInitially: {\n            type: Boolean,\n            optional: true,\n        },\n        threadId: {\n            type: Number,\n            optional: true,\n        },\n        threadModel: String,\n    },\n    template: 'mail.ChatterContainer',\n});\n\nregisterMessagingComponent(ChatterContainer);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\nimport { useComponentToModel } from '@mail/component_hooks/use_component_to_model/use_component_to_model';\n\nconst { Component } = owl;\n\nexport class ChatterTopbar extends Component {\n\n    /**\n     * @override\n     */\n    setup() {\n        super.setup();\n        useComponentToModel({ fieldName: 'componentChatterTopbar', modelName: 'mail.chatter', propNameAsRecordLocalId: 'chatterLocalId' });\n    }\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @returns {mail.chatter}\n     */\n    get chatter() {\n        return this.messaging && this.messaging.models['mail.chatter'].get(this.props.chatterLocalId);\n    }\n\n}\n\nObject.assign(ChatterTopbar, {\n    props: {\n        chatterLocalId: String,\n    },\n    template: 'mail.ChatterTopbar',\n});\n\nregisterMessagingComponent(ChatterTopbar);\n", "/** @odoo-module **/\n\nimport { useDragVisibleDropZone } from '@mail/component_hooks/use_drag_visible_dropzone/use_drag_visible_dropzone';\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\nimport {\n    isEventHandled,\n    markEventHandled,\n} from '@mail/utils/utils';\n\nconst { Component } = owl;\nconst { useRef } = owl.hooks;\n\nexport class Composer extends Component {\n\n    /**\n     * @override\n     */\n    constructor(...args) {\n        super(...args);\n        this.isDropZoneVisible = useDragVisibleDropZone();\n        /**\n         * Reference of the emoji popover. Useful to include emoji popover as\n         * contained \"inside\" the composer.\n         */\n        this._emojisPopoverRef = useRef('emojisPopover');\n        /**\n         * Reference of the file uploader.\n         * Useful to programmatically prompts the browser file uploader.\n         */\n        this._fileUploaderRef = useRef('fileUploader');\n        /**\n         * Reference of the text input component. Useful to save state in store\n         * before inserting emoji.\n         */\n        this._textInputRef = useRef('textInput');\n        this._onClickCaptureGlobal = this._onClickCaptureGlobal.bind(this);\n    }\n\n    mounted() {\n        document.addEventListener('click', this._onClickCaptureGlobal, true);\n    }\n\n    willUnmount() {\n        document.removeEventListener('click', this._onClickCaptureGlobal, true);\n    }\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @returns {mail.composer_view}\n     */\n    get composerView() {\n        return this.messaging && this.messaging.models['mail.composer_view'].get(this.props.composerViewLocalId);\n    }\n\n    /**\n     * Returns whether the given node is self or a children of self, including\n     * the emoji popover.\n     *\n     * @param {Node} node\n     * @returns {boolean}\n     */\n    contains(node) {\n        // emoji popover is outside but should be considered inside\n        const emojisPopover = this._emojisPopoverRef.comp;\n        if (emojisPopover && emojisPopover.contains(node)) {\n            return true;\n        }\n        return Boolean(this.el && this.el.contains(node));\n    }\n\n    /**\n     * Get the current partner image URL.\n     *\n     * @returns {string}\n     */\n    get currentPartnerAvatar() {\n        const avatar = this.messaging.currentUser\n            ? this.env.session.url('/web/image', {\n                    field: 'avatar_128',\n                    id: this.messaging.currentUser.id,\n                    model: 'res.users',\n                })\n            : '/web/static/img/user_menu_avatar.png';\n        return avatar;\n    }\n\n    /**\n     * Determine whether composer should display a footer.\n     *\n     * @returns {boolean}\n     */\n    get hasFooter() {\n        if (!this.composerView) {\n            return false;\n        }\n        return (\n            this.props.hasThreadTyping ||\n            this.composerView.composer.attachments.length > 0 ||\n            this.composerView.messageViewInEditing ||\n            !this.props.isCompact\n        );\n    }\n\n    /**\n     * Determine whether the composer should display a header.\n     *\n     * @returns {boolean}\n     */\n    get hasHeader() {\n        if (!this.composerView) {\n            return false;\n        }\n        return (\n            (this.props.hasThreadName && this.composerView.composer.thread) ||\n            (this.props.hasFollowers && !this.composerView.composer.isLog) ||\n            this.composerView.threadView && this.composerView.threadView.replyingToMessageView\n        );\n    }\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Post a message in the composer on related thread.\n     *\n     * Posting of the message could be aborted if it cannot be posted like if there are attachments\n     * currently uploading or if there is no text content and no attachments.\n     *\n     * @private\n     */\n    _postMessage() {\n        if (!this.composerView.composer.canPostMessage) {\n            if (this.composerView.composer.hasUploadingAttachment) {\n                this.env.services['notification'].notify({\n                    message: this.env._t(\"Please wait while the file is uploading.\"),\n                    type: 'warning',\n                });\n            }\n            return;\n        }\n        if (this.composerView.messageViewInEditing) {\n            this.composerView.updateMessage();\n            return;\n        }\n        this.composerView.postMessage();\n    }\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Called when clicking on attachment button.\n     *\n     * @private\n     */\n    _onClickAddAttachment() {\n        this._fileUploaderRef.comp.openBrowserFileUploader();\n        if (!this.messaging.device.isMobileDevice) {\n            this.composerView.update({ doFocus: true });\n        }\n    }\n\n    /**\n     * Discards the composer when clicking away.\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    async _onClickCaptureGlobal(ev) {\n        if (this.contains(ev.target)) {\n            return;\n        }\n        // Let event be handled by bubbling handlers first\n        await new Promise(this.env.browser.setTimeout);\n        if (isEventHandled(ev, 'MessageActionList.replyTo')) {\n            return;\n        }\n        if (!this.composerView) {\n            return;\n        }\n        this.composerView.discard();\n    }\n\n    /**\n     * Called when clicking on \"expand\" button.\n     *\n     * @private\n     */\n    _onClickFullComposer() {\n        this.composerView.openFullComposer();\n    }\n\n    /**\n     * Called when clicking on \"discard\" button.\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickDiscard(ev) {\n        this.composerView.discard();\n    }\n\n    /**\n     * Called when clicking on \"send\" button.\n     *\n     * @private\n     */\n    _onClickSend() {\n        this._postMessage();\n        this.composerView.update({ doFocus: true });\n    }\n\n    /**\n     * @private\n     */\n    _onComposerTextInputSendShortcut() {\n        this._postMessage();\n    }\n\n    /**\n     * Called when some files have been dropped in the dropzone.\n     *\n     * @private\n     * @param {CustomEvent} ev\n     * @param {Object} ev.detail\n     * @param {FileList} ev.detail.files\n     */\n    async _onDropZoneFilesDropped(ev) {\n        ev.stopPropagation();\n        await this._fileUploaderRef.comp.uploadFiles(ev.detail.files);\n        this.isDropZoneVisible.value = false;\n    }\n\n    /**\n     * Handles `o-emoji-selection` event from the emoji popover.\n     *\n     * @private\n     * @param {CustomEvent} ev\n     * @param {Object} ev.detail\n     * @param {string} ev.detail.unicode\n     */\n    _onEmojiSelection(ev) {\n        ev.stopPropagation();\n        this._textInputRef.comp.saveStateInStore();\n        this.composerView.insertIntoTextInput(ev.detail.unicode);\n        if (!this.messaging.device.isMobileDevice) {\n            this.composerView.update({ doFocus: true });\n        }\n    }\n\n    /**\n     * @private\n     * @param {KeyboardEvent} ev\n     */\n    _onKeydown(ev) {\n        if (ev.key === 'Escape') {\n            if (isEventHandled(ev, 'ComposerTextInput.closeSuggestions')) {\n                return;\n            }\n            if (isEventHandled(ev, 'Composer.closeEmojisPopover')) {\n                return;\n            }\n            ev.preventDefault();\n            this.composerView.discard();\n        }\n    }\n\n    /**\n     * @private\n     * @param {KeyboardEvent} ev\n     */\n    _onKeydownEmojiButton(ev) {\n        if (ev.key === 'Escape') {\n            if (this._emojisPopoverRef.comp) {\n                this._emojisPopoverRef.comp.close();\n                this.composerView.update({ doFocus: true });\n                markEventHandled(ev, 'Composer.closeEmojisPopover');\n            }\n        }\n    }\n\n    /**\n     * @private\n     * @param {CustomEvent} ev\n     */\n    async _onPasteTextInput(ev) {\n        if (!ev.clipboardData || !ev.clipboardData.files) {\n            return;\n        }\n        await this._fileUploaderRef.comp.uploadFiles(ev.clipboardData.files);\n    }\n\n}\n\nObject.assign(Composer, {\n    defaultProps: {\n        hasCurrentPartnerAvatar: true,\n        hasDiscardButton: false,\n        hasFollowers: false,\n        hasSendButton: true,\n        hasThreadName: false,\n        hasThreadTyping: false,\n        isCompact: true,\n        isExpandable: false,\n    },\n    props: {\n        composerViewLocalId: String,\n        hasCurrentPartnerAvatar: Boolean,\n        hasDiscardButton: Boolean,\n        hasFollowers: Boolean,\n        hasMentionSuggestionsBelowPosition: {\n            type: Boolean,\n            optional: true,\n        },\n        hasSendButton: Boolean,\n        hasThreadName: Boolean,\n        hasThreadTyping: Boolean,\n        showAttachmentsExtensions: {\n            type: Boolean,\n            optional: true,\n        },\n        showAttachmentsFilenames: {\n            type: Boolean,\n            optional: true,\n        },\n        isCompact: Boolean,\n        isExpandable: Boolean,\n        /**\n         * If set, keyboard shortcuts from text input to send message.\n         * If not set, will use default values from `ComposerTextInput`.\n         */\n        textInputSendShortcuts: {\n            type: Array,\n            element: String,\n            optional: true,\n        },\n    },\n    template: 'mail.Composer',\n});\n\nregisterMessagingComponent(Composer, { propsCompareDepth: { textInputSendShortcuts: 1 } });\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\nimport { useUpdate } from '@mail/component_hooks/use_update/use_update';\n\nimport { FormViewDialog } from 'web.view_dialogs';\nimport { ComponentAdapter } from 'web.OwlCompatibility';\nimport session from 'web.session';\n\nconst { Component } = owl;\nconst { useRef } = owl.hooks;\n\nclass FormViewDialogComponentAdapter extends ComponentAdapter {\n\n    renderWidget() {\n        // Ensure the dialog is properly reconstructed. Without this line, it is\n        // impossible to open the dialog again after having it closed a first\n        // time, because the DOM of the dialog has disappeared.\n        return this.willStart();\n    }\n\n    updateWidget() {\n        return Promise.resolve();\n    }\n}\n\nexport class ComposerSuggestedRecipient extends Component {\n\n    constructor(...args) {\n        super(...args);\n        this.id = _.uniqueId('o_ComposerSuggestedRecipient_');\n        useUpdate({ func: () => this._update() });\n        /**\n         * Form view dialog class. Useful to reference it in the template.\n         */\n        this.FormViewDialog = FormViewDialog;\n        /**\n         * Reference of the checkbox. Useful to know whether it was checked or\n         * not, to properly update the corresponding state in the record or to\n         * prompt the user with the partner creation dialog.\n         */\n        this._checkboxRef = useRef('checkbox');\n        /**\n         * Reference of the partner creation dialog. Useful to open it, for\n         * compatibility with old code.\n         */\n        this._dialogRef = useRef('dialog');\n        /**\n         * Whether the dialog is currently open. `_dialogRef` cannot be trusted\n         * to know if the dialog is open due to manually calling `open` and\n         * potential out of sync with component adapter.\n         */\n        this._isDialogOpen = false;\n        this._onDialogSaved = this._onDialogSaved.bind(this);\n    }\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @returns {string|undefined}\n     */\n    get ADD_AS_RECIPIENT_AND_FOLLOWER_REASON() {\n        if (!this.suggestedRecipientInfo) {\n            return undefined;\n        }\n        return this.env._t(_.str.sprintf(\n            \"Add as recipient and follower (reason: %s)\",\n            this.suggestedRecipientInfo.reason\n        ));\n    }\n\n    /**\n     * @returns {string}\n     */\n    get PLEASE_COMPLETE_CUSTOMER_S_INFORMATION() {\n        return this.env._t(\"Please complete customer's information\");\n    }\n\n    /**\n     * @returns {mail.suggested_recipient_info}\n     */\n    get suggestedRecipientInfo() {\n        return this.messaging && this.messaging.models['mail.suggested_recipient_info'].get(this.props.suggestedRecipientInfoLocalId);\n    }\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     */\n    _update() {\n        if (this._checkboxRef.el && this.suggestedRecipientInfo) {\n            this._checkboxRef.el.checked = this.suggestedRecipientInfo.isSelected;\n        }\n    }\n\n    //--------------------------------------------------------------------------\n    // Handler\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     */\n    _onChangeCheckbox() {\n        const isChecked = this._checkboxRef.el.checked;\n        this.suggestedRecipientInfo.update({ isSelected: isChecked });\n        if (!this.suggestedRecipientInfo.partner) {\n            // Recipients must always be partners. On selecting a suggested\n            // recipient that does not have a partner, the partner creation form\n            // should be opened.\n            if (isChecked && this._dialogRef && !this._isDialogOpen) {\n                const widget = this._dialogRef.comp.widget;\n                this._isDialogOpen = true;\n                widget.on('closed', this, () => {\n                    this._isDialogOpen = false;\n                    this._checkboxRef.el.checked = !!this.suggestedRecipientInfo.partner;\n                });\n                widget.context = Object.assign({}, widget.context, session.user_context);\n                widget.open();\n            }\n        }\n    }\n\n    /**\n     * @private\n     */\n    _onDialogSaved() {\n        const thread = this.suggestedRecipientInfo && this.suggestedRecipientInfo.thread;\n        if (!thread) {\n            return;\n        }\n        thread.fetchAndUpdateSuggestedRecipients();\n    }\n}\n\nObject.assign(ComposerSuggestedRecipient, {\n    components: { FormViewDialogComponentAdapter },\n    props: {\n        suggestedRecipientInfoLocalId: String,\n    },\n    template: 'mail.ComposerSuggestedRecipient',\n});\n\nregisterMessagingComponent(ComposerSuggestedRecipient);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nconst { Component } = owl;\nconst { useState } = owl.hooks;\n\nexport class ComposerSuggestedRecipientList extends Component {\n\n    /**\n     * @override\n     */\n    constructor(...args) {\n        super(...args);\n        this.state = useState({\n            hasShowMoreButton: false,\n        });\n    }\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @returns {mail.thread}\n     */\n    get thread() {\n        return this.messaging && this.messaging.models['mail.thread'].get(this.props.threadLocalId);\n    }\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     */\n    _onClickShowLess(ev) {\n        this.state.hasShowMoreButton = false;\n    }\n\n    /**\n     * @private\n     */\n    _onClickShowMore(ev) {\n        this.state.hasShowMoreButton = true;\n    }\n\n}\n\nObject.assign(ComposerSuggestedRecipientList, {\n    props: {\n        threadLocalId: String,\n    },\n    template: 'mail.ComposerSuggestedRecipientList',\n});\n\nregisterMessagingComponent(ComposerSuggestedRecipientList);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\nimport { useUpdate } from '@mail/component_hooks/use_update/use_update';\nimport { link } from '@mail/model/model_field_command';\n\nconst { Component } = owl;\n\nexport class ComposerSuggestion extends Component {\n\n    /**\n     * @override\n     */\n    constructor(...args) {\n        super(...args);\n        useUpdate({ func: () => this._update() });\n    }\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @returns {mail.composer_view}\n     */\n    get composerView() {\n        return this.messaging && this.messaging.models['mail.composer_view'].get(this.props.composerViewLocalId);\n    }\n\n    get isCannedResponse() {\n        return this.props.modelName === \"mail.canned_response\";\n    }\n\n    get isChannel() {\n        return this.props.modelName === \"mail.thread\";\n    }\n\n    get isCommand() {\n        return this.props.modelName === \"mail.channel_command\";\n    }\n\n    get isPartner() {\n        return this.props.modelName === \"mail.partner\";\n    }\n\n    get record() {\n        return this.messaging && this.messaging.models[this.props.modelName].get(this.props.recordLocalId);\n    }\n\n    /**\n     * Returns a descriptive title for this suggestion. Useful to be able to\n     * read both parts when they are overflowing the UI.\n     *\n     * @returns {string}\n     */\n    title() {\n        if (this.isCannedResponse) {\n            return _.str.sprintf(\"%s: %s\", this.record.source, this.record.substitution);\n        }\n        if (this.isChannel) {\n            return this.record.name;\n        }\n        if (this.isCommand) {\n            return _.str.sprintf(\"%s: %s\", this.record.name, this.record.help);\n        }\n        if (this.isPartner) {\n            if (this.record.email) {\n                return _.str.sprintf(\"%s (%s)\", this.record.nameOrDisplayName, this.record.email);\n            }\n            return this.record.nameOrDisplayName;\n        }\n        return \"\";\n    }\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     */\n    _update() {\n        if (\n            this.composerView &&\n            this.composerView.hasToScrollToActiveSuggestion &&\n            this.props.isActive\n        ) {\n            this.el.scrollIntoView({\n                block: 'center',\n            });\n            this.composerView.update({ hasToScrollToActiveSuggestion: false });\n        }\n    }\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {Event} ev\n     */\n    _onClick(ev) {\n        ev.preventDefault();\n        this.composerView.update({ activeSuggestedRecord: link(this.record) });\n        this.composerView.insertSuggestion();\n        this.composerView.closeSuggestions();\n        this.composerView.update({ doFocus: true });\n    }\n\n}\n\nObject.assign(ComposerSuggestion, {\n    defaultProps: {\n        isActive: false,\n    },\n    props: {\n        composerViewLocalId: String,\n        isActive: Boolean,\n        modelName: String,\n        recordLocalId: String,\n    },\n    template: 'mail.ComposerSuggestion',\n});\n\nregisterMessagingComponent(ComposerSuggestion);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nconst { Component } = owl;\n\nexport class ComposerSuggestionList extends Component {\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @returns {mail.composer_view}\n     */\n    get composerView() {\n        return this.messaging && this.messaging.models['mail.composer_view'].get(this.props.composerViewLocalId);\n    }\n\n}\n\nObject.assign(ComposerSuggestionList, {\n    defaultProps: {\n        isBelow: false,\n    },\n    props: {\n        composerViewLocalId: String,\n        isBelow: Boolean,\n    },\n    template: 'mail.ComposerSuggestionList',\n});\n\nregisterMessagingComponent(ComposerSuggestionList);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\nimport { useUpdate } from '@mail/component_hooks/use_update/use_update';\nimport { markEventHandled } from '@mail/utils/utils';\n\nconst { Component } = owl;\nconst { useRef } = owl.hooks;\n\nexport class ComposerTextInput extends Component {\n\n    /**\n     * @override\n     */\n    constructor(...args) {\n        super(...args);\n        /**\n         * Updates the composer text input content when composer is mounted\n         * as textarea content can't be changed from the DOM.\n         */\n        useUpdate({ func: () => this._update() });\n        /**\n         * Last content of textarea from input event. Useful to determine\n         * whether the current partner is typing something.\n         */\n        this._textareaLastInputValue = \"\";\n        /**\n         * Reference of the textarea. Useful to set height, selection and content.\n         */\n        this._textareaRef = useRef('textarea');\n        /**\n         * This is the invisible textarea used to compute the composer height\n         * based on the text content. We need it to downsize the textarea\n         * properly without flicker.\n         */\n        this._mirroredTextareaRef = useRef('mirroredTextarea');\n    }\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @returns {mail.composer_view}\n     */\n    get composerView() {\n        return this.messaging && this.messaging.models['mail.composer_view'].get(this.props.composerViewLocalId);\n    }\n\n    /**\n     * @returns {string}\n     */\n    get textareaPlaceholder() {\n        if (!this.composerView) {\n            return \"\";\n        }\n        if (!this.composerView.composer.thread) {\n            return \"\";\n        }\n        if (this.composerView.composer.thread.model === 'mail.channel') {\n            if (this.composerView.composer.thread.correspondent) {\n                return _.str.sprintf(this.env._t(\"Message %s...\"), this.composerView.composer.thread.correspondent.nameOrDisplayName);\n            }\n            return _.str.sprintf(this.env._t(\"Message #%s...\"), this.composerView.composer.thread.displayName);\n        }\n        if (this.composerView.composer.isLog) {\n            return this.env._t(\"Log an internal note...\");\n        }\n        return this.env._t(\"Send a message to followers...\");\n    }\n\n    /**\n     * Saves the composer text input state in store\n     */\n    saveStateInStore() {\n        this.composerView.composer.update({\n            textInputContent: this._getContent(),\n            textInputCursorEnd: this._getSelectionEnd(),\n            textInputCursorStart: this._getSelectionStart(),\n            textInputSelectionDirection: this._textareaRef.el.selectionDirection,\n        });\n    }\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Returns textarea current content.\n     *\n     * @private\n     * @returns {string}\n     */\n    _getContent() {\n        return this._textareaRef.el.value;\n    }\n\n    /**\n     * Returns selection end position.\n     *\n     * @private\n     * @returns {integer}\n     */\n    _getSelectionEnd() {\n        return this._textareaRef.el.selectionEnd;\n    }\n\n    /**\n     * Returns selection start position.\n     *\n     * @private\n     * @returns {integer}\n     *\n     */\n    _getSelectionStart() {\n        return this._textareaRef.el.selectionStart;\n    }\n\n    /**\n     * Determines whether the textarea is empty or not.\n     *\n     * @private\n     * @returns {boolean}\n     */\n    _isEmpty() {\n        return this._getContent() === \"\";\n    }\n\n    /**\n     * Updates the content and height of a textarea\n     *\n     * @private\n     */\n    _update() {\n        if (!this.composerView) {\n            return;\n        }\n        if (this.composerView.doFocus) {\n            this.composerView.update({ doFocus: false });\n            if (this.messaging.device.isMobile) {\n                this.el.scrollIntoView();\n            }\n            this._textareaRef.el.focus();\n        }\n        if (this.composerView.composer.isLastStateChangeProgrammatic) {\n            this._textareaRef.el.value = this.composerView.composer.textInputContent;\n            if (this.composerView.hasFocus) {\n                this._textareaRef.el.setSelectionRange(\n                    this.composerView.composer.textInputCursorStart,\n                    this.composerView.composer.textInputCursorEnd,\n                    this.composerView.composer.textInputSelectionDirection,\n                );\n            }\n            this.composerView.composer.update({ isLastStateChangeProgrammatic: false });\n        }\n        this._updateHeight();\n    }\n\n    /**\n     * Updates the textarea height.\n     *\n     * @private\n     */\n    _updateHeight() {\n        this._mirroredTextareaRef.el.value = this.composerView.composer.textInputContent;\n        this._textareaRef.el.style.height = (this._mirroredTextareaRef.el.scrollHeight) + \"px\";\n    }\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     */\n    _onClickTextarea() {\n        if (!this.composerView) {\n            return;\n        }\n        // clicking might change the cursor position\n        this.saveStateInStore();\n    }\n\n    /**\n     * @private\n     */\n    _onFocusinTextarea() {\n        if (!this.composerView) {\n            return;\n        }\n        this.composerView.update({ hasFocus: true });\n    }\n\n    /**\n     * @private\n     */\n    _onFocusoutTextarea() {\n        if (!this.composerView) {\n            return;\n        }\n        this.saveStateInStore();\n        this.composerView.update({ hasFocus: false });\n    }\n\n    /**\n     * @private\n     */\n    _onInputTextarea() {\n        if (!this.composerView) {\n            return;\n        }\n        this.saveStateInStore();\n        if (this._textareaLastInputValue !== this._textareaRef.el.value) {\n            this.composerView.handleCurrentPartnerIsTyping();\n        }\n        this._textareaLastInputValue = this._textareaRef.el.value;\n        this._updateHeight();\n    }\n\n    /**\n     * @private\n     * @param {KeyboardEvent} ev\n     */\n    _onKeydownTextarea(ev) {\n        if (!this.composerView) {\n            return;\n        }\n        switch (ev.key) {\n            case 'Escape':\n                if (this.composerView.hasSuggestions) {\n                    ev.preventDefault();\n                    this.composerView.closeSuggestions();\n                    markEventHandled(ev, 'ComposerTextInput.closeSuggestions');\n                }\n                break;\n            // UP, DOWN, TAB: prevent moving cursor if navigation in mention suggestions\n            case 'ArrowUp':\n            case 'PageUp':\n            case 'ArrowDown':\n            case 'PageDown':\n            case 'Home':\n            case 'End':\n            case 'Tab':\n                if (this.composerView.hasSuggestions) {\n                    // We use preventDefault here to avoid keys native actions but actions are handled in keyUp\n                    ev.preventDefault();\n                }\n                break;\n            // ENTER: submit the message only if the dropdown mention proposition is not displayed\n            case 'Enter':\n                this._onKeydownTextareaEnter(ev);\n                break;\n        }\n    }\n\n    /**\n     * @private\n     * @param {KeyboardEvent} ev\n     */\n    _onKeydownTextareaEnter(ev) {\n        if (!this.composerView) {\n            return;\n        }\n        if (this.composerView.hasSuggestions) {\n            ev.preventDefault();\n            return;\n        }\n        if (\n            this.props.sendShortcuts.includes('ctrl-enter') &&\n            !ev.altKey &&\n            ev.ctrlKey &&\n            !ev.metaKey &&\n            !ev.shiftKey\n        ) {\n            this.trigger('o-composer-text-input-send-shortcut');\n            ev.preventDefault();\n            return;\n        }\n        if (\n            this.props.sendShortcuts.includes('enter') &&\n            !ev.altKey &&\n            !ev.ctrlKey &&\n            !ev.metaKey &&\n            !ev.shiftKey\n        ) {\n            this.trigger('o-composer-text-input-send-shortcut');\n            ev.preventDefault();\n            return;\n        }\n        if (\n            this.props.sendShortcuts.includes('meta-enter') &&\n            !ev.altKey &&\n            !ev.ctrlKey &&\n            ev.metaKey &&\n            !ev.shiftKey\n        ) {\n            this.trigger('o-composer-text-input-send-shortcut');\n            ev.preventDefault();\n            return;\n        }\n    }\n\n    /**\n     * Key events management is performed in a Keyup to avoid intempestive RPC calls\n     *\n     * @private\n     * @param {KeyboardEvent} ev\n     */\n    _onKeyupTextarea(ev) {\n        if (!this.composerView) {\n            return;\n        }\n        switch (ev.key) {\n            case 'Escape':\n                // already handled in _onKeydownTextarea, break to avoid default\n                break;\n            // ENTER, HOME, END, UP, DOWN, PAGE UP, PAGE DOWN, TAB: check if navigation in mention suggestions\n            case 'Enter':\n                if (this.composerView.hasSuggestions) {\n                    this.composerView.insertSuggestion();\n                    this.composerView.closeSuggestions();\n                    this.composerView.update({ doFocus: true });\n                }\n                break;\n            case 'ArrowUp':\n            case 'PageUp':\n                if (ev.key === 'ArrowUp' && !this.composerView.hasSuggestions && !this.composerView.composer.textInputContent && this.composerView.threadView) {\n                    this.composerView.threadView.startEditingLastMessageFromCurrentUser();\n                    break;\n                }\n                if (this.composerView.hasSuggestions) {\n                    this.composerView.setPreviousSuggestionActive();\n                    this.composerView.update({ hasToScrollToActiveSuggestion: true });\n                }\n                break;\n            case 'ArrowDown':\n            case 'PageDown':\n                if (ev.key === 'ArrowDown' && !this.composerView.hasSuggestions && !this.composerView.composer.textInputContent && this.composerView.threadView) {\n                    this.composerView.threadView.startEditingLastMessageFromCurrentUser();\n                    break;\n                }\n                if (this.composerView.hasSuggestions) {\n                    this.composerView.setNextSuggestionActive();\n                    this.composerView.update({ hasToScrollToActiveSuggestion: true });\n                }\n                break;\n            case 'Home':\n                if (this.composerView.hasSuggestions) {\n                    this.composerView.setFirstSuggestionActive();\n                    this.composerView.update({ hasToScrollToActiveSuggestion: true });\n                }\n                break;\n            case 'End':\n                if (this.composerView.hasSuggestions) {\n                    this.composerView.setLastSuggestionActive();\n                    this.composerView.update({ hasToScrollToActiveSuggestion: true });\n                }\n                break;\n            case 'Tab':\n                if (this.composerView.hasSuggestions) {\n                    if (ev.shiftKey) {\n                        this.composerView.setPreviousSuggestionActive();\n                        this.composerView.update({ hasToScrollToActiveSuggestion: true });\n                    } else {\n                        this.composerView.setNextSuggestionActive();\n                        this.composerView.update({ hasToScrollToActiveSuggestion: true });\n                    }\n                }\n                break;\n            case 'Alt':\n            case 'AltGraph':\n            case 'CapsLock':\n            case 'Control':\n            case 'Fn':\n            case 'FnLock':\n            case 'Hyper':\n            case 'Meta':\n            case 'NumLock':\n            case 'ScrollLock':\n            case 'Shift':\n            case 'ShiftSuper':\n            case 'Symbol':\n            case 'SymbolLock':\n                // prevent modifier keys from resetting the suggestion state\n                break;\n            // Otherwise, check if a mention is typed\n            default:\n                this.saveStateInStore();\n        }\n    }\n\n}\n\nObject.assign(ComposerTextInput, {\n    defaultProps: {\n        hasMentionSuggestionsBelowPosition: false,\n        sendShortcuts: [],\n    },\n    props: {\n        composerViewLocalId: String,\n        hasMentionSuggestionsBelowPosition: Boolean,\n        isCompact: Boolean,\n        /**\n         * Keyboard shortcuts from text input to send message.\n         */\n        sendShortcuts: {\n            type: Array,\n            element: String,\n            validate: prop => {\n                for (const shortcut of prop) {\n                    if (!['ctrl-enter', 'enter', 'meta-enter'].includes(shortcut)) {\n                        return false;\n                    }\n                }\n                return true;\n            },\n        },\n    },\n    template: 'mail.ComposerTextInput',\n});\n\nregisterMessagingComponent(ComposerTextInput, { propsCompareDepth: { sendShortcuts: 1 } });\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nimport Dialog from 'web.OwlDialog';\n\nconst { Component } = owl;\nconst { useRef } = owl.hooks;\n\nexport class DeleteMessageConfirmDialog extends Component {\n\n    /**\n     * @override\n     */\n    setup() {\n        super.setup();\n        this.title = this.env._t(\"Confirmation\");\n        this.dialogRef = useRef('dialog');\n    }\n\n    /**\n     * @returns {mail.message_action_list}\n     */\n    get messageActionList() {\n        return this.messaging && this.messaging.models['mail.message_action_list'].get(this.props.messageActionListLocalId);\n    }\n}\n\nObject.assign(DeleteMessageConfirmDialog, {\n    components: {\n        Dialog,\n    },\n    props: {\n        messageActionListLocalId: String,\n    },\n    template: 'mail.DeleteMessageConfirmDialog',\n});\n\nregisterMessagingComponent(DeleteMessageConfirmDialog);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nconst { Component } = owl;\nconst { useRef } = owl.hooks;\n\nexport class Dialog extends Component {\n\n    /**\n     * @param {...any} args\n     */\n    constructor(...args) {\n        super(...args);\n        /**\n         * Reference to the component used inside this dialog.\n         */\n        this._componentRef = useRef('component');\n        this._onClickGlobal = this._onClickGlobal.bind(this);\n        this._onKeydownDocument = this._onKeydownDocument.bind(this);\n        this._constructor();\n    }\n\n    /**\n     * Allows patching constructor.\n     */\n    _constructor() {}\n\n    mounted() {\n        document.addEventListener('click', this._onClickGlobal, true);\n        document.addEventListener('keydown', this._onKeydownDocument);\n    }\n\n    willUnmount() {\n        document.removeEventListener('click', this._onClickGlobal, true);\n        document.removeEventListener('keydown', this._onKeydownDocument);\n    }\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @returns {mail.dialog}\n     */\n    get dialog() {\n        return this.messaging && this.messaging.models['mail.dialog'].get(this.props.dialogLocalId);\n    }\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Called when clicking on this dialog.\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClick(ev) {\n        ev.stopPropagation();\n    }\n\n    /**\n     * Closes the dialog when clicking outside.\n     * Does not work with attachment viewer because it takes the whole space.\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickGlobal(ev) {\n        if (this._componentRef.el && this._componentRef.el.contains(ev.target)) {\n            return;\n        }\n        // TODO: this should be child logic (will crash if child doesn't have isCloseable!!)\n        // task-2092965\n        if (\n            this._componentRef.comp &&\n            this._componentRef.comp.isCloseable &&\n            !this._componentRef.comp.isCloseable()\n        ) {\n            return;\n        }\n        this.dialog.delete();\n    }\n\n    /**\n     * @private\n     * @param {KeyboardEvent} ev\n     */\n    _onKeydownDocument(ev) {\n        if (ev.key === 'Escape') {\n            this.dialog.delete();\n        }\n    }\n\n}\n\nObject.assign(Dialog, {\n    props: {\n        dialogLocalId: String,\n    },\n    template: 'mail.Dialog',\n});\n\nregisterMessagingComponent(Dialog);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nconst { Component } = owl;\n\nexport class DialogManager extends Component {\n\n    mounted() {\n        this._checkDialogOpen();\n    }\n\n    patched() {\n        this._checkDialogOpen();\n    }\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     */\n    _checkDialogOpen() {\n        if (!this.messaging || !this.messaging.dialogManager) {\n            return;\n        }\n        if (this.messaging.dialogManager.dialogs.length > 0) {\n            document.body.classList.add('modal-open');\n        } else {\n            document.body.classList.remove('modal-open');\n        }\n    }\n\n}\n\nObject.assign(DialogManager, {\n    props: {},\n    template: 'mail.DialogManager',\n});\n\nregisterMessagingComponent(DialogManager);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\nimport { link, unlink } from '@mail/model/model_field_command';\nimport { useUpdate } from '@mail/component_hooks/use_update/use_update';\n\nconst { Component } = owl;\n\nexport class Discuss extends Component {\n    /**\n     * @override\n     */\n    constructor(...args) {\n        super(...args);\n        this._updateLocalStoreProps();\n        // bind since passed as props\n        this._onMobileAddItemHeaderInputSelect = this._onMobileAddItemHeaderInputSelect.bind(this);\n        this._onMobileAddItemHeaderInputSource = this._onMobileAddItemHeaderInputSource.bind(this);\n        useUpdate({ func: () => this._update() });\n    }\n\n    _update() {\n        if (!this.discuss) {\n            return;\n        }\n        this.discuss.update({ isOpen: true });\n        if (this.discuss.thread) {\n            this.trigger('o-push-state-action-manager');\n        }\n        if (\n            this.discuss.thread &&\n            this.discuss.thread === this.messaging.inbox &&\n            this.discuss.threadView &&\n            this._lastThreadCache === this.discuss.threadView.threadCache.localId &&\n            this._lastThreadCounter > 0 && this.discuss.thread.counter === 0\n        ) {\n            this.trigger('o-show-rainbow-man');\n        }\n        this._updateLocalStoreProps();\n    }\n\n    willUnmount() {\n        if (this.discuss) {\n            this.discuss.close();\n        }\n    }\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @returns {string}\n     */\n    get addChannelInputPlaceholder() {\n        return this.env._t(\"Create or search channel...\");\n    }\n\n    /**\n     * @returns {string}\n     */\n    get addChatInputPlaceholder() {\n        return this.env._t(\"Search user...\");\n    }\n\n    /**\n     * @returns {mail.discuss}\n     */\n    get discuss() {\n        return this.messaging && this.messaging.discuss;\n    }\n\n    /**\n     * @returns {Object[]}\n     */\n    mobileNavbarTabs() {\n        return [{\n            icon: 'fa fa-inbox',\n            id: 'mailbox',\n            label: this.env._t(\"Mailboxes\"),\n        }, {\n            icon: 'fa fa-user',\n            id: 'chat',\n            label: this.env._t(\"Chat\"),\n        }, {\n            icon: 'fa fa-users',\n            id: 'channel',\n            label: this.env._t(\"Channel\"),\n        }];\n    }\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     */\n    _updateLocalStoreProps() {\n        if (!this.discuss) {\n            return;\n        }\n        /**\n         * Locally tracked store props `activeThreadCache`.\n         * Useful to set scroll position from last stored one and to display\n         * rainbox man on inbox.\n         */\n        this._lastThreadCache = (\n            this.discuss.threadView &&\n            this.discuss.threadView.threadCache &&\n            this.discuss.threadView.threadCache.localId\n        );\n        /**\n         * Locally tracked store props `threadCounter`.\n         * Useful to display the rainbow man on inbox.\n         */\n        this._lastThreadCounter = (\n            this.discuss.thread &&\n            this.discuss.thread.counter\n        );\n    }\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {CustomEvent} ev\n     */\n    _onHideMobileAddItemHeader(ev) {\n        ev.stopPropagation();\n        this.discuss.clearIsAddingItem();\n    }\n\n    /**\n     * @private\n     * @param {Event} ev\n     * @param {Object} ui\n     * @param {Object} ui.item\n     * @param {integer} ui.item.id\n     */\n    _onMobileAddItemHeaderInputSelect(ev, ui) {\n        const discuss = this.discuss;\n        if (discuss.isAddingChannel) {\n            discuss.handleAddChannelAutocompleteSelect(ev, ui);\n        } else {\n            discuss.handleAddChatAutocompleteSelect(ev, ui);\n        }\n    }\n\n    /**\n     * @private\n     * @param {Object} req\n     * @param {string} req.term\n     * @param {function} res\n     */\n    _onMobileAddItemHeaderInputSource(req, res) {\n        if (this.discuss.isAddingChannel) {\n            this.discuss.handleAddChannelAutocompleteSource(req, res);\n        } else {\n            this.discuss.handleAddChatAutocompleteSource(req, res);\n        }\n    }\n\n    /**\n     * @private\n     * @param {CustomEvent} ev\n     * @param {Object} ev.detail\n     * @param {string} ev.detail.tabId\n     */\n    _onSelectMobileNavbarTab(ev) {\n        ev.stopPropagation();\n        if (this.discuss.activeMobileNavbarTabId === ev.detail.tabId) {\n            return;\n        }\n        this.discuss.update({ activeMobileNavbarTabId: ev.detail.tabId });\n        if (\n            this.discuss.activeMobileNavbarTabId === 'mailbox' &&\n            (!this.discuss.thread || this.discuss.thread.model !== 'mailbox')\n        ) {\n            this.discuss.update({ thread: link(this.messaging.inbox) });\n        }\n        if (this.discuss.activeMobileNavbarTabId !== 'mailbox') {\n            this.discuss.update({ thread: unlink() });\n        }\n        if (this.discuss.activeMobileNavbarTabId !== 'chat') {\n            this.discuss.update({ isAddingChat: false });\n        }\n        if (this.discuss.activeMobileNavbarTabId !== 'channel') {\n            this.discuss.update({ isAddingChannel: false });\n        }\n    }\n\n}\n\nObject.assign(Discuss, {\n    props: {},\n    template: 'mail.Discuss',\n});\n\nregisterMessagingComponent(Discuss);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nconst { Component } = owl;\n\nexport class DiscussMobileMailboxSelection extends Component {\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @returns {mail.thread[]}\n     */\n    get orderedMailboxes() {\n        if (!this.messaging) {\n            return [];\n        }\n        return this.messaging.models['mail.thread']\n            .all(thread => thread.isPinned && thread.model === 'mail.box')\n            .sort((mailbox1, mailbox2) => {\n                if (mailbox1 === this.messaging.inbox) {\n                    return -1;\n                }\n                if (mailbox2 === this.messaging.inbox) {\n                    return 1;\n                }\n                if (mailbox1 === this.messaging.starred) {\n                    return -1;\n                }\n                if (mailbox2 === this.messaging.starred) {\n                    return 1;\n                }\n                const mailbox1Name = mailbox1.displayName;\n                const mailbox2Name = mailbox2.displayName;\n                mailbox1Name < mailbox2Name ? -1 : 1;\n            });\n    }\n\n    /**\n     * @returns {mail.discuss}\n     */\n    get discuss() {\n        return this.messaging && this.messaging.discuss;\n    }\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Called when clicking on a mailbox selection item.\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClick(ev) {\n        const { mailboxLocalId } = ev.currentTarget.dataset;\n        const mailbox = this.messaging.models['mail.thread'].get(mailboxLocalId);\n        if (!mailbox) {\n            return;\n        }\n        mailbox.open();\n    }\n\n}\n\nObject.assign(DiscussMobileMailboxSelection, {\n    props: {},\n    template: 'mail.DiscussMobileMailboxSelection',\n});\n\nregisterMessagingComponent(DiscussMobileMailboxSelection);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nconst { Component } = owl;\n\nclass DiscussPublicView extends Component {\n\n    /**\n     * @returns {mail.discuss_public_view}\n     */\n     get discussPublicView() {\n        return this.messaging && this.messaging.models['mail.discuss_public_view'].get(this.props.localId);\n    }\n}\n\nObject.assign(DiscussPublicView, {\n    props: { localId: String },\n    template: 'mail.DiscussPublicView',\n});\n\nregisterMessagingComponent(DiscussPublicView);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\nimport { useRefToModel } from '@mail/component_hooks/use_ref_to_model/use_ref_to_model';\nimport { useUpdate } from '@mail/component_hooks/use_update/use_update';\n\nconst { Component } = owl;\nconst { useRef } = owl.hooks;\n\nexport class DiscussSidebar extends Component {\n\n    /**\n     * @override\n     */\n    constructor(...args) {\n        super(...args);\n        useUpdate({ func: () => this._update() });\n        useRefToModel({ fieldName: 'startAMeetingButtonRef', modelName: 'mail.discuss', propNameAsRecordLocalId: 'localId', refName: 'startAMeetingButton' });\n        /**\n         * Reference of the quick search input. Useful to filter channels and\n         * chats based on this input content.\n         */\n        this._quickSearchInputRef = useRef('quickSearchInput');\n    }\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @returns {mail.discuss}\n     */\n    get discuss() {\n        return this.messaging && this.messaging.models['mail.discuss'].get(this.props.localId);\n    }\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     */\n    _update() {\n        if (!this.discuss) {\n            return;\n        }\n        if (this._quickSearchInputRef.el) {\n            this._quickSearchInputRef.el.value = this.discuss.sidebarQuickSearchValue;\n        }\n    }\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {KeyboardEvent} ev\n     */\n    _onInputQuickSearch(ev) {\n        ev.stopPropagation();\n        this.discuss.onInputQuickSearch(this._quickSearchInputRef.el.value);\n    }\n\n}\n\nObject.assign(DiscussSidebar, {\n    props: {\n        localId: String\n    },\n    template: 'mail.DiscussSidebar',\n});\n\nregisterMessagingComponent(DiscussSidebar);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nconst { Component } = owl;\n\nexport class DiscussSidebarCategory extends Component {\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @returns {mail.discuss_sidebar_category}\n     */\n    get category() {\n        return this.messaging.models['mail.discuss_sidebar_category'].get(this.props.categoryLocalId);\n    }\n}\n\nObject.assign(DiscussSidebarCategory, {\n    props: {\n        categoryLocalId: String,\n    },\n    template: 'mail.DiscussSidebarCategory',\n});\n\nregisterMessagingComponent(DiscussSidebarCategory);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nconst { Component } = owl;\n\nexport class DiscussSidebarCategoryItem extends Component {\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @returns {mail.discuss_sidebar_category_item}\n     */\n    get categoryItem() {\n        return this.messaging.models['mail.discuss_sidebar_category_item'].get(this.props.categoryItemLocalId);\n    }\n}\n\nObject.assign(DiscussSidebarCategoryItem, {\n    props: {\n        categoryItemLocalId: String,\n    },\n    template: 'mail.DiscussSidebarCategoryItem',\n});\n\nregisterMessagingComponent(DiscussSidebarCategoryItem);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nconst { Component } = owl;\n\nexport class DiscussSidebarMailbox extends Component {\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @returns {mail.thread}\n     */\n    get mailbox() {\n        return this.messaging.models['mail.thread'].get(this.props.threadLocalId);\n    }\n\n}\n\nObject.assign(DiscussSidebarMailbox, {\n    props: {\n        threadLocalId: String,\n    },\n    template: 'mail.DiscussSidebarMailbox',\n});\n\nregisterMessagingComponent(DiscussSidebarMailbox);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nconst { Component, useState } = owl;\n\nexport class DropZone extends Component {\n\n    /**\n     * @override\n     */\n    constructor(...args) {\n        super(...args);\n        this.state = useState({\n            /**\n             * Determine whether the user is dragging files over the dropzone.\n             * Useful to provide visual feedback in that case.\n             */\n            isDraggingInside: false,\n        });\n        /**\n         * Counts how many drag enter/leave happened on self and children. This\n         * ensures the drop effect stays active when dragging over a child.\n         */\n        this._dragCount = 0;\n    }\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Returns whether the given node is self or a children of self.\n     *\n     * @param {Node} node\n     * @returns {boolean}\n     */\n    contains(node) {\n        return Boolean(this.el && this.el.contains(node));\n    }\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Making sure that dragging content is external files.\n     * Ignoring other content dragging like text.\n     *\n     * @private\n     * @param {DataTransfer} dataTransfer\n     * @returns {boolean}\n     */\n    _isDragSourceExternalFile(dataTransfer) {\n        const dragDataType = dataTransfer.types;\n        if (dragDataType.constructor === window.DOMStringList) {\n            return dragDataType.contains('Files');\n        }\n        if (dragDataType.constructor === Array) {\n            return dragDataType.includes('Files');\n        }\n        return false;\n    }\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Shows a visual drop effect when dragging inside the dropzone.\n     *\n     * @private\n     * @param {DragEvent} ev\n     */\n    _onDragenter(ev) {\n        ev.preventDefault();\n        if (this._dragCount === 0) {\n            this.state.isDraggingInside = true;\n        }\n        this._dragCount++;\n    }\n\n    /**\n     * Hides the visual drop effect when dragging outside the dropzone.\n     *\n     * @private\n     * @param {DragEvent} ev\n     */\n    _onDragleave(ev) {\n        this._dragCount--;\n        if (this._dragCount === 0) {\n            this.state.isDraggingInside = false;\n        }\n    }\n\n    /**\n     * Prevents default (from the template) in order to receive the drop event.\n     * The drop effect cursor works only when set on dragover.\n     *\n     * @private\n     * @param {DragEvent} ev\n     */\n    _onDragover(ev) {\n        ev.preventDefault();\n        ev.dataTransfer.dropEffect = 'copy';\n    }\n\n    /**\n     * Triggers the `o-dropzone-files-dropped` event when new files are dropped\n     * on the dropzone, and then removes the visual drop effect.\n     *\n     * The parents should handle this event to process the files as they wish,\n     * such as uploading them.\n     *\n     * @private\n     * @param {DragEvent} ev\n     */\n    _onDrop(ev) {\n        ev.preventDefault();\n        if (this._isDragSourceExternalFile(ev.dataTransfer)) {\n            this.trigger('o-dropzone-files-dropped', {\n                files: ev.dataTransfer.files,\n            });\n        }\n        this.state.isDraggingInside = false;\n    }\n\n}\n\nObject.assign(DropZone, {\n    props: {},\n    template: 'mail.DropZone',\n});\n\nregisterMessagingComponent(DropZone);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\nimport { markEventHandled } from '@mail/utils/utils';\n\nconst { Component } = owl;\n\nexport class EditableText extends Component {\n\n    mounted() {\n        this.el.focus();\n        this.el.setSelectionRange(0, (this.el.value && this.el.value.length) || 0);\n    }\n\n    willUnmount() {\n        this.trigger('o-cancel');\n    }\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onBlur(ev) {\n        this.trigger('o-cancel');\n    }\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClick(ev) {\n        markEventHandled(ev, 'EditableText.click');\n        this.trigger('o-clicked');\n    }\n\n    /**\n     * @private\n     * @param {KeyboardEvent} ev\n     */\n    _onKeydown(ev) {\n        switch (ev.key) {\n            case 'Enter':\n                this._onKeydownEnter(ev);\n                break;\n            case 'Escape':\n                this.trigger('o-cancel');\n                break;\n        }\n    }\n\n    /**\n     * @private\n     * @param {KeyboardEvent} ev\n     */\n    _onKeydownEnter(ev) {\n        if (!this.el) {\n            return;\n        }\n        const value = this.el.value;\n        const newName = value || this.props.placeholder;\n        if (this.props.value !== newName) {\n            this.trigger('o-validate', { newName });\n        } else {\n            this.trigger('o-cancel');\n        }\n    }\n\n}\n\nObject.assign(EditableText, {\n    defaultProps: {\n        placeholder: \"\",\n        value: \"\",\n    },\n    props: {\n        placeholder: String,\n        value: String,\n    },\n    template: 'mail.EditableText',\n});\n\nregisterMessagingComponent(EditableText);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\nimport { useUpdate } from '@mail/component_hooks/use_update/use_update';\nimport emojis from '@mail/js/emojis';\n\nconst { Component } = owl;\n\nexport class EmojisPopover extends Component {\n\n    /**\n     * @param {...any} args\n     */\n    constructor(...args) {\n        super(...args);\n        this.emojis = emojis;\n        useUpdate({ func: () => this._update() });\n    }\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     */\n    _update() {\n        this.trigger('o-popover-compute');\n    }\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    close() {\n        this.trigger('o-popover-close');\n    }\n\n    /**\n     * Returns whether the given node is self or a children of self.\n     *\n     * @param {Node} node\n     * @returns {boolean}\n     */\n    contains(node) {\n        return Boolean(this.el && this.el.contains(node));\n    }\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickEmoji(ev) {\n        this.close();\n        this.trigger('o-emoji-selection', {\n            unicode: ev.currentTarget.dataset.unicode,\n        });\n    }\n\n}\n\nObject.assign(EmojisPopover, {\n    props: {},\n    template: 'mail.EmojisPopover',\n});\n\nregisterMessagingComponent(EmojisPopover);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\nimport { replace } from '@mail/model/model_field_command';\n\nimport core from 'web.core';\n\nconst { Component } = owl;\nconst { useRef } = owl.hooks;\n\nconst geAttachmentNextTemporaryId = (function () {\n    let tmpId = 0;\n    return () => {\n        tmpId -= 1;\n        return tmpId;\n    };\n})();\n\nexport class FileUploader extends Component {\n\n    /**\n     * @override\n     */\n    constructor(...args) {\n        super(...args);\n        this._fileInputRef = useRef('fileInput');\n        this._fileUploadId = _.uniqueId('o_FileUploader_fileupload');\n    }\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    get composerView() {\n        return this.messaging.models['mail.composer_view'].get(this.props.composerViewLocalId);\n    }\n\n    /**\n     * @param {FileList|Array} files\n     * @returns {Promise}\n     */\n    async uploadFiles(files) {\n        await this._performUpload({\n            composer: this.composerView && this.composerView.composer,\n            files,\n            thread: this.thread,\n        });\n        this._fileInputRef.el.value = '';\n    }\n\n    openBrowserFileUploader() {\n        this._fileInputRef.el.click();\n    }\n\n    get thread() {\n        return this.messaging.models['mail.thread'].get(this.props.threadLocalId);\n    }\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {Object} param0\n     * @param {mail.composer} param0.composer\n     * @param {File} param0.file\n     * @param {mail.thread} param0.thread\n     * @returns {FormData}\n     */\n    _createFormData({ composer, file, thread }) {\n        const formData = new window.FormData();\n        formData.append('csrf_token', core.csrf_token);\n        formData.append('is_pending', Boolean(composer));\n        formData.append('thread_id', thread && thread.id);\n        formData.append('thread_model', thread && thread.model);\n        formData.append('ufile', file, file.name);\n        return formData;\n    }\n\n    /**\n     * @private\n     * @param {Object} param0\n     * @param {mail.composer} param0.composer\n     * @param {FileList|Array} param0.files\n     * @param {mail.thread} param0.thread\n     * @returns {Promise}\n     */\n    async _performUpload({ composer, files, thread }) {\n        const uploadingAttachments = new Map();\n        for (const file of files) {\n            uploadingAttachments.set(file, this.messaging.models['mail.attachment'].insert({\n                composer: composer && replace(composer),\n                filename: file.name,\n                id: geAttachmentNextTemporaryId(),\n                isUploading: true,\n                mimetype: file.type,\n                name: file.name,\n                originThread: (!composer && thread) ? replace(thread) : undefined,\n            }));\n        }\n        for (const file of files) {\n            const uploadingAttachment = uploadingAttachments.get(file);\n            if (!uploadingAttachment.exists()) {\n                // This happens when a pending attachment is being deleted by user before upload.\n                continue;\n            }\n            if ((composer && !composer.exists()) || (thread && !thread.exists())) {\n                return;\n            }\n            try {\n                const response = await this.env.browser.fetch('/mail/attachment/upload', {\n                    method: 'POST',\n                    body: this._createFormData({ composer, file, thread }),\n                    signal: uploadingAttachment.uploadingAbortController.signal,\n                });\n                const attachmentData = await response.json();\n                if (uploadingAttachment.exists()) {\n                    uploadingAttachment.delete();\n                }\n                if ((composer && !composer.exists()) || (thread && !thread.exists())) {\n                    return;\n                }\n                this._onAttachmentUploaded({ attachmentData, composer, thread });\n            } catch (e) {\n                if (e.name !== 'AbortError') {\n                    throw e;\n                }\n            }\n        }\n    }\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {Object} param0\n     * @param {Object} attachmentData\n     * @param {mail.composer} param0.composer\n     * @param {mail.thread} param0.thread\n     */\n    _onAttachmentUploaded({ attachmentData, composer, thread }) {\n        if (attachmentData.error || !attachmentData.id) {\n            this.env.services['notification'].notify({\n                type: 'danger',\n                message: attachmentData.error,\n            });\n            return;\n        }\n        const attachment = this.messaging.models['mail.attachment'].insert({\n            composer: composer && replace(composer),\n            originThread: (!composer && thread) ? replace(thread) : undefined,\n            ...attachmentData,\n        });\n        this.trigger('o-attachment-created', { attachment });\n    }\n\n    /**\n     * Called when there are changes in the file input.\n     *\n     * @private\n     * @param {Event} ev\n     * @param {EventTarget} ev.target\n     * @param {FileList|Array} ev.target.files\n     */\n    async _onChangeAttachment(ev) {\n        await this.uploadFiles(ev.target.files);\n    }\n\n}\n\nObject.assign(FileUploader, {\n    props: {\n        composerViewLocalId: {\n            type: String,\n            optional: true,\n        },\n        threadLocalId: {\n            type: String,\n            optional: true,\n        },\n    },\n    template: 'mail.FileUploader',\n});\n\nregisterMessagingComponent(FileUploader);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nconst { Component } = owl;\nconst { useState } = owl.hooks;\n\nexport class FollowButton extends Component {\n    /**\n     * @override\n     */\n    constructor(...args) {\n        super(...args);\n        this.state = useState({\n            /**\n             * Determine whether the unfollow button is highlighted or not.\n             */\n            isUnfollowButtonHighlighted: false,\n        });\n    }\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @return {mail.thread}\n     */\n    get thread() {\n        return this.messaging && this.messaging.models['mail.thread'].get(this.props.threadLocalId);\n    }\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickFollow(ev) {\n        this.thread.follow();\n    }\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    async _onClickUnfollow(ev) {\n        await this.thread.unfollow();\n        this.trigger('reload', { fieldNames: ['message_follower_ids'], keepChanges: true });\n    }\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onMouseLeaveUnfollow(ev) {\n        this.state.isUnfollowButtonHighlighted = false;\n    }\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onMouseEnterUnfollow(ev) {\n        this.state.isUnfollowButtonHighlighted = true;\n    }\n\n}\n\nObject.assign(FollowButton, {\n    defaultProps: {\n        isDisabled: false,\n    },\n    props: {\n        isDisabled: Boolean,\n        threadLocalId: String,\n    },\n    template: 'mail.FollowButton',\n});\n\nregisterMessagingComponent(FollowButton);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nimport { markEventHandled } from '@mail/utils/utils';\nconst { Component } = owl;\n\nexport class Follower extends Component {\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @returns {mail.follower}\n     */\n    get follower() {\n        return this.messaging && this.messaging.models['mail.follower'].get(this.props.followerLocalId);\n    }\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickDetails(ev) {\n        ev.preventDefault();\n        ev.stopPropagation();\n        this.follower.openProfile();\n    }\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickEdit(ev) {\n        ev.preventDefault();\n        this.follower.showSubtypes();\n    }\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    async _onClickRemove(ev) {\n        markEventHandled(ev, 'Follower.clickRemove');\n        await this.follower.remove();\n        this.trigger('reload', { fieldNames:['message_follower_ids'], keepChanges: true });\n        this.trigger('o-hide-follower-list-menu');\n    }\n\n}\n\nObject.assign(Follower, {\n    props: {\n        followerLocalId: String,\n    },\n    template: 'mail.Follower',\n});\n\nregisterMessagingComponent(Follower);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\nimport { isEventHandled } from '@mail/utils/utils';\n\nconst { Component } = owl;\nconst { useRef, useState } = owl.hooks;\n\nexport class FollowerListMenu extends Component {\n    /**\n     * @override\n     */\n    constructor(...args) {\n        super(...args);\n        this.state = useState({\n            /**\n             * Determine whether the dropdown is open or not.\n             */\n            isDropdownOpen: false,\n        });\n        this._dropdownRef = useRef('dropdown');\n        this._onClickCaptureGlobal = this._onClickCaptureGlobal.bind(this);\n    }\n\n    mounted() {\n        document.addEventListener('click', this._onClickCaptureGlobal, true);\n    }\n\n    willUnmount() {\n        document.removeEventListener('click', this._onClickCaptureGlobal, true);\n    }\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @return {mail.thread}\n     */\n    get thread() {\n        return this.messaging && this.messaging.models['mail.thread'].get(this.props.threadLocalId);\n    }\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     */\n    _hide() {\n        this.state.isDropdownOpen = false;\n    }\n\n    /**\n     * @private\n     * @param {KeyboardEvent} ev\n     */\n    _onKeydown(ev) {\n        ev.stopPropagation();\n        switch (ev.key) {\n            case 'Escape':\n                ev.preventDefault();\n                this._hide();\n                break;\n        }\n    }\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickAddFollowers(ev) {\n        ev.preventDefault();\n        this._hide();\n        this.thread.promptAddPartnerFollower();\n    }\n\n    /**\n     * Close the dropdown when clicking outside of it.\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickCaptureGlobal(ev) {\n        // since dropdown is conditionally shown based on state, dropdownRef can be null\n        if (this._dropdownRef.el && !this._dropdownRef.el.contains(ev.target)) {\n            this._hide();\n        }\n    }\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickFollowersButton(ev) {\n        this.state.isDropdownOpen = !this.state.isDropdownOpen;\n    }\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickFollower(ev) {\n        if (isEventHandled(ev, 'Follower.clickRemove')) {\n            return;\n        }\n        this._hide();\n    }\n}\n\nObject.assign(FollowerListMenu, {\n    defaultProps: {\n        isDisabled: false,\n    },\n    props: {\n        isDisabled: Boolean,\n        threadLocalId: String,\n    },\n    template: 'mail.FollowerListMenu',\n});\n\nregisterMessagingComponent(FollowerListMenu);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nconst { Component } = owl;\n\nexport class FollowerSubtype extends Component {\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @returns {mail.follower|undefined}\n     */\n    get follower() {\n        return this.messaging && this.messaging.models['mail.follower'].get(this.props.followerLocalId);\n    }\n\n    /**\n     * @returns {mail.follower_subtype}\n     */\n    get followerSubtype() {\n        return this.messaging && this.messaging.models['mail.follower_subtype'].get(this.props.followerSubtypeLocalId);\n    }\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Called when clicking on cancel button.\n     *\n     * @private\n     * @param {Event} ev\n     */\n    _onChangeCheckbox(ev) {\n        if (ev.target.checked) {\n            this.follower.selectSubtype(this.followerSubtype);\n        } else {\n            this.follower.unselectSubtype(this.followerSubtype);\n        }\n    }\n\n}\n\nObject.assign(FollowerSubtype, {\n    props: {\n        followerLocalId: String,\n        followerSubtypeLocalId: String,\n    },\n    template: 'mail.FollowerSubtype',\n});\n\nregisterMessagingComponent(FollowerSubtype);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nconst { Component } = owl;\n\nexport class FollowerSubtypeList extends Component {\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @returns {mail.follower_subtype_list}\n     */\n    get followerSubtypeList() {\n        return this.messaging && this.messaging.models['mail.follower_subtype_list'].get(this.props.localId);\n    }\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Called when clicking on cancel button.\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickCancel(ev) {\n        this.followerSubtypeList.follower.closeSubtypes();\n    }\n\n    /**\n     * Called when clicking on apply button.\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickApply(ev) {\n        this.followerSubtypeList.follower.updateSubtypes();\n    }\n\n}\n\nObject.assign(FollowerSubtypeList, {\n    props: {\n        localId: String,\n    },\n    template: 'mail.FollowerSubtypeList',\n});\n\nregisterMessagingComponent(FollowerSubtypeList);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nconst { Component } = owl;\n\nexport class MailTemplate extends Component {\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @returns {mail.activity}\n     */\n    get activity() {\n        return this.messaging && this.messaging.models['mail.activity'].get(this.props.activityLocalId);\n    }\n\n    /**\n     * @returns {mail.mail_template}\n     */\n    get mailTemplate() {\n        return this.messaging && this.messaging.models['mail.mail_template'].get(this.props.mailTemplateLocalId);\n    }\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickPreview(ev) {\n        ev.stopPropagation();\n        ev.preventDefault();\n        this.mailTemplate.preview(this.activity);\n    }\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickSend(ev) {\n        ev.stopPropagation();\n        ev.preventDefault();\n        this.mailTemplate.send(this.activity);\n    }\n\n}\n\nObject.assign(MailTemplate, {\n    props: {\n        activityLocalId: String,\n        mailTemplateLocalId: String,\n    },\n    template: 'mail.MailTemplate',\n});\n\nregisterMessagingComponent(MailTemplate);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\nimport { useRefToModel } from '@mail/component_hooks/use_ref_to_model/use_ref_to_model';\n\nexport class MediaPreview extends owl.Component {\n\n    /**\n     * @override\n     */\n    setup() {\n        super.setup();\n        useRefToModel({ fieldName: 'audioRef', modelName: 'mail.media_preview', propNameAsRecordLocalId: 'localId', refName: 'audio' });\n        useRefToModel({ fieldName: 'videoRef', modelName: 'mail.media_preview', propNameAsRecordLocalId: 'localId', refName: 'video' });\n    }\n\n    /**\n     * @returns {mail.media_preview}\n     */\n    get mediaPreview() {\n        return this.messaging && this.messaging.models['mail.media_preview'].get(this.props.localId);\n    }\n}\n\nObject.assign(MediaPreview, {\n    props: { localId: String },\n    template: 'mail.MediaPreview',\n});\n\nregisterMessagingComponent(MediaPreview);\n", "/** @odoo-module **/\n\nimport { useComponentToModel } from '@mail/component_hooks/use_component_to_model/use_component_to_model';\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\nimport { useUpdate } from '@mail/component_hooks/use_update/use_update';\nimport { isEventHandled, markEventHandled } from '@mail/utils/utils';\n\nimport { _lt } from 'web.core';\nimport { format } from 'web.field_utils';\nimport { getLangDatetimeFormat } from 'web.time';\n\nconst { Component, useState } = owl;\nconst { useRef } = owl.hooks;\n\nconst READ_MORE = _lt(\"read more\");\nconst READ_LESS = _lt(\"read less\");\n\nexport class Message extends Component {\n\n    /**\n     * @override\n     */\n    constructor(...args) {\n        super(...args);\n        this.state = useState({\n            /**\n             * Determine whether the message is hovered. When message is hovered\n             * it displays message actions.\n             */\n             isHovered: false,\n            /**\n             * Determine whether the message is clicked. When message is in\n             * clicked state, it keeps displaying actions even if not hovered.\n             */\n            isClicked: false,\n        });\n        useUpdate({ func: () => this._update() });\n        /**\n         * Value of the last rendered prettyBody. Useful to compare to new value\n         * to decide if it has to be updated.\n         */\n        this._lastPrettyBody;\n        /**\n         * Reference to element containing the prettyBody. Useful to be able to\n         * replace prettyBody with new value in JS (which is faster than t-raw).\n         */\n        this._prettyBodyRef = useRef('prettyBody');\n        /**\n         * Reference to the content of the message.\n         */\n        this._contentRef = useRef('content');\n        /**\n         * To get checkbox state.\n         */\n        this._checkboxRef = useRef('checkbox');\n        /**\n         * Id of setInterval used to auto-update time elapsed of message at\n         * regular time.\n         */\n        this._intervalId = undefined;\n        /**\n         * States the index of the last \"read more\" that was inserted.\n         * Useful to remember the state for each \"read more\" even if their DOM\n         * is re-rendered.\n         */\n        this._lastReadMoreIndex = 0;\n        /**\n         * Determines whether each \"read more\" is opened or closed. The keys are\n         * index, which is determined by their order of appearance in the DOM.\n         * If body changes so that \"read more\" count is different, their default\n         * value will be \"wrong\" at the next render but this is an acceptable\n         * limitation. It's more important to save the state correctly in a\n         * typical non-changing situation.\n         */\n        this._isReadMoreByIndex = new Map();\n        this._constructor();\n    }\n\n    /**\n     * Allows patching constructor.\n     */\n    _constructor() {}\n\n    /**\n     * @override\n     */\n    setup() {\n        super.setup();\n        useComponentToModel({ fieldName: 'component', modelName: 'mail.message_view', propNameAsRecordLocalId: 'messageViewLocalId' });\n    }\n\n    willUnmount() {\n        clearInterval(this._intervalId);\n    }\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @returns {string}\n     */\n    get avatar() {\n        if (this.messageView.message.author && (!this.messageView.message.originThread || this.messageView.message.originThread.model !== 'mail.channel')) {\n            // TODO FIXME for public user this might not be accessible. task-2223236\n            // we should probably use the correspondig attachment id + access token\n            // or create a dedicated route to get message image, checking the access right of the message\n            return this.messageView.message.author.avatarUrl;\n        } else if (this.messageView.message.author && this.messageView.message.originThread && this.messageView.message.originThread.model === 'mail.channel') {\n            return `/mail/channel/${this.messageView.message.originThread.id}/partner/${this.messageView.message.author.id}/avatar_128`;\n        } else if (this.messageView.message.guestAuthor && (!this.messageView.message.originThread || this.messageView.message.originThread.model !== 'mail.channel')) {\n            return this.messageView.message.guestAuthor.avatarUrl;\n        } else if (this.messageView.message.guestAuthor && this.messageView.message.originThread && this.messageView.message.originThread.model === 'mail.channel') {\n            return `/mail/channel/${this.messageView.message.originThread.id}/guest/${this.messageView.message.guestAuthor.id}/avatar_128?unique=${this.messageView.message.guestAuthor.name}`;\n        } else if (this.messageView.message.message_type === 'email') {\n            return '/mail/static/src/img/email_icon.png';\n        }\n        return '/mail/static/src/img/smiley/avatar.jpg';\n    }\n\n    /**\n     * Get the date time of the message at current user locale time.\n     *\n     * @returns {string}\n     */\n    get datetime() {\n        return this.messageView.message.date.format(getLangDatetimeFormat());\n    }\n\n    /**\n     * Determines whether author open chat feature is enabled on message.\n     *\n     * @returns {boolean}\n     */\n    get hasAuthorOpenChat() {\n        if (this.messaging.currentGuest) {\n            return false;\n        }\n        if (!this.messageView.message.author) {\n            return false;\n        }\n        if (\n            this.threadView &&\n            this.threadView.thread &&\n            this.threadView.thread.correspondent === this.messageView.message.author\n        ) {\n            return false;\n        }\n        return true;\n    }\n\n    /**\n     * Whether the message is \"active\", ie: hovered or clicked, and should\n     * display additional things (date in sidebar, message actions, etc.)\n     *\n     * @returns {boolean}\n     */\n    get isActive() {\n        return Boolean(\n            this.state.isHovered ||\n            this.state.isClicked ||\n            (\n                this.messageView &&\n                this.messageView.messageActionList &&\n                (\n                    this.messageView.messageActionList.isReactionPopoverOpened ||\n                    this.messageView.messageActionList.showDeleteConfirm\n                )\n            )\n        );\n    }\n\n    /**\n     * Tell whether the bottom of this message is visible or not.\n     *\n     * @param {Object} param0\n     * @param {integer} [offset=0]\n     * @returns {boolean}\n     */\n    isBottomVisible({ offset = 0 } = {}) {\n        if (!this.el) {\n            return false;\n        }\n        const elRect = this.el.getBoundingClientRect();\n        if (!this.el.parentNode) {\n            return false;\n        }\n        const parentRect = this.el.parentNode.getBoundingClientRect();\n        // bottom with (double) 10px offset\n        return (\n            elRect.bottom < parentRect.bottom + offset &&\n            parentRect.top < elRect.bottom + offset\n        );\n    }\n\n    /**\n     * Tell whether the message is partially visible on browser window or not.\n     *\n     * @returns {boolean}\n     */\n    isPartiallyVisible() {\n        if (!this.el) {\n            return false;\n        }\n        const elRect = this.el.getBoundingClientRect();\n        if (!this.el.parentNode) {\n            return false;\n        }\n        const parentRect = this.el.parentNode.getBoundingClientRect();\n        // intersection with 5px offset\n        return (\n            elRect.top < parentRect.bottom + 5 &&\n            parentRect.top < elRect.bottom + 5\n        );\n    }\n\n    /**\n     * Tell whether the message is selected in the current thread viewer.\n     *\n     * @returns {boolean}\n     */\n    get isSelected() {\n        return Boolean(\n            this.threadView &&\n            this.messageView &&\n            this.threadView.replyingToMessageView === this.messageView\n        );\n    }\n\n    /**\n     * @returns {mail.message_view}\n     */\n    get messageView() {\n        return this.messaging && this.messaging.models['mail.message_view'].get(this.props.messageViewLocalId);\n    }\n    /**\n     * @returns {string}\n     */\n    get OPEN_CHAT() {\n        return this.env._t(\"Open chat\");\n    }\n\n    /**\n     * Make this message viewable in its enclosing scroll environment (usually\n     * message list).\n     *\n     * @param {Object} [param0={}]\n     * @param {string} [param0.behavior='auto']\n     * @param {string} [param0.block='end']\n     * @returns {Promise}\n     */\n    async scrollIntoView({ behavior = 'auto', block = 'end' } = {}) {\n        this.el.scrollIntoView({\n            behavior,\n            block,\n            inline: 'nearest',\n        });\n        if (behavior === 'smooth') {\n            return new Promise(resolve => setTimeout(resolve, 500));\n        } else {\n            return Promise.resolve();\n        }\n    }\n\n    /**\n     * Get the shorttime format of the message date.\n     *\n     * @returns {string}\n     */\n    get shortTime() {\n        return this.messageView.message.date.format('hh:mm');\n    }\n\n    /**\n     * @returns {mail.thread_view}\n     */\n    get threadView() {\n        return this.messageView && this.messageView.threadView;\n    }\n\n    /**\n     * @returns {Object}\n     */\n    get trackingValues() {\n        return this.messageView.message.tracking_value_ids.map(trackingValue => {\n            const value = Object.assign({}, trackingValue);\n            value.changed_field = _.str.sprintf(this.env._t(\"%s:\"), value.changed_field);\n            /**\n             * Maps tracked field type to a JS formatter. Tracking values are\n             * not always stored in the same field type as their origin type.\n             * Field types that are not listed here are not supported by\n             * tracking in Python. Also see `create_tracking_values` in Python.\n             */\n            switch (value.field_type) {\n                case 'boolean':\n                    value.old_value = format.boolean(value.old_value, undefined, { forceString: true });\n                    value.new_value = format.boolean(value.new_value, undefined, { forceString: true });\n                    break;\n                /**\n                 * many2one formatter exists but is expecting id/name_get or data\n                 * object but only the target record name is known in this context.\n                 *\n                 * Selection formatter exists but requires knowing all\n                 * possibilities and they are not given in this context.\n                 */\n                case 'char':\n                case 'many2one':\n                case 'selection':\n                    value.old_value = format.char(value.old_value);\n                    value.new_value = format.char(value.new_value);\n                    break;\n                case 'date':\n                    if (value.old_value) {\n                        value.old_value = moment.utc(value.old_value);\n                    }\n                    if (value.new_value) {\n                        value.new_value = moment.utc(value.new_value);\n                    }\n                    value.old_value = format.date(value.old_value);\n                    value.new_value = format.date(value.new_value);\n                    break;\n                case 'datetime':\n                    if (value.old_value) {\n                        value.old_value = moment.utc(value.old_value);\n                    }\n                    if (value.new_value) {\n                        value.new_value = moment.utc(value.new_value);\n                    }\n                    value.old_value = format.datetime(value.old_value);\n                    value.new_value = format.datetime(value.new_value);\n                    break;\n                case 'float':\n                    value.old_value = format.float(value.old_value);\n                    value.new_value = format.float(value.new_value);\n                    break;\n                case 'integer':\n                    value.old_value = format.integer(value.old_value);\n                    value.new_value = format.integer(value.new_value);\n                    break;\n                case 'monetary':\n                    value.old_value = format.monetary(value.old_value, undefined, {\n                        currency: value.currency_id\n                            ? this.env.session.currencies[value.currency_id]\n                            : undefined,\n                        forceString: true,\n                    });\n                    value.new_value = format.monetary(value.new_value, undefined, {\n                        currency: value.currency_id\n                            ? this.env.session.currencies[value.currency_id]\n                            : undefined,\n                        forceString: true,\n                    });\n                    break;\n                case 'text':\n                    value.old_value = format.text(value.old_value);\n                    value.new_value = format.text(value.new_value);\n                    break;\n            }\n            return value;\n        });\n    }\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Modifies the message to add the 'read more/read less' functionality\n     * All element nodes with 'data-o-mail-quote' attribute are concerned.\n     * All text nodes after a ``#stopSpelling`` element are concerned.\n     * Those text nodes need to be wrapped in a span (toggle functionality).\n     * All consecutive elements are joined in one 'read more/read less'.\n     *\n     * FIXME This method should be rewritten (task-2308951)\n     *\n     * @private\n     * @param {jQuery} $element\n     */\n    _insertReadMoreLess($element) {\n        const groups = [];\n        let readMoreNodes;\n\n        // nodeType 1: element_node\n        // nodeType 3: text_node\n        const $children = $element.contents()\n            .filter((index, content) =>\n                content.nodeType === 1 || (content.nodeType === 3 && content.nodeValue.trim())\n            );\n\n        for (const child of $children) {\n            let $child = $(child);\n\n            // Hide Text nodes if \"stopSpelling\"\n            if (\n                child.nodeType === 3 &&\n                $child.prevAll('[id*=\"stopSpelling\"]').length > 0\n            ) {\n                // Convert Text nodes to Element nodes\n                $child = $('<span>', {\n                    text: child.textContent,\n                    'data-o-mail-quote': '1',\n                });\n                child.parentNode.replaceChild($child[0], child);\n            }\n\n            // Create array for each 'read more' with nodes to toggle\n            if (\n                $child.attr('data-o-mail-quote') ||\n                (\n                    $child.get(0).nodeName === 'BR' &&\n                    $child.prev('[data-o-mail-quote=\"1\"]').length > 0\n                )\n            ) {\n                if (!readMoreNodes) {\n                    readMoreNodes = [];\n                    groups.push(readMoreNodes);\n                }\n                $child.hide();\n                readMoreNodes.push($child);\n            } else {\n                readMoreNodes = undefined;\n                this._insertReadMoreLess($child);\n            }\n        }\n\n        for (const group of groups) {\n            const index = this._lastReadMoreIndex++;\n            // Insert link just before the first node\n            const $readMoreLess = $('<a>', {\n                class: 'o_Message_readMoreLess',\n                href: '#',\n                text: READ_MORE,\n            }).insertBefore(group[0]);\n\n            // Toggle All next nodes\n            if (!this._isReadMoreByIndex.has(index)) {\n                this._isReadMoreByIndex.set(index, true);\n            }\n            const updateFromState = () => {\n                const isReadMore = this._isReadMoreByIndex.get(index);\n                for (const $child of group) {\n                    $child.hide();\n                    $child.toggle(!isReadMore);\n                }\n                $readMoreLess.text(isReadMore ? READ_MORE : READ_LESS);\n            };\n            $readMoreLess.click(e => {\n                e.preventDefault();\n                this._isReadMoreByIndex.set(index, !this._isReadMoreByIndex.get(index));\n                updateFromState();\n            });\n            updateFromState();\n        }\n    }\n\n    /**\n     * @private\n     */\n    _update() {\n        if (!this.messageView) {\n            return;\n        }\n        if (this._prettyBodyRef.el && this.messageView.message.prettyBody !== this._lastPrettyBody) {\n            this._prettyBodyRef.el.innerHTML = this.messageView.message.prettyBody;\n            this._lastPrettyBody = this.messageView.message.prettyBody;\n        }\n        if (!this._prettyBodyRef.el) {\n            this._lastPrettyBody = undefined;\n        }\n        // Remove all readmore before if any before reinsert them with _insertReadMoreLess.\n        // This is needed because _insertReadMoreLess is working with direct DOM mutations\n        // which are not sync with Owl.\n        if (this._contentRef.el) {\n            for (const el of [...this._contentRef.el.querySelectorAll(':scope .o_Message_readMoreLess')]) {\n                el.remove();\n            }\n            this._lastReadMoreIndex = 0;\n            this._insertReadMoreLess($(this._contentRef.el));\n            this.messaging.messagingBus.trigger('o-component-message-read-more-less-inserted', {\n                message: this.messageView.message,\n            });\n        }\n        this.messageView.message.refreshDateFromNow();\n        clearInterval(this._intervalId);\n        this._intervalId = setInterval(() => {\n            if (this.messageView) {\n                this.messageView.message.refreshDateFromNow();\n            }\n        }, 60 * 1000);\n    }\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClick(ev) {\n        if (ev.target.closest('.o_channel_redirect')) {\n            this.messaging.openProfile({\n                id: Number(ev.target.dataset.oeId),\n                model: 'mail.channel',\n            });\n            // avoid following dummy href\n            ev.preventDefault();\n            return;\n        }\n        if (ev.target.tagName === 'A') {\n            if (ev.target.dataset.oeId && ev.target.dataset.oeModel) {\n                this.messaging.openProfile({\n                    id: Number(ev.target.dataset.oeId),\n                    model: ev.target.dataset.oeModel,\n                });\n                // avoid following dummy href\n                ev.preventDefault();\n            }\n            return;\n        }\n        if (\n            !isEventHandled(ev, 'Message.ClickAuthorAvatar') &&\n            !isEventHandled(ev, 'Message.ClickAuthorName') &&\n            !isEventHandled(ev, 'Message.ClickFailure') &&\n            !isEventHandled(ev, 'MessageActionList.Click') &&\n            !isEventHandled(ev, 'MessageReactionGroup.Click') &&\n            !isEventHandled(ev, 'MessageInReplyToView.ClickMessageInReplyTo')\n        ) {\n            this.state.isClicked = !this.state.isClicked;\n        }\n    }\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickAuthorAvatar(ev) {\n        markEventHandled(ev, 'Message.ClickAuthorAvatar');\n        if (!this.hasAuthorOpenChat) {\n            return;\n        }\n        this.messageView.message.author.openChat();\n    }\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickAuthorName(ev) {\n        markEventHandled(ev, 'Message.ClickAuthorName');\n        if (!this.messageView.message.author) {\n            return;\n        }\n        this.messageView.message.author.openProfile();\n    }\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickFailure(ev) {\n        markEventHandled(ev, 'Message.ClickFailure');\n        this.messageView.message.openResendAction();\n    }\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickOriginThread(ev) {\n        // avoid following dummy href\n        ev.preventDefault();\n        this.messageView.message.originThread.open();\n    }\n}\n\nObject.assign(Message, {\n    props: {\n        messageViewLocalId: String,\n    },\n    template: 'mail.Message',\n});\n\nregisterMessagingComponent(Message);\n", "/** @odoo-module */\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\nimport { useRefToModel } from '@mail/component_hooks/use_ref_to_model/use_ref_to_model';\n\nconst { Component } = owl;\n\nexport class MessageActionList extends Component {\n\n    setup() {\n        super.setup();\n        useRefToModel({ fieldName: 'reactionPopoverRef', modelName: 'mail.message_action_list', propNameAsRecordLocalId: 'messageActionListLocalId', refName: 'reactionPopover' });\n        this.ADD_A_REACTION = this.env._t(\"Add a Reaction\");\n    }\n\n    /**\n     * @returns {mail.message}\n     */\n    get messageActionList() {\n        return this.messaging && this.messaging.models['mail.message_action_list'].get(this.props.messageActionListLocalId);\n    }\n\n}\n\nObject.assign(MessageActionList, {\n    props: {\n        messageActionListLocalId: String,\n    },\n    template: \"mail.MessageActionList\",\n});\n\nregisterMessagingComponent(MessageActionList);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nconst { Component } = owl;\n\nexport class MessageAuthorPrefix extends Component {\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @returns {mail.message}\n     */\n    get message() {\n        return this.messaging && this.messaging.models['mail.message'].get(this.props.messageLocalId);\n    }\n\n    /**\n     * @returns {mail.thread|undefined}\n     */\n    get thread() {\n        return this.messaging && this.messaging.models['mail.thread'].get(this.props.threadLocalId);\n    }\n\n}\n\nObject.assign(MessageAuthorPrefix, {\n    props: {\n        messageLocalId: String,\n        threadLocalId: {\n            type: String,\n            optional: true,\n        },\n    },\n    template: 'mail.MessageAuthorPrefix',\n});\n\nregisterMessagingComponent(MessageAuthorPrefix);\n", "/** @odoo-module */\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nconst { Component } = owl;\n\nexport class MessageInReplyToView extends Component {\n    /**\n     * @returns {mail.message_in_reply_to_view}\n     */\n    get messageInReplyToView() {\n        return this.messaging && this.messaging.models['mail.message_in_reply_to_view'].get(this.props.messageInReplyToViewLocalId);\n    }\n}\n\nObject.assign(MessageInReplyToView, {\n    props: { messageInReplyToViewLocalId: String },\n    template: \"mail.MessageInReplyToView\",\n});\n\nregisterMessagingComponent(MessageInReplyToView);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\nimport { useRenderedValues } from '@mail/component_hooks/use_rendered_values/use_rendered_values';\nimport { useUpdate } from '@mail/component_hooks/use_update/use_update';\n\nconst { Component } = owl;\nconst { useRef } = owl.hooks;\n\nexport class MessageList extends Component {\n\n    /**\n     * @override\n     */\n    setup() {\n        super.setup();\n        /**\n         * States whether there was at least one programmatic scroll since the\n         * last scroll event was handled (which is particularly async due to\n         * throttled behavior).\n         * Useful to avoid loading more messages or to incorrectly disabling the\n         * auto-scroll feature when the scroll was not made by the user.\n         */\n        this._isLastScrollProgrammatic = false;\n        /**\n         * Reference of the \"load more\" item. Useful to trigger load more\n         * on scroll when it becomes visible.\n         */\n        this._loadMoreRef = useRef('loadMore');\n        /**\n         * Snapshot computed during willPatch, which is used by patched.\n         */\n        this._willPatchSnapshot = undefined;\n        this._onScrollThrottled = _.throttle(this._onScrollThrottled.bind(this), 100);\n        /**\n         * State used by the component at the time of the render. Useful to\n         * properly handle async code.\n         */\n        this._lastRenderedValues = useRenderedValues(() => {\n            const threadView = this.threadView;\n            const thread = threadView && threadView.thread;\n            const threadCache = threadView && threadView.threadCache;\n            return {\n                componentHintList: threadView ? [...threadView.componentHintList] : [],\n                hasAutoScrollOnMessageReceived: threadView && threadView.hasAutoScrollOnMessageReceived,\n                hasScrollAdjust: this.props.hasScrollAdjust,\n                order: threadView && threadView.order,\n                orderedMessages: threadCache ? [...threadCache.orderedMessages] : [],\n                thread,\n                threadCache,\n                threadCacheInitialScrollHeight: threadView && threadView.threadCacheInitialScrollHeight,\n                threadCacheInitialScrollPosition: threadView && threadView.threadCacheInitialScrollPosition,\n                threadView,\n                threadViewer: threadView && threadView.threadViewer,\n            };\n        });\n        // useUpdate must be defined after useRenderedValues, indeed they both\n        // use onMounted/onPatched, and the calls from useRenderedValues must\n        // happen first to save the values before useUpdate accesses them.\n        useUpdate({ func: () => this._update() });\n    }\n\n    willPatch() {\n        this._willPatchSnapshot = {\n            scrollHeight: this._getScrollableElement().scrollHeight,\n            scrollTop: this._getScrollableElement().scrollTop,\n        };\n    }\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Update the scroll position of the message list.\n     * This is not done in patched/mounted hooks because scroll position is\n     * dependent on UI globally. To illustrate, imagine following UI:\n     *\n     * +----------+ < viewport top = scrollable top\n     * | message  |\n     * |   list   |\n     * |          |\n     * +----------+ < scrolltop = viewport bottom = scrollable bottom\n     *\n     * Now if a composer is mounted just below the message list, it is shrinked\n     * and scrolltop is altered as a result:\n     *\n     * +----------+ < viewport top = scrollable top\n     * | message  |\n     * |   list   | < scrolltop = viewport bottom  <-+\n     * |          |                                  |-- dist = composer height\n     * +----------+ < scrollable bottom            <-+\n     * +----------+\n     * | composer |\n     * +----------+\n     *\n     * Because of this, the scroll position must be changed when whole UI\n     * is rendered. To make this simpler, this is done when <ThreadView/>\n     * component is patched. This is acceptable when <ThreadView/> has a\n     * fixed height, which is the case for the moment. task-2358066\n     */\n    adjustFromComponentHints() {\n        const { componentHintList, threadView } = this._lastRenderedValues();\n        for (const hint of componentHintList) {\n            switch (hint.type) {\n                case 'change-of-thread-cache':\n                case 'member-list-hidden':\n                case 'adjust-scroll':\n                    // thread just became visible, the goal is to restore its\n                    // saved position if it exists or scroll to the end\n                    this._adjustScrollFromModel();\n                    break;\n                case 'message-posted':\n                case 'message-received':\n                case 'messages-loaded':\n                case 'new-messages-loaded':\n                    // messages have been added at the end, either scroll to the\n                    // end or keep the current position\n                    this._adjustScrollForExtraMessagesAtTheEnd();\n                    break;\n                case 'more-messages-loaded':\n                    // messages have been added at the start, keep the current\n                    // position\n                    this._adjustScrollForExtraMessagesAtTheStart();\n                    break;\n                case 'highlight-reply':\n                    this._highlightMessageView(hint.data);\n                    break;\n            }\n            if (threadView && threadView.exists()) {\n                threadView.markComponentHintProcessed(hint);\n            }\n        }\n        this._willPatchSnapshot = undefined;\n    }\n\n    /**\n     * @returns {integer}\n     */\n    getScrollHeight() {\n        return this._getScrollableElement().scrollHeight;\n    }\n\n    /**\n     * @returns {integer}\n     */\n    getScrollTop() {\n        return this._getScrollableElement().scrollTop;\n    }\n\n    /**\n     * @param {integer} value\n     */\n    setScrollTop(value) {\n        if (this._getScrollableElement().scrollTop === value) {\n            return;\n        }\n        this._isLastScrollProgrammatic = true;\n        this._getScrollableElement().scrollTop = value;\n    }\n\n    /**\n     * @returns {mail.thread_view}\n     */\n    get threadView() {\n        return this.messaging && this.messaging.models['mail.thread_view'].get(this.props.threadViewLocalId);\n    }\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     */\n    _adjustScrollForExtraMessagesAtTheEnd() {\n        const {\n            hasAutoScrollOnMessageReceived,\n            hasScrollAdjust,\n            order,\n        } = this._lastRenderedValues();\n        if (!this._getScrollableElement() || !hasScrollAdjust) {\n            return;\n        }\n        if (!hasAutoScrollOnMessageReceived) {\n            if (order === 'desc' && this._willPatchSnapshot) {\n                const { scrollHeight, scrollTop } = this._willPatchSnapshot;\n                this.setScrollTop(this._getScrollableElement().scrollHeight - scrollHeight + scrollTop);\n            }\n            return;\n        }\n        this._scrollToEnd();\n    }\n\n    /**\n     * @private\n     */\n    _adjustScrollForExtraMessagesAtTheStart() {\n        const {\n            hasScrollAdjust,\n            order,\n        } = this._lastRenderedValues();\n        if (\n            !this._getScrollableElement() ||\n            !hasScrollAdjust ||\n            !this._willPatchSnapshot ||\n            order === 'desc'\n        ) {\n            return;\n        }\n        const { scrollHeight, scrollTop } = this._willPatchSnapshot;\n        this.setScrollTop(this._getScrollableElement().scrollHeight - scrollHeight + scrollTop);\n    }\n\n    /**\n     * @private\n     */\n    _adjustScrollFromModel() {\n        const {\n            hasScrollAdjust,\n            threadCacheInitialScrollHeight,\n            threadCacheInitialScrollPosition,\n        } = this._lastRenderedValues();\n        if (!this._getScrollableElement() || !hasScrollAdjust) {\n            return;\n        }\n        if (\n            threadCacheInitialScrollPosition !== undefined &&\n            this._getScrollableElement().scrollHeight === threadCacheInitialScrollHeight\n        ) {\n            this.setScrollTop(threadCacheInitialScrollPosition);\n            return;\n        }\n        this._scrollToEnd();\n        return;\n    }\n\n    /**\n     * @private\n     */\n    _checkMostRecentMessageIsVisible() {\n        const { threadView } = this._lastRenderedValues();\n        if (!threadView || !threadView.exists()) {\n            return;\n        }\n        const { length, [length - 1]: lastMessageView } = this.threadView.messageViews;\n        if (lastMessageView && lastMessageView.component && lastMessageView.component.isPartiallyVisible()) {\n            threadView.handleVisibleMessage(lastMessageView.message);\n        }\n    }\n\n    /**\n     * @private\n     * @returns {Element|undefined} Scrollable Element\n     */\n    _getScrollableElement() {\n        if (this.props.getScrollableElement) {\n            return this.props.getScrollableElement();\n        } else {\n            return this.el;\n        }\n    }\n\n    /**\n     * Scrolls to a given message view and briefly highlights it.\n     *\n     * @private\n     * @param {mail.message_view} messageView\n     */\n    _highlightMessageView(messageView) {\n        if (messageView.exists() && messageView.component && messageView.component.el) {\n            messageView.component.el.scrollIntoView({ behavior: 'smooth', block: 'center' });\n            messageView.highlight();\n        }\n    }\n\n    /**\n     * @private\n     * @returns {boolean}\n     */\n    _isLoadMoreVisible() {\n        const loadMore = this._loadMoreRef.el;\n        if (!loadMore) {\n            return false;\n        }\n        const loadMoreRect = loadMore.getBoundingClientRect();\n        const elRect = this._getScrollableElement().getBoundingClientRect();\n        const isInvisible = loadMoreRect.top > elRect.bottom || loadMoreRect.bottom < elRect.top;\n        return !isInvisible;\n    }\n\n    /**\n     * @private\n     */\n    _loadMore() {\n        const { threadCache } = this._lastRenderedValues();\n        if (!threadCache || !threadCache.exists()) {\n            return;\n        }\n        threadCache.loadMoreMessages();\n    }\n\n    /**\n     * Scrolls to the end of the list.\n     *\n     * @private\n     */\n    _scrollToEnd() {\n        const { order } = this._lastRenderedValues();\n        this.setScrollTop(order === 'asc' ? this._getScrollableElement().scrollHeight - this._getScrollableElement().clientHeight : 0);\n    }\n\n    /**\n     * @private\n     */\n    _update() {\n        this._checkMostRecentMessageIsVisible();\n        this.adjustFromComponentHints();\n    }\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickLoadMore(ev) {\n        ev.preventDefault();\n        this._loadMore();\n    }\n\n    /**\n     * @private\n     */\n    _onClickRetryLoadMoreMessages() {\n        if (!this.threadView) {\n            return;\n        }\n        if (!this.threadView.threadCache) {\n            return;\n        }\n        this.threadView.threadCache.update({ hasLoadingFailed: false });\n        this._loadMore();\n    }\n\n    /**\n     * @private\n     * @param {ScrollEvent} ev\n     */\n    onScroll(ev) {\n        this._onScrollThrottled(ev);\n    }\n\n    /**\n     * @private\n     * @param {ScrollEvent} ev\n     */\n    _onScrollThrottled(ev) {\n        const {\n            order,\n            orderedMessages,\n            thread,\n            threadCache,\n            threadView,\n            threadViewer,\n        } = this._lastRenderedValues();\n        if (!this._getScrollableElement()) {\n            // could be unmounted in the meantime (due to throttled behavior)\n            return;\n        }\n        const scrollTop = this._getScrollableElement().scrollTop;\n        this.messaging.messagingBus.trigger('o-component-message-list-scrolled', {\n            orderedMessages,\n            scrollTop,\n            thread,\n            threadViewer,\n        });\n        if (!this._isLastScrollProgrammatic && threadView && threadView.exists()) {\n            // Margin to compensate for inaccurate scrolling to bottom and height\n            // flicker due height change of composer area.\n            const margin = 30;\n            // Automatically scroll to new received messages only when the list is\n            // currently fully scrolled.\n            const hasAutoScrollOnMessageReceived = (order === 'asc')\n                ? scrollTop >= this._getScrollableElement().scrollHeight - this._getScrollableElement().clientHeight - margin\n                : scrollTop <= margin;\n            threadView.update({ hasAutoScrollOnMessageReceived });\n        }\n        if (threadViewer && threadViewer.exists()) {\n            threadViewer.saveThreadCacheScrollHeightAsInitial(this._getScrollableElement().scrollHeight, threadCache);\n            threadViewer.saveThreadCacheScrollPositionsAsInitial(scrollTop, threadCache);\n        }\n        if (!this._isLastScrollProgrammatic && this._isLoadMoreVisible()) {\n            this._loadMore();\n        }\n        this._checkMostRecentMessageIsVisible();\n        this._isLastScrollProgrammatic = false;\n    }\n\n}\n\nObject.assign(MessageList, {\n    defaultProps: {\n        hasScrollAdjust: true,\n    },\n    props: {\n        /**\n         * Function returns the exact scrollable element from the parent\n         * to manage proper scroll heights which affects the load more messages.\n         */\n        getScrollableElement: {\n            type: Function,\n            optional: true,\n        },\n        hasScrollAdjust: Boolean,\n        threadViewLocalId: String,\n    },\n    template: 'mail.MessageList',\n});\n\nregisterMessagingComponent(MessageList);\n", "/** @odoo-module **/\n\nconst { Component } = owl;\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nexport class MessageReactionGroup extends Component {\n\n    get messageReactionGroup() {\n        return this.messaging.models['mail.message_reaction_group'].get(this.props.messageReactionGroupLocalId);\n    }\n\n}\n\nObject.assign(MessageReactionGroup, {\n    props: {\n        messageReactionGroupLocalId: String,\n    },\n    template: 'mail.MessageReactionGroup',\n});\n\nregisterMessagingComponent(MessageReactionGroup);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nconst { Component } = owl;\n\nexport class MessageSeenIndicator extends Component {\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @returns {string}\n     */\n    get indicatorTitle() {\n        if (!this.messageSeenIndicator) {\n            return '';\n        }\n        if (this.messageSeenIndicator.hasEveryoneSeen) {\n            return this.env._t(\"Seen by Everyone\");\n        }\n        if (this.messageSeenIndicator.hasSomeoneSeen) {\n            const partnersThatHaveSeen = this.messageSeenIndicator.partnersThatHaveSeen.map(partner => {\n                if (this.message.originThread) {\n                    return this.message.originThread.getMemberName(partner);\n                }\n                return partner.nameOrDisplayName;\n            });\n            if (partnersThatHaveSeen.length === 1) {\n                return _.str.sprintf(\n                    this.env._t(\"Seen by %s\"),\n                    partnersThatHaveSeen[0]\n                );\n            }\n            if (partnersThatHaveSeen.length === 2) {\n                return _.str.sprintf(\n                    this.env._t(\"Seen by %s and %s\"),\n                    partnersThatHaveSeen[0],\n                    partnersThatHaveSeen[1]\n                );\n            }\n            return _.str.sprintf(\n                this.env._t(\"Seen by %s, %s and more\"),\n                partnersThatHaveSeen[0],\n                partnersThatHaveSeen[1]\n            );\n        }\n        if (this.messageSeenIndicator.hasEveryoneFetched) {\n            return this.env._t(\"Received by Everyone\");\n        }\n        if (this.messageSeenIndicator.hasSomeoneFetched) {\n            const partnersThatHaveFetched = this.messageSeenIndicator.partnersThatHaveFetched.map(partner => {\n                if (this.message.originThread) {\n                    return this.message.originThread.getMemberName(partner);\n                }\n                return partner.nameOrDisplayName;\n            });\n            if (partnersThatHaveFetched.length === 1) {\n                return _.str.sprintf(\n                    this.env._t(\"Received by %s\"),\n                    partnersThatHaveFetched[0]\n                );\n            }\n            if (partnersThatHaveFetched.length === 2) {\n                return _.str.sprintf(\n                    this.env._t(\"Received by %s and %s\"),\n                    partnersThatHaveFetched[0],\n                    partnersThatHaveFetched[1]\n                );\n            }\n            return _.str.sprintf(\n                this.env._t(\"Received by %s, %s and more\"),\n                partnersThatHaveFetched[0],\n                partnersThatHaveFetched[1]\n            );\n        }\n        return '';\n    }\n\n    /**\n     * @returns {mail.message}\n     */\n    get message() {\n        return this.messaging && this.messaging.models['mail.message'].get(this.props.messageLocalId);\n    }\n\n    /**\n     * @returns {mail.message_seen_indicator}\n     */\n    get messageSeenIndicator() {\n        if (!this.thread || this.thread.model !== 'mail.channel') {\n            return undefined;\n        }\n        return this.messaging.models['mail.message_seen_indicator'].findFromIdentifyingData({\n            message: this.message,\n            thread: this.thread,\n        });\n    }\n\n    /**\n     * @returns {mail.Thread}\n     */\n    get thread() {\n        return this.messaging && this.messaging.models['mail.thread'].get(this.props.threadLocalId);\n    }\n}\n\nObject.assign(MessageSeenIndicator, {\n    props: {\n        messageLocalId: String,\n        threadLocalId: String,\n    },\n    template: 'mail.MessageSeenIndicator',\n});\n\nregisterMessagingComponent(MessageSeenIndicator);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nconst { Component } = owl;\n\nexport class MessagingMenu extends Component {\n\n    /**\n     * @override\n     */\n    constructor(...args) {\n        super(...args);\n        /**\n         * global JS generated ID for this component. Useful to provide a\n         * custom class to autocomplete input, so that click in an autocomplete\n         * item is not considered as a click away from messaging menu in mobile.\n         */\n        this.id = _.uniqueId('o_messagingMenu_');\n\n        // bind since passed as props\n        this._onMobileNewMessageInputSelect = this._onMobileNewMessageInputSelect.bind(this);\n        this._onMobileNewMessageInputSource = this._onMobileNewMessageInputSource.bind(this);\n        this._onClickCaptureGlobal = this._onClickCaptureGlobal.bind(this);\n        this._constructor(...args);\n    }\n\n    /**\n     * Allows patching constructor.\n     */\n    _constructor() {}\n\n    /**\n     * @override\n     */\n    setup() {\n        // for now, the legacy env is needed for internal functions such as\n        // `useModels` to work\n        this.env = owl.Component.env;\n        super.setup();\n    }\n\n    mounted() {\n        document.addEventListener('click', this._onClickCaptureGlobal, true);\n    }\n\n    willUnmount() {\n        document.removeEventListener('click', this._onClickCaptureGlobal, true);\n    }\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @returns {mail.messaging_menu}\n     */\n    get messagingMenu() {\n        return this.messaging && this.messaging.messagingMenu;\n    }\n\n    /**\n     * @returns {string}\n     */\n    get mobileNewMessageInputPlaceholder() {\n        return this.env._t(\"Search user...\");\n    }\n\n    /**\n     * @returns {Object[]}\n     */\n    get tabs() {\n        return [{\n            icon: 'fa fa-envelope',\n            id: 'all',\n            label: this.env._t(\"All\"),\n        }, {\n            icon: 'fa fa-user',\n            id: 'chat',\n            label: this.env._t(\"Chat\"),\n        }, {\n            icon: 'fa fa-users',\n            id: 'channel',\n            label: this.env._t(\"Channel\"),\n        }];\n    }\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Closes the menu when clicking outside, if appropriate.\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickCaptureGlobal(ev) {\n        if (!this.messagingMenu) {\n            return;\n        }\n        // ignore click inside the menu\n        if (!this.el || this.el.contains(ev.target)) {\n            return;\n        }\n        // in all other cases: close the messaging menu when clicking outside\n        this.messagingMenu.close();\n    }\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickDesktopTabButton(ev) {\n        this.messagingMenu.update({ activeTabId: ev.currentTarget.dataset.tabId });\n    }\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickNewMessage(ev) {\n        if (!this.messaging.device.isMobile) {\n            this.messaging.chatWindowManager.openNewMessage();\n            this.messagingMenu.close();\n        } else {\n            this.messagingMenu.toggleMobileNewMessage();\n        }\n    }\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickToggler(ev) {\n        // avoid following dummy href\n        ev.preventDefault();\n        if (!this.messagingMenu) {\n            return;\n        }\n        this.messagingMenu.toggleOpen();\n    }\n\n    /**\n     * @private\n     * @param {CustomEvent} ev\n     */\n    _onHideMobileNewMessage(ev) {\n        ev.stopPropagation();\n        this.messagingMenu.toggleMobileNewMessage();\n    }\n\n    /**\n     * @private\n     * @param {Event} ev\n     * @param {Object} ui\n     * @param {Object} ui.item\n     * @param {integer} ui.item.id\n     */\n    _onMobileNewMessageInputSelect(ev, ui) {\n        this.messaging.openChat({ partnerId: ui.item.id });\n    }\n\n    /**\n     * @private\n     * @param {Object} req\n     * @param {string} req.term\n     * @param {function} res\n     */\n    _onMobileNewMessageInputSource(req, res) {\n        const value = _.escape(req.term);\n        this.messaging.models['mail.partner'].imSearch({\n            callback: partners => {\n                const suggestions = partners.map(partner => {\n                    return {\n                        id: partner.id,\n                        value: partner.nameOrDisplayName,\n                        label: partner.nameOrDisplayName,\n                    };\n                });\n                res(_.sortBy(suggestions, 'label'));\n            },\n            keyword: value,\n            limit: 10,\n        });\n    }\n\n    /**\n     * @private\n     * @param {CustomEvent} ev\n     * @param {Object} ev.detail\n     * @param {string} ev.detail.tabId\n     */\n    _onSelectMobileNavbarTab(ev) {\n        ev.stopPropagation();\n        this.messagingMenu.update({ activeTabId: ev.detail.tabId });\n    }\n\n}\n\nObject.assign(MessagingMenu, {\n    props: {},\n    template: 'mail.MessagingMenu',\n});\n\nregisterMessagingComponent(MessagingMenu);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nconst { Component } = owl;\n\nexport class MobileMessagingNavbar extends Component {\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClick(ev) {\n        this.trigger('o-select-mobile-messaging-navbar-tab', {\n            tabId: ev.currentTarget.dataset.tabId,\n        });\n    }\n\n}\n\nObject.assign(MobileMessagingNavbar, {\n    defaultProps: {\n        tabs: [],\n    },\n    props: {\n        activeTabId: String,\n        tabs: {\n            type: Array,\n            element: {\n                type: Object,\n                shape: {\n                    icon: {\n                        type: String,\n                        optional: true,\n                    },\n                    id: String,\n                    label: String,\n                },\n            },\n        },\n    },\n    template: 'mail.MobileMessagingNavbar',\n});\n\nregisterMessagingComponent(MobileMessagingNavbar, { propsCompareDepth: { tabs: 2 } });\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nconst { Component } = owl;\n\nexport class NotificationAlert extends Component {\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @returns {boolean}\n     */\n    get isNotificationBlocked() {\n        if (!this.messaging) {\n            return false;\n        }\n        const windowNotification = this.env.browser.Notification;\n        return (\n            windowNotification &&\n            windowNotification.permission !== \"granted\" &&\n            !this.messaging.isNotificationPermissionDefault\n        );\n    }\n\n}\n\nObject.assign(NotificationAlert, {\n    props: {},\n    template: 'mail.NotificationAlert',\n});\n\nregisterMessagingComponent(NotificationAlert);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nconst { Component } = owl;\nconst { useRef } = owl.hooks;\n\nexport class NotificationGroup extends Component {\n\n    /**\n     * @override\n     */\n    constructor(...args) {\n        super(...args);\n        /**\n         * Reference of the \"mark as read\" button. Useful to disable the\n         * top-level click handler when clicking on this specific button.\n         */\n        this._markAsReadRef = useRef('markAsRead');\n    }\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @returns {mail.notification_group}\n     */\n    get group() {\n        return this.messaging && this.messaging.models['mail.notification_group'].get(this.props.notificationGroupLocalId);\n    }\n\n    /**\n     * @returns {string|undefined}\n     */\n    image() {\n        if (this.group.notification_type === 'email') {\n            return '/mail/static/src/img/smiley/mailfailure.jpg';\n        }\n    }\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClick(ev) {\n        const markAsRead = this._markAsReadRef.el;\n        if (markAsRead && markAsRead.contains(ev.target)) {\n            // handled in `_onClickMarkAsRead`\n            return;\n        }\n        this.group.openDocuments();\n        if (!this.messaging.device.isMobile) {\n            this.messaging.messagingMenu.close();\n        }\n    }\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickMarkAsRead(ev) {\n        this.group.openCancelAction();\n        if (!this.messaging.device.isMobile) {\n            this.messaging.messagingMenu.close();\n        }\n    }\n\n}\n\nObject.assign(NotificationGroup, {\n    props: {\n        notificationGroupLocalId: String,\n    },\n    template: 'mail.NotificationGroup',\n});\n\nregisterMessagingComponent(NotificationGroup);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nconst { Component } = owl;\n\nexport class NotificationList extends Component {\n\n    mounted() {\n        this._loadPreviews();\n    }\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @returns {Object[]}\n     */\n    get notifications() {\n        if (!this.messaging) {\n            return [];\n        }\n        const threads = this._getThreads(this.props);\n        let threadNeedactionNotifications = [];\n        if (this.props.filter === 'all') {\n            // threads with needactions\n            threadNeedactionNotifications = this.messaging.models['mail.thread']\n                .all(t => t.model !== 'mail.box' && t.needactionMessagesAsOriginThread.length > 0)\n                .sort((t1, t2) => {\n                    if (t1.needactionMessagesAsOriginThread.length > 0 && t2.needactionMessagesAsOriginThread.length === 0) {\n                        return -1;\n                    }\n                    if (t1.needactionMessagesAsOriginThread.length === 0 && t2.needactionMessagesAsOriginThread.length > 0) {\n                        return 1;\n                    }\n                    if (t1.lastNeedactionMessageAsOriginThread && t2.lastNeedactionMessageAsOriginThread) {\n                        return t1.lastNeedactionMessageAsOriginThread.id < t2.lastNeedactionMessageAsOriginThread.id ? 1 : -1;\n                    }\n                    if (t1.lastNeedactionMessageAsOriginThread) {\n                        return -1;\n                    }\n                    if (t2.lastNeedactionMessageAsOriginThread) {\n                        return 1;\n                    }\n                    return t1.id < t2.id ? -1 : 1;\n                })\n                .map(thread => {\n                    return {\n                        thread,\n                        type: 'thread_needaction',\n                        uniqueId: thread.localId + '_needaction',\n                    };\n                });\n        }\n        // thread notifications\n        const threadNotifications = threads\n            .sort((t1, t2) => {\n                if (t1.localMessageUnreadCounter > 0 && t2.localMessageUnreadCounter === 0) {\n                    return -1;\n                }\n                if (t1.localMessageUnreadCounter === 0 && t2.localMessageUnreadCounter > 0) {\n                    return 1;\n                }\n                if (t1.lastMessage && t2.lastMessage) {\n                    return t1.lastMessage.id < t2.lastMessage.id ? 1 : -1;\n                }\n                if (t1.lastMessage) {\n                    return -1;\n                }\n                if (t2.lastMessage) {\n                    return 1;\n                }\n                return t1.id < t2.id ? -1 : 1;\n            })\n            .map(thread => {\n                return {\n                    thread,\n                    type: 'thread',\n                    uniqueId: thread.localId,\n                };\n            });\n        let notifications = threadNeedactionNotifications.concat(threadNotifications);\n        if (this.props.filter === 'all') {\n            const notificationGroups = this.messaging.notificationGroupManager.groups;\n            notifications = Object.values(notificationGroups)\n                .sort((group1, group2) => group1.sequence - group2.sequence)\n                .map(notificationGroup => {\n                    return {\n                        notificationGroup,\n                        uniqueId: notificationGroup.localId,\n                    };\n                }).concat(notifications);\n        }\n        // native notification request\n        if (this.props.filter === 'all' && this.messaging.isNotificationPermissionDefault) {\n            notifications.unshift({\n                type: 'odoobotRequest',\n                uniqueId: 'odoobotRequest',\n            });\n        }\n        return notifications;\n    }\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Load previews of given thread. Basically consists of fetching all missing\n     * last messages of each thread.\n     *\n     * @private\n     */\n    async _loadPreviews() {\n        const threads = this.notifications\n            .filter(notification => notification.thread && notification.thread.exists())\n            .map(notification => notification.thread);\n        this.messaging.models['mail.thread'].loadPreviews(threads);\n    }\n\n    /**\n     * @private\n     * @param {Object} props\n     * @throws {Error} in case `props.filter` is not supported\n     * @returns {mail.thread[]}\n     */\n    _getThreads(props) {\n        if (props.filter === 'mailbox') {\n            return this.messaging.models['mail.thread']\n                .all(thread => thread.isPinned && thread.model === 'mail.box')\n                .sort((mailbox1, mailbox2) => {\n                    if (mailbox1 === this.messaging.inbox) {\n                        return -1;\n                    }\n                    if (mailbox2 === this.messaging.inbox) {\n                        return 1;\n                    }\n                    if (mailbox1 === this.messaging.starred) {\n                        return -1;\n                    }\n                    if (mailbox2 === this.messaging.starred) {\n                        return 1;\n                    }\n                    const mailbox1Name = mailbox1.displayName;\n                    const mailbox2Name = mailbox2.displayName;\n                    mailbox1Name < mailbox2Name ? -1 : 1;\n                });\n        } else if (props.filter === 'channel') {\n            return this.messaging.models['mail.thread']\n                .all(thread =>\n                    thread.channel_type === 'channel' &&\n                    thread.isPinned &&\n                    thread.model === 'mail.channel'\n                )\n                .sort((c1, c2) => c1.displayName < c2.displayName ? -1 : 1);\n        } else if (props.filter === 'chat') {\n            return this.messaging.models['mail.thread']\n                .all(thread =>\n                    thread.isChatChannel &&\n                    thread.isPinned &&\n                    thread.model === 'mail.channel'\n                )\n                .sort((c1, c2) => c1.displayName < c2.displayName ? -1 : 1);\n        } else if (props.filter === 'all') {\n            // \"All\" filter is for channels and chats\n            return this.messaging.models['mail.thread']\n                .all(thread => thread.isPinned && thread.model === 'mail.channel')\n                .sort((c1, c2) => c1.displayName < c2.displayName ? -1 : 1);\n        } else {\n            throw new Error(`Unsupported filter ${props.filter}`);\n        }\n    }\n\n}\n\nObject.assign(NotificationList, {\n    _allowedFilters: ['all', 'mailbox', 'channel', 'chat'],\n    defaultProps: {\n        filter: 'all',\n    },\n    props: {\n        filter: {\n            type: String,\n            validate: prop => NotificationList._allowedFilters.includes(prop),\n        },\n    },\n    template: 'mail.NotificationList',\n});\n\nregisterMessagingComponent(NotificationList);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nconst { Component } = owl;\n\nexport class NotificationPopover extends Component {\n\n    /**\n     * @returns {string}\n     */\n    get iconClass() {\n        switch (this.notification.notification_status) {\n            case 'sent':\n                return 'fa fa-check';\n            case 'bounce':\n                return 'fa fa-exclamation';\n            case 'exception':\n                return 'fa fa-exclamation';\n            case 'ready':\n                return 'fa fa-send-o';\n            case 'canceled':\n                return 'fa fa-trash-o';\n        }\n        return '';\n    }\n\n    /**\n     * @returns {string}\n     */\n    get iconTitle() {\n        switch (this.notification.notification_status) {\n            case 'sent':\n                return this.env._t(\"Sent\");\n            case 'bounce':\n                return this.env._t(\"Bounced\");\n            case 'exception':\n                return this.env._t(\"Error\");\n            case 'ready':\n                return this.env._t(\"Ready\");\n            case 'canceled':\n                return this.env._t(\"Canceled\");\n        }\n        return '';\n    }\n\n    /**\n     * @returns {mail.notification[]}\n     */\n    get notifications() {\n        if (!this.messaging) {\n            return [];\n        }\n        return this.props.notificationLocalIds.map(\n            notificationLocalId => this.messaging.models['mail.notification'].get(notificationLocalId)\n        );\n    }\n\n}\n\nObject.assign(NotificationPopover, {\n    props: {\n        notificationLocalIds: {\n            type: Array,\n            element: String,\n        },\n    },\n    template: 'mail.NotificationPopover',\n});\n\nregisterMessagingComponent(NotificationPopover, { propsCompareDepth: { notificationLocalIds: 1 } });\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nconst { Component } = owl;\n\nexport class NotificationRequest extends Component {\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @returns {string}\n     */\n    getHeaderText() {\n        return _.str.sprintf(\n            this.env._t(\"%s has a request\"),\n            this.messaging.partnerRoot.nameOrDisplayName\n        );\n    }\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Handle the response of the user when prompted whether push notifications\n     * are granted or denied.\n     *\n     * @private\n     * @param {string} value\n     */\n    _handleResponseNotificationPermission(value) {\n        this.messaging.refreshIsNotificationPermissionDefault();\n        if (value !== 'granted') {\n            this.env.services['bus_service'].sendNotification({\n                message: this.env._t(\"Odoo will not have the permission to send native notifications on this device.\"),\n                title: this.env._t(\"Permission denied\"),\n            });\n        }\n    }\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     */\n    _onClick() {\n        const windowNotification = this.env.browser.Notification;\n        const def = windowNotification && windowNotification.requestPermission();\n        if (def) {\n            def.then(this._handleResponseNotificationPermission.bind(this));\n        }\n        if (!this.messaging.device.isMobile) {\n            this.messaging.messagingMenu.close();\n        }\n    }\n\n}\n\nObject.assign(NotificationRequest, {\n    props: {},\n    template: 'mail.NotificationRequest',\n});\n\nregisterMessagingComponent(NotificationRequest);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nconst { Component } = owl;\n\nexport class PartnerImStatusIcon extends Component {\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @returns {mail.partner}\n     */\n    get partner() {\n        return this.messaging && this.messaging.models['mail.partner'].get(this.props.partnerLocalId);\n    }\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClick(ev) {\n        if (!this.props.hasOpenChat) {\n            return;\n        }\n        this.partner.openChat();\n    }\n\n}\n\nObject.assign(PartnerImStatusIcon, {\n    defaultProps: {\n        hasBackground: true,\n        hasOpenChat: false,\n    },\n    props: {\n        partnerLocalId: String,\n        hasBackground: Boolean,\n        /**\n         * Determines whether a click on `this` should open a chat with\n         * `this.partner`.\n         */\n        hasOpenChat: Boolean,\n    },\n    template: 'mail.PartnerImStatusIcon',\n});\n\nregisterMessagingComponent(PartnerImStatusIcon);\n", "/** @odoo-module **/\n\nimport { useComponentToModel } from '@mail/component_hooks/use_component_to_model/use_component_to_model';\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nimport { usePosition } from '@web/core/position/position_hook';\n\nconst { Component } = owl;\n\nexport class PopoverView extends Component {\n\n    setup() {\n        super.setup();\n        useComponentToModel({ fieldName: 'component', modelName: 'mail.popover_view', propNameAsRecordLocalId: 'popoverViewLocalId' });\n        usePosition(\n            () => this.popoverView && this.popoverView.anchorRef && this.popoverView.anchorRef.el,\n            {\n                margin: 16,\n                position: this.popoverView.position,\n            }\n        );\n    }\n\n    //--------------------------------------------------------------------------\n    // Getters / Setters\n    //--------------------------------------------------------------------------\n\n    /**\n     * @returns {mail.popover_view|undefined}\n     */\n    get popoverView() {\n        return this.messaging && this.messaging.models['mail.popover_view'].get(this.props.popoverViewLocalId);\n    }\n\n}\n\nObject.assign(PopoverView, {\n    props: {\n        popoverViewLocalId: String,\n    },\n    template: 'mail.PopoverView',\n});\n\nregisterMessagingComponent(PopoverView);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nconst { Component } = owl;\n\nexport class RtcActivityNotice extends Component {\n\n    /**\n     * @override\n     */\n    setup() {\n        // for now, the legacy env is needed for internal functions such as\n        // `useModels` to work\n        this.env = owl.Component.env;\n        super.setup();\n    }\n    \n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClick(ev) {\n        this.messaging.rtc.channel.open();\n    }\n\n}\n\nObject.assign(RtcActivityNotice, {\n    props: {},\n    template: 'mail.RtcActivityNotice',\n});\n\nregisterMessagingComponent(RtcActivityNotice);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nconst { Component } = owl;\nconst { useRef } = owl.hooks;\n\nexport class RtcCallParticipantCard extends Component {\n\n    /**\n     * @override\n     */\n    setup() {\n        super.setup();\n        this._volumeMenuAnchorRef = useRef('volumeMenuAnchor');\n    }\n\n    //--------------------------------------------------------------------------\n    // Getters / Setters\n    //--------------------------------------------------------------------------\n\n    /**\n     * @returns {mail.thread|undefined}\n     */\n    get callParticipantCard() {\n        return this.messaging.models['mail.rtc_call_participant_card'].get(this.props.callParticipantCardLocalId);\n    }\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * This listens to the right click event, and used to redirect the event\n     * as a click on the popover.\n     *\n     * @private\n     * @param {Event} ev\n     */\n    async _onContextMenu(ev) {\n        if (!this._volumeMenuAnchorRef || !this._volumeMenuAnchorRef.el) {\n            return;\n        }\n        ev.preventDefault();\n        this._volumeMenuAnchorRef.el.click();\n    }\n}\n\nObject.assign(RtcCallParticipantCard, {\n    props: {\n        callParticipantCardLocalId: {\n            type: String,\n        },\n    },\n    template: 'mail.RtcCallParticipantCard',\n});\n\nregisterMessagingComponent(RtcCallParticipantCard);\n", "/** @odoo-module **/\n\nimport { useUpdate } from '@mail/component_hooks/use_update/use_update';\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nimport Dialog from 'web.OwlDialog';\n\nconst { Component, useState } = owl;\nconst { useRef } = owl.hooks;\n\nconst components = {\n    Dialog,\n};\n\n// TODO a nice-to-have would be a resize handle under the videos.\n\nexport class RtcCallViewer extends Component {\n\n    /**\n     * @override\n     */\n    setup() {\n        super.setup();\n        this.state = useState({\n            tileWidth: 0,\n            tileHeight: 0,\n            columnCount: 0,\n        });\n        this.tileContainerRef = useRef('tileContainer');\n        useUpdate({ func: () => this._update() });\n    }\n\n    //--------------------------------------------------------------------------\n    // Getters / Setters\n    //--------------------------------------------------------------------------\n\n    /**\n     * @returns {mail.rtc_call_viewer}\n     */\n    get rtcCallViewer() {\n        return this.messaging.models['mail.rtc_call_viewer'].get(this.props.localId);\n    }\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Finds a tile layout and dimensions that respects param0.aspectRatio while maximizing\n     * the total area covered by the tiles within the specified container dimensions.\n     *\n     * @private\n     * @param {Object} param0\n     * @param {number} [param0.aspectRatio]\n     * @param {number} param0.containerHeight\n     * @param {number} param0.containerWidth\n     * @param {number} param0.tileCount\n     */\n    _computeTessellation({ aspectRatio = 1, containerHeight, containerWidth, tileCount }) {\n        let optimalLayout = {\n            area: 0,\n            cols: 0,\n            tileHeight: 0,\n            tileWidth: 0,\n        };\n\n        for (let columnCount = 1; columnCount <= tileCount; columnCount++) {\n            const rowCount = Math.ceil(tileCount / columnCount);\n            const potentialHeight = containerWidth / (columnCount * aspectRatio);\n            const potentialWidth = containerHeight / rowCount;\n            let tileHeight;\n            let tileWidth;\n            if (potentialHeight > potentialWidth) {\n                tileHeight = Math.floor(potentialWidth);\n                tileWidth = Math.floor(tileHeight * aspectRatio);\n            } else {\n                tileWidth = Math.floor(containerWidth / columnCount);\n                tileHeight = Math.floor(tileWidth / aspectRatio);\n            }\n            const area = tileHeight * tileWidth;\n            if (area <= optimalLayout.area) {\n                continue;\n            }\n            optimalLayout = {\n                area,\n                columnCount,\n                tileHeight,\n                tileWidth,\n            };\n        }\n        return optimalLayout;\n    }\n\n    /**\n     * @private\n     */\n    _setTileLayout() {\n        if (!this.rtcCallViewer) {\n            return;\n        }\n        if (!this.el) {\n            return;\n        }\n        if (!this.tileContainerRef.el) {\n            return;\n        }\n        const { width, height } = this.tileContainerRef.el.getBoundingClientRect();\n\n        const { tileWidth, tileHeight, columnCount } = this._computeTessellation({\n            aspectRatio: this.rtcCallViewer.aspectRatio,\n            containerHeight: height,\n            containerWidth: width,\n            tileCount: this.tileContainerRef.el.children.length,\n        });\n\n        this.state.tileWidth = tileWidth;\n        this.state.tileHeight = tileHeight;\n        this.state.columnCount = columnCount;\n    }\n\n    /**\n     * @private\n     */\n    _update() {\n        this._setTileLayout();\n    }\n\n}\n\nObject.assign(RtcCallViewer, {\n    components,\n    props: {\n        localId: String,\n    },\n    template: 'mail.RtcCallViewer',\n});\n\nregisterMessagingComponent(RtcCallViewer);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nimport { browser } from \"@web/core/browser/browser\";\n\nconst { Component } = owl;\nconst { useState } = owl.hooks;\n\nexport class RtcConfigurationMenu extends Component {\n\n    /**\n     * @override\n     */\n    setup() {\n        super.setup();\n        this.state = useState({\n            userDevices: undefined,\n        });\n    }\n\n    async willStart() {\n        this.state.userDevices = await browser.navigator.mediaDevices.enumerateDevices();\n    }\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {Event} ev\n     */\n    _onChangeDelay(ev) {\n        this.messaging.userSetting.rtcConfigurationMenu.onChangeDelay(ev.target.value);\n    }\n\n    /**\n     * @private\n     * @param {Event} ev\n     */\n    _onChangePushToTalk(ev) {\n        this.messaging.userSetting.rtcConfigurationMenu.onChangePushToTalk();\n    }\n\n    /**\n     * @private\n     * @param {Event} ev\n     */\n    _onChangeSelectAudioInput(ev) {\n        this.messaging.userSetting.rtcConfigurationMenu.onChangeSelectAudioInput(ev.target.value);\n    }\n\n    /**\n     * @private\n     * @param {Event} ev\n     */\n    _onChangeThreshold(ev) {\n        this.messaging.userSetting.rtcConfigurationMenu.onChangeThreshold(ev.target.value);\n    }\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickRegisterKeyButton() {\n        this.messaging.userSetting.rtcConfigurationMenu.onClickRegisterKeyButton();\n    }\n}\n\nObject.assign(RtcConfigurationMenu, {\n    template: 'mail.RtcConfigurationMenu',\n});\n\nregisterMessagingComponent(RtcConfigurationMenu);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nconst { Component } = owl;\n\nexport class RtcController extends Component {\n\n    //--------------------------------------------------------------------------\n    // Getters / Setters\n    //--------------------------------------------------------------------------\n\n    /**\n     * @returns {mail.rtc_controller}\n     */\n    get rtcController() {\n        return this.messaging && this.messaging.models['mail.rtc_controller'].get(this.props.localId);\n    }\n\n}\n\nObject.assign(RtcController, {\n    props: {\n        localId: {\n            type: String,\n        },\n    },\n    template: 'mail.RtcController',\n});\n\nregisterMessagingComponent(RtcController);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nconst { Component } = owl;\n\nexport class RtcInvitationCard extends Component {\n\n    //--------------------------------------------------------------------------\n    // Getters / Setters\n    //--------------------------------------------------------------------------\n\n    /**\n     * @returns {mail.thread}\n     */\n    get thread() {\n        return this.messaging.models['mail.thread'].get(this.props.threadLocalId);\n    }\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    async _onClickAccept(ev) {\n        this.thread.open();\n        if (this.thread.hasPendingRtcRequest) {\n            return;\n        }\n        await this.thread.toggleCall();\n    }\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickAvatar(ev) {\n        this.thread.open();\n    }\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickRefuse(ev) {\n        if (this.thread.hasPendingRtcRequest) {\n            return;\n        }\n        this.thread.leaveCall();\n    }\n\n}\n\nObject.assign(RtcInvitationCard, {\n    props: {\n        threadLocalId: String,\n    },\n    template: 'mail.RtcInvitationCard',\n});\n\nregisterMessagingComponent(RtcInvitationCard);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nconst { Component } = owl;\n\nexport class RtcInvitations extends Component {}\n\nObject.assign(RtcInvitations, {\n    props: {},\n    template: 'mail.RtcInvitations',\n});\n\nregisterMessagingComponent(RtcInvitations);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\nimport { useComponentToModel } from '@mail/component_hooks/use_component_to_model/use_component_to_model';\n\nconst { Component } = owl;\n\nexport class RtcLayoutMenu extends Component {\n\n    /**\n     * @override\n     */\n    setup() {\n        super.setup();\n        useComponentToModel({ fieldName: 'component', modelName: 'mail.rtc_layout_menu', propNameAsRecordLocalId: 'localId' });\n    }\n\n    //--------------------------------------------------------------------------\n    // Getters / Setters\n    //--------------------------------------------------------------------------\n\n    /**\n     * @returns {mail.rtc_layout_menu}\n     */\n    get layoutMenu() {\n        return this.messaging && this.messaging.models['mail.rtc_layout_menu'].get(this.props.localId);\n    }\n\n}\n\nObject.assign(RtcLayoutMenu, {\n    props: {\n        localId: String,\n    },\n    template: 'mail.RtcLayoutMenu',\n});\n\nregisterMessagingComponent(RtcLayoutMenu);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\nimport { useComponentToModel } from '@mail/component_hooks/use_component_to_model/use_component_to_model';\n\nconst { Component } = owl;\n\nexport class RtcOptionList extends Component {\n\n    /**\n     * @override\n     */\n    setup() {\n        super.setup();\n        useComponentToModel({ fieldName: 'component', modelName: 'mail.rtc_option_list', propNameAsRecordLocalId: 'localId' });\n    }\n\n    //--------------------------------------------------------------------------\n    // Getters / Setters\n    //--------------------------------------------------------------------------\n\n    /**\n     * @returns {mail.rtc_option_list}\n     */\n    get rtcOptionList() {\n        return this.messaging && this.messaging.models['mail.rtc_option_list'].get(this.props.localId);\n    }\n\n}\n\nObject.assign(RtcOptionList, {\n    props: {\n        localId: String,\n    },\n    template: 'mail.RtcOptionList',\n});\n\nregisterMessagingComponent(RtcOptionList);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\nimport { useUpdate } from '@mail/component_hooks/use_update/use_update';\n\nconst { Component } = owl;\nconst { useRef } = owl.hooks;\n\nexport class RtcVideo extends Component {\n\n    /**\n     * @override\n     */\n    setup() {\n        super.setup();\n        useUpdate({ func: () => this._update() });\n        this._videoRef = useRef(\"video\");\n    }\n\n    //--------------------------------------------------------------------------\n    // Getters / Setters\n    //--------------------------------------------------------------------------\n\n    /**\n     * @returns {mail.thread|undefined}\n     */\n    get rtcSession() {\n        return this.messaging.models[\"mail.rtc_session\"].get(\n            this.props.rtcSessionLocalId\n        );\n    }\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    _update() {\n        this._loadVideo();\n    }\n\n    /**\n     * Since it is not possible to directly put a mediaStreamObject as the src\n     * or src-object of the template, the video src is manually inserted into\n     * the DOM.\n     *\n     */\n    _loadVideo() {\n        if (!this._videoRef) {\n            return;\n        }\n        if (!this.rtcSession || !this.rtcSession.videoStream) {\n            this._videoRef.el.srcObject = undefined;\n        } else {\n            this._videoRef.el.srcObject = this.rtcSession.videoStream;\n        }\n        this._videoRef.el.load();\n    }\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Plays the video as some browsers may not support or block autoplay.\n     *\n     * @private\n     * @param {Event} ev\n     */\n    async _onVideoLoadedMetaData(ev) {\n        try {\n            await ev.target.play();\n        } catch (error) {\n            if (typeof error === 'object' && error.name === 'NotAllowedError') {\n                // Ignored as some browsers may reject play() calls that do not\n                // originate from a user input.\n                return;\n            }\n            throw error;\n        }\n    }\n}\n\nObject.assign(RtcVideo, {\n    props: {\n        rtcSessionLocalId: {\n            type: String,\n        },\n    },\n    template: 'mail.RtcVideo',\n});\n\nregisterMessagingComponent(RtcVideo);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nconst { Component } = owl;\n\nexport class ThreadIcon extends Component {\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @returns {mail.thread}\n     */\n    get thread() {\n        return this.messaging && this.messaging.models['mail.thread'].get(this.props.threadLocalId);\n    }\n\n}\n\nObject.assign(ThreadIcon, {\n    props: {\n        threadLocalId: String,\n    },\n    template: 'mail.ThreadIcon',\n});\n\nregisterMessagingComponent(ThreadIcon);\n", "/** @odoo-module **/\n\nimport * as mailUtils from '@mail/js/utils';\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nconst { Component } = owl;\nconst { useRef } = owl.hooks;\n\nexport class ThreadNeedactionPreview extends Component {\n\n    /**\n     * @override\n     */\n    constructor(...args) {\n        super(...args);\n        /**\n         * Reference of the \"mark as read\" button. Useful to disable the\n         * top-level click handler when clicking on this specific button.\n         */\n        this._markAsReadRef = useRef('markAsRead');\n    }\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Get the image route of the thread.\n     *\n     * @returns {string}\n     */\n    image() {\n        if (this.thread.moduleIcon) {\n            return this.thread.moduleIcon;\n        }\n        if (this.thread.correspondent) {\n            return this.thread.correspondent.avatarUrl;\n        }\n        if (this.thread.model === 'mail.channel') {\n            return `/web/image/mail.channel/${this.thread.id}/avatar_128?unique=${this.thread.avatarCacheKey}`;\n        }\n        return '/mail/static/src/img/smiley/avatar.jpg';\n    }\n\n    /**\n     * Get inline content of the last message of this conversation.\n     *\n     * @returns {string}\n     */\n    get inlineLastNeedactionMessageAsOriginThreadBody() {\n        if (!this.thread.lastNeedactionMessageAsOriginThread) {\n            return '';\n        }\n        return mailUtils.htmlToTextContentInline(this.thread.lastNeedactionMessageAsOriginThread.prettyBody);\n    }\n\n    /**\n     * @returns {mail.thread}\n     */\n    get thread() {\n        return this.messaging && this.messaging.models['mail.thread'].get(this.props.threadLocalId);\n    }\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClick(ev) {\n        const markAsRead = this._markAsReadRef.el;\n        if (markAsRead && markAsRead.contains(ev.target)) {\n            // handled in `_onClickMarkAsRead`\n            return;\n        }\n        this.thread.open();\n        if (!this.messaging.device.isMobile) {\n            this.messaging.messagingMenu.close();\n        }\n    }\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickMarkAsRead(ev) {\n        this.messaging.models['mail.message'].markAllAsRead([\n            ['model', '=', this.thread.model],\n            ['res_id', '=', this.thread.id],\n        ]);\n    }\n\n}\n\nObject.assign(ThreadNeedactionPreview, {\n    props: {\n        threadLocalId: String,\n    },\n    template: 'mail.ThreadNeedactionPreview',\n});\n\nregisterMessagingComponent(ThreadNeedactionPreview);\n", "/** @odoo-module **/\n\nimport * as mailUtils from '@mail/js/utils';\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nconst { Component } = owl;\nconst { useRef } = owl.hooks;\n\nexport class ThreadPreview extends Component {\n\n    /**\n     * @override\n     */\n    constructor(...args) {\n        super(...args);\n        /**\n         * Reference of the \"mark as read\" button. Useful to disable the\n         * top-level click handler when clicking on this specific button.\n         */\n        this._markAsReadRef = useRef('markAsRead');\n    }\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Get the image route of the thread.\n     *\n     * @returns {string}\n     */\n    image() {\n        if (this.thread.correspondent) {\n            return this.thread.correspondent.avatarUrl;\n        }\n        return `/web/image/mail.channel/${this.thread.id}/avatar_128?unique=${this.thread.avatarCacheKey}`;\n    }\n\n    /**\n     * Get inline content of the last message of this conversation.\n     *\n     * @returns {string}\n     */\n    get inlineLastMessageBody() {\n        if (!this.thread.lastMessage) {\n            return '';\n        }\n        return mailUtils.htmlToTextContentInline(this.thread.lastMessage.prettyBody);\n    }\n\n    /**\n     * @returns {mail.thread}\n     */\n    get thread() {\n        return this.messaging && this.messaging.models['mail.thread'].get(this.props.threadLocalId);\n    }\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClick(ev) {\n        const markAsRead = this._markAsReadRef.el;\n        if (markAsRead && markAsRead.contains(ev.target)) {\n            // handled in `_onClickMarkAsRead`\n            return;\n        }\n        this.thread.open();\n        if (!this.messaging.device.isMobile) {\n            this.messaging.messagingMenu.close();\n        }\n    }\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickMarkAsRead(ev) {\n        if (this.thread.lastNonTransientMessage) {\n            this.thread.markAsSeen(this.thread.lastNonTransientMessage);\n        }\n    }\n\n}\n\nObject.assign(ThreadPreview, {\n    props: {\n        threadLocalId: String,\n    },\n    template: 'mail.ThreadPreview',\n});\n\nregisterMessagingComponent(ThreadPreview);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nconst { Component } = owl;\n\nexport class ThreadTextualTypingStatus extends Component {\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @returns {mail.thread}\n     */\n    get thread() {\n        return this.messaging && this.messaging.models['mail.thread'].get(this.props.threadLocalId);\n    }\n\n}\n\nObject.assign(ThreadTextualTypingStatus, {\n    props: {\n        threadLocalId: String,\n    },\n    template: 'mail.ThreadTextualTypingStatus',\n});\n\nregisterMessagingComponent(ThreadTextualTypingStatus);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nconst { Component } = owl;\n\nexport class ThreadTypingIcon extends Component {}\n\nObject.assign(ThreadTypingIcon, {\n    defaultProps: {\n        animation: 'none',\n        size: 'small',\n    },\n    props: {\n        animation: {\n            type: String,\n            validate: prop => ['bounce', 'none', 'pulse'].includes(prop),\n        },\n        size: {\n            type: String,\n            validate: prop => ['small', 'medium'].includes(prop),\n        },\n        title: {\n            type: String,\n            optional: true,\n        }\n    },\n    template: 'mail.ThreadTypingIcon',\n});\n\nregisterMessagingComponent(ThreadTypingIcon);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nconst { Component } = owl;\nconst { useRef } = owl.hooks;\n\nexport class ThreadView extends Component {\n\n    /**\n     * @override\n     */\n    setup() {\n        super.setup();\n        /**\n         * Reference of the message list. Useful to determine scroll positions.\n         */\n        this._messageListRef = useRef('messageList');\n    }\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Get the scroll height in the message list.\n     *\n     * @returns {integer|undefined}\n     */\n    getScrollHeight() {\n        if (!this._messageListRef.comp) {\n            return undefined;\n        }\n        return this._messageListRef.comp.getScrollHeight();\n    }\n\n    /**\n     * Get the scroll position in the message list.\n     *\n     * @returns {integer|undefined}\n     */\n    getScrollTop() {\n        if (!this._messageListRef.comp) {\n            return undefined;\n        }\n        return this._messageListRef.comp.getScrollTop();\n    }\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    onScroll(ev) {\n        if (!this._messageListRef.comp) {\n            return;\n        }\n        this._messageListRef.comp.onScroll(ev);\n    }\n\n    /**\n     * @returns {mail.thread_view}\n     */\n    get threadView() {\n        return this.messaging && this.messaging.models['mail.thread_view'].get(this.props.threadViewLocalId);\n    }\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     */\n    _onClickRetryLoadMessages() {\n        if (!this.threadView) {\n            return;\n        }\n        if (!this.threadView.threadCache) {\n            return;\n        }\n        this.threadView.threadCache.update({ hasLoadingFailed: false });\n    }\n\n}\n\nObject.assign(ThreadView, {\n    defaultProps: {\n        hasComposerDiscardButton: false,\n        hasComposerThreadName: false,\n        showComposerAttachmentsExtensions: true,\n        showComposerAttachmentsFilenames: true,\n    },\n    props: {\n        /**\n         * Function returns the exact scrollable element from the parent\n         * to manage proper scroll heights which affects the load more messages.\n         */\n        getScrollableElement: {\n            type: Function,\n            optional: true,\n        },\n        hasComposerCurrentPartnerAvatar: {\n            type: Boolean,\n            optional: true,\n        },\n        hasComposerDiscardButton: {\n            type: Boolean,\n            optional: true,\n        },\n        hasComposerSendButton: {\n            type: Boolean,\n            optional: true,\n        },\n        hasComposerThreadName: {\n            type: Boolean,\n            optional: true,\n        },\n        /**\n         * If set, determines whether the composer should display status of\n         * members typing on related thread. When this prop is not provided,\n         * it defaults to composer component default value.\n         */\n        hasComposerThreadTyping: {\n            type: Boolean,\n            optional: true,\n        },\n        hasScrollAdjust: {\n            type: Boolean,\n            optional: true,\n        },\n        showComposerAttachmentsExtensions: Boolean,\n        showComposerAttachmentsFilenames: Boolean,\n        threadViewLocalId: String,\n    },\n    template: 'mail.ThreadView',\n});\n\nregisterMessagingComponent(ThreadView);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\nimport { useRefToModel } from '@mail/component_hooks/use_ref_to_model/use_ref_to_model';\nimport { useUpdateToModel } from '@mail/component_hooks/use_update_to_model/use_update_to_model';\n\nconst { Component } = owl;\n\nexport class ThreadViewTopbar extends Component {\n\n    /**\n     * @override\n     */\n    setup() {\n        super.setup();\n        useRefToModel({ fieldName: 'guestNameInputRef', modelName: 'mail.thread_view_topbar', propNameAsRecordLocalId: 'localId', refName: 'guestNameInput' });\n        useRefToModel({ fieldName: 'inviteButtonRef', modelName: 'mail.thread_view_topbar', propNameAsRecordLocalId: 'localId', refName: 'inviteButton' });\n        useRefToModel({ fieldName: 'threadNameInputRef', modelName: 'mail.thread_view_topbar', propNameAsRecordLocalId: 'localId', refName: 'threadNameInput' });\n        useRefToModel({ fieldName: 'threadDescriptionInputRef', modelName: 'mail.thread_view_topbar', propNameAsRecordLocalId: 'localId', refName: 'threadDescriptionInput' });\n        useUpdateToModel({ methodName: 'onComponentUpdate', modelName: 'mail.thread_view_topbar', propNameAsRecordLocalId: 'localId' });\n    }\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @returns {mail.thread_view_topbar}\n     */\n    get threadViewTopbar() {\n        return this.messaging && this.messaging.models['mail.thread_view_topbar'].get(this.props.localId);\n    }\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    async _onClickPhone(ev) {\n        if (this.threadViewTopbar.thread.hasPendingRtcRequest) {\n            return;\n        }\n        await this.threadViewTopbar.thread.toggleCall();\n    }\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    async _onClickCamera(ev) {\n        if (this.threadViewTopbar.thread.hasPendingRtcRequest) {\n            return;\n        }\n        await this.threadViewTopbar.thread.toggleCall({\n            startWithVideo: true,\n        });\n    }\n\n}\n\nObject.assign(ThreadViewTopbar, {\n    props: {\n        localId: String,\n    },\n    template: 'mail.ThreadViewTopbar',\n});\n\nregisterMessagingComponent(ThreadViewTopbar);\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\nimport { useRefToModel } from '@mail/component_hooks/use_ref_to_model/use_ref_to_model';\nimport { useUpdateToModel } from '@mail/component_hooks/use_update_to_model/use_update_to_model';\n\nexport class WelcomeView extends owl.Component {\n\n    /**\n     * @override\n     */\n    setup() {\n        super.setup();\n        useRefToModel({ fieldName: 'guestNameInputRef', modelName: 'mail.welcome_view', propNameAsRecordLocalId: 'localId', refName: 'guestNameInput' });\n        useUpdateToModel({ methodName: 'onComponentUpdate', modelName: 'mail.welcome_view', propNameAsRecordLocalId: 'localId' });\n    }\n\n    /**\n     * @returns {mail.welcome_view}\n     */\n    get welcomeView() {\n        return this.messaging && this.messaging.models['mail.welcome_view'].get(this.props.localId);\n    }\n\n}\n\nObject.assign(WelcomeView, {\n    props: { localId: String },\n    template: 'mail.WelcomeView',\n});\n\nregisterMessagingComponent(WelcomeView);\n", "/** @odoo-module **/\n\n/**\n * Module that contains registry for adding new models or patching models.\n * Useful for model manager in order to generate model classes.\n *\n * This code is not in model manager because other JS modules should populate\n * a registry, and it's difficult to ensure availability of the model manager\n * when these JS modules are deployed.\n */\n\nconst registry = {};\n\n//------------------------------------------------------------------------------\n// Private\n//------------------------------------------------------------------------------\n\n/**\n * @private\n * @param {string} modelName\n * @returns {Object}\n */\nfunction _getEntryFromModelName(modelName) {\n    if (!registry[modelName]) {\n        registry[modelName] = {\n            dependencies: [],\n            factory: undefined,\n            name: modelName,\n            patches: [],\n        };\n    }\n    return registry[modelName];\n}\n\n/**\n * @private\n * @param {string} modelName\n * @param {string} patchName\n * @param {Object} patch\n * @param {Object} [param3={}]\n * @param {string} [param3.type='instance'] 'instance', 'class', 'field' or 'identifyingFields'\n */\nfunction _registerPatchModel(modelName, patchName, patch, { type = 'instance' } = {}) {\n    const entry = _getEntryFromModelName(modelName);\n    Object.assign(entry, {\n        patches: (entry.patches || []).concat([{\n            name: patchName,\n            patch,\n            type,\n        }]),\n    });\n}\n\n//------------------------------------------------------------------------------\n// Public\n//------------------------------------------------------------------------------\n\n/**\n * Register a patch for static methods in model.\n *\n * @param {string} modelName\n * @param {string} patchName\n * @param {Object} patch\n */\nfunction registerClassPatchModel(modelName, patchName, patch) {\n    _registerPatchModel(modelName, patchName, patch, { type: 'class' });\n}\n\n/**\n * Register a patch for fields in model.\n *\n * @param {string} modelName\n * @param {string} patchName\n * @param {Object} patch\n */\nfunction registerFieldPatchModel(modelName, patchName, patch) {\n    _registerPatchModel(modelName, patchName, patch, { type: 'field' });\n}\n\n/**\n * Register a patch for identifyignFields in model.\n *\n * @param {string} modelName\n * @param {string} patchName\n * @param {function} patch\n */\nfunction registerIdentifyingFieldsPatch(modelName, patchName, patch) {\n    _registerPatchModel(modelName, patchName, patch, { type: 'identifyingFields' });\n}\n\n/**\n * Register a patch for instance methods in model.\n *\n * @param {string} modelName\n * @param {string} patchName\n * @param {Object} patch\n */\nfunction registerInstancePatchModel(modelName, patchName, patch) {\n    _registerPatchModel(modelName, patchName, patch, { type: 'instance' });\n}\n\n/**\n * @param {string} name\n * @param {function} factory\n * @param {string[]} [dependencies=[]]\n */\nfunction registerNewModel(name, factory, dependencies = []) {\n    const entry = _getEntryFromModelName(name);\n    let entryDependencies = [...dependencies];\n    if (name !== 'mail.model') {\n        entryDependencies = [...new Set(entryDependencies.concat(['mail.model']))];\n    }\n    if (entry.factory) {\n        throw new Error(`Model \"${name}\" has already been registered!`);\n    }\n    Object.assign(entry, {\n        dependencies: entryDependencies,\n        factory,\n        name,\n    });\n}\n\n//------------------------------------------------------------------------------\n// Export\n//------------------------------------------------------------------------------\n\nexport {\n    registerClassPatchModel,\n    registerFieldPatchModel,\n    registerInstancePatchModel,\n    registerIdentifyingFieldsPatch,\n    registerNewModel,\n    registry,\n};\n\n", "/** @odoo-module **/\n\nexport class RecordDeletedError extends Error {\n\n    /**\n     * @override\n     * @param {string} recordLocalId local id of record that has been deleted\n     * @param  {...any} args\n     */\n    constructor(recordLocalId, ...args) {\n        super(...args);\n        this.recordLocalId = recordLocalId;\n        this.name = 'RecordDeletedError';\n    }\n}\n", "/** @odoo-module **/\n\nimport { clear, FieldCommand, link, replace, unlink, unlinkAll } from '@mail/model/model_field_command';\n\n/**\n * Class whose instances represent field on a model.\n * These field definitions are generated from declared fields in static prop\n * `fields` on the model.\n */\nexport class ModelField {\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    constructor({\n        compute,\n        default: def,\n        fieldName,\n        fieldType,\n        inverse,\n        isCausal = false,\n        readonly = false,\n        related,\n        relationType,\n        required = false,\n        sort,\n        to,\n    } = {}) {\n        /**\n         * If set, this field acts as a computed field, and this prop\n         * contains the name of the instance method that computes the value\n         * for this field. This compute method is called on creation of record\n         * and whenever some of its dependencies change.\n         */\n        this.compute = compute;\n        /**\n         * Default value for this field. Used on creation of this field, to\n         * set a value by default.\n         */\n        this.default = def;\n        /**\n         * Name of the field in the definition of fields on model.\n         */\n        this.fieldName = fieldName;\n        /**\n         * Type of this field. 2 types of fields are currently supported:\n         *\n         *   1. 'attribute': fields that store primitive values like integers,\n         *                   booleans, strings, objects, array, etc.\n         *\n         *   2. 'relation': fields that relate to some other records.\n         */\n        this.fieldType = fieldType;\n        /**\n         * This prop only makes sense in a relational field. This contains\n         * the name of the field name in the inverse relation. This may not\n         * be defined in declared field definitions, but processed relational\n         * field definitions always have inverses.\n         */\n        this.inverse = inverse;\n        /**\n         * This prop only makes sense in a relational field. If set, when this\n         * relation is removed, the related record is automatically deleted.\n         */\n        this.isCausal = isCausal;\n        /**\n         * Determines whether the field is read only. Read only field\n         * can't be updated once the record is created.\n         * An exception is made for computed fields (updated when the\n         * dependencies are updated) and related fields (updated when the\n         * inverse relation changes).\n         */\n        this.readonly = readonly;\n        /**\n         * If set, this field acts as a related field, and this prop contains\n         * a string that references the related field. It should have the\n         * following format: '<relationName>.<relatedFieldName>', where\n         * <relationName> is a relational field name on this model or a parent\n         * model (note: could itself be computed or related), and\n         * <relatedFieldName> is the name of field on the records that are\n         * related to current record from this relation. When there are more\n         * than one record in the relation, it maps all related fields per\n         * record in relation.\n         */\n        this.related = related;\n        /**\n         * This prop only makes sense in a relational field. Determine which\n         * type of relation there is between current record and other records.\n         * 4 types of relation are supported: 'one2one', 'one2many', 'many2one'\n         * and 'many2many'.\n         */\n        this.relationType = relationType;\n        /**\n         * Determine whether the field is required or not.\n         *\n         * Empty value is systematically undefined.\n         * null or empty string are NOT considered empty value, meaning these values meet the requirement.\n        */\n        this.required = required;\n        /**\n         * Determines the name of the function on record that returns the\n         * definition on how this field is sorted (only makes sense for\n         * relational x2many).\n         *\n         * It must contain a function returning the definition instead of the\n         * definition directly (to allow the definition to depend on the value\n         * of another field).\n         *\n         * The definition itself should be a list of operations, and each\n         * operation itself should be a list of 2 elements: the first is the\n         * name of a supported compare method, and the second is a dot separated\n         * relation path, starting from the current record.\n         *\n         * When determining the order of one record compared to another, each\n         * compare operation will be applied in the order provided, stopping at\n         * the first operation that is able to determine an order for the two\n         * records.\n         */\n        this.sort = sort;\n        /**\n         * Determines whether and how elements of this field should be summed\n         * into a counter field (only makes sense for relational x2many).\n         *\n         * It must contain an array of object with 2 keys: `from` giving the\n         * name of a field on the relation record that holds the contribution of\n         * that record to the sum, and `to` giving the name of a field on the\n         * current record which contains the sum.\n         */\n        this.sumContributions = [];\n        /**\n         * This prop only makes sense in a relational field. Determine which\n         * model name this relation refers to.\n         */\n        this.to = to;\n    }\n\n    /**\n     * Define an attribute field.\n     *\n     * @param {Object} [options]\n     * @returns {Object}\n     */\n    static attr(options) {\n        return Object.assign({ fieldType: 'attribute' }, options);\n    }\n\n    /**\n     * Define a many2many field.\n     *\n     * @param {string} modelName\n     * @param {Object} [options]\n     * @returns {Object}\n     */\n    static many2many(modelName, options) {\n        return ModelField._relation(modelName, Object.assign({}, options, { relationType: 'many2many' }));\n    }\n\n    /**\n     * Define a many2one field.\n     *\n     * @param {string} modelName\n     * @param {Object} [options]\n     * @returns {Object}\n     */\n    static many2one(modelName, options) {\n        return ModelField._relation(modelName, Object.assign({}, options, { relationType: 'many2one' }));\n    }\n\n    /**\n     * Define a one2many field.\n     *\n     * @param {string} modelName\n     * @param {Object} [options]\n     * @returns {Object}\n     */\n    static one2many(modelName, options) {\n        return ModelField._relation(modelName, Object.assign({}, options, { relationType: 'one2many' }));\n    }\n\n    /**\n     * Define a one2one field.\n     *\n     * @param {string} modelName\n     * @param {Object} [options]\n     * @returns {Object}\n     */\n    static one2one(modelName, options) {\n        return ModelField._relation(modelName, Object.assign({}, options, { relationType: 'one2one' }));\n    }\n\n    /**\n     * Clears the value of this field on the given record. It consists of\n     * setting this to its default value. In particular, using `clear` is the\n     * only way to write `undefined` on a field, as long as `undefined` is its\n     * default value. Relational fields are always unlinked before the default\n     * is applied.\n     *\n     * @param {mail.model} record\n     * @param {options} [options]\n     * @returns {boolean} whether the value changed for the current field\n     */\n    clear(record, options) {\n        let hasChanged = false;\n        if (this.fieldType === 'relation') {\n            if (this.parseAndExecuteCommands(record, unlinkAll(), options)) {\n                hasChanged = true;\n            }\n            if (!this.default) {\n                return hasChanged;\n            }\n        }\n        if (this.parseAndExecuteCommands(record, this.default, options)) {\n            hasChanged = true;\n        }\n        return hasChanged;\n    }\n\n    /**\n     * Compute method when this field is related.\n     *\n     * @private\n     * @param {mail.model} record\n     */\n    computeRelated(record) {\n        const [relationName, relatedFieldName] = this.related.split('.');\n        const Model = record.constructor;\n        const relationField = Model.__fieldMap[relationName];\n        if (['one2many', 'many2many'].includes(relationField.relationType)) {\n            const newVal = [];\n            for (const otherRecord of record[relationName]) {\n                const otherValue = otherRecord[relatedFieldName];\n                if (otherValue) {\n                    if (otherValue instanceof Array) {\n                        for (const v of otherValue) {\n                            newVal.push(v);\n                        }\n                    } else {\n                        newVal.push(otherValue);\n                    }\n                }\n            }\n            if (this.fieldType === 'relation') {\n                return replace(newVal);\n            }\n            return newVal;\n        }\n        const otherRecord = record[relationName];\n        if (otherRecord) {\n            const newVal = otherRecord[relatedFieldName];\n            if (newVal === undefined) {\n                return clear();\n            }\n            if (this.fieldType === 'relation') {\n                return replace(newVal);\n            }\n            return newVal;\n        }\n        return clear();\n    }\n\n    /**\n     * Converts the given value to a list of FieldCommands\n     *\n     * @param {*} newVal\n     * @returns {FieldCommand[]}\n     */\n    convertToFieldCommandList(newVal) {\n        if (newVal instanceof FieldCommand) {\n            return [newVal];\n        } else if (newVal instanceof Array && newVal[0] instanceof FieldCommand) {\n            return newVal;\n        } else if (this.fieldType === 'relation') {\n            // Deprecated. Used only to support old syntax: `[...[name, value]]` command\n            return newVal.map(([name, value]) => new FieldCommand(name, value));\n        } else {\n            return [new FieldCommand('set', newVal)];\n        }\n    }\n\n    /**\n     * Decreases the field value by `amount`\n     * for an attribute field holding number value,\n     *\n     * @param {mail.model} record\n     * @param {number} amount\n     */\n    decrement(record, amount) {\n        const currentValue = this.read(record);\n        return this._setAttribute(record, currentValue - amount);\n    }\n\n    /**\n     * Get the value associated to this field. Relations must convert record\n     * local ids to records.\n     *\n     * @param {mail.model} record\n     * @returns {any}\n     */\n    get(record) {\n        if (this.fieldType === 'attribute') {\n            return this.read(record);\n        }\n        if (this.fieldType === 'relation') {\n            if (['one2one', 'many2one'].includes(this.relationType)) {\n                return this.read(record);\n            }\n            return [...this.read(record)];\n        }\n        throw new Error(`cannot get field with unsupported type ${this.fieldType}.`);\n    }\n\n    /**\n     * Increases the field value by `amount`\n     * for an attribute field holding number value.\n     *\n     * @param {mail.model} record\n     * @param {number} amount\n     */\n    increment(record, amount) {\n        const currentValue = this.read(record);\n        return this._setAttribute(record, currentValue + amount);\n    }\n\n    /**\n     * Parses newVal for command(s) and executes them.\n     *\n     * @param {mail.model} record\n     * @param {any} newVal\n     * @param {Object} [options]\n     * @param {boolean} [options.hasToUpdateInverse] whether updating the\n     *  current field should also update its inverse field. Only applies to\n     *  relational fields. Typically set to false only during the process of\n     *  updating the inverse field itself, to avoid unnecessary recursion.\n     * @returns {boolean} whether the value changed for the current field\n     */\n    parseAndExecuteCommands(record, newVal, options) {\n        const commandList = this.convertToFieldCommandList(newVal);\n        let hasChanged = false;\n        for (const command of commandList) {\n            const commandName = command.name;\n            const newVal = command.value;\n            if (this.fieldType === 'attribute') {\n                switch (commandName) {\n                    case 'clear':\n                        if (this.clear(record, options)) {\n                            hasChanged = true;\n                        }\n                        break;\n                    case 'decrement':\n                        if (this.decrement(record, newVal)) {\n                            hasChanged = true;\n                        }\n                        break;\n                    case 'increment':\n                        if (this.increment(record, newVal)) {\n                            hasChanged = true;\n                        }\n                        break;\n                    case 'set':\n                        if (this._setAttribute(record, newVal)) {\n                            hasChanged = true;\n                        }\n                        break;\n                    default:\n                        throw new Error(`Field \"${record.constructor.modelName}/${this.fieldName}\"(${this.fieldType} type) does not support command \"${commandName}\"`);\n                }\n            } else if (this.fieldType === 'relation') {\n                switch (commandName) {\n                    case 'clear':\n                        if (this.clear(record, options)) {\n                            hasChanged = true;\n                        }\n                        break;\n                    case 'insert':\n                        if (this._setRelationInsert(record, newVal, options)) {\n                            hasChanged = true;\n                        }\n                        break;\n                    case 'insert-and-replace':\n                        if (this._setRelationInsertAndReplace(record, newVal, options)) {\n                            hasChanged = true;\n                        }\n                        break;\n                    case 'insert-and-unlink':\n                        if (this._setRelationInsertAndUnlink(record, newVal, options)) {\n                            hasChanged = true;\n                        }\n                        break;\n                    case 'link':\n                        if (this._setRelationLink(record, newVal, options)) {\n                            hasChanged = true;\n                        }\n                        break;\n                    case 'replace':\n                        if (this._setRelationReplace(record, newVal, options)) {\n                            hasChanged = true;\n                        }\n                        break;\n                    case 'unlink':\n                        if (this._setRelationUnlink(record, newVal, options)) {\n                            hasChanged = true;\n                        }\n                        break;\n                    case 'unlink-all':\n                        if (this._setRelationUnlink(record, this.get(record), options)) {\n                            hasChanged = true;\n                        }\n                        break;\n                    default:\n                        throw new Error(`Field \"${record.constructor.modelName}/${this.fieldName}\"(${this.fieldType} type) does not support command \"${commandName}\"`);\n                }\n            }\n        }\n        return hasChanged;\n    }\n\n    /**\n     * Get the raw value associated to this field. For relations, this means\n     * the local id or list of local ids of records in this relational field.\n     *\n     * @param {mail.model} record\n     * @returns {any}\n     */\n    read(record) {\n        return record.__values[this.fieldName];\n    }\n\n    /**\n     * @returns {string}\n     */\n    toString() {\n        return `field(${this.fieldName})`;\n    }\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {string} modelName\n     * @param {Object} [options]\n     */\n    static _relation(modelName, options) {\n        return Object.assign({\n            fieldType: 'relation',\n            to: modelName,\n        }, options);\n    }\n\n    /**\n     * Converts given value to expected format for x2many processing, which is\n     * an iterable of records.\n     *\n     * @private\n     * @param {mail.model|mail.model[]} newValue\n     * @param {Object} [param1={}]\n     * @param {boolean} [param1.hasToVerify=true] whether the value has to be\n     *  verified @see `_verifyRelationalValue`\n     * @returns {mail.model[]}\n     */\n    _convertX2ManyValue(newValue, { hasToVerify = true } = {}) {\n        if (typeof newValue[Symbol.iterator] === 'function') {\n            if (hasToVerify) {\n                for (const value of newValue) {\n                    this._verifyRelationalValue(value);\n                }\n            }\n            return newValue;\n        }\n        if (hasToVerify) {\n            this._verifyRelationalValue(newValue);\n        }\n        return [newValue];\n    }\n\n    /**\n     * Creates or updates and then returns the other record(s) of a relational\n     * field based on the given data and the inverse relation value.\n     *\n     * @private\n     * @param {mail.model} record\n     * @param {Object|Object[]} data\n     * @returns {mail.model|mail.model[]}\n     */\n    _insertOtherRecord(record, data) {\n        const OtherModel = record.models[this.to];\n        const isMulti = typeof data[Symbol.iterator] === 'function';\n        const dataList = [];\n        for (const recordData of (isMulti ? data : [data])) {\n            const recordData2 = { ...recordData };\n            if (['one2one', 'one2many'].includes(this.relationType)) {\n                recordData2[this.inverse] = replace(record);\n            } else {\n                recordData2[this.inverse] = link(record);\n            }\n            dataList.push(recordData2);\n        }\n        const records = record.modelManager._insert(OtherModel, dataList);\n        return isMulti ? records : records[0];\n    }\n\n    /**\n     *  Set a value for this attribute field\n     *\n     * @private\n     * @param {mail.model} record\n     * @param {any} newVal value to be written on the field value.\n     * @returns {boolean} whether the value changed for the current field\n     */\n    _setAttribute(record, newVal) {\n        const currentValue = this.read(record);\n        if (currentValue === newVal) {\n            return false;\n        }\n        record.__values[this.fieldName] = newVal;\n        return true;\n    }\n\n    /**\n     * Set on this relational field in 'insert' mode. Basically data provided\n     * during set on this relational field contain data to insert records,\n     * which themselves must be linked to record of this field by means of\n     * this field.\n     *\n     * @private\n     * @param {mail.model} record\n     * @param {Object|Object[]} data\n     * @param {Object} [options]\n     * @returns {boolean} whether the value changed for the current field\n     */\n    _setRelationInsert(record, data, options) {\n        const newValue = this._insertOtherRecord(record, data);\n        return this._setRelationLink(record, newValue, options);\n    }\n\n    /**\n     * Set on this relational field in 'insert-and-repalce' mode. Basically\n     * data provided during set on this relational field contain data to insert\n     * records, which themselves must replace value on this field.\n     *\n     * @private\n     * @param {mail.model} record\n     * @param {Object|Object[]} data\n     * @param {Object} [options]\n     * @returns {boolean} whether the value changed for the current field\n     */\n    _setRelationInsertAndReplace(record, data, options) {\n        const newValue = this._insertOtherRecord(record, data);\n        return this._setRelationReplace(record, newValue, options);\n    }\n\n    /**\n     * Set on this relational field in 'insert-and-unlink' mode. Basically\n     * data provided during set on this relational field contain data to insert\n     * records, which themselves must be unlinked from this field.\n     *\n     * @private\n     * @param {mail.model} record\n     * @param {Object|Object[]} data\n     * @param {Object} [options]\n     * @returns {boolean} whether the value changed for the current field\n     */\n    _setRelationInsertAndUnlink(record, data, options) {\n        const newValue = this._insertOtherRecord(record, data);\n        return this._setRelationUnlink(record, newValue, options);\n    }\n\n    /**\n     * Set a 'link' operation on this relational field.\n     *\n     * @private\n     * @param {mail.model|mail.model[]} newValue\n     * @param {Object} [options]\n     * @returns {boolean} whether the value changed for the current field\n     */\n    _setRelationLink(record, newValue, options) {\n        switch (this.relationType) {\n            case 'many2many':\n            case 'one2many':\n                return this._setRelationLinkX2Many(record, newValue, options);\n            case 'many2one':\n            case 'one2one':\n                return this._setRelationLinkX2One(record, newValue, options);\n        }\n    }\n\n    /**\n     * Handling of a `set` 'link' of a x2many relational field.\n     *\n     * @private\n     * @param {mail.model} record\n     * @param {mail.model|mail.model[]} newValue\n     * @param {Object} [param2={}]\n     * @param {boolean} [param2.hasToUpdateInverse=true] whether updating the\n     *  current field should also update its inverse field. Typically set to\n     *  false only during the process of updating the inverse field itself, to\n     *  avoid unnecessary recursion.\n     * @returns {boolean} whether the value changed for the current field\n     */\n    _setRelationLinkX2Many(record, newValue, { hasToUpdateInverse = true } = {}) {\n        const hasToVerify = record.modelManager.isDebug;\n        const recordsToLink = this._convertX2ManyValue(newValue, { hasToVerify });\n        const otherRecords = this.read(record);\n\n        let hasChanged = false;\n        for (const recordToLink of recordsToLink) {\n            // other record already linked, avoid linking twice\n            if (otherRecords.has(recordToLink)) {\n                continue;\n            }\n            hasChanged = true;\n            // link other records to current record\n            otherRecords.add(recordToLink);\n            // link current record to other records\n            if (hasToUpdateInverse) {\n                record.modelManager._update(\n                    recordToLink,\n                    { [this.inverse]: link(record) },\n                    { allowWriteReadonly: true, hasToUpdateInverse: false }\n                );\n            }\n        }\n        return hasChanged;\n    }\n\n    /**\n     * Handling of a `set` 'link' of an x2one relational field.\n     *\n     * @private\n     * @param {mail.model} record\n     * @param {mail.model} recordToLink\n     * @param {Object} [param2={}]\n     * @param {boolean} [param2.hasToUpdateInverse=true] whether updating the\n     *  current field should also update its inverse field. Typically set to\n     *  false only during the process of updating the inverse field itself, to\n     *  avoid unnecessary recursion.\n     * @returns {boolean} whether the value changed for the current field\n     */\n    _setRelationLinkX2One(record, recordToLink, { hasToUpdateInverse = true } = {}) {\n        if (record.modelManager.isDebug) {\n            this._verifyRelationalValue(recordToLink);\n        }\n        const prevOtherRecord = this.read(record);\n        // other record already linked, avoid linking twice\n        if (prevOtherRecord === recordToLink) {\n            return false;\n        }\n        // unlink to properly update previous inverse before linking new value\n        this._setRelationUnlinkX2One(record, { hasToUpdateInverse: true });\n        // link other record to current record\n        record.__values[this.fieldName] = recordToLink;\n        // link current record to other record\n        if (hasToUpdateInverse) {\n            record.modelManager._update(\n                recordToLink,\n                { [this.inverse]: link(record) },\n                { allowWriteReadonly: true, hasToUpdateInverse: false }\n            );\n        }\n        return true;\n    }\n\n    /**\n     * Set a 'replace' operation on this relational field.\n     *\n     * @private\n     * @param {mail.model} record\n     * @param {mail.model|mail.model[]} newValue\n     * @param {Object} [options]\n     * @returns {boolean} whether the value changed for the current field\n     */\n    _setRelationReplace(record, newValue, options) {\n        if (['one2one', 'many2one'].includes(this.relationType)) {\n            // for x2one replace is just link\n            return this._setRelationLinkX2One(record, newValue, options);\n        }\n\n        // for x2many: smart process to avoid unnecessary unlink/link\n        let hasChanged = false;\n        let hasToReorder = false;\n        const otherRecordsSet = this.read(record);\n        const otherRecordsList = [...otherRecordsSet];\n        const hasToVerify = record.modelManager.isDebug;\n        const recordsToReplaceList = [...this._convertX2ManyValue(newValue, { hasToVerify })];\n        const recordsToReplaceSet = new Set(recordsToReplaceList);\n\n        // records to link\n        const recordsToLink = [];\n        for (let i = 0; i < recordsToReplaceList.length; i++) {\n            const recordToReplace = recordsToReplaceList[i];\n            if (!otherRecordsSet.has(recordToReplace)) {\n                recordsToLink.push(recordToReplace);\n            }\n            if (otherRecordsList[i] !== recordToReplace) {\n                hasToReorder = true;\n            }\n        }\n        if (this._setRelationLinkX2Many(record, recordsToLink, options)) {\n            hasChanged = true;\n        }\n\n        // records to unlink\n        const recordsToUnlink = [];\n        for (let i = 0; i < otherRecordsList.length; i++) {\n            const otherRecord = otherRecordsList[i];\n            if (!recordsToReplaceSet.has(otherRecord)) {\n                recordsToUnlink.push(otherRecord);\n            }\n            if (recordsToReplaceList[i] !== otherRecord) {\n                hasToReorder = true;\n            }\n        }\n        if (this._setRelationUnlinkX2Many(record, recordsToUnlink, options)) {\n            hasChanged = true;\n        }\n\n        // reorder result\n        if (hasToReorder) {\n            otherRecordsSet.clear();\n            for (const record of recordsToReplaceList) {\n                otherRecordsSet.add(record);\n            }\n            hasChanged = true;\n        }\n        return hasChanged;\n    }\n\n    /**\n     * Set an 'unlink' operation on this relational field.\n     *\n     * @private\n     * @param {mail.model} record\n     * @param {mail.model|mail.model[]} newValue\n     * @param {Object} [options]\n     * @returns {boolean} whether the value changed for the current field\n     */\n    _setRelationUnlink(record, newValue, options) {\n        switch (this.relationType) {\n            case 'many2many':\n            case 'one2many':\n                return this._setRelationUnlinkX2Many(record, newValue, options);\n            case 'many2one':\n            case 'one2one':\n                return this._setRelationUnlinkX2One(record, options);\n        }\n    }\n\n    /**\n     * Handling of a `set` 'unlink' of a x2many relational field.\n     *\n     * @private\n     * @param {mail.model} record\n     * @param {mail.model|mail.model[]} newValue\n     * @param {Object} [param2={}]\n     * @param {boolean} [param2.hasToUpdateInverse=true] whether updating the\n     *  current field should also update its inverse field. Typically set to\n     *  false only during the process of updating the inverse field itself, to\n     *  avoid unnecessary recursion.\n     * @returns {boolean} whether the value changed for the current field\n     */\n    _setRelationUnlinkX2Many(record, newValue, { hasToUpdateInverse = true } = {}) {\n        const recordsToUnlink = this._convertX2ManyValue(\n            newValue,\n            { hasToVerify: false }\n        );\n        const otherRecords = this.read(record);\n\n        let hasChanged = false;\n        for (const recordToUnlink of recordsToUnlink) {\n            // unlink other record from current record\n            const wasLinked = otherRecords.delete(recordToUnlink);\n            if (!wasLinked) {\n                continue;\n            }\n            hasChanged = true;\n            // unlink current record from other records\n            if (hasToUpdateInverse) {\n                if (!recordToUnlink.exists()) {\n                    // This case should never happen ideally, but the current\n                    // way of handling related relational fields make it so that\n                    // deleted records are not always reflected immediately in\n                    // these related fields.\n                    continue;\n                }\n                // apply causality\n                if (this.isCausal) {\n                    record.modelManager._delete(recordToUnlink);\n                } else {\n                    record.modelManager._update(\n                        recordToUnlink,\n                        { [this.inverse]: unlink(record) },\n                        { allowWriteReadonly: true, hasToUpdateInverse: false }\n                    );\n                }\n            }\n        }\n        return hasChanged;\n    }\n\n    /**\n     * Handling of a `set` 'unlink' of a x2one relational field.\n     *\n     * @private\n     * @param {mail.model} record\n     * @param {Object} [param1={}]\n     * @param {boolean} [param1.hasToUpdateInverse=true] whether updating the\n     *  current field should also update its inverse field. Typically set to\n     *  false only during the process of updating the inverse field itself, to\n     *  avoid unnecessary recursion.\n     * @returns {boolean} whether the value changed for the current field\n     */\n    _setRelationUnlinkX2One(record, { hasToUpdateInverse = true } = {}) {\n        const otherRecord = this.read(record);\n        // other record already unlinked, avoid useless processing\n        if (!otherRecord) {\n            return false;\n        }\n        // unlink other record from current record\n        record.__values[this.fieldName] = undefined;\n        // unlink current record from other record\n        if (hasToUpdateInverse) {\n            if (!otherRecord.exists()) {\n                // This case should never happen ideally, but the current\n                // way of handling related relational fields make it so that\n                // deleted records are not always reflected immediately in\n                // these related fields.\n                return;\n            }\n            // apply causality\n            if (this.isCausal) {\n                record.modelManager._delete(otherRecord);\n            } else {\n                record.modelManager._update(\n                    otherRecord,\n                    { [this.inverse]: unlink(record) },\n                    { allowWriteReadonly: true, hasToUpdateInverse: false }\n                );\n            }\n        }\n        return true;\n    }\n\n    /**\n     * Verifies the given relational value makes sense for the current field.\n     * In particular the given value must be a record, it must be non-deleted,\n     * and it must originates from relational `to` model (or its subclasses).\n     *\n     * @private\n     * @param {mail.model} record\n     * @throws {Error} if record does not satisfy related model\n     */\n    _verifyRelationalValue(record) {\n        if (!record) {\n            throw Error(`record is undefined. Did you try to link() or insert() empty value? Considering clear() instead.`);\n        }\n        if (!record.modelManager) {\n            throw Error(`${record} is not a record. Did you try to use link() instead of insert() with data?`);\n        }\n        const OtherModel = record.modelManager.models[this.to];\n        if (!OtherModel.get(record.localId, { isCheckingInheritance: true })) {\n            throw Error(`Record ${record.localId} is not valid for relational field ${this.fieldName}.`);\n        }\n    }\n\n}\n\nexport const attr = ModelField.attr;\nexport const many2many = ModelField.many2many;\nexport const many2one = ModelField.many2one;\nexport const one2many = ModelField.one2many;\nexport const one2one = ModelField.one2one;\n", "/** @odoo-module **/\n\n/**\n * Allows field update to detect if the value it received is a command to\n * execute (in which was it will be an instance of this class) or an actual\n * value to set (in all other cases).\n */\nclass FieldCommand {\n    /**\n     * @constructor\n     * @param {string} name - command name.\n     * @param {any} [value] - value(s) used for the command.\n     */\n    constructor(name, value) {\n        this._name = name;\n        this._value = value;\n    }\n\n    /**\n     * @returns {string} name/behavior of the command.\n     */\n    get name() {\n        return this._name;\n    }\n\n    /**\n     * @returns {any} value used for the command to update the field\n     */\n    get value() {\n        return this._value;\n    }\n}\n\n/**\n * Returns a clear command to give to the model manager at create/update.\n * `clear` command can be used for attribute fields or relation fields.\n * - Set an attribute field its default value (or undefined if no default value is given);\n * - or unlink the current record(s) and then set the default value for a relation field;\n *\n * @returns {FieldCommand}\n */\nfunction clear() {\n    return new FieldCommand('clear');\n}\n\n/**\n * Returns a create command to give to the model manager at create/update.\n * `create` command can be used for relation fields.\n * - Create new record(s) from data and then link it for a relation field;\n *\n * @param {Object|Object[]} data - data object or data objects array to create record(s).\n * @returns {FieldCommand}\n */\nfunction create(data) {\n    return new FieldCommand('create', data);\n}\n\n/**\n * Returns a decrement command to give to the model manager at create/update.\n * `decrement` command can be used for attribute fields (number typed).\n * The field value will be decreased by `amount`.\n *\n * @param {number} [amount=1]\n * @returns {FieldCommand}\n */\nfunction decrement(amount = 1) {\n    return new FieldCommand('decrement', amount);\n}\n\n/**\n * Returns a increment command to give to the model manager at create/update.\n * `increment` command can be used for attribute fields (number typed).\n * The field value will be increased by `amount`.\n *\n * @param {number} [amount=1]\n * @returns {FieldCommand}\n */\nfunction increment(amount = 1) {\n    return new FieldCommand('increment', amount);\n}\n\n/**\n * Returns a insert command to give to the model manager at create/update.\n * `insert` command can be used for relation fields.\n * - Create new record(s) from data if the record(s) do not exist;\n * - or update the record(s) if they can be found from identifying data;\n * - and then link record(s) to a relation field.\n *\n * @param {Object|Object[]} data - data object or data objects array to insert record(s).\n * @returns {FieldCommand}\n */\nfunction insert(data) {\n    return new FieldCommand('insert', data);\n}\n\n/**\n * Returns a insert-and-replace command to give to the model manager at create/update.\n * `insertAndReplace` command can be used for relation fields.\n * - Create new record(s) from data if the record(s) do not exist;\n * - or update the record(s) if they can be found from identifying data;\n * - and then replace the record(s) for a relation field.\n *\n * @param {Object|Object[]} [data={}] - data object or data objects array to insert and replace record(s).\n * @returns {FieldCommand}\n */\nfunction insertAndReplace(data = {}) {\n    return new FieldCommand('insert-and-replace', data);\n}\n\n/**\n * Returns a link command to give to the model manager at create/update.\n * `link` command can be used for relation fields.\n * - Set the field value `newValue` if current field value differs from `newValue` for an x2one field;\n * - Or add the record(s) given by `newValue` which are not in the currecnt field value\n * to the field value for an x2many field.\n *\n * @param {mail.model|mail.model[]} newValue - record or records array to be linked.\n * @returns {FieldCommand}\n */\nfunction link(newValue) {\n    return new FieldCommand('link', newValue);\n}\n\n/**\n * Returns a replace command to give to the model manager at create/update.\n * `replace` command can be used for relation fields.\n * - Unlink the current record and then link `newValue`\n * if the current value differs from `newValue` for a x2one field;\n * - Unlink records in the field value if they are not in `newValue`,\n * link the missing values, and then sort field value by the order they are given in `newValue`\n * for a x2many field.\n *\n * @param {mail.model|mail.model[]} newValue - record or records array to be replaced.\n * @returns {FieldCommand}\n */\nfunction replace(newValue) {\n    return new FieldCommand('replace', newValue);\n}\n\n/**\n * Returns a set command to give to the model manager at create/update.\n * `set` command can be used for attribute fields.\n * - Write the `newValue` on the field value.\n *\n * @param {any} newValue - value to be written on the field value.\n */\nfunction set(newValue) {\n    return new FieldCommand('set', newValue);\n}\n\n/**\n * Returns a unlink command to give to the model manager at create/update.\n * `unlink` command can be used for relation fields.\n * - Remove the current value for a x2one field\n * - or remove the record(s) given by `data` which are in the current field value\n *  for a x2many field.\n *\n * @param {mail.model|mail.model[]} [data] - record or records array to be unlinked.\n * `data` will be ignored if the field is x2one type.\n * @returns {FieldCommand}\n */\nfunction unlink(data) {\n    return new FieldCommand('unlink', data);\n}\n\n/**\n * Returns a unlink-all command to give to the model manager at create/update.\n * `unlinkAll` command can be used for relation fields.\n * - remove all record(s) for a relation field\n *\n * @returns {FieldCommand}\n */\nfunction unlinkAll() {\n    return new FieldCommand('unlink-all');\n}\n\nexport {\n    FieldCommand,\n    clear,\n    create,\n    decrement,\n    increment,\n    insert,\n    insertAndReplace,\n    link,\n    replace,\n    set,\n    unlink,\n    unlinkAll,\n};\n", "/** @odoo-module */\n\nimport { decrement, increment } from '@mail/model/model_field_command';\nimport { Listener } from '@mail/model/model_listener';\nimport { followRelations } from '@mail/model/model_utils';\n\n/**\n * Defines a set containing the relation records of the given field on the given\n * record. The behavior of this set depends on the field properties.\n */\nexport class RelationSet {\n\n    /**\n     * @param {mail.model} record\n     * @param {ModelField} field\n     */\n    constructor(record, field) {\n        this.record = record;\n        this.field = field;\n        this.set = new Set();\n        if (this.field.sort) {\n            this.sortArray = new Array();\n            this.sortListenerByValue = new Map();\n        }\n        if (this.field.sumContributions.length > 0) {\n            this.sumByValueByField = new Map();\n            this.sumListenerByValueByField = new Map();\n            for (const { to: sumFieldName } of this.field.sumContributions) {\n                this.sumByValueByField.set(sumFieldName, new Map());\n                this.sumListenerByValueByField.set(sumFieldName, new Map());\n            }\n        }\n    }\n\n    /**\n     * @returns {integer}\n     */\n    get size() {\n        return this.set.size;\n    }\n\n    /**\n     * @param {*} value\n     */\n    add(value) {\n        if (this.set.has(value)) {\n            return;\n        }\n        this.set.add(value);\n        if (this.field.sort) {\n            this.sortArray.push(value);\n            const listener = new Listener({\n                isPartOfUpdateCycle: true,\n                name: `sort of ${value} in ${this.field} of ${this.record}`,\n                onChange: info => {\n                    // access all useful values of current record (and relations) to mark them as dependencies\n                    this.record.modelManager.startListening(listener);\n                    const compareDefinition = this.record[this.field.sort]();\n                    const relatedPathSet = new Set(compareDefinition.map(operation => operation[1])); // only keep unique paths to avoid unnecessary listeners\n                    for (const relatedPath of relatedPathSet) {\n                        followRelations(value, relatedPath);\n                    }\n                    this.record.modelManager.stopListening(listener);\n                    // sort outside of listening to avoid registering listeners for all other items (they already added their own listeners)\n                    const compareFunction = (a, b) => {\n                        for (const [compareMethod, relatedPath] of compareDefinition) {\n                            const valA = followRelations(a, relatedPath);\n                            const valB = followRelations(b, relatedPath);\n                            switch (compareMethod) {\n                                case 'defined-first': {\n                                    if (!valA && !valB) {\n                                        return 0;\n                                    }\n                                    if (!valA) {\n                                        return 1;\n                                    }\n                                    if (!valB) {\n                                        return -1;\n                                    }\n                                    break;\n                                }\n                                case 'case-insensitive-asc':\n                                    if (valA.toLowerCase() === valB.toLowerCase()) {\n                                        break;\n                                    }\n                                    return valA.toLowerCase() < valB.toLowerCase() ? -1 : 1;\n                                case 'smaller-first':\n                                    if (valA === valB) {\n                                        break;\n                                    }\n                                    return valA - valB;\n                                case 'greater-first':\n                                    if (valA === valB) {\n                                        break;\n                                    }\n                                    return valB - valA;\n                                default:\n                                    throw Error(`sort compare method \"${compareMethod}\" is not supported.`);\n                            }\n                        }\n                        return 0;\n                    };\n                    // Naive method: re-sort the complete array every time. Ideally each item should\n                    // be inserted/moved at its correct place immediately, but this can be optimized\n                    // eventually if necessary.\n                    this.sortArray.sort(compareFunction);\n                    // Similarly naive approach: the field is marked as changed even if sort didn't\n                    // actually move any record.\n                    this.record.modelManager._markRecordFieldAsChanged(this.record, this.field);\n                },\n            });\n            this.sortListenerByValue.set(value, listener);\n            listener.onChange({ reason: 'initial call' });\n        }\n        for (const { from: contributionFieldName, to: sumFieldName } of this.field.sumContributions) {\n            this.sumByValueByField.get(sumFieldName).set(value, 0);\n            const listener = new Listener({\n                isPartOfUpdateCycle: true,\n                name: `sum of field(${sumFieldName}) of ${this.record} from field(${contributionFieldName}) of ${value} through relation ${this.field}`,\n                onChange: info => {\n                    // listen to the contribution to mark it as dependency\n                    this.record.modelManager.startListening(listener);\n                    const contribution = value[contributionFieldName];\n                    this.record.modelManager.stopListening(listener);\n                    // retrieve the previous contribution and update it\n                    const previousContribution = this.sumByValueByField.get(sumFieldName).get(value);\n                    this.sumByValueByField.get(sumFieldName).set(value, contribution);\n                    this.record.modelManager._update(\n                        this.record,\n                        {\n                            [sumFieldName]: [\n                                decrement(previousContribution),\n                                increment(contribution),\n                            ],\n                        },\n                        { allowWriteReadonly: true },\n                    );\n                },\n            });\n            this.sumListenerByValueByField.get(sumFieldName).set(value, listener);\n            listener.onChange({ reason: 'initial call' });\n        }\n    }\n\n    /**\n     * Removes all elements.\n     */\n    clear() {\n        for (const record of this.set) {\n            this.delete(record);\n        }\n    }\n\n    /**\n     * @param {*} value\n     * @returns {boolean} whether the value was present\n     */\n    delete(value) {\n        const wasPresent = this.set.delete(value);\n        if (!wasPresent) {\n            return false;\n        }\n        if (this.field.sort) {\n            // remove sort of current value\n            const index = this.sortArray.indexOf(value);\n            this.sortArray.splice(index, 1);\n            // remove listener on current value\n            const listener = this.sortListenerByValue.get(value);\n            this.sortListenerByValue.delete(listener);\n            this.record.modelManager.removeListener(listener);\n        }\n        for (const { to: sumFieldName } of this.field.sumContributions) {\n            // remove contribution of current value\n            const contribution = this.sumByValueByField.get(sumFieldName).get(value);\n            this.sumByValueByField.get(sumFieldName).delete(value);\n            this.record.modelManager._update(this.record, { [sumFieldName]: decrement(contribution) }, { allowWriteReadonly: true });\n            // remove listener on current value\n            const listener = this.sumListenerByValueByField.get(sumFieldName).get(value);\n            this.sumListenerByValueByField.get(sumFieldName).delete(value);\n            this.record.modelManager.removeListener(listener);\n        }\n        return true;\n    }\n\n    /**\n     * @param {*} value\n     * @returns {boolean} whether the value is present\n     */\n    has(value) {\n        return this.set.has(value);\n    }\n\n    /**\n     * @returns {iterator}\n     */\n    [Symbol.iterator]() {\n        if (this.field.sort) {\n            return this.sortArray[Symbol.iterator]();\n        }\n        return this.set[Symbol.iterator]();\n    }\n\n}\n", "/** @odoo-module **/\n\nexport class Listener {\n    /**\n     * Creates a new listener for handling changes in models. This listener\n     * should be provided to the listening methods of the model manager.\n     *\n     * @constructor\n     * @param {Object} param\n     * @param {string} param.name name of this listener, useful for debugging\n     * @param {function} param.onChange function that will be called when this\n     *  listener is notified of change, which is when records or fields that are\n     *  listened to are created/updated/deleted. This function is called with\n     *  1 param that contains info\n     * @param {boolean} [param.isLocking=true] whether the model manager should\n     *  be locked while this listener is observing, which means no change of\n     *  state in any model is allowed (preventing to call insert/update/delete).\n     * @param {boolean} [param.isPartOfUpdateCycle=false] determines at which\n     *  point during the update cycle of the models this `onChange` function\n     *  will be called.\n     *  Note: a function called as part of the update cycle cannot have any side\n     *  effect (such as updating a record), so it is usually necessary to keep\n     *  this value to false. Keeping it to false also improves performance by\n     *  making sure all side effects of update cycle (such as the update of\n     *  computed fields) have been processed before `onChange` is called (it\n     *  could otherwise be called multiple times in quick succession).\n     */\n    constructor({ name, onChange, isLocking = true, isPartOfUpdateCycle = false }) {\n        this.isLocking = isLocking;\n        this.isPartOfUpdateCycle = isPartOfUpdateCycle;\n        this.name = name;\n        this.onChange = onChange;\n        /**\n         * Set of localIds that have been accessed on model manager between the\n         * last call to `startListening` and `stopListening` with this listener\n         * as parameter.\n         * Each localId has its own way to know the listeners that are observing\n         * it (to be able to notify them if it changes). This set holds the\n         * inverse of that information, which is useful to be able to remove\n         * this listener (when the need arises) from those localIds without\n         * having to verify the presence of this listener on each possible\n         * localId one by one.\n         */\n        this.lastObservedLocalIds = new Set();\n        /**\n         * Map between localIds and a set of fields on those localIds that have\n         * been accessed on model manager between the last call to\n         * `startListening` and `stopListening` with this listener as parameter.\n         * Each field of each localId has its own way to know the listeners that\n         * are observing it (to be able to notify them if it changes). This map\n         * holds the inverse of that information, which is useful to be able to\n         * remove this listener (when the need arises) from those fields without\n         * having to verify the presence of this listener on each possible field\n         * one by one.\n         */\n        this.lastObservedFieldsByLocalId = new Map();\n        /**\n         * Set of Model that have been accessed with `all()` on model manager\n         * between the last call to `startListening` and `stopListening` with\n         * this listener as parameter.\n         * Each Model has its own way to know the listeners that are observing\n         * it (to be able to notify them if it changes). This set holds the\n         * inverse of that information, which is useful to be able to remove\n         * this listener (when the need arises) from those Model without having\n         * to verify the presence of this listener on each possible Model one by\n         * one.\n         */\n        this.lastObservedAllByModel = new Set();\n    }\n\n    /**\n     * @returns {string}\n     */\n    toString() {\n        return `listener(${this.name})`;\n    }\n}\n", "/** @odoo-module **/\n\nimport { registry } from '@mail/model/model_core';\nimport { ModelField } from '@mail/model/model_field';\nimport { FieldCommand, unlinkAll } from '@mail/model/model_field_command';\nimport { RelationSet } from '@mail/model/model_field_relation_set';\nimport { Listener } from '@mail/model/model_listener';\nimport { followRelations } from '@mail/model/model_utils';\nimport { patchClassMethods, patchInstanceMethods } from '@mail/utils/utils';\nimport { makeDeferred } from '@mail/utils/deferred/deferred';\n\n/**\n * Object that manage models and records, notably their update cycle: whenever\n * some records are requested for update (either with model static method\n * `create()` or record method `update()`), this object processes them with\n * direct field & and computed field updates.\n */\nexport class ModelManager {\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    constructor(env) {\n        /**\n         * The messaging env.\n         */\n        this.env = env;\n        /**\n         * Promise which becomes resolved when messaging is created. Useful for\n         * waiting before accessing `this.messaging`.\n         */\n        this.messagingCreatedPromise = makeDeferred();\n        /**\n         * Promise which becomes resolved when messaging is initialized. Useful\n         * for waiting before accessing `this.messaging`.\n         */\n        this.messagingInitializedPromise = makeDeferred();\n\n        //----------------------------------------------------------------------\n        // Various variables that are necessary to handle an update cycle. The\n        // goal of having an update cycle is to delay the execution of computes,\n        // life-cycle hooks and potential UI re-renders until the last possible\n        // moment, for performance reasons.\n        //----------------------------------------------------------------------\n\n        /**\n         * Set of records that have been created during the current update\n         * cycle and for which the compute/related methods still have to be\n         * executed a first time.\n         */\n        this._createdRecordsComputes = new Set();\n        /**\n         * Set of records that have been created during the current update\n         * cycle and for which the _created method still has to be executed.\n         */\n        this._createdRecordsCreated = new Set();\n        /**\n         * Set of records that have been created during the current update\n         * cycle and for which the onChange methods still have to be executed\n         * a first time.\n         */\n        this._createdRecordsOnChange = new Set();\n        /**\n         * Set of active listeners. Useful to be able to register which records\n         * or fields they accessed to be able to notify them when those change.\n         */\n        this._listeners = new Set();\n        /**\n         * Map between Model and a set of listeners that are using all() on that\n         * model.\n         */\n        this._listenersObservingAllByModel = new Map();\n        /**\n         * Map between localId and a set of listeners that are using it. The\n         * following fields use localId instead of record reference because the\n         * listener might try to use a record that doesn't exist yet.\n         */\n        this._listenersObservingLocalId = new Map();\n        /**\n         * Map between fields of localId and a set of listeners that are\n         * using it.\n         */\n        this._listenersObservingFieldOfLocalId = new Map();\n        /**\n         * Map of listeners that should be notified at the end of the current\n         * update cycle. Value contains list of info to help for debug.\n         */\n        this._listenersToNotifyAfterUpdateCycle = new Map();\n        /**\n         * Map of listeners that should be notified as part of the current\n         * update cycle. Value contains list of info to help for debug.\n         */\n        this._listenersToNotifyInUpdateCycle = new Map();\n        /**\n         * All generated models. Keys are model name, values are model class.\n         */\n        this.models = {};\n        /**\n         * Set of records that have been updated during the current update cycle\n         * and for which required fields check still has to be executed.\n         */\n        this._updatedRecordsCheckRequired = new Set();\n        /**\n         * Determines whether this model manager should run in debug mode. Debug\n         * mode adds more integrity checks and more verbose error messages, at\n         * the cost of performance.\n         */\n        this.isDebug = false;\n    }\n\n    /**\n     * Starts the generation of models as soon as all files have been loaded and\n     * starts messaging itself afterwards.\n     *\n     * @param {Object} values field name/value pairs to give at messaging create\n     */\n    async start(values) {\n        if (document.readyState === 'loading') {\n            await new Promise(resolve => {\n                /**\n                 * Called when all JS resources are loaded. This is useful in order\n                 * to do some processing after other JS files have been parsed, for\n                 * example new models or patched models that are coming from\n                 * other modules, because some of those patches might need to be\n                 * applied before messaging initialization.\n                 */\n                window.addEventListener('load', resolve);\n            });\n        }\n        /**\n         * All JS resources are loaded, but not necessarily processed.\n         * We assume no messaging-related modules return any Promise,\n         * therefore they should be processed *at most* asynchronously at\n         * \"Promise time\".\n         */\n        await new Promise(resolve => setTimeout(resolve));\n        /**\n         * Some models require session data, like locale text direction (depends on\n         * fully loaded translation).\n         */\n        await this.env.session.is_bound;\n        /**\n         * Generate the models.\n         */\n        this.models = this._generateModels();\n        /**\n         * Create the messaging singleton record.\n         */\n        const messaging = this.models['mail.messaging'].insert(values);\n        Object.assign(odoo.__DEBUG__, { messaging });\n        this.messagingCreatedPromise.resolve();\n        await this.messaging.start();\n        this.messagingInitializedPromise.resolve();\n    }\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Returns all records of provided model that match provided criteria.\n     *\n     * @param {mail.model} Model class\n     * @param {function} [filterFunc]\n     * @returns {mail.model[]} records matching criteria.\n     */\n    all(Model, filterFunc) {\n        for (const listener of this._listeners) {\n            listener.lastObservedAllByModel.add(Model);\n            const entry = this._listenersObservingAllByModel.get(Model);\n            const info = {\n                listener,\n                reason: `all() - ${Model}`,\n            };\n            if (entry.has(listener)) {\n                entry.get(listener).push(info);\n            } else {\n                entry.set(listener, [info]);\n            }\n        }\n        const allRecords = Object.values(Model.__records);\n        if (filterFunc) {\n            return allRecords.filter(filterFunc);\n        }\n        return allRecords;\n    }\n\n    /**\n     * @deprecated use insert instead\n     */\n    create(Model, data = {}) {\n        return this.insert(Model, data);\n    }\n\n    /**\n     * Delete the record. After this operation, it's as if this record never\n     * existed. Note that relation are removed, which may delete more relations\n     * if some of them are causal.\n     *\n     * @param {mail.model} record\n     */\n    delete(record) {\n        this._delete(record);\n        this._flushUpdateCycle();\n    }\n\n    /**\n     * Returns whether the given record still exists.\n     *\n     * @param {mail.model} Model class\n     * @param {mail.model} record\n     * @returns {boolean}\n     */\n    exists(Model, record) {\n        const existingRecord = Model.__records[record.localId];\n        return Boolean(existingRecord && existingRecord === record);\n    }\n\n    /**\n     * Get the record of provided model that has provided\n     * criteria, if it exists.\n     *\n     * @param {mail.model} Model class\n     * @param {function} findFunc\n     * @returns {mail.model|undefined} the record of model matching criteria, if\n     *   exists.\n     */\n    find(Model, findFunc) {\n        return this.all(Model).find(findFunc);\n    }\n\n    /**\n     * Gets the unique record of provided model that matches the given\n     * identifying data, if it exists.\n     *\n     * @param {mail.model} Model class\n     * @param {Object} data\n     * @returns {mail.model|undefined}\n     */\n    findFromIdentifyingData(Model, data) {\n        return this.get(Model, this._getRecordIndex(Model, data));\n    }\n\n    /**\n     * This method returns the record of provided model that matches provided\n     * local id. Useful to convert a local id to a record.\n     * Note that even if there's a record in the system having provided local\n     * id, if the resulting record is not an instance of this model, this getter\n     * assumes the record does not exist.\n     *\n     * @param {mail.model} Model class\n     * @param {string} localId\n     * @param {Object} param2\n     * @param {boolean} [param2.isCheckingInheritance=false]\n     * @returns {mail.model|undefined} record, if exists\n     */\n    get(Model, localId, { isCheckingInheritance = false } = {}) {\n        if (!localId) {\n            return;\n        }\n        if (!isCheckingInheritance && this.isDebug) {\n            const modelName = localId.split('(')[0];\n            if (modelName !== Model.modelName) {\n                throw Error(`wrong format of localId ${localId} for ${Model}.`);\n            }\n        }\n        for (const listener of this._listeners) {\n            listener.lastObservedLocalIds.add(localId);\n            if (!this._listenersObservingLocalId.has(localId)) {\n                this._listenersObservingLocalId.set(localId, new Map());\n            }\n            const entry = this._listenersObservingLocalId.get(localId);\n            const info = {\n                listener,\n                reason: `get record - ${localId}`,\n            };\n            if (entry.has(listener)) {\n                entry.get(listener).push(info);\n            } else {\n                entry.set(listener, [info]);\n            }\n        }\n        const record = Model.__records[localId];\n        if (record) {\n            return record;\n        }\n        if (!isCheckingInheritance) {\n            return;\n        }\n        // support for inherited models (eg. relation targeting `mail.model`)\n        for (const SubModel of Object.values(this.models)) {\n            if (!(SubModel.prototype instanceof Model)) {\n                continue;\n            }\n            const record = SubModel.__records[localId];\n            if (record) {\n                return record;\n            }\n        }\n        return;\n    }\n\n    /**\n     * Returns the messaging record once it is initialized. This method should\n     * be considered the main entry point to the messaging system for outside\n     * code.\n     *\n     * @returns {mail.messaging}\n     **/\n    async getMessaging() {\n        await this.messagingCreatedPromise;\n        await this.messagingInitializedPromise;\n        return this.messaging;\n    }\n\n    /**\n     * This method creates a record or updates one of provided Model, based on\n     * provided data. This method assumes that records are uniquely identifiable\n     * per \"unique find\" criteria from data on Model.\n     *\n     * @param {mail.model} Model class\n     * @param {Object|Object[]} data\n     *  If data is an iterable, multiple records will be created/updated.\n     * @returns {mail.model|mail.model[]} created or updated record(s).\n     */\n    insert(Model, data) {\n        const res = this._insert(Model, data);\n        this._flushUpdateCycle();\n        return res;\n    }\n\n    /**\n     * Returns the messaging singleton associated to this model manager.\n     *\n     * @returns {mail.messaging|undefined}\n     */\n    get messaging() {\n        if (!this.models['mail.messaging']) {\n            return undefined;\n        }\n        // Use \"findFromIdentifyingData\" specifically to ensure the record still\n        // exists and to ensure listeners are properly notified of this access.\n        return this.models['mail.messaging'].findFromIdentifyingData({});\n    }\n\n    /**\n     * Removes a listener, with the same object reference as given to `startListening`.\n     * Removing the listener effectively makes its `onChange` function no longer\n     * called.\n     *\n     * @param {Listener} listener\n     */\n    removeListener(listener) {\n        this._listeners.delete(listener);\n        this._listenersToNotifyInUpdateCycle.delete(listener);\n        this._listenersToNotifyAfterUpdateCycle.delete(listener);\n        for (const localId of listener.lastObservedLocalIds) {\n            this._listenersObservingLocalId.get(localId).delete(listener);\n            const listenersObservingFieldOfLocalId = this._listenersObservingFieldOfLocalId.get(localId);\n            for (const field of listener.lastObservedFieldsByLocalId.get(localId) || []) {\n                listenersObservingFieldOfLocalId.get(field).delete(listener);\n            }\n        }\n        for (const Model of listener.lastObservedAllByModel) {\n            this._listenersObservingAllByModel.get(Model).delete(listener);\n        }\n        listener.lastObservedLocalIds.clear();\n        listener.lastObservedFieldsByLocalId.clear();\n        listener.lastObservedAllByModel.clear();\n    }\n\n    /**\n     * Starts a listener. All records or fields accessed between `startListening`\n     * and `stopListening` will be saved. When their value later changes,\n     * `listener.onChange` will be called.\n     *\n     * @param {Listener} listener\n     */\n    startListening(listener) {\n        this.removeListener(listener);\n        this._listeners.add(listener);\n    }\n\n    /**\n     * Stops a listener, with the same object reference as given to `startListening`.\n     *\n     * @param {Listener} listener\n     */\n    stopListening(listener) {\n        this._listeners.delete(listener);\n    }\n\n    /**\n     * Process an update on provided record with provided data. Updating\n     * a record consists of applying direct updates first (i.e. explicit\n     * ones from `data`) and then indirect ones (i.e. compute/related fields\n     * and \"after updates\").\n     *\n     * @param {mail.model} record\n     * @param {Object} data\n     * @returns {boolean} whether any value changed for the current record\n     */\n    update(record, data) {\n        const res = this._update(record, data);\n        this._flushUpdateCycle();\n        return res;\n    }\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Returns the given data object completed with the default values of the\n     * given model.\n     *\n     * @private\n     * @param {mail.model} Model class\n     * @param {Object} [data={}]\n     */\n    _addDefaultData(Model, data = {}) {\n        const data2 = {};\n        for (const field of Model.__fieldList) {\n            // `undefined` should have the same effect as not passing the field\n            if (data[field.fieldName] !== undefined) {\n                data2[field.fieldName] = data[field.fieldName];\n            } else if (field.default !== undefined) {\n                data2[field.fieldName] = field.default;\n            }\n        }\n        return data2;\n    }\n\n    /**\n     * @private\n     * @param {mail.model} Model class\n     * @param {Object} patch\n     */\n    _applyModelPatchFields(Model, patch) {\n        for (const [fieldName, field] of Object.entries(patch)) {\n            Model.fields[fieldName] = field;\n        }\n    }\n\n    /**\n     * @private\n     * @param {Object} Models\n     * @throws {Error} in case some declared fields are not correct.\n     */\n    _checkDeclaredFieldsOnModels(Models) {\n        for (const Model of Object.values(Models)) {\n            for (const fieldName in Model.fields) {\n                const field = Model.fields[fieldName];\n                // 0. Forbidden name.\n                if (fieldName in Model.prototype) {\n                    throw new Error(`Field \"${Model}/${fieldName}\" has a forbidden name.`);\n                }\n                // 1. Field type is required.\n                if (!(['attribute', 'relation'].includes(field.fieldType))) {\n                    throw new Error(`Field \"${Model}/${fieldName}\" has unsupported type ${field.fieldType}.`);\n                }\n                // 2. Invalid keys based on field type.\n                if (field.fieldType === 'attribute') {\n                    const invalidKeys = Object.keys(field).filter(key =>\n                        ![\n                            'compute',\n                            'default',\n                            'dependencies',\n                            'fieldType',\n                            'readonly',\n                            'related',\n                            'required',\n                            'sum',\n                        ].includes(key)\n                    );\n                    if (invalidKeys.length > 0) {\n                        throw new Error(`Field \"${Model}/${fieldName}\" contains some invalid keys: \"${invalidKeys.join(\", \")}\".`);\n                    }\n                }\n                if (field.fieldType === 'relation') {\n                    const invalidKeys = Object.keys(field).filter(key =>\n                        ![\n                            'compute',\n                            'default',\n                            'dependencies',\n                            'fieldType',\n                            'inverse',\n                            'isCausal',\n                            'readonly',\n                            'related',\n                            'relationType',\n                            'required',\n                            'sort',\n                            'to',\n                        ].includes(key)\n                    );\n                    if (invalidKeys.length > 0) {\n                        throw new Error(`Field \"${Model}/${fieldName}\" contains some invalid keys: \"${invalidKeys.join(\", \")}\".`);\n                    }\n                    if (!Models[field.to]) {\n                        throw new Error(`Relational field \"${Model}/${fieldName}\" targets to unknown model name \"${field.to}\".`);\n                    }\n                    if (field.isCausal && !(['one2many', 'one2one'].includes(field.relationType))) {\n                        throw new Error(`Relational field \"${Model}/${fieldName}\" has \"isCausal\" true with a relation of type \"${field.relationType}\" but \"isCausal\" is only supported for \"one2many\" and \"one2one\".`);\n                    }\n                    if (field.required && !(['one2one', 'many2one'].includes(field.relationType))) {\n                        throw new Error(`Relational field \"${Model}/${fieldName}\" has \"required\" true with a relation of type \"${field.relationType}\" but \"required\" is only supported for \"one2one\" and \"many2one\".`);\n                    }\n                    if (field.sort && !(['one2many', 'many2many'].includes(field.relationType))) {\n                        throw new Error(`Relational field \"${Model}/${fieldName}\" has \"sort\" with a relation of type \"${field.relationType}\" but \"sort\" is only supported for \"one2many\" and \"many2many\".`);\n                    }\n                }\n                // 3. Computed field.\n                if (field.compute && !(typeof field.compute === 'string')) {\n                    throw new Error(`Field \"${Model}/${fieldName}\" property \"compute\" must be a string (instance method name).`);\n                }\n                if (field.compute && !(Model.prototype[field.compute])) {\n                    throw new Error(`Field \"${Model}/${fieldName}\" property \"compute\" does not refer to an instance method of this Model.`);\n                }\n                // 4. Related field.\n                if (field.compute && field.related) {\n                    throw new Error(`Field \"${Model}/${fieldName}\" cannot be a related and compute field at the same time.`);\n                }\n                if (field.related) {\n                    if (!(typeof field.related === 'string')) {\n                        throw new Error(`Field \"${Model}/${fieldName}\" property \"related\" has invalid format.`);\n                    }\n                    const [relationName, relatedFieldName, other] = field.related.split('.');\n                    if (!relationName || !relatedFieldName || other) {\n                        throw new Error(`Field \"${Model}/${fieldName}\" property \"related\" has invalid format.`);\n                    }\n                    // find relation on self or parents.\n                    let relatedRelation;\n                    let TargetModel = Model;\n                    while (Models[TargetModel.modelName] && !relatedRelation) {\n                        if (TargetModel.fields) {\n                            relatedRelation = TargetModel.fields[relationName];\n                        }\n                        TargetModel = TargetModel.__proto__;\n                    }\n                    if (!relatedRelation) {\n                        throw new Error(`Related field \"${Model}/${fieldName}\" relates to unknown relation name \"${relationName}\".`);\n                    }\n                    if (relatedRelation.fieldType !== 'relation') {\n                        throw new Error(`Related field \"${Model}/${fieldName}\" relates to non-relational field \"${relationName}\".`);\n                    }\n                    // Assuming related relation is valid...\n                    // find field name on related model or any parents.\n                    const RelatedModel = Models[relatedRelation.to];\n                    let relatedField;\n                    TargetModel = RelatedModel;\n                    while (Models[TargetModel.modelName] && !relatedField) {\n                        if (TargetModel.fields) {\n                            relatedField = TargetModel.fields[relatedFieldName];\n                        }\n                        TargetModel = TargetModel.__proto__;\n                    }\n                    if (!relatedField) {\n                        throw new Error(`Related field \"${Model}/${fieldName}\" relates to unknown related model field \"${relatedFieldName}\".`);\n                    }\n                    if (relatedField.fieldType !== field.fieldType) {\n                        throw new Error(`Related field \"${Model}/${fieldName}\" has mismatch type with its related model field.`);\n                    }\n                    if (\n                        relatedField.fieldType === 'relation' &&\n                        relatedField.to !== field.to\n                    ) {\n                        throw new Error(`Related field \"${Model}/${fieldName}\" has mismatch target model name with its related model field.`);\n                    }\n                }\n            }\n        }\n    }\n\n    /**\n     * @private\n     * @param {Object} Models\n     * @throws {Error} in case some fields are not correct.\n     */\n    _checkProcessedFieldsOnModels(Models) {\n        for (const Model of Object.values(Models)) {\n            for (const field of Model.__fieldList) {\n                const fieldName = field.fieldName;\n                if (!(['attribute', 'relation'].includes(field.fieldType))) {\n                    throw new Error(`Field \"${Model}/${fieldName}\" has unsupported type ${field.fieldType}.`);\n                }\n                if (field.compute && field.related) {\n                    throw new Error(`Field \"${Model}/${fieldName}\" cannot be a related and compute field at the same time.`);\n                }\n                if (field.fieldType === 'attribute') {\n                    continue;\n                }\n                if (!field.relationType) {\n                    throw new Error(\n                        `Field \"${Model}/${fieldName}\" must define a relation type in \"relationType\".`\n                    );\n                }\n                if (!(['one2one', 'one2many', 'many2one', 'many2many'].includes(field.relationType))) {\n                    throw new Error(\n                        `Field \"${Model}/${fieldName}\" has invalid relation type \"${field.relationType}\".`\n                    );\n                }\n                if (!field.inverse) {\n                    throw new Error(\n                        `Field \"${\n                            Model.modelName\n                        }/${\n                            fieldName\n                        }\" must define an inverse relation name in \"inverse\".`\n                    );\n                }\n                if (!field.to) {\n                    throw new Error(\n                        `Relation \"${\n                            Model.modelNames\n                        }/${\n                            fieldName\n                        }\" must define a model name in \"to\" (1st positional parameter of relation field helpers).`\n                    );\n                }\n                const RelatedModel = Models[field.to];\n                if (!RelatedModel) {\n                    throw new Error(\n                        `Model name of relation \"${Model}/${fieldName}\" does not exist.`\n                    );\n                }\n                const inverseField = RelatedModel.__fieldMap[field.inverse];\n                if (!inverseField) {\n                    throw new Error(\n                        `Relation \"${\n                            Model.modelName\n                        }/${\n                            fieldName\n                        }\" has no inverse field \"${RelatedModel}/${field.inverse}\".`\n                    );\n                }\n                if (inverseField.inverse !== fieldName) {\n                    throw new Error(\n                        `Inverse field name of relation \"${\n                            Model.modelName\n                        }/${\n                            fieldName\n                        }\" does not match with field name of relation \"${\n                            RelatedModel.modelName\n                        }/${\n                            inverseField.inverse\n                        }\".`\n                    );\n                }\n                const allSelfAndParentNames = [];\n                let TargetModel = Model;\n                while (TargetModel) {\n                    allSelfAndParentNames.push(TargetModel.modelName);\n                    TargetModel = TargetModel.__proto__;\n                }\n                if (!allSelfAndParentNames.includes(inverseField.to)) {\n                    throw new Error(\n                        `Relation \"${\n                            Model.modelName\n                        }/${\n                            fieldName\n                        }\" has inverse relation \"${\n                            RelatedModel.modelName\n                        }/${\n                            field.inverse\n                        }\" misconfigured (currently \"${\n                            inverseField.to\n                        }\", should instead refer to this model or parented models: ${\n                            allSelfAndParentNames.map(name => `\"${name}\"`).join(', ')\n                        }?)`\n                    );\n                }\n                if (\n                    (field.relationType === 'many2many' && inverseField.relationType !== 'many2many') ||\n                    (field.relationType === 'one2one' && inverseField.relationType !== 'one2one') ||\n                    (field.relationType === 'one2many' && inverseField.relationType !== 'many2one') ||\n                    (field.relationType === 'many2one' && inverseField.relationType !== 'one2many')\n                ) {\n                    throw new Error(\n                        `Mismatch relations types \"${\n                            Model.modelName\n                        }/${\n                            fieldName\n                        }\" (${\n                            field.relationType\n                        }) and \"${\n                            RelatedModel.modelName\n                        }/${\n                            field.inverse\n                        }\" (${\n                            inverseField.relationType\n                        }).`\n                    );\n                }\n            }\n            for (const identifyingField of Model.__identifyingFieldsFlattened) {\n                const field = Model.__fieldMap[identifyingField];\n                if (!field) {\n                    throw new Error(`Identifying field \"${identifyingField}\" is not a field on model \"${Model}\".`);\n                }\n                if (!field.readonly) {\n                    throw new Error(`Identifying field \"${identifyingField}\" on model \"${Model}\" is lacking readonly.`);\n                }\n                if (field.to) {\n                    if (!(['one2one', 'many2one'].includes(field.relationType))) {\n                        throw new Error(`Identifying field \"${identifyingField}\" on model \"${Model}\" has a relation of type \"${field.relationType}\" but identifying field is only supported for \"one2one\" and \"many2one\".`);\n                    }\n                    const RelatedModel = Models[field.to];\n                    const inverseField = RelatedModel.__fieldMap[field.inverse];\n                    if (!inverseField.isCausal) {\n                        throw new Error(`Identifying field \"${identifyingField}\" on model \"${Model}\" has an inverse \"${field.inverse}\" not declared as \"isCausal\" on \"${RelatedModel}\".`);\n                    }\n                }\n            }\n        }\n    }\n\n    /**\n     * @private\n     * @param {mail.model} Model class\n     * @param {string} localId\n     * @returns {mail.model}\n     */\n    _create(Model, localId) {\n        /**\n         * Prepare record state. Assign various keys and values that are\n         * expected to be found on every record.\n         */\n        const nonProxyRecord = new Model({ localId, valid: true });\n        const record = !this.isDebug ? nonProxyRecord : new Proxy(nonProxyRecord, {\n            get: function getFromProxy(record, prop) {\n                if (\n                    !Model.__fieldMap[prop] &&\n                    !['_super', 'then'].includes(prop) &&\n                    typeof prop !== 'symbol' &&\n                    !(prop in record)\n                ) {\n                    console.warn(`non-field read \"${prop}\" on ${record}`);\n                }\n                return record[prop];\n            },\n        });\n        // Ensure X2many relations are Set initially (other fields can stay undefined).\n        for (const field of Model.__fieldList) {\n            record.__values[field.fieldName] = undefined;\n            if (field.fieldType === 'relation') {\n                if (['one2many', 'many2many'].includes(field.relationType)) {\n                    record.__values[field.fieldName] = new RelationSet(record, field);\n                }\n            }\n        }\n        if (!this._listenersObservingLocalId.has(localId)) {\n            this._listenersObservingLocalId.set(localId, new Map());\n        }\n        this._listenersObservingFieldOfLocalId.set(localId, new Map());\n        for (const field of Model.__fieldList) {\n            this._listenersObservingFieldOfLocalId.get(localId).set(field, new Map());\n        }\n        /**\n         * Register record and invoke the life-cycle hook `_willCreate.`\n         * After this step the record is in a functioning state and it is\n         * considered existing.\n         */\n        Model.__records[record.localId] = record;\n        record._willCreate();\n        /**\n         * Register post processing operation that are to be delayed at\n         * the end of the update cycle.\n         */\n        this._createdRecordsComputes.add(record);\n        this._createdRecordsCreated.add(record);\n        this._createdRecordsOnChange.add(record);\n        for (const [listener, infoList] of this._listenersObservingAllByModel.get(Model).entries()) {\n            this._markListenerToNotify(listener, {\n                listener,\n                reason: `_create: allByModel - ${record}`,\n                infoList,\n            });\n        }\n        for (const [listener, infoList] of this._listenersObservingLocalId.get(localId).entries()) {\n            this._markListenerToNotify(listener, {\n                listener,\n                reason: `_create: localId - ${record}`,\n                infoList,\n            });\n        }\n        return record;\n    }\n\n    /**\n     * @private\n     * @param {mail.model} record\n     */\n    _delete(record) {\n        this._ensureNoLockingListener();\n        const Model = record.constructor;\n        if (!record.exists()) {\n            throw Error(`Cannot delete already deleted record ${record.localId}.`);\n        }\n        record._willDelete();\n        for (const listener of record.__listeners) {\n            this.removeListener(listener);\n        }\n        for (const field of Model.__fieldList) {\n            if (field.fieldType === 'relation') {\n                // ensure inverses are properly unlinked\n                field.parseAndExecuteCommands(record, unlinkAll(), { allowWriteReadonly: true });\n            }\n        }\n        this._createdRecordsComputes.delete(record);\n        this._createdRecordsCreated.delete(record);\n        this._createdRecordsOnChange.delete(record);\n        this._updatedRecordsCheckRequired.delete(record);\n        for (const [listener, infoList] of this._listenersObservingLocalId.get(record.localId).entries()) {\n            this._markListenerToNotify(listener, {\n                listener,\n                reason: `_delete: localId - ${record}`,\n                infoList,\n            });\n        }\n        for (const [listener, infoList] of this._listenersObservingAllByModel.get(Model).entries()) {\n            this._markListenerToNotify(listener, {\n                listener,\n                reason: `_delete: allByModel - ${record}`,\n                infoList,\n            });\n        }\n        delete Model.__records[record.localId];\n    }\n\n    /**\n     * Ensures there is currently no locking listener on this model manager, and\n     * throws if there is one.\n     *\n     * @throws {Error}\n     */\n    _ensureNoLockingListener() {\n        for (const listener of this._listeners) {\n            if (listener.isLocking) {\n                throw Error(`Model manager locked by ${listener}. It is not allowed to insert/update/delete from inside a lock.`);\n            }\n        }\n    }\n\n    /**\n     * Executes the compute methods of the created records.\n     *\n     * @returns {boolean} whether any change happened\n     */\n    _executeCreatedRecordsComputes() {\n        const hasChanged = this._createdRecordsComputes.size > 0;\n        for (const record of this._createdRecordsComputes) {\n            // Delete at every step to avoid recursion, indeed compute/related\n            // method might trigger an update cycle itself.\n            this._createdRecordsComputes.delete(record);\n            if (!record.exists()) {\n                throw Error(`Cannot start compute/related for already deleted ${record}.`);\n            }\n            const listeners = [];\n            for (const field of record.constructor.__fieldList) {\n                if (field.compute) {\n                    const listener = new Listener({\n                        isPartOfUpdateCycle: true,\n                        name: `compute ${field} of ${record}`,\n                        onChange: (info) => {\n                            this.startListening(listener);\n                            const res = record[field.compute]();\n                            this.stopListening(listener);\n                            this._update(record, { [field.fieldName]: res }, { allowWriteReadonly: true });\n                        },\n                    });\n                    listeners.push(listener);\n                }\n                if (field.related) {\n                    const listener = new Listener({\n                        isPartOfUpdateCycle: true,\n                        name: `related ${field} of ${record}`,\n                        onChange: (info) => {\n                            this.startListening(listener);\n                            const res = field.computeRelated(record);\n                            this.stopListening(listener);\n                            this._update(record, { [field.fieldName]: res }, { allowWriteReadonly: true });\n                        },\n                    });\n                    listeners.push(listener);\n                }\n            }\n            record.__listeners.push(...listeners);\n            for (const listener of listeners) {\n                listener.onChange({\n                    listener,\n                    reason: `first call on ${record}`,\n                });\n            }\n        }\n        if (hasChanged) {\n            this._flushUpdateCycle();\n        }\n    }\n\n    /**\n     * Executes the _created method of the created records.\n     *\n     * @returns {boolean} whether any change happened\n     */\n    _executeCreatedRecordsCreated() {\n        for (const record of this._createdRecordsCreated) {\n            // Delete at every step to avoid recursion, indeed _created might\n            // trigger an update cycle itself.\n            this._createdRecordsCreated.delete(record);\n            if (!record.exists()) {\n                throw Error(`Cannot call _created for already deleted ${record}.`);\n            }\n            record._created();\n        }\n    }\n\n    /**\n     * Executes the onChange method of the created records.\n     *\n     * @returns {boolean} whether any change happened\n     */\n    _executeCreatedRecordsOnChange() {\n        for (const record of this._createdRecordsOnChange) {\n            // Delete at every step to avoid recursion, indeed _created\n            // might trigger an update cycle itself.\n            this._createdRecordsOnChange.delete(record);\n            if (!record.exists()) {\n                throw Error(`Cannot call onChange for already deleted ${record}.`);\n            }\n            for (const onChange of record.constructor.onChanges || []) {\n                const listener = new Listener({\n                    name: `${onChange} of ${record}`,\n                    onChange: (info) => {\n                        this.startListening(listener);\n                        for (const dependency of onChange.dependencies) {\n                            followRelations(record, dependency);\n                        }\n                        this.stopListening(listener);\n                        record[onChange.methodName]();\n                    },\n                });\n                record.__listeners.push(listener);\n                listener.onChange({\n                    listener,\n                    reason: `first call on ${record}`,\n                });\n            }\n        }\n    }\n\n\n    /**\n     * Executes the check of the required field of updated records.\n     *\n     * @returns {boolean} whether any change happened\n     */\n    _executeUpdatedRecordsCheckRequired() {\n        for (const record of this._updatedRecordsCheckRequired) {\n            for (const required of record.constructor.__requiredFieldsList) {\n                if (record[required.fieldName] === undefined) {\n                    throw Error(`required ${required} of ${record} is missing`);\n                }\n            }\n        }\n        this._updatedRecordsCheckRequired.clear();\n    }\n\n    /**\n     * Terminates an update cycle by executing its pending operations: execute\n     * computed fields, execute life-cycle hooks, update rev numbers.\n     *\n     * @private\n     */\n    _flushUpdateCycle(func) {\n        this._executeCreatedRecordsComputes();\n        this._notifyListenersInUpdateCycle();\n        this._executeUpdatedRecordsCheckRequired();\n        this._executeCreatedRecordsCreated();\n        this._executeCreatedRecordsOnChange();\n        this._notifyListenersAfterUpdateCycle();\n    }\n\n    /**\n     * @private\n     * @returns {Object}\n     * @throws {Error} in case it cannot generate models.\n     */\n    _generateModels() {\n        const allNames = Object.keys(registry);\n        const Models = {};\n        const generatedNames = [];\n        let toGenerateNames = [...allNames];\n        while (toGenerateNames.length > 0) {\n            const generatable = toGenerateNames.map(name => registry[name]).find(entry => {\n                let isGenerateable = true;\n                for (const dependencyName of entry.dependencies) {\n                    if (!generatedNames.includes(dependencyName)) {\n                        isGenerateable = false;\n                    }\n                }\n                return isGenerateable;\n            });\n            if (!generatable) {\n                throw new Error(`Cannot generate following Model: ${toGenerateNames.join(', ')}`);\n            }\n            if (!generatable.factory) {\n                throw new Error(`Missing factory for the following Model: ${generatable.name} (maybe check for typo in name?)`);\n            }\n            // Make model manager accessible from Model.\n            const Model = generatable.factory(Models);\n            Model.modelManager = this;\n            /**\n            * Contains all records. key is local id, while value is the record.\n            */\n            Model.__records = {};\n            if (!Model.hasOwnProperty('identifyingFields')) {\n                throw new Error(`${Model} is lacking identifying fields.`);\n            }\n            Model.__identifyingFields = Model.identifyingFields;\n            const identifyingFieldsFlattened = new Set();\n            for (const identifyingElement of Model.identifyingFields) {\n                const identifyingFields = typeof identifyingElement === 'string'\n                    ? [identifyingElement]\n                    : identifyingElement;\n                for (const identifyingField of identifyingFields) {\n                    identifyingFieldsFlattened.add(identifyingField);\n                }\n            }\n            Model.__identifyingFieldsFlattened = identifyingFieldsFlattened;\n            for (const patch of generatable.patches) {\n                switch (patch.type) {\n                    case 'class':\n                        patchClassMethods(Model, patch.name, patch.patch);\n                        break;\n                    case 'instance':\n                        patchInstanceMethods(Model, patch.name, patch.patch);\n                        break;\n                    case 'field':\n                        this._applyModelPatchFields(Model, patch.patch);\n                        break;\n                    case 'identifyingFields':\n                        patch.patch(Model.__identifyingFields);\n                        break;\n                }\n            }\n            if (!Object.prototype.hasOwnProperty.call(Model, 'modelName')) {\n                throw new Error(`Missing static property \"modelName\" on Model class \"${Model.name}\".`);\n            }\n            if (generatedNames.includes(Model.modelName)) {\n                throw new Error(`Duplicate model name \"${Model}\" shared on 2 distinct Model classes.`);\n            }\n            Models[Model.modelName] = Model;\n            generatedNames.push(Model.modelName);\n            toGenerateNames = toGenerateNames.filter(name => name !== Model.modelName);\n            this._listenersObservingAllByModel.set(Model, new Map());\n        }\n        /**\n         * Check that declared model fields are correct.\n         */\n        this._checkDeclaredFieldsOnModels(Models);\n        /**\n         * Process declared model fields definitions, so that these field\n         * definitions are much easier to use in the system. For instance, all\n         * relational field definitions have an inverse.\n         */\n        this._processDeclaredFieldsOnModels(Models);\n        /**\n         * Check that all model fields are correct, notably one relation\n         * should have matching reversed relation.\n         */\n        this._checkProcessedFieldsOnModels(Models);\n        return Models;\n    }\n\n    /**\n     * Returns an index on the given model for the given data.\n     *\n     * @param {mail.model} Model class\n     * @param {Object|mail.model} data insert data or record\n     * @returns {string}\n     */\n    _getRecordIndex(Model, data) {\n        return `${Model.modelName}(${Model.__identifyingFields.map(identifyingElement => {\n            const fieldName = typeof identifyingElement === 'string'\n                ? identifyingElement\n                : identifyingElement.reduce((fieldName, currentFieldName) => {\n                    const fieldValue = data[currentFieldName] !== undefined\n                        ? data[currentFieldName]\n                        : Model.__fieldMap[currentFieldName].default;\n                    if (fieldValue === undefined) {\n                        return fieldName;\n                    }\n                    if (fieldName) {\n                        throw new Error(`Identifying element on ${Model} with \"or\" value should have only one of the conditional values given in data. Currently have both ${fieldName} and ${currentFieldName}.`);\n                    }\n                    return currentFieldName;\n                }, undefined);\n            if (!fieldName) {\n                throw new Error(`Identifying element \"${identifyingElement}\" on ${Model} is lacking a value.`);\n            }\n            const fieldValue = data[fieldName] !== undefined\n                ? data[fieldName]\n                : Model.__fieldMap[fieldName].default;\n            if (fieldValue === undefined) {\n                throw new Error(`Identifying field \"${fieldName}\" on ${Model} is lacking a value.`);\n            }\n            const relationTo = Model.__fieldMap[fieldName].to;\n            if (!relationTo) {\n                return `${fieldName}: ${fieldValue}`;\n            }\n            const OtherModel = this.models[relationTo];\n            if (fieldValue instanceof OtherModel) {\n                return `${fieldName}: ${this._getRecordIndex(OtherModel, fieldValue)}`;\n            }\n            if (!(fieldValue instanceof FieldCommand)) {\n                throw new Error(`Identifying element \"${Model}/${fieldName}\" is expecting a command for relational field.`);\n            }\n            if (!['link', 'insert', 'replace', 'insert-and-replace'].includes(fieldValue._name)) {\n                throw new Error(`Identifying element \"${Model}/${fieldName}\" is expecting a command of type \"insert-and-replace\", \"replace\", \"insert\" or \"link\". \"${fieldValue._name}\" was given instead.`);\n            }\n            const relationValue = fieldValue._value;\n            if (!relationValue) {\n                throw new Error(`Identifying element \"${Model}/${fieldName}\" is lacking a relation value.`);\n            }\n            return `${fieldName}: ${this._getRecordIndex(OtherModel, relationValue)}`;\n        }).join(', ')})`;\n    }\n\n    /**\n     * @private\n     * @param {mail.model}\n     * @param {Object|Object[]} [data={}]\n     * @returns {mail.model|mail.model[]}\n     */\n    _insert(Model, data = {}) {\n        this._ensureNoLockingListener();\n        const isMulti = typeof data[Symbol.iterator] === 'function';\n        const dataList = isMulti ? data : [data];\n        const records = [];\n        for (const data of dataList) {\n            const localId = this._getRecordIndex(Model, data);\n            let record = Model.get(localId);\n            if (!record) {\n                record = this._create(Model, localId);\n                this._update(record, this._addDefaultData(Model, data), { allowWriteReadonly: true });\n            } else {\n                this._update(record, data);\n            }\n            records.push(record);\n        }\n        return isMulti ? records : records[0];\n    }\n\n    /**\n     * @private\n     * @param {mail.model} Model class\n     * @param {ModelField} field\n     * @returns {ModelField}\n     */\n    _makeInverseRelationField(Model, field) {\n        const relFunc =\n            field.relationType === 'many2many' ? ModelField.many2many\n            : field.relationType === 'many2one' ? ModelField.one2many\n            : field.relationType === 'one2many' ? ModelField.many2one\n            : field.relationType === 'one2one' ? ModelField.one2one\n            : undefined;\n        if (!relFunc) {\n            throw new Error(`Cannot compute inverse Relation of \"${Model}/${field.fieldName}\".`);\n        }\n        const inverseField = new ModelField(Object.assign(\n            {},\n            relFunc(Model.modelName, { inverse: field.fieldName }),\n            {\n                fieldName: `_inverse_${Model}/${field.fieldName}`,\n            }\n        ));\n        return inverseField;\n    }\n\n    /**\n     * Marks the given listener to be notified. This function should be called\n     * when the dependencies of a listener have changed, in order to inform the\n     * listener of the change at the proper time during the update cycle\n     * (according to its configuration).\n     *\n     * @private\n     * @param {Object} listener\n     */\n    _markListenerToNotify(listener, info) {\n        if (!(listener instanceof Listener)) {\n            throw new Error(`Listener is not a listener ${listener}`);\n        }\n        if (listener.isPartOfUpdateCycle) {\n            const entry = this._listenersToNotifyInUpdateCycle.get(listener);\n            if (entry) {\n                entry.push(info);\n            } else {\n                this._listenersToNotifyInUpdateCycle.set(listener, [info]);\n            }\n        }\n        if (!listener.isPartOfUpdateCycle) {\n            const entry = this._listenersToNotifyAfterUpdateCycle.get(listener);\n            if (entry) {\n                entry.push(info);\n            } else {\n                this._listenersToNotifyAfterUpdateCycle.set(listener, [info]);\n            }\n        }\n    }\n\n    /**\n     * Marks the given field of the given record as changed.\n     *\n     * @param {mail.model} record\n     * @param {ModelField} field\n     */\n    _markRecordFieldAsChanged(record, field) {\n        for (const [listener, infoList] of this._listenersObservingFieldOfLocalId.get(record.localId).get(field).entries()) {\n            this._markListenerToNotify(listener, {\n                listener,\n                reason: `_update: ${field} of ${record}`,\n                infoList,\n            });\n        }\n    }\n\n    /**\n     * Notifies the listeners that have been flagged to be notified and for\n     * which the `onChange` function was defined to be called after the update\n     * cycle.\n     *\n     * In particular this is the case of components using models that need to\n     * re-render and for records with \"on change\".\n     *\n     * @returns {boolean} whether any change happened\n     */\n    _notifyListenersAfterUpdateCycle() {\n        for (const [listener, infoList] of this._listenersToNotifyAfterUpdateCycle.entries()) {\n            this._listenersToNotifyAfterUpdateCycle.delete(listener);\n            listener.onChange(infoList);\n        }\n    }\n\n    /**\n     * Notifies the listeners that have been flagged to be notified and for\n     * which the `onChange` function was defined to be called while still in the\n     * update cycle.\n     *\n     * In particular this is the case of records with compute or related fields.\n     *\n     * Note: A double loop is used because calling the `onChange` function might\n     * lead to more listeners being flagged to be notified.\n     *\n     * @returns {boolean} whether any change happened\n     */\n    _notifyListenersInUpdateCycle() {\n        const hasChanged = this._listenersToNotifyInUpdateCycle.size > 0;\n        for (const [listener, infoList] of this._listenersToNotifyInUpdateCycle.entries()) {\n            this._listenersToNotifyInUpdateCycle.delete(listener);\n            listener.onChange(infoList);\n        }\n        if (hasChanged) {\n            this._flushUpdateCycle();\n        }\n    }\n\n    /**\n     * This function processes definition of declared fields in provided models.\n     * Basically, models have fields declared in static prop `fields`, and this\n     * function processes and modifies them in place so that they are fully\n     * configured. For instance, model relations need bi-directional mapping, but\n     * inverse relation may be omitted in declared field: this function auto-fill\n     * this inverse relation.\n     *\n     * @private\n     * @param {Object} Models\n     */\n    _processDeclaredFieldsOnModels(Models) {\n        /**\n         * 1. Prepare fields.\n         */\n        for (const Model of Object.values(Models)) {\n            if (!Object.prototype.hasOwnProperty.call(Model, 'fields')) {\n                Model.fields = {};\n            }\n            Model.inverseRelations = [];\n            const sumContributionsByFieldName = new Map();\n            // Make fields aware of their field name.\n            for (const [fieldName, fieldData] of Object.entries(Model.fields)) {\n                Model.fields[fieldName] = new ModelField(Object.assign({}, fieldData, {\n                    fieldName,\n                }));\n                if (fieldData.sum) {\n                    const [relationFieldName, contributionFieldName] = fieldData.sum.split('.');\n                    if (!sumContributionsByFieldName.has(relationFieldName)) {\n                        sumContributionsByFieldName.set(relationFieldName, []);\n                    }\n                    sumContributionsByFieldName.get(relationFieldName).push({\n                        from: contributionFieldName,\n                        to: fieldName,\n                    });\n                }\n            }\n            for (const [fieldName, sumContributions] of sumContributionsByFieldName) {\n                Model.fields[fieldName].sumContributions = sumContributions;\n            }\n        }\n        /**\n         * 2. Auto-generate definitions of undeclared inverse relations.\n         */\n        for (const Model of Object.values(Models)) {\n            for (const field of Object.values(Model.fields)) {\n                if (field.fieldType !== 'relation') {\n                    continue;\n                }\n                if (field.inverse) {\n                    continue;\n                }\n                const RelatedModel = Models[field.to];\n                const inverseField = this._makeInverseRelationField(Model, field);\n                field.inverse = inverseField.fieldName;\n                RelatedModel.fields[inverseField.fieldName] = inverseField;\n            }\n        }\n        /**\n         * 3. Extend definition of fields of a model with the definition of\n         * fields of its parents.\n         */\n        for (const Model of Object.values(Models)) {\n            Model.__combinedFields = {};\n            for (const field of Object.values(Model.fields)) {\n                Model.__combinedFields[field.fieldName] = field;\n            }\n            let TargetModel = Model.__proto__;\n            while (TargetModel && TargetModel.fields) {\n                for (const targetField of Object.values(TargetModel.fields)) {\n                    const field = Model.__combinedFields[targetField.fieldName];\n                    if (!field) {\n                        Model.__combinedFields[targetField.fieldName] = targetField;\n                    }\n                }\n                TargetModel = TargetModel.__proto__;\n            }\n        }\n        /**\n         * 4. Register final fields and make field accessors, to redirects field\n         * access to field getter and to prevent field from being written\n         * without calling update (which is necessary to process update cycle).\n         */\n        for (const Model of Object.values(Models)) {\n            // Object with fieldName/field as key/value pair, for quick access.\n            Model.__fieldMap = Model.__combinedFields;\n            // List of all fields, for iterating.\n            Model.__fieldList = Object.values(Model.__fieldMap);\n            Model.__requiredFieldsList = Model.__fieldList.filter(\n                field => field.required\n            );\n            // Add field accessors.\n            for (const field of Model.__fieldList) {\n                Object.defineProperty(Model.prototype, field.fieldName, {\n                    get: function getFieldValue() { // this is bound to record\n                        if (this.modelManager._listeners.size) {\n                            if (!this.modelManager._listenersObservingLocalId.has(this.localId)) {\n                                this.modelManager._listenersObservingLocalId.set(this.localId, new Map());\n                            }\n                            const entryLocalId = this.modelManager._listenersObservingLocalId.get(this.localId);\n                            const reason = `getField - ${field} of ${this}`;\n                            const entryField = this.modelManager._listenersObservingFieldOfLocalId.get(this.localId).get(field);\n                            for (const listener of this.modelManager._listeners) {\n                                listener.lastObservedLocalIds.add(this.localId);\n                                const info = { listener, reason };\n                                if (entryLocalId.has(listener)) {\n                                    entryLocalId.get(listener).push(info);\n                                } else {\n                                    entryLocalId.set(listener, [info]);\n                                }\n                                if (!listener.lastObservedFieldsByLocalId.has(this.localId)) {\n                                    listener.lastObservedFieldsByLocalId.set(this.localId, new Set());\n                                }\n                                listener.lastObservedFieldsByLocalId.get(this.localId).add(field);\n                                if (entryField.has(listener)) {\n                                    entryField.get(listener).push(info);\n                                } else {\n                                    entryField.set(listener, [info]);\n                                }\n                            }\n                        }\n                        return field.get(this);\n                    },\n                });\n            }\n            delete Model.__combinedFields;\n        }\n    }\n\n    /**\n     * @private\n     * @param {mail.model} record\n     * @param {Object} data\n     * @param {Object} [options]\n     * @param [options.allowWriteReadonly=false]\n     * @returns {boolean} whether any value changed for the current record\n     */\n    _update(record, data, options = {}) {\n        this._ensureNoLockingListener();\n        if (!record.exists()) {\n            throw Error(`Cannot update already deleted record ${record.localId}.`);\n        }\n        const { allowWriteReadonly = false } = options;\n        const Model = record.constructor;\n        let hasChanged = false;\n        const sortedFieldNames = Object.keys(data);\n        sortedFieldNames.sort((a, b) => {\n            // Always update identifying fields first because updating other relational field will\n            // trigger update of inverse field, which will require this identifying fields to be set\n            // beforehand to properly detect whether this is already linked or not on the inverse.\n            if (Model.__identifyingFieldsFlattened.has(a) && !Model.__identifyingFieldsFlattened.has(b)) {\n                return -1;\n            }\n            if (!Model.__identifyingFieldsFlattened.has(a) && Model.__identifyingFieldsFlattened.has(b)) {\n                return 1;\n            }\n            return 0;\n        });\n        for (const fieldName of sortedFieldNames) {\n            if (data[fieldName] === undefined) {\n                // `undefined` should have the same effect as not passing the field\n                continue;\n            }\n            const field = Model.__fieldMap[fieldName];\n            if (!field) {\n                throw new Error(`Cannot create/update record with data unrelated to a field. (record: \"${record.localId}\", non-field attempted update: \"${fieldName}\")`);\n            }\n            const newVal = data[fieldName];\n            if (!field.parseAndExecuteCommands(record, newVal, options)) {\n                continue;\n            }\n            if (field.readonly && !allowWriteReadonly) {\n                throw new Error(`read-only ${field} on ${record} was updated`);\n            }\n            hasChanged = true;\n            this._markRecordFieldAsChanged(record, field);\n        }\n        if (hasChanged) {\n            this._updatedRecordsCheckRequired.add(record);\n        }\n        return hasChanged;\n    }\n\n}\n", "/** @odoo-module **/\n\nexport class OnChange {\n    /**\n     * Creates a new \"on change\" definition. This \"on change\" should be provided\n     * to \"onChanges\" attribute of the concerned Model class to be notified of\n     * changes in the given dependencies.\n     *\n     * @constructor\n     * @param {Object} param\n     * @param {string[]} param.dependencies a list of fields on the associated\n     *  model to observe for change. x2one relational fields can be followed by\n     *  using dot notation to have dependencies on their own fields too.\n     * @param {string} param.methodName the name of a method on the associated\n     *  model that will be called when one of the dependencies changes.\n     */\n    constructor({ dependencies, methodName }) {\n        this.dependencies = dependencies;\n        this.methodName = methodName;\n    }\n\n    /**\n     * @returns {string}\n     */\n    toString() {\n        return `onChange(${this.methodName})`;\n    }\n}\n", "/** @odoo-module **/\n\n/**\n * Follows the given related path starting from the given record, and returns\n * the resulting value, or undefined if a relation can't be followed because it\n * is undefined.\n *\n * @param {mail.model} record\n * @param {string} relatedPath field names, dot separated to follow relations\n * @returns {any}\n */\nexport function followRelations(record, relatedPath) {\n    let target = record;\n    for (const field of relatedPath.split('.')) {\n        if (!target.constructor.__fieldMap[field]) {\n            throw Error(`field(${field}) does not exist on ${target}`);\n        }\n        target = target[field];\n        if (!target) {\n            break;\n        }\n    }\n    return target;\n}\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr, many2many, many2one } from '@mail/model/model_field';\nimport { clear, insert, unlink, unlinkAll } from '@mail/model/model_field_command';\n\nfunction factory(dependencies) {\n\n    class Activity extends dependencies['mail.model'] {\n\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        /**\n         * Delete the record from database and locally.\n         */\n        async deleteServerRecord() {\n            await this.async(() => this.env.services.rpc({\n                model: 'mail.activity',\n                method: 'unlink',\n                args: [[this.id]],\n            }));\n            this.delete();\n        }\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        /**\n         * @static\n         * @param {Object} data\n         * @return {Object}\n         */\n        static convertData(data) {\n            const data2 = {};\n            if ('activity_category' in data) {\n                data2.category = data.activity_category;\n            }\n            if ('can_write' in data) {\n                data2.canWrite = data.can_write;\n            }\n            if ('create_date' in data) {\n                data2.dateCreate = data.create_date;\n            }\n            if ('date_deadline' in data) {\n                data2.dateDeadline = data.date_deadline;\n            }\n            if ('chaining_type' in data) {\n                data2.chaining_type = data.chaining_type;\n            }\n            if ('icon' in data) {\n                data2.icon = data.icon;\n            }\n            if ('id' in data) {\n                data2.id = data.id;\n            }\n            if ('note' in data) {\n                data2.note = data.note;\n            }\n            if ('state' in data) {\n                data2.state = data.state;\n            }\n            if ('summary' in data) {\n                data2.summary = data.summary;\n            }\n\n            // relation\n            if ('activity_type_id' in data) {\n                if (!data.activity_type_id) {\n                    data2.type = unlinkAll();\n                } else {\n                    data2.type = insert({\n                        displayName: data.activity_type_id[1],\n                        id: data.activity_type_id[0],\n                    });\n                }\n            }\n            if ('create_uid' in data) {\n                if (!data.create_uid) {\n                    data2.creator = unlinkAll();\n                } else {\n                    data2.creator = insert({\n                        id: data.create_uid[0],\n                        display_name: data.create_uid[1],\n                    });\n                }\n            }\n            if ('mail_template_ids' in data) {\n                data2.mailTemplates = insert(data.mail_template_ids);\n            }\n            if ('res_id' in data && 'res_model' in data) {\n                data2.thread = insert({\n                    id: data.res_id,\n                    model: data.res_model,\n                });\n            }\n            if ('user_id' in data) {\n                if (!data.user_id) {\n                    data2.assignee = unlinkAll();\n                } else {\n                    data2.assignee = insert({\n                        id: data.user_id[0],\n                        display_name: data.user_id[1],\n                    });\n                }\n            }\n            if ('request_partner_id' in data) {\n                if (!data.request_partner_id) {\n                    data2.requestingPartner = unlink();\n                } else {\n                    data2.requestingPartner = insert({\n                        id: data.request_partner_id[0],\n                        display_name: data.request_partner_id[1],\n                    });\n                }\n            }\n\n            return data2;\n        }\n\n        /**\n         * Opens (legacy) form view dialog to edit current activity and updates\n         * the activity when dialog is closed.\n         *\n         * @return {Promise} promise that is fulfilled when the form has been closed\n         */\n        edit() {\n            const action = {\n                type: 'ir.actions.act_window',\n                name: this.env._t(\"Schedule Activity\"),\n                res_model: 'mail.activity',\n                view_mode: 'form',\n                views: [[false, 'form']],\n                target: 'new',\n                context: {\n                    default_res_id: this.thread.id,\n                    default_res_model: this.thread.model,\n                },\n                res_id: this.id,\n            };\n            return new Promise(resolve => {\n                this.env.bus.trigger('do-action', {\n                    action,\n                    options: {\n                        on_close: () => {\n                            resolve();\n                            this.fetchAndUpdate();\n                        },\n                    },\n                });\n            });\n        }\n\n        async fetchAndUpdate() {\n            const [data] = await this.env.services.rpc({\n                model: 'mail.activity',\n                method: 'activity_format',\n                args: [this.id],\n            }, { shadow: true }).catch(e => {\n                const errorName = e.message && e.message.data && e.message.data.name;\n                if (errorName === 'odoo.exceptions.MissingError') {\n                    return [];\n                } else {\n                    throw e;\n                }\n            });\n            let shouldDelete = false;\n            if (data) {\n                this.update(this.constructor.convertData(data));\n            } else {\n                shouldDelete = true;\n            }\n            this.thread.refreshActivities();\n            this.thread.refresh();\n            if (shouldDelete) {\n                this.delete();\n            }\n        }\n\n        /**\n         * @param {Object} param0\n         * @param {mail.attachment[]} [param0.attachments=[]]\n         * @param {string|boolean} [param0.feedback=false]\n         */\n        async markAsDone({ attachments = [], feedback = false }) {\n            const attachmentIds = attachments.map(attachment => attachment.id);\n            await this.async(() => this.env.services.rpc({\n                model: 'mail.activity',\n                method: 'action_feedback',\n                args: [[this.id]],\n                kwargs: {\n                    attachment_ids: attachmentIds,\n                    feedback,\n                },\n            }));\n            this.thread.refresh();\n            this.delete();\n        }\n\n        /**\n         * @param {Object} param0\n         * @param {string} param0.feedback\n         * @returns {Object}\n         */\n        async markAsDoneAndScheduleNext({ feedback }) {\n            const action = await this.async(() => this.env.services.rpc({\n                model: 'mail.activity',\n                method: 'action_feedback_schedule_next',\n                args: [[this.id]],\n                kwargs: { feedback },\n            }));\n            this.thread.refresh();\n            const thread = this.thread;\n            this.delete();\n            if (!action) {\n                thread.refreshActivities();\n                return;\n            }\n            this.env.bus.trigger('do-action', {\n                action,\n                options: {\n                    on_close: () => {\n                        thread.refreshActivities();\n                    },\n                },\n            });\n        }\n\n        //----------------------------------------------------------------------\n        // Private\n        //----------------------------------------------------------------------\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeIsCurrentPartnerAssignee() {\n            if (!this.assignee || !this.assignee.partner || !this.messaging.currentPartner) {\n                return false;\n            }\n            return this.assignee.partner === this.messaging.currentPartner;\n        }\n\n        /**\n         * Wysiwyg editor put `<p><br></p>` even without a note on the activity.\n         * This compute replaces this almost empty value by an actual empty\n         * value, to reduce the size the empty note takes on the UI.\n         *\n         * @private\n         * @returns {string|undefined}\n         */\n        _computeNote() {\n            if (this.note === '<p><br></p>') {\n                return clear();\n            }\n            return this.note;\n        }\n    }\n\n    Activity.fields = {\n        assignee: many2one('mail.user'),\n        attachments: many2many('mail.attachment', {\n            inverse: 'activities',\n        }),\n        canWrite: attr({\n            default: false,\n        }),\n        category: attr(),\n        creator: many2one('mail.user'),\n        dateCreate: attr(),\n        dateDeadline: attr(),\n        /**\n         * Backup of the feedback content of an activity to be marked as done in the popover.\n         * Feature-specific to restoring the feedback content when component is re-mounted.\n         * In all other cases, this field value should not be trusted.\n         */\n        feedbackBackup: attr(),\n        chaining_type: attr({\n            default: 'suggest',\n        }),\n        icon: attr(),\n        id: attr({\n            readonly: true,\n            required: true,\n        }),\n        isCurrentPartnerAssignee: attr({\n            compute: '_computeIsCurrentPartnerAssignee',\n            default: false,\n        }),\n        mailTemplates: many2many('mail.mail_template', {\n            inverse: 'activities',\n        }),\n        /**\n         * This value is meant to be returned by the server\n         * (and has been sanitized before stored into db).\n         * Do not use this value in a 't-raw' if the activity has been created\n         * directly from user input and not from server data as it's not escaped.\n         */\n        note: attr({\n            compute: '_computeNote',\n        }),\n        /**\n         * Determines that an activity is linked to a requesting partner or not.\n         * It will be used notably in website slides to know who triggered the\n         * \"request access\" activity.\n         * Also, be useful when the assigned user is different from the\n         * \"source\" or \"requesting\" partner.\n         */\n        requestingPartner: many2one('mail.partner'),\n        state: attr(),\n        summary: attr(),\n        /**\n         * Determines to which \"thread\" (using `mail.activity.mixin` on the\n         * server) `this` belongs to.\n         */\n        thread: many2one('mail.thread', {\n            inverse: 'activities',\n        }),\n        type: many2one('mail.activity_type', {\n            inverse: 'activities',\n        }),\n    };\n    Activity.identifyingFields = ['id'];\n    Activity.modelName = 'mail.activity';\n\n    return Activity;\n}\n\nregisterNewModel('mail.activity', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr, one2many } from '@mail/model/model_field';\n\nfunction factory(dependencies) {\n\n    class ActivityType extends dependencies['mail.model'] {\n    }\n\n    ActivityType.fields = {\n        activities: one2many('mail.activity', {\n            inverse: 'type',\n        }),\n        displayName: attr(),\n        id: attr({\n            readonly: true,\n            required: true,\n        }),\n    };\n    ActivityType.identifyingFields = ['id'];\n    ActivityType.modelName = 'mail.activity_type';\n\n    return ActivityType;\n}\n\nregisterNewModel('mail.activity_type', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr, many2many, many2one, one2many } from '@mail/model/model_field';\nimport { clear, insert } from '@mail/model/model_field_command';\n\nfunction factory(dependencies) {\n\n    class Attachment extends dependencies['mail.model'] {\n\n        /**\n         * @override\n         */\n        _created() {\n            // Bind necessary until OWL supports arrow function in handlers: https://github.com/odoo/owl/issues/876\n            this.onClickDownload = this.onClickDownload.bind(this);\n        }\n\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        /**\n         * @static\n         * @param {Object} data\n         * @return {Object}\n         */\n        static convertData(data) {\n            const data2 = {};\n            if ('access_token' in data) {\n                data2.accessToken = data.access_token;\n            }\n            if ('checksum' in data) {\n                data2.checksum = data.checksum;\n            }\n            if ('filename' in data) {\n                data2.filename = data.filename;\n            }\n            if ('id' in data) {\n                data2.id = data.id;\n            }\n            if ('is_main' in data) {\n                data2.is_main = data.is_main;\n            }\n            if ('mimetype' in data) {\n                data2.mimetype = data.mimetype;\n            }\n            if ('name' in data) {\n                data2.name = data.name;\n            }\n            // relation\n            if ('res_id' in data && 'res_model' in data) {\n                data2.originThread = insert({\n                    id: data.res_id,\n                    model: data.res_model,\n                });\n            }\n            if ('originThread' in data) {\n                data2.originThread = data.originThread;\n            }\n            return data2;\n        }\n\n        /**\n         * Send the attachment for the browser to download.\n         */\n        download() {\n            const downloadLink = document.createElement('a');\n            downloadLink.setAttribute('href', this.downloadUrl);\n            // Adding 'download' attribute into a link prevents open a new tab or change the current location of the window.\n            // This avoids interrupting the activity in the page such as rtc call.\n            downloadLink.setAttribute('download','');\n            downloadLink.click();\n        }\n\n        /**\n         * Handles click on download icon.\n         *\n         * @param {MouseEvent} ev\n         */\n        onClickDownload(ev) {\n            ev.stopPropagation();\n            this.download();\n        }\n\n        /**\n         * Remove this attachment globally.\n         */\n        async remove() {\n            if (this.isUnlinkPending) {\n                return;\n            }\n            if (!this.isUploading) {\n                this.update({ isUnlinkPending: true });\n                try {\n                    await this.env.services.rpc({\n                        route: `/mail/attachment/delete`,\n                        params: {\n                            access_token: this.accessToken,\n                            attachment_id: this.id,\n                        },\n                    }, { shadow: true });\n                } finally {\n                    if (this.exists()) {\n                        this.update({ isUnlinkPending: false });\n                    }\n                }\n            } else if (this.uploadingAbortController) {\n                this.uploadingAbortController.abort();\n            }\n            if (this.exists()) {\n                this.delete();\n            }\n        }\n\n        //----------------------------------------------------------------------\n        // Private\n        //----------------------------------------------------------------------\n\n        /**\n         * @private\n         * @returns {string|undefined}\n         */\n        _computeDefaultSource() {\n            if (this.isImage) {\n                return `/web/image/${this.id}?signature=${this.checksum}`;\n            }\n            if (this.isPdf) {\n                const pdf_lib = `/web/static/lib/pdfjs/web/viewer.html?file=`\n                if (!this.accessToken && this.originThread && this.originThread.model === 'mail.channel') {\n                    return `${pdf_lib}/mail/channel/${this.originThread.id}/attachment/${this.id}#pagemode=none`;\n                }\n                const accessToken = this.accessToken ? `?access_token%3D${this.accessToken}` : '';\n                return `${pdf_lib}/web/content/${this.id}${accessToken}#pagemode=none`;\n            }\n            if (this.isUrlYoutube) {\n                const urlArr = this.url.split('/');\n                let token = urlArr[urlArr.length - 1];\n                if (token.includes('watch')) {\n                    token = token.split('v=')[1];\n                    const amp = token.indexOf('&');\n                    if (amp !== -1) {\n                        token = token.substring(0, amp);\n                    }\n                }\n                return `https://www.youtube.com/embed/${token}`;\n            }\n            if (!this.accessToken && this.originThread && this.originThread.model === 'mail.channel') {\n                return `/mail/channel/${this.originThread.id}/attachment/${this.id}`;\n            }\n            const accessToken = this.accessToken ? `?access_token=${this.accessToken}` : '';\n            return `/web/content/${this.id}${accessToken}`;\n        }\n\n        /**\n         * @private\n         * @returns {string|undefined}\n         */\n        _computeDisplayName() {\n            const displayName = this.name || this.filename;\n            if (displayName) {\n                return displayName;\n            }\n            return clear();\n        }\n\n        /**\n         * @private\n         * @returns {string}\n         */\n        _computeDownloadUrl() {\n            if (!this.accessToken && this.originThread && this.originThread.model === 'mail.channel') {\n                return `/mail/channel/${this.originThread.id}/attachment/${this.id}?download=true`;\n            }\n            const accessToken = this.accessToken ? `access_token=${this.accessToken}&` : '';\n            return `/web/content/ir.attachment/${this.id}/datas?${accessToken}download=true`;\n        }\n\n        /**\n         * @private\n         * @returns {string|undefined}\n         */\n        _computeExtension() {\n            const extension = this.filename && this.filename.split('.').pop();\n            if (extension) {\n                return extension;\n            }\n            return clear();\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeIsEditable() {\n            if (!this.messaging) {\n                return;\n            }\n\n            if (this.messages.length && this.originThread && this.originThread.model === 'mail.channel') {\n                return this.messages.some(message => (\n                    message.canBeDeleted ||\n                    (message.author && message.author === this.messaging.currentPartner) ||\n                    (message.guestAuthor && message.guestAuthor === this.messaging.currentGuest)\n                ));\n            }\n            return true;\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeIsPdf() {\n            return this.mimetype === 'application/pdf';\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeIsImage() {\n            const imageMimetypes = [\n                'image/bmp',\n                'image/gif',\n                'image/jpeg',\n                'image/png',\n                'image/svg+xml',\n                'image/tiff',\n                'image/x-icon',\n            ];\n            return imageMimetypes.includes(this.mimetype);\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeIsText() {\n            const textMimeType = [\n                'application/javascript',\n                'application/json',\n                'text/css',\n                'text/html',\n                'text/plain',\n            ];\n            return textMimeType.includes(this.mimetype);\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeIsVideo() {\n            const videoMimeTypes = [\n                'audio/mpeg',\n                'video/x-matroska',\n                'video/mp4',\n                'video/webm',\n            ];\n            return videoMimeTypes.includes(this.mimetype);\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeIsUrl() {\n            return this.type === 'url' && this.url;\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeIsViewable() {\n            return this.isText || this.isImage || this.isVideo || this.isPdf || this.isUrlYoutube;\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeIsUrlYoutube() {\n            return !!this.url && this.url.includes('youtu');\n        }\n\n        /**\n         * @deprecated\n         * @private\n         * @returns {string}\n         */\n        _computeMediaType() {\n            return this.mimetype && this.mimetype.split('/').shift();\n        }\n\n        /**\n         * @private\n         * @returns {AbortController|undefined}\n         */\n        _computeUploadingAbortController() {\n            if (this.isUploading) {\n                if (!this.uploadingAbortController) {\n                    const abortController = new AbortController();\n                    abortController.signal.onabort = () => {\n                        this.messaging.messagingBus.trigger('o-attachment-upload-abort', {\n                            attachment: this\n                        });\n                    };\n                    return abortController;\n                }\n                return this.uploadingAbortController;\n            }\n            return;\n        }\n    }\n\n    Attachment.fields = {\n        accessToken: attr(),\n        activities: many2many('mail.activity', {\n            inverse: 'attachments',\n        }),\n        /**\n         * States the attachment cards that are displaying this attachment.\n         */\n        attachmentCards: one2many('mail.attachment_card', {\n            inverse: 'attachment',\n            isCausal: true,\n        }),\n        /**\n         * States the attachment images that are displaying this attachment.\n         */\n        attachmentImages: one2many('mail.attachment_image', {\n            inverse: 'attachment',\n            isCausal: true,\n        }),\n        /**\n         * States the attachment lists that are displaying this attachment.\n         */\n        attachmentLists: many2many('mail.attachment_list', {\n            inverse: 'attachments',\n        }),\n        attachmentViewer: many2many('mail.attachment_viewer', {\n            inverse: 'attachments',\n        }),\n        checksum: attr(),\n        /**\n         * States on which composer this attachment is currently being created.\n         */\n        composer: many2one('mail.composer', {\n            inverse: 'attachments',\n        }),\n        defaultSource: attr({\n            compute: '_computeDefaultSource',\n        }),\n        /**\n         * States the OWL ref of the \"dialog\" window.\n         */\n        dialogRef: attr(),\n        displayName: attr({\n            compute: '_computeDisplayName',\n        }),\n        downloadUrl: attr({\n           compute: '_computeDownloadUrl',\n        }),\n        extension: attr({\n            compute: '_computeExtension',\n        }),\n        filename: attr(),\n        id: attr({\n            readonly: true,\n            required: true,\n        }),\n        /**\n         * States whether this attachment is editable.\n         */\n        isEditable: attr({\n            compute: '_computeIsEditable',\n        }),\n        /**\n         * States id the attachment is an image.\n         */\n        isImage: attr({\n            compute: '_computeIsImage',\n        }),\n        is_main: attr(),\n        /**\n         * States if the attachment is a PDF file.\n         */\n        isPdf: attr({\n            compute: '_computeIsPdf',\n        }),\n        /**\n         * States if the attachment is a text file.\n         */\n        isText: attr({\n            compute: '_computeIsText',\n        }),\n        /**\n         * True if an unlink RPC is pending, used to prevent multiple unlink attempts.\n         */\n        isUnlinkPending: attr({\n            default: false,\n        }),\n        isUploading: attr({\n            default: false,\n        }),\n        /**\n         * States if the attachment is an url.\n         */\n        isUrl: attr({\n            compute: '_computeIsUrl',\n        }),\n        /**\n         * Determines if the attachment is a youtube url.\n         */\n        isUrlYoutube: attr({\n            compute: '_computeIsUrlYoutube',\n        }),\n        /**\n         * States if the attachment is a video.\n         */\n        isVideo: attr({\n            compute: '_computeIsVideo',\n        }),\n        isViewable: attr({\n            compute: '_computeIsViewable',\n        }),\n        /**\n         * @deprecated\n         */\n        mediaType: attr({\n            compute: '_computeMediaType',\n        }),\n        messages: many2many('mail.message', {\n            inverse: 'attachments',\n        }),\n        mimetype: attr({\n            default: '',\n        }),\n        name: attr(),\n        originThread: many2one('mail.thread', {\n            inverse: 'originThreadAttachments',\n        }),\n        size: attr(),\n        threads: many2many('mail.thread', {\n            inverse: 'attachments',\n        }),\n        type: attr(),\n        /**\n         * Abort Controller linked to the uploading process of this attachment.\n         * Useful in order to cancel the in-progress uploading of this attachment.\n         */\n        uploadingAbortController: attr({\n            compute: '_computeUploadingAbortController',\n        }),\n        url: attr(),\n    };\n    Attachment.identifyingFields = ['id'];\n    Attachment.modelName = 'mail.attachment';\n\n    return Attachment;\n}\n\nregisterNewModel('mail.attachment', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr, many2one } from '@mail/model/model_field';\nimport { insert, insertAndReplace, replace } from '@mail/model/model_field_command';\n\nfunction factory(dependencies) {\n\n    class AttachmentCard extends dependencies['mail.model'] {\n\n        /**\n         * @override\n         */\n        _created() {\n            // Bind necessary until OWL supports arrow function in handlers: https://github.com/odoo/owl/issues/876\n            this.onClickUnlink = this.onClickUnlink.bind(this);\n            this.onClickImage = this.onClickImage.bind(this);\n            this.onDeleteConfirmDialogClosed = this.onDeleteConfirmDialogClosed.bind(this);\n        }\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        /**\n         * Opens the attachment viewer when clicking on viewable attachment.\n         *\n         * @param {String} attachmentlistLocalId\n         */\n        onClickImage() {\n            if (!this.attachment || !this.attachment.isViewable) {\n                return;\n            }\n            this.messaging.dialogManager.update({\n                dialogs: insert({\n                    attachmentViewer: insertAndReplace({\n                        attachment: replace(this.attachment),\n                        attachmentList: replace(this.attachmentList),\n                    }),\n                }),\n            });\n        }\n\n        /**\n         * Handles the click on delete attachment and open the confirm dialog.\n         *\n         * @param {MouseEvent} ev\n         */\n        onClickUnlink(ev) {\n            ev.stopPropagation(); // prevents from opening viewer\n            if (!this.attachment) {\n                return;\n            }\n            if (this.attachmentList.composerView) {\n                this.component.trigger('o-attachment-removed', { attachmentLocalId: this.attachment.localId });\n                this.attachment.remove();\n            } else {\n                this.update({ hasDeleteConfirmDialog: true });\n            }\n        }\n\n        /**\n         * Synchronizes the `hasDeleteConfirmDialog` when the dialog is closed.\n         */\n        onDeleteConfirmDialogClosed() {\n            if (!this.exists()) {\n                return;\n            }\n            this.update({ hasDeleteConfirmDialog: false });\n        }\n\n    }\n\n    AttachmentCard.fields = {\n        /**\n         * Determines the attachment of this card.\n         */\n        attachment: many2one('mail.attachment', {\n            inverse: 'attachmentCards',\n            readonly: true,\n            required: true,\n        }),\n        /**\n         * States the attachmentList displaying this card.\n         */\n        attachmentList: many2one('mail.attachment_list', {\n            inverse: 'attachmentCards',\n            readonly: true,\n            required: true,\n        }),\n        /**\n         * States the OWL component of this attachment card.\n         */\n        component: attr(),\n        /**\n         * Determines the status of the delete confirm dialog (open/closed).\n         */\n        hasDeleteConfirmDialog: attr({\n            default: false,\n        }),\n    };\n    AttachmentCard.identifyingFields = ['attachmentList', 'attachment'];\n    AttachmentCard.modelName = 'mail.attachment_card';\n\n    return AttachmentCard;\n}\n\nregisterNewModel('mail.attachment_card', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr, many2one } from '@mail/model/model_field';\nimport { clear, insert, insertAndReplace, replace } from '@mail/model/model_field_command';\n\nfunction factory(dependencies) {\n\n    class AttachmentImage extends dependencies['mail.model'] {\n\n        /**\n         * @override\n         */\n        _created() {\n            // Bind necessary until OWL supports arrow function in handlers: https://github.com/odoo/owl/issues/876\n            this.onClickUnlink = this.onClickUnlink.bind(this);\n            this.onDeleteConfirmDialogClosed = this.onDeleteConfirmDialogClosed.bind(this);\n            this.onClickImage = this.onClickImage.bind(this);\n        }\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        /**\n         * Opens the attachment viewer when clicking on viewable attachment.\n         *\n         * @param {String} attachmentlistLocalId\n         */\n        onClickImage() {\n            if (!this.attachment || !this.attachment.isViewable) {\n                return;\n            }\n            this.messaging.dialogManager.update({\n                dialogs: insert({\n                    attachmentViewer: insertAndReplace({\n                        attachment: replace(this.attachment),\n                        attachmentList: replace(this.attachmentList),\n                    }),\n                }),\n            });\n        }\n\n        /**\n         * Handles the click on delete attachment and open the confirm dialog.\n         *\n         * @param {MouseEvent} ev\n         */\n        onClickUnlink(ev) {\n            ev.stopPropagation(); // prevents from opening viewer\n            if (!this.attachment) {\n                return;\n            }\n            if (this.attachmentList.composerView) {\n                this.component.trigger('o-attachment-removed', { attachmentLocalId: this.attachment.localId });\n                this.attachment.remove();\n            } else {\n                this.update({ hasDeleteConfirmDialog: true });\n            }\n        }\n\n        /**\n         * Synchronize the `hasDeleteConfirmDialog` when the dialog is closed.\n         */\n        onDeleteConfirmDialogClosed() {\n            if (!this.exists()) {\n                return;\n            }\n            this.update({ hasDeleteConfirmDialog: false });\n        }\n\n        //----------------------------------------------------------------------\n        // Private\n        //----------------------------------------------------------------------\n\n        /**\n         * @private\n         * @returns {number}\n         */\n        _computeHeight() {\n            if (!this.attachmentList) {\n                return clear();\n            }\n            if (this.attachmentList.composerView) {\n                return 50;\n            }\n            if (this.attachmentList.chatter) {\n                return 160;\n            }\n            if (this.attachmentList.message) {\n                return 300;\n            }\n        }\n\n        /**\n         * @private\n         * @returns {string}\n         */\n        _computeImageUrl() {\n            if (!this.attachment) {\n                return;\n            }\n            if (!this.attachment.accessToken && this.attachment.originThread && this.attachment.originThread.model === 'mail.channel') {\n                return `/mail/channel/${this.attachment.originThread.id}/image/${this.attachment.id}/${this.width}x${this.height}`;\n            }\n            const accessToken = this.attachment.accessToken ? `?access_token=${this.attachment.accessToken}` : '';\n            return `/web/image/${this.attachment.id}/${this.width}x${this.height}${accessToken}`;\n        }\n\n        /**\n         * Returns an arbitrary high value, this is effectively a max-width and\n         * the height should be more constrained.\n         *\n         * @private\n         * @returns {number}\n         */\n        _computeWidth() {\n            return 1920;\n        }\n    }\n\n    AttachmentImage.fields = {\n        /**\n         * Determines the attachment of this attachment image..\n         */\n        attachment: many2one('mail.attachment', {\n            inverse: 'attachmentImages',\n            readonly: true,\n            required: true,\n        }),\n        /**\n         * States the attachmentList displaying this attachment image.\n         */\n        attachmentList: many2one('mail.attachment_list', {\n            inverse: 'attachmentImages',\n            readonly: true,\n            required: true,\n        }),\n        /**\n         * States the OWL component of this attachment image.\n         */\n        component: attr(),\n        /**\n         * Determines the status of the delete confirm dialog (open/closed).\n         */\n        hasDeleteConfirmDialog: attr({\n            default: false,\n        }),\n        /**\n         * Determines the max height of this attachment image in px.\n         */\n        height: attr({\n            compute: '_computeHeight',\n            required: true,\n        }),\n        imageUrl: attr({\n            compute: '_computeImageUrl',\n        }),\n        /**\n         * Determines the max width of this attachment image in px.\n         */\n        width: attr({\n            compute: '_computeWidth',\n            required: true,\n        }),\n    };\n    AttachmentImage.identifyingFields = ['attachmentList', 'attachment'];\n    AttachmentImage.modelName = 'mail.attachment_image';\n\n    return AttachmentImage;\n}\n\nregisterNewModel('mail.attachment_image', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { many2many, many2one, one2many, one2one } from '@mail/model/model_field';\nimport { clear, insertAndReplace, replace } from '@mail/model/model_field_command';\n\nfunction factory(dependencies) {\n\n    class AttachmentList extends dependencies['mail.model'] {\n\n        //----------------------------------------------------------------------\n        // Private\n        //----------------------------------------------------------------------\n\n        /**\n         * @returns {mail.attachment[]}\n         */\n        _computeAttachments() {\n            if (this.message) {\n                return replace(this.message.attachments);\n            }\n            if (this.chatter && this.chatter.thread) {\n                return replace(this.chatter.thread.allAttachments);\n            }\n            if (this.composerView && this.composerView.composer) {\n                return replace(this.composerView.composer.attachments);\n            }\n            return clear();\n        }\n\n        _computeAttachmentImages() {\n            return insertAndReplace(this.imageAttachments.map(attachment => {\n                return {\n                    attachment: replace(attachment),\n                };\n            }));\n        }\n\n        _computeAttachmentCards() {\n            return insertAndReplace(this.nonImageAttachments.map(attachment => {\n                return {\n                    attachment: replace(attachment),\n                };\n            }));\n        }\n\n        /**\n         * @returns {mail.attachment[]}\n         */\n        _computeImageAttachments() {\n            return replace(this.attachments.filter(attachment => attachment.isImage));\n        }\n\n        /**\n         * @returns {mail.attachment[]}\n         */\n        _computeNonImageAttachments() {\n            return replace(this.attachments.filter(attachment => !attachment.isImage));\n        }\n\n        /**\n         * @returns {mail.attachment[]}\n         */\n        _computeViewableAttachments() {\n            return replace(this.attachments.filter(attachment => attachment.isViewable));\n        }\n\n    }\n\n    AttachmentList.fields = {\n        /**\n         * States the attachments to be displayed by this attachment list.\n         */\n        attachments: many2many('mail.attachment', {\n            compute: '_computeAttachments',\n            inverse: 'attachmentLists',\n        }),\n        /**\n         * States the attachment cards that are displaying this nonImageAttachments.\n         */\n        attachmentCards: one2many('mail.attachment_card', {\n            compute: '_computeAttachmentCards',\n            inverse: 'attachmentList',\n            isCausal: true,\n        }),\n        /**\n         * States the attachment images that are displaying this imageAttachments.\n         */\n        attachmentImages: one2many('mail.attachment_image', {\n            compute: '_computeAttachmentImages',\n            inverse: 'attachmentList',\n            isCausal: true,\n        }),\n        /**\n         * Determines the attachment viewers displaying this attachment list (if any).\n         */\n        attachmentViewer: one2many('mail.attachment_viewer', {\n            inverse: 'attachmentList',\n            isCausal: true,\n        }),\n        /**\n         * Link with a chatter to handle attachments.\n         */\n        chatter: one2one('mail.chatter', {\n            inverse: 'attachmentList',\n            readonly: true,\n        }),\n        /**\n         * Link with a composer view to handle attachments.\n         */\n        composerView: one2one('mail.composer_view', {\n            inverse: 'attachmentList',\n            readonly: true,\n        }),\n        /**\n         * States the attachment that are an image.\n         */\n        imageAttachments: many2many('mail.attachment', {\n            compute: '_computeImageAttachments',\n        }),\n        message: many2one('mail.message', {\n            related: 'messageView.message'\n        }),\n        /**\n         * Link with a message view to handle attachments.\n         */\n        messageView: one2one('mail.message_view', {\n            inverse: 'attachmentList',\n            readonly: true,\n        }),\n        /**\n         * States the attachment that are not an image.\n         */\n        nonImageAttachments: many2many('mail.attachment', {\n            compute: '_computeNonImageAttachments',\n        }),\n        /**\n         * States the attachments that can be viewed inside the browser.\n         */\n        viewableAttachments: many2many('mail.attachment', {\n            compute: '_computeViewableAttachments',\n        }),\n    };\n    AttachmentList.identifyingFields = [['composerView', 'messageView', 'chatter']];\n    AttachmentList.modelName = 'mail.attachment_list';\n\n    return AttachmentList;\n}\n\nregisterNewModel('mail.attachment_list', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr, many2many, many2one, one2one } from '@mail/model/model_field';\n\nfunction factory(dependencies) {\n\n    class AttachmentViewer extends dependencies['mail.model'] {\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        /**\n         * Close the attachment viewer by closing its linked dialog.\n         */\n        close() {\n            const dialog = this.messaging.models['mail.dialog'].find(dialog => dialog.record === this);\n            if (dialog) {\n                dialog.delete();\n            }\n        }\n\n        //----------------------------------------------------------------------\n        // Private\n        //----------------------------------------------------------------------\n\n        /**\n         * @private\n         * @returns {string}\n         */\n        _computeImageUrl() {\n            if (!this.attachment) {\n                return;\n            }\n            if (!this.attachment.accessToken && this.attachment.originThread && this.attachment.originThread.model === 'mail.channel') {\n                return `/mail/channel/${this.attachment.originThread.id}/image/${this.attachment.id}`;\n            }\n            const accessToken = this.attachment.accessToken ? `?access_token=${this.attachment.accessToken}` : '';\n            return `/web/image/${this.attachment.id}${accessToken}`;\n        }\n    }\n\n    AttachmentViewer.fields = {\n        /**\n         * Angle of the image. Changes when the user rotates it.\n         */\n        angle: attr({\n            default: 0,\n        }),\n        attachment: many2one('mail.attachment'),\n        attachmentList: many2one('mail.attachment_list', {\n            inverse: 'attachmentViewer',\n            readonly: true,\n            required: true,\n        }),\n        attachments: many2many('mail.attachment', {\n            inverse: 'attachmentViewer',\n            related: 'attachmentList.viewableAttachments',\n        }),\n        /**\n         * Determines the dialog displaying this attachment viewer.\n         */\n        dialog: one2one('mail.dialog', {\n            inverse: 'attachmentViewer',\n            isCausal: true,\n            readonly: true,\n        }),\n        /**\n         * Determines the source URL to use for the image.\n         */\n        imageUrl: attr({\n            compute: '_computeImageUrl',\n            readonly: true,\n        }),\n        /**\n         * Determine whether the image is loading or not. Useful to diplay\n         * a spinner when loading image initially.\n         */\n        isImageLoading: attr({\n            default: false,\n        }),\n        /**\n         * Scale size of the image. Changes when user zooms in/out.\n         */\n        scale: attr({\n            default: 1,\n        }),\n    };\n    AttachmentViewer.identifyingFields = ['attachmentList'];\n    AttachmentViewer.modelName = 'mail.attachment_viewer';\n\n    return AttachmentViewer;\n}\n\nregisterNewModel('mail.attachment_viewer', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr } from '@mail/model/model_field';\nimport { cleanSearchTerm } from '@mail/utils/utils';\n\nfunction factory(dependencies) {\n\n    class CannedResponse extends dependencies['mail.model'] {\n\n        /**\n         * Fetches canned responses matching the given search term to extend the\n         * JS knowledge and to update the suggestion list accordingly.\n         *\n         * In practice all canned responses are already fetched at init so this\n         * method does nothing.\n         *\n         * @static\n         * @param {string} searchTerm\n         * @param {Object} [options={}]\n         * @param {mail.thread} [options.thread] prioritize and/or restrict\n         *  result in the context of given thread\n         */\n        static fetchSuggestions(searchTerm, { thread } = {}) {}\n\n        /**\n         * Returns a sort function to determine the order of display of canned\n         * responses in the suggestion list.\n         *\n         * @static\n         * @param {string} searchTerm\n         * @param {Object} [options={}]\n         * @param {mail.thread} [options.thread] prioritize result in the\n         *  context of given thread\n         * @returns {function}\n         */\n        static getSuggestionSortFunction(searchTerm, { thread } = {}) {\n            const cleanedSearchTerm = cleanSearchTerm(searchTerm);\n            return (a, b) => {\n                const cleanedAName = cleanSearchTerm(a.source || '');\n                const cleanedBName = cleanSearchTerm(b.source || '');\n                if (cleanedAName.startsWith(cleanedSearchTerm) && !cleanedBName.startsWith(cleanedSearchTerm)) {\n                    return -1;\n                }\n                if (!cleanedAName.startsWith(cleanedSearchTerm) && cleanedBName.startsWith(cleanedSearchTerm)) {\n                    return 1;\n                }\n                if (cleanedAName < cleanedBName) {\n                    return -1;\n                }\n                if (cleanedAName > cleanedBName) {\n                    return 1;\n                }\n                return a.id - b.id;\n            };\n        }\n\n        /*\n         * Returns canned responses that match the given search term.\n         *\n         * @static\n         * @param {string} searchTerm\n         * @param {Object} [options={}]\n         * @param {mail.thread} [options.thread] prioritize and/or restrict\n         *  result in the context of given thread\n         * @returns {[mail.canned_response[], mail.canned_response[]]}\n         */\n        static searchSuggestions(searchTerm, { thread } = {}) {\n            const cleanedSearchTerm = cleanSearchTerm(searchTerm);\n            return [this.messaging.cannedResponses.filter(cannedResponse =>\n                cleanSearchTerm(cannedResponse.source).includes(cleanedSearchTerm)\n            )];\n        }\n\n        /**\n         * Returns the text that identifies this canned response in a mention.\n         *\n         * @returns {string}\n         */\n        getMentionText() {\n            return this.substitution;\n        }\n\n    }\n\n    CannedResponse.fields = {\n        id: attr({\n            readonly: true,\n            required: true,\n        }),\n        /**\n         *  The keyword to use a specific canned response.\n         */\n        source: attr(),\n        /**\n         * The canned response itself which will replace the keyword previously\n         * entered.\n         */\n        substitution: attr(),\n    };\n    CannedResponse.identifyingFields = ['id'];\n    CannedResponse.modelName = 'mail.canned_response';\n\n    return CannedResponse;\n}\n\nregisterNewModel('mail.canned_response', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr } from '@mail/model/model_field';\nimport { cleanSearchTerm } from '@mail/utils/utils';\n\nfunction factory(dependencies) {\n\n    class ChannelCommand extends dependencies['mail.model'] {\n\n        /**\n         * Fetches channel commands matching the given search term to extend the\n         * JS knowledge and to update the suggestion list accordingly.\n         *\n         * In practice all channel commands are already fetched at init so this\n         * method does nothing.\n         *\n         * @static\n         * @param {string} searchTerm\n         * @param {Object} [options={}]\n         * @param {mail.thread} [options.thread] prioritize and/or restrict\n         *  result in the context of given thread\n         */\n        static fetchSuggestions(searchTerm, { thread } = {}) {}\n\n        /**\n         * Returns a sort function to determine the order of display of channel\n         * commands in the suggestion list.\n         *\n         * @static\n         * @param {string} searchTerm\n         * @param {Object} [options={}]\n         * @param {mail.thread} [options.thread] prioritize result in the\n         *  context of given thread\n         * @returns {function}\n         */\n        static getSuggestionSortFunction(searchTerm, { thread } = {}) {\n            const cleanedSearchTerm = cleanSearchTerm(searchTerm);\n            return (a, b) => {\n                const isATypeSpecific = a.channel_types;\n                const isBTypeSpecific = b.channel_types;\n                if (isATypeSpecific && !isBTypeSpecific) {\n                    return -1;\n                }\n                if (!isATypeSpecific && isBTypeSpecific) {\n                    return 1;\n                }\n                const cleanedAName = cleanSearchTerm(a.name || '');\n                const cleanedBName = cleanSearchTerm(b.name || '');\n                if (cleanedAName.startsWith(cleanedSearchTerm) && !cleanedBName.startsWith(cleanedSearchTerm)) {\n                    return -1;\n                }\n                if (!cleanedAName.startsWith(cleanedSearchTerm) && cleanedBName.startsWith(cleanedSearchTerm)) {\n                    return 1;\n                }\n                if (cleanedAName < cleanedBName) {\n                    return -1;\n                }\n                if (cleanedAName > cleanedBName) {\n                    return 1;\n                }\n                return a.id - b.id;\n            };\n        }\n\n        /**\n         * Returns channel commands that match the given search term.\n         *\n         * @static\n         * @param {string} searchTerm\n         * @param {Object} [options={}]\n         * @param {mail.thread} [options.thread] prioritize and/or restrict\n         *  result in the context of given thread\n         * @returns {[mail.channel_command[], mail.channel_command[]]}\n         */\n        static searchSuggestions(searchTerm, { thread } = {}) {\n            if (thread.model !== 'mail.channel') {\n                // channel commands are channel specific\n                return [[]];\n            }\n            const cleanedSearchTerm = cleanSearchTerm(searchTerm);\n            return [this.messaging.commands.filter(command => {\n                if (!cleanSearchTerm(command.name).includes(cleanedSearchTerm)) {\n                    return false;\n                }\n                if (command.channel_types) {\n                    return command.channel_types.includes(thread.channel_type);\n                }\n                return true;\n            })];\n        }\n\n        /**\n         * Executes this command on the given `mail.channel`.\n         *\n         * @static\n         * @param {Object} param0\n         * @param {mail.thread} param0.channel\n         * @param {Object} [param0.body='']\n         */\n        async execute({ channel, body = '' }) {\n            return this.env.services.rpc({\n                model: 'mail.channel',\n                method: this.methodName,\n                args: [[channel.id]],\n                kwargs: { body },\n            });\n        }\n\n        /**\n         * Returns the text that identifies this channel command in a mention.\n         *\n         * @returns {string}\n         */\n        getMentionText() {\n            return this.name;\n        }\n\n    }\n\n    ChannelCommand.fields = {\n        /**\n         * Determines on which channel types `this` is available.\n         * Type of the channel (e.g. 'chat', 'channel' or 'groups')\n         * This field should contain an array when filtering is desired.\n         * Otherwise, it should be undefined when all types are allowed.\n         */\n        channel_types: attr(),\n        /**\n         *  The command that will be executed.\n         */\n        help: attr({\n            required: true,\n        }),\n        /**\n         * Name of the method of `mail.channel` to call on the server when\n         * executing this command.\n         */\n        methodName: attr({\n            required: true,\n        }),\n        /**\n         *  The keyword to use a specific command.\n         */\n        name: attr({\n            readonly: true,\n            required: true,\n        }),\n    };\n    ChannelCommand.identifyingFields = ['name'];\n    ChannelCommand.modelName = 'mail.channel_command';\n\n    return ChannelCommand;\n}\n\nregisterNewModel('mail.channel_command', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr, many2many, many2one, one2one } from '@mail/model/model_field';\nimport { clear, insertAndReplace, link, replace, unlink, unlinkAll } from '@mail/model/model_field_command';\nimport { cleanSearchTerm } from '@mail/utils/utils';\n\nfunction factory(dependencies) {\n\n    class ChannelInvitationForm extends dependencies['mail.model'] {\n\n        /**\n         * @override\n         */\n        _created() {\n            // Bind necessary until OWL supports arrow function in handlers: https://github.com/odoo/owl/issues/876\n            this.onClickInvite = this.onClickInvite.bind(this);\n            this.onInputSearch = this.onInputSearch.bind(this);\n        }\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        /**\n         * Handles click on the \"invite\" button.\n         *\n         * @param {MouseEvent} ev\n         */\n        async onClickInvite(ev) {\n            if (this.thread.channel_type === 'chat') {\n                const partners_to = [...new Set([\n                    this.messaging.currentPartner.id,\n                    ...this.thread.members.map(member => member.id),\n                    ...this.selectedPartners.map(partner => partner.id),\n                ])];\n                const channel = await this.messaging.models['mail.thread'].createGroupChat({ partners_to });\n                if (this.thread.rtc) {\n                    /**\n                     * if we were in a RTC call on the current thread, we move to the new group chat.\n                     * A smoother transfer would be moving the RTC sessions from one channel to\n                     * the other (server-side too), but it would be considerably more complex.\n                     */\n                    await this.async(() => channel.toggleCall({\n                        startWithVideo: !!this.thread.rtc.videoTrack,\n                        videoType: this.thread.rtc.sendUserVideo ? 'user-video' : 'display',\n                    }));\n                }\n                channel.open();\n            } else {\n                await this.env.services.rpc(({\n                    model: 'mail.channel',\n                    method: 'add_members',\n                    args: [[this.thread.id]],\n                    kwargs: {\n                        partner_ids: this.selectedPartners.map(partner => partner.id),\n                        invite_to_rtc_call: !!this.thread.rtc,\n                    },\n                }));\n            }\n            this.update({\n                searchTerm: \"\",\n                selectedPartners: unlinkAll(),\n            });\n            this.delete();\n        }\n\n        /**\n         * @param {mail.partner} partner\n         * @param {MouseEvent} ev\n         */\n        onClickSelectablePartner(partner, ev) {\n            if (this.selectedPartners.includes(partner)) {\n                this.update({ selectedPartners: unlink(partner) });\n                return;\n            }\n            this.update({ selectedPartners: link(partner) });\n        }\n\n        /**\n         * @param {mail.partner} partner\n         * @param {MouseEvent} ev\n         */\n        onClickSelectedPartner(partner, ev) {\n            this.update({ selectedPartners: unlink(partner) });\n        }\n\n        /**\n         * Handles OWL update on this channel invitation form component.\n         */\n        onComponentUpdate() {\n            if (this.doFocusOnSearchInput && this.searchInputRef.el) {\n                this.searchInputRef.el.focus();\n                this.searchInputRef.el.setSelectionRange(this.searchTerm.length, this.searchTerm.length);\n                this.update({ doFocusOnSearchInput: clear() });\n            }\n        }\n\n        /**\n         * @param {mail.partner} partner\n         * @param {InputEvent} ev\n         */\n        onInputPartnerCheckbox(partner, ev) {\n            if (!ev.target.checked) {\n                this.update({ selectedPartners: unlink(partner) });\n                return;\n            }\n            this.update({ selectedPartners: link(partner) });\n        }\n\n        /**\n         * @param {InputEvent} ev\n         */\n        async onInputSearch(ev) {\n            this.update({ searchTerm: ev.target.value });\n            this.searchPartnersToInvite();\n        }\n\n        /**\n         * Searches for partners to invite based on the current search term. If\n         * a search is already in progress, waits until it is done to start a\n         * new one.\n         */\n        async searchPartnersToInvite() {\n            if (this.hasSearchRpcInProgress) {\n                this.update({ hasPendingSearchRpc: true });\n                return;\n            }\n            this.update({\n                hasPendingSearchRpc: false,\n                hasSearchRpcInProgress: true,\n            });\n            try {\n                const channelId = (this.thread && this.thread.model === 'mail.channel') ? this.thread.id : undefined;\n                const { count, partners: partnersData } = await this.env.services.rpc(\n                    {\n                        model: 'res.partner',\n                        method: 'search_for_channel_invite',\n                        kwargs: {\n                            channel_id: channelId,\n                            search_term: cleanSearchTerm(this.searchTerm),\n                        },\n                    },\n                    { shadow: true }\n                );\n                if (!this.exists()) {\n                    return;\n                }\n                this.update({\n                    searchResultCount: count,\n                    selectablePartners: insertAndReplace(partnersData.map(partnerData => this.messaging.models['mail.partner'].convertData(partnerData))),\n                });\n            } finally {\n                if (this.exists()) {\n                    this.update({ hasSearchRpcInProgress: false });\n                    if (this.hasPendingSearchRpc) {\n                        this.searchPartnersToInvite();\n                    }\n                }\n            }\n        }\n\n        //----------------------------------------------------------------------\n        // Private\n        //----------------------------------------------------------------------\n\n        /**\n         * @private\n         * @returns {string}\n         */\n        _computeInviteButtonText() {\n            if (!this.thread) {\n                return clear();\n            }\n            switch (this.thread.channel_type) {\n                case 'chat':\n                    return this.env._t(\"Create group chat\");\n                case 'group':\n                    return this.env._t(\"Invite to group chat\");\n            }\n            return this.env._t(\"Invite to Channel\");\n        }\n\n        /**\n         * @private\n         * @returns {FieldCommand}\n         */\n        _computeThread() {\n            if (this.threadView && this.threadView.thread) {\n                return replace(this.threadView.thread);\n            }\n            if (this.chatWindow && this.chatWindow.thread) {\n                return replace(this.chatWindow.thread);\n            }\n            return clear();\n        }\n\n    }\n\n    ChannelInvitationForm.fields = {\n        chatWindow: one2one('mail.chat_window', {\n            inverse: 'channelInvitationForm',\n            readonly: true,\n        }),\n        /**\n         * States the OWL component of this channel invitation form.\n         * Useful to be able to close it with popover trigger, or to know when\n         * it is open to update the button active state.\n         */\n        component: attr(),\n        /**\n         * Determines whether this search input needs to be focused.\n         */\n        doFocusOnSearchInput: attr(),\n        /**\n         * States whether there is a pending search RPC.\n         */\n        hasPendingSearchRpc: attr({\n            default: false,\n        }),\n        /**\n         * States whether there is search RPC in progress.\n         */\n        hasSearchRpcInProgress: attr({\n            default: false,\n        }),\n        /**\n         * Determines the text of the invite button.\n         */\n        inviteButtonText: attr({\n            compute: '_computeInviteButtonText',\n        }),\n        popoverView: one2one('mail.popover_view', {\n            inverse: 'channelInvitationForm',\n            isCausal: true,\n        }),\n        /**\n         * States the OWL ref of the \"search\" input of this channel invitation\n         * form. Useful to be able to focus it.\n         */\n        searchInputRef: attr(),\n        /**\n         * States the number of results of the last search.\n         */\n        searchResultCount: attr({\n            default: 0,\n        }),\n        /**\n         * Determines the search term used to filter this list.\n         */\n        searchTerm: attr({\n            default: \"\",\n        }),\n        /**\n         * States all partners that are potential choices according to this\n         * search term.\n         */\n        selectablePartners: many2many('mail.partner'),\n        /**\n         * Determines all partners that are currently selected.\n         */\n        selectedPartners: many2many('mail.partner'),\n        /**\n         * States the thread on which this list operates (if any).\n         */\n        thread: many2one('mail.thread', {\n            compute: '_computeThread',\n            readonly: true,\n            required: true,\n        }),\n        /**\n         * States the thread view on which this list operates (if any).\n         */\n        threadView: one2one('mail.thread_view', {\n            inverse: 'channelInvitationForm',\n            readonly: true,\n        }),\n    };\n    ChannelInvitationForm.identifyingFields = [['chatWindow', 'threadView']];\n    ChannelInvitationForm.modelName = 'mail.channel_invitation_form';\n\n    return ChannelInvitationForm;\n}\n\nregisterNewModel('mail.channel_invitation_form', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr, many2one, one2one } from '@mail/model/model_field';\nimport { clear, insertAndReplace, link, unlink } from '@mail/model/model_field_command';\nimport { markEventHandled } from '@mail/utils/utils';\n\nfunction factory(dependencies) {\n\n    class ChatWindow extends dependencies['mail.model'] {\n\n        /**\n         * @override\n         */\n        _created() {\n            super._created();\n            // Bind necessary until OWL supports arrow function in handlers: https://github.com/odoo/owl/issues/876\n            this.onClickHideInviteForm = this.onClickHideInviteForm.bind(this);\n            this.onClickHideMemberList = this.onClickHideMemberList.bind(this);\n            this.onClickShowInviteForm = this.onClickShowInviteForm.bind(this);\n            this.onClickShowMemberList = this.onClickShowMemberList.bind(this);\n            this.onFocusInNewMessageFormInput = this.onFocusInNewMessageFormInput.bind(this);\n        }\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        /**\n         * Close this chat window.\n         *\n         * @param {Object} [param0={}]\n         * @param {boolean} [param0.notifyServer]\n         */\n        close({ notifyServer } = {}) {\n            if (notifyServer === undefined) {\n                notifyServer = !this.messaging.device.isMobile;\n            }\n            if (this.messaging.device.isMobile && !this.messaging.discuss.isOpen) {\n                // If we are in mobile and discuss is not open, it means the\n                // chat window was opened from the messaging menu. In that\n                // case it should be re-opened to simulate it was always\n                // there in the background.\n                this.messaging.messagingMenu.update({ isOpen: true });\n            }\n            // Flux specific: 'closed' fold state should only be saved on the\n            // server when manually closing the chat window. Delete at destroy\n            // or sync from server value for example should not save the value.\n            if (this.thread && notifyServer && !this.messaging.currentGuest) {\n                this.thread.notifyFoldStateToServer('closed');\n            }\n            if (this.exists()) {\n                this.delete();\n            }\n        }\n\n        expand() {\n            if (this.thread) {\n                this.thread.open({ expanded: true });\n            }\n        }\n\n        /**\n         * Programmatically auto-focus an existing chat window.\n         */\n        focus() {\n            if (!this.thread) {\n                this.update({ isDoFocus: true });\n            }\n            if (this.threadView && this.threadView.composerView) {\n                this.threadView.composerView.update({ doFocus: true });\n            }\n        }\n\n        focusNextVisibleUnfoldedChatWindow() {\n            const nextVisibleUnfoldedChatWindow = this._getNextVisibleUnfoldedChatWindow();\n            if (nextVisibleUnfoldedChatWindow) {\n                nextVisibleUnfoldedChatWindow.focus();\n            }\n        }\n\n        focusPreviousVisibleUnfoldedChatWindow() {\n            const previousVisibleUnfoldedChatWindow =\n                this._getNextVisibleUnfoldedChatWindow({ reverse: true });\n            if (previousVisibleUnfoldedChatWindow) {\n                previousVisibleUnfoldedChatWindow.focus();\n            }\n        }\n\n        /**\n         * @param {Object} [param0={}]\n         * @param {boolean} [param0.notifyServer]\n         */\n        fold({ notifyServer } = {}) {\n            if (notifyServer === undefined) {\n                notifyServer = !this.messaging.device.isMobile;\n            }\n            this.update({ isFolded: true });\n            // Flux specific: manually folding the chat window should save the\n            // new state on the server.\n            if (this.thread && notifyServer && !this.messaging.currentGuest) {\n                this.thread.notifyFoldStateToServer('folded');\n            }\n        }\n\n        /**\n         * Makes this chat window active, which consists of making it visible,\n         * unfolding it, and focusing it if the user isn't on a mobile device.\n         *\n         * @param {Object} [options]\n         */\n        makeActive(options) {\n            this.makeVisible();\n            this.unfold(options);\n            if ((options && options.focus !== undefined) ? options.focus : !this.messaging.device.isMobileDevice) {\n                this.focus();\n            }\n        }\n\n        /**\n         * Makes this chat window visible by swapping it with the last visible\n         * chat window, or do nothing if it is already visible.\n         */\n        makeVisible() {\n            if (this.isVisible) {\n                return;\n            }\n            const lastVisible = this.manager.lastVisible;\n            this.manager.swap(this, lastVisible);\n        }\n\n        /**\n         * Handles click on the \"stop adding users\" button.\n         *\n         * @param {MouseEvent} ev\n         */\n        onClickHideInviteForm(ev) {\n            markEventHandled(ev, 'ChatWindow.onClickCommand');\n            this.update({ channelInvitationForm: clear() });\n        }\n\n        /**\n         * @param {MouseEvent} ev\n         */\n        onClickHideMemberList(ev) {\n            markEventHandled(ev, 'ChatWindow.onClickHideMemberList');\n            this.update({ isMemberListOpened: false });\n            if (this.threadViewer.threadView) {\n                this.threadViewer.threadView.addComponentHint('member-list-hidden');\n            }\n        }\n\n        /**\n         * Handles click on the \"add users\" button.\n         *\n         * @param {MouseEvent} ev\n         */\n        onClickShowInviteForm(ev) {\n            markEventHandled(ev, 'ChatWindow.onClickCommand');\n            this.update({\n                channelInvitationForm: insertAndReplace({\n                    doFocusOnSearchInput: true,\n                }),\n                isMemberListOpened: false,\n            });\n            if (!this.messaging.isCurrentUserGuest) {\n                this.channelInvitationForm.searchPartnersToInvite();\n            }\n        }\n\n        /**\n         * @param {MouseEvent} ev\n         */\n        onClickShowMemberList(ev) {\n            markEventHandled(ev, 'ChatWindow.onClickShowMemberList');\n            this.update({\n                channelInvitationForm: clear(),\n                isMemberListOpened: true,\n            });\n        }\n\n        /**\n         * @param {Event} ev\n         */\n        onFocusInNewMessageFormInput(ev) {\n            if (this.exists()) {\n                this.update({ isFocused: true });\n            }\n        }\n\n        /**\n         * Swap this chat window with the previous one.\n         */\n        shiftPrev() {\n            this.manager.shiftPrev(this);\n        }\n\n        /**\n         * Swap this chat window with the next one.\n         */\n        shiftNext() {\n            this.manager.shiftNext(this);\n        }\n\n        /**\n         * @param {Object} [param0={}]\n         * @param {boolean} [param0.notifyServer]\n         */\n        unfold({ notifyServer } = {}) {\n            if (notifyServer === undefined) {\n                notifyServer = !this.messaging.device.isMobile;\n            }\n            this.update({ isFolded: false });\n            // Flux specific: manually opening the chat window should save the\n            // new state on the server.\n            if (this.thread && notifyServer && !this.messaging.currentGuest) {\n                this.thread.notifyFoldStateToServer('open');\n            }\n        }\n\n        //----------------------------------------------------------------------\n        // Private\n        //----------------------------------------------------------------------\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeHasCallButtons() {\n            return Boolean(this.thread) && this.thread.rtcSessions.length === 0 && ['channel', 'chat', 'group'].includes(this.thread.channel_type);\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeHasInviteFeature() {\n            return Boolean(\n                this.thread && this.thread.hasInviteFeature &&\n                this.messaging && this.messaging.device && this.messaging.device.isMobile\n            );\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeHasNewMessageForm() {\n            return this.isVisible && !this.isFolded && !this.thread;\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeHasShiftPrev() {\n            if (!this.manager) {\n                return false;\n            }\n            const allVisible = this.manager.allOrderedVisible;\n            const index = allVisible.findIndex(visible => visible === this);\n            if (index === -1) {\n                return false;\n            }\n            return index < allVisible.length - 1;\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeHasShiftNext() {\n            if (!this.manager) {\n                return false;\n            }\n            const index = this.manager.allOrderedVisible.findIndex(visible => visible === this);\n            if (index === -1) {\n                return false;\n            }\n            return index > 0;\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeHasThreadView() {\n            return this.isVisible && !this.isFolded && !!this.thread && !this.isMemberListOpened && !this.channelInvitationForm;\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeIsFolded() {\n            const thread = this.thread;\n            if (thread) {\n                return thread.foldState === 'folded';\n            }\n            return this.isFolded;\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeIsVisible() {\n            if (!this.manager) {\n                return false;\n            }\n            return this.manager.allOrderedVisible.includes(this);\n        }\n\n        /**\n         * @private\n         * @returns {string}\n         */\n        _computeName() {\n            if (this.thread) {\n                return this.thread.displayName;\n            }\n            return this.env._t(\"New message\");\n        }\n\n        /**\n         * @private\n         * @returns {mail.thread_viewer}\n         */\n        _computeThreadViewer() {\n            return insertAndReplace({\n                compact: true,\n                hasThreadView: this.hasThreadView,\n                thread: this.thread ? link(this.thread) : unlink(),\n            });\n        }\n\n        /**\n         * @private\n         * @returns {integer|undefined}\n         */\n        _computeVisibleIndex() {\n            if (!this.manager) {\n                return clear();\n            }\n            const visible = this.manager.visual.visible;\n            const index = visible.findIndex(visible => visible.chatWindowLocalId === this.localId);\n            if (index === -1) {\n                return clear();\n            }\n            return index;\n        }\n\n        /**\n         * @private\n         * @returns {integer}\n         */\n        _computeVisibleOffset() {\n            if (!this.manager) {\n                return 0;\n            }\n            const visible = this.manager.visual.visible;\n            const index = visible.findIndex(visible => visible.chatWindowLocalId === this.localId);\n            if (index === -1) {\n                return 0;\n            }\n            return visible[index].offset;\n        }\n\n        /**\n         * Cycles to the next possible visible and unfolded chat window starting\n         * from the `currentChatWindow`, following the natural order based on the\n         * current text direction, and with the possibility to `reverse` based on\n         * the given parameter.\n         *\n         * @private\n         * @param {Object} [param0={}]\n         * @param {boolean} [param0.reverse=false]\n         * @returns {mail.chat_window|undefined}\n         */\n        _getNextVisibleUnfoldedChatWindow({ reverse = false } = {}) {\n            const orderedVisible = this.manager.allOrderedVisible;\n            /**\n             * Return index of next visible chat window of a given visible chat\n             * window index. The direction of \"next\" chat window depends on\n             * `reverse` option.\n             *\n             * @param {integer} index\n             * @returns {integer}\n             */\n            const _getNextIndex = index => {\n                const directionOffset = reverse ? 1 : -1;\n                let nextIndex = index + directionOffset;\n                if (nextIndex > orderedVisible.length - 1) {\n                    nextIndex = 0;\n                }\n                if (nextIndex < 0) {\n                    nextIndex = orderedVisible.length - 1;\n                }\n                return nextIndex;\n            };\n\n            const currentIndex = orderedVisible.findIndex(visible => visible === this);\n            let nextIndex = _getNextIndex(currentIndex);\n            let nextToFocus = orderedVisible[nextIndex];\n            while (nextToFocus.isFolded) {\n                nextIndex = _getNextIndex(nextIndex);\n                nextToFocus = orderedVisible[nextIndex];\n            }\n            return nextToFocus;\n        }\n\n    }\n\n    ChatWindow.fields = {\n        /**\n         * Determines the channel invitation form displayed by this chat window\n         * (if any). Only makes sense if hasInviteFeature is true.\n         */\n        channelInvitationForm: one2one('mail.channel_invitation_form', {\n            inverse: 'chatWindow',\n            isCausal: true,\n        }),\n        /**\n         * Determines whether the buttons to start a RTC call should be displayed.\n         */\n        hasCallButtons: attr({\n            default: false,\n            compute: '_computeHasCallButtons',\n        }),\n        /**\n         * States whether this chat window has the invite feature.\n         */\n        hasInviteFeature: attr({\n            compute: '_computeHasInviteFeature',\n        }),\n        /**\n         * Determines whether \"new message form\" should be displayed.\n         */\n        hasNewMessageForm: attr({\n            compute: '_computeHasNewMessageForm',\n        }),\n        hasShiftPrev: attr({\n            compute: '_computeHasShiftPrev',\n            default: false,\n        }),\n        hasShiftNext: attr({\n            compute: '_computeHasShiftNext',\n            default: false,\n        }),\n        /**\n         * Determines whether `this.thread` should be displayed.\n         */\n        hasThreadView: attr({\n            compute: '_computeHasThreadView',\n        }),\n        /**\n         * Determine whether the chat window should be programmatically\n         * focused by observed component of chat window. Those components\n         * are responsible to unmark this record afterwards, otherwise\n         * any re-render will programmatically set focus again!\n         */\n        isDoFocus: attr({\n            default: false,\n        }),\n        /**\n         * States whether `this` is focused. Useful for visual clue.\n         */\n        isFocused: attr({\n            default: false,\n        }),\n        /**\n         * Determines whether `this` is folded.\n         */\n        isFolded: attr({\n            default: false,\n        }),\n        /**\n         * Determines whether the member list of this chat window is opened.\n         * Only makes sense if this thread hasMemberListFeature is true.\n         */\n        isMemberListOpened: attr({\n            default: false,\n        }),\n        /**\n         * States whether `this` is visible or not. Should be considered\n         * read-only. Setting this value manually will not make it visible.\n         * @see `makeVisible`\n         */\n        isVisible: attr({\n            compute: '_computeIsVisible',\n        }),\n        manager: many2one('mail.chat_window_manager', {\n            inverse: 'chatWindows',\n            readonly: true,\n        }),\n        managerAsNewMessage: one2one('mail.chat_window_manager', {\n            inverse: 'newMessageChatWindow',\n            readonly: true,\n        }),\n        name: attr({\n            compute: '_computeName',\n        }),\n        /**\n         * Determines the `mail.thread` that should be displayed by `this`.\n         * If no `mail.thread` is linked, `this` is considered \"new message\".\n         */\n        thread: one2one('mail.thread', {\n            inverse: 'chatWindow',\n            readonly: true,\n        }),\n        /**\n         * States the `mail.thread_view` displaying `this.thread`.\n         */\n        threadView: one2one('mail.thread_view', {\n            related: 'threadViewer.threadView',\n        }),\n        /**\n         * Determines the `mail.thread_viewer` managing the display of `this.thread`.\n         */\n        threadViewer: one2one('mail.thread_viewer', {\n            compute: '_computeThreadViewer',\n            inverse: 'chatWindow',\n            isCausal: true,\n            readonly: true,\n            required: true,\n        }),\n        /**\n         * This field handle the \"order\" (index) of the visible chatWindow inside the UI.\n         *\n         * Using LTR, the right-most chat window has index 0, and the number is incrementing from right to left.\n         * Using RTL, the left-most chat window has index 0, and the number is incrementing from left to right.\n         */\n        visibleIndex: attr({\n            compute: '_computeVisibleIndex',\n        }),\n        visibleOffset: attr({\n            compute: '_computeVisibleOffset',\n        }),\n    };\n    ChatWindow.identifyingFields = ['manager', ['thread', 'managerAsNewMessage']];\n    ChatWindow.modelName = 'mail.chat_window';\n\n    return ChatWindow;\n}\n\nregisterNewModel('mail.chat_window', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr, many2one, one2many, one2one } from '@mail/model/model_field';\nimport { insertAndReplace, link, replace, unlink } from '@mail/model/model_field_command';\n\nfunction factory(dependencies) {\n\n    const BASE_VISUAL = {\n        /**\n         * Amount of visible slots available for chat windows.\n         */\n        availableVisibleSlots: 0,\n        /**\n         * Data related to the hidden menu.\n         */\n        hidden: {\n            /**\n             * List of hidden docked chat windows. Useful to compute counter.\n             * Chat windows are ordered by their `chatWindows` order.\n             */\n            chatWindowLocalIds: [],\n            /**\n             * Whether hidden menu is visible or not\n             */\n            isVisible: false,\n            /**\n             * Offset of hidden menu starting point from the starting point\n             * of chat window manager. Makes only sense if it is visible.\n             */\n            offset: 0,\n        },\n        /**\n         * Data related to visible chat windows. Index determine order of\n         * docked chat windows.\n         *\n         * Value:\n         *\n         *  {\n         *      chatWindowLocalId,\n         *      offset,\n         *  }\n         *\n         * Offset is offset of starting point of docked chat window from\n         * starting point of dock chat window manager. Docked chat windows\n         * are ordered by their `chatWindows` order\n         */\n        visible: [],\n    };\n\n\n    class ChatWindowManager extends dependencies['mail.model'] {\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        /**\n         * Close all chat windows.\n         *\n         */\n        closeAll() {\n            const chatWindows = this.allOrdered;\n            for (const chatWindow of chatWindows) {\n                chatWindow.close();\n            }\n        }\n\n        closeHiddenMenu() {\n            this.update({ isHiddenMenuOpen: false });\n        }\n\n        /**\n         * Closes all chat windows related to the given thread.\n         *\n         * @param {mail.thread} thread\n         * @param {Object} [options]\n         */\n        closeThread(thread, options) {\n            for (const chatWindow of this.chatWindows) {\n                if (chatWindow.thread === thread) {\n                    chatWindow.close(options);\n                }\n            }\n        }\n\n        openHiddenMenu() {\n            this.update({ isHiddenMenuOpen: true });\n        }\n\n        openNewMessage() {\n            if (!this.newMessageChatWindow) {\n                this.update({ newMessageChatWindow: insertAndReplace({ manager: replace(this) }) });\n            }\n            this.newMessageChatWindow.makeActive();\n        }\n\n        /**\n         * @param {mail.thread} thread\n         * @param {Object} [param1={}]\n         * @param {boolean} [param1.focus] if set, set focus the chat window\n         *   to open.\n         * @param {boolean} [param1.isFolded=false]\n         * @param {boolean} [param1.makeActive=false]\n         * @param {boolean} [param1.notifyServer]\n         * @param {boolean} [param1.replaceNewMessage=false]\n         */\n        openThread(thread, {\n            focus,\n            isFolded = false,\n            makeActive = false,\n            notifyServer,\n            replaceNewMessage = false\n        } = {}) {\n            if (notifyServer === undefined) {\n                notifyServer = !this.messaging.device.isMobile;\n            }\n            let chatWindow = this.chatWindows.find(chatWindow =>\n                chatWindow.thread === thread\n            );\n            if (!chatWindow) {\n                chatWindow = this.messaging.models['mail.chat_window'].create({\n                    isFolded,\n                    manager: link(this),\n                    thread: link(thread),\n                });\n            } else {\n                chatWindow.update({ isFolded });\n            }\n            if (replaceNewMessage && this.newMessageChatWindow) {\n                this.swap(chatWindow, this.newMessageChatWindow);\n                this.newMessageChatWindow.close();\n            }\n            if (makeActive) {\n                // avoid double notify at this step, it will already be done at\n                // the end of the current method\n                chatWindow.makeActive({ focus, notifyServer: false });\n            }\n            // Flux specific: notify server of chat window being opened.\n            if (notifyServer && !this.messaging.currentGuest) {\n                const foldState = chatWindow.isFolded ? 'folded' : 'open';\n                thread.notifyFoldStateToServer(foldState);\n            }\n        }\n\n        /**\n         * Shift provided chat window to previous visible index, which swap visible order of this\n         * chat window and the preceding visible one\n         *\n         * @param {mail.chat_window} chatWindow\n         */\n        shiftPrev(chatWindow) {\n            const chatWindows = this.allOrdered;\n            const index = chatWindows.findIndex(cw => cw === chatWindow);\n            if (index === chatWindows.length - 1) {\n                // already first one\n                return;\n            }\n            const otherChatWindow = chatWindows[index + 1];\n            const _newOrdered = [...this.allOrdered];\n            _newOrdered[index] = otherChatWindow;\n            _newOrdered[index + 1] = chatWindow;\n            this.update({ allOrdered: replace(_newOrdered) });\n            chatWindow.focus();\n            for (const loopedChatWindow of [chatWindow, otherChatWindow]) {\n                if (loopedChatWindow.threadView) {\n                    loopedChatWindow.threadView.addComponentHint('adjust-scroll');\n                }\n            }\n        }\n\n        /**\n         * Shift provided chat window to next visible index, which swap visible order of this\n         * chat window and the following visible one.\n         *\n         * @param {mail.chat_window} chatWindow\n         */\n        shiftNext(chatWindow) {\n            const chatWindows = this.allOrdered;\n            const index = chatWindows.findIndex(cw => cw === chatWindow);\n            if (index === 0) {\n                // already last one\n                return;\n            }\n            const otherChatWindow = chatWindows[index - 1];\n            const _newOrdered = [...this.allOrdered];\n            _newOrdered[index] = otherChatWindow;\n            _newOrdered[index - 1] = chatWindow;\n            this.update({ allOrdered: replace(_newOrdered) });\n            chatWindow.focus();\n            for (const loopedChatWindow of [chatWindow, otherChatWindow]) {\n                if (loopedChatWindow.threadView) {\n                    loopedChatWindow.threadView.addComponentHint('adjust-scroll');\n                }\n            }\n        }\n\n        /**\n         * @param {mail.chat_window} chatWindow1\n         * @param {mail.chat_window} chatWindow2\n         */\n        swap(chatWindow1, chatWindow2) {\n            const ordered = this.allOrdered;\n            const index1 = ordered.findIndex(chatWindow => chatWindow === chatWindow1);\n            const index2 = ordered.findIndex(chatWindow => chatWindow === chatWindow2);\n            if (index1 === -1 || index2 === -1) {\n                return;\n            }\n            const _newOrdered = [...this.allOrdered];\n            _newOrdered[index1] = chatWindow2;\n            _newOrdered[index2] = chatWindow1;\n            this.update({ allOrdered: replace(_newOrdered) });\n            for (const chatWindow of [chatWindow1, chatWindow2]) {\n                if (chatWindow.threadView) {\n                    chatWindow.threadView.addComponentHint('adjust-scroll');\n                }\n            }\n        }\n\n        //----------------------------------------------------------------------\n        // Private\n        //----------------------------------------------------------------------\n\n        /**\n         * @private\n         * @returns {mail.chat_window[]}\n         */\n        _computeAllOrdered() {\n            return link(this.chatWindows);\n        }\n\n        /**\n         * @private\n         * @returns {mail.chat_window[]}\n         */\n        _computeAllOrderedHidden() {\n            return replace(this.visual.hidden.chatWindowLocalIds.map(chatWindowLocalId =>\n                this.messaging.models['mail.chat_window'].get(chatWindowLocalId)\n            ));\n        }\n\n        /**\n         * @private\n         * @returns {mail.chat_window[]}\n         */\n        _computeAllOrderedVisible() {\n            return replace(this.visual.visible.map(({ chatWindowLocalId }) =>\n                this.messaging.models['mail.chat_window'].get(chatWindowLocalId)\n            ));\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeHasHiddenChatWindows() {\n            return this.allOrderedHidden.length > 0;\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeHasVisibleChatWindows() {\n            return this.allOrderedVisible.length > 0;\n        }\n\n        /**\n         * @private\n         * @returns {mail.chat_window|undefined}\n         */\n        _computeLastVisible() {\n            const { length: l, [l - 1]: lastVisible } = this.allOrderedVisible;\n            if (!lastVisible) {\n                return unlink();\n            }\n            return link(lastVisible);\n        }\n\n        /**\n         * @private\n         * @returns {integer}\n         */\n        _computeUnreadHiddenConversationAmount() {\n            const allHiddenWithThread = this.allOrderedHidden.filter(\n                chatWindow => chatWindow.thread\n            );\n            let amount = 0;\n            for (const chatWindow of allHiddenWithThread) {\n                if (chatWindow.thread.localMessageUnreadCounter > 0) {\n                    amount++;\n                }\n            }\n            return amount;\n        }\n\n        /**\n         * @private\n         * @returns {Object}\n         */\n        _computeVisual() {\n            let visual = JSON.parse(JSON.stringify(BASE_VISUAL));\n            if (!this.messaging || !this.messaging.device) {\n                return visual;\n            }\n            const device = this.messaging.device;\n            const discuss = this.messaging.discuss;\n            const BETWEEN_GAP_WIDTH = 5;\n            const CHAT_WINDOW_WIDTH = 325;\n            const END_GAP_WIDTH = device.isMobile ? 0 : 10;\n            const GLOBAL_WINDOW_WIDTH = device.globalWindowInnerWidth;\n            const HIDDEN_MENU_WIDTH = 200; // max width, including width of dropup list items\n            const START_GAP_WIDTH = device.isMobile ? 0 : 10;\n            const chatWindows = this.allOrdered;\n            if ((!device.isMobile && discuss.isOpen) || this.messaging.discussPublicView) {\n                return visual;\n            }\n            if (!chatWindows.length) {\n                return visual;\n            }\n            const relativeGlobalWindowWidth = GLOBAL_WINDOW_WIDTH - START_GAP_WIDTH - END_GAP_WIDTH;\n            let maxAmountWithoutHidden = Math.floor(\n                relativeGlobalWindowWidth / (CHAT_WINDOW_WIDTH + BETWEEN_GAP_WIDTH));\n            let maxAmountWithHidden = Math.floor(\n                (relativeGlobalWindowWidth - HIDDEN_MENU_WIDTH - BETWEEN_GAP_WIDTH) /\n                (CHAT_WINDOW_WIDTH + BETWEEN_GAP_WIDTH));\n            if (device.isMobile) {\n                maxAmountWithoutHidden = 1;\n                maxAmountWithHidden = 1;\n            }\n            if (chatWindows.length <= maxAmountWithoutHidden) {\n                // all visible\n                for (let i = 0; i < chatWindows.length; i++) {\n                    const chatWindowLocalId = chatWindows[i].localId;\n                    const offset = START_GAP_WIDTH + i * (CHAT_WINDOW_WIDTH + BETWEEN_GAP_WIDTH);\n                    visual.visible.push({ chatWindowLocalId, offset });\n                }\n                visual.availableVisibleSlots = maxAmountWithoutHidden;\n            } else if (maxAmountWithHidden > 0) {\n                // some visible, some hidden\n                for (let i = 0; i < maxAmountWithHidden; i++) {\n                    const chatWindowLocalId = chatWindows[i].localId;\n                    const offset = START_GAP_WIDTH + i * (CHAT_WINDOW_WIDTH + BETWEEN_GAP_WIDTH);\n                    visual.visible.push({ chatWindowLocalId, offset });\n                }\n                if (chatWindows.length > maxAmountWithHidden) {\n                    visual.hidden.isVisible = !device.isMobile;\n                    visual.hidden.offset = visual.visible[maxAmountWithHidden - 1].offset\n                        + CHAT_WINDOW_WIDTH + BETWEEN_GAP_WIDTH;\n                }\n                for (let j = maxAmountWithHidden; j < chatWindows.length; j++) {\n                    visual.hidden.chatWindowLocalIds.push(chatWindows[j].localId);\n                }\n                visual.availableVisibleSlots = maxAmountWithHidden;\n            } else {\n                // all hidden\n                visual.hidden.isVisible = !device.isMobile;\n                visual.hidden.offset = START_GAP_WIDTH;\n                visual.hidden.chatWindowLocalIds.concat(chatWindows.map(chatWindow => chatWindow.localId));\n                console.warn('cannot display any visible chat windows (screen is too small)');\n                visual.availableVisibleSlots = 0;\n            }\n            return visual;\n        }\n\n    }\n\n    ChatWindowManager.fields = {\n        /**\n         * List of ordered chat windows.\n         */\n        allOrdered: one2many('mail.chat_window', {\n            compute: '_computeAllOrdered',\n        }),\n        allOrderedHidden: one2many('mail.chat_window', {\n            compute: '_computeAllOrderedHidden',\n        }),\n        allOrderedVisible: one2many('mail.chat_window', {\n            compute: '_computeAllOrderedVisible',\n        }),\n        chatWindows: one2many('mail.chat_window', {\n            inverse: 'manager',\n            isCausal: true,\n        }),\n        hasHiddenChatWindows: attr({\n            compute: '_computeHasHiddenChatWindows',\n        }),\n        hasVisibleChatWindows: attr({\n            compute: '_computeHasVisibleChatWindows',\n        }),\n        isHiddenMenuOpen: attr({\n            default: false,\n        }),\n        lastVisible: many2one('mail.chat_window', {\n            compute: '_computeLastVisible',\n        }),\n        newMessageChatWindow: one2one('mail.chat_window', {\n            inverse: 'managerAsNewMessage',\n            isCausal: true,\n        }),\n        unreadHiddenConversationAmount: attr({\n            compute: '_computeUnreadHiddenConversationAmount',\n        }),\n        visual: attr({\n            compute: '_computeVisual',\n            default: BASE_VISUAL,\n        }),\n    };\n    ChatWindowManager.identifyingFields = ['messaging'];\n    ChatWindowManager.modelName = 'mail.chat_window_manager';\n\n    return ChatWindowManager;\n}\n\nregisterNewModel('mail.chat_window_manager', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr, many2one, one2one } from '@mail/model/model_field';\nimport { clear, insert, insertAndReplace, link, unlink } from '@mail/model/model_field_command';\nimport { OnChange } from '@mail/model/model_onchange';\n\nfunction factory(dependencies) {\n\n    const getThreadNextTemporaryId = (function () {\n        let tmpId = 0;\n        return () => {\n            tmpId -= 1;\n            return tmpId;\n        };\n    })();\n\n    const getMessageNextTemporaryId = (function () {\n        let tmpId = 0;\n        return () => {\n            tmpId -= 1;\n            return tmpId;\n        };\n    })();\n\n    class Chatter extends dependencies['mail.model'] {\n\n        /**\n         * @override\n         */\n        _created() {\n            this._attachmentsLoaderTimeout = undefined;\n            this._isPreparingAttachmentsLoading = undefined;\n            // Bind necessary until OWL supports arrow function in handlers: https://github.com/odoo/owl/issues/876\n            this.onClickActivityBoxTitle = this.onClickActivityBoxTitle.bind(this);\n            this.onClickButtonAttachments = this.onClickButtonAttachments.bind(this);\n            this.onClickChatterTopbarClose = this.onClickChatterTopbarClose.bind(this);\n            this.onClickLogNote = this.onClickLogNote.bind(this);\n            this.onClickScheduleActivity = this.onClickScheduleActivity.bind(this);\n            this.onClickSendMessage = this.onClickSendMessage.bind(this);\n            this.onScrollScrollPanel = this.onScrollScrollPanel.bind(this);\n        }\n\n        /**\n         * @override\n         */\n        _willDelete() {\n            this._stopAttachmentsLoading();\n            return super._willDelete(...arguments);\n        }\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        focus() {\n            if (this.composerView) {\n                this.composerView.update({ doFocus: true });\n            }\n        }\n\n        /**\n         * Handles click on activity box title.\n         *\n         * @param {MouseEvent} ev\n         */\n        onClickActivityBoxTitle(ev) {\n            ev.preventDefault();\n            this.update({ isActivityBoxVisible: !this.isActivityBoxVisible });\n        }\n\n        /**\n         * Handles click on the attachments button.\n         *\n         * @param {MouseEvent} ev\n         */\n        onClickButtonAttachments(ev) {\n            this.update({ isAttachmentBoxVisible: !this.isAttachmentBoxVisible });\n        }\n\n        /**\n         * Handles click on top bar close button.\n         *\n         * @param {MouseEvent} ev\n         */\n        onClickChatterTopbarClose(ev) {\n            this.componentChatterTopbar.trigger('o-close-chatter');\n        }\n\n        /**\n         * Handles click on \"log note\" button.\n         *\n         * @param {MouseEvent} ev\n         */\n        onClickLogNote() {\n            if (this.composerView && this.composerView.composer.isLog) {\n                this.update({ composerView: clear() });\n            } else {\n                this.showLogNote();\n            }\n        }\n\n        /**\n         * Handles click on \"schedule activity\" button.\n         *\n         * @param {MouseEvent} ev\n         */\n        onClickScheduleActivity(ev) {\n            const action = {\n                type: 'ir.actions.act_window',\n                name: this.env._t(\"Schedule Activity\"),\n                res_model: 'mail.activity',\n                view_mode: 'form',\n                views: [[false, 'form']],\n                target: 'new',\n                context: {\n                    default_res_id: this.thread.id,\n                    default_res_model: this.thread.model,\n                },\n                res_id: false,\n            };\n            return this.env.bus.trigger('do-action', {\n                action,\n                options: {\n                    on_close: () => {\n                        if (!this.componentChatterTopbar) {\n                            return;\n                        }\n                        this.componentChatterTopbar.trigger('reload', { keepChanges: true });\n                    },\n                },\n            });\n        }\n\n        /**\n         * Handles click on \"send message\" button.\n         *\n         * @param {MouseEvent} ev\n         */\n        onClickSendMessage(ev) {\n            if (this.composerView && !this.composerView.composer.isLog) {\n                this.update({ composerView: clear() });\n            } else {\n                this.showSendMessage();\n            }\n        }\n\n        /**\n         * Handles scroll on this scroll panel.\n         *\n         * @param {Event} ev\n         */\n        onScrollScrollPanel(ev) {\n            if (!this.threadRef.comp) {\n                return;\n            }\n            this.threadRef.comp.onScroll(ev);\n        }\n\n        async refresh() {\n            if (this.hasActivities) {\n                this.thread.refreshActivities();\n            }\n            if (this.hasFollowers) {\n                this.thread.refreshFollowers();\n                this.thread.fetchAndUpdateSuggestedRecipients();\n            }\n            if (this.hasMessageList) {\n                this.thread.refresh();\n            }\n        }\n\n        showLogNote() {\n            this.update({ composerView: insertAndReplace() });\n            this.composerView.composer.update({ isLog: true });\n            this.focus();\n        }\n\n        showSendMessage() {\n            this.update({ composerView: insertAndReplace() });\n            this.composerView.composer.update({ isLog: false });\n            this.focus();\n        }\n\n        //----------------------------------------------------------------------\n        // Private\n        //----------------------------------------------------------------------\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeAttachmentList() {\n            return (this.thread && this.thread.allAttachments.length > 0)\n                ? insertAndReplace()\n                : clear();\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeHasThreadView() {\n            return Boolean(this.thread && this.hasMessageList);\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeIsDisabled() {\n            return Boolean(!this.thread || this.thread.isTemporary);\n        }\n\n        /**\n         * @private\n         * @returns {mail.thread_viewer}\n         */\n        _computeThreadViewer() {\n            return insertAndReplace({\n                hasThreadView: this.hasThreadView,\n                order: 'desc',\n                thread: this.thread ? link(this.thread) : unlink(),\n            });\n        }\n\n        /**\n         * @private\n         */\n        _onThreadIdOrThreadModelChanged() {\n            if (this.threadId) {\n                if (this.thread && this.thread.isTemporary) {\n                    this.thread.delete();\n                }\n                this.update({\n                    isAttachmentBoxVisible: this.isAttachmentBoxVisibleInitially,\n                    thread: insert({\n                        // If the thread was considered to have the activity\n                        // mixin once, it will have it forever.\n                        hasActivities: this.hasActivities ? true : undefined,\n                        id: this.threadId,\n                        model: this.threadModel,\n                    }),\n                });\n                if (this.hasActivities) {\n                    this.thread.refreshActivities();\n                }\n                if (this.hasFollowers) {\n                    this.thread.refreshFollowers();\n                    this.thread.fetchAndUpdateSuggestedRecipients();\n                }\n                if (this.hasMessageList) {\n                    this.thread.refresh();\n                }\n            } else if (!this.thread || !this.thread.isTemporary) {\n                const currentPartner = this.messaging.currentPartner;\n                const message = this.messaging.models['mail.message'].create({\n                    author: link(currentPartner),\n                    body: this.env._t(\"Creating a new record...\"),\n                    id: getMessageNextTemporaryId(),\n                    isTemporary: true,\n                });\n                const nextId = getThreadNextTemporaryId();\n                this.update({\n                    isAttachmentBoxVisible: false,\n                    thread: insert({\n                        areAttachmentsLoaded: true,\n                        id: nextId,\n                        isTemporary: true,\n                        model: this.threadModel,\n                    }),\n                });\n                this.thread.cache.update({ messages: link(message) });\n            }\n        }\n\n        /**\n         * @private\n         */\n        _onThreadIsLoadingAttachmentsChanged() {\n            if (!this.thread || !this.thread.isLoadingAttachments) {\n                this._stopAttachmentsLoading();\n                this.update({ isShowingAttachmentsLoading: false });\n                return;\n            }\n            if (this._isPreparingAttachmentsLoading || this.isShowingAttachmentsLoading) {\n                return;\n            }\n            this._prepareAttachmentsLoading();\n        }\n\n        /**\n         * @private\n         */\n        _prepareAttachmentsLoading() {\n            this._isPreparingAttachmentsLoading = true;\n            this._attachmentsLoaderTimeout = this.env.browser.setTimeout(() => {\n                this.update({ isShowingAttachmentsLoading: true });\n                this._isPreparingAttachmentsLoading = false;\n            }, this.messaging.loadingBaseDelayDuration);\n        }\n\n        /**\n         * @private\n         */\n        _stopAttachmentsLoading() {\n            this.env.browser.clearTimeout(this._attachmentsLoaderTimeout);\n            this._attachmentsLoaderTimeout = null;\n            this._isPreparingAttachmentsLoading = false;\n        }\n\n    }\n\n    Chatter.fields = {\n        /**\n         * Determines the attachment list that will be used to display the attachments.\n         */\n        attachmentList: one2one('mail.attachment_list', {\n            compute: '_computeAttachmentList',\n            inverse: 'chatter',\n            isCausal: true,\n            readonly: true,\n        }),\n        component: attr(),\n        /**\n         * States the OWL component of this chatter top bar.\n         */\n        componentChatterTopbar: attr(),\n        /**\n         * Determines the composer view used to post in this chatter (if any).\n         */\n        composerView: one2one('mail.composer_view', {\n            inverse: 'chatter',\n            isCausal: true,\n        }),\n        context: attr({\n            default: {},\n        }),\n        /**\n         * Determines whether `this` should display an activity box.\n         */\n        hasActivities: attr({\n            default: true,\n        }),\n        hasExternalBorder: attr({\n            default: true,\n        }),\n        /**\n         * Determines whether `this` should display followers menu.\n         */\n        hasFollowers: attr({\n            default: true,\n        }),\n        /**\n         * Determines whether `this` should display a message list.\n         */\n        hasMessageList: attr({\n            default: true,\n        }),\n        /**\n         * Whether the message list should manage its scroll.\n         * In particular, when the chatter is on the form view's side,\n         * then the scroll is managed by the message list.\n         * Also, the message list shoud not manage the scroll if it shares it\n         * with the rest of the page.\n         */\n        hasMessageListScrollAdjust: attr({\n            default: false,\n        }),\n        /**\n         * Determines whether `this.thread` should be displayed.\n         */\n        hasThreadView: attr({\n            compute: '_computeHasThreadView',\n        }),\n        hasTopbarCloseButton: attr({\n            default: false,\n        }),\n        /**\n         * States the id of this chatter. This id does not correspond to any\n         * specific value, it is just a unique identifier given by the creator\n         * of this record.\n         */\n        id: attr({\n            readonly: true,\n            required: true,\n        }),\n        isActivityBoxVisible: attr({\n            default: true,\n        }),\n        /**\n         * Determiners whether the attachment box is currently visible.\n         */\n        isAttachmentBoxVisible: attr({\n            default: false,\n        }),\n        /**\n         * Determiners whether the attachment box is visible initially.\n         */\n        isAttachmentBoxVisibleInitially: attr({\n            default: false,\n        }),\n        isDisabled: attr({\n            compute: '_computeIsDisabled',\n            default: false,\n        }),\n        isShowingAttachmentsLoading: attr({\n            default: false,\n        }),\n        /**\n         * Determines the `mail.thread` that should be displayed by `this`.\n         */\n        thread: many2one('mail.thread'),\n        /**\n         * Determines the id of the thread that will be displayed by `this`.\n         */\n        threadId: attr(),\n        /**\n         * Determines the model of the thread that will be displayed by `this`.\n         */\n        threadModel: attr(),\n        /**\n         * States the OWL ref of the \"thread\" (ThreadView) of this chatter.\n         */\n        threadRef: attr(),\n        /**\n         * States the `mail.thread_view` displaying `this.thread`.\n         */\n        threadView: one2one('mail.thread_view', {\n            related: 'threadViewer.threadView',\n        }),\n        /**\n         * Determines the `mail.thread_viewer` managing the display of `this.thread`.\n         */\n        threadViewer: one2one('mail.thread_viewer', {\n            compute: '_computeThreadViewer',\n            inverse: 'chatter',\n            isCausal: true,\n            readonly: true,\n            required: true,\n        }),\n    };\n    Chatter.identifyingFields = ['id'];\n    Chatter.onChanges = [\n        new OnChange({\n            dependencies: ['threadId', 'threadModel'],\n            methodName: '_onThreadIdOrThreadModelChanged',\n        }),\n        new OnChange({\n            dependencies: ['thread.isLoadingAttachments'],\n            methodName: '_onThreadIsLoadingAttachmentsChanged',\n        }),\n    ];\n\n    Chatter.modelName = 'mail.chatter';\n\n    return Chatter;\n}\n\nregisterNewModel('mail.chatter', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr, many2many, many2one, one2many, one2one } from '@mail/model/model_field';\nimport { clear, replace, unlink } from '@mail/model/model_field_command';\n\nfunction factory(dependencies) {\n\n    class Composer extends dependencies['mail.model'] {\n\n        //----------------------------------------------------------------------\n        // Private\n        //----------------------------------------------------------------------\n\n        /**\n         * @private\n         * @returns {mail.thread}\n         */\n        _computeActiveThread() {\n            if (this.messageViewInEditing && this.messageViewInEditing.message && this.messageViewInEditing.message.originThread) {\n                return replace(this.messageViewInEditing.message.originThread);\n            }\n            if (this.thread) {\n                return replace(this.thread);\n            }\n            return clear();\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeCanPostMessage() {\n            if (this.thread && !this.textInputContent && this.attachments.length === 0) {\n                return false;\n            }\n            return !this.hasUploadingAttachment && !this.isPostingMessage;\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeHasUploadingAttachment() {\n            return this.attachments.some(attachment => attachment.isUploading);\n        }\n\n        /**\n         * Detects if mentioned partners are still in the composer text input content\n         * and removes them if not.\n         *\n         * @private\n         * @returns {mail.partner[]}\n         */\n        _computeMentionedPartners() {\n            const unmentionedPartners = [];\n            // ensure the same mention is not used multiple times if multiple\n            // partners have the same name\n            const namesIndex = {};\n            for (const partner of this.mentionedPartners) {\n                const fromIndex = namesIndex[partner.name] !== undefined\n                    ? namesIndex[partner.name] + 1 :\n                    0;\n                const index = this.textInputContent.indexOf(`@${partner.name}`, fromIndex);\n                if (index !== -1) {\n                    namesIndex[partner.name] = index;\n                } else {\n                    unmentionedPartners.push(partner);\n                }\n            }\n            return unlink(unmentionedPartners);\n        }\n\n        /**\n         * Detects if mentioned channels are still in the composer text input content\n         * and removes them if not.\n         *\n         * @private\n         * @returns {mail.partner[]}\n         */\n        _computeMentionedChannels() {\n            const unmentionedChannels = [];\n            // ensure the same mention is not used multiple times if multiple\n            // channels have the same name\n            const namesIndex = {};\n            for (const channel of this.mentionedChannels) {\n                const fromIndex = namesIndex[channel.name] !== undefined\n                    ? namesIndex[channel.name] + 1 :\n                    0;\n                const index = this.textInputContent.indexOf(`#${channel.name}`, fromIndex);\n                if (index !== -1) {\n                    namesIndex[channel.name] = index;\n                } else {\n                    unmentionedChannels.push(channel);\n                }\n            }\n            return unlink(unmentionedChannels);\n        }\n\n        /**\n         * @private\n         * @returns {mail.partner[]}\n         */\n        _computeRecipients() {\n            const recipients = [...this.mentionedPartners];\n            if (this.activeThread && !this.isLog) {\n                for (const recipient of this.activeThread.suggestedRecipientInfoList) {\n                    if (recipient.partner && recipient.isSelected) {\n                        recipients.push(recipient.partner);\n                    }\n                }\n            }\n            return replace(recipients);\n        }\n\n        /**\n         * @private\n         */\n        _reset() {\n            this.update({\n                attachments: clear(),\n                isLastStateChangeProgrammatic: true,\n                mentionedChannels: clear(),\n                mentionedPartners: clear(),\n                textInputContent: clear(),\n                textInputCursorEnd: clear(),\n                textInputCursorStart: clear(),\n                textInputSelectionDirection: clear(),\n            });\n        }\n\n    }\n\n    Composer.fields = {\n        activeThread: many2one('mail.thread', {\n            compute: '_computeActiveThread',\n            readonly: true,\n            required: true,\n        }),\n        /**\n         * States which attachments are currently being created in this composer.\n         */\n        attachments: one2many('mail.attachment', {\n            inverse: 'composer',\n        }),\n        canPostMessage: attr({\n            compute: '_computeCanPostMessage',\n            default: false,\n        }),\n        composerViews: one2many('mail.composer_view', {\n            inverse: 'composer',\n            isCausal: true,\n        }),\n        /**\n         * This field determines whether some attachments linked to this\n         * composer are being uploaded.\n         */\n        hasUploadingAttachment: attr({\n            compute: '_computeHasUploadingAttachment',\n        }),\n        /**\n         * Determines whether the last change (since the last render) was\n         * programmatic. Useful to avoid restoring the state when its change was\n         * from a user action, in particular to prevent the cursor from jumping\n         * to its previous position after the user clicked on the textarea while\n         * it didn't have the focus anymore.\n         */\n        isLastStateChangeProgrammatic: attr({\n            default: false,\n        }),\n        /**\n         * If true composer will log a note, else a comment will be posted.\n         */\n        isLog: attr({\n            default: true,\n        }),\n        /**\n         * Determines whether a post_message request is currently pending.\n         */\n        isPostingMessage: attr(),\n        mentionedChannels: many2many('mail.thread', {\n            compute: '_computeMentionedChannels',\n        }),\n        mentionedPartners: many2many('mail.partner', {\n            compute: '_computeMentionedPartners',\n        }),\n        messageViewInEditing: one2one('mail.message_view', {\n            inverse: 'composerForEditing',\n            readonly: true,\n        }),\n        /**\n         * Determines the extra `mail.partner` (on top of existing followers)\n         * that will receive the message being composed by `this`, and that will\n         * also be added as follower of `this.activeThread`.\n         */\n        recipients: many2many('mail.partner', {\n            compute: '_computeRecipients',\n        }),\n        textInputContent: attr({\n            default: \"\",\n        }),\n        textInputCursorEnd: attr({\n            default: 0,\n        }),\n        textInputCursorStart: attr({\n            default: 0,\n        }),\n        textInputSelectionDirection: attr({\n            default: \"none\",\n        }),\n        /**\n         * States the thread which this composer represents the state (if any).\n         */\n        thread: one2one('mail.thread', {\n            inverse: 'composer',\n            readonly: true,\n        }),\n    };\n    Composer.identifyingFields = [['thread', 'messageViewInEditing']];\n    Composer.modelName = 'mail.composer';\n\n    return Composer;\n}\n\nregisterNewModel('mail.composer', factory);\n", "/** @odoo-module **/\n\nimport { emojis } from '@mail/js/emojis';\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr, many2many, many2one, one2one } from '@mail/model/model_field';\nimport { clear, insertAndReplace, link, replace, unlink, unlinkAll } from '@mail/model/model_field_command';\nimport { OnChange } from '@mail/model/model_onchange';\nimport { addLink, escapeAndCompactTextContent, parseAndTransform } from '@mail/js/utils';\n\nimport session from \"web.session\";\n\nfunction factory(dependencies) {\n\n    class ComposerView extends dependencies['mail.model'] {\n\n        /**\n         * @override\n         */\n        _willCreate() {\n            const res = super._willCreate(...arguments);\n            /**\n             * Determines whether there is a mention RPC currently in progress.\n             * Useful to queue a new call if there is already one pending.\n             */\n            this._hasMentionRpcInProgress = false;\n            /**\n             * Determines the next function to execute after the current mention\n             * RPC is done, if any.\n             */\n            this._nextMentionRpcFunction = undefined;\n            return res;\n        }\n\n        /**\n         * @override\n         */\n         _created() {\n            this.onClickCancelLink = this.onClickCancelLink.bind(this);\n            this.onClickSaveLink = this.onClickSaveLink.bind(this);\n            this.onClickStopReplying = this.onClickStopReplying.bind(this);\n        }\n\n        /**\n         * @override\n         */\n        _willDelete() {\n            // Clears the mention queue on deleting the record to prevent\n            // unnecessary RPC.\n            this._nextMentionRpcFunction = undefined;\n            return super._willDelete(...arguments);\n        }\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        /**\n         * Closes the suggestion list.\n         */\n        closeSuggestions() {\n            this.update({ suggestionDelimiterPosition: clear() });\n        }\n\n        /**\n         * Hides the composer, which only makes sense if the composer is\n         * currently used as a Discuss Inbox reply composer or as message\n         * editing.\n         */\n        discard() {\n            if (this.messageViewInEditing) {\n                this.messageViewInEditing.stopEditing();\n            }\n            if (this.threadView && this.threadView.replyingToMessageView) {\n                const { threadView } = this;\n                if (this.threadView.thread === this.messaging.inbox) {\n                    this.delete();\n                }\n                threadView.update({ replyingToMessageView: clear() });\n            }\n        }\n\n        /**\n         * Called when current partner is inserting some input in composer.\n         * Useful to notify current partner is currently typing something in the\n         * composer of this thread to all other members.\n         */\n        handleCurrentPartnerIsTyping() {\n            if (!this.composer.thread) {\n                return; // not supported for non-thread composer (eg. messaging editing)\n            }\n            if (this.messaging.isCurrentUserGuest) {\n                return; // not supported for guests\n            }\n            if (\n                this.suggestionModelName === 'mail.channel_command' ||\n                this._getCommandFromText(this.composer.textInputContent)\n            ) {\n                return;\n            }\n            if (this.composer.thread.typingMembers.includes(this.messaging.currentPartner)) {\n                this.composer.thread.refreshCurrentPartnerIsTyping();\n            } else {\n                this.composer.thread.registerCurrentPartnerIsTyping();\n            }\n        }\n\n        /**\n         * Inserts text content in text input based on selection.\n         *\n         * @param {string} content\n         */\n        insertIntoTextInput(content) {\n            const partA = this.composer.textInputContent.slice(0, this.composer.textInputCursorStart);\n            const partB = this.composer.textInputContent.slice(\n                this.composer.textInputCursorEnd,\n                this.composer.textInputContent.length\n            );\n            let suggestionDelimiterPosition = this.suggestionDelimiterPosition;\n            if (\n                suggestionDelimiterPosition !== undefined &&\n                suggestionDelimiterPosition >= this.composer.textInputCursorStart\n            ) {\n                suggestionDelimiterPosition = suggestionDelimiterPosition + content.length;\n            }\n            this.composer.update({\n                isLastStateChangeProgrammatic: true,\n                textInputContent: partA + content + partB,\n                textInputCursorEnd: this.composer.textInputCursorStart + content.length,\n                textInputCursorStart: this.composer.textInputCursorStart + content.length,\n            });\n            this.update({ suggestionDelimiterPosition });\n        }\n\n        /**\n         * Inserts the active suggestion at the current cursor position.\n         */\n        insertSuggestion() {\n            const cursorPosition = this.composer.textInputCursorStart;\n            let textLeft = this.composer.textInputContent.substring(\n                0,\n                this.suggestionDelimiterPosition + 1\n            );\n            let textRight = this.composer.textInputContent.substring(\n                cursorPosition,\n                this.composer.textInputContent.length\n            );\n            if (this.suggestionDelimiter === ':') {\n                textLeft = this.composer.textInputContent.substring(\n                    0,\n                    this.suggestionDelimiterPosition\n                );\n                textRight = this.composer.textInputContent.substring(\n                    cursorPosition,\n                    this.composer.textInputContent.length\n                );\n            }\n            const recordReplacement = this.activeSuggestedRecord.getMentionText();\n            const updateData = {\n                isLastStateChangeProgrammatic: true,\n                textInputContent: textLeft + recordReplacement + ' ' + textRight,\n                textInputCursorEnd: textLeft.length + recordReplacement.length + 1,\n                textInputCursorStart: textLeft.length + recordReplacement.length + 1,\n            };\n            // Specific cases for channel and partner mentions: the message with\n            // the mention will appear in the target channel, or be notified to\n            // the target partner.\n            switch (this.activeSuggestedRecord.constructor.modelName) {\n                case 'mail.thread':\n                    Object.assign(updateData, { mentionedChannels: link(this.activeSuggestedRecord) });\n                    break;\n                case 'mail.partner':\n                    Object.assign(updateData, { mentionedPartners: link(this.activeSuggestedRecord) });\n                    break;\n            }\n            this.composer.update(updateData);\n        }\n\n\n        /**\n         * Handles click on the cancel link.\n         *\n         * @param {MouseEvent} ev\n         */\n        onClickCancelLink(ev) {\n            ev.preventDefault();\n            this.discard();\n        }\n\n\n        /**\n         * Handles click on the save link.\n         *\n         * @param {MouseEvent} ev\n         */\n        onClickSaveLink(ev) {\n            ev.preventDefault();\n            if (!this.composer.canPostMessage) {\n                if (this.composer.hasUploadingAttachment) {\n                    this.env.services['notification'].notify({\n                        message: this.env._t(\"Please wait while the file is uploading.\"),\n                        type: 'warning',\n                    });\n                }\n                return;\n            }\n            if (this.messageViewInEditing) {\n                this.updateMessage();\n                return;\n            }\n            this.postMessage();\n        }\n\n        /**\n         * Handles click on the \"stop replying\" button.\n         *\n         * @param {MouseEvent} ev\n         */\n        onClickStopReplying(ev) {\n            this.threadView.update({\n                replyingToMessageView: clear(),\n            });\n        }\n\n        /**\n         * Open the full composer modal.\n         */\n        async openFullComposer() {\n            const attachmentIds = this.composer.attachments.map(attachment => attachment.id);\n            const context = {\n                default_attachment_ids: attachmentIds,\n                default_body: escapeAndCompactTextContent(this.composer.textInputContent),\n                default_is_log: this.composer.isLog,\n                default_model: this.composer.activeThread.model,\n                default_partner_ids: this.composer.recipients.map(partner => partner.id),\n                default_res_id: this.composer.activeThread.id,\n                mail_post_autofollow: true,\n            };\n\n            const action = {\n                type: 'ir.actions.act_window',\n                res_model: 'mail.compose.message',\n                view_mode: 'form',\n                views: [[false, 'form']],\n                target: 'new',\n                context: context,\n            };\n            const composer = this.composer;\n            const options = {\n                on_close: () => {\n                    if (!composer.exists()) {\n                        return;\n                    }\n                    composer._reset();\n                    if (composer.activeThread) {\n                        composer.activeThread.loadNewMessages();\n                    }\n                },\n            };\n            await this.env.bus.trigger('do-action', { action, options });\n        }\n\n        /**\n         * Post a message in provided composer's thread based on current composer fields values.\n         */\n        async postMessage() {\n            const composer = this.composer;\n            if (composer.thread.model === 'mail.channel') {\n                const command = this._getCommandFromText(composer.textInputContent);\n                if (command) {\n                    await command.execute({ channel: composer.thread, body: composer.textInputContent });\n                    if (composer.exists()) {\n                        composer._reset();\n                    }\n                    return;\n                }\n            }\n            if (this.messaging.currentPartner) {\n                composer.thread.unregisterCurrentPartnerIsTyping({ immediateNotify: true });\n            }\n            const postData = this._getMessageData();\n            const params = {\n                'post_data': postData,\n                'thread_id': composer.thread.id,\n                'thread_model': composer.thread.model,\n            };\n            try {\n                composer.update({ isPostingMessage: true });\n                if (composer.thread.model === 'mail.channel') {\n                    Object.assign(postData, {\n                        subtype_xmlid: 'mail.mt_comment',\n                    });\n                } else {\n                    Object.assign(postData, {\n                        subtype_xmlid: composer.isLog ? 'mail.mt_note' : 'mail.mt_comment',\n                    });\n                    if (!composer.isLog) {\n                        params.context = { mail_post_autofollow: true };\n                    }\n                }\n                if (this.threadView && this.threadView.replyingToMessageView && this.threadView.thread !== this.messaging.inbox) {\n                    postData.parent_id = this.threadView.replyingToMessageView.message.id;\n                }\n                params.context = Object.assign(params.context || {}, session.user_context);\n                const chatter = this.chatter;\n                const { threadView = {} } = this;\n                const { thread: chatterThread } = this.chatter || {};\n                const { thread: threadViewThread } = threadView;\n                const messageData = await this.env.services.rpc({ route: `/mail/message/post`, params });\n                if (!this.messaging) {\n                    return;\n                }\n                const message = this.messaging.models['mail.message'].insert(\n                    this.messaging.models['mail.message'].convertData(messageData)\n                );\n                for (const threadView of message.originThread.threadViews) {\n                    // Reset auto scroll to be able to see the newly posted message.\n                    threadView.update({ hasAutoScrollOnMessageReceived: true });\n                    threadView.addComponentHint('message-posted', { message });\n                }\n                if (chatter && chatter.exists() && chatter.component) {\n                    chatter.component.trigger('o-message-posted');\n                }\n                if (chatterThread) {\n                    if (this.exists()) {\n                        this.delete();\n                    }\n                    if (chatterThread.exists()) {\n                        // Load new messages to fetch potential new messages from other users (useful due to lack of auto-sync in chatter).\n                        chatterThread.loadNewMessages();\n                        chatterThread.refreshFollowers();\n                        chatterThread.fetchAndUpdateSuggestedRecipients();\n                    }\n                }\n                if (threadViewThread) {\n                    if (threadViewThread === this.messaging.inbox) {\n                        if (this.exists()) {\n                            this.delete();\n                        }\n                        this.env.services['notification'].notify({\n                            message: _.str.sprintf(this.env._t(`Message posted on \"%s\"`), message.originThread.displayName),\n                            type: 'info',\n                        });\n                    }\n                    if (threadView && threadView.exists()) {\n                        threadView.update({ replyingToMessageView: clear() });\n                    }\n                }\n                if (composer.exists()) {\n                    composer._reset();\n                }\n            } finally {\n                if (composer.exists()) {\n                    composer.update({ isPostingMessage: false });\n                }\n            }\n        }\n\n        /**\n         * Sets the first suggestion as active. Main and extra records are\n         * considered together.\n         */\n        setFirstSuggestionActive() {\n            const suggestedRecords = this.mainSuggestedRecords.concat(this.extraSuggestedRecords);\n            const firstRecord = suggestedRecords[0];\n            this.update({ activeSuggestedRecord: link(firstRecord) });\n        }\n\n        /**\n         * Sets the last suggestion as active. Main and extra records are\n         * considered together.\n         */\n        setLastSuggestionActive() {\n            const suggestedRecords = this.mainSuggestedRecords.concat(this.extraSuggestedRecords);\n            const { length, [length - 1]: lastRecord } = suggestedRecords;\n            this.update({ activeSuggestedRecord: link(lastRecord) });\n        }\n\n        /**\n         * Sets the next suggestion as active. Main and extra records are\n         * considered together.\n         */\n        setNextSuggestionActive() {\n            const suggestedRecords = this.mainSuggestedRecords.concat(this.extraSuggestedRecords);\n            const activeElementIndex = suggestedRecords.findIndex(\n                suggestion => suggestion === this.activeSuggestedRecord\n            );\n            if (activeElementIndex === suggestedRecords.length - 1) {\n                // loop when reaching the end of the list\n                this.setFirstSuggestionActive();\n                return;\n            }\n            const nextRecord = suggestedRecords[activeElementIndex + 1];\n            this.update({ activeSuggestedRecord: link(nextRecord) });\n        }\n\n        /**\n         * Sets the previous suggestion as active. Main and extra records are\n         * considered together.\n         */\n        setPreviousSuggestionActive() {\n            const suggestedRecords = this.mainSuggestedRecords.concat(this.extraSuggestedRecords);\n            const activeElementIndex = suggestedRecords.findIndex(\n                suggestion => suggestion === this.activeSuggestedRecord\n            );\n            if (activeElementIndex === 0) {\n                // loop when reaching the start of the list\n                this.setLastSuggestionActive();\n                return;\n            }\n            const previousRecord = suggestedRecords[activeElementIndex - 1];\n            this.update({ activeSuggestedRecord: link(previousRecord) });\n        }\n\n        /**\n         * Update a posted message when the message is ready.\n         */\n        async updateMessage() {\n            const composer = this.composer;\n            if (!composer.textInputContent) {\n                this.messageViewInEditing.messageActionList.update({ showDeleteConfirm: true });\n                return;\n            }\n            const escapedAndCompactContent = escapeAndCompactTextContent(composer.textInputContent);\n            let body = escapedAndCompactContent.replace(/&nbsp;/g, ' ').trim();\n            body = this._generateMentionsLinks(body);\n            body = parseAndTransform(body, addLink);\n            body = this._generateEmojisOnHtml(body);\n            let data = {\n                body: body,\n                attachment_ids: composer.attachments.concat(this.messageViewInEditing.message.attachments).map(attachment => attachment.id),\n                attachment_tokens: composer.attachments.concat(this.messageViewInEditing.message.attachments).map(attachment => attachment.accessToken),\n            };\n            try {\n                composer.update({ isPostingMessage: true });\n                const messageViewInEditing = this.messageViewInEditing;\n                await messageViewInEditing.message.updateContent(data);\n                if (messageViewInEditing.exists()) {\n                    messageViewInEditing.stopEditing();\n                }\n            } finally {\n                if (composer.exists()) {\n                    composer.update({ isPostingMessage: false });\n                }\n            }\n        }\n\n        //----------------------------------------------------------------------\n        // Private\n        //----------------------------------------------------------------------\n\n        /**\n         * Clears the active suggested record on closing mentions or adapt it if\n         * the active current record is no longer part of the suggestions.\n         *\n         * @private\n         * @returns {mail.model}\n         */\n        _computeActiveSuggestedRecord() {\n            if (\n                this.mainSuggestedRecords.length === 0 &&\n                this.extraSuggestedRecords.length === 0\n            ) {\n                return unlink();\n            }\n            if (\n                this.mainSuggestedRecords.includes(this.activeSuggestedRecord) ||\n                this.extraSuggestedRecords.includes(this.activeSuggestedRecord)\n            ) {\n                return;\n            }\n            const suggestedRecords = this.mainSuggestedRecords.concat(this.extraSuggestedRecords);\n            const firstRecord = suggestedRecords[0];\n            return link(firstRecord);\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeAttachmentList() {\n            return (this.composer && this.composer.attachments.length > 0)\n                ? insertAndReplace()\n                : clear();\n        }\n\n        /**\n         * @private\n         * @returns {FieldCommand}\n         */\n        _computeComposer() {\n            if (this.threadView) {\n                // When replying to a message, always use the composer from that message's thread\n                if (this.threadView && this.threadView.replyingToMessageView) {\n                    return replace(this.threadView.replyingToMessageView.message.originThread.composer);\n                }\n                if (this.threadView.thread && this.threadView.thread.composer) {\n                    return replace(this.threadView.thread.composer);\n                }\n            }\n            if (this.messageViewInEditing && this.messageViewInEditing.composerForEditing) {\n                return replace(this.messageViewInEditing.composerForEditing);\n            }\n            if (this.chatter && this.chatter.thread && this.chatter.thread.composer) {\n                return replace(this.chatter.thread.composer);\n            }\n            return clear();\n        }\n\n        /**\n         * Clears the extra suggested record on closing mentions, and ensures\n         * the extra list does not contain any element already present in the\n         * main list, which is a requirement for the navigation process.\n         *\n         * @private\n         * @returns {mail.model[]}\n         */\n        _computeExtraSuggestedRecords() {\n            if (this.suggestionDelimiterPosition === undefined) {\n                return unlinkAll();\n            }\n            return unlink(this.mainSuggestedRecords);\n        }\n\n        /**\n         * @private\n         * @return {boolean}\n         */\n        _computeHasDropZone() {\n            return true;\n        }\n\n        /**\n         * @private\n         * @return {boolean}\n         */\n        _computeHasSuggestions() {\n            return this.mainSuggestedRecords.length > 0 || this.extraSuggestedRecords.length > 0;\n        }\n\n        /**\n         * Clears the main suggested record on closing mentions.\n         *\n         * @private\n         * @returns {mail.model[]}\n         */\n        _computeMainSuggestedRecords() {\n            if (this.suggestionDelimiterPosition === undefined) {\n                return unlinkAll();\n            }\n        }\n\n        /**\n         * @private\n         * @returns {string}\n         */\n        _computeSendButtonText() {\n            if (\n                this.composer &&\n                this.composer.isLog &&\n                this.composer.activeThread &&\n                this.composer.activeThread.model !== 'mail.channel'\n            ) {\n                return this.env._t(\"Log\");\n            }\n            return this.env._t(\"Send\");\n        }\n\n        /**\n         * @private\n         * @returns {string}\n         */\n        _computeSuggestionDelimiter() {\n            if (\n                !this.composer ||\n                this.suggestionDelimiterPosition === undefined ||\n                this.suggestionDelimiterPosition >= this.composer.textInputContent.length\n            ) {\n                return clear();\n            }\n            return this.composer.textInputContent[this.suggestionDelimiterPosition];\n        }\n\n        /**\n         * @private\n         * @returns {string}\n         */\n        _computeSuggestionModelName() {\n            switch (this.suggestionDelimiter) {\n                case '@':\n                    return 'mail.partner';\n                case ':':\n                    return 'mail.canned_response';\n                case '/':\n                    return 'mail.channel_command';\n                case '#':\n                    return 'mail.thread';\n                default:\n                    return clear();\n            }\n        }\n\n        /**\n         * @private\n         * @returns {string}\n         */\n        _computeSuggestionSearchTerm() {\n            if (\n                !this.composer ||\n                this.suggestionDelimiterPosition === undefined ||\n                this.suggestionDelimiterPosition >= this.composer.textInputCursorStart\n            ) {\n                return clear();\n            }\n            return this.composer.textInputContent.substring(this.suggestionDelimiterPosition + 1, this.composer.textInputCursorStart);\n        }\n\n        /**\n         * Executes the given async function, only when the last function\n         * executed by this method terminates. If there is already a pending\n         * function it is replaced by the new one. This ensures the result of\n         * these function come in the same order as the call order, and it also\n         * allows to skip obsolete intermediate calls.\n         *\n         * @private\n         * @param {function} func\n         */\n        async _executeOrQueueFunction(func) {\n            if (this._hasMentionRpcInProgress) {\n                this._nextMentionRpcFunction = func;\n                return;\n            }\n            this._hasMentionRpcInProgress = true;\n            this._nextMentionRpcFunction = undefined;\n            await func();\n            if (this.exists()) {\n                this._hasMentionRpcInProgress = false;\n                if (this._nextMentionRpcFunction) {\n                    this._executeOrQueueFunction(this._nextMentionRpcFunction);\n                }\n            }\n        }\n\n\n        /**\n         * @private\n         * @param {string} htmlString\n         * @returns {string}\n         */\n        _generateEmojisOnHtml(htmlString) {\n            for (const emoji of emojis) {\n                for (const source of emoji.sources) {\n                    const escapedSource = String(source).replace(\n                        /([.*+?=^!:${}()|[\\]/\\\\])/g,\n                        '\\\\$1');\n                    const regexp = new RegExp(\n                        '(\\\\s|^)(' + escapedSource + ')(?=\\\\s|$)',\n                        'g');\n                    htmlString = htmlString.replace(regexp, '$1' + emoji.unicode);\n                }\n            }\n            return htmlString;\n        }\n\n        /**\n         *\n         * Generates the html link related to the mentioned partner\n         *\n         * @private\n         * @param {string} body\n         * @returns {string}\n         */\n        _generateMentionsLinks(body) {\n            // List of mention data to insert in the body.\n            // Useful to do the final replace after parsing to avoid using the\n            // same tag twice if two different mentions have the same name.\n            const mentions = [];\n            for (const partner of this.composer.mentionedPartners) {\n                const placeholder = `@-mention-partner-${partner.id}`;\n                const text = `@${owl.utils.escape(partner.name)}`;\n                mentions.push({\n                    class: 'o_mail_redirect',\n                    id: partner.id,\n                    model: 'res.partner',\n                    placeholder,\n                    text,\n                });\n                body = body.replace(text, placeholder);\n            }\n            for (const channel of this.composer.mentionedChannels) {\n                const placeholder = `#-mention-channel-${channel.id}`;\n                const text = `#${owl.utils.escape(channel.name)}`;\n                mentions.push({\n                    class: 'o_channel_redirect',\n                    id: channel.id,\n                    model: 'mail.channel',\n                    placeholder,\n                    text,\n                });\n                body = body.replace(text, placeholder);\n            }\n            const baseHREF = this.env.session.url('/web');\n            for (const mention of mentions) {\n                const href = `href='${baseHREF}#model=${mention.model}&id=${mention.id}'`;\n                const attClass = `class='${mention.class}'`;\n                const dataOeId = `data-oe-id='${mention.id}'`;\n                const dataOeModel = `data-oe-model='${mention.model}'`;\n                const target = `target='_blank'`;\n                const link = `<a ${href} ${attClass} ${dataOeId} ${dataOeModel} ${target}>${mention.text}</a>`;\n                body = body.replace(mention.placeholder, link);\n            }\n            return body;\n        }\n\n        /**\n         * @private\n         * @param {string} content html content\n         * @returns {mail.channel_command|undefined} command, if any in the content\n         */\n        _getCommandFromText(content) {\n            if (content.startsWith('/')) {\n                const firstWord = content.substring(1).split(/\\s/)[0];\n                return this.messaging.commands.find(command => {\n                    if (command.name !== firstWord) {\n                        return false;\n                    }\n                    if (command.channel_types) {\n                        return command.channel_types.includes(this.composer.thread.channel_type);\n                    }\n                    return true;\n                });\n            }\n            return undefined;\n        }\n\n        /**\n         * Gather data for message post.\n         *\n         * @private\n         * @returns {Object}\n         */\n        _getMessageData() {\n            const escapedAndCompactContent = escapeAndCompactTextContent(this.composer.textInputContent);\n            let body = escapedAndCompactContent.replace(/&nbsp;/g, ' ').trim();\n            // This message will be received from the mail composer as html content\n            // subtype but the urls will not be linkified. If the mail composer\n            // takes the responsibility to linkify the urls we end up with double\n            // linkification a bit everywhere. Ideally we want to keep the content\n            // as text internally and only make html enrichment at display time but\n            // the current design makes this quite hard to do.\n            body = this._generateMentionsLinks(body);\n            body = parseAndTransform(body, addLink);\n            body = this._generateEmojisOnHtml(body);\n            return {\n                attachment_ids: this.composer.attachments.map(attachment => attachment.id),\n                attachment_tokens: this.composer.attachments.map(attachment => attachment.accessToken),\n                body,\n                message_type: 'comment',\n                partner_ids: this.composer.recipients.map(partner => partner.id),\n            };\n        }\n\n        /**\n         * Handles change of this composer. Useful to reset the state of the\n         * composer text input.\n         */\n        _onChangeComposer() {\n            this.composer.update({ isLastStateChangeProgrammatic: true });\n        }\n\n        /**\n         * @private\n         */\n        _onChangeDetectSuggestionDelimiterPosition() {\n            if (!this.composer) {\n                return;\n            }\n            if (this.composer.textInputCursorStart !== this.composer.textInputCursorEnd) {\n                // avoid interfering with multi-char selection\n                return this.update({ suggestionDelimiterPosition: clear() });\n            }\n            const candidatePositions = [];\n            // keep the current delimiter if it is still valid\n            if (\n                this.suggestionDelimiterPosition !== undefined &&\n                this.suggestionDelimiterPosition < this.composer.textInputCursorStart\n            ) {\n                candidatePositions.push(this.suggestionDelimiterPosition);\n            }\n            // consider the char before the current cursor position if the\n            // current delimiter is no longer valid (or if there is none)\n            if (this.composer.textInputCursorStart > 0) {\n                candidatePositions.push(this.composer.textInputCursorStart - 1);\n            }\n            const suggestionDelimiters = ['@', ':', '#', '/'];\n            for (const candidatePosition of candidatePositions) {\n                if (\n                    candidatePosition < 0 ||\n                    candidatePosition >= this.composer.textInputContent.length\n                ) {\n                    continue;\n                }\n                const candidateChar = this.composer.textInputContent[candidatePosition];\n                if (candidateChar === '/' && candidatePosition !== 0) {\n                    continue;\n                }\n                if (!suggestionDelimiters.includes(candidateChar)) {\n                    continue;\n                }\n                const charBeforeCandidate = this.composer.textInputContent[candidatePosition - 1];\n                if (charBeforeCandidate && !/\\s/.test(charBeforeCandidate)) {\n                    continue;\n                }\n                this.update({ suggestionDelimiterPosition: candidatePosition });\n                return;\n            }\n            return this.update({ suggestionDelimiterPosition: clear() });\n        }\n\n        /**\n         * Updates the suggestion state based on the currently saved composer\n         * state (in particular content and cursor position).\n         *\n         * @private\n         */\n        _onChangeUpdateSuggestionList() {\n            if (this.messaging.isCurrentUserGuest) {\n                return;\n            }\n            // Update the suggestion list immediately for a reactive UX...\n            this._updateSuggestionList();\n            // ...and then update it again after the server returned data.\n            this._executeOrQueueFunction(async () => {\n                if (\n                    !this.exists() ||\n                    this.suggestionDelimiterPosition === undefined ||\n                    this.suggestionSearchTerm === undefined ||\n                    !this.suggestionModelName\n                ) {\n                    return; // ignore obsolete call\n                }\n                const Model = this.messaging.models[this.suggestionModelName];\n                const searchTerm = this.suggestionSearchTerm;\n                await Model.fetchSuggestions(searchTerm, { thread: this.composer.activeThread });\n                if (!this.exists()) {\n                    return;\n                }\n                this._updateSuggestionList();\n                if (\n                    this.suggestionSearchTerm &&\n                    this.suggestionSearchTerm === searchTerm &&\n                    this.suggestionModelName &&\n                    this.messaging.models[this.suggestionModelName] === Model &&\n                    !this.hasSuggestions\n                ) {\n                    this.closeSuggestions();\n                }\n            });\n        }\n\n        /**\n         * Updates the current suggestion list. This method should be called\n         * whenever the UI has to be refreshed following change in state.\n         *\n         * This method should ideally be a compute, but its dependencies are\n         * currently too complex to express due to accessing plenty of fields\n         * from all records of dynamic models.\n         *\n         * @private\n         */\n        _updateSuggestionList() {\n            if (\n                this.suggestionDelimiterPosition === undefined ||\n                this.suggestionSearchTerm === undefined ||\n                !this.suggestionModelName\n            ) {\n                return;\n            }\n            const Model = this.messaging.models[this.suggestionModelName];\n            const [\n                mainSuggestedRecords,\n                extraSuggestedRecords = [],\n            ] = Model.searchSuggestions(this.suggestionSearchTerm, { thread: this.composer.activeThread });\n            const sortFunction = Model.getSuggestionSortFunction(this.suggestionSearchTerm, { thread: this.composer.activeThread });\n            mainSuggestedRecords.sort(sortFunction);\n            extraSuggestedRecords.sort(sortFunction);\n            // arbitrary limit to avoid displaying too many elements at once\n            // ideally a load more mechanism should be introduced\n            const limit = 8;\n            mainSuggestedRecords.length = Math.min(mainSuggestedRecords.length, limit);\n            extraSuggestedRecords.length = Math.min(extraSuggestedRecords.length, limit - mainSuggestedRecords.length);\n            this.update({\n                extraSuggestedRecords: replace(extraSuggestedRecords),\n                hasToScrollToActiveSuggestion: true,\n                mainSuggestedRecords: replace(mainSuggestedRecords),\n            });\n        }\n\n    }\n\n    ComposerView.fields = {\n        /**\n         * Determines the suggested record that is currently active. This record\n         * is highlighted in the UI and it will be the selected record if the\n         * suggestion is confirmed by the user.\n         */\n        activeSuggestedRecord: many2one('mail.model', {\n            compute: '_computeActiveSuggestedRecord',\n        }),\n        /**\n         * Determines the attachment list that will be used to display the attachments.\n         */\n        attachmentList: one2one('mail.attachment_list', {\n            compute: '_computeAttachmentList',\n            inverse: 'composerView',\n            isCausal: true,\n            readonly: true,\n        }),\n        /**\n         * States the chatter which this composer allows editing (if any).\n         */\n        chatter: one2one('mail.chatter', {\n            inverse: 'composerView',\n            readonly: true,\n        }),\n        /**\n         * States the composer state that is displayed by this composer view.\n         */\n        composer: many2one('mail.composer', {\n            compute: '_computeComposer',\n            inverse: 'composerViews',\n            required: true,\n        }),\n        /**\n         * Determines whether this composer should be focused at next render.\n         */\n        doFocus: attr(),\n        /**\n         * Determines the extra records that are currently suggested.\n         * Allows to have different model types of mentions through a dynamic\n         * process. 2 arbitrary lists can be provided and the second is defined\n         * as \"extra\".\n         */\n        extraSuggestedRecords: many2many('mail.model', {\n            compute: '_computeExtraSuggestedRecords',\n        }),\n        hasDropZone: attr({\n            compute: '_computeHasDropZone',\n        }),\n        hasFocus: attr({\n            default: false,\n        }),\n        /**\n         * States whether there is any result currently found for the current\n         * suggestion delimiter and search term, if applicable.\n         */\n        hasSuggestions: attr({\n            compute: '_computeHasSuggestions',\n            default: false,\n        }),\n        /**\n         * Determines whether the currently active suggestion should be scrolled\n         * into view.\n         */\n        hasToScrollToActiveSuggestion: attr({\n            default: false,\n        }),\n        /**\n         * Determines the main records that are currently suggested.\n         * Allows to have different model types of mentions through a dynamic\n         * process. 2 arbitrary lists can be provided and the first is defined\n         * as \"main\".\n         */\n        mainSuggestedRecords: many2many('mail.model', {\n            compute: '_computeMainSuggestedRecords',\n        }),\n        /**\n         * States the message view on which this composer allows editing (if any).\n         */\n        messageViewInEditing: one2one('mail.message_view', {\n            inverse: 'composerViewInEditing',\n            readonly: true,\n        }),\n        /**\n         * Determines the label on the send button of this composer view.\n         */\n        sendButtonText: attr({\n            compute: '_computeSendButtonText',\n        }),\n        /**\n         * States which type of suggestion is currently in progress, if any.\n         * The value of this field contains the magic char that corresponds to\n         * the suggestion currently in progress, and it must be one of these:\n         * canned responses (:), channels (#), commands (/) and partners (@)\n         */\n        suggestionDelimiter: attr({\n            compute: '_computeSuggestionDelimiter',\n        }),\n        /**\n         * States the position inside textInputContent of the suggestion\n         * delimiter currently in consideration. Useful if the delimiter char\n         * appears multiple times in the content.\n         * Note: the position is 0 based so it's important to compare to\n         * `undefined` when checking for the absence of a value.\n         */\n        suggestionDelimiterPosition: attr(),\n        /**\n         * States the target model name of the suggestion currently in progress,\n         * if any.\n         */\n        suggestionModelName: attr({\n            compute: '_computeSuggestionModelName',\n        }),\n        /**\n         * States the search term to use for suggestions (if any).\n         */\n        suggestionSearchTerm: attr({\n            compute: '_computeSuggestionSearchTerm',\n        }),\n        /**\n         * States the thread view on which this composer allows editing (if any).\n         */\n        threadView: one2one('mail.thread_view', {\n            inverse: 'composerView',\n            readonly: true,\n        }),\n    };\n    ComposerView.identifyingFields = [['threadView', 'messageViewInEditing', 'chatter']];\n    ComposerView.onChanges = [\n        new OnChange({\n            dependencies: ['composer'],\n            methodName: '_onChangeComposer',\n        }),\n        new OnChange({\n            dependencies: ['composer.textInputContent', 'composer.textInputCursorEnd', 'composer.textInputCursorStart'],\n            methodName: '_onChangeDetectSuggestionDelimiterPosition',\n        }),\n        new OnChange({\n            dependencies: ['suggestionDelimiterPosition', 'suggestionModelName', 'suggestionSearchTerm', 'composer.activeThread'],\n            methodName: '_onChangeUpdateSuggestionList',\n        }),\n    ];\n    ComposerView.modelName = 'mail.composer_view';\n\n    return ComposerView;\n}\n\nregisterNewModel('mail.composer_view', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr } from '@mail/model/model_field';\nimport { clear } from '@mail/model/model_field_command';\n\nfunction factory(dependencies) {\n\n    class Country extends dependencies['mail.model'] {\n\n        //----------------------------------------------------------------------\n        // Private\n        //----------------------------------------------------------------------\n\n        /**\n         * @private\n         * @returns {string|undefined}\n         */\n        _computeFlagUrl() {\n            if (!this.code) {\n                return clear();\n            }\n            return `/base/static/img/country_flags/${this.code}.png`;\n        }\n\n    }\n\n    Country.fields = {\n        code: attr(),\n        flagUrl: attr({\n            compute: '_computeFlagUrl',\n        }),\n        id: attr({\n            readonly: true,\n            required: true,\n        }),\n        name: attr(),\n    };\n    Country.identifyingFields = ['id'];\n    Country.modelName = 'mail.country';\n\n    return Country;\n}\n\nregisterNewModel('mail.country', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr } from '@mail/model/model_field';\n\nfunction factory(dependencies) {\n\n    class Device extends dependencies['mail.model'] {\n\n        /**\n         * @override\n         */\n        _created() {\n            const res = super._created(...arguments);\n            this._refresh();\n            this._onResize = _.debounce(() => this._refresh(), 100);\n            return res;\n        }\n\n        /**\n         * @override\n         */\n        _willDelete() {\n            window.removeEventListener('resize', this._onResize);\n            return super._willDelete(...arguments);\n        }\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        /**\n         * Called when messaging is started.\n         */\n        start() {\n            // TODO FIXME Not using this.env.browser because it's proxified, and\n            // addEventListener does not work on proxified window. task-2234596\n            window.addEventListener('resize', this._onResize);\n        }\n\n        //----------------------------------------------------------------------\n        // Private\n        //----------------------------------------------------------------------\n\n        /**\n         * @private\n         */\n        _refresh() {\n            this.update({\n                globalWindowInnerHeight: this.env.browser.innerHeight,\n                globalWindowInnerWidth: this.env.browser.innerWidth,\n                isMobile: this.env.device.isMobile,\n                isMobileDevice: this.env.device.isMobileDevice,\n                sizeClass: this.env.device.size_class,\n            });\n        }\n    }\n\n    Device.fields = {\n        globalWindowInnerHeight: attr(),\n        globalWindowInnerWidth: attr(),\n        /**\n         * States whether this device has a small size (note: this field name is not ideal).\n         */\n        isMobile: attr(),\n        /**\n         * States whether this device is an actual mobile device.\n         */\n        isMobileDevice: attr(),\n        /**\n         * Size class of the device.\n         *\n         * This is an integer representation of the size.\n         * Useful for conditional based on a device size, including\n         * lower/higher. Device size classes are defined in sizeClasses\n         * attribute.\n         */\n        sizeClass: attr(),\n    };\n    Device.identifyingFields = ['messaging'];\n    Device.modelName = 'mail.device';\n\n    return Device;\n}\n\nregisterNewModel('mail.device', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { many2one, one2one } from '@mail/model/model_field';\nimport { replace } from '@mail/model/model_field_command';\n\nfunction factory(dependencies) {\n\n    class Dialog extends dependencies['mail.model'] {\n\n        /**\n         * @private\n         * @returns {FieldCommand}\n         */\n        _computeRecord() {\n            if (this.attachmentViewer) {\n                return replace(this.attachmentViewer);\n            }\n            if (this.followerSubtypeList) {\n                return replace(this.followerSubtypeList);\n            }\n        }\n    }\n\n    Dialog.fields = {\n        attachmentViewer: one2one('mail.attachment_viewer', {\n            isCausal: true,\n            inverse: 'dialog',\n            readonly: true,\n        }),\n        followerSubtypeList: one2one('mail.follower_subtype_list', {\n            isCausal: true,\n            inverse: 'dialog',\n            readonly: true,\n        }),\n        manager: many2one('mail.dialog_manager', {\n            inverse: 'dialogs',\n            readonly: true,\n        }),\n        /**\n         * Content of dialog that is directly linked to a record that models\n         * a UI component, such as AttachmentViewer. These records must be\n         * created from @see `mail.dialog_manager:open()`.\n         */\n        record: one2one('mail.model', {\n            compute: '_computeRecord',\n            isCausal: true,\n            readonly: true,\n            required: true,\n        }),\n    };\n    Dialog.identifyingFields = ['manager', ['attachmentViewer', 'followerSubtypeList']];\n    Dialog.modelName = 'mail.dialog';\n\n    return Dialog;\n}\n\nregisterNewModel('mail.dialog', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { one2many } from '@mail/model/model_field';\n\nfunction factory(dependencies) {\n\n    class DialogManager extends dependencies['mail.model'] {\n    }\n\n    DialogManager.fields = {\n        // FIXME: dependent on implementation that uses insert order in relations!!\n        dialogs: one2many('mail.dialog', {\n            inverse: 'manager',\n            isCausal: true,\n        }),\n    };\n    DialogManager.identifyingFields = ['messaging'];\n    DialogManager.modelName = 'mail.dialog_manager';\n\n    return DialogManager;\n}\n\nregisterNewModel('mail.dialog_manager', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr, many2one, one2one } from '@mail/model/model_field';\nimport { clear, insertAndReplace, link, unlink } from '@mail/model/model_field_command';\n\nfunction factory(dependencies) {\n\n    class Discuss extends dependencies['mail.model'] {\n\n        /**\n         * @override\n         */\n        _created() {\n            super._created();\n            // Bind necessary until OWL supports arrow function in handlers: https://github.com/odoo/owl/issues/876\n            this.onClickStartAMeetingButton = this.onClickStartAMeetingButton.bind(this);\n        }\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        clearIsAddingItem() {\n            this.update({\n                addingChannelValue: \"\",\n                isAddingChannel: false,\n                isAddingChat: false,\n            });\n        }\n\n        /**\n         * Close the discuss app. Should reset its internal state.\n         */\n        close() {\n            this.update({ isOpen: false });\n        }\n\n        focus() {\n            if (this.threadView && this.threadView.composerView) {\n                this.threadView.composerView.update({ doFocus: true });\n            }\n        }\n\n        /**\n         * @param {Event} ev\n         * @param {Object} ui\n         * @param {Object} ui.item\n         * @param {integer} ui.item.id\n         */\n        async handleAddChannelAutocompleteSelect(ev, ui) {\n            // Necessary in order to prevent AutocompleteSelect event's default\n            // behaviour as html tags visible for a split second in text area\n            ev.preventDefault();\n            const name = this.addingChannelValue;\n            this.clearIsAddingItem();\n            if (ui.item.special) {\n                const channel = await this.async(() =>\n                    this.messaging.models['mail.thread'].performRpcCreateChannel({\n                        name,\n                        privacy: ui.item.special === 'private' ? 'private' : 'groups',\n                    })\n                );\n                channel.open();\n            } else {\n                const channel = this.messaging.models['mail.thread'].insert({\n                    id: ui.item.id,\n                    model: 'mail.channel',\n                });\n                await channel.join();\n                // Channel must be pinned immediately to be able to open it before\n                // the result of join is received on the bus.\n                channel.update({ isServerPinned: true });\n                channel.open();\n            }\n        }\n\n        /**\n         * @param {Object} req\n         * @param {string} req.term\n         * @param {function} res\n         */\n        async handleAddChannelAutocompleteSource(req, res) {\n            this.update({ addingChannelValue: req.term });\n            const threads = await this.messaging.models['mail.thread'].searchChannelsToOpen({ limit: 10, searchTerm: req.term });\n            const items = threads.map((thread) => {\n                const escapedName = owl.utils.escape(thread.name);\n                return {\n                    id: thread.id,\n                    label: escapedName,\n                    value: escapedName,\n                };\n            });\n            const escapedValue = owl.utils.escape(req.term);\n            // XDU FIXME could use a component but be careful with owl's\n            // renderToString https://github.com/odoo/owl/issues/708\n            items.push({\n                label: _.str.sprintf(\n                    `<strong>${this.env._t('Create %s')}</strong>`,\n                    `<em><span class=\"fa fa-hashtag\"/>${escapedValue}</em>`,\n                ),\n                escapedValue,\n                special: 'public'\n            }, {\n                label: _.str.sprintf(\n                    `<strong>${this.env._t('Create %s')}</strong>`,\n                    `<em><span class=\"fa fa-lock\"/>${escapedValue}</em>`,\n                ),\n                escapedValue,\n                special: 'private'\n            });\n            res(items);\n        }\n\n        /**\n         * @param {Event} ev\n         * @param {Object} ui\n         * @param {Object} ui.item\n         * @param {integer} ui.item.id\n         */\n        handleAddChatAutocompleteSelect(ev, ui) {\n            this.messaging.openChat({ partnerId: ui.item.id });\n            this.clearIsAddingItem();\n        }\n\n        /**\n         * @param {Object} req\n         * @param {string} req.term\n         * @param {function} res\n         */\n        handleAddChatAutocompleteSource(req, res) {\n            const value = owl.utils.escape(req.term);\n            this.messaging.models['mail.partner'].imSearch({\n                callback: partners => {\n                    const suggestions = partners.map(partner => {\n                        return {\n                            id: partner.id,\n                            value: partner.nameOrDisplayName,\n                            label: partner.nameOrDisplayName,\n                        };\n                    });\n                    res(_.sortBy(suggestions, 'label'));\n                },\n                keyword: value,\n                limit: 10,\n            });\n        }\n\n        /**\n         * Handles click on the mobile \"new chat\" button.\n         *\n         * @param {MouseEvent} ev\n         */\n        onClickMobileNewChatButton(ev) {\n            this.update({ isAddingChat: true });\n        }\n\n        /**\n         * Handles click on the mobile \"new channel\" button.\n         *\n         * @param {MouseEvent} ev\n         */\n        onClickMobileNewChannelButton(ev) {\n            this.update({ isAddingChannel: true });\n        }\n\n        /**\n         * Handles click on the \"Start a meeting\" button.\n         *\n         * @param {MouseEvent} ev\n         */\n        async onClickStartAMeetingButton(ev) {\n            const meetingChannel = await this.messaging.models['mail.thread'].createGroupChat({\n                default_display_mode: 'video_full_screen',\n                partners_to: [this.messaging.currentPartner.id],\n            });\n            meetingChannel.toggleCall({ startWithVideo: true });\n            await meetingChannel.open({ focus: false });\n            if (!meetingChannel.exists() || !this.threadView) {\n                return;\n            }\n            this.threadView.topbar.openInvitePopoverView();\n        }\n\n        /**\n         * Opens thread from init active id if the thread exists.\n         */\n        openInitThread() {\n            const [model, id] = typeof this.initActiveId === 'number'\n                ? ['mail.channel', this.initActiveId]\n                : this.initActiveId.split('_');\n            const thread = this.messaging.models['mail.thread'].findFromIdentifyingData({\n                id: model !== 'mail.box' ? Number(id) : id,\n                model,\n            });\n            if (!thread) {\n                return;\n            }\n            thread.open();\n            if (this.messaging.device.isMobile && thread.channel_type) {\n                this.update({ activeMobileNavbarTabId: thread.channel_type });\n            }\n        }\n\n\n        /**\n         * Opens the given thread in Discuss, and opens Discuss if necessary.\n         *\n         * @param {mail.thread} thread\n         * @param {Object} [param1={}]\n         * @param {Boolean} [param1.focus]\n         */\n        async openThread(thread, { focus } = {}) {\n            this.update({\n                thread: link(thread),\n            });\n            if (focus !== undefined ? focus : !this.messaging.device.isMobileDevice) {\n                this.focus();\n            }\n            if (!this.isOpen) {\n                this.env.bus.trigger('do-action', {\n                    action: 'mail.action_discuss',\n                    options: {\n                        name: this.env._t(\"Discuss\"),\n                        active_id: this.threadToActiveId(this),\n                        clear_breadcrumbs: false,\n                        on_reverse_breadcrumb: () => this.close(), // this is useless, close is called by destroy anyway\n                    },\n                });\n            }\n        }\n\n        /**\n         * @param {mail.thread} thread\n         * @returns {string}\n         */\n        threadToActiveId(thread) {\n            return `${thread.model}_${thread.id}`;\n        }\n\n        /**\n         * @param {string} value\n         */\n        onInputQuickSearch(value) {\n            // Opens all categories only when user starts to search from empty search value.\n            if (!this.sidebarQuickSearchValue) {\n                this.categoryChat.open();\n                this.categoryChannel.open();\n            }\n            this.update({ sidebarQuickSearchValue: value });\n        }\n\n        //----------------------------------------------------------------------\n        // Private\n        //----------------------------------------------------------------------\n\n        /**\n         * @private\n         * @returns {string|undefined}\n         */\n        _computeActiveId() {\n            if (!this.thread) {\n                return clear();\n            }\n            return this.threadToActiveId(this.thread);\n        }\n\n        /**\n         * @private\n         * @returns {string}\n         */\n        _computeAddingChannelValue() {\n            if (!this.isOpen) {\n                return \"\";\n            }\n            return this.addingChannelValue;\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeHasThreadView() {\n            if (!this.thread || !this.isOpen) {\n                return false;\n            }\n            if (\n                this.messaging.device.isMobile &&\n                (\n                    this.activeMobileNavbarTabId !== 'mailbox' ||\n                    this.thread.model !== 'mail.box'\n                )\n            ) {\n                return false;\n            }\n            return true;\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeIsAddingChannel() {\n            if (!this.isOpen) {\n                return false;\n            }\n            return this.isAddingChannel;\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeIsAddingChat() {\n            if (!this.isOpen) {\n                return false;\n            }\n            return this.isAddingChat;\n        }\n\n        /**\n         * Only pinned threads are allowed in discuss.\n         *\n         * @private\n         * @returns {mail.thread|undefined}\n         */\n        _computeThread() {\n            if (!this.thread || !this.thread.isPinned) {\n                return unlink();\n            }\n        }\n\n        /**\n         * @private\n         * @returns {mail.thread_viewer}\n         */\n        _computeThreadViewer() {\n            return insertAndReplace({\n                hasMemberList: true,\n                hasThreadView: this.hasThreadView,\n                hasTopbar: true,\n                thread: this.thread ? link(this.thread) : unlink(),\n            });\n        }\n    }\n\n    Discuss.fields = {\n        activeId: attr({\n            compute: '_computeActiveId',\n        }),\n        /**\n         * Active mobile navbar tab, either 'mailbox', 'chat', or 'channel'.\n         */\n        activeMobileNavbarTabId: attr({\n            default: 'mailbox',\n        }),\n        /**\n         * Value that is used to create a channel from the sidebar.\n         */\n        addingChannelValue: attr({\n            compute: '_computeAddingChannelValue',\n            default: \"\",\n        }),\n        /**\n         * Discuss sidebar category for `channel` type channel threads.\n         */\n        categoryChannel: one2one('mail.discuss_sidebar_category', {\n            inverse: 'discussAsChannel',\n            isCausal: true,\n        }),\n        /**\n         * Discuss sidebar category for `chat` type channel threads.\n         */\n        categoryChat: one2one('mail.discuss_sidebar_category', {\n            inverse: 'discussAsChat',\n            isCausal: true,\n        }),\n        /**\n         * Determines whether `this.thread` should be displayed.\n         */\n        hasThreadView: attr({\n            compute: '_computeHasThreadView',\n        }),\n        /**\n         * Formatted init thread on opening discuss for the first time,\n         * when no active thread is defined. Useful to set a thread to\n         * open without knowing its local id in advance.\n         * Support two formats:\n         *    {string} <threadModel>_<threadId>\n         *    {int} <channelId> with default model of 'mail.channel'\n         */\n        initActiveId: attr({\n            default: 'mail.box_inbox',\n        }),\n        /**\n         * Determine whether current user is currently adding a channel from\n         * the sidebar.\n         */\n        isAddingChannel: attr({\n            compute: '_computeIsAddingChannel',\n            default: false,\n        }),\n        /**\n         * Determine whether current user is currently adding a chat from\n         * the sidebar.\n         */\n        isAddingChat: attr({\n            compute: '_computeIsAddingChat',\n            default: false,\n        }),\n        /**\n         * Determines if the logic for opening a thread via the `initActiveId`\n         * has been processed. This is necessary to ensure that this only\n         * happens once.\n         */\n        isInitThreadHandled: attr({\n            default: false,\n        }),\n        /**\n         * Whether the discuss app is open or not. Useful to determine\n         * whether the discuss or chat window logic should be applied.\n         */\n        isOpen: attr({\n            default: false,\n        }),\n        /**\n         * The menu_id of discuss app, received on mail/init_messaging and\n         * used to open discuss from elsewhere.\n         */\n        menu_id: attr({\n            default: null,\n        }),\n        /**\n         * Quick search input value in the discuss sidebar (desktop). Useful\n         * to filter channels and chats based on this input content.\n         */\n        sidebarQuickSearchValue: attr({\n            default: \"\",\n        }),\n        /**\n         * States the OWL ref of the start a meeting button in sidebar.\n         * Useful to provide anchor for the invite popover positioning.\n         */\n        startAMeetingButtonRef: attr(),\n        /**\n         * Determines the `mail.thread` that should be displayed by `this`.\n         */\n        thread: many2one('mail.thread', {\n            compute: '_computeThread',\n        }),\n        /**\n         * States the `mail.thread_view` displaying `this.thread`.\n         */\n        threadView: one2one('mail.thread_view', {\n            related: 'threadViewer.threadView',\n        }),\n        /**\n         * Determines the `mail.thread_viewer` managing the display of `this.thread`.\n         */\n        threadViewer: one2one('mail.thread_viewer', {\n            compute: '_computeThreadViewer',\n            inverse: 'discuss',\n            isCausal: true,\n            readonly: true,\n            required: true,\n        }),\n    };\n    Discuss.identifyingFields = ['messaging'];\n    Discuss.modelName = 'mail.discuss';\n\n    return Discuss;\n}\n\nregisterNewModel('mail.discuss', factory);\n", "/** @odoo-module **/\n\nimport { attr, one2one } from '@mail/model/model_field';\nimport { registerNewModel } from '@mail/model/model_core';\nimport { clear, insertAndReplace, link, replace } from '@mail/model/model_field_command';\n\nfunction factory(dependencies) {\n\n    class DiscussPublicView extends dependencies['mail.model'] {\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        /**\n         * Creates and displays the thread view and clears the welcome view.\n         */\n        async switchToThreadView() {\n            this.update({\n                threadViewer: insertAndReplace({\n                    extraClass: 'flex-grow-1',\n                    hasMemberList: true,\n                    hasThreadView: true,\n                    hasTopbar: true,\n                    thread: link(this.channel),\n                }),\n                welcomeView: clear(),\n            });\n            if (this.isChannelTokenSecret) {\n                // Change the URL to avoid leaking the invitation link.\n                window.history.replaceState(window.history.state, null, `/discuss/channel/${this.channel.id}${window.location.search}`);\n            }\n            if (this.channel.defaultDisplayMode === 'video_full_screen') {\n                await this.channel.toggleCall({ startWithVideo: true });\n                await this.threadView.rtcCallViewer.activateFullScreen();\n            }\n        }\n\n        /**\n         * Creates and displays the welcome view and clears the thread viewer.\n         */\n        switchToWelcomeView() {\n            this.update({\n                threadViewer: clear(),\n                welcomeView: insertAndReplace({\n                    channel: link(this.channel),\n                    isDoFocusGuestNameInput: true,\n                    originalGuestName: this.messaging.currentGuest && this.messaging.currentGuest.name,\n                    pendingGuestName: this.messaging.currentGuest && this.messaging.currentGuest.name,\n                }),\n            });\n            if (this.welcomeView.mediaPreview) {\n                this.welcomeView.mediaPreview.enableMicrophone();\n                this.welcomeView.mediaPreview.enableVideo();\n            }\n        }\n\n        _computeMessagingAsPublicView() {\n            return replace(this.messaging);\n        }\n\n    }\n\n    DiscussPublicView.fields = {\n        /**\n         * States the channel linked to this discuss public view.\n         */\n        channel: one2one('mail.thread', {\n            readonly: true,\n            required: true,\n        }),\n        isChannelTokenSecret: attr({\n            default: true,\n        }),\n        messagingAsPublicView: one2one('mail.messaging', {\n            compute: '_computeMessagingAsPublicView',\n            inverse: 'discussPublicView',\n            readonly: true,\n        }),\n        shouldAddGuestAsMemberOnJoin: attr({\n            default: false,\n            readonly: true,\n        }),\n        shouldDisplayWelcomeViewInitially: attr({\n            default: false,\n            readonly: true,\n        }),\n        /**\n         * States the thread view linked to this discuss public view.\n         */\n        threadView: one2one('mail.thread_view', {\n            readonly: true,\n            related: 'threadViewer.threadView',\n        }),\n        /**\n         * States the thread viewer linked to this discuss public view.\n         */\n        threadViewer: one2one('mail.thread_viewer', {\n            inverse: 'discussPublicView',\n            isCausal: true,\n        }),\n        /**\n         * States the welcome view linked to this discuss public view.\n         */\n        welcomeView: one2one('mail.welcome_view', {\n            inverse: 'discussPublicView',\n            isCausal: true,\n        }),\n    };\n    DiscussPublicView.identifyingFields = ['messaging'];\n    DiscussPublicView.modelName = 'mail.discuss_public_view';\n\n    return DiscussPublicView;\n}\n\nregisterNewModel('mail.discuss_public_view', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr, one2many, one2one } from '@mail/model/model_field';\nimport { clear, insertAndReplace, replace } from '@mail/model/model_field_command';\nimport { OnChange } from '@mail/model/model_onchange';\n\nfunction factory(dependencies) {\n    class DiscussSidebarCategory extends dependencies['mail.model'] {\n\n        /**\n         * @override\n         */\n        _created() {\n            this.onClick = this.onClick.bind(this);\n            this.onHideAddingItem = this.onHideAddingItem.bind(this);\n            this.onAddItemAutocompleteSelect = this.onAddItemAutocompleteSelect.bind(this);\n            this.onAddItemAutocompleteSource = this.onAddItemAutocompleteSource.bind(this);\n            this.onClickCommandAdd = this.onClickCommandAdd.bind(this);\n            this.onClickCommandView = this.onClickCommandView.bind(this);\n            return super._created();\n        }\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        /**\n         * Performs the `set_res_users_settings` RPC on `res.users.settings`.\n         *\n         * @static\n         * @param {Object} resUsersSettings\n         * @param {boolean} [resUsersSettings.is_category_channel_open]\n         * @param {boolean} [resUsersSettings.is_category_chat_open]\n         */\n        static async performRpcSetResUsersSettings(resUsersSettings) {\n            return this.env.services.rpc(\n                {\n                    model: 'res.users.settings',\n                    method: 'set_res_users_settings',\n                    args: [[this.messaging.currentUser.resUsersSettingsId]],\n                    kwargs: {\n                        new_settings: resUsersSettings,\n                    },\n                },\n                { shadow: true },\n            );\n        }\n\n        /**\n         * Closes the category and notity server to change the state\n         */\n        async close() {\n            this.update({ isPendingOpen: false });\n            await this.messaging.models['mail.discuss_sidebar_category'].performRpcSetResUsersSettings({\n                [this.serverStateKey]: false,\n            });\n        }\n\n        /**\n         * Opens the category and notity server to change the state\n         */\n        async open() {\n            this.update({ isPendingOpen: true });\n            await this.messaging.models['mail.discuss_sidebar_category'].performRpcSetResUsersSettings({\n                [this.serverStateKey]: true,\n            });\n        }\n\n        //--------------------------------------------------------------------------\n        // Private\n        //--------------------------------------------------------------------------\n\n        /**\n         * @private\n         * @returns {mail.discuss_sidebar_category_item | undefined}\n         */\n        _computeActiveItem() {\n            const thread = this.messaging.discuss.thread;\n            if (thread && this.supportedChannelTypes.includes(thread.channel_type)) {\n                return insertAndReplace({\n                    channel: replace(thread),\n                    category: replace(this),\n                });\n            }\n            return clear();\n        }\n\n        /**\n         * @private\n         * @returns {mail.discuss_sidebar_category_item[]}\n         */\n        _computeFilteredCategoryItems() {\n            let categoryItems = this.categoryItems;\n            const searchValue = this.messaging.discuss.sidebarQuickSearchValue;\n            if (searchValue) {\n                const qsVal = searchValue.toLowerCase();\n                categoryItems = categoryItems.filter(categoryItem => {\n                    const nameVal = categoryItem.channel.displayName.toLowerCase();\n                    return nameVal.includes(qsVal);\n                });\n            }\n            return replace(categoryItems);\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeIsOpen() {\n            return this.isPendingOpen !== undefined ? this.isPendingOpen : this.isServerOpen;\n        }\n\n        /**\n         * @private\n         * @returns {Array[]}\n         */\n        _sortDefinitionCategoryItems() {\n            switch (this.sortComputeMethod) {\n                case 'name':\n                    return [\n                        ['defined-first', 'channel'],\n                        ['defined-first', 'channel.displayName'],\n                        ['case-insensitive-asc', 'channel.displayName'],\n                        ['smaller-first', 'channel.id'],\n                    ];\n                case 'last_action':\n                    return [\n                        ['defined-first', 'channel'],\n                        ['defined-first', 'channel.lastInterestDateTime'],\n                        ['greater-first', 'channel.lastInterestDateTime'],\n                        ['greater-first', 'channel.id'],\n                    ];\n            }\n        }\n\n        //--------------------------------------------------------------------------\n        // Handlers\n        //--------------------------------------------------------------------------\n\n        /**\n         * Changes the category open states when clicked.\n         */\n        async onClick() {\n            if (this.isOpen) {\n                await this.close();\n            } else {\n                await this.open();\n            }\n        }\n\n        /**\n         * @param {CustomEvent} ev\n         */\n        onHideAddingItem(ev) {\n            ev.stopPropagation();\n            this.update({ isAddingItem: false });\n        }\n\n        /**\n         * @param {Event} ev\n         * @param {Object} ui\n         * @param {Object} ui.item\n         * @param {integer} ui.item.id\n         */\n        onAddItemAutocompleteSelect(ev, ui) {\n            switch (this.autocompleteMethod) {\n                case 'channel':\n                    this.messaging.discuss.handleAddChannelAutocompleteSelect(ev, ui);\n                    break;\n                case 'chat':\n                    this.messaging.discuss.handleAddChatAutocompleteSelect(ev, ui);\n                    break;\n            }\n        }\n\n        /**\n         * @param {Object} req\n         * @param {string} req.term\n         * @param {function} res\n         */\n        onAddItemAutocompleteSource(req, res) {\n            switch (this.autocompleteMethod) {\n                case 'channel':\n                    this.messaging.discuss.handleAddChannelAutocompleteSource(req, res);\n                    break;\n                case 'chat':\n                    this.messaging.discuss.handleAddChatAutocompleteSource(req, res);\n                    break;\n            }\n        }\n\n        /**\n         * @param {MouseEvent} ev\n         */\n        onClickCommandAdd(ev) {\n            ev.stopPropagation();\n            this.update({ isAddingItem: true });\n        }\n\n        /**\n         * Redirects to the public channels window when view command is clicked.\n         *\n         * @param {MouseEvent} ev\n         */\n        onClickCommandView(ev) {\n            ev.stopPropagation();\n            return this.env.bus.trigger('do-action', {\n                action: {\n                    name: this.env._t(\"Public Channels\"),\n                    type: 'ir.actions.act_window',\n                    res_model: 'mail.channel',\n                    views: [[false, 'kanban'], [false, 'form']],\n                    domain: [['public', '!=', 'private']],\n                },\n            });\n        }\n\n        /**\n         * Handles change of open state coming from the server. Useful to\n         * clear pending state once server acknowledged the change.\n         *\n         * @private\n         */\n        _onIsServerOpenChanged() {\n            if (this.isServerOpen === this.isPendingOpen) {\n                this.update({ isPendingOpen: clear() });\n            }\n        }\n    }\n\n    DiscussSidebarCategory.fields = {\n        /**\n         * The category item which is active and belongs\n         * to the category.\n         */\n        activeItem: one2one('mail.discuss_sidebar_category_item', {\n            compute: '_computeActiveItem',\n        }),\n        /**\n         * Determines how the autocomplete of this category should behave.\n         * Must be one of: 'channel', 'chat'.\n         */\n        autocompleteMethod: attr(),\n        /**\n         * The title text in UI for command `add`\n         */\n        commandAddTitleText: attr(),\n        /**\n         * Determines the discuss sidebar category items that are displayed by\n         * this discuss sidebar category.\n         */\n        categoryItems: one2many('mail.discuss_sidebar_category_item', {\n            inverse: 'category',\n            isCausal: true,\n            sort: '_sortDefinitionCategoryItems',\n        }),\n        /**\n         * States the total amount of unread/action-needed threads in this\n         * category.\n         */\n        counter: attr({\n            default: 0,\n            readonly: true,\n            sum: 'categoryItems.categoryCounterContribution',\n        }),\n        discussAsChannel: one2one('mail.discuss', {\n            inverse: 'categoryChannel',\n            readonly: true,\n        }),\n        discussAsChat: one2one('mail.discuss', {\n            inverse: 'categoryChat',\n            readonly: true,\n        }),\n        /**\n         * Determines the filtered and sorted discuss sidebar category items\n         * that are displayed by this discuss sidebar category.\n         */\n        filteredCategoryItems: one2many('mail.discuss_sidebar_category_item', {\n            compute: '_computeFilteredCategoryItems',\n            readonly: true,\n        }),\n        /**\n         * Display name of the category.\n         */\n        name: attr(),\n        /**\n         * Boolean that determines whether this category has a 'add' command.\n         */\n        hasAddCommand: attr({\n            default: false,\n        }),\n        /**\n         * Boolean that determines whether this category has a 'view' command.\n         */\n        hasViewCommand: attr({\n            default: false,\n        }),\n        /**\n         * Boolean that determines whether discuss is adding a new category item.\n         */\n        isAddingItem: attr({\n            default: false,\n        }),\n        /**\n         * Boolean that determines whether this category is open.\n         */\n        isOpen: attr({\n            compute: '_computeIsOpen',\n        }),\n        /**\n         * Boolean that determines if there is a pending open state change,\n         * which is requested by the client but not yet confirmed by the server.\n         *\n         * This field can be updated to immediately change the open state on the\n         * interface and to notify the server of the new state.\n         */\n        isPendingOpen: attr(),\n        /**\n         * Boolean that determines the last open state known by the server.\n         */\n        isServerOpen: attr(),\n        /**\n         * The placeholder text used when a new item is being added in UI.\n         */\n        newItemPlaceholderText: attr(),\n        /**\n         * The key used in the server side for the category state\n         */\n        serverStateKey: attr({\n            readonly: true,\n            required: true,\n        }),\n        /**\n         * Determines the sorting method of channels in this category.\n         * Must be one of: 'name', 'last_action'.\n         */\n        sortComputeMethod: attr({\n            required: true,\n        }),\n        /**\n         * Channel type which is supported by the category.\n         */\n        supportedChannelTypes: attr({\n            required: true,\n            readonly: true,\n        }),\n    };\n    DiscussSidebarCategory.identifyingFields = [['discussAsChannel', 'discussAsChat']];\n    DiscussSidebarCategory.onChanges = [\n        new OnChange({\n            dependencies: ['isServerOpen'],\n            methodName: ['_onIsServerOpenChanged'],\n        }),\n    ];\n    DiscussSidebarCategory.modelName = 'mail.discuss_sidebar_category';\n\n    return DiscussSidebarCategory;\n}\n\nregisterNewModel('mail.discuss_sidebar_category', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr, many2one, one2one } from '@mail/model/model_field';\nimport { clear, link } from '@mail/model/model_field_command';\nimport { isEventHandled } from '@mail/utils/utils';\n\nimport Dialog from 'web.Dialog';\n\nfunction factory(dependencies) {\n    class DiscussSidebarCategoryItem extends dependencies['mail.model'] {\n\n        /**\n         * @override\n         */\n        _created() {\n            this.onClick = this.onClick.bind(this);\n            this.onClickCommandLeave = this.onClickCommandLeave.bind(this);\n            this.onClickCommandSettings = this.onClickCommandSettings.bind(this);\n            this.onClickCommandUnpin = this.onClickCommandUnpin.bind(this);\n        }\n\n        //--------------------------------------------------------------------------\n        // Private\n        //--------------------------------------------------------------------------\n\n        /**\n         * @private\n         * @returns {string}\n         */\n        _computeAvatarUrl() {\n            switch (this.channelType) {\n                case 'channel':\n                case 'group':\n                    return `/web/image/mail.channel/${this.channel.id}/avatar_128?unique=${this.channel.avatarCacheKey}`;\n                case 'chat':\n                    if (this.channel.correspondent) {\n                        return this.channel.correspondent.avatarUrl;\n                    }\n            }\n            return '/mail/static/src/img/smiley/avatar.jpg';\n        }\n\n        /**\n         * @private\n         * @returns {integer}\n         */\n        _computeCategoryCounterContribution() {\n            switch (this.channel.channel_type) {\n                case 'channel':\n                    return this.channel.message_needaction_counter > 0 ? 1 : 0;\n                case 'chat':\n                case 'group':\n                    return this.channel.localMessageUnreadCounter > 0 ? 1 : 0;\n            }\n        }\n\n        /**\n         * @private\n         * @returns {integer}\n         */\n        _computeCounter() {\n            switch (this.channelType) {\n                case 'channel':\n                    return this.channel.message_needaction_counter;\n                case 'chat':\n                case 'group':\n                    return this.channel.localMessageUnreadCounter;\n            }\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeHasLeaveCommand() {\n            return (\n                ['channel', 'group'].includes(this.channelType) &&\n                !this.channel.message_needaction_counter &&\n                !this.channel.group_based_subscription\n            );\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeHasSettingsCommand() {\n            return this.channelType === 'channel';\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeHasUnpinCommand() {\n            return this.channelType === 'chat' && !this.channel.localMessageUnreadCounter;\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeIsActive() {\n            return this.messaging.discuss && this.channel === this.messaging.discuss.thread;\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeIsUnread() {\n            if (!this.channel) {\n                return clear();\n            }\n            return this.channel.localMessageUnreadCounter > 0;\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeHasThreadIcon() {\n            switch (this.channelType) {\n                case 'channel':\n                    return ['private', 'public'].includes(this.channel.public);\n                case 'chat':\n                    return true;\n                case 'group':\n                    return false;\n            }\n        }\n\n        //--------------------------------------------------------------------------\n        // Handlers\n        //--------------------------------------------------------------------------\n\n        /**\n         * @param {MouseEvent} ev\n         */\n        onClick(ev) {\n            if (isEventHandled(ev, 'EditableText.click')) {\n                return;\n            }\n            this.channel.open();\n        }\n\n        /**\n         * @param {MouseEvent} ev\n         */\n        async onClickCommandLeave(ev) {\n            ev.stopPropagation();\n            if (this.channel.channel_type !== 'group' && this.channel.creator === this.messaging.currentUser) {\n                await this._askAdminConfirmation();\n            }\n            if (this.channel.channel_type === 'group') {\n                await this._askLeaveGroupConfirmation();\n            }\n            this.channel.leave();\n        }\n\n        /**\n         * Redirects to channel form page when `settings` command is clicked.\n         *\n         * @param {MouseEvent} ev\n         */\n        onClickCommandSettings(ev) {\n            ev.stopPropagation();\n            return this.env.bus.trigger('do-action', {\n                action: {\n                    type: 'ir.actions.act_window',\n                    res_model: this.channel.model,\n                    res_id: this.channel.id,\n                    views: [[false, 'form']],\n                    target: 'current',\n                },\n            });\n        }\n\n        /**\n         * @param {MouseEvent} ev\n         */\n        onClickCommandUnpin(ev) {\n            ev.stopPropagation();\n            this.channel.unsubscribe();\n        }\n\n        /**\n         * @private\n         * @returns {Promise}\n         */\n        _askAdminConfirmation() {\n            return new Promise(resolve => {\n                Dialog.confirm(this,\n                    this.env._t(\"You are the administrator of this channel. Are you sure you want to leave?\"),\n                    {\n                        buttons: [\n                            {\n                                text: this.env._t(\"Leave\"),\n                                classes: 'btn-primary',\n                                close: true,\n                                click: resolve,\n                            },\n                            {\n                                text: this.env._t(\"Discard\"),\n                                close: true,\n                            },\n                        ],\n                    }\n                );\n            });\n        }\n\n        /**\n         * @private\n         * @returns {Promise}\n         */\n        _askLeaveGroupConfirmation() {\n            return new Promise(resolve => {\n                Dialog.confirm(this,\n                    this.env._t(\"You are about to leave this group conversation and will no longer have access to it unless you are invited again. Are you sure you want to continue?\"),\n                    {\n                        buttons: [\n                            {\n                                text: this.env._t(\"Leave\"),\n                                classes: 'btn-primary',\n                                close: true,\n                                click: resolve\n                            },\n                            {\n                                text: this.env._t(\"Discard\"),\n                                close: true\n                            }\n                        ]\n                    }\n                );\n            });\n        }\n\n    }\n\n    DiscussSidebarCategoryItem.fields = {\n        /**\n         * Image URL for the related channel thread.\n         */\n        avatarUrl: attr({\n            compute: '_computeAvatarUrl',\n        }),\n        /**\n         * Determines the discuss sidebar category displaying this item.\n         */\n        category: many2one('mail.discuss_sidebar_category', {\n            inverse: 'categoryItems',\n            readonly: true,\n            required: true,\n        }),\n        /**\n         * Determines the contribution of this discuss sidebar category item to\n         * the counter of this category.\n         */\n        categoryCounterContribution: attr({\n            compute: '_computeCategoryCounterContribution',\n            readonly: true,\n        }),\n        /**\n         * Amount of unread/action-needed messages\n         */\n        counter: attr({\n            compute: '_computeCounter',\n        }),\n        /**\n         * Boolean determines whether the item has a \"leave\" command\n         */\n        hasLeaveCommand: attr({\n            compute: '_computeHasLeaveCommand',\n        }),\n        /**\n         * Boolean determines whether the item has a \"settings\" command.\n         */\n        hasSettingsCommand: attr({\n            compute: '_computeHasSettingsCommand',\n        }),\n        /**\n         * Boolean determines whether ThreadIcon will be displayed in UI.\n         */\n        hasThreadIcon: attr({\n            compute: '_computeHasThreadIcon',\n        }),\n        /**\n         * Boolean determines whether the item has a \"unpin\" command.\n         */\n        hasUnpinCommand: attr({\n            compute: '_computeHasUnpinCommand',\n        }),\n        /**\n         * Boolean determines whether the item is currently active in discuss.\n         */\n        isActive: attr({\n            compute: '_computeIsActive',\n        }),\n        /**\n         * Boolean determines whether the item has any unread messages.\n         */\n        isUnread: attr({\n            compute: '_computeIsUnread',\n        }),\n        /**\n         * The related channel thread.\n         */\n        channel: one2one('mail.thread', {\n            inverse: 'discussSidebarCategoryItem',\n            readonly: true,\n            required: true,\n        }),\n        /**\n         * Type of the related channel thread.\n         */\n        channelType: attr({\n            related: 'channel.channel_type',\n        }),\n\n    };\n    DiscussSidebarCategoryItem.identifyingFields = ['category', 'channel'];\n    DiscussSidebarCategoryItem.modelName = 'mail.discuss_sidebar_category_item';\n\n    return DiscussSidebarCategoryItem;\n}\n\nregisterNewModel('mail.discuss_sidebar_category_item', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr, many2many, many2one, one2many } from '@mail/model/model_field';\nimport { clear, insert, insertAndReplace, link, replace, unlink, unlinkAll } from '@mail/model/model_field_command';\n\nfunction factory(dependencies) {\n\n    class Follower extends dependencies['mail.model'] {\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        /**\n         * @static\n         * @param {Object} data\n         * @returns {Object}\n         */\n        static convertData(data) {\n            const data2 = {};\n            if ('id' in data) {\n                data2.id = data.id;\n            }\n            if ('is_active' in data) {\n                data2.isActive = data.is_active;\n            }\n            if ('is_editable' in data) {\n                data2.isEditable = data.is_editable;\n            }\n            if ('partner_id' in data) {\n                if (!data.partner_id) {\n                    data2.partner = unlinkAll();\n                } else {\n                    const partnerData = {\n                        display_name: data.display_name,\n                        email: data.email,\n                        id: data.partner_id,\n                        name: data.name,\n                    };\n                    data2.partner = insert(partnerData);\n                }\n            }\n            if (data.partner) {\n                data2.partner = insertAndReplace(this.models['mail.partner'].convertData(data.partner));\n            }\n            return data2;\n        }\n\n        /**\n         *  Close subtypes dialog\n         */\n        closeSubtypes() {\n            this.update({ subtypeList: clear() });\n        }\n\n        /**\n         * Opens the most appropriate view that is a profile for this follower.\n         */\n        async openProfile() {\n            return this.partner.openProfile();\n        }\n\n        /**\n         * Remove this follower from its related thread.\n         */\n        async remove() {\n            const partner_ids = [];\n            partner_ids.push(this.partner.id);\n            await this.async(() => this.env.services.rpc({\n                model: this.followedThread.model,\n                method: 'message_unsubscribe',\n                args: [[this.followedThread.id], partner_ids]\n            }));\n            const followedThread = this.followedThread;\n            this.delete();\n            followedThread.fetchAndUpdateSuggestedRecipients();\n        }\n\n        /**\n         * @param {mail.follower_subtype} subtype\n         */\n        selectSubtype(subtype) {\n            if (!this.selectedSubtypes.includes(subtype)) {\n                this.update({ selectedSubtypes: link(subtype) });\n            }\n        }\n\n        /**\n         * Show (editable) list of subtypes of this follower.\n         */\n        async showSubtypes() {\n            const subtypesData = await this.async(() => this.env.services.rpc({\n                route: '/mail/read_subscription_data',\n                params: { follower_id: this.id },\n            }));\n            this.update({ subtypes: unlinkAll() });\n            for (const data of subtypesData) {\n                const subtype = this.messaging.models['mail.follower_subtype'].insert(\n                    this.messaging.models['mail.follower_subtype'].convertData(data)\n                );\n                this.update({ subtypes: link(subtype) });\n                if (data.followed) {\n                    this.update({ selectedSubtypes: link(subtype) });\n                } else {\n                    this.update({ selectedSubtypes: unlink(subtype) });\n                }\n            }\n            this.messaging.dialogManager.update({\n                dialogs: insert({\n                    followerSubtypeList: insertAndReplace({\n                        follower: replace(this),\n                    }),\n                }),\n            });\n        }\n\n        /**\n         * @param {mail.follower_subtype} subtype\n         */\n        unselectSubtype(subtype) {\n            if (this.selectedSubtypes.includes(subtype)) {\n                this.update({ selectedSubtypes: unlink(subtype) });\n            }\n        }\n\n        /**\n         * Update server-side subscription of subtypes of this follower.\n         */\n        async updateSubtypes() {\n            if (this.selectedSubtypes.length === 0) {\n                this.remove();\n            } else {\n                const kwargs = {\n                    subtype_ids: this.selectedSubtypes.map(subtype => subtype.id),\n                };\n                if (this.partner) {\n                    kwargs.partner_ids = [this.partner.id];\n                }\n                await this.async(() => this.env.services.rpc({\n                    model: this.followedThread.model,\n                    method: 'message_subscribe',\n                    args: [[this.followedThread.id]],\n                    kwargs,\n                }));\n                this.env.services['notification'].notify({\n                    type: 'success',\n                    message: this.env._t(\"The subscription preferences were successfully applied.\"),\n                });\n            }\n            this.closeSubtypes();\n        }\n\n    }\n\n    Follower.fields = {\n        followedThread: many2one('mail.thread', {\n            inverse: 'followers',\n        }),\n        id: attr({\n            readonly: true,\n            required: true,\n        }),\n        isActive: attr({\n            default: true,\n        }),\n        isEditable: attr({\n            default: false,\n        }),\n        partner: many2one('mail.partner', {\n            required: true,\n        }),\n        selectedSubtypes: many2many('mail.follower_subtype'),\n        subtypeList: one2many('mail.follower_subtype_list', {\n            inverse: 'follower',\n            isCausal: true,\n        }),\n        subtypes: many2many('mail.follower_subtype'),\n    };\n    Follower.identifyingFields = ['id'];\n    Follower.modelName = 'mail.follower';\n\n    return Follower;\n}\n\nregisterNewModel('mail.follower', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr } from '@mail/model/model_field';\n\nfunction factory(dependencies) {\n\n    class FollowerSubtype extends dependencies['mail.model'] {\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        /**\n         * @static\n         * @param {Object} data\n         * @returns {Object}\n         */\n        static convertData(data) {\n            const data2 = {};\n            if ('default' in data) {\n                data2.isDefault = data.default;\n            }\n            if ('id' in data) {\n                data2.id = data.id;\n            }\n            if ('internal' in data) {\n                data2.isInternal = data.internal;\n            }\n            if ('name' in data) {\n                data2.name = data.name;\n            }\n            if ('parent_model' in data) {\n                data2.parentModel = data.parent_model;\n            }\n            if ('res_model' in data) {\n                data2.resModel = data.res_model;\n            }\n            if ('sequence' in data) {\n                data2.sequence = data.sequence;\n            }\n            return data2;\n        }\n\n    }\n\n    FollowerSubtype.fields = {\n        id: attr({\n            readonly: true,\n            required: true,\n        }),\n        isDefault: attr({\n            default: false,\n        }),\n        isInternal: attr({\n            default: false,\n        }),\n        name: attr(),\n        // AKU FIXME: use relation instead\n        parentModel: attr(),\n        // AKU FIXME: use relation instead\n        resModel: attr(),\n        sequence: attr(),\n    };\n    FollowerSubtype.identifyingFields = ['id'];\n    FollowerSubtype.modelName = 'mail.follower_subtype';\n\n    return FollowerSubtype;\n}\n\nregisterNewModel('mail.follower_subtype', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { many2one, one2one } from '@mail/model/model_field';\n\nfunction factory(dependencies) {\n\n    class FollowerSubtypeList extends dependencies['mail.model'] {}\n\n    FollowerSubtypeList.fields = {\n        /**\n         * States the dialog displaying this follower subtype list.\n         */\n        dialog: one2one('mail.dialog', {\n            inverse: 'followerSubtypeList',\n            isCausal: true,\n            readonly: true,\n        }),\n        follower: many2one('mail.follower', {\n            inverse: 'subtypeList',\n            readonly: true,\n            required: true,\n        }),\n    };\n    FollowerSubtypeList.identifyingFields = ['follower'];\n    FollowerSubtypeList.modelName = 'mail.follower_subtype_list';\n\n    return FollowerSubtypeList;\n}\n\nregisterNewModel('mail.follower_subtype_list', factory);\n", "/** @odoo-module **/\n\nimport { attr, one2many, one2one } from '@mail/model/model_field';\nimport { registerNewModel } from '@mail/model/model_core';\n\nfunction factory(dependencies) {\n\n    class Guest extends dependencies['mail.model'] {\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        /**\n         * @static\n         * @param {Object} param0\n         * @param {number} param0.id The id of the guest to rename.\n         * @param {string} param0.name The new name to use to rename the guest.\n         */\n        static async performRpcGuestUpdateName({ id, name }) {\n            await this.env.services.rpc({\n                route: '/mail/guest/update_name',\n                params: {\n                    guest_id: id,\n                    name,\n                },\n            });\n        }\n\n        //----------------------------------------------------------------------\n        // Private\n        //----------------------------------------------------------------------\n\n        /**\n         * @private\n         * @returns {string}\n         */\n        _computeAvatarUrl() {\n            return `/web/image/mail.guest/${this.id}/avatar_128?unique=${this.name}`;\n        }\n\n    }\n\n    Guest.fields = {\n        authoredMessages: one2many('mail.message', {\n            inverse: 'guestAuthor',\n        }),\n        avatarUrl: attr({\n            compute: '_computeAvatarUrl',\n        }),\n        id: attr({\n            required: true,\n            readonly: true,\n        }),\n        name: attr(),\n        rtcSessions: one2many('mail.rtc_session', {\n            inverse: 'guest',\n        }),\n        volumeSetting: one2one('mail.volume_setting', {\n            inverse: 'guest',\n        }),\n    };\n    Guest.identifyingFields = ['id'];\n    Guest.modelName = 'mail.guest';\n\n    return Guest;\n}\n\nregisterNewModel('mail.guest', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr } from '@mail/model/model_field';\n\nfunction factory(dependencies) {\n\n    class Locale extends dependencies['mail.model'] {\n\n        //----------------------------------------------------------------------\n        // Private\n        //----------------------------------------------------------------------\n\n        /**\n         * @private\n         * @returns {string}\n         */\n        _computeLanguage() {\n            return this.env._t.database.parameters.code;\n        }\n\n        /**\n         * @private\n         * @returns {string}\n         */\n        _computeTextDirection() {\n            return this.env._t.database.parameters.direction;\n        }\n\n    }\n\n    Locale.fields = {\n        /**\n         * Language used by interface, formatted like {language ISO 2}_{country ISO 2} (eg: fr_FR).\n         */\n        language: attr({\n            compute: '_computeLanguage',\n        }),\n        textDirection: attr({\n            compute: '_computeTextDirection',\n        }),\n    };\n    Locale.identifyingFields = ['messaging'];\n    Locale.modelName = 'mail.locale';\n\n    return Locale;\n}\n\nregisterNewModel('mail.locale', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr, many2many } from '@mail/model/model_field';\n\nfunction factory(dependencies) {\n\n    class MailTemplate extends dependencies['mail.model'] {\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        /**\n         * @param {mail.activity} activity\n         */\n        preview(activity) {\n            const action = {\n                name: this.env._t(\"Compose Email\"),\n                type: 'ir.actions.act_window',\n                res_model: 'mail.compose.message',\n                views: [[false, 'form']],\n                target: 'new',\n                context: {\n                    default_res_id: activity.thread.id,\n                    default_model: activity.thread.model,\n                    default_use_template: true,\n                    default_template_id: this.id,\n                    force_email: true,\n                },\n            };\n            this.env.bus.trigger('do-action', {\n                action,\n                options: {\n                    on_close: () => {\n                        activity.thread.refresh();\n                    },\n                },\n            });\n        }\n\n        /**\n         * @param {mail.activity} activity\n         */\n        async send(activity) {\n            await this.async(() => this.env.services.rpc({\n                model: activity.thread.model,\n                method: 'activity_send_mail',\n                args: [[activity.thread.id], this.id],\n            }));\n            activity.thread.refresh();\n        }\n\n    }\n\n    MailTemplate.fields = {\n        activities: many2many('mail.activity', {\n            inverse: 'mailTemplates',\n        }),\n        id: attr({\n            readonly: true,\n            required: true,\n        }),\n        name: attr(),\n    };\n    MailTemplate.identifyingFields = ['id'];\n    MailTemplate.modelName = 'mail.mail_template';\n\n    return MailTemplate;\n}\n\nregisterNewModel('mail.mail_template', factory);\n", "/** @odoo-module **/\n\nimport { attr } from '@mail/model/model_field';\nimport { registerNewModel } from '@mail/model/model_core';\n\nfunction factory(dependencies) {\n\n    class MediaPreview extends dependencies['mail.model'] {\n\n        /**\n         * @override\n         */\n        _created() {\n            super._created();\n            // Bind necessary until OWL supports arrow function in handlers: https://github.com/odoo/owl/issues/876\n            this.onClickDisableMicrophoneButton = this.onClickDisableMicrophoneButton.bind(this);\n            this.onClickDisableVideoButton = this.onClickDisableVideoButton.bind(this);\n            this.onClickEnableMicrophoneButton = this.onClickEnableMicrophoneButton.bind(this);\n            this.onClickEnableVideoButton = this.onClickEnableVideoButton.bind(this);\n        }\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        /**\n         * Iterates tracks of the provided MediaStream, calling the `stop`\n         * method on each of them.\n         * \n         * @static\n         * @param {MediaStream} mediaStream \n         */\n        static stopTracksOnMediaStream(mediaStream) {\n            for (const track of mediaStream.getTracks()) {\n                track.stop();\n            }\n        }\n\n        /**\n         * Stops recording user's microphone.\n         */\n        disableMicrophone() {\n            this.audioRef.el.srcObject = null;\n            if (!this.audioStream) {\n                return;\n            }\n            this.messaging.models['mail.media_preview'].stopTracksOnMediaStream(this.audioStream);\n            this.update({ audioStream: null });\n        }\n\n        /**\n         * Stops recording user's video device.\n         */\n        disableVideo() {\n            this.videoRef.el.srcObject = null;\n            if (!this.videoStream) {\n                return;\n            }\n            this.messaging.models['mail.media_preview'].stopTracksOnMediaStream(this.videoStream);\n            this.update({ videoStream: null });\n        }\n\n        /**\n         * Asks for access to the user's microphone if not granted yet, then\n         * starts recording and defines the resulting audio stream as the source\n         * of the audio element in order to play the audio feedback.\n         */\n        async enableMicrophone() {\n            if (!this.doesBrowserSupportMediaDevices) {\n                return;\n            }\n            try {\n                const audioStream = await navigator.mediaDevices.getUserMedia({ audio: true });\n                this.update({ audioStream });\n                this.audioRef.el.srcObject = this.audioStream;\n            } catch {\n                // TODO: display popup asking the user to re-enable their mic\n            }\n        }\n\n        /**\n         * Asks for access to the user's video device if not granted yet, then\n         * starts recording and defines the resulting video stream as the source\n         * of the video element in order to display the video feedback.\n         */\n        async enableVideo() {\n            if (!this.doesBrowserSupportMediaDevices) {\n                return;\n            }\n            try {\n                const videoStream = await navigator.mediaDevices.getUserMedia({ video: true });\n                this.update({ videoStream });\n                this.videoRef.el.srcObject = this.videoStream;\n            } catch {\n                // TODO: display popup asking the user to re-enable their camera\n            }\n        }\n\n        /**\n         * Handles click on the \"disable microphone\" button.\n         */\n        onClickDisableMicrophoneButton() {\n            this.disableMicrophone();\n        }\n\n        /**\n         * Handles click on the \"disable video\" button.\n         */\n        onClickDisableVideoButton() {\n            this.disableVideo();\n        }\n\n        /**\n         * Handles click on the \"enable microphone\" button.\n         */\n        onClickEnableMicrophoneButton() {\n            this.enableMicrophone();\n        }\n\n        /**\n         * Handles click on the \"enable video\" button.\n         */\n        onClickEnableVideoButton() {\n            this.enableVideo();\n        }\n\n        //----------------------------------------------------------------------\n        // Private\n        //----------------------------------------------------------------------\n\n        /**\n         * @private\n         * @returns {boolean} \n         */\n        _computeDoesBrowserSupportMediaDevices() {\n            return Boolean(\n                navigator.mediaDevices &&\n                navigator.mediaDevices.getUserMedia &&\n                window.MediaStream\n            );\n        }\n\n        /**\n         * @private\n         * @returns {boolean} \n         */\n        _computeIsMicrophoneEnabled() {\n            return this.audioStream !== null;\n        }\n\n        /**\n         * @private\n         * @returns {boolean} \n         */\n        _computeIsVideoEnabled() {\n            return this.videoStream !== null;\n        }\n\n    }\n\n    MediaPreview.fields = {\n        /**\n         * Ref to the audio element used for the audio feedback.\n         */\n        audioRef: attr(),\n        /**\n         * The MediaStream from the microphone.\n         * \n         * Default set to null to be consistent with the default value of\n         * `HTMLMediaElement.srcObject`.\n         */\n        audioStream: attr({\n            default: null,\n        }),\n        /**\n         * States whether the browser has the required APIs for\n         * microphone/camera recording.\n         */\n        doesBrowserSupportMediaDevices: attr({\n            compute: '_computeDoesBrowserSupportMediaDevices',\n        }),\n        /**\n         * States if the user's microphone is currently recording.\n         */\n        isMicrophoneEnabled: attr({\n            compute: '_computeIsMicrophoneEnabled',\n        }),\n        /**\n         * States if the user's camera is currently recording.\n         */\n        isVideoEnabled: attr({\n            compute: '_computeIsVideoEnabled',\n        }),\n        /**\n         * Ref to the video element used for the video feedback.\n         */\n        videoRef: attr(),\n        /**\n         * The MediaStream from the camera.\n         * \n         * Default set to null to be consistent with the default value of\n         * `HTMLMediaElement.srcObject`.\n         */\n        videoStream: attr({\n            default: null,\n        }),\n    };\n    MediaPreview.identifyingFields = ['messaging'];\n    MediaPreview.modelName = 'mail.media_preview';\n\n    return MediaPreview;\n}\n\nregisterNewModel('mail.media_preview', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr, many2many, many2one, one2many } from '@mail/model/model_field';\nimport { clear, insert, insertAndReplace, replace, unlinkAll } from '@mail/model/model_field_command';\nimport emojis from '@mail/js/emojis';\nimport { addLink, htmlToTextContentInline, parseAndTransform, timeFromNow } from '@mail/js/utils';\n\nimport { session } from '@web/session';\n\nimport { str_to_datetime } from 'web.time';\n\nfunction factory(dependencies) {\n\n    class Message extends dependencies['mail.model'] {\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        /**\n         * @static\n         * @param {Object} data\n         * @return {Object}\n         */\n        static convertData(data) {\n            const data2 = {};\n            if ('attachment_ids' in data) {\n                if (!data.attachment_ids) {\n                    data2.attachments = unlinkAll();\n                } else {\n                    data2.attachments = insertAndReplace(data.attachment_ids.map(attachmentData =>\n                        this.messaging.models['mail.attachment'].convertData(attachmentData)\n                    ));\n                }\n            }\n            if ('author_id' in data) {\n                if (!data.author_id) {\n                    data2.author = unlinkAll();\n                } else if (data.author_id[0] !== 0) {\n                    // partner id 0 is a hack of message_format to refer to an\n                    // author non-related to a partner. display_name equals\n                    // email_from, so this is omitted due to being redundant.\n                    data2.author = insert({\n                        display_name: data.author_id[1],\n                        id: data.author_id[0],\n                    });\n                }\n            }\n            if ('body' in data) {\n                data2.body = data.body;\n            }\n            if ('date' in data && data.date) {\n                data2.date = moment(str_to_datetime(data.date));\n            }\n            if ('email_from' in data) {\n                data2.email_from = data.email_from;\n            }\n            if ('guestAuthor' in data) {\n                data2.guestAuthor = data.guestAuthor;\n            }\n            if ('history_partner_ids' in data && this.messaging.currentPartner) {\n                data2.isHistory = data.history_partner_ids.includes(this.messaging.currentPartner.id);\n            }\n            if ('id' in data) {\n                data2.id = data.id;\n            }\n            if ('is_discussion' in data) {\n                data2.is_discussion = data.is_discussion;\n            }\n            if ('is_note' in data) {\n                data2.is_note = data.is_note;\n            }\n            if ('is_notification' in data) {\n                data2.is_notification = data.is_notification;\n            }\n            if ('messageReactionGroups' in data) {\n                data2.messageReactionGroups = data.messageReactionGroups;\n            }\n            if ('message_type' in data) {\n                data2.message_type = data.message_type;\n            }\n            if ('model' in data && 'res_id' in data && data.model && data.res_id) {\n                const originThreadData = {\n                    id: data.res_id,\n                    model: data.model,\n                };\n                if ('record_name' in data && data.record_name) {\n                    originThreadData.name = data.record_name;\n                }\n                if ('res_model_name' in data && data.res_model_name) {\n                    originThreadData.model_name = data.res_model_name;\n                }\n                if ('module_icon' in data) {\n                    originThreadData.moduleIcon = data.module_icon;\n                }\n                data2.originThread = insertAndReplace(originThreadData);\n            }\n            if ('needaction_partner_ids' in data && this.messaging.currentPartner) {\n                data2.isNeedaction = data.needaction_partner_ids.includes(this.messaging.currentPartner.id);\n            }\n            if ('notifications' in data) {\n                data2.notifications = insert(data.notifications.map(notificationData =>\n                    this.messaging.models['mail.notification'].convertData(notificationData)\n                ));\n            }\n            if ('parentMessage' in data) {\n                if (!data.parentMessage) {\n                    data2.parentMessage = clear();\n                } else {\n                    data2.parentMessage = insertAndReplace(this.convertData(data.parentMessage));\n                }\n            }\n            if ('partner_ids' in data && this.messaging.currentPartner) {\n                data2.recipients = insertAndReplace(data.partner_ids.map(partner_id => ({ id: partner_id })));\n            }\n            if ('recipients' in data) {\n                data2.recipients = insertAndReplace(data.recipients);\n            }\n            if ('starred_partner_ids' in data && this.messaging.currentPartner) {\n                data2.isStarred = data.starred_partner_ids.includes(this.messaging.currentPartner.id);\n            }\n            if ('subject' in data) {\n                data2.subject = data.subject;\n            }\n            if ('subtype_description' in data) {\n                data2.subtype_description = data.subtype_description;\n            }\n            if ('subtype_id' in data) {\n                data2.subtype_id = data.subtype_id;\n            }\n            if ('tracking_value_ids' in data) {\n                data2.tracking_value_ids = data.tracking_value_ids;\n            }\n\n            return data2;\n        }\n\n        /**\n         * Mark all messages of current user with given domain as read.\n         *\n         * @static\n         * @param {Array[]} domain\n         */\n        static async markAllAsRead(domain) {\n            await this.env.services.rpc({\n                model: 'mail.message',\n                method: 'mark_all_as_read',\n                kwargs: { domain },\n            });\n        }\n\n        /**\n         * Mark provided messages as read. Messages that have been marked as\n         * read are acknowledged by server with response as longpolling\n         * notification of following format:\n         *\n         * [[dbname, 'res.partner', partnerId], { type: 'mark_as_read' }]\n         *\n         * @see mail.messaging_notification_handler:_handleNotificationPartnerMarkAsRead()\n         *\n         * @static\n         * @param {mail.message[]} messages\n         */\n        static async markAsRead(messages) {\n            await this.env.services.rpc({\n                model: 'mail.message',\n                method: 'set_message_done',\n                args: [messages.map(message => message.id)]\n            });\n        }\n\n        /**\n         * Performs the given `route` RPC to fetch messages.\n         *\n         * @static\n         * @param {string} route\n         * @param {Object} params\n         * @returns {mail.message[]}\n         */\n        static async performRpcMessageFetch(route, params) {\n            const messagesData = await this.env.services.rpc({ route, params }, { shadow: true });\n            if (!this.messaging) {\n                return;\n            }\n            const messages = this.messaging.models['mail.message'].insert(messagesData.map(\n                messageData => this.messaging.models['mail.message'].convertData(messageData)\n            ));\n            // compute seen indicators (if applicable)\n            for (const message of messages) {\n                for (const thread of message.threads) {\n                    if (thread.model !== 'mail.channel' || thread.channel_type === 'channel') {\n                        // disabled on non-channel threads and\n                        // on `channel` channels for performance reasons\n                        continue;\n                    }\n                    this.messaging.models['mail.message_seen_indicator'].insert({\n                        thread: replace(thread),\n                        message: replace(message),\n                    });\n                }\n            }\n            return messages;\n        }\n\n        /**\n         * Unstar all starred messages of current user.\n         */\n        static async unstarAll() {\n            await this.env.services.rpc({\n                model: 'mail.message',\n                method: 'unstar_all',\n            });\n        }\n\n        /**\n         * Adds the given reaction on this message.\n         *\n         * @param {string} content\n         */\n        async addReaction(content) {\n            const messageData = await this.env.services.rpc({\n                route: '/mail/message/add_reaction',\n                params: { content, message_id: this.id },\n            });\n            if (!this.exists()) {\n                return;\n            }\n            this.update(messageData);\n        }\n\n        /**\n         * Mark this message as read, so that it no longer appears in current\n         * partner Inbox.\n         */\n        async markAsRead() {\n            await this.async(() => this.env.services.rpc({\n                model: 'mail.message',\n                method: 'set_message_done',\n                args: [[this.id]]\n            }));\n        }\n\n        /**\n         * Opens the view that allows to resend the message in case of failure.\n         */\n        openResendAction() {\n            this.env.bus.trigger('do-action', {\n                action: 'mail.mail_resend_message_action',\n                options: {\n                    additional_context: {\n                        mail_message_to_resend: this.id,\n                    },\n                },\n            });\n        }\n\n        /**\n         * Refreshes the value of `dateFromNow` field to the \"current now\".\n         */\n        refreshDateFromNow() {\n            this.update({ dateFromNow: this._computeDateFromNow() });\n        }\n\n        /**\n         * Removes the given reaction from this message.\n         *\n         * @param {string} content\n         */\n        async removeReaction(content) {\n            const messageData = await this.env.services.rpc({\n                route: '/mail/message/remove_reaction',\n                params: { content, message_id: this.id },\n            });\n            if (!this.exists()) {\n                return;\n            }\n            this.update(messageData);\n        }\n\n        /**\n         * Toggle the starred status of the provided message.\n         */\n        async toggleStar() {\n            await this.async(() => this.env.services.rpc({\n                model: 'mail.message',\n                method: 'toggle_message_starred',\n                args: [[this.id]]\n            }));\n        }\n\n        /**\n         * Updates the message's content.\n         *\n         * @param {Object} param0\n         * @param {string} param0.body the new body of the message\n         * @param {number[]} param0.attachment_ids\n         * @param {string[]} param0.attachment_tokens\n         */\n        async updateContent({ body, attachment_ids, attachment_tokens }) {\n            const messageData = await this.env.services.rpc({\n                route: '/mail/message/update_content',\n                params: {\n                    body,\n                    attachment_ids,\n                    attachment_tokens,\n                    message_id: this.id,\n                },\n            });\n            if (!this.messaging) {\n                return;\n            }\n            this.messaging.models['mail.message'].insert(messageData);\n        }\n\n        //----------------------------------------------------------------------\n        // Private\n        //----------------------------------------------------------------------\n\n        /**\n         * @returns {string|FieldCommand}\n         */\n        _computeAuthorName() {\n            if (this.author) {\n                return this.author.nameOrDisplayName;\n            }\n            if (this.guestAuthor) {\n                return this.guestAuthor.name;\n            }\n            if (this.email_from) {\n                return this.email_from;\n            }\n            return this.env._t(\"Anonymous\");\n        }\n\n        /**\n         * @returns {boolean}\n         */\n        _computeCanBeDeleted() {\n            if (!session.is_admin && !this.isCurrentUserOrGuestAuthor) {\n                return false;\n            }\n            if (!this.originThread) {\n                return false;\n            }\n            if (this.tracking_value_ids.length > 0) {\n                return false;\n            }\n            if (this.message_type !== 'comment') {\n                return false;\n            }\n            if (this.originThread.model === 'mail.channel') {\n                return true;\n            }\n            return this.is_note;\n        }\n\n        /**\n         * @returns {boolean}\n         */\n        _computeCanStarBeToggled() {\n            return !this.messaging.isCurrentUserGuest && !this.isTemporary && !this.isTransient;\n        }\n\n        /**\n         * @returns {string}\n         */\n        _computeDateDay() {\n            if (!this.date) {\n                // Without a date, we assume that it's a today message. This is\n                // mainly done to avoid flicker inside the UI.\n                return this.env._t(\"Today\");\n            }\n            const date = this.date.format('YYYY-MM-DD');\n            if (date === moment().format('YYYY-MM-DD')) {\n                return this.env._t(\"Today\");\n            } else if (\n                date === moment()\n                    .subtract(1, 'days')\n                    .format('YYYY-MM-DD')\n            ) {\n                return this.env._t(\"Yesterday\");\n            }\n            return this.date.format('LL');\n        }\n\n        /**\n         * @returns {string}\n         */\n        _computeDateFromNow() {\n            if (!this.date) {\n                return clear();\n            }\n            return timeFromNow(this.date);\n        }\n\n        /**\n         * @returns {boolean}\n         */\n        _computeFailureNotifications() {\n            return replace(this.notifications.filter(notifications =>\n                ['exception', 'bounce'].includes(notifications.notification_status)\n            ));\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeHasAttachments() {\n            return this.attachments.length > 0;\n        }\n\n        /**\n         * @returns {boolean}\n         */\n        _computeHasReactionIcon() {\n            return !this.isTemporary && !this.isTransient;\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeIsCurrentUserOrGuestAuthor() {\n            return !!(\n                this.author &&\n                this.messaging.currentPartner &&\n                this.messaging.currentPartner === this.author\n            ) || !!(\n                this.guestAuthor &&\n                this.messaging.currentGuest &&\n                this.messaging.currentGuest === this.guestAuthor\n            );\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeIsBodyEmpty() {\n            return (\n                !this.body ||\n                [\n                    '',\n                    '<p></p>',\n                    '<p><br></p>',\n                    '<p><br/></p>',\n                ].includes(this.body.replace(/\\s/g, ''))\n            );\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeIsBodyEqualSubtypeDescription() {\n            if (!this.body || !this.subtype_description) {\n                return false;\n            }\n            const inlineBody = htmlToTextContentInline(this.body);\n            return inlineBody.toLowerCase() === this.subtype_description.toLowerCase();\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeIsCurrentPartnerMentioned() {\n            return this.recipients.includes(this.messaging.currentPartner);\n        }\n\n        /**\n         * The method does not attempt to cover all possible cases of empty\n         * messages, but mostly those that happen with a standard flow. Indeed\n         * it is preferable to be defensive and show an empty message sometimes\n         * instead of hiding a non-empty message.\n         *\n         * The main use case for when a message should become empty is for a\n         * message posted with only an attachment (no body) and then the\n         * attachment is deleted.\n         *\n         * The main use case for being defensive with the check is when\n         * receiving a message that has no textual content but has other\n         * meaningful HTML tags (eg. just an <img/>).\n         *\n         * @private\n         * @returns {boolean}\n         */\n        _computeIsEmpty() {\n            return (\n                this.isBodyEmpty &&\n                !this.hasAttachments &&\n                this.tracking_value_ids.length === 0 &&\n                !this.subtype_description\n            );\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeIsHighlighted() {\n            return (\n                this.isCurrentPartnerMentioned &&\n                this.originThread &&\n                this.originThread.model === 'mail.channel'\n            );\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeIsSubjectSimilarToOriginThreadName() {\n            if (\n                !this.subject ||\n                !this.originThread ||\n                !this.originThread.name\n            ) {\n                return false;\n            }\n            const threadName = this.originThread.name.toLowerCase().trim();\n            const prefixList = ['re:', 'fw:', 'fwd:'];\n            let cleanedSubject = this.subject.toLowerCase();\n            let wasSubjectCleaned = true;\n            while (wasSubjectCleaned) {\n                wasSubjectCleaned = false;\n                if (threadName === cleanedSubject) {\n                    return true;\n                }\n                for (const prefix of prefixList) {\n                    if (cleanedSubject.startsWith(prefix)) {\n                        cleanedSubject = cleanedSubject.replace(prefix, '').trim();\n                        wasSubjectCleaned = true;\n                        break;\n                    }\n                }\n            }\n            return false;\n        }\n\n        /**\n         * @private\n         * @returns {string}\n         */\n        _computeMessageTypeText() {\n            if (this.message_type === 'notification') {\n                return this.env._t(\"System notification\");\n            }\n            if (!this.is_discussion && !this.is_notification) {\n                return this.env._t(\"Note\");\n            }\n            return this.env._t(\"Message\");\n        }\n\n        /**\n         * This value is meant to be based on field body which is\n         * returned by the server (and has been sanitized before stored into db).\n         * Do not use this value in a 't-raw' if the message has been created\n         * directly from user input and not from server data as it's not escaped.\n         *\n         * @private\n         * @returns {string}\n         */\n        _computePrettyBody() {\n            if (!this.body) {\n                // body null in db, body will be false instead of empty string\n                return clear();\n            }\n            let prettyBody;\n            for (const emoji of emojis) {\n                const { unicode } = emoji;\n                const regexp = new RegExp(\n                    `(?:^|\\\\s|<[a-z]*>)(${unicode})(?=\\\\s|$|</[a-z]*>)`,\n                    \"g\"\n                );\n                const originalBody = this.body;\n                prettyBody = this.body.replace(\n                    regexp,\n                    ` <span class=\"o_mail_emoji\">${unicode}</span> `\n                );\n                // Idiot-proof limit. If the user had the amazing idea of\n                // copy-pasting thousands of emojis, the image rendering can lead\n                // to memory overflow errors on some browsers (e.g. Chrome). Set an\n                // arbitrary limit to 200 from which we simply don't replace them\n                // (anyway, they are already replaced by the unicode counterpart).\n                if (_.str.count(prettyBody, \"o_mail_emoji\") > 200) {\n                    prettyBody = originalBody;\n                }\n            }\n            // add anchor tags to urls\n            return parseAndTransform(prettyBody, addLink);\n        }\n\n        /**\n         * @private\n         * @returns {mail.thread[]}\n         */\n        _computeThreads() {\n            const threads = [];\n            if (this.isHistory && this.messaging.history) {\n                threads.push(this.messaging.history);\n            }\n            if (this.isNeedaction && this.messaging.inbox) {\n                threads.push(this.messaging.inbox);\n            }\n            if (this.isStarred && this.messaging.starred) {\n                threads.push(this.messaging.starred);\n            }\n            if (this.originThread) {\n                threads.push(this.originThread);\n            }\n            return replace(threads);\n        }\n\n    }\n\n    Message.fields = {\n        authorName: attr({\n            compute: '_computeAuthorName',\n        }),\n        attachments: many2many('mail.attachment', {\n            inverse: 'messages',\n        }),\n        author: many2one('mail.partner', {\n            inverse: 'messagesAsAuthor',\n        }),\n        /**\n         * This value is meant to be returned by the server\n         * (and has been sanitized before stored into db).\n         * Do not use this value in a 't-raw' if the message has been created\n         * directly from user input and not from server data as it's not escaped.\n         */\n        body: attr({\n            default: \"\",\n        }),\n        /**\n         * Whether this message can be deleted.\n         */\n        canBeDeleted: attr({\n            compute: '_computeCanBeDeleted',\n        }),\n        /**\n         * Whether this message can be starred/unstarred.\n         */\n        canStarBeToggled: attr({\n            compute: '_computeCanStarBeToggled',\n        }),\n        /**\n         * Determines the date of the message as a moment object.\n         */\n        date: attr(),\n        /**\n         * States the date of this message as a string (either a relative period\n         * in the near past or an actual date for older dates).\n         */\n        dateDay: attr({\n            compute: '_computeDateDay',\n        }),\n        /**\n         * States the time elapsed since date up to now.\n         */\n        dateFromNow: attr({\n            compute: '_computeDateFromNow',\n        }),\n        email_from: attr(),\n        failureNotifications: one2many('mail.notification', {\n            compute: '_computeFailureNotifications',\n        }),\n        guestAuthor: many2one('mail.guest', {\n            inverse: 'authoredMessages',\n        }),\n        /**\n         * States whether the message has some attachments.\n         */\n        hasAttachments: attr({\n            compute: '_computeHasAttachments',\n        }),\n        /**\n         * Determines whether the message has a reaction icon.\n         */\n        hasReactionIcon: attr({\n            compute: '_computeHasReactionIcon',\n        }),\n        id: attr({\n            readonly: true,\n            required: true,\n        }),\n        isCurrentUserOrGuestAuthor: attr({\n            compute: '_computeIsCurrentUserOrGuestAuthor',\n            default: false,\n        }),\n        /**\n         * States if the body field is empty, regardless of editor default\n         * html content. To determine if a message is fully empty, use\n         * `isEmpty`.\n         */\n        isBodyEmpty: attr({\n            compute: '_computeIsBodyEmpty',\n        }),\n        /**\n         * States whether `body` and `subtype_description` contain similar\n         * values.\n         *\n         * This is necessary to avoid displaying both of them together when they\n         * contain duplicate information. This will especially happen with\n         * messages that are posted automatically at the creation of a record\n         * (messages that serve as tracking messages). They do have hard-coded\n         * \"record created\" body while being assigned a subtype with a\n         * description that states the same information.\n         *\n         * Fixing newer messages is possible by not assigning them a duplicate\n         * body content, but the check here is still necessary to handle\n         * existing messages.\n         *\n         * Limitations:\n         * - A translated subtype description might not match a non-translatable\n         *   body created by a user with a different language.\n         * - Their content might be mostly but not exactly the same.\n         */\n        isBodyEqualSubtypeDescription: attr({\n            compute: '_computeIsBodyEqualSubtypeDescription',\n            default: false,\n        }),\n        /**\n         * Determine whether the message has to be considered empty or not.\n         *\n         * An empty message has no text, no attachment and no tracking value.\n         */\n        isEmpty: attr({\n            compute: '_computeIsEmpty',\n        }),\n        /**\n         * States whether `originThread.name` and `subject` contain similar\n         * values except it contains the extra prefix at the start\n         * of the subject.\n         *\n         * This is necessary to avoid displaying the subject, if\n         * the subject is same as threadname.\n         */\n        isSubjectSimilarToOriginThreadName: attr({\n            compute: '_computeIsSubjectSimilarToOriginThreadName',\n        }),\n        isTemporary: attr({\n            default: false,\n        }),\n        isTransient: attr({\n            default: false,\n        }),\n        is_discussion: attr({\n            default: false,\n        }),\n        /**\n         * Determine whether the message was a needaction. Useful to make it\n         * present in history mailbox.\n         */\n        isHistory: attr({\n            default: false,\n        }),\n        /**\n         * Determine whether the message is needaction. Useful to make it\n         * present in inbox mailbox and messaging menu.\n         */\n        isNeedaction: attr({\n            default: false,\n        }),\n        is_note: attr({\n            default: false,\n        }),\n        is_notification: attr({\n            default: false,\n        }),\n        /**\n         * Determine whether the current partner is mentioned.\n         */\n        isCurrentPartnerMentioned: attr({\n            compute: '_computeIsCurrentPartnerMentioned',\n            default: false,\n        }),\n        /**\n         * Determine whether the message is highlighted.\n         */\n        isHighlighted: attr({\n            compute: '_computeIsHighlighted',\n        }),\n        /**\n         * Determine whether the message is starred. Useful to make it present\n         * in starred mailbox.\n         */\n        isStarred: attr({\n            default: false,\n        }),\n        messageTypeText: attr({\n            compute: '_computeMessageTypeText',\n        }),\n        /**\n         * Groups of reactions per content allowing to know the number of\n         * reactions for each.\n         */\n        messageReactionGroups: one2many('mail.message_reaction_group', {\n            inverse: 'message',\n            isCausal: true,\n        }),\n        message_type: attr(),\n        messageSeenIndicators: one2many('mail.message_seen_indicator', {\n            inverse: 'message',\n            isCausal: true,\n        }),\n        /**\n         * States the views that are displaying this message.\n         */\n        messageViews: one2many('mail.message_view', {\n            inverse: 'message',\n            isCausal: true,\n        }),\n        notifications: one2many('mail.notification', {\n            inverse: 'message',\n            isCausal: true,\n        }),\n        /**\n         * Origin thread of this message (if any).\n         */\n        originThread: many2one('mail.thread', {\n            inverse: 'messagesAsOriginThread',\n        }),\n        /**\n         * States the message that this message replies to (if any). Only makes\n         * sense on channels. Other types of threads might have a parent message\n         * (parent_id in python) that should be ignored for the purpose of this\n         * feature.\n         */\n        parentMessage: many2one('mail.message'),\n        /**\n         * This value is meant to be based on field body which is\n         * returned by the server (and has been sanitized before stored into db).\n         * Do not use this value in a 't-raw' if the message has been created\n         * directly from user input and not from server data as it's not escaped.\n         */\n        prettyBody: attr({\n            compute: '_computePrettyBody',\n            default: \"\",\n        }),\n        recipients: many2many('mail.partner'),\n        subject: attr(),\n        subtype_description: attr(),\n        subtype_id: attr(),\n        /**\n         * All threads that this message is linked to. This field is read-only.\n         */\n        threads: many2many('mail.thread', {\n            compute: '_computeThreads',\n            inverse: 'messages',\n        }),\n        tracking_value_ids: attr({\n            default: [],\n        }),\n    };\n    Message.identifyingFields = ['id'];\n    Message.modelName = 'mail.message';\n\n    return Message;\n}\n\nregisterNewModel('mail.message', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr, many2one, one2one } from '@mail/model/model_field';\nimport { clear, insertAndReplace, replace } from '@mail/model/model_field_command';\nimport { markEventHandled } from '@mail/utils/utils';\n\nfunction factory(dependencies) {\n\n    class MessageActionList extends dependencies['mail.model'] {\n\n        /**\n         * @override\n         */\n        _created() {\n            // bind handlers so they can be used in templates\n            this.onClick = this.onClick.bind(this);\n            this.onClickConfirmDelete = this.onClickConfirmDelete.bind(this);\n            this.onClickDelete = this.onClickDelete.bind(this);\n            this.onClickEdit = this.onClickEdit.bind(this);\n            this.onClickMarkAsRead = this.onClickMarkAsRead.bind(this);\n            this.onReactionPopoverOpened = this.onReactionPopoverOpened.bind(this);\n            this.onReactionPopoverClosed = this.onReactionPopoverClosed.bind(this);\n            this.onClickReplyTo = this.onClickReplyTo.bind(this);\n            this.onClickToggleStar = this.onClickToggleStar.bind(this);\n            this.onDeleteConfirmDialogClosed = this.onDeleteConfirmDialogClosed.bind(this);\n            this.onEmojiSelection = this.onEmojiSelection.bind(this);\n        }\n\n        /**\n         * @private\n         * @param {MouseEvent} ev\n         */\n        onClick(ev) {\n            markEventHandled(ev, 'MessageActionList.Click');\n        }\n\n        /**\n         * @private\n         * @param {MouseEvent} ev\n         */\n        onClickConfirmDelete(ev) {\n            this.message.updateContent({\n                body: '',\n                attachment_ids: [],\n                attachment_tokens: [],\n            });\n        }\n\n        /**\n         * @private\n         * @param {MouseEvent} ev\n         */\n        onClickDelete(ev) {\n            this.update({ showDeleteConfirm: true });\n        }\n\n        /**\n         * @private\n         * @param {MouseEvent} ev\n         */\n         onClickEdit(ev) {\n            this.messageView.startEditing();\n        }\n\n        /**\n         * @private\n         * @param {MouseEvent} ev\n         */\n        onClickMarkAsRead(ev) {\n            this.message.markAsRead();\n        }\n\n        /**\n         * @private\n         * @param {Event} ev\n         */\n        onReactionPopoverClosed(ev) {\n            this.update({ isReactionPopoverOpened: false });\n        }\n\n        /**\n         * @private\n         * @param {Event} ev\n         */\n        onReactionPopoverOpened(ev) {\n            this.update({ isReactionPopoverOpened: true });\n        }\n\n        /**\n         * Opens the reply composer for this message (or closes it if it was\n         * already opened).\n         *\n         * @private\n         * @param {MouseEvent} ev\n         */\n        onClickReplyTo(ev) {\n            markEventHandled(ev, 'MessageActionList.replyTo');\n            this.messageView.replyTo();\n        }\n\n        /**\n         * @private\n         * @param {MouseEvent} ev\n         */\n        onClickToggleStar(ev) {\n            this.message.toggleStar();\n        }\n\n        /**\n         * @private\n         * @param {CustomEvent} ev\n         */\n        onDeleteConfirmDialogClosed(ev) {\n            this.update({ showDeleteConfirm: false });\n        }\n\n        /**\n         * Handles `o-emoji-selection` event from the emoji popover.\n         *\n         * @private\n         * @param {CustomEvent} ev\n         * @param {Object} ev.detail\n         * @param {string} ev.detail.unicode\n         */\n        onEmojiSelection(ev) {\n            this.message.addReaction(ev.detail.unicode);\n        }\n\n        //----------------------------------------------------------------------\n        // Private\n        //----------------------------------------------------------------------\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeHasMarkAsReadIcon() {\n            return Boolean(\n                this.messaging && this.messaging.inbox &&\n                this.messageView && this.messageView.threadView && this.messageView.threadView.thread &&\n                this.messageView.threadView.thread === this.messaging.inbox\n            );\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeHasReplyIcon() {\n            return Boolean(\n                this.messaging && this.messaging.inbox &&\n                this.message && !this.message.isTemporary && !this.message.isTransient &&\n                this.messageView && this.messageView.threadView && this.messageView.threadView.thread && (\n                    this.messageView.threadView.thread === this.messaging.inbox ||\n                    this.messageView.threadView.thread.model === 'mail.channel'\n                )\n            );\n        }\n\n        _computeIsReactionPopoverOpened() {\n            return Boolean(\n                this.reactionPopoverRef &&\n                this.reactionPopoverRef.comp &&\n                this.reactionPopoverRef.comp.state.displayed\n            );\n        }\n\n        /**\n         * @private\n         * @returns {mail.message_view}\n         */\n        _computeMessageViewForDelete() {\n            return this.message\n                ? insertAndReplace({ message: replace(this.message) })\n                : clear();\n        }\n\n    }\n\n    MessageActionList.fields = {\n        /**\n         * Determines whether this message action list has mark as read icon.\n         */\n        hasMarkAsReadIcon: attr({\n            compute: '_computeHasMarkAsReadIcon',\n        }),\n        /**\n         * Determines whether this message action list has a reply icon.\n         */\n        hasReplyIcon: attr({\n            compute: '_computeHasReplyIcon',\n        }),\n        /**\n         * States whether the reaction popover is currently opened.\n         */\n        isReactionPopoverOpened: attr({\n            compute: '_computeIsReactionPopoverOpened',\n        }),\n        /**\n         * States the message on which this action message list operates.\n         */\n        message: many2one('mail.message', {\n            related: 'messageView.message',\n        }),\n        /**\n         * States the message view that controls this message action list.\n         */\n        messageView: one2one('mail.message_view', {\n            inverse: 'messageActionList',\n            readonly: true,\n            required: true,\n        }),\n        /**\n         * Determines the message view that this message action list will use to\n         * display this message in this delete confirmation dialog.\n         */\n        messageViewForDelete: one2one('mail.message_view', {\n            compute: '_computeMessageViewForDelete',\n            inverse: 'messageActionListWithDelete',\n            isCausal: true,\n        }),\n        /**\n         * States the reference to the reaction popover component (if any).\n         */\n        reactionPopoverRef: attr(),\n        /**\n         * Determines whether to show the message delete-confirm dialog.\n         */\n        showDeleteConfirm: attr({\n            default: false,\n        }),\n    };\n    MessageActionList.identifyingFields = ['messageView'];\n    MessageActionList.modelName = 'mail.message_action_list';\n\n    return MessageActionList;\n}\n\nregisterNewModel('mail.message_action_list', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr, one2one } from '@mail/model/model_field';\nimport { clear, replace } from '@mail/model/model_field_command';\nimport { markEventHandled } from '@mail/utils/utils';\n\nfunction factory(dependencies) {\n\n    class MessageInReplyToView extends dependencies['mail.model'] {\n\n        /**\n         * @override\n         */\n        _created() {\n            // bind handlers so they can be used in templates\n            this.onClickReply = this.onClickReply.bind(this);\n        }\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        /**\n         * @private\n         * @param {MouseEvent} ev\n         */\n        onClickReply(ev) {\n            markEventHandled(ev, 'MessageInReplyToView.ClickMessageInReplyTo');\n            const threadView = this.messageView && this.messageView.threadView;\n            const parentMessage = this.messageView.message.parentMessage;\n            if (!threadView || !parentMessage) {\n                return;\n            }\n            const parentMessageView = this.messaging.models['mail.message_view'].findFromIdentifyingData({\n                message: replace(parentMessage),\n                threadView: replace(threadView),\n            });\n            if (!parentMessageView) {\n                return;\n            }\n            threadView.addComponentHint('highlight-reply', parentMessageView);\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeHasAttachmentBackLink() {\n            const parentMessage = this.messageView.message.parentMessage;\n            return parentMessage.isBodyEmpty && parentMessage.hasAttachments;\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeHasBodyBackLink() {\n            return !this.messageView.message.parentMessage.isBodyEmpty;\n        }\n\n    }\n\n    MessageInReplyToView.fields = {\n        /**\n         * Determines if the reply has a back link to an attachment only\n         * message.\n         */\n        hasAttachmentBackLink: attr({\n            compute: '_computeHasAttachmentBackLink',\n        }),\n        /**\n         * Determines if the reply has a back link to a non-empty body.\n         */\n        hasBodyBackLink: attr({\n            compute: '_computeHasBodyBackLink',\n        }),\n        messageView: one2one('mail.message_view', {\n            inverse: 'messageInReplyToView',\n            readonly: true,\n            required: true,\n        }),\n    };\n    MessageInReplyToView.identifyingFields = ['messageView'];\n    MessageInReplyToView.modelName = 'mail.message_in_reply_to_view';\n\n    return MessageInReplyToView;\n}\n\nregisterNewModel('mail.message_in_reply_to_view', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr, many2many, many2one } from '@mail/model/model_field';\nimport { insertAndReplace } from '@mail/model/model_field_command';\nimport { markEventHandled } from '@mail/utils/utils';\n\nfunction factory(dependencies) {\n\n    class MessageReactionGroup extends dependencies['mail.model'] {\n\n        /**\n         * @override\n         */\n        _created() {\n            super._created();\n            this.onClick = this.onClick.bind(this);\n        }\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        /**\n         * Handles click on the reaction group.\n         *\n         * @param {MouseEvent} ev\n         */\n        onClick(ev) {\n            markEventHandled(ev, 'MessageReactionGroup.Click');\n            if (this.hasUserReacted) {\n                this.message.removeReaction(this.content);\n            } else {\n                this.message.addReaction(this.content);\n            }\n        }\n\n        //----------------------------------------------------------------------\n        // Private\n        //----------------------------------------------------------------------\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeHasUserReacted() {\n            return Boolean(\n                (this.messaging.currentPartner && this.partners.includes(this.messaging.currentPartner)) ||\n                (this.messaging.currentGuest && this.guests.includes(this.messaging.currentGuest))\n            );\n        }\n\n        /**\n         * @private\n         * @returns {FieldCommand}\n         */\n        _computeMessage() {\n            return insertAndReplace({ id: this.messageId });\n        }\n\n        /**\n         * @private\n         * @returns {string}\n         */\n        _computeSummary() {\n            const {\n                length,\n                0: firstUser,\n                1: secondUser,\n                2: thirdUser,\n            } = [\n                ...this.partners.map(partner => {\n                    if (this.message.originThread) {\n                        return this.message.originThread.getMemberName(partner);\n                    }\n                    return partner.nameOrDisplayName;\n                }),\n                ...this.guests.map(guest => guest.name),\n            ];\n            switch (length) {\n                case 1:\n                    return _.str.sprintf(this.env._t('%s has reacted with %s'), firstUser, this.content);\n                case 2:\n                    return _.str.sprintf(this.env._t('%s and %s have reacted with %s'), firstUser, secondUser, this.content);\n                case 3:\n                    return _.str.sprintf(this.env._t('%s, %s, %s have reacted with %s'), firstUser, secondUser, thirdUser, this.content);\n                case 4:\n                    return _.str.sprintf(this.env._t('%s, %s, %s and 1 other person have reacted with %s'), firstUser, secondUser, thirdUser, this.content);\n                default:\n                    return _.str.sprintf(this.env._t('%s, %s, %s and %s other persons have reacted with %s'), firstUser, secondUser, thirdUser, length - 3, this.content);\n            }\n        }\n\n    }\n\n    MessageReactionGroup.fields = {\n        content: attr({\n            readonly: true,\n            required: true,\n        }),\n        count: attr({\n            required: true,\n        }),\n        /**\n         * States the guests that have used this reaction on this message.\n         */\n        guests: many2many('mail.guest'),\n        hasUserReacted: attr({\n            compute: '_computeHasUserReacted',\n            default: false,\n        }),\n        message: many2one('mail.message', {\n            compute: '_computeMessage',\n            inverse: 'messageReactionGroups',\n            readonly: true,\n            required: true,\n        }),\n        messageId: attr({\n            readonly: true,\n            required: true,\n        }),\n        /**\n         * States the partners that have used this reaction on this message.\n         */\n        partners: many2many('mail.partner'),\n        summary: attr({\n            compute: '_computeSummary',\n        }),\n    };\n    MessageReactionGroup.identifyingFields = ['message', 'content'];\n    MessageReactionGroup.modelName = 'mail.message_reaction_group';\n\n    return MessageReactionGroup;\n}\n\nregisterNewModel('mail.message_reaction_group', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr, many2many, many2one } from '@mail/model/model_field';\nimport { replace, unlinkAll } from '@mail/model/model_field_command';\n\nfunction factory(dependencies) {\n\n    class MessageSeenIndicator extends dependencies['mail.model'] {\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        /**\n         * @static\n         * @param {mail.thread} [channel] the concerned thread\n         */\n        static recomputeFetchedValues(channel = undefined) {\n            const indicatorFindFunction = channel ? localIndicator => localIndicator.thread === channel : undefined;\n            const indicators = this.messaging.models['mail.message_seen_indicator'].all(indicatorFindFunction);\n            for (const indicator of indicators) {\n                indicator.update({\n                    hasEveryoneFetched: indicator._computeHasEveryoneFetched(),\n                    hasSomeoneFetched: indicator._computeHasSomeoneFetched(),\n                    partnersThatHaveFetched: indicator._computePartnersThatHaveFetched(),\n                });\n            }\n        }\n\n        /**\n         * @static\n         * @param {mail.thread} [channel] the concerned thread\n         */\n        static recomputeSeenValues(channel = undefined) {\n            const indicatorFindFunction = channel ? localIndicator => localIndicator.thread === channel : undefined;\n            const indicators = this.messaging.models['mail.message_seen_indicator'].all(indicatorFindFunction);\n            for (const indicator of indicators) {\n                indicator.update({\n                    hasEveryoneSeen: indicator._computeHasEveryoneSeen(),\n                    hasSomeoneFetched: indicator._computeHasSomeoneFetched(),\n                    hasSomeoneSeen: indicator._computeHasSomeoneSeen(),\n                    isMessagePreviousToLastCurrentPartnerMessageSeenByEveryone:\n                        indicator._computeIsMessagePreviousToLastCurrentPartnerMessageSeenByEveryone(),\n                    partnersThatHaveFetched: indicator._computePartnersThatHaveFetched(),\n                    partnersThatHaveSeen: indicator._computePartnersThatHaveSeen(),\n                });\n            }\n        }\n\n        //----------------------------------------------------------------------\n        // Private\n        //----------------------------------------------------------------------\n\n        /**\n         * Manually called as not always called when necessary\n         *\n         * @private\n         * @returns {boolean}\n         * @see computeFetchedValues\n         * @see computeSeenValues\n         */\n        _computeHasEveryoneFetched() {\n            if (!this.message || !this.thread || !this.thread.partnerSeenInfos) {\n                return false;\n            }\n            const otherPartnerSeenInfosDidNotFetch =\n                this.thread.partnerSeenInfos.filter(partnerSeenInfo =>\n                    partnerSeenInfo.partner !== this.message.author &&\n                    (\n                        !partnerSeenInfo.lastFetchedMessage ||\n                        partnerSeenInfo.lastFetchedMessage.id < this.message.id\n                    )\n            );\n            return otherPartnerSeenInfosDidNotFetch.length === 0;\n        }\n\n        /**\n         * Manually called as not always called when necessary\n         *\n         * @private\n         * @returns {boolean}\n         * @see computeSeenValues\n         */\n        _computeHasEveryoneSeen() {\n            if (!this.message || !this.thread || !this.thread.partnerSeenInfos) {\n                return false;\n            }\n            const otherPartnerSeenInfosDidNotSee =\n                this.thread.partnerSeenInfos.filter(partnerSeenInfo =>\n                    partnerSeenInfo.partner !== this.message.author &&\n                    (\n                        !partnerSeenInfo.lastSeenMessage ||\n                        partnerSeenInfo.lastSeenMessage.id < this.message.id\n                    )\n            );\n            return otherPartnerSeenInfosDidNotSee.length === 0;\n        }\n\n        /**\n         * Manually called as not always called when necessary\n         *\n         * @private\n         * @returns {boolean}\n         * @see computeFetchedValues\n         * @see computeSeenValues\n         */\n        _computeHasSomeoneFetched() {\n            if (!this.message || !this.thread || !this.thread.partnerSeenInfos) {\n                return false;\n            }\n            const otherPartnerSeenInfosFetched =\n                this.thread.partnerSeenInfos.filter(partnerSeenInfo =>\n                    partnerSeenInfo.partner !== this.message.author &&\n                    partnerSeenInfo.lastFetchedMessage &&\n                    partnerSeenInfo.lastFetchedMessage.id >= this.message.id\n            );\n            return otherPartnerSeenInfosFetched.length > 0;\n        }\n\n        /**\n         * Manually called as not always called when necessary\n         *\n         * @private\n         * @returns {boolean}\n         * @see computeSeenValues\n         */\n        _computeHasSomeoneSeen() {\n            if (!this.message || !this.thread || !this.thread.partnerSeenInfos) {\n                return false;\n            }\n            const otherPartnerSeenInfosSeen =\n                this.thread.partnerSeenInfos.filter(partnerSeenInfo =>\n                    partnerSeenInfo.partner !== this.message.author &&\n                    partnerSeenInfo.lastSeenMessage &&\n                    partnerSeenInfo.lastSeenMessage.id >= this.message.id\n            );\n            return otherPartnerSeenInfosSeen.length > 0;\n        }\n\n        /**\n         * Manually called as not always called when necessary\n         *\n         * @private\n         * @returns {boolean}\n         * @see computeSeenValues\n         */\n        _computeIsMessagePreviousToLastCurrentPartnerMessageSeenByEveryone() {\n            if (\n                !this.message ||\n                !this.thread ||\n                !this.thread.lastCurrentPartnerMessageSeenByEveryone\n            ) {\n                return false;\n            }\n            return this.message.id < this.thread.lastCurrentPartnerMessageSeenByEveryone.id;\n        }\n\n        /**\n         * Manually called as not always called when necessary\n         *\n         * @private\n         * @returns {mail.partner[]}\n         * @see computeFetchedValues\n         * @see computeSeenValues\n         */\n        _computePartnersThatHaveFetched() {\n            if (!this.message || !this.thread || !this.thread.partnerSeenInfos) {\n                return unlinkAll();\n            }\n            const otherPartnersThatHaveFetched = this.thread.partnerSeenInfos\n                .filter(partnerSeenInfo =>\n                    /**\n                     * Relation may not be set yet immediately\n                     * @see mail.thread_partner_seen_info:partnerId field\n                     * FIXME task-2278551\n                     */\n                    partnerSeenInfo.partner &&\n                    partnerSeenInfo.partner !== this.message.author &&\n                    partnerSeenInfo.lastFetchedMessage &&\n                    partnerSeenInfo.lastFetchedMessage.id >= this.message.id\n                )\n                .map(partnerSeenInfo => partnerSeenInfo.partner);\n            if (otherPartnersThatHaveFetched.length === 0) {\n                return unlinkAll();\n            }\n            return replace(otherPartnersThatHaveFetched);\n        }\n\n        /**\n         * Manually called as not always called when necessary\n         *\n         * @private\n         * @returns {mail.partner[]}\n         * @see computeSeenValues\n         */\n        _computePartnersThatHaveSeen() {\n            if (!this.message || !this.thread || !this.thread.partnerSeenInfos) {\n                return unlinkAll();\n            }\n            const otherPartnersThatHaveSeen = this.thread.partnerSeenInfos\n                .filter(partnerSeenInfo =>\n                    /**\n                     * Relation may not be set yet immediately\n                     * @see mail.thread_partner_seen_info:partnerId field\n                     * FIXME task-2278551\n                     */\n                    partnerSeenInfo.partner &&\n                    partnerSeenInfo.partner !== this.message.author &&\n                    partnerSeenInfo.lastSeenMessage &&\n                    partnerSeenInfo.lastSeenMessage.id >= this.message.id)\n                .map(partnerSeenInfo => partnerSeenInfo.partner);\n            if (otherPartnersThatHaveSeen.length === 0) {\n                return unlinkAll();\n            }\n            return replace(otherPartnersThatHaveSeen);\n        }\n    }\n\n    MessageSeenIndicator.modelName = 'mail.message_seen_indicator';\n\n    MessageSeenIndicator.fields = {\n        hasEveryoneFetched: attr({\n            compute: '_computeHasEveryoneFetched',\n            default: false,\n        }),\n        hasEveryoneSeen: attr({\n            compute: '_computeHasEveryoneSeen',\n            default: false,\n        }),\n        hasSomeoneFetched: attr({\n            compute: '_computeHasSomeoneFetched',\n            default: false,\n        }),\n        hasSomeoneSeen: attr({\n            compute: '_computeHasSomeoneSeen',\n            default: false,\n        }),\n        id: attr(),\n        isMessagePreviousToLastCurrentPartnerMessageSeenByEveryone: attr({\n            compute: '_computeIsMessagePreviousToLastCurrentPartnerMessageSeenByEveryone',\n            default: false,\n        }),\n        /**\n         * The message concerned by this seen indicator.\n         */\n        message: many2one('mail.message', {\n            inverse: 'messageSeenIndicators',\n            readonly: true,\n            required: true,\n        }),\n        partnersThatHaveFetched: many2many('mail.partner', {\n            compute: '_computePartnersThatHaveFetched',\n        }),\n        partnersThatHaveSeen: many2many('mail.partner', {\n            compute: '_computePartnersThatHaveSeen',\n        }),\n        /**\n         * The thread concerned by this seen indicator.\n         */\n        thread: many2one('mail.thread', {\n            inverse: 'messageSeenIndicators',\n            readonly: true,\n            required: true,\n        }),\n    };\n    MessageSeenIndicator.identifyingFields = ['thread', 'message'];\n    return MessageSeenIndicator;\n}\n\nregisterNewModel('mail.message_seen_indicator', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr, many2one, one2one } from '@mail/model/model_field';\nimport { clear, insertAndReplace, replace } from '@mail/model/model_field_command';\n\nfunction factory(dependencies) {\n\n    class MessageView extends dependencies['mail.model'] {\n\n        /**\n         * Briefly highlights the message.\n         */\n        highlight() {\n            this.env.browser.clearTimeout(this.highlightTimeout);\n            this.update({\n                isHighlighted: true,\n                highlightTimeout: this.env.browser.setTimeout(() => {\n                    if (!this.exists()) {\n                        return;\n                    }\n                    this.update({ isHighlighted: false });\n                }, 2000),\n            });\n        }\n\n        /**\n         * Action to initiate reply to current messageView.\n         */\n        replyTo() {\n            // When already replying to this messageView, discard the reply.\n            if (this.threadView.replyingToMessageView === this) {\n                this.threadView.composerView.discard();\n                return;\n            }\n            this.message.originThread.update({\n                composer: insertAndReplace({\n                    isLog: !this.message.is_discussion && !this.message.is_notification,\n                }),\n            });\n            this.threadView.update({\n                replyingToMessageView: replace(this),\n                composerView: insertAndReplace({\n                    doFocus: true,\n                }),\n            });\n        }\n\n        /**\n         * Starts editing this message.\n         */\n        startEditing() {\n            const parser = new DOMParser();\n            const htmlDoc = parser.parseFromString(this.message.body.replaceAll('<br>', '\\n').replaceAll('</br>', '\\n'), \"text/html\");\n            const textInputContent = htmlDoc.body.textContent;\n            this.update({\n                composerForEditing: insertAndReplace({\n                    isLastStateChangeProgrammatic: true,\n                    mentionedPartners: replace(this.message.recipients),\n                    textInputContent,\n                    textInputCursorEnd: textInputContent.length,\n                    textInputCursorStart: textInputContent.length,\n                    textInputSelectionDirection: 'none',\n                }),\n                composerViewInEditing: insertAndReplace({\n                    doFocus: true,\n                }),\n            });\n        }\n\n        /**\n         * Stops editing this message.\n         */\n        stopEditing() {\n            if (this.threadView && this.threadView.composerView && !this.messaging.device.isMobileDevice) {\n                this.threadView.composerView.update({ doFocus: true });\n            }\n            this.update({\n                composerForEditing: clear(),\n                composerViewInEditing: clear(),\n            });\n        }\n\n        //----------------------------------------------------------------------\n        // Private\n        //----------------------------------------------------------------------\n\n        /**\n         * @private\n         * @returns {FieldCommand}\n         */\n        _computeAttachmentList() {\n            return (this.message && this.message.attachments.length > 0)\n                ? insertAndReplace()\n                : clear();\n        }\n\n        /**\n         * @private\n         * @returns {FieldCommand}\n         */\n        _computeMessageActionList() {\n            return (!this.messageActionListWithDelete)\n                ? insertAndReplace()\n                : clear();\n        }\n\n        /**\n         * @private\n         * @returns {FieldCommand}\n         */\n        _computeMessageInReplyToView() {\n            return (\n                this.message &&\n                this.message.originThread &&\n                this.message.originThread.model === 'mail.channel' &&\n                this.message.parentMessage\n            ) ? insertAndReplace() : clear();\n        }\n\n    }\n\n    MessageView.fields = {\n        /**\n         * Determines the attachment list displaying the attachments of this\n         * message (if any).\n         */\n        attachmentList: one2one('mail.attachment_list', {\n            compute: '_computeAttachmentList',\n            inverse: 'messageView',\n            isCausal: true,\n            readonly: true,\n        }),\n        /**\n         * States the component displaying this message view (if any).\n         */\n        component: attr(),\n        composerForEditing: one2one('mail.composer', {\n            inverse: 'messageViewInEditing',\n            isCausal: true,\n        }),\n        /**\n        * Determines the composer that is used to edit this message (if any).\n        */\n        composerViewInEditing: one2one('mail.composer_view', {\n            inverse: 'messageViewInEditing',\n            isCausal: true,\n        }),\n        /**\n         * id of the current timeout that will reset isHighlighted to false.\n         */\n        highlightTimeout: attr(),\n        /**\n         * Whether the message should be forced to be isHighlighted. Should only\n         * be set through @see highlight()\n         */\n        isHighlighted: attr(),\n        /**\n         * Determines whether this message view should be squashed visually.\n         */\n        isSquashed: attr({\n            default: false,\n        }),\n        /**\n         * Determines the message action list of this message view (if any).\n         */\n        messageActionList: one2one('mail.message_action_list', {\n            compute: '_computeMessageActionList',\n            inverse: 'messageView',\n            isCausal: true,\n            readonly: true,\n        }),\n        /**\n         * States the message action list that is displaying this message view\n         * in its delete confirmation view.\n         */\n        messageActionListWithDelete: one2one('mail.message_action_list', {\n            inverse: 'messageViewForDelete',\n            isCausal: true,\n            readonly: true,\n        }),\n        /**\n         * Determines the message that is displayed by this message view.\n         */\n        message: many2one('mail.message', {\n            inverse: 'messageViews',\n            readonly: true,\n            required: true,\n        }),\n        /**\n         * States the message in reply to view that displays the message of\n         * which this message is a reply to (if any).\n         */\n        messageInReplyToView: one2one('mail.message_in_reply_to_view', {\n            compute: '_computeMessageInReplyToView',\n            inverse: 'messageView',\n            isCausal: true,\n            readonly: true,\n        }),\n        /**\n         * States the thread view that is displaying this messages (if any).\n         */\n        threadView: many2one('mail.thread_view', {\n            inverse: 'messageViews',\n            readonly: true,\n        }),\n    };\n    MessageView.identifyingFields = [['threadView', 'messageActionListWithDelete'], 'message'];\n    MessageView.modelName = 'mail.message_view';\n\n    return MessageView;\n}\n\nregisterNewModel('mail.message_view', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr, many2many, many2one, one2many, one2one } from '@mail/model/model_field';\nimport { OnChange } from '@mail/model/model_onchange';\nimport { insertAndReplace, link, unlink } from '@mail/model/model_field_command';\nimport { makeDeferred } from '@mail/utils/deferred/deferred';\n\nconst { EventBus } = owl.core;\n\nfunction factory(dependencies) {\n\n    class Messaging extends dependencies['mail.model'] {\n\n        /**\n         * @override\n         */\n        _created() {\n            super._created();\n            this._handleGlobalWindowFocus = this._handleGlobalWindowFocus.bind(this);\n        }\n\n        /**\n         * @override\n         */\n        _willDelete() {\n            if (this.env.services['bus_service']) {\n                this.env.services['bus_service'].off('window_focus', null, this._handleGlobalWindowFocus);\n            }\n            return super._willDelete(...arguments);\n        }\n\n        /**\n         * Starts messaging and related records.\n         */\n        async start() {\n            this.env.services['bus_service'].on('window_focus', null, this._handleGlobalWindowFocus);\n            await this.async(() => this.initializer.start());\n            this.notificationHandler.start();\n            this.update({ isInitialized: true });\n            this.initializedPromise.resolve();\n        }\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        /**\n         * Open the form view of the record with provided id and model.\n         * Gets the chat with the provided person and returns it.\n         *\n         * If a chat is not appropriate, a notification is displayed instead.\n         *\n         * @param {Object} param0\n         * @param {integer} [param0.partnerId]\n         * @param {integer} [param0.userId]\n         * @param {Object} [options]\n         * @returns {mail.thread|undefined}\n         */\n        async getChat({ partnerId, userId }) {\n            if (userId) {\n                const user = this.messaging.models['mail.user'].insert({ id: userId });\n                return user.getChat();\n            }\n            if (partnerId) {\n                const partner = this.messaging.models['mail.partner'].insert({ id: partnerId });\n                return partner.getChat();\n            }\n        }\n\n        /**\n         * Opens a chat with the provided person and returns it.\n         *\n         * If a chat is not appropriate, a notification is displayed instead.\n         *\n         * @param {Object} person forwarded to @see `getChat()`\n         * @param {Object} [options] forwarded to @see `mail.thread:open()`\n         * @returns {mail.thread|undefined}\n         */\n        async openChat(person, options) {\n            const chat = await this.async(() => this.getChat(person));\n            if (!chat) {\n                return;\n            }\n            await this.async(() => chat.open(options));\n            return chat;\n        }\n\n        /**\n         * Opens the form view of the record with provided id and model.\n         *\n         * @param {Object} param0\n         * @param {integer} param0.id\n         * @param {string} param0.model\n         */\n        async openDocument({ id, model }) {\n            this.env.bus.trigger('do-action', {\n                action: {\n                    type: 'ir.actions.act_window',\n                    res_model: model,\n                    views: [[false, 'form']],\n                    res_id: id,\n                },\n            });\n            if (this.messaging.device.isMobile) {\n                // When opening documents chat windows need to be closed\n                this.messaging.chatWindowManager.closeAll();\n                // messaging menu has a higher z-index than views so it must\n                // be closed to ensure the visibility of the view\n                this.messaging.messagingMenu.close();\n            }\n        }\n\n        /**\n         * Opens the most appropriate view that is a profile for provided id and\n         * model.\n         *\n         * @param {Object} param0\n         * @param {integer} param0.id\n         * @param {string} param0.model\n         */\n        async openProfile({ id, model }) {\n            if (model === 'res.partner') {\n                const partner = this.messaging.models['mail.partner'].insert({ id });\n                return partner.openProfile();\n            }\n            if (model === 'res.users') {\n                const user = this.messaging.models['mail.user'].insert({ id });\n                return user.openProfile();\n            }\n            if (model === 'mail.channel') {\n                let channel = this.messaging.models['mail.thread'].findFromIdentifyingData({ id, model: 'mail.channel' });\n                if (!channel) {\n                    channel = (await this.async(() =>\n                        this.messaging.models['mail.thread'].performRpcChannelInfo({ ids: [id] })\n                    ))[0];\n                }\n                if (!channel) {\n                    this.env.services['notification'].notify({\n                        message: this.env._t(\"You can only open the profile of existing channels.\"),\n                        type: 'warning',\n                    });\n                    return;\n                }\n                return channel.openProfile();\n            }\n            return this.messaging.openDocument({ id, model });\n        }\n\n        /**\n         * Refreshes the value of `isNotificationPermissionDefault`.\n         *\n         * Must be called in flux-specific way because the browser does not\n         * provide an API to detect when this value changes.\n         */\n        refreshIsNotificationPermissionDefault() {\n            this.update({ isNotificationPermissionDefault: this._computeIsNotificationPermissionDefault() });\n        }\n\n        /**\n         * @param {String} sessionId\n         */\n        toggleFocusedRtcSession(sessionId) {\n            const rtcSession = this.messaging.models['mail.rtc_session'].findFromIdentifyingData({\n                id: sessionId,\n            });\n            const focusedSessionId = this.focusedRtcSession && this.focusedRtcSession.id;\n            if (!sessionId || focusedSessionId === sessionId) {\n                this.update({ focusedRtcSession: unlink() });\n                return;\n            }\n            this.update({ focusedRtcSession: link(rtcSession) });\n            if (this.userSetting.rtcLayout !== 'tiled') {\n                return;\n            }\n            this.userSetting.update({ rtcLayout: 'sidebar' });\n        }\n\n        //----------------------------------------------------------------------\n        // Private\n        //----------------------------------------------------------------------\n\n        /**\n         * @private\n         * @returns {Promise}\n         */\n        _computeInitializedPromise() {\n            return makeDeferred();\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeIsCurrentUserGuest() {\n            return Boolean(!this.currentPartner && this.currentGuest);\n        }\n\n        /**\n         * @private\n         * @returns {owl.EventBus}\n         */\n        _computeMessagingBus() {\n            if (this.messagingBus) {\n                return; // avoid overwrite if already provided (example in tests)\n            }\n            return new EventBus();\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeIsNotificationPermissionDefault() {\n            const browserNotification = this.env.browser.Notification;\n            return browserNotification ? browserNotification.permission === 'default' : false;\n        }\n\n        /**\n         * @private\n         */\n        _handleGlobalWindowFocus() {\n            this.update({ outOfFocusUnreadMessageCounter: 0 });\n            this.env.bus.trigger('set_title_part', {\n                part: '_chat',\n            });\n        }\n\n        /**\n         * @private\n         */\n        _onChangeRingingThreads() {\n            if (this.ringingThreads && this.ringingThreads.length > 0) {\n                this.soundEffects.incomingCall.play({ loop: true });\n            } else {\n                this.soundEffects.incomingCall.stop();\n            }\n        }\n\n        /**\n         * @private\n         */\n        _onChangeFocusedRtcSession() {\n            this.rtc.filterIncomingVideoTraffic(this.focusedRtcSession && [this.focusedRtcSession.peerToken]);\n        }\n\n    }\n\n    Messaging.fields = {\n        /**\n         * Inverse of the messaging field present on all models. This field\n         * therefore contains all existing records.\n         */\n        allRecords: one2many('mail.model', {\n            inverse: 'messaging',\n            isCausal: true,\n        }),\n        /**\n         * Determines whether a loop should be started at initialization to\n         * periodically fetch the im_status of all users.\n         */\n        autofetchPartnerImStatus: attr({\n            default: true,\n        }),\n        cannedResponses: one2many('mail.canned_response'),\n        chatWindowManager: one2one('mail.chat_window_manager', {\n            default: insertAndReplace(),\n            isCausal: true,\n            readonly: true,\n        }),\n        commands: one2many('mail.channel_command'),\n        companyName: attr(),\n        currentGuest: one2one('mail.guest'),\n        currentPartner: one2one('mail.partner'),\n        currentUser: one2one('mail.user'),\n        device: one2one('mail.device', {\n            default: insertAndReplace(),\n            isCausal: true,\n            readonly: true,\n        }),\n        dialogManager: one2one('mail.dialog_manager', {\n            default: insertAndReplace(),\n            isCausal: true,\n            readonly: true,\n        }),\n        /**\n         * Determines whether animations should be disabled.\n         */\n        disableAnimation: attr({\n            default: false,\n        }),\n        discuss: one2one('mail.discuss', {\n            default: insertAndReplace(),\n            isCausal: true,\n            readonly: true,\n        }),\n        discussPublicView: one2one('mail.discuss_public_view', {\n            inverse: 'messagingAsPublicView',\n            isCausal: true,\n        }),\n        focusedRtcSession: one2one('mail.rtc_session'),\n        /**\n         * Mailbox History.\n         */\n        history: one2one('mail.thread'),\n        /**\n         * Mailbox Inbox.\n         */\n        inbox: one2one('mail.thread'),\n        /**\n         * Promise that will be resolved when messaging is initialized.\n         */\n        initializedPromise: attr({\n            compute: '_computeInitializedPromise',\n            required: true,\n            readonly: true,\n        }),\n        initializer: one2one('mail.messaging_initializer', {\n            default: insertAndReplace(),\n            isCausal: true,\n            readonly: true,\n        }),\n        isCurrentUserGuest: attr({\n            compute: '_computeIsCurrentUserGuest',\n        }),\n        isInitialized: attr({\n            default: false,\n        }),\n        /**\n         * States whether browser Notification Permission is currently in its\n         * 'default' state. This means it is allowed to make a request to the\n         * user to enable notifications.\n         */\n        isNotificationPermissionDefault: attr({\n            compute: '_computeIsNotificationPermissionDefault',\n        }),\n        /**\n         * States whether the current environment is QUnit test. Useful to\n         * disable some features that are not possible to test due to\n         * technical limitations.\n         */\n        isQUnitTest: attr({\n            default: false,\n        }),\n        locale: one2one('mail.locale', {\n            default: insertAndReplace(),\n            isCausal: true,\n            readonly: true,\n        }),\n        /**\n         * Determines after how much time in ms a \"loading\" indicator should be\n         * shown. Useful to avoid flicker for almost instant loading.\n         */\n        loadingBaseDelayDuration: attr({\n            default: 400,\n        }),\n        /**\n         * Determines the bus that is used to communicate messaging events.\n         */\n        messagingBus: attr({\n            compute: '_computeMessagingBus',\n            readonly: true,\n            required: true,\n        }),\n        messagingMenu: one2one('mail.messaging_menu', {\n            default: insertAndReplace(),\n            isCausal: true,\n            readonly: true,\n        }),\n        notificationGroupManager: one2one('mail.notification_group_manager', {\n            default: insertAndReplace(),\n            isCausal: true,\n            readonly: true,\n        }),\n        notificationHandler: one2one('mail.messaging_notification_handler', {\n            default: insertAndReplace(),\n            isCausal: true,\n            readonly: true,\n        }),\n        outOfFocusUnreadMessageCounter: attr({\n            default: 0,\n        }),\n        partnerRoot: many2one('mail.partner'),\n        /**\n         * Determines which partners should be considered the public partners,\n         * which are special partners notably used in livechat.\n         */\n        publicPartners: many2many('mail.partner'),\n        /**\n         * Threads for which the current partner has a pending invitation.\n         * It is computed from the inverse relation for performance reasons.\n         */\n        ringingThreads: one2many('mail.thread', {\n            inverse: 'messagingAsRingingThread',\n        }),\n        rtc: one2one('mail.rtc', {\n            default: insertAndReplace(),\n            isCausal: true,\n            readonly: true,\n        }),\n        soundEffects: one2one('mail.sound_effects', {\n            default: insertAndReplace(),\n            isCausal: true,\n            readonly: true,\n        }),\n        /**\n         * Mailbox Starred.\n         */\n        starred: one2one('mail.thread'),\n        userSetting: one2one('mail.user_setting', {\n            isCausal: true,\n        }),\n    };\n    Messaging.identifyingFields = [];\n    Messaging.onChanges = [\n        new OnChange({\n            dependencies: ['ringingThreads'],\n            methodName: '_onChangeRingingThreads',\n        }),\n        new OnChange({\n            dependencies: ['focusedRtcSession'],\n            methodName: '_onChangeFocusedRtcSession',\n        }),\n    ];\n    Messaging.modelName = 'mail.messaging';\n\n    return Messaging;\n}\n\nregisterNewModel('mail.messaging', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { executeGracefully } from '@mail/utils/utils';\nimport { link, insert, insertAndReplace } from '@mail/model/model_field_command';\n\nfunction factory(dependencies) {\n\n    class MessagingInitializer extends dependencies['mail.model'] {\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        /**\n         * Fetch messaging data initially to populate the store specifically for\n         * the current user. This includes pinned channels for instance.\n         */\n        async start() {\n            this.messaging.update({\n                history: insertAndReplace({\n                    id: 'history',\n                    isServerPinned: true,\n                    model: 'mail.box',\n                    name: this.env._t(\"History\"),\n                }),\n                inbox: insertAndReplace({\n                    id: 'inbox',\n                    isServerPinned: true,\n                    model: 'mail.box',\n                    name: this.env._t(\"Inbox\"),\n                }),\n                starred: insertAndReplace({\n                    id: 'starred',\n                    isServerPinned: true,\n                    model: 'mail.box',\n                    name: this.env._t(\"Starred\"),\n                }),\n            });\n            const device = this.messaging.device;\n            device.start();\n            const data = await this.async(() => this.env.services.rpc({\n                route: '/mail/init_messaging',\n            }, { shadow: true }));\n            await this.async(() => this._init(data));\n            if (this.messaging.autofetchPartnerImStatus) {\n                this.messaging.models['mail.partner'].startLoopFetchImStatus();\n            }\n            if (this.messaging.currentUser) {\n                this._loadMessageFailures();\n            }\n        }\n\n        //----------------------------------------------------------------------\n        // Private\n        //----------------------------------------------------------------------\n\n        /**\n         * @private\n         * @param {Object} param0\n         * @param {Object[]} param0.channels\n         * @param {Object} param0.currentGuest\n         * @param {Object} param0.current_partner\n         * @param {integer} param0.current_user_id\n         * @param {Object} param0.current_user_settings\n         * @param {Object} [param0.mail_failures=[]]\n         * @param {integer} [param0.needaction_inbox_counter=0]\n         * @param {Object} param0.partner_root\n         * @param {Object[]} param0.public_partners\n         * @param {Object[]} [param0.shortcodes=[]]\n         * @param {integer} [param0.starred_counter=0]\n         */\n        async _init({\n            channels,\n            commands = [],\n            companyName,\n            current_partner,\n            currentGuest,\n            current_user_id,\n            current_user_settings,\n            mail_failures = [],\n            menu_id,\n            needaction_inbox_counter = 0,\n            partner_root,\n            public_partners,\n            shortcodes = [],\n            starred_counter = 0\n        }) {\n            const discuss = this.messaging.discuss;\n            // partners first because the rest of the code relies on them\n            this._initPartners({\n                currentGuest,\n                current_partner,\n                current_user_id,\n                partner_root,\n                public_partners,\n            });\n            // mailboxes after partners and before other initializers that might\n            // manipulate threads or messages\n            this._initMailboxes({\n                needaction_inbox_counter,\n                starred_counter,\n            });\n            // init mail user settings\n            if (current_user_settings) {\n                this._initResUsersSettings(current_user_settings);\n            } else {\n                this.messaging.update({\n                    userSetting: insertAndReplace({\n                        id: -1, // fake id for guest\n                    }),\n                });\n            }\n            // various suggestions in no particular order\n            this._initCannedResponses(shortcodes);\n            // FIXME: guests should have (at least some) commands available\n            if (!this.messaging.isCurrentUserGuest) {\n                this._initCommands();\n            }\n            // channels when the rest of messaging is ready\n            await this.async(() => this._initChannels(channels));\n            // failures after channels\n            this._initMailFailures(mail_failures);\n            discuss.update({ menu_id });\n            // company related data\n            this.messaging.update({ companyName });\n        }\n\n        /**\n         * @private\n         * @param {Object[]} cannedResponsesData\n         */\n        _initCannedResponses(cannedResponsesData) {\n            this.messaging.update({\n                cannedResponses: insert(cannedResponsesData),\n            });\n        }\n\n        /**\n         * @private\n         * @param {Object[]} channelsData\n         */\n        async _initChannels(channelsData) {\n            return executeGracefully(channelsData.map(channelData => () => {\n                const convertedData = this.messaging.models['mail.thread'].convertData(channelData);\n                if (!convertedData.members) {\n                    // channel_info does not return all members of channel for\n                    // performance reasons, but code is expecting to know at\n                    // least if the current partner is member of it.\n                    // (e.g. to know when to display \"invited\" notification)\n                    // Current partner can always be assumed to be a member of\n                    // channels received at init.\n                    if (this.messaging.currentPartner) {\n                        convertedData.members = link(this.messaging.currentPartner);\n                    }\n                    if (this.messaging.currentGuest) {\n                        convertedData.guestMembers = link(this.messaging.currentGuest);\n                    }\n                }\n                const channel = this.messaging.models['mail.thread'].insert(\n                    Object.assign({ model: 'mail.channel' }, convertedData)\n                );\n                // flux specific: channels received at init have to be\n                // considered pinned. task-2284357\n                if (!channel.isPinned) {\n                    channel.pin();\n                }\n            }));\n        }\n\n        /**\n         * @private\n         */\n        _initCommands() {\n            this.messaging.update({\n                commands: insert([\n                    {\n                        help: this.env._t(\"Show a helper message\"),\n                        methodName: 'execute_command_help',\n                        name: \"help\",\n                    },\n                    {\n                        help: this.env._t(\"Leave this channel\"),\n                        methodName: 'execute_command_leave',\n                        name: \"leave\",\n                    },\n                    {\n                        channel_types: ['channel', 'chat', 'group'],\n                        help: this.env._t(\"List users in the current channel\"),\n                        methodName: 'execute_command_who',\n                        name: \"who\",\n                    }\n                ]),\n            });\n        }\n\n        /**\n         * @private\n         * @param {Object} param0\n         * @param {integer} param0.needaction_inbox_counter\n         * @param {integer} param0.starred_counter\n         */\n        _initMailboxes({\n            needaction_inbox_counter,\n            starred_counter,\n        }) {\n            this.messaging.inbox.update({ counter: needaction_inbox_counter });\n            this.messaging.starred.update({ counter: starred_counter });\n        }\n\n        /**\n         * @private\n         * @param {Object[]} mailFailuresData\n         */\n        async _initMailFailures(mailFailuresData) {\n            await executeGracefully(mailFailuresData.map(messageData => () => {\n                const message = this.messaging.models['mail.message'].insert(\n                    this.messaging.models['mail.message'].convertData(messageData)\n                );\n                // implicit: failures are sent by the server at initialization\n                // only if the current partner is author of the message\n                if (!message.author && this.messaging.currentPartner) {\n                    message.update({ author: link(this.messaging.currentPartner) });\n                }\n            }));\n            this.messaging.notificationGroupManager.computeGroups();\n        }\n\n        /**\n         * @param {object} resUsersSettings\n         * @param {integer} resUsersSettings.id\n         * @param {boolean} resUsersSettings.is_discuss_sidebar_category_channel_open\n         * @param {boolean} resUsersSettings.is_discuss_sidebar_category_chat_open\n         * @param {boolean} resUsersSettings.use_push_to_talk\n         * @param {String} resUsersSettings.push_to_talk_key\n         * @param {number} resUsersSettings.voice_active_duration\n         * @param {Object} [resUsersSettings.volume_settings]\n         */\n        _initResUsersSettings({\n            id,\n            is_discuss_sidebar_category_channel_open,\n            is_discuss_sidebar_category_chat_open,\n            use_push_to_talk,\n            push_to_talk_key,\n            voice_active_duration,\n            volume_settings = [],\n        }) {\n            this.messaging.currentUser.update({ resUsersSettingsId: id });\n            this.messaging.update({\n                userSetting: insertAndReplace({\n                    id,\n                    usePushToTalk: use_push_to_talk,\n                    pushToTalkKey: push_to_talk_key,\n                    voiceActiveDuration: voice_active_duration,\n                    volumeSettings: volume_settings,\n                }),\n            });\n            this.messaging.discuss.update({\n                categoryChannel: insertAndReplace({\n                    autocompleteMethod: 'channel',\n                    commandAddTitleText: this.env._t(\"Add or join a channel\"),\n                    hasAddCommand: true,\n                    hasViewCommand: true,\n                    isServerOpen: is_discuss_sidebar_category_channel_open,\n                    name: this.env._t(\"Channels\"),\n                    newItemPlaceholderText: this.env._t(\"Find or create a channel...\"),\n                    serverStateKey: 'is_discuss_sidebar_category_channel_open',\n                    sortComputeMethod: 'name',\n                    supportedChannelTypes: ['channel'],\n                }),\n                categoryChat: insertAndReplace({\n                    autocompleteMethod: 'chat',\n                    commandAddTitleText: this.env._t(\"Start a conversation\"),\n                    hasAddCommand: true,\n                    isServerOpen: is_discuss_sidebar_category_chat_open,\n                    name: this.env._t(\"Direct Messages\"),\n                    newItemPlaceholderText: this.env._t(\"Find or start a conversation...\"),\n                    serverStateKey: 'is_discuss_sidebar_category_chat_open',\n                    sortComputeMethod: 'last_action',\n                    supportedChannelTypes: ['chat', 'group'],\n                }),\n            });\n        }\n\n        /**\n         * @private\n         * @param {Object} currentGuest\n         * @param {Object} current_partner\n         * @param {integer} current_user_id\n         * @param {Object} partner_root\n         * @param {Object[]} [public_partners=[]]\n         */\n        _initPartners({\n            currentGuest,\n            current_partner,\n            current_user_id: currentUserId,\n            partner_root,\n            public_partners = [],\n        }) {\n            if (currentGuest) {\n                this.messaging.update({ currentGuest: insert(currentGuest) });\n            }\n            if (current_partner) {\n                const partnerData = this.messaging.models['mail.partner'].convertData(current_partner);\n                this.messaging.update({\n                    currentPartner: insert(partnerData),\n                    currentUser: insert({ id: currentUserId }),\n                });\n            }\n            this.messaging.update({\n                partnerRoot: insert(this.messaging.models['mail.partner'].convertData(partner_root)),\n                publicPartners: insert(public_partners.map(\n                    publicPartner => this.messaging.models['mail.partner'].convertData(publicPartner)\n                )),\n            });\n        }\n\n        /**\n         * @private\n         */\n        async _loadMessageFailures() {\n            const data = await this.env.services.rpc({\n                route: '/mail/load_message_failures',\n            }, { shadow: true });\n            this._initMailFailures(data);\n        }\n\n    }\n    MessagingInitializer.identifyingFields = ['messaging'];\n    MessagingInitializer.modelName = 'mail.messaging_initializer';\n\n    return MessagingInitializer;\n}\n\nregisterNewModel('mail.messaging_initializer', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr, one2many } from '@mail/model/model_field';\n\nfunction factory(dependencies) {\n\n    class MessagingMenu extends dependencies['mail.model'] {\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        /**\n         * Close the messaging menu. Should reset its internal state.\n         */\n        close() {\n            this.update({ isOpen: false });\n        }\n\n        /**\n         * Toggle the visibility of the messaging menu \"new message\" input in\n         * mobile.\n         */\n        toggleMobileNewMessage() {\n            this.update({ isMobileNewMessageToggled: !this.isMobileNewMessageToggled });\n        }\n\n        /**\n         * Toggle whether the messaging menu is open or not.\n         */\n        toggleOpen() {\n            this.update({ isOpen: !this.isOpen });\n            this.messaging.refreshIsNotificationPermissionDefault();\n            if (this.isOpen) {\n                // populate some needaction messages on threads.\n                this.messaging.inbox.cache.update({ isCacheRefreshRequested: true });\n            }\n        }\n\n        //----------------------------------------------------------------------\n        // Private\n        //----------------------------------------------------------------------\n\n        /**\n         * @private\n         * @returns {integer}\n         */\n        _computeCounter() {\n            if (!this.messaging) {\n                return 0;\n            }\n            const inboxCounter = this.messaging.inbox ? this.messaging.inbox.counter : 0;\n            const unreadChannelsCounter = this.pinnedAndUnreadChannels.length;\n            const notificationGroupsCounter = this.messaging.notificationGroupManager\n                ? this.messaging.notificationGroupManager.groups.reduce(\n                    (total, group) => total + group.notifications.length,\n                    0\n                )\n                : 0;\n            const notificationPemissionCounter = this.messaging.isNotificationPermissionDefault ? 1 : 0;\n            return inboxCounter + unreadChannelsCounter + notificationGroupsCounter + notificationPemissionCounter;\n        }\n\n    }\n\n    MessagingMenu.fields = {\n        /**\n         * Tab selected in the messaging menu.\n         * Either 'all', 'chat' or 'channel'.\n         */\n        activeTabId: attr({\n            default: 'all',\n        }),\n        /**\n         * States the counter of this messaging menu. The counter is an integer\n         * value to give to the current user an estimate of how many things\n         * (unread threads, notifications, ...) are yet to be processed by him.\n         */\n        counter: attr({\n            compute: '_computeCounter',\n        }),\n        /**\n         * Determine whether the mobile new message input is visible or not.\n         */\n        isMobileNewMessageToggled: attr({\n            default: false,\n        }),\n        /**\n         * Determine whether the messaging menu dropdown is open or not.\n         */\n        isOpen: attr({\n            default: false,\n        }),\n        /**\n         * States all the pinned channels that have unread messages.\n         */\n        pinnedAndUnreadChannels: one2many('mail.thread', {\n            inverse: 'messagingMenuAsPinnedAndUnreadChannel',\n            readonly: true,\n        }),\n    };\n    MessagingMenu.identifyingFields = ['messaging'];\n    MessagingMenu.modelName = 'mail.messaging_menu';\n\n    return MessagingMenu;\n}\n\nregisterNewModel('mail.messaging_menu', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { decrement, increment, insert, insertAndReplace, link, replace, unlink } from '@mail/model/model_field_command';\nimport { htmlToTextContentInline } from '@mail/js/utils';\n\nimport { str_to_datetime } from 'web.time';\n\nconst PREVIEW_MSG_MAX_SIZE = 350; // optimal for native English speakers\n\nfunction factory(dependencies) {\n\n    class MessagingNotificationHandler extends dependencies['mail.model'] {\n\n        /**\n         * @override\n         */\n        _willDelete() {\n            if (this.env.services['bus_service']) {\n                this.env.services['bus_service'].off('notification');\n                this.env.services['bus_service'].stopPolling();\n            }\n            return super._willDelete(...arguments);\n        }\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        /**\n         * Fetch messaging data initially to populate the store specifically for\n         * the current users. This includes pinned channels for instance.\n         */\n        start() {\n            this.env.services.bus_service.onNotification(null, notifs => this._handleNotifications(notifs));\n            this.env.services.bus_service.startPolling();\n        }\n\n        //----------------------------------------------------------------------\n        // Private\n        //----------------------------------------------------------------------\n\n        /**\n         * @private\n         * @param {Object[]} notifications\n         * @param {Array|string} notifications[i][0] meta-data of the notification.\n         * @param {string} notifications[i][0][0] name of database this\n         *   notification comes from.\n         * @param {string} notifications[i][0][1] type of notification.\n         * @param {integer} notifications[i][0][2] usually id of related type\n         *   of notification. For instance, with `mail.channel`, this is the id\n         *   of the channel.\n         * @param {Object} notifications[i][1] payload of the notification\n         */\n        async _handleNotifications(notifications) {\n            const channelsLeft = new Set(\n                notifications\n                    .filter(notification => notification.type === 'mail.channel/leave')\n                    .map(notification => notification.payload.id)\n            );\n            const proms = notifications.map(message => {\n                if (typeof message === 'object') {\n                    switch (message.type) {\n                        case 'ir.attachment/delete':\n                            return this._handleNotificationAttachmentDelete(message.payload);\n                        case 'mail.channel.partner/seen':\n                            return this._handleNotificationChannelPartnerSeen(message.payload);\n                        case 'mail.channel.partner/fetched':\n                            return this._handleNotificationChannelPartnerFetched(message.payload);\n                        case 'mail.channel.partner/typing_status':\n                            return this._handleNotificationChannelPartnerTypingStatus(message.payload);\n                        case 'mail.channel/new_message':\n                            if (channelsLeft.has(message.payload.id)) {\n                                /**\n                                 * `_handleNotificationChannelMessage` tries to pin the channel,\n                                 * which is not desirable if the channel was just left.\n                                 * The issue happens because the longpolling request resolves with\n                                 * notifications for the channel that was just left (the channels\n                                 * to observe are determined when the longpolling starts waiting,\n                                 * not when it resolves).\n                                 */\n                                return;\n                            }\n                            return this._handleNotificationChannelMessage(message.payload);\n                        case 'mail.message/delete':\n                            return this._handleNotificationMessageDelete(message.payload);\n                        case 'mail.message/inbox':\n                            return this._handleNotificationNeedaction(message.payload);\n                        case 'mail.message/mark_as_read':\n                            return this._handleNotificationPartnerMarkAsRead(message.payload);\n                        case 'mail.message/notification_update':\n                            return this._handleNotificationPartnerMessageNotificationUpdate(message.payload);\n                        case 'simple_notification':\n                            return this._handleNotificationSimpleNotification(message.payload);\n                        case 'mail.message/toggle_star':\n                            return this._handleNotificationPartnerToggleStar(message.payload);\n                        case 'mail.channel/transient_message':\n                            return this._handleNotificationPartnerTransientMessage(message.payload);\n                        case 'mail.channel/leave':\n                            return this._handleNotificationChannelLeave(message.payload);\n                        case 'mail.channel/delete':\n                            return this._handleNotificationChannelDelete(message.payload);\n                        case 'res.users/connection':\n                            return this._handleNotificationPartnerUserConnection(message.payload);\n                        case 'mail.activity/updated':\n                            return this.env.bus.trigger('activity_updated', message.payload);\n                        case 'mail.channel/unpin':\n                            return this._handleNotificationChannelUnpin(message.payload);\n                        case 'mail.channel/joined':\n                            return this._handleNotificationChannelJoined(message.payload);\n                        case 'mail.channel/last_interest_dt_changed':\n                            return this._handleNotificationChannelLastInterestDateTimeChanged(message.payload);\n                        case 'mail.channel/legacy_insert':\n                            return this.messaging.models['mail.thread'].insert(this.messaging.models['mail.thread'].convertData({ model: 'mail.channel', ...message.payload }));\n                        case 'mail.channel/insert':\n                            return this._handleNotificationChannelUpdate(message.payload);\n                        case 'mail.guest/insert':\n                            return this.messaging.models['mail.guest'].insert(message.payload);\n                        case 'mail.message/insert':\n                            return this.messaging.models['mail.message'].insert(message.payload);\n                        case 'mail.channel.rtc.session/insert':\n                            return this.messaging.models['mail.rtc_session'].insert(message.payload);\n                        case 'res.users.settings/changed':\n                            return this._handleNotificationResUsersSettings(message.payload);\n                        case 'mail.channel.rtc.session/peer_notification':\n                            return this._handleNotificationRtcPeerToPeer(message.payload);\n                        case 'mail.channel/rtc_sessions_update':\n                            return this._handleNotificationRtcSessionUpdate(message.payload);\n                        case 'mail.channel.rtc.session/ended':\n                            return this._handleNotificationRtcSessionEnded(message.payload);\n                        case 'res.users.settings/volumes_update':\n                            return this._handleNotificationVolumeSettingUpdate(message.payload);\n                        default:\n                            return this._handleNotification(message);\n                    }\n                }\n            });\n            await this.async(() => Promise.all(proms));\n        }\n\n        /**\n         * @abstract\n         * @private\n         * @param {Object} message\n         */\n        _handleNotification(message) {}\n\n        /**\n         * @private\n         * @param {Object} payload\n         * @param {integer} [payload.id]\n         */\n        _handleNotificationAttachmentDelete(payload) {\n            const attachment = this.messaging.models['mail.attachment'].findFromIdentifyingData(payload);\n            if (attachment) {\n                attachment.delete();\n            }\n        }\n\n        /**\n         * @private\n         * @param {Object} payload\n         * @param {integer} payload.id\n         */\n        async _handleNotificationChannelDelete({ id: channelId }) {\n            const channel = this.messaging.models['mail.thread'].findFromIdentifyingData({\n                id: channelId,\n                model: 'mail.channel',\n            });\n            if (!channel) {\n                return;\n            }\n            channel.delete();\n        }\n\n        /**\n         * @private\n         * @param {Object} param1\n         * @param {integer} param1.channel_id\n         * @param {integer} param1.last_message_id\n         * @param {integer} param1.partner_id\n         */\n        async _handleNotificationChannelPartnerFetched({\n            channel_id: channelId,\n            last_message_id,\n            partner_id,\n        }) {\n            const channel = this.messaging.models['mail.thread'].findFromIdentifyingData({\n                id: channelId,\n                model: 'mail.channel',\n            });\n            if (!channel) {\n                // for example seen from another browser, the current one has no\n                // knowledge of the channel\n                return;\n            }\n            if (channel.channel_type === 'channel') {\n                // disabled on `channel` channels for performance reasons\n                return;\n            }\n            this.messaging.models['mail.thread_partner_seen_info'].insert({\n                lastFetchedMessage: insert({ id: last_message_id }),\n                partner: insertAndReplace({ id: partner_id }),\n                thread: replace(channel),\n            });\n            this.messaging.models['mail.message_seen_indicator'].insert({\n                message: insertAndReplace({ id: last_message_id }),\n                thread: replace(channel),\n            });\n            // FIXME force the computing of message values (cf task-2261221)\n            this.messaging.models['mail.message_seen_indicator'].recomputeFetchedValues(channel);\n        }\n\n        /**\n         * @private\n         * @param {Object} payload\n         * @param {mail.thread} payload.channel\n         * @param {integer} [payload.invited_by_user_id]\n         */\n        _handleNotificationChannelJoined({ channel: channelData, invited_by_user_id: invitedByUserId }) {\n            const channel = this.messaging.models['mail.thread'].insert(this.messaging.models['mail.thread'].convertData(channelData));\n            if (this.messaging.currentUser && invitedByUserId !== this.messaging.currentUser.id) {\n                // Current user was invited by someone else.\n                this.env.services['notification'].notify({\n                    message: _.str.sprintf(\n                        this.env._t(\"You have been invited to #%s\"),\n                        channel.displayName\n                    ),\n                    type: 'info',\n                });\n            }\n        }\n\n        /**\n         * @private\n         * @param {object} payload\n         * @param {integer} payload.id\n         * @param {string} payload.last_interest_dt\n         */\n        _handleNotificationChannelLastInterestDateTimeChanged({ id, last_interest_dt }) {\n            const channel = this.messaging.models['mail.thread'].findFromIdentifyingData({\n                id: id,\n                model: 'mail.channel',\n            });\n            if (channel) {\n                channel.update({\n                    lastInterestDateTime: str_to_datetime(last_interest_dt),\n                });\n            }\n        }\n\n        /**\n         * @private\n         * @param {Object} payload\n         * @param {integer} payload.id\n         * @param {Object} payload.messageData\n         */\n        async _handleNotificationChannelMessage({ id: channelId, message: messageData }) {\n            let channel = this.messaging.models['mail.thread'].findFromIdentifyingData({\n                id: channelId,\n                model: 'mail.channel',\n            });\n            if (!channel && this.messaging.isCurrentUserGuest) {\n                return; // guests should not receive messages for channels they don't know, and they can't make the channel_info RPC\n            }\n            const convertedData = this.messaging.models['mail.message'].convertData(messageData);\n\n            // Fetch missing info from channel before going further. Inserting\n            // a channel with incomplete info can lead to issues. This is in\n            // particular the case with the `uuid` field that is assumed\n            // \"required\" by the rest of the code and is necessary for some\n            // features such as chat windows.\n            if (!channel) {\n                channel = (await this.async(() =>\n                    this.messaging.models['mail.thread'].performRpcChannelInfo({ ids: [channelId] })\n                ))[0];\n            }\n            if (!channel.isPinned) {\n                channel.pin();\n            }\n\n            const message = this.messaging.models['mail.message'].insert(convertedData);\n            this._notifyThreadViewsMessageReceived(message);\n\n            // If the current partner is author, do nothing else.\n            if (message.author === this.messaging.currentPartner) {\n                return;\n            }\n\n            // Chat from OdooBot is considered disturbing and should only be\n            // shown on the menu, but no notification and no thread open.\n            const isChatWithOdooBot = (\n                channel.correspondent &&\n                channel.correspondent === this.messaging.partnerRoot\n            );\n            if (!isChatWithOdooBot) {\n                const isOdooFocused = this.env.services['bus_service'].isOdooFocused();\n                // Notify if out of focus\n                if (!isOdooFocused && channel.isChatChannel) {\n                    this._notifyNewChannelMessageWhileOutOfFocus({\n                        channel,\n                        message,\n                    });\n                }\n                if (channel.model === 'mail.channel' && channel.channel_type !== 'channel' && !this.messaging.currentGuest) {\n                    // disabled on non-channel threads and\n                    // on `channel` channels for performance reasons\n                    channel.markAsFetched();\n                }\n                // open chat on receiving new message if it was not already opened or folded\n                if (channel.channel_type !== 'channel' && !this.messaging.device.isMobile && !channel.chatWindow) {\n                    this.messaging.chatWindowManager.openThread(channel);\n                }\n            }\n        }\n\n        /**\n         * Called when a channel has been seen, and the server responds with the\n         * last message seen. Useful in order to track last message seen.\n         *\n         * @private\n         * @param {Object} param1\n         * @param {integer} param1.channel_id\n         * @param {integer} param1.last_message_id\n         * @param {integer} param1.partner_id\n         */\n        async _handleNotificationChannelPartnerSeen({\n            channel_id: channelId,\n            last_message_id,\n            partner_id,\n        }) {\n            const channel = this.messaging.models['mail.thread'].findFromIdentifyingData({\n                id: channelId,\n                model: 'mail.channel',\n            });\n            if (!channel) {\n                // for example seen from another browser, the current one has no\n                // knowledge of the channel\n                return;\n            }\n            const lastMessage = this.messaging.models['mail.message'].insert({ id: last_message_id });\n            // restrict computation of seen indicator for \"non-channel\" channels\n            // for performance reasons\n            const shouldComputeSeenIndicators = channel.channel_type !== 'channel';\n            if (shouldComputeSeenIndicators) {\n                this.messaging.models['mail.thread_partner_seen_info'].insert({\n                    lastSeenMessage: link(lastMessage),\n                    partner: insertAndReplace({ id: partner_id }),\n                    thread: replace(channel),\n                });\n                this.messaging.models['mail.message_seen_indicator'].insert({\n                    message: replace(lastMessage),\n                    thread: replace(channel),\n                });\n            }\n            if (this.messaging.currentPartner && this.messaging.currentPartner.id === partner_id) {\n                channel.update({\n                    lastSeenByCurrentPartnerMessageId: last_message_id,\n                    pendingSeenMessageId: undefined,\n                });\n            }\n            if (shouldComputeSeenIndicators) {\n                // FIXME force the computing of thread values (cf task-2261221)\n                this.messaging.models['mail.thread'].computeLastCurrentPartnerMessageSeenByEveryone(channel);\n                // FIXME force the computing of message values (cf task-2261221)\n                this.messaging.models['mail.message_seen_indicator'].recomputeSeenValues(channel);\n            }\n        }\n\n        /**\n         * @private\n         * @param {Object} param1\n         * @param {integer} param1.channel_id\n         * @param {boolean} param1.is_typing\n         * @param {integer} param1.partner_id\n         * @param {string} param1.partner_name\n         */\n        _handleNotificationChannelPartnerTypingStatus({ channel_id, is_typing, partner_id, partner_name }) {\n            const channel = this.messaging.models['mail.thread'].findFromIdentifyingData({\n                id: channel_id,\n                model: 'mail.channel',\n            });\n            if (!channel) {\n                return;\n            }\n            const partner = this.messaging.models['mail.partner'].insert({\n                id: partner_id,\n                name: partner_name,\n            });\n            if (partner === this.messaging.currentPartner) {\n                // Ignore management of current partner is typing notification.\n                return;\n            }\n            if (is_typing) {\n                if (channel.typingMembers.includes(partner)) {\n                    channel.refreshOtherMemberTypingMember(partner);\n                } else {\n                    channel.registerOtherMemberTypingMember(partner);\n                }\n            } else {\n                if (!channel.typingMembers.includes(partner)) {\n                    // Ignore no longer typing notifications of members that\n                    // are not registered as typing something.\n                    return;\n                }\n                channel.unregisterOtherMemberTypingMember(partner);\n            }\n        }\n\n        /**\n         * @private\n         * @param {Object} channelData\n         */\n        _handleNotificationChannelUpdate(channelData) {\n            this.messaging.models['mail.thread'].insert({ model: 'mail.channel', ...channelData });\n        }\n\n        /**\n         * @private\n         * @param {object} settings\n         * @param {boolean} settings.use_push_to_talk\n         * @param {String} settings.push_to_talk_key\n         * @param {number} settings.voice_active_duration\n         * @param {boolean} [settings.is_discuss_sidebar_category_channel_open]\n         * @param {boolean} [settings.is_discuss_sidebar_category_chat_open]\n         * @param {Object} [payload.volume_settings]\n         */\n        _handleNotificationResUsersSettings(settings) {\n            if ('is_discuss_sidebar_category_channel_open' in settings) {\n                this.messaging.discuss.categoryChannel.update({\n                    isServerOpen: settings.is_discuss_sidebar_category_channel_open,\n                });\n            }\n            if ('is_discuss_sidebar_category_chat_open' in settings) {\n                this.messaging.discuss.categoryChat.update({\n                    isServerOpen: settings.is_discuss_sidebar_category_chat_open,\n                });\n            }\n            this.messaging.userSetting.update({\n                usePushToTalk: settings.use_push_to_talk,\n                pushToTalkKey: settings.push_to_talk_key,\n                voiceActiveDuration: settings.voice_active_duration,\n            });\n        }\n\n        /**\n         * @private\n         * @param {Object} data\n         */\n        _handleNotificationNeedaction(data) {\n            const message = this.messaging.models['mail.message'].insert(\n                this.messaging.models['mail.message'].convertData(data)\n            );\n            this.messaging.inbox.update({ counter: increment() });\n            const originThread = message.originThread;\n            if (originThread && message.isNeedaction) {\n                originThread.update({ message_needaction_counter: increment() });\n            }\n        }\n\n        /**\n         * @private\n         * @param {Object} data\n         * @param {string} data.sender\n         * @param {string[]} data.notifications\n         */\n        _handleNotificationRtcPeerToPeer({ sender, notifications }) {\n            for (const content of notifications) {\n                this.messaging.rtc.handleNotification(sender, content);\n            }\n        }\n\n        /**\n         * @private\n         * @param {Object} param1\n         * @param {string} param1.message\n         * @param {boolean} param1.sticky\n         * @param {string} param1.title\n         * @param {boolean} param1.warning\n         */\n        _handleNotificationSimpleNotification({ message, sticky, title, warning }) {\n            this.env.services['notification'].notify({\n                message,\n                sticky,\n                title,\n                type: warning ? 'warning' : 'danger',\n            });\n        }\n\n        /**\n         * @private\n         * @param {Object} data\n         * @param {Object} [data.volumeSettings]\n         */\n        async _handleNotificationVolumeSettingUpdate({ volumeSettings }) {\n            this.messaging && this.messaging.userSetting.update({\n                volumeSettings: volumeSettings,\n            });\n        }\n\n        /**\n         * @private\n         * @param {Object} data\n         * @param {number} [sessionId]\n         */\n        async _handleNotificationRtcSessionEnded({ sessionId }) {\n            const currentSession = this.messaging.rtc.currentRtcSession;\n            if (currentSession && currentSession.id === sessionId) {\n                this.messaging.rtc.channel.endCall();\n                this.env.services['notification'].notify({\n                    message: this.env._t(\"Disconnected from the RTC call by the server\"),\n                    type: 'warning',\n                });\n            }\n        }\n\n        /**\n         * @private\n         * @param {Object} data\n         * @param {string} [data.id]\n         * @param {Object} [data.rtcSessions]\n         */\n        async _handleNotificationRtcSessionUpdate({ id, rtcSessions }) {\n            const channel = this.messaging.models['mail.thread'].findFromIdentifyingData({ id, model: 'mail.channel' });\n            if (!channel) {\n                return;\n            }\n            channel.updateRtcSessions(rtcSessions);\n        }\n\n        /**\n         * @private\n         * @param {Object} param0\n         * @param {integer[]} param0.messag_ids\n         */\n        _handleNotificationMessageDelete({ message_ids }) {\n            for (const id of message_ids) {\n                const message = this.messaging.models['mail.message'].findFromIdentifyingData({ id });\n                if (message) {\n                    message.delete();\n                }\n            }\n            // deleting message might have deleted notifications, force recompute\n            this.messaging.notificationGroupManager.computeGroups();\n        }\n\n        /**\n         * @private\n         * @param {Object} data\n         */\n        _handleNotificationPartnerMessageNotificationUpdate({ elements }) {\n            for (const messageData of elements) {\n                const message = this.messaging.models['mail.message'].insert(\n                    this.messaging.models['mail.message'].convertData(messageData)\n                );\n                // implicit: failures are sent by the server as notification\n                // only if the current partner is author of the message\n                if (!message.author && this.messaging.currentPartner) {\n                    message.update({ author: link(this.messaging.currentPartner) });\n                }\n            }\n            this.messaging.notificationGroupManager.computeGroups();\n        }\n\n        /**\n         * @private\n         * @param {Object} param0\n         * @param {integer[]} [param0.message_ids=[]]\n         * @param {integer} [param0.needaction_inbox_counter]\n         */\n        _handleNotificationPartnerMarkAsRead({ message_ids = [], needaction_inbox_counter }) {\n            for (const message_id of message_ids) {\n                // We need to ignore all not yet known messages because we don't want them\n                // to be shown partially as they would be linked directly to cache.\n                // Furthermore, server should not send back all message_ids marked as read\n                // but something like last read message_id or something like that.\n                // (just imagine you mark 1000 messages as read ... )\n                const message = this.messaging.models['mail.message'].findFromIdentifyingData({ id: message_id });\n                if (!message) {\n                    continue;\n                }\n                // update thread counter\n                const originThread = message.originThread;\n                if (originThread && message.isNeedaction) {\n                    originThread.update({ message_needaction_counter: decrement() });\n                }\n                // move messages from Inbox to history\n                message.update({\n                    isHistory: true,\n                    isNeedaction: false,\n                });\n            }\n            const inbox = this.messaging.inbox;\n            if (needaction_inbox_counter !== undefined) {\n                inbox.update({ counter: needaction_inbox_counter });\n            } else {\n                // kept for compatibility in stable\n                inbox.update({ counter: decrement(message_ids.length) });\n            }\n            if (inbox.counter > inbox.cache.fetchedMessages.length) {\n                // Force refresh Inbox because depending on what was marked as\n                // read the cache might become empty even though there are more\n                // messages on the server.\n                inbox.cache.update({ hasToLoadMessages: true });\n            }\n        }\n\n        /**\n         * @private\n         * @param {Object} param0\n         * @param {integer[]} param0.message_ids\n         * @param {boolean} param0.starred\n         */\n        _handleNotificationPartnerToggleStar({ message_ids = [], starred }) {\n            const starredMailbox = this.messaging.starred;\n            for (const messageId of message_ids) {\n                const message = this.messaging.models['mail.message'].findFromIdentifyingData({\n                    id: messageId,\n                });\n                if (!message) {\n                    continue;\n                }\n                message.update({ isStarred: starred });\n                starredMailbox.update({\n                    counter: starred ? increment() : decrement(),\n                });\n            }\n        }\n\n        /**\n         * On receiving a transient message, i.e. a message which does not come\n         * from a member of the channel. Usually a log message, such as one\n         * generated from a command with ('/').\n         *\n         * @private\n         * @param {Object} data\n         */\n        _handleNotificationPartnerTransientMessage(data) {\n            const convertedData = this.messaging.models['mail.message'].convertData(data);\n            const lastMessageId = this.messaging.models['mail.message'].all().reduce(\n                (lastMessageId, message) => Math.max(lastMessageId, message.id),\n                0\n            );\n            const partnerRoot = this.messaging.partnerRoot;\n            const message = this.messaging.models['mail.message'].create(Object.assign(convertedData, {\n                author: link(partnerRoot),\n                id: lastMessageId + 0.01,\n                isTransient: true,\n            }));\n            this._notifyThreadViewsMessageReceived(message);\n        }\n\n        /**\n         * @private\n         * @param {Object} payload\n         * @param {integer} payload.id\n         */\n        _handleNotificationChannelLeave({ id }) {\n            const channel = this.messaging.models['mail.thread'].findFromIdentifyingData({\n                id,\n                model: 'mail.channel',\n            });\n            if (!channel) {\n                return;\n            }\n            const message = _.str.sprintf(this.env._t(\"You unsubscribed from %s.\"), channel.displayName);\n            this.env.services['notification'].notify({ message, type: 'info' });\n            // We assume that arriving here the server has effectively\n            // unpinned the channel\n            channel.update({\n                isServerPinned: false,\n                members: unlink(this.messaging.currentPartner)\n            });\n        }\n\n        /**\n         * @private\n         * @param {Object} payload\n         * @param {integer} payload.id\n         */\n        _handleNotificationChannelUnpin({ id }) {\n            const channel = this.messaging.models['mail.thread'].findFromIdentifyingData({\n                id,\n                model: 'mail.channel',\n            });\n            if (!channel) {\n                return;\n            }\n            const message = _.str.sprintf(this.env._t(\"You unpinned your conversation with %s.\"), channel.displayName);\n            this.env.services['notification'].notify({ message, type: 'info' });\n            // We assume that arriving here the server has effectively\n            // unpinned the channel\n            channel.update({\n                isServerPinned: false,\n                members: unlink(this.messaging.currentPartner)\n            });\n        }\n\n        /**\n         * @private\n         * @param {Object} payload\n         * @param {integer} payload.partnerId\n         * @param {string} payload.username\n         */\n        async _handleNotificationPartnerUserConnection({ partnerId, username }) {\n            // If the current user invited a new user, and the new user is\n            // connecting for the first time while the current user is present\n            // then open a chat for the current user with the new user.\n            const message = _.str.sprintf(this.env._t('%s connected'), username);\n            const title = this.env._t(\"This is their first connection. Wish them luck.\");\n            this.env.services['bus_service'].sendNotification({ message, title, type: 'info' });\n            const chat = await this.async(() => this.messaging.getChat({ partnerId }));\n            if (!chat || this.messaging.device.isMobile) {\n                return;\n            }\n            this.messaging.chatWindowManager.openThread(chat);\n        }\n\n        /**\n         * @private\n         * @param {Object} param0\n         * @param {mail.thread} param0.channel\n         * @param {mail.message} param0.message\n         */\n        _notifyNewChannelMessageWhileOutOfFocus({ channel, message }) {\n            const author = message.author;\n            const messaging = this.messaging;\n            let notificationTitle;\n            if (!author) {\n                notificationTitle = this.env._t(\"New message\");\n            } else {\n                if (channel.channel_type === 'channel') {\n                    // hack: notification template does not support OWL components,\n                    // so we simply use their template to make HTML as if it comes\n                    // from component\n                    const channelIcon = this.env.qweb.renderToString('mail.ThreadIcon', {\n                        env: this.env,\n                        thread: channel,\n                    });\n                    const channelName = channel.displayName;\n                    const channelNameWithIcon = channelIcon + channelName;\n                    notificationTitle = _.str.sprintf(\n                        this.env._t(\"%s from %s\"),\n                        author.nameOrDisplayName,\n                        channelNameWithIcon\n                    );\n                } else {\n                    notificationTitle = author.nameOrDisplayName;\n                }\n            }\n            const notificationContent = owl.utils.escape(\n                htmlToTextContentInline(message.body).substr(0, PREVIEW_MSG_MAX_SIZE)\n            );\n            this.env.services['bus_service'].sendNotification({\n                message: notificationContent,\n                title: notificationTitle,\n                type: 'info',\n            });\n            messaging.update({ outOfFocusUnreadMessageCounter: increment() });\n            const titlePattern = messaging.outOfFocusUnreadMessageCounter === 1\n                ? this.env._t(\"%d Message\")\n                : this.env._t(\"%d Messages\");\n            this.env.bus.trigger('set_title_part', {\n                part: '_chat',\n                title: _.str.sprintf(titlePattern, messaging.outOfFocusUnreadMessageCounter),\n            });\n        }\n\n        /**\n         * Notifies threadViews about the given message being just received.\n         * This can allow them adjust their scroll position if applicable.\n         *\n         * @private\n         * @param {mail.message}\n         */\n        _notifyThreadViewsMessageReceived(message) {\n            for (const thread of message.threads) {\n                for (const threadView of thread.threadViews) {\n                    threadView.addComponentHint('message-received', { message });\n                }\n            }\n        }\n\n    }\n    MessagingNotificationHandler.identifyingFields = ['messaging'];\n    MessagingNotificationHandler.modelName = 'mail.messaging_notification_handler';\n\n    return MessagingNotificationHandler;\n}\n\nregisterNewModel('mail.messaging_notification_handler', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { RecordDeletedError } from '@mail/model/model_errors';\nimport { many2one } from '@mail/model/model_field';\nimport { insertAndReplace } from '@mail/model/model_field_command';\n\n/**\n * This function generates a class that represent a model. Instances of such\n * model (or inherited models) represent logical objects used in whole\n * application. They could represent server record (e.g. Thread, Message) or\n * UI elements (e.g. MessagingMenu, ChatWindow). These instances are called\n * \"records\", while the classes are called \"models\".\n */\nfunction factory() {\n\n    class Model {\n\n        /**\n         * @param {Object} [param0={}]\n         * @param {string} param0.localId\n         * @param {boolean} [param0.valid=false] if set, this constructor is\n         *   called by static method `create()`. This should always be the case.\n         * @throws {Error} in case constructor is called in an invalid way, i.e.\n         *   by instantiating the record manually with `new` instead of from\n         *   static method `create()`.\n         */\n        constructor({ localId, valid = false } = {}) {\n            if (!valid) {\n                throw new Error(\"Record must always be instantiated from static method 'create()'\");\n            }\n            Object.assign(this, {\n                // The unique record identifier.\n                localId,\n                // Listeners that are bound to this record, to be notified of\n                // change in dependencies of compute, related and \"on change\".\n                __listeners: [],\n                // Field values of record.\n                __values: {},\n            });\n        }\n\n        /**\n         * This function is called during the create cycle, when the record has\n         * already been created, but its values have not yet been assigned.\n         *\n         * It is usually preferable to override @see `_created`.\n         *\n         * The main use case is to prepare the record for the assignation of its\n         * values, for example if a computed field relies on the record to have\n         * some purely technical property correctly set.\n         *\n         * @abstract\n         * @private\n         */\n        _willCreate() {}\n\n        /**\n         * This function is called after the record has been created, more\n         * precisely at the end of the update cycle (which means all implicit\n         * changes such as computes have been applied too).\n         *\n         * The main use case is to register listeners on the record.\n         *\n         * @abstract\n         * @private\n         */\n        _created() {}\n\n        /**\n         * This function is called when the record is about to be deleted. The\n         * record still has all of its fields values accessible, but for all\n         * intents and purposes the record should already be considered\n         * deleted, which means update shouldn't be called inside this method.\n         *\n         * The main use case is to unregister listeners on the record.\n         *\n         * @abstract\n         * @private\n         */\n        _willDelete() {}\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        /**\n         * Returns all records of this model that match provided criteria.\n         *\n         * @static\n         * @param {function} [filterFunc]\n         * @returns {mail.model[]}\n         */\n        static all(filterFunc) {\n            return this.modelManager.all(this, filterFunc);\n        }\n\n        /**\n         * @deprecated use insert instead\n         */\n        static create(data) {\n            return this.modelManager.create(this, data);\n        }\n\n        /**\n         * Returns the current env.\n         *\n         * @returns {Object}\n         */\n        static get env() {\n            return this.modelManager.env;\n        }\n\n        /**\n         * Get the record that has provided criteria, if it exists.\n         *\n         * @static\n         * @param {function} findFunc\n         * @returns {mail.model|undefined}\n         */\n        static find(findFunc) {\n            return this.modelManager.find(this, findFunc);\n        }\n\n        /**\n         * Gets the unique record that matches the given identifying data, if it\n         * exists.\n         *\n         * @static\n         * @param {Object} data\n         * @returns {mail.model|undefined}\n         */\n        static findFromIdentifyingData(data) {\n            return this.modelManager.findFromIdentifyingData(this, data);\n        }\n\n        /**\n         * This method returns the record of this model that matches provided\n         * local id. Useful to convert a local id to a record. Note that even\n         * if there's a record in the system having provided local id, if the\n         * resulting record is not an instance of this model, this getter\n         * assumes the record does not exist.\n         *\n         * @static\n         * @param {string} localId\n         * @param {Object} param1\n         * @param {boolean} [param1.isCheckingInheritance]\n         * @returns {mail.model|undefined}\n         */\n        static get(localId, { isCheckingInheritance } = {}) {\n            return this.modelManager.get(this, localId, { isCheckingInheritance });\n        }\n\n        /**\n         * This method creates a record or updates one, depending on provided\n         * data. This is the only way to create a record: instantiation must\n         * never been done with keyword `new` outside of this function,\n         * otherwise the record will not be registered correctly.\n         *\n         * @static\n         * @param {Object|Object[]} [data={}]\n         *  If data is an iterable, multiple records will be created/updated.\n         * @returns {mail.model|mail.model[]} created or updated record(s).\n         */\n        static insert(data = {}) {\n            return this.modelManager.insert(this, data);\n        }\n\n        /**\n         * Returns the messaging singleton.\n         *\n         * @returns {mail.messaging}\n         */\n        static get messaging() {\n            return this.modelManager.messaging;\n        }\n\n        /**\n         * Returns all existing models.\n         *\n         * @returns {Object} keys are model name, values are model class.\n         */\n        static get models() {\n            return this.modelManager.models;\n        }\n\n        /**\n         * Returns a string representation of this model.\n         *\n         * @returns {string}\n         */\n        static toString() {\n            return `model(${this.modelName})`;\n        }\n\n        /**\n         * Perform an async function and wait until it is done. If the record\n         * is deleted, it raises a RecordDeletedError.\n         *\n         * @param {function} func an async function\n         * @throws {RecordDeletedError} in case the current record is not alive\n         *   at the end of async function call, whether it's resolved or\n         *   rejected.\n         * @throws {any} forwards any error in case the current record is still\n         *   alive at the end of rejected async function call.\n         * @returns {any} result of resolved async function.\n         */\n        async async(func) {\n            return new Promise((resolve, reject) => {\n                Promise.resolve(func()).then(result => {\n                    if (this.exists()) {\n                        resolve(result);\n                    } else {\n                        reject(new RecordDeletedError(this.localId));\n                    }\n                }).catch(error => {\n                    if (this.exists()) {\n                        reject(error);\n                    } else {\n                        reject(new RecordDeletedError(this.localId));\n                    }\n                });\n            });\n        }\n\n        /**\n         * This method deletes this record.\n         */\n        delete() {\n            this.modelManager.delete(this);\n        }\n\n        /**\n         * Returns the current env.\n         *\n         * @returns {Object}\n         */\n        get env() {\n            return this.modelManager.env;\n        }\n\n        /**\n         * Returns whether the current record exists.\n         *\n         * @returns {boolean}\n         */\n        exists() {\n            return this.modelManager.exists(this.constructor, this);\n        }\n\n        /**\n         * Returns the model manager.\n         *\n         * @returns {ModelManager}\n         */\n        get modelManager() {\n            return this.constructor.modelManager;\n        }\n\n        /**\n         * Returns all existing models.\n         *\n         * @returns {Object} keys are model name, values are model class.\n         */\n        get models() {\n            return this.modelManager.models;\n        }\n\n        /**\n         * Returns a string representation of this record.\n         */\n        toString() {\n            return `record(${this.localId})`;\n        }\n\n        /**\n         * Update this record with provided data.\n         *\n         * @param {Object} [data={}]\n         */\n        update(data = {}) {\n            this.modelManager.update(this, data);\n        }\n\n    }\n\n    /**\n     * Models should define fields in static prop or getter `fields`.\n     * It contains an object with name of field as key and value are objects\n     * that define the field. There are some helpers to ease the making of these\n     * objects, @see `mail/static/src/model/model_field.js`\n     *\n     * Note: fields of super-class are automatically inherited, therefore a\n     * sub-class should (re-)define fields without copying ancestors' fields.\n     */\n    Model.fields = {\n        /**\n         * States the messaging singleton. Automatically assigned by the model\n         * manager at creation.\n         */\n        messaging: many2one('mail.messaging', {\n            default: insertAndReplace(),\n            inverse: 'allRecords',\n            readonly: true,\n            required: true,\n        }),\n    };\n\n    /**\n     * Determines which fields are identifying fields for this model. Must be\n     * overwritten in actual models. This should be a list of either field name\n     * or sub-list of field name. Each top level element will be parsed as \"and\"\n     * and each element of the same sub-list will be parsed as \"or\". If there\n     * is no identifying fields, this model generates a singleton.\n     */\n    Model.identifyingFields = ['messaging'];\n\n    /**\n     * Name of the model. Important to refer to appropriate model class\n     * like in relational fields. Name of model classes must be unique.\n     */\n    Model.modelName = 'mail.model';\n\n    return Model;\n}\n\nregisterNewModel('mail.model', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr, many2one } from '@mail/model/model_field';\nimport { insert, unlinkAll } from '@mail/model/model_field_command';\n\nfunction factory(dependencies) {\n\n    class Notification extends dependencies['mail.model'] {\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        /**\n         * @static\n         * @param {Object} data\n         * @return {Object}\n         */\n        static convertData(data) {\n            const data2 = {};\n            if ('failure_type' in data) {\n                data2.failure_type = data.failure_type;\n            }\n            if ('id' in data) {\n                data2.id = data.id;\n            }\n            if ('notification_status' in data) {\n                data2.notification_status = data.notification_status;\n            }\n            if ('notification_type' in data) {\n                data2.notification_type = data.notification_type;\n            }\n            if ('res_partner_id' in data) {\n                if (!data.res_partner_id) {\n                    data2.partner = unlinkAll();\n                } else {\n                    data2.partner = insert({\n                        display_name: data.res_partner_id[1],\n                        id: data.res_partner_id[0],\n                    });\n                }\n            }\n            return data2;\n        }\n\n    }\n\n    Notification.fields = {\n        failure_type: attr(),\n        id: attr({\n            readonly: true,\n            required: true,\n        }),\n        message: many2one('mail.message', {\n            inverse: 'notifications',\n        }),\n        notification_status: attr(),\n        notification_type: attr(),\n        partner: many2one('mail.partner'),\n    };\n    Notification.identifyingFields = ['id'];\n    Notification.modelName = 'mail.notification';\n\n    return Notification;\n}\n\nregisterNewModel('mail.notification', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr, many2one, one2many } from '@mail/model/model_field';\nimport { clear, insert, unlink } from '@mail/model/model_field_command';\n\nfunction factory(dependencies) {\n\n    class NotificationGroup extends dependencies['mail.model'] {\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        /**\n         * Opens the view that allows to cancel all notifications of the group.\n         */\n        openCancelAction() {\n            if (this.notification_type !== 'email') {\n                return;\n            }\n            this.env.bus.trigger('do-action', {\n                action: 'mail.mail_resend_cancel_action',\n                options: {\n                    additional_context: {\n                        default_model: this.res_model,\n                        unread_counter: this.notifications.length,\n                    },\n                },\n            });\n        }\n\n        /**\n         * Opens the view that displays either the single record of the group or\n         * all the records in the group.\n         */\n        openDocuments() {\n            if (this.thread) {\n                this.thread.open();\n            } else {\n                this._openDocuments();\n            }\n        }\n\n        //----------------------------------------------------------------------\n        // Private\n        //----------------------------------------------------------------------\n\n        /**\n         * @private\n         * @returns {mail.thread|undefined}\n         */\n        _computeThread() {\n            const notificationsThreadIds = this.notifications\n                  .filter(notification => notification.message && notification.message.originThread)\n                  .map(notification => notification.message.originThread.id);\n            const threadIds = new Set(notificationsThreadIds);\n            if (threadIds.size !== 1) {\n                return unlink();\n            }\n            return insert({\n                id: notificationsThreadIds[0],\n                model: this.res_model,\n            });\n        }\n\n        /**\n         * Compute the most recent date inside the notification messages.\n         *\n         * @private\n         * @returns {moment|undefined}\n         */\n        _computeDate() {\n            const dates = this.notifications\n                  .filter(notification => notification.message && notification.message.date)\n                  .map(notification => notification.message.date);\n            if (dates.length === 0) {\n                return clear();\n            }\n            return moment.max(dates);\n        }\n\n        /**\n         * Compute the position of the group inside the notification list.\n         *\n         * @private\n         * @returns {number}\n         */\n        _computeSequence() {\n            return -Math.max(...this.notifications.map(notification => notification.message.id));\n        }\n\n        /**\n         * Opens the view that displays all the records of the group.\n         *\n         * @private\n         */\n        _openDocuments() {\n            if (this.notification_type !== 'email') {\n                return;\n            }\n            this.env.bus.trigger('do-action', {\n                action: {\n                    name: this.env._t(\"Mail Failures\"),\n                    type: 'ir.actions.act_window',\n                    view_mode: 'kanban,list,form',\n                    views: [[false, 'kanban'], [false, 'list'], [false, 'form']],\n                    target: 'current',\n                    res_model: this.res_model,\n                    domain: [['message_has_error', '=', true]],\n                },\n            });\n            if (this.messaging.device.isMobile) {\n                // messaging menu has a higher z-index than views so it must\n                // be closed to ensure the visibility of the view\n                this.messaging.messagingMenu.close();\n            }\n        }\n\n    }\n\n    NotificationGroup.fields = {\n        /**\n         * States the most recent date of all the notification message.\n         */\n        date: attr({\n            compute: '_computeDate',\n        }),\n        id: attr({\n            readonly: true,\n            required: true,\n        }),\n        notification_type: attr(),\n        notifications: one2many('mail.notification'),\n        res_model: attr(),\n        res_model_name: attr(),\n        /**\n         * States the position of the group inside the notification list.\n         */\n        sequence: attr({\n            compute: '_computeSequence',\n            default: 0,\n        }),\n        /**\n         * Related thread when the notification group concerns a single thread.\n         */\n        thread: many2one('mail.thread', {\n            compute: '_computeThread',\n        })\n    };\n    NotificationGroup.identifyingFields = ['id'];\n    NotificationGroup.modelName = 'mail.notification_group';\n\n    return NotificationGroup;\n}\n\nregisterNewModel('mail.notification_group', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { one2many } from '@mail/model/model_field';\nimport { link } from '@mail/model/model_field_command';\n\nfunction factory(dependencies) {\n\n    class NotificationGroupManager extends dependencies['mail.model'] {\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        computeGroups() {\n            // not supported for guests\n            if (this.messaging.isCurrentUserGuest) {\n                return;\n            }\n            for (const group of this.groups) {\n                group.delete();\n            }\n            const groups = [];\n            // TODO batch insert, better logic task-2258605\n            this.messaging.currentPartner.failureNotifications.forEach(notification => {\n                const thread = notification.message.originThread;\n                // Notifications are grouped by model and notification_type.\n                // Except for channel where they are also grouped by id because\n                // we want to open the actual channel in discuss or chat window\n                // and not its kanban/list/form view.\n                const channelId = thread.model === 'mail.channel' ? thread.id : null;\n                const id = `${thread.model}/${channelId}/${notification.notification_type}`;\n                const group = this.messaging.models['mail.notification_group'].insert({\n                    id,\n                    notification_type: notification.notification_type,\n                    res_model: thread.model,\n                    res_model_name: thread.model_name,\n                });\n                group.update({ notifications: link(notification) });\n                // avoid linking the same group twice when adding a notification\n                // to an existing group\n                if (!groups.includes(group)) {\n                    groups.push(group);\n                }\n            });\n            this.update({ groups: link(groups) });\n        }\n\n    }\n\n    NotificationGroupManager.fields = {\n        groups: one2many('mail.notification_group'),\n    };\n    NotificationGroupManager.identifyingFields = ['messaging'];\n    NotificationGroupManager.modelName = 'mail.notification_group_manager';\n\n    return NotificationGroupManager;\n}\n\nregisterNewModel('mail.notification_group_manager', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr, many2many, many2one, one2many, one2one } from '@mail/model/model_field';\nimport { insert, link, unlinkAll } from '@mail/model/model_field_command';\nimport { cleanSearchTerm } from '@mail/utils/utils';\n\nfunction factory(dependencies) {\n\n    class Partner extends dependencies['mail.model'] {\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        /**\n         * @static\n         * @private\n         * @param {Object} data\n         * @return {Object}\n         */\n        static convertData(data) {\n            const data2 = {};\n            if ('active' in data) {\n                data2.active = data.active;\n            }\n            if ('country' in data) {\n                if (!data.country) {\n                    data2.country = unlinkAll();\n                } else {\n                    data2.country = insert({\n                        id: data.country[0],\n                        name: data.country[1],\n                    });\n                }\n            }\n            if ('display_name' in data) {\n                data2.display_name = data.display_name;\n            }\n            if ('email' in data) {\n                data2.email = data.email;\n            }\n            if ('id' in data) {\n                data2.id = data.id;\n            }\n            if ('is_muted' in data) {\n                data2.isMuted = data.is_muted;\n            }\n            if ('im_status' in data) {\n                data2.im_status = data.im_status;\n            }\n            if ('name' in data) {\n                data2.name = data.name;\n            }\n\n            // relation\n            if ('user_id' in data) {\n                if (!data.user_id) {\n                    data2.user = unlinkAll();\n                } else {\n                    let user = {};\n                    if (Array.isArray(data.user_id)) {\n                        user = {\n                            id: data.user_id[0],\n                            display_name: data.user_id[1],\n                        };\n                    } else {\n                        user = {\n                            id: data.user_id,\n                        };\n                    }\n                    user.isInternalUser = data.is_internal_user;\n                    data2.user = insert(user);\n                }\n            }\n\n            return data2;\n        }\n\n        /**\n         * Fetches partners matching the given search term to extend the\n         * JS knowledge and to update the suggestion list accordingly.\n         *\n         * @static\n         * @param {string} searchTerm\n         * @param {Object} [options={}]\n         * @param {mail.thread} [options.thread] prioritize and/or restrict\n         *  result in the context of given thread\n         */\n        static async fetchSuggestions(searchTerm, { thread } = {}) {\n            const kwargs = { search: searchTerm };\n            const isNonPublicChannel = thread && thread.model === 'mail.channel' && thread.public !== 'public';\n            if (isNonPublicChannel) {\n                kwargs.channel_id = thread.id;\n            }\n            const suggestedPartners = await this.env.services.rpc(\n                {\n                    model: 'res.partner',\n                    method: 'get_mention_suggestions',\n                    kwargs,\n                },\n                { shadow: true },\n            );\n            const partners = this.messaging.models['mail.partner'].insert(suggestedPartners.map(data =>\n                this.messaging.models['mail.partner'].convertData(data)\n            ));\n            if (isNonPublicChannel) {\n                thread.update({ members: link(partners) });\n            }\n        }\n\n        /**\n         * Search for partners matching `keyword`.\n         *\n         * @static\n         * @param {Object} param0\n         * @param {function} param0.callback\n         * @param {string} param0.keyword\n         * @param {integer} [param0.limit=10]\n         */\n        static async imSearch({ callback, keyword, limit = 10 }) {\n            // prefetched partners\n            let partners = [];\n            const cleanedSearchTerm = cleanSearchTerm(keyword);\n            const currentPartner = this.messaging.currentPartner;\n            for (const partner of this.all(partner => partner.active)) {\n                if (partners.length < limit) {\n                    if (\n                        partner !== currentPartner &&\n                        partner.name &&\n                        partner.user &&\n                        cleanSearchTerm(partner.name).includes(cleanedSearchTerm)\n                    ) {\n                        partners.push(partner);\n                    }\n                }\n            }\n            if (!partners.length) {\n                const partnersData = await this.env.services.rpc(\n                    {\n                        model: 'res.partner',\n                        method: 'im_search',\n                        args: [keyword, limit]\n                    },\n                    { shadow: true }\n                );\n                const newPartners = this.insert(partnersData.map(\n                    partnerData => this.convertData(partnerData)\n                ));\n                partners.push(...newPartners);\n            }\n            callback(partners);\n        }\n\n        /**\n         * Returns partners that match the given search term.\n         *\n         * @static\n         * @param {string} searchTerm\n         * @param {Object} [options={}]\n         * @param {mail.thread} [options.thread] prioritize and/or restrict\n         *  result in the context of given thread\n         * @returns {[mail.partner[], mail.partner[]]}\n         */\n        static searchSuggestions(searchTerm, { thread } = {}) {\n            let partners;\n            const isNonPublicChannel = thread && thread.model === 'mail.channel' && thread.public !== 'public';\n            if (isNonPublicChannel) {\n                // Only return the channel members when in the context of a\n                // non-public channel. Indeed, the message with the mention\n                // would be notified to the mentioned partner, so this prevents\n                // from inadvertently leaking the private message to the\n                // mentioned partner.\n                partners = thread.members;\n            } else {\n                partners = this.messaging.models['mail.partner'].all();\n            }\n            const cleanedSearchTerm = cleanSearchTerm(searchTerm);\n            const mainSuggestionList = [];\n            const extraSuggestionList = [];\n            for (const partner of partners) {\n                if (\n                    (!partner.active && partner !== this.messaging.partnerRoot) ||\n                    partner.id <= 0 ||\n                    this.messaging.publicPartners.includes(partner)\n                ) {\n                    // ignore archived partners (except OdooBot), temporary\n                    // partners (livechat guests), public partners (technical)\n                    continue;\n                }\n                if (!partner.name) {\n                    continue;\n                }\n                if (\n                    (cleanSearchTerm(partner.name).includes(cleanedSearchTerm)) ||\n                    (partner.email && cleanSearchTerm(partner.email).includes(cleanedSearchTerm))\n                ) {\n                    if (partner.user) {\n                        mainSuggestionList.push(partner);\n                    } else {\n                        extraSuggestionList.push(partner);\n                    }\n                }\n            }\n            return [mainSuggestionList, extraSuggestionList];\n        }\n\n        /**\n         * @static\n         */\n        static async startLoopFetchImStatus() {\n            await this._fetchImStatus();\n            this._loopFetchImStatus();\n        }\n\n        /**\n         * Checks whether this partner has a related user and links them if\n         * applicable.\n         */\n        async checkIsUser() {\n            const userIds = await this.async(() => this.env.services.rpc({\n                model: 'res.users',\n                method: 'search',\n                args: [[['partner_id', '=', this.id]]],\n                kwargs: {\n                    context: { active_test: false },\n                },\n            }, { shadow: true }));\n            this.update({ hasCheckedUser: true });\n            if (userIds.length > 0) {\n                this.update({ user: insert({ id: userIds[0] }) });\n            }\n        }\n\n        /**\n         * Gets the chat between the user of this partner and the current user.\n         *\n         * If a chat is not appropriate, a notification is displayed instead.\n         *\n         * @returns {mail.thread|undefined}\n         */\n        async getChat() {\n            if (!this.user && !this.hasCheckedUser) {\n                await this.async(() => this.checkIsUser());\n            }\n            // prevent chatting with non-users\n            if (!this.user) {\n                this.env.services['notification'].notify({\n                    message: this.env._t(\"You can only chat with partners that have a dedicated user.\"),\n                    type: 'info',\n                });\n                return;\n            }\n            return this.user.getChat();\n        }\n\n        /**\n         * Returns the text that identifies this partner in a mention.\n         *\n         * @returns {string}\n         */\n        getMentionText() {\n            return this.name;\n        }\n\n        /**\n         * Returns a sort function to determine the order of display of partners\n         * in the suggestion list.\n         *\n         * @static\n         * @param {string} searchTerm\n         * @param {Object} [options={}]\n         * @param {mail.thread} [options.thread] prioritize result in the\n         *  context of given thread\n         * @returns {function}\n         */\n        static getSuggestionSortFunction(searchTerm, { thread } = {}) {\n            const cleanedSearchTerm = cleanSearchTerm(searchTerm);\n            return (a, b) => {\n                const isAInternalUser = a.user && a.user.isInternalUser;\n                const isBInternalUser = b.user && b.user.isInternalUser;\n                if (isAInternalUser && !isBInternalUser) {\n                    return -1;\n                }\n                if (!isAInternalUser && isBInternalUser) {\n                    return 1;\n                }\n                if (thread && thread.model === 'mail.channel') {\n                    const isAMember = thread.members.includes(a);\n                    const isBMember = thread.members.includes(b);\n                    if (isAMember && !isBMember) {\n                        return -1;\n                    }\n                    if (!isAMember && isBMember) {\n                        return 1;\n                    }\n                }\n                if (thread) {\n                    const isAFollower = thread.followersPartner.includes(a);\n                    const isBFollower = thread.followersPartner.includes(b);\n                    if (isAFollower && !isBFollower) {\n                        return -1;\n                    }\n                    if (!isAFollower && isBFollower) {\n                        return 1;\n                    }\n                }\n                const cleanedAName = cleanSearchTerm(a.name || '');\n                const cleanedBName = cleanSearchTerm(b.name || '');\n                if (cleanedAName.startsWith(cleanedSearchTerm) && !cleanedBName.startsWith(cleanedSearchTerm)) {\n                    return -1;\n                }\n                if (!cleanedAName.startsWith(cleanedSearchTerm) && cleanedBName.startsWith(cleanedSearchTerm)) {\n                    return 1;\n                }\n                if (cleanedAName < cleanedBName) {\n                    return -1;\n                }\n                if (cleanedAName > cleanedBName) {\n                    return 1;\n                }\n                const cleanedAEmail = cleanSearchTerm(a.email || '');\n                const cleanedBEmail = cleanSearchTerm(b.email || '');\n                if (cleanedAEmail.startsWith(cleanedSearchTerm) && !cleanedAEmail.startsWith(cleanedSearchTerm)) {\n                    return -1;\n                }\n                if (!cleanedBEmail.startsWith(cleanedSearchTerm) && cleanedBEmail.startsWith(cleanedSearchTerm)) {\n                    return 1;\n                }\n                if (cleanedAEmail < cleanedBEmail) {\n                    return -1;\n                }\n                if (cleanedAEmail > cleanedBEmail) {\n                    return 1;\n                }\n                return a.id - b.id;\n            };\n        }\n\n        /**\n         * Opens a chat between the user of this partner and the current user\n         * and returns it.\n         *\n         * If a chat is not appropriate, a notification is displayed instead.\n         *\n         * @param {Object} [options] forwarded to @see `mail.thread:open()`\n         * @returns {mail.thread|undefined}\n         */\n        async openChat(options) {\n            const chat = await this.async(() => this.getChat());\n            if (!chat) {\n                return;\n            }\n            await this.async(() => chat.open(options));\n            return chat;\n        }\n\n        /**\n         * Opens the most appropriate view that is a profile for this partner.\n         */\n        async openProfile() {\n            return this.messaging.openDocument({\n                id: this.id,\n                model: 'res.partner',\n            });\n        }\n\n        //----------------------------------------------------------------------\n        // Private\n        //----------------------------------------------------------------------\n\n        /**\n         * @private\n         * @returns {string}\n         */\n        _computeAvatarUrl() {\n            return `/web/image/res.partner/${this.id}/avatar_128`;\n        }\n\n        /**\n         * @static\n         * @private\n         */\n        static async _fetchImStatus() {\n            const partnerIds = [];\n            for (const partner of this.all()) {\n                if (partner.im_status !== 'im_partner' && partner.id > 0) {\n                    partnerIds.push(partner.id);\n                }\n            }\n            if (partnerIds.length === 0) {\n                return;\n            }\n            const dataList = await this.env.services.rpc({\n                route: '/longpolling/im_status',\n                params: {\n                    partner_ids: partnerIds,\n                },\n            }, { shadow: true });\n            this.insert(dataList);\n        }\n\n        /**\n         * @static\n         * @private\n         */\n        static _loopFetchImStatus() {\n            setTimeout(async () => {\n                await this._fetchImStatus();\n                this._loopFetchImStatus();\n            }, 50 * 1000);\n        }\n\n        /**\n         * @private\n         * @returns {string|undefined}\n         */\n        _computeDisplayName() {\n            return this.display_name || this.user && this.user.display_name;\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeIsOnline() {\n            return ['online', 'away'].includes(this.im_status);\n        }\n\n        /**\n         * @private\n         * @returns {string|undefined}\n         */\n        _computeNameOrDisplayName() {\n            return this.name || this.display_name;\n        }\n\n    }\n\n    Partner.fields = {\n        active: attr({\n            default: true,\n        }),\n        avatarUrl: attr({\n            compute: '_computeAvatarUrl',\n        }),\n        country: many2one('mail.country'),\n        /**\n         * Deprecated.\n         * States the `display_name` of this partner, as returned by the server.\n         * The value of this field is unreliable (notably its value depends on\n         * context on which it was received) therefore it should only be used as\n         * a default if the actual `name` is missing (@see `nameOrDisplayName`).\n         * And if a specific name format is required, it should be computed from\n         * relevant fields instead.\n         */\n        display_name: attr({\n            compute: '_computeDisplayName',\n            default: \"\",\n        }),\n        email: attr(),\n        failureNotifications: one2many('mail.notification', {\n            related: 'messagesAsAuthor.failureNotifications',\n        }),\n        /**\n         * Whether an attempt was already made to fetch the user corresponding\n         * to this partner. This prevents doing the same RPC multiple times.\n         */\n        hasCheckedUser: attr({\n            default: false,\n        }),\n        id: attr({\n            readonly: true,\n            required: true,\n        }),\n        im_status: attr(),\n        /**\n         * States whether this partner is online.\n         */\n        isOnline: attr({\n            compute: '_computeIsOnline',\n        }),\n        isMuted: attr({\n            default: false,\n        }),\n        memberThreads: many2many('mail.thread', {\n            inverse: 'members',\n        }),\n        messagesAsAuthor: one2many('mail.message', {\n            inverse: 'author',\n        }),\n        model: attr({\n            default: 'res.partner',\n        }),\n        name: attr(),\n        nameOrDisplayName: attr({\n            compute: '_computeNameOrDisplayName',\n        }),\n        partnerSeenInfos: one2many('mail.thread_partner_seen_info', {\n            inverse: 'partner',\n            isCausal: true,\n        }),\n        rtcSessions: one2many('mail.rtc_session', {\n            inverse: 'partner',\n        }),\n        user: one2one('mail.user', {\n            inverse: 'partner',\n        }),\n        volumeSetting: one2one('mail.volume_setting', {\n            inverse: 'partner',\n        }),\n    };\n    Partner.identifyingFields = ['id'];\n    Partner.modelName = 'mail.partner';\n\n    return Partner;\n}\n\nregisterNewModel('mail.partner', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr, one2one } from '@mail/model/model_field';\nimport { clear } from '@mail/model/model_field_command';\n\nfunction factory(dependencies) {\n\n    class PopoverView extends dependencies['mail.model'] {\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        _created() {\n            this._onClickCaptureGlobal = this._onClickCaptureGlobal.bind(this);\n            document.addEventListener('click', this._onClickCaptureGlobal, true);\n        }\n\n        _willDelete() {\n            document.removeEventListener('click', this._onClickCaptureGlobal, true);\n        }\n\n        //----------------------------------------------------------------------\n        // Private\n        //----------------------------------------------------------------------\n\n        /**\n         * @private\n         * @returns {owl.Ref}\n         */\n        _computeAnchorRef() {\n            if (this.threadViewTopbarOwner) {\n                return this.threadViewTopbarOwner.inviteButtonRef;\n            }\n            return clear();\n        }\n\n        /**\n         * @private\n         * @returns {string}\n         */\n        _computePosition() {\n            if (this.threadViewTopbarOwner) {\n                return 'bottom';\n            }\n            return clear();\n        }\n\n        /**\n         * Closes the popover when clicking outside, if appropriate.\n         *\n         * @private\n         * @param {MouseEvent} ev\n         */\n        _onClickCaptureGlobal(ev) {\n            if (!this.component || !this.component.el) {\n                return;\n            }\n            if (this.anchorRef && this.anchorRef.el && this.anchorRef.el.contains(ev.target)) {\n                return;\n            }\n            if (this.component.el.contains(ev.target)) {\n                return;\n            }\n            this.delete();\n        }\n\n    }\n\n    PopoverView.fields = {\n        /**\n         * HTML element that is used as anchor position for this popover view.\n         */\n        anchorRef: attr({\n            compute: '_computeAnchorRef',\n            required: true,\n        }),\n        /**\n         * The record that represents the content inside the popover view.\n         */\n        channelInvitationForm: one2one('mail.channel_invitation_form', {\n            inverse: 'popoverView',\n            isCausal: true,\n            readonly: true,\n            required: true,\n        }),\n        /**\n         * States the OWL component of this popover view.\n         */\n        component: attr(),\n        /**\n         * Position of the popover view relative to its anchor point.\n         * Valid values: 'top', 'right', 'bottom', 'left'\n         */\n        position: attr({\n            compute: '_computePosition',\n            default: 'top',\n        }),\n        /**\n         * If set, this popover view is owned by a thread view topbar record.\n         */\n        threadViewTopbarOwner: one2one('mail.thread_view_topbar', {\n            inverse: 'invitePopoverView',\n            readonly: true,\n        }),\n    };\n\n    PopoverView.identifyingFields = ['threadViewTopbarOwner', 'channelInvitationForm'];\n    PopoverView.modelName = 'mail.popover_view';\n\n    return PopoverView;\n}\n\nregisterNewModel('mail.popover_view', factory);\n", "/** @odoo-module **/\n\nimport { browser } from \"@web/core/browser/browser\";\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr, one2many, one2one } from '@mail/model/model_field';\nimport { clear, insert, unlink } from '@mail/model/model_field_command';\n\nimport { monitorAudio } from '@mail/utils/media_monitoring/media_monitoring';\n\n/**\n * The order in which transceivers are added, relevant for RTCPeerConnection.getTransceivers which returns\n * transceivers in insertion order as per webRTC specifications.\n */\nconst TRANSCEIVER_ORDER = ['audio', 'video'];\n\nfunction factory(dependencies) {\n\n    const getRTCPeerNotificationNextTemporaryId = (function () {\n        let tmpId = 0;\n        return () => {\n            tmpId += 1;\n            return tmpId;\n        };\n    })();\n\n    class Rtc extends dependencies['mail.model'] {\n\n        /**\n         * @override\n         */\n        _created() {\n            super._created();\n            // technical fields that are not exposed\n            // Especially important for _peerConnections, as garbage collection of peerConnections is important for\n            // peerConnection.close().\n            /**\n             * Object { token: dataChannel<RTCDataChannel> }\n             * Contains the RTCDataChannels with the other rtc sessions.\n             */\n            this._dataChannels = {};\n            /**\n             * callback to properly end the audio monitoring.\n             * If set it indicates that we are currently monitoring the local\n             * audioTrack for the voice activation feature.\n             */\n            this._disconnectAudioMonitor = undefined;\n            /**\n             * Object { token: timeoutId<Number> }\n             * Contains the timeoutIds of the reconnection attempts.\n             */\n            this._fallBackTimeouts = {};\n            /**\n             * Set of peerTokens, used to track which calls are outgoing,\n             * which is used when attempting to recover a failed peer connection by\n             * inverting the call direction.\n             */\n            this._outGoingCallTokens = new Set();\n             /**\n             * Object { token: peerConnection<RTCPeerConnection> }\n             * Contains the RTCPeerConnection established with the other rtc sessions.\n             * Exposing this field and keeping references to closed peer connections may lead\n             * to difficulties reconnecting to the same peer.\n             */\n            this._peerConnections = {};\n            /**\n             *  timeoutId for the push to talk release delay.\n             */\n            this._pushToTalkTimeoutId = undefined;\n\n            this._onKeyDown = this._onKeyDown.bind(this);\n            this._onKeyUp = this._onKeyUp.bind(this);\n            browser.addEventListener('keydown', this._onKeyDown);\n            browser.addEventListener('keyup', this._onKeyUp);\n            // Disconnects the RTC session if the page is closed or reloaded.\n            this._onBeforeUnload = this._onBeforeUnload.bind(this);\n            browser.addEventListener('beforeunload', this._onBeforeUnload);\n            /**\n             * Call all sessions for which no peerConnection is established at\n             * a regular interval to try to recover any connection that failed\n             * to start.\n             *\n             * This is distinct from this._recoverConnection which tries to restores\n             * connection that were established but failed or timed out.\n             */\n            this._intervalId = browser.setInterval(async () => {\n                if (!this.currentRtcSession || !this.channel) {\n                    return;\n                }\n                await this._pingServer();\n                if (!this.currentRtcSession || !this.channel) {\n                    return;\n                }\n                this._callSessions();\n            }, 30000); // 30 seconds\n        }\n\n        /**\n         * @override\n         */\n        async _willDelete() {\n            browser.removeEventListener('beforeunload', this._onBeforeUnload);\n            browser.removeEventListener('keydown', this._onKeyDown);\n            browser.removeEventListener('keyup', this._onKeyUp);\n            browser.clearInterval(this._intervalId);\n            return super._willDelete(...arguments);\n        }\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        /**\n         * Removes and disconnects all the peerConnections that are not current members of the call.\n         *\n         * @param {mail.rtc_session[]} currentSessions list of sessions of this call.\n         */\n        async filterCallees(currentSessions) {\n            const currentSessionsTokens = new Set(currentSessions.map(session => session.peerToken));\n            for (const token of Object.keys(this._peerConnections)) {\n                if (!currentSessionsTokens.has(token)) {\n                    this._addLogEntry(token, 'session removed from the server');\n                    this._removePeer(token);\n                }\n            }\n            if (this.channel && this.currentRtcSession && !currentSessionsTokens.has(this.currentRtcSession.peerToken)) {\n                // if the current RTC session is not in the channel sessions, this call is no longer valid.\n                this.channel.endCall();\n            }\n        }\n\n        /**\n         * @param {array} [allowedTokens] tokens of the peerConnections for which\n         * the incoming video traffic is allowed. If undefined, all traffic is\n         * allowed.\n         */\n        filterIncomingVideoTraffic(allowedTokens) {\n            const tokenSet = new Set(allowedTokens);\n            for (const [token, peerConnection] of Object.entries(this._peerConnections)) {\n                const fullDirection = this.videoTrack ? 'sendrecv' : 'recvonly';\n                const limitedDirection = this.videoTrack ? 'sendonly' : 'inactive';\n                const transceiver = this._getTransceiver(peerConnection, 'video');\n                if (!transceiver) {\n                    continue;\n                }\n                if (!tokenSet.size || tokenSet.has(token)) {\n                    transceiver.direction = fullDirection;\n                } else {\n                    transceiver.direction = limitedDirection;\n                }\n            }\n        }\n\n        /**\n         * @param {number|String} sender id of the session that sent the notification\n         * @param {String} content JSON\n         */\n        async handleNotification(sender, content) {\n            const { event, channelId, payload } = JSON.parse(content);\n            const rtcSession = this.messaging.models['mail.rtc_session'].findFromIdentifyingData({ id: sender });\n            if (!rtcSession || rtcSession.channel !== this.channel) {\n                // does handle notifications targeting a different session\n                return;\n            }\n            if (!this.isClientRtcCompatible) {\n                return;\n            }\n            if (!this._peerConnections[sender] && (!channelId || !this.channel || channelId !== this.channel.id)) {\n                return;\n            }\n            switch (event) {\n                case \"offer\":\n                    this._addLogEntry(sender, `received notification: ${event}`, { step: 'received offer' });\n                    await this._handleRtcTransactionOffer(rtcSession.peerToken, payload);\n                    break;\n                case \"answer\":\n                    this._addLogEntry(sender, `received notification: ${event}`, { step: 'received answer' });\n                    await this._handleRtcTransactionAnswer(rtcSession.peerToken, payload);\n                    break;\n                case \"ice-candidate\":\n                    await this._handleRtcTransactionICECandidate(rtcSession.peerToken, payload);\n                    break;\n                case \"disconnect\":\n                    this._addLogEntry(sender, `received notification: ${event}`, { step: ' peer cleanly disconnected ' });\n                    this._removePeer(rtcSession.peerToken);\n                    break;\n                case 'trackChange':\n                    this._handleTrackChange(rtcSession, payload);\n                    break;\n            }\n        }\n\n        /**\n         * @param {Object} param0\n         * @param {string} param0.currentSessionId the Id of the 'mail.rtc_session'\n                  of the current partner for the current call\n         * @param {Array<Object>} [param0.iceServers]\n         * @param {boolean} [param0.startWithAudio]\n         * @param {boolean} [param0.startWithVideo]\n         * @param {'user-video'|'display'} [param0.videoType] 'user-video' or 'display'\n         */\n        async initSession({ currentSessionId, iceServers, startWithAudio, startWithVideo, videoType = 'user-video' }) {\n            // Initializing a new session implies closing the current session.\n            this.reset();\n            this.update({\n                currentRtcSession: insert({ id: currentSessionId }),\n                iceServers: iceServers || this.iceServers,\n            });\n\n            await this._callSessions();\n            await this.updateLocalAudioTrack(startWithAudio);\n            if (startWithVideo) {\n                await this._toggleVideoBroadcast({ type: videoType });\n            }\n        }\n\n        /**\n         * Resets the state of the model and cleanly ends all connections and\n         * streams.\n         *\n         * @private\n         */\n        reset() {\n            if (this._peerConnections) {\n                const peerTokens = Object.keys(this._peerConnections);\n                for (const token of peerTokens) {\n                    this._removePeer(token);\n                }\n            }\n\n            this._disconnectAudioMonitor && this._disconnectAudioMonitor();\n            this.audioTrack && this.audioTrack.stop();\n            this.videoTrack && this.videoTrack.stop();\n\n            this._disconnectAudioMonitor = undefined;\n            this._dataChannels = {};\n            this._fallBackTimeouts = {};\n            this._outGoingCallTokens = new Set();\n            this._peerConnections = {};\n\n            this.update({\n                currentRtcSession: clear(),\n                logs: clear(),\n                sendUserVideo: clear(),\n                sendDisplay: clear(),\n                videoTrack: clear(),\n                audioTrack: clear(),\n            });\n        }\n\n        /**\n         * Mutes and unmutes the microphone, will not unmute if deaf.\n         *\n         * @param {Object} [param0]\n         * @param {string} [param0.requestAudioDevice] true if requesting the audio input device\n         *                 from the user\n         */\n        async toggleMicrophone({ requestAudioDevice = true } = {}) {\n            const shouldMute = this.currentRtcSession.isDeaf || !this.currentRtcSession.isMuted;\n            this.currentRtcSession.updateAndBroadcast({ isMuted: shouldMute || !this.audioTrack });\n            if (!this.audioTrack && !shouldMute && requestAudioDevice) {\n                // if we don't have an audioTrack, we try to request it again\n                await this.updateLocalAudioTrack(true);\n            }\n            await this.async(() => this._updateLocalAudioTrackEnabledState());\n        }\n\n        /**\n         * toggles screen broadcasting to peers.\n         */\n        async toggleScreenShare() {\n            this._toggleVideoBroadcast({ type: 'display' });\n        }\n\n        /**\n         * Toggles user video (eg: webcam) broadcasting to peers.\n         */\n        async toggleUserVideo() {\n            this._toggleVideoBroadcast({ type: 'user-video' });\n        }\n\n        /**\n         * @param {Boolean} audio\n         */\n        async updateLocalAudioTrack(audio) {\n            if (this.audioTrack) {\n                this.audioTrack.stop();\n            }\n            this.update({ audioTrack: clear() });\n            if (!this.channel) {\n                return;\n            }\n            if (audio) {\n                let audioTrack;\n                try {\n                    const audioStream = await browser.navigator.mediaDevices.getUserMedia({ audio: this.messaging.userSetting.getAudioConstraints() });\n                    audioTrack = audioStream.getAudioTracks()[0];\n                } catch (e) {\n                    this.env.services.notification.notify({\n                        message: _.str.sprintf(\n                            this.env._t(`\"%s\" requires microphone access`),\n                            window.location.host,\n                        ),\n                        type: 'warning',\n                    });\n                    if (this.currentRtcSession) {\n                        this.currentRtcSession.updateAndBroadcast({ isMuted: true });\n                    }\n                    return;\n                }\n                if (!this.currentRtcSession) {\n                    // The getUserMedia promise could resolve when the call is ended\n                    // in which case the track is no longer relevant.\n                    audioTrack.stop();\n                    return;\n                }\n                audioTrack.addEventListener('ended', async () => {\n                    // this mostly happens when the user retracts microphone permission.\n                    await this.async(() => this.updateLocalAudioTrack(false));\n                    this.currentRtcSession.updateAndBroadcast({ isMuted: true });\n                    await this.async(() => this._updateLocalAudioTrackEnabledState());\n                });\n                this.currentRtcSession.updateAndBroadcast({ isMuted: false });\n                audioTrack.enabled = !this.currentRtcSession.isMuted && this.currentRtcSession.isTalking;\n                this.update({ audioTrack });\n                await this.async(() => this.updateVoiceActivation());\n                for (const [token, peerConnection] of Object.entries(this._peerConnections)) {\n                    await this._updateRemoteTrack(peerConnection, 'audio', { token });\n                }\n            }\n        }\n\n        /**\n         * @param {MediaTrackConstraints Object} constraints\n         */\n        updateVideoConfig(constraints) {\n            const videoConfig = Object.assign(this.videoConfig, constraints);\n            this.update({ videoConfig });\n            this.videoTrack && this.videoTrack.applyConstraints(this.videoConfig);\n        }\n\n        /**\n         * Updates the way broadcast of the local audio track is handled,\n         * attaches an audio monitor for voice activation if necessary.\n         */\n        async updateVoiceActivation() {\n            this._disconnectAudioMonitor && this._disconnectAudioMonitor();\n            if (this.messaging.userSetting.usePushToTalk || !this.channel || !this.audioTrack) {\n                this.currentRtcSession.update({ isTalking: false });\n                await this._updateLocalAudioTrackEnabledState();\n                return;\n            }\n            try {\n                this._disconnectAudioMonitor = await monitorAudio(this.audioTrack, {\n                    onThreshold: async (isAboveThreshold) => {\n                        this._setSoundBroadcast(isAboveThreshold);\n                    },\n                    volumeThreshold: this.messaging.userSetting.voiceActivationThreshold,\n                });\n            } catch (e) {\n                /**\n                 * The browser is probably missing audioContext,\n                 * in that case, voice activation is not enabled\n                 * and the microphone is always 'on'.\n                 */\n                this.env.services.notification.notify({\n                    message: this.env._t(\"Your browser does not support voice activation\"),\n                    type: 'warning',\n                });\n                this.currentRtcSession.update({ isTalking: true });\n            }\n            await this._updateLocalAudioTrackEnabledState();\n        }\n\n        //----------------------------------------------------------------------\n        // Private\n        //----------------------------------------------------------------------\n\n        /**\n         * @private\n         * @param {String} token\n         * @param {String} entry\n         * @param {Object} [param2]\n         * @param {Error} [param2.error]\n         * @param {String} [param2.step] current step of the flow\n         * @param {String} [param2.state] current state of the connection\n         */\n        _addLogEntry(token, entry, { error, step, state, ...data } = {}) {\n            if (!this.modelManager.isDebug) {\n                return;\n            }\n            if (!(token in this.logs)) {\n                this.logs[token] = { step: '', state: '', logs: [] };\n            }\n            const trace = window.Error().stack || '';\n            this.logs[token].logs.push({\n                event: `${window.moment().format('h:mm:ss')}: ${entry}`,\n                error: error && {\n                    name: error.name,\n                    message: error.message,\n                    stack: error.stack && error.stack.split('\\n'),\n                },\n                trace: trace.split('\\n'),\n                ...data,\n            });\n            if (step) {\n                this.logs[token].step = step;\n            }\n            if (state) {\n                this.logs[token].state = state;\n            }\n        }\n\n        /**\n         * @private\n         * @param {String} token\n         */\n        async _callPeer(token) {\n            const peerConnection = this._createPeerConnection(token);\n            for (const trackKind of TRANSCEIVER_ORDER) {\n                await this._updateRemoteTrack(peerConnection, trackKind, { initTransceiver: true, token });\n            }\n            this._outGoingCallTokens.add(token);\n        }\n\n        /**\n         * Call all the sessions that do not have an already initialized peerConnection.\n         *\n         * @private\n         */\n        _callSessions() {\n            if (!this.channel.rtcSessions) {\n                return;\n            }\n            for (const session of this.channel.rtcSessions) {\n                if (session.peerToken in this._peerConnections) {\n                    continue;\n                }\n                if (session === this.currentRtcSession) {\n                    continue;\n                }\n                session.update({\n                    connectionState: 'Not connected: sending initial RTC offer',\n                });\n                this._addLogEntry(session.peerToken, 'init call', { step: 'init call' });\n                this._callPeer(session.peerToken);\n            }\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeIsClientRtcCompatible() {\n            return window.RTCPeerConnection && window.MediaStream;\n        }\n\n        /**\n         * Creates and setup a RTCPeerConnection.\n         *\n         * @private\n         * @param {String} token\n         */\n        _createPeerConnection(token) {\n            const peerConnection = new window.RTCPeerConnection({ iceServers: this.iceServers });\n            this._addLogEntry(token, `RTCPeerConnection created`, { step: 'peer connection created' });\n            peerConnection.onicecandidate = async (event) => {\n                if (!event.candidate) {\n                    return;\n                }\n                await this._notifyPeers([token], {\n                    event: 'ice-candidate',\n                    payload: { candidate: event.candidate },\n                });\n            };\n            peerConnection.oniceconnectionstatechange = (event) => {\n                this._onICEConnectionStateChange(peerConnection.iceConnectionState, token);\n            };\n            peerConnection.onconnectionstatechange = (event) => {\n                this._onConnectionStateChange(peerConnection.connectionState, token);\n            };\n            peerConnection.onicecandidateerror = async (error) => {\n                this._addLogEntry(token, `ice candidate error`);\n                this._recoverConnection(token, { delay: this.recoveryTimeout, reason: 'ice candidate error' });\n            };\n            peerConnection.onnegotiationneeded = async (event) => {\n                const offer = await peerConnection.createOffer();\n                try {\n                    await peerConnection.setLocalDescription(offer);\n                } catch (e) {\n                    // Possibly already have a remote offer here: cannot set local description\n                    this._addLogEntry(token, `couldn't setLocalDescription`, { error: e });\n                    return;\n                }\n                this._addLogEntry(token, `sending notification: offer`, { step: 'sending offer' });\n                await this._notifyPeers([token], {\n                    event: 'offer',\n                    payload: { sdp: peerConnection.localDescription },\n                });\n            };\n            peerConnection.ontrack = ({ transceiver, track }) => {\n                this._addLogEntry(token, `received ${track.kind} track`);\n                this._updateExternalSessionTrack(track, token);\n            };\n            const dataChannel = peerConnection.createDataChannel(\"notifications\", { negotiated: true, id: 1 });\n            dataChannel.onmessage = (event) => {\n                this.handleNotification(token, event.data);\n            };\n            dataChannel.onopen = async () => {\n                /**\n                 * FIXME? it appears that the track yielded by the peerConnection's 'ontrack' event is always enabled,\n                 * even when it is disabled on the sender-side.\n                 */\n                try {\n                    await this._notifyPeers([token], {\n                        event: 'trackChange',\n                        type: 'peerToPeer',\n                        payload: {\n                            type: 'audio',\n                            state: { isTalking: this.currentRtcSession.isTalking, isMuted: this.currentRtcSession.isMuted },\n                        },\n                    });\n                } catch (e) {\n                    if (!(e instanceof DOMException) || e.name !== \"OperationError\") {\n                        throw e;\n                    }\n                    this._addLogEntry(token, `failed to send on datachannel; dataChannelInfo: ${this._serializeRTCDataChannel(dataChannel)}`, { error: e });\n                }\n            };\n            this._peerConnections[token] = peerConnection;\n            this._dataChannels[token] = dataChannel;\n            return peerConnection;\n        }\n\n        /**\n         * @private\n         * @param {RTCPeerConnection} peerConnection\n         * @param {String} trackKind\n         * @returns {RTCRtpTransceiver} the transceiver used for this trackKind.\n         */\n        _getTransceiver(peerConnection, trackKind) {\n            const transceivers = peerConnection.getTransceivers();\n            return transceivers[TRANSCEIVER_ORDER.indexOf(trackKind)];\n        }\n\n        /**\n         * @private\n         * @param {String} fromToken\n         * @param {Object} param1\n         * @param {Object} param1.sdp Session Description Protocol\n         */\n        async _handleRtcTransactionAnswer(fromToken, { sdp }) {\n            const peerConnection = this._peerConnections[fromToken];\n            if (!peerConnection || this.invalidIceConnectionStates.has(peerConnection.iceConnectionState) || peerConnection.signalingState === 'stable') {\n                return;\n            }\n            if (peerConnection.signalingState === 'have-remote-offer') {\n                // we already have an offer\n                return;\n            }\n            const rtcSessionDescription = new window.RTCSessionDescription(sdp);\n            try {\n                await peerConnection.setRemoteDescription(rtcSessionDescription);\n            } catch (e) {\n                this._addLogEntry(fromToken, 'answer handling: Failed at setting remoteDescription', { error: e });\n                // ignored the transaction may have been resolved by another concurrent offer.\n            }\n        }\n\n        /**\n         * @private\n         * @param {String} fromToken\n         * @param {Object} param1\n         * @param {Object} param1.candidate RTCIceCandidateInit\n         */\n        async _handleRtcTransactionICECandidate(fromToken, { candidate }) {\n            const peerConnection = this._peerConnections[fromToken];\n            if (!peerConnection || this.invalidIceConnectionStates.has(peerConnection.iceConnectionState)) {\n                return;\n            }\n            const rtcIceCandidate = new window.RTCIceCandidate(candidate);\n            try {\n                await peerConnection.addIceCandidate(rtcIceCandidate);\n            } catch (error) {\n                this._addLogEntry(fromToken, 'ICE candidate handling: failed at adding the candidate to the connection', { error });\n                this._recoverConnection(fromToken, { delay: this.recoveryTimeout, reason: 'failed at adding ice candidate' });\n            }\n        }\n\n        /**\n         * @private\n         * @param {String} fromToken\n         * @param {Object} param1\n         * @param {Object} param1.sdp Session Description Protocol\n         */\n        async _handleRtcTransactionOffer(fromToken, { sdp }) {\n            const peerConnection = this._peerConnections[fromToken] || this._createPeerConnection(fromToken);\n\n            if (!peerConnection || this.invalidIceConnectionStates.has(peerConnection.iceConnectionState)) {\n                return;\n            }\n            if (peerConnection.signalingState === 'have-remote-offer') {\n                // we already have an offer\n                return;\n            }\n            const rtcSessionDescription = new window.RTCSessionDescription(sdp);\n            try {\n                await peerConnection.setRemoteDescription(rtcSessionDescription);\n            } catch (e) {\n                this._addLogEntry(fromToken, 'offer handling: failed at setting remoteDescription', { error: e });\n                return;\n            }\n            await this._updateRemoteTrack(peerConnection, 'audio', { token: fromToken });\n            await this._updateRemoteTrack(peerConnection, 'video', { token: fromToken });\n\n            let answer;\n            try {\n                answer = await peerConnection.createAnswer();\n            } catch (e) {\n                this._addLogEntry(fromToken, 'offer handling: failed at creating answer', { error: e });\n                return;\n            }\n            try {\n                await peerConnection.setLocalDescription(answer);\n            } catch (e) {\n                this._addLogEntry(fromToken, 'offer handling: failed at setting localDescription', { error: e });\n                return;\n            }\n\n            this._addLogEntry(fromToken, `sending notification: answer`, { step: 'sending answer' });\n            await this._notifyPeers([fromToken], {\n                event: 'answer',\n                payload: { sdp: peerConnection.localDescription },\n            });\n            this._recoverConnection(fromToken, { delay: this.recoveryTimeout, reason: 'standard answer timeout' });\n        }\n\n        /**\n         * @private\n         * @param {mail.rtc_session} rtcSession\n         * @param {Object} param1\n         * @param {String} param1.type 'audio' or 'video'\n         * @param {Object} param1.state\n         */\n        _handleTrackChange(rtcSession, { type, state }) {\n            const { isMuted, isTalking, isSendingVideo, isDeaf } = state;\n            if (type === 'audio') {\n                if (!rtcSession.audioStream) {\n                    return;\n                }\n                rtcSession.update({\n                    isMuted,\n                    isTalking,\n                    isDeaf,\n                });\n            }\n            if (type === 'video' && isSendingVideo === false) {\n                /**\n                 * Since WebRTC \"unified plan\", the local track is tied to the\n                 * remote transceiver.sender and not the remote track. Therefore\n                 * when the remote track is 'ended' the local track is not 'ended'\n                 * but only 'muted'. This is why we do not stop the local track\n                 * until the peer is completely removed.\n                 */\n                rtcSession.update({ videoStream: clear() });\n            }\n        }\n\n        /**\n         * @private\n         * @param {String[]} targetToken\n         * @param {Object} param1\n         * @param {String} param1.event\n         * @param {Object} [param1.payload]\n         * @param {String} [param1.type] 'server' or 'peerToPeer',\n         *                 'peerToPeer' requires an active RTCPeerConnection\n         */\n        async _notifyPeers(targetTokens, { event, payload, type = 'server' }) {\n            if (!targetTokens.length || !this.channel || !this.currentRtcSession) {\n                return;\n            }\n            if (type === 'server') {\n                this.update({\n                    peerNotificationsToSend: insert({\n                        channelId: this.channel.id,\n                        event,\n                        id: getRTCPeerNotificationNextTemporaryId(),\n                        payload,\n                        senderId: this.currentRtcSession.id,\n                        targetTokens\n                    }),\n                });\n                await this._sendPeerNotifications();\n            }\n\n            if (type === 'peerToPeer') {\n                for (const token of targetTokens) {\n                    const dataChannel = this._dataChannels[token];\n                    if (!dataChannel || dataChannel.readyState !== 'open') {\n                        continue;\n                    }\n                    dataChannel.send(JSON.stringify({\n                        event,\n                        channelId: this.channel.id,\n                        payload,\n                    }));\n                }\n            }\n        }\n\n        /**\n         * Pings the server to ensure this session is kept alive.\n         */\n        async _pingServer() {\n            const channel = this.channel;\n            const { rtcSessions } = await this.env.services.rpc({\n                route: '/mail/channel/ping',\n                params: {\n                    'channel_id': channel.id,\n                    'check_rtc_session_ids': channel.rtcSessions.map(rtcSession => rtcSession.id),\n                    'rtc_session_id': this.currentRtcSession.id,\n                },\n            }, { shadow: true });\n            if (channel.exists()) {\n                channel.updateRtcSessions(rtcSessions);\n            }\n        }\n\n        /**\n         * Attempts a connection recovery by closing and restarting the call\n         * from the receiving end.\n         *\n         * @private\n         * @param {String} token\n         * @param {Object} [param1]\n         * @param {number} [param1.delay] in ms\n         * @param {string} [param1.reason]\n         */\n        _recoverConnection(token, { delay = 0, reason = '' } = {}) {\n            if (this._fallBackTimeouts[token]) {\n                return;\n            }\n            this._fallBackTimeouts[token] = browser.setTimeout(async () => {\n                delete this._fallBackTimeouts[token];\n                const peerConnection = this._peerConnections[token];\n                if (!peerConnection || !this.channel) {\n                    return;\n                }\n                if (this._outGoingCallTokens.has(token)) {\n                    return;\n                }\n                if (peerConnection.iceConnectionState === 'connected') {\n                    return;\n                }\n                if (this.modelManager.isDebug) {\n                    let stats;\n                    try {\n                        const peerConnectionStats = await peerConnection.getStats();\n                        stats = peerConnectionStats && [...peerConnectionStats.values()];\n                    } catch (_e) {\n                        // ignore\n                    }\n                    this._addLogEntry(\n                        token,\n                        `calling back to recover \"${peerConnection.iceConnectionState}\" connection`,\n                        { reason, stats }\n                    );\n                }\n                await this._notifyPeers([token], {\n                    event: 'disconnect',\n                });\n                this._removePeer(token);\n                this._callPeer(token);\n            }, delay);\n        }\n\n        /**\n         * Cleans up a peer by closing all its associated content and the connection.\n         *\n         * @private\n         * @param {String} token\n         */\n        _removePeer(token) {\n            const rtcSession = this.messaging.models['mail.rtc_session'].findFromIdentifyingData({ id: token });\n            if (rtcSession) {\n                rtcSession.reset();\n            }\n            const dataChannel = this._dataChannels[token];\n            if (dataChannel) {\n                dataChannel.close();\n            }\n            delete this._dataChannels[token];\n            const peerConnection = this._peerConnections[token];\n            if (peerConnection) {\n                this._removeRemoteTracks(peerConnection);\n                peerConnection.close();\n            }\n            delete this._peerConnections[token];\n            browser.clearTimeout(this._fallBackTimeouts[token]);\n            delete this._fallBackTimeouts[token];\n\n            this._outGoingCallTokens.delete(token);\n            this._addLogEntry(token, 'peer removed', { step: 'peer removed' });\n        }\n\n        /**\n         * Terminates the Transceivers of the peer connection.\n         *\n         * @private\n         * @param {RTCPeerConnection} peerConnection\n         */\n        _removeRemoteTracks(peerConnection) {\n            const RTCRtpSenders = peerConnection.getSenders();\n            for (const sender of RTCRtpSenders) {\n                try {\n                    peerConnection.removeTrack(sender);\n                } catch (e) {\n                    // ignore error\n                }\n            }\n            for (const transceiver of peerConnection.getTransceivers()) {\n                try {\n                    transceiver.stop();\n                } catch (e) {\n                    // transceiver may already be stopped by the remote.\n                }\n            }\n        }\n\n        /**\n         * Sends this peer notifications to send as soon as the last pending\n         * sending finishes.\n         *\n         * @private\n         */\n        async _sendPeerNotifications() {\n            if (this.isNotifyPeersRPCInProgress) {\n                return;\n            }\n            this.update({ isNotifyPeersRPCInProgress: true });\n            await new Promise(resolve => setTimeout(resolve, this.peerNotificationWaitDelay));\n            const peerNotifications = this.peerNotificationsToSend;\n            try {\n                await this.env.services.rpc({\n                    route: '/mail/rtc/session/notify_call_members',\n                    params: {\n                        'peer_notifications': peerNotifications.map(peerNotification =>\n                            [\n                                peerNotification.senderId,\n                                peerNotification.targetTokens,\n                                JSON.stringify({\n                                    event: peerNotification.event,\n                                    channelId: peerNotification.channelId,\n                                    payload: peerNotification.payload,\n                                }),\n                            ],\n                        ),\n                    },\n                }, { shadow: true });\n                if (!this.exists()) {\n                    return;\n                }\n                this.update({ peerNotificationsToSend: unlink(peerNotifications) });\n            } finally {\n                if (this.exists()) {\n                    this.update({ isNotifyPeersRPCInProgress: false });\n                    if (this.peerNotificationsToSend.length > 0) {\n                        this._sendPeerNotifications();\n                    }\n                }\n            }\n        }\n\n        /**\n         * Returns a string representation of a data channel for logging and\n         * debugging purposes.\n         *\n         * @private\n         * @param {RTCDataChannel} dataChannel\n         * @returns string\n         */\n        _serializeRTCDataChannel(dataChannel) {\n            const toLog = [\n                \"binaryType\",\n                \"bufferedAmount\",\n                \"bufferedAmountLowThreshold\",\n                \"id\",\n                \"label\",\n                \"maxPacketLifeTime\",\n                \"maxRetransmits\",\n                \"negotiated\",\n                \"ordered\",\n                \"protocol\",\n                \"readyState\",\n            ];\n            return JSON.stringify(Object.fromEntries(toLog.map(p => [p, dataChannel[p]])));\n        }\n\n        /**\n         * Updates the \"isTalking\" state of the current user and sets the\n         * enabled state of its audio track accordingly.\n         *\n         * @private\n         * @param {boolean} isTalking\n         */\n        async _setSoundBroadcast(isTalking) {\n            if (!this.currentRtcSession) {\n                return;\n            }\n            if (isTalking === this.currentRtcSession.isTalking) {\n                return;\n            }\n            this.currentRtcSession.update({ isTalking });\n            if (!this.currentRtcSession.isMuted) {\n                await this._updateLocalAudioTrackEnabledState();\n            }\n        }\n\n        /**\n         * @private\n         * @param {Object} trackOptions\n         */\n        async _toggleVideoBroadcast(trackOptions) {\n            if (!this.channel) {\n                return;\n            }\n            await this._toggleLocalVideoTrack(trackOptions);\n            for (const [token, peerConnection] of Object.entries(this._peerConnections)) {\n                await this._updateRemoteTrack(peerConnection, 'video', { token });\n            }\n            if (!this.currentRtcSession) {\n                return;\n            }\n            this.currentRtcSession.updateAndBroadcast({\n                isScreenSharingOn: !!this.sendDisplay,\n                isCameraOn: !!this.sendUserVideo,\n            });\n        }\n\n        /**\n         * @private\n         * @param {Object} param0\n         * @param {String} param0.type 'user-video' (eg: webcam) or 'display' (eg: screen sharing)\n         * @param {boolean} [param0.force]\n         */\n        async _toggleLocalVideoTrack({ type, force }) {\n            if (type === 'user-video') {\n                const sendUserVideo = force !== undefined ? force : !this.sendUserVideo;\n                await this._updateLocalVideoTrack(type, sendUserVideo);\n            }\n            if (type === 'display') {\n                const sendDisplay = force !== undefined ? force : !this.sendDisplay;\n                await this._updateLocalVideoTrack(type, sendDisplay);\n            }\n            if (!this.currentRtcSession) {\n                return;\n            }\n            if (!this.videoTrack) {\n                this.currentRtcSession.removeVideo();\n            } else {\n                this._updateExternalSessionTrack(this.videoTrack, this.currentRtcSession.peerToken);\n            }\n        }\n\n        /**\n         * Updates the mail.rtc_session associated to the token with a new track.\n         *\n         * @private\n         * @param {Track} [track]\n         * @param {String} token the token of video\n         */\n        _updateExternalSessionTrack(track, token) {\n            const rtcSession = this.messaging.models['mail.rtc_session'].findFromIdentifyingData({ id: token });\n            if (!rtcSession) {\n                return;\n            }\n            const stream = new window.MediaStream();\n            stream.addTrack(track);\n\n            if (track.kind === 'audio') {\n                rtcSession.setAudio({\n                    audioStream: stream,\n                    isMuted: false,\n                    isTalking: false,\n                });\n            }\n            if (track.kind === 'video') {\n                rtcSession.update({\n                    videoStream: stream,\n                });\n            }\n        }\n\n        /**\n         * Sets the enabled property of the local audio track based on the\n         * current session state. And notifies peers of the new audio state.\n         *\n         * @private\n         */\n        async _updateLocalAudioTrackEnabledState() {\n            if (!this.audioTrack) {\n                return;\n            }\n            this.audioTrack.enabled = !this.currentRtcSession.isMuted && this.currentRtcSession.isTalking;\n            await this._notifyPeers(Object.keys(this._peerConnections), {\n                event: 'trackChange',\n                type: 'peerToPeer',\n                payload: {\n                    type: 'audio',\n                    state: {\n                        isTalking: this.currentRtcSession.isTalking && !this.currentRtcSession.isMuted,\n                        isMuted: this.currentRtcSession.isMuted,\n                        isDeaf: this.currentRtcSession.isDeaf,\n                    },\n                },\n            });\n        }\n\n        /**\n         * @private\n         * @param {String} type 'user-video' or 'display'\n         * @param {boolean} activateVideo true if we want to activate the video\n         */\n        async _updateLocalVideoTrack(type, activateVideo) {\n            if (this.videoTrack) {\n                this.videoTrack.stop();\n            }\n            this.update({\n                sendDisplay: false,\n                sendUserVideo: false,\n                videoTrack: clear(),\n            });\n            let videoStream;\n            if (!activateVideo) {\n                if (type === 'display') {\n                    this.messaging.soundEffects.screenSharing.play();\n                }\n                return;\n            }\n            try {\n                if (type === 'user-video') {\n                    videoStream = await browser.navigator.mediaDevices.getUserMedia({ video: this.videoConfig });\n                }\n                if (type === 'display') {\n                    videoStream = await browser.navigator.mediaDevices.getDisplayMedia({ video: this.videoConfig });\n                    this.messaging.soundEffects.screenSharing.play();\n                }\n            } catch (e) {\n                this.env.services.notification.notify({\n                    message: _.str.sprintf(\n                        this.env._t(`\"%s\" requires \"%s\" access`),\n                        window.location.host,\n                        type === 'user-video' ? 'camera' : 'display',\n                    ),\n                    type: 'warning',\n                });\n                return;\n            }\n            const videoTrack = videoStream ? videoStream.getVideoTracks()[0] : undefined;\n            if (videoTrack) {\n                videoTrack.addEventListener('ended', async () => {\n                    await this.async(() =>\n                        this._toggleVideoBroadcast({ force: false, type })\n                    );\n                });\n            }\n            this.update({\n                videoTrack,\n                sendUserVideo: type === 'user-video' && !!videoTrack,\n                sendDisplay: type === 'display' && !!videoTrack,\n            });\n        }\n\n        /**\n         * Updates the track that is broadcasted to the RTCPeerConnection.\n         * This will start new transaction by triggering a negotiationneeded event\n         * on the peerConnection given as parameter.\n         *\n         * negotiationneeded -> offer -> answer -> ...\n         *\n         * @private\n         * @param {RTCPeerConnection} peerConnection\n         * @param {String} trackKind\n         * @param {Object} [param2]\n         * @param {boolean} [param2.initTransceiver]\n         * @param {String} [param2.token]\n         */\n        async _updateRemoteTrack(peerConnection, trackKind, { initTransceiver, token } = {}) {\n            this._addLogEntry(token, `updating ${trackKind} transceiver`);\n            const track = trackKind === 'audio' ? this.audioTrack : this.videoTrack;\n            const fullDirection = track ? 'sendrecv' : 'recvonly';\n            const limitedDirection = track ? 'sendonly' : 'inactive';\n            let transceiverDirection = fullDirection;\n            if (trackKind === 'video') {\n                const focusedToken = this.messaging.focusedRtcSession && this.messaging.focusedRtcSession.peerToken;\n                transceiverDirection = !focusedToken || focusedToken === token ? fullDirection : limitedDirection;\n            }\n            let transceiver;\n            if (initTransceiver) {\n                transceiver = peerConnection.addTransceiver(trackKind);\n            } else {\n                transceiver = this._getTransceiver(peerConnection, trackKind);\n            }\n            if (track) {\n                try {\n                    await transceiver.sender.replaceTrack(track);\n                    transceiver.direction = transceiverDirection;\n                } catch (e) {\n                    // ignored, the track is probably already on the peerConnection.\n                }\n                return;\n            }\n            try {\n                await transceiver.sender.replaceTrack(null);\n                transceiver.direction = transceiverDirection;\n            } catch (e) {\n                // ignored, the transceiver is probably already removed\n            }\n            if (trackKind === 'video') {\n                this._notifyPeers([token], {\n                    event: 'trackChange',\n                    type: 'peerToPeer',\n                    payload: {\n                        type: 'video',\n                        state: { isSendingVideo: false },\n                    },\n                });\n            }\n        }\n\n        //----------------------------------------------------------------------\n        // Handlers\n        //----------------------------------------------------------------------\n\n        /**\n         * @private\n         * @param {Event} ev\n         */\n        async _onBeforeUnload(ev) {\n            if (this.channel) {\n                await this.channel.performRpcLeaveCall();\n            }\n        }\n\n        /**\n         * @private\n         * @param {String} state the new state of the connection\n         * @param {String} token of the peer whose the connection changed\n         */\n        async _onConnectionStateChange(state, token) {\n            this._addLogEntry(token, `connection state changed: ${state}`);\n            switch (state) {\n                case \"closed\":\n                    this._removePeer(token);\n                    break;\n                case \"failed\":\n                case \"disconnected\":\n                    await this._recoverConnection(token, { delay: this.recoveryDelay, reason: `connection ${state}` });\n                    break;\n            }\n        }\n\n        /**\n         * @private\n         * @param {String} connectionState the new state of the connection\n         * @param {String} token of the peer whose the connection changed\n         */\n        async _onICEConnectionStateChange(connectionState, token) {\n            this._addLogEntry(token, `ICE connection state changed: ${connectionState}`, { state: connectionState });\n            const rtcSession = this.messaging.models['mail.rtc_session'].findFromIdentifyingData({ id: token });\n            if (!rtcSession) {\n                return;\n            }\n            rtcSession.update({\n                connectionState,\n            });\n            switch (connectionState) {\n                case \"closed\":\n                    this._removePeer(token);\n                    break;\n                case \"failed\":\n                case \"disconnected\":\n                    await this._recoverConnection(token, { delay: this.recoveryDelay, reason: `ice connection ${connectionState}` });\n                    break;\n            }\n        }\n\n        /**\n         * @private\n         * @param {keyboardEvent} ev\n         */\n        _onKeyDown(ev) {\n            if (!this.channel) {\n                return;\n            }\n            if (this.messaging.userSetting.rtcConfigurationMenu.isRegisteringKey) {\n                return;\n            }\n            if (!this.messaging.userSetting.usePushToTalk || !this.messaging.userSetting.isPushToTalkKey(ev)) {\n                return;\n            }\n            if (this._pushToTalkTimeoutId) {\n                browser.clearTimeout(this._pushToTalkTimeoutId);\n            }\n            if (!this.currentRtcSession.isTalking && !this.currentRtcSession.isMuted) {\n                this.messaging.soundEffects.pushToTalk.play({ volume: 0.3 });\n            }\n            this._setSoundBroadcast(true);\n        }\n\n        /**\n         * @private\n         * @param {keyboardEvent} ev\n         */\n        _onKeyUp(ev) {\n            if (!this.channel) {\n                return;\n            }\n            if (!this.messaging.userSetting.usePushToTalk || !this.messaging.userSetting.isPushToTalkKey(ev)) {\n                return;\n            }\n            if (!this.currentRtcSession.isTalking) {\n                return;\n            }\n            if (!this.currentRtcSession.isMuted) {\n                this.messaging.soundEffects.pushToTalk.play({ volume: 0.3 });\n            }\n            this._pushToTalkTimeoutId = browser.setTimeout(\n                () => {\n                    this._setSoundBroadcast(false);\n                },\n                this.messaging.userSetting.voiceActiveDuration || 0,\n            );\n        }\n\n    }\n    Rtc.fields = {\n        /**\n         * audio MediaStreamTrack of the current user\n         */\n        audioTrack: attr(),\n        /**\n         * The channel that is hosting the current RTC call.\n         */\n        channel: one2one('mail.thread', {\n            inverse: 'rtc',\n        }),\n        /**\n         * String, peerToken of the current session used to identify him during the peer-to-peer transactions.\n         */\n        currentRtcSession: one2one('mail.rtc_session', {\n            inverse: 'rtc',\n        }),\n        /**\n         * ICE servers used by RTCPeerConnection to retrieve the public IP address (STUN)\n         * or to relay packets when necessary (TURN).\n         */\n        iceServers: attr({\n            default: [\n                {\n                    urls: [\n                        'stun:stun1.l.google.com:19302',\n                        'stun:stun2.l.google.com:19302',\n                    ],\n                },\n            ],\n        }),\n        /**\n         * list of connection states considered invalid, which means that\n         * no action should be taken on such peerConnection.\n         */\n        invalidIceConnectionStates: attr({\n            default: new Set(['disconnected', 'failed', 'closed']),\n            readonly: true,\n        }),\n        /**\n         * true if the browser supports webRTC\n         */\n        isClientRtcCompatible: attr({\n            compute: '_computeIsClientRtcCompatible',\n            default: true,\n        }),\n        isNotifyPeersRPCInProgress: attr({\n            default: false,\n        }),\n        /**\n         * Contains the logs of the current session by token.\n         * { token: { name<String>, logs<Array> } }\n         */\n        logs: attr({\n            default: {},\n        }),\n        peerNotificationsToSend: one2many('mail.rtc_peer_notification', {\n            isCausal: true,\n        }),\n        /**\n         * Determines the delay to wait (in ms) before sending peer\n         * notifications to the server. Sending many notifications at once\n         * significantly increase the connection time because the server can't\n         * handle too many requests at once, but handles much faster one bigger\n         * request, even with a delay. The delay should however not be too high.\n         */\n        peerNotificationWaitDelay: attr({\n            default: 50,\n        }),\n        /**\n         * How long to wait before considering a connection as needing recovery in ms.\n         */\n        recoveryTimeout: attr({\n            default: 15000,\n        }),\n        /**\n         * How long to wait before recovering a connection that has failed in ms.\n         */\n        recoveryDelay: attr({\n            default: 3000,\n        }),\n        /**\n         * True if we want to enable the video track of the current partner.\n         */\n        sendUserVideo: attr({\n            default: false,\n        }),\n        /**\n         * True if we want to enable the video track of the current partner.\n         */\n        sendDisplay: attr({\n            default: false,\n        }),\n        /**\n         * MediaTrackConstraints for the user video track.\n         * Some browsers do not support all constraints, for example firefox\n         * does not support aspectRatio. Those constraints will be ignored\n         * unless specified as mandatory (see doc ConstrainDOMString).\n         */\n        videoConfig: attr({\n            default: {\n                aspectRatio: 16 / 9,\n                frameRate: {\n                    max: 30,\n                },\n            },\n        }),\n        /**\n         * video MediaStreamTrack of the current user\n         */\n        videoTrack: attr(),\n    };\n    Rtc.identifyingFields = ['messaging'];\n    Rtc.modelName = 'mail.rtc';\n\n    return Rtc;\n}\n\nregisterNewModel('mail.rtc', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr, many2one, one2one } from '@mail/model/model_field';\nimport { isEventHandled, markEventHandled } from '@mail/utils/utils';\n\nfunction factory(dependencies) {\n\n    class RtcCallParticipantCard extends dependencies['mail.model'] {\n\n        /**\n         * @override\n         */\n        _created() {\n            super._created();\n            this.onChangeVolume = this.onChangeVolume.bind(this);\n            this.onClick = this.onClick.bind(this);\n            this.onClickVolumeAnchor = this.onClickVolumeAnchor.bind(this);\n        }\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        /**\n         * @param {Event} ev\n         */\n        onChangeVolume(ev) {\n            this.rtcSession && this.rtcSession.setVolume(parseFloat(ev.target.value));\n        }\n\n        /**\n         * @param {MouseEvent} ev\n         */\n        async onClick(ev) {\n            if (isEventHandled(ev, 'CallParticipantCard.clickVolumeAnchor')) {\n                return;\n            }\n            if (!this.invitedPartner && !this.invitedGuest) {\n                if (!this.isMinimized) {\n                    this.messaging.toggleFocusedRtcSession(this.rtcSession.id);\n                }\n                return;\n            }\n            const channel = this.channel;\n            const channelData = await this.env.services.rpc(({\n                route: '/mail/rtc/channel/cancel_call_invitation',\n                params: {\n                    channel_id: this.channel.id,\n                    partner_ids: this.invitedPartner && [this.invitedPartner.id],\n                    guest_ids: this.invitedGuest && [this.invitedGuest.id],\n                },\n            }));\n            if (!channel.exists()) {\n                return;\n            }\n            channel.update(channelData);\n        }\n\n        /**\n         * Handled by the popover component.\n         *\n         * @param {MouseEvent} ev\n         */\n        async onClickVolumeAnchor(ev) {\n            markEventHandled(ev, 'CallParticipantCard.clickVolumeAnchor');\n        }\n\n        //----------------------------------------------------------------------\n        // Private\n        //----------------------------------------------------------------------\n\n        /**\n         * @private\n         * @returns {string}\n         */\n        _computeAvatarUrl() {\n            if (!this.channel) {\n                return;\n            }\n            if (this.rtcSession) {\n                return this.rtcSession.avatarUrl;\n            }\n            if (this.invitedPartner) {\n                return `/mail/channel/${this.channel.id}/partner/${this.invitedPartner.id}/avatar_128`;\n            }\n            if (this.invitedGuest) {\n                return `/mail/channel/${this.channel.id}/guest/${this.invitedGuest.id}/avatar_128?unique=${this.invitedGuest.name}`;\n            }\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeIsMinimized() {\n            const callViewer = this.rtcCallViewerOfMainCard || this.rtcCallViewerOfTile;\n            return Boolean(callViewer && callViewer.isMinimized);\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeIsInvitation() {\n            return Boolean(this.invitedPartner || this.invitedGuest);\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeIsTalking() {\n            return Boolean(this.rtcSession && this.rtcSession.isTalking && !this.rtcSession.isMuted);\n        }\n\n        /**\n         * @private\n         * @returns {string}\n         */\n        _computeName() {\n            if (this.rtcSession) {\n                return this.rtcSession.name;\n            }\n            if (this.invitedPartner) {\n                return this.invitedPartner.name;\n            }\n            if (this.invitedGuest) {\n                return this.invitedGuest.name;\n            }\n        }\n\n    }\n\n    RtcCallParticipantCard.fields = {\n        /**\n         * The relative url of the image that represents the card.\n         */\n        avatarUrl: attr({\n            compute: '_computeAvatarUrl',\n        }),\n        /**\n         * The channel of the call.\n         */\n        channel: many2one('mail.thread', {\n            required: true,\n        }),\n        /**\n         * If set, this card represents an invitation of this guest to this call.\n         */\n        invitedGuest: many2one('mail.guest'),\n        /**\n         * If set, this card represents an invitation of this partner to this call.\n         */\n        invitedPartner: many2one('mail.partner'),\n        /**\n         * States whether this card is representing a person with a pending\n         * invitation.\n         */\n        isInvitation: attr({\n            compute: '_computeIsInvitation'\n        }),\n        /**\n         * Determines if this card has to be displayed in a minimized form.\n         */\n        isMinimized: attr({\n            default: false,\n            compute: '_computeIsMinimized',\n        }),\n        /**\n         * Determines if the rtcSession is in a valid \"talking\" state.\n         */\n        isTalking: attr({\n            default: false,\n            compute: '_computeIsTalking',\n        }),\n        /**\n         * The name of the rtcSession or the invited partner.\n         */\n        name: attr({\n            default: 'Anonymous',\n            compute: '_computeName',\n        }),\n        /**\n         * Unique id for this session provided when instantiated.\n         */\n        relationalId: attr({\n            readonly: true,\n            required: true,\n        }),\n        /**\n         * The callViewer for which this card is the spotlight.\n         */\n        rtcCallViewerOfMainCard: one2one('mail.rtc_call_viewer', {\n            inverse: 'mainParticipantCard',\n        }),\n        /**\n         * The callViewer for which this card is one of the tiles.\n         */\n        rtcCallViewerOfTile: many2one('mail.rtc_call_viewer', {\n            inverse: 'tileParticipantCards',\n        }),\n        /**\n         * If set, this card represents a rtcSession.\n         */\n        rtcSession: many2one('mail.rtc_session'),\n    };\n    RtcCallParticipantCard.identifyingFields = ['relationalId'];\n    RtcCallParticipantCard.modelName = 'mail.rtc_call_participant_card';\n\n    return RtcCallParticipantCard;\n}\n\nregisterNewModel('mail.rtc_call_participant_card', factory);\n", "/** @odoo-module **/\n\nimport { browser } from \"@web/core/browser/browser\";\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr, one2one, one2many } from '@mail/model/model_field';\nimport { OnChange } from '@mail/model/model_onchange';\nimport { clear, insert, insertAndReplace, link, unlink } from '@mail/model/model_field_command';\n\nimport { isEventHandled, markEventHandled } from '@mail/utils/utils';\n\nfunction factory(dependencies) {\n\n    class RtcCallViewer extends dependencies['mail.model'] {\n\n        /**\n         * @override\n         */\n        _created() {\n            super._created();\n            this._timeoutId = undefined;\n            this.onClick = this.onClick.bind(this);\n            this.onLayoutSettingsDialogClosed = this.onLayoutSettingsDialogClosed.bind(this);\n            this.onMouseMove = this.onMouseMove.bind(this);\n            this.onMouseMoveOverlay = this.onMouseMoveOverlay.bind(this);\n            this.onRtcSettingsDialogClosed = this.onRtcSettingsDialogClosed.bind(this);\n            this._onFullScreenChange = this._onFullScreenChange.bind(this);\n            browser.addEventListener('fullscreenchange', this._onFullScreenChange);\n        }\n\n        /**\n         * @override\n         */\n        _willDelete() {\n            browser.clearTimeout(this._timeoutId);\n            browser.removeEventListener('fullscreenchange', this._onFullScreenChange);\n            return super._willDelete(...arguments);\n        }\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        /**\n         * @param {MouseEvent} ev\n         */\n        onClick(ev) {\n            this._showOverlay();\n        }\n\n        /**\n         * @param {MouseEvent} ev\n         */\n        onLayoutSettingsDialogClosed(ev) {\n            this.toggleLayoutMenu();\n        }\n\n        /**\n         * @param {MouseEvent} ev\n         */\n        onMouseMove(ev) {\n            if (!this.exists()) {\n                return;\n            }\n            if (isEventHandled(ev, 'RtcCallViewer.MouseMoveOverlay')) {\n                return;\n            }\n            this._showOverlay();\n        }\n\n        /**\n         * @param {MouseEvent} ev\n         */\n        onMouseMoveOverlay(ev) {\n            if (!this.exists()) {\n                return;\n            }\n            markEventHandled(ev, 'RtcCallViewer.MouseMoveOverlay');\n            this.update({\n                showOverlay: true,\n            });\n            browser.clearTimeout(this._timeoutId);\n        }\n\n        /**\n         * @param {MouseEvent} ev\n         */\n        onRtcSettingsDialogClosed(ev) {\n            this.messaging.userSetting.rtcConfigurationMenu.toggle();\n        }\n\n        async activateFullScreen() {\n            const el = document.body;\n            try {\n                if (el.requestFullscreen) {\n                    await el.requestFullscreen();\n                } else if (el.mozRequestFullScreen) {\n                    await el.mozRequestFullScreen();\n                } else if (el.webkitRequestFullscreen) {\n                    await el.webkitRequestFullscreen();\n                }\n                if (this.exists()) {\n                    this.update({ isFullScreen: true });\n                }\n            } catch (e) {\n                if (this.exists()) {\n                    this.update({ isFullScreen: false });\n                }\n                this.env.services.notification.notify({\n                    message: this.env._t(\"The FullScreen mode was denied by the browser\"),\n                    type: 'warning',\n                });\n            }\n        }\n\n        async deactivateFullScreen() {\n            const fullScreenElement = document.webkitFullscreenElement || document.fullscreenElement;\n            if (fullScreenElement) {\n                if (document.exitFullscreen) {\n                    await document.exitFullscreen();\n                } else if (document.mozCancelFullScreen) {\n                    await document.mozCancelFullScreen();\n                } else if (document.webkitCancelFullScreen) {\n                    await document.webkitCancelFullScreen();\n                }\n            }\n            if (this.exists()) {\n                this.update({ isFullScreen: false });\n            }\n        }\n\n        toggleLayoutMenu() {\n            if (!this.rtcLayoutMenu) {\n                this.update({ rtcLayoutMenu: insertAndReplace() });\n                return;\n            }\n            this.update({ rtcLayoutMenu: unlink() });\n        }\n\n        //----------------------------------------------------------------------\n        // Private\n        //----------------------------------------------------------------------\n\n        /**\n         * @private\n         */\n        _computeAspectRatio() {\n            const rtcAspectRatio = this.messaging.rtc.videoConfig && this.messaging.rtc.videoConfig.aspectRatio;\n            const aspectRatio = rtcAspectRatio || 16 / 9;\n            // if we are in minimized mode (round avatar frames), we treat the cards like squares.\n            return this.isMinimized ? 1 : aspectRatio;\n        }\n\n        /**\n         * @private\n         */\n        _computeIsControllerFloating() {\n            return (\n                this.isFullScreen ||\n                this.layout !== \"tiled\" && !this.threadView.compact\n            );\n        }\n\n        /**\n         * @private\n         */\n        _computeIsMinimized() {\n            if (!this.threadView) {\n                return true;\n            }\n            if (this.isFullScreen || this.threadView.compact) {\n                return false;\n            }\n            return !this.threadView.thread.rtc || this.threadView.thread.videoCount === 0;\n        }\n\n        /**\n         * @private\n         */\n        _computeLayout() {\n            if (!this.threadView) {\n                return 'tiled';\n            }\n            if (this.isMinimized) {\n                return 'tiled';\n            }\n            if (!this.threadView.thread.rtc) {\n                return 'tiled';\n            }\n            if (!this.mainParticipantCard) {\n                return 'tiled';\n            }\n            if (\n                this.threadView.thread.rtcSessions.length +\n                this.threadView.thread.invitedPartners.length +\n                this.threadView.thread.invitedGuests.length < 2\n            ) {\n                return \"tiled\";\n            }\n            if (this.threadView.compact && this.messaging.userSetting.rtcLayout === 'sidebar') {\n                return 'spotlight';\n            }\n            return this.messaging.userSetting.rtcLayout;\n        }\n\n        /**\n         * @private\n         * @returns {string}\n         */\n         _computeLayoutSettingsTitle() {\n            return this.env._t(\"Change Layout\");\n        }\n\n        /**\n         * @private\n         */\n        _computeMainParticipantCard() {\n            if (!this.messaging || !this.threadView) {\n                return unlink();\n            }\n            if (this.messaging.focusedRtcSession && this.messaging.focusedRtcSession.channel === this.threadView.thread) {\n                return insert({\n                    relationalId: `rtc_session_${this.messaging.focusedRtcSession.localId}_${this.threadView.thread.localId}`,\n                    rtcSession: link(this.messaging.focusedRtcSession),\n                    channel: link(this.threadView.thread),\n                });\n            }\n            return unlink();\n        }\n\n        /**\n         * @private\n         * @returns {string}\n         */\n        _computeSettingsTitle() {\n            return this.env._t(\"Settings\");\n        }\n\n        /**\n         * @private\n         */\n        _computeTileParticipantCards() {\n            if (!this.threadView) {\n                return clear();\n            }\n            const tileCards = [];\n            const sessionPartners = new Set();\n            const sessionGuests = new Set();\n            for (const rtcSession of this.threadView.thread.rtcSessions) {\n                rtcSession.partner && sessionPartners.add(rtcSession.partner.id);\n                rtcSession.guest && sessionPartners.add(rtcSession.guest.id);\n                tileCards.push({\n                    relationalId: `rtc_session_${rtcSession.localId}_${this.threadView.thread.localId}`,\n                    rtcSession: link(rtcSession),\n                    channel: link(this.threadView.thread),\n                });\n            }\n            for (const partner of this.threadView.thread.invitedPartners) {\n                if (sessionPartners.has(partner.id)) {\n                    continue;\n                }\n                tileCards.push({\n                    relationalId: `invited_partner_${partner.localId}_${this.threadView.thread.localId}`,\n                    invitedPartner: link(partner),\n                    channel: link(this.threadView.thread),\n                });\n            }\n            for (const guest of this.threadView.thread.invitedGuests) {\n                if (sessionGuests.has(guest.id)) {\n                    continue;\n                }\n                tileCards.push({\n                    relationalId: `invited_guest_${guest.localId}_${this.threadView.thread.localId}`,\n                    invitedGuest: link(guest),\n                    channel: link(this.threadView.thread),\n                });\n            }\n            return insertAndReplace(tileCards);\n        }\n\n        /**\n         * @private\n         */\n        _debounce(f, { delay = 0 } = {}) {\n            browser.clearTimeout(this._timeoutId);\n            this._timeoutId = browser.setTimeout(() => {\n                if (!this.exists()) {\n                    return;\n                }\n                f();\n            }, delay);\n        }\n\n        /**\n         * @private\n         */\n        _onChangeRtcChannel() {\n            this.deactivateFullScreen();\n            this.update({ filterVideoGrid: false });\n        }\n\n        /**\n         * @private\n         */\n        _onChangeVideoCount() {\n            if (this.threadView.thread.videoCount === 0) {\n                this.update({ filterVideoGrid: false });\n            }\n        }\n\n        /**\n         * Shows the overlay (buttons) for a set a mount of time.\n         *\n         * @private\n         */\n        _showOverlay() {\n            this.update({\n                showOverlay: true,\n            });\n            this._debounce(() => {\n                if (!this.exists()) {\n                    return;\n                }\n                this.update({ showOverlay: false });\n            }, { delay: 3000 });\n        }\n\n        //----------------------------------------------------------------------\n        // Handlers\n        //----------------------------------------------------------------------\n\n        /**\n         * @private\n         */\n        _onFullScreenChange() {\n            const fullScreenElement = document.webkitFullscreenElement || document.fullscreenElement;\n            if (fullScreenElement) {\n                this.update({ isFullScreen: true });\n                return;\n            }\n            this.update({ isFullScreen: false });\n        }\n\n    }\n\n    RtcCallViewer.fields = {\n        /**\n         * The aspect ratio of the tiles.\n         */\n        aspectRatio: attr({\n            default: 16 / 9,\n            compute: '_computeAspectRatio',\n        }),\n        /**\n         * Determines whether we only display the videos or all the participants\n         */\n        filterVideoGrid: attr({\n            default: false,\n        }),\n        /**\n         * Determines if the controller is an overlay or a bottom bar.\n         */\n        isControllerFloating: attr({\n            default: false,\n            compute: '_computeIsControllerFloating',\n        }),\n        /**\n         * Determines if the viewer should be displayed fullScreen.\n         */\n        isFullScreen: attr({\n            default: false,\n        }),\n        /**\n         * Determines if the tiles are in a minimized format:\n         * small circles instead of cards, smaller display area.\n         */\n        isMinimized: attr({\n            default: false,\n            compute: '_computeIsMinimized',\n        }),\n        /**\n         * Determines the layout use for the tiling of the participant cards.\n         */\n        layout: attr({\n            default: 'tiled',\n            compute: '_computeLayout',\n        }),\n        /**\n         * Text content that is displayed on title of the layout settings dialog.\n         */\n        layoutSettingsTitle: attr({\n            compute: '_computeLayoutSettingsTitle',\n        }),\n        /**\n         * If set, the card to be displayed as the \"main/spotlight\" card.\n         */\n        mainParticipantCard: one2one('mail.rtc_call_participant_card', {\n            compute: '_computeMainParticipantCard',\n            inverse: 'rtcCallViewerOfMainCard',\n        }),\n        /**\n         * The model for the controller (buttons).\n         */\n        rtcController: one2one('mail.rtc_controller', {\n            default: insertAndReplace(),\n            readonly: true,\n            required: true,\n            inverse: 'callViewer',\n            isCausal: true,\n        }),\n        /**\n         * The model for the menu to control the layout of the viewer.\n         */\n        rtcLayoutMenu: one2one('mail.rtc_layout_menu', {\n            inverse: 'callViewer',\n            isCausal: true,\n        }),\n        /**\n         * Text content that is displayed on title of the settings dialog.\n         */\n        settingsTitle: attr({\n            compute: '_computeSettingsTitle',\n        }),\n        /**\n         * Determines if we show the overlay with the control buttons.\n         */\n        showOverlay: attr({\n            default: true,\n        }),\n        /**\n         * ThreadView on which the call viewer is attached.\n         */\n        threadView: one2one('mail.thread_view', {\n            inverse: 'rtcCallViewer',\n            readonly: true,\n            required: true,\n        }),\n        /**\n         * List of all participant cards (can either be invitations or rtcSessions).\n         */\n        tileParticipantCards: one2many('mail.rtc_call_participant_card', {\n            compute: '_computeTileParticipantCards',\n            inverse: 'rtcCallViewerOfTile',\n        }),\n    };\n    RtcCallViewer.identifyingFields = ['threadView'];\n    RtcCallViewer.onChanges = [\n        new OnChange({\n            dependencies: ['threadView.thread.rtc'],\n            methodName: '_onChangeRtcChannel',\n        }),\n        new OnChange({\n            dependencies: ['threadView.thread.videoCount'],\n            methodName: '_onChangeVideoCount',\n        }),\n    ];\n    RtcCallViewer.modelName = 'mail.rtc_call_viewer';\n\n    return RtcCallViewer;\n}\n\nregisterNewModel('mail.rtc_call_viewer', factory);\n", "/** @odoo-module **/\n\nimport { browser } from \"@web/core/browser/browser\";\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr, one2one } from '@mail/model/model_field';\n\nfunction factory(dependencies) {\n\n    class RtcConfigurationMenu extends dependencies['mail.model'] {\n\n        /**\n         * @override\n         */\n        _created() {\n            const res = super._created(...arguments);\n            this._onKeyDown = this._onKeyDown.bind(this);\n            this._onKeyUp = this._onKeyUp.bind(this);\n            browser.addEventListener('keydown', this._onKeyDown);\n            browser.addEventListener('keyup', this._onKeyUp);\n            return res;\n        }\n\n        /**\n         * @override\n         */\n        _willDelete() {\n            browser.removeEventListener('keydown', this._onKeyDown);\n            browser.removeEventListener('keyup', this._onKeyUp);\n            return super._willDelete(...arguments);\n        }\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        /**\n         * @param {String} value\n         */\n        onChangeDelay(value) {\n            this.userSetting.setDelayValue(value);\n        }\n\n        onChangePushToTalk() {\n            if (this.userSetting.usePushToTalk) {\n                this.update({\n                    isRegisteringKey: false,\n                });\n            }\n            this.userSetting.togglePushToTalk();\n        }\n\n        /**\n         * @param {String} value\n         */\n        onChangeSelectAudioInput(value) {\n            this.userSetting.setAudioInputDevice(value);\n        }\n\n        /**\n         * @param {String} value\n         */\n        onChangeThreshold(value) {\n            this.userSetting.setThresholdValue(parseFloat(value));\n        }\n\n        onClickRegisterKeyButton() {\n            this.update({\n                isRegisteringKey: !this.isRegisteringKey,\n            });\n        }\n\n        toggle() {\n            this.update({ isOpen: !this.isOpen });\n        }\n\n        //----------------------------------------------------------------------\n        // Private\n        //----------------------------------------------------------------------\n\n        _onKeyDown(ev) {\n            if (!this.isRegisteringKey) {\n                return;\n            }\n            ev.stopPropagation();\n            ev.preventDefault();\n            this.userSetting.setPushToTalkKey(ev);\n        }\n\n        _onKeyUp(ev) {\n            if (!this.isRegisteringKey) {\n                return;\n            }\n            ev.stopPropagation();\n            ev.preventDefault();\n            this.update({\n                isRegisteringKey: false,\n            });\n        }\n\n    }\n\n    RtcConfigurationMenu.fields = {\n        isOpen: attr({\n            default: false,\n        }),\n        /**\n         * true if listening to keyboard input to register the push to talk key.\n         */\n        isRegisteringKey: attr({\n            default: false,\n        }),\n        userSetting: one2one('mail.user_setting', {\n            inverse: 'rtcConfigurationMenu',\n            readonly: true,\n            required: true,\n        }),\n    };\n    RtcConfigurationMenu.identifyingFields = ['userSetting'];\n    RtcConfigurationMenu.modelName = 'mail.rtc_configuration_menu';\n\n    return RtcConfigurationMenu;\n}\n\nregisterNewModel('mail.rtc_configuration_menu', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr, one2one } from '@mail/model/model_field';\nimport { insertAndReplace } from '@mail/model/model_field_command';\n\nfunction factory(dependencies) {\n\n    class RtcController extends dependencies['mail.model'] {\n\n        /**\n         * @override\n         */\n        _created() {\n            super._created();\n            this.onClickCamera = this.onClickCamera.bind(this);\n            this.onClickDeafen = this.onClickDeafen.bind(this);\n            this.onClickMicrophone = this.onClickMicrophone.bind(this);\n            this.onClickRejectCall = this.onClickRejectCall.bind(this);\n            this.onClickScreen = this.onClickScreen.bind(this);\n            this.onClickToggleAudioCall = this.onClickToggleAudioCall.bind(this);\n            this.onClickToggleVideoCall = this.onClickToggleVideoCall.bind(this);\n        }\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        /**\n         * @param {MouseEvent} ev\n         */\n        onClickCamera(ev) {\n            this.messaging.rtc.toggleUserVideo();\n        }\n\n        /**\n         * @param {MouseEvent} ev\n         */\n        async onClickDeafen(ev) {\n            await this.messaging.rtc.currentRtcSession.toggleDeaf();\n        }\n\n        /**\n         * @param {MouseEvent} ev\n         */\n        onClickMicrophone(ev) {\n            this.messaging.rtc.toggleMicrophone();\n        }\n\n        /**\n         * @param {MouseEvent} ev\n         */\n        async onClickRejectCall(ev) {\n            if (this.callViewer.threadView.thread.hasPendingRtcRequest) {\n                return;\n            }\n            await this.callViewer.threadView.thread.leaveCall();\n        }\n\n        /**\n         * @param {MouseEvent} ev\n         */\n        onClickScreen(ev) {\n            this.messaging.rtc.toggleScreenShare();\n        }\n\n        /**\n         * @param {MouseEvent} ev\n         */\n        async onClickToggleAudioCall(ev) {\n            if (this.callViewer.threadView.thread.hasPendingRtcRequest) {\n                return;\n            }\n            await this.callViewer.threadView.thread.toggleCall();\n        }\n\n        /**\n         * @param {MouseEvent} ev\n         */\n        async onClickToggleVideoCall(ev) {\n            if (this.callViewer.threadView.thread.hasPendingRtcRequest) {\n                return;\n            }\n            await this.callViewer.threadView.thread.toggleCall({\n                startWithVideo: true,\n            });\n        }\n\n        //----------------------------------------------------------------------\n        // Private\n        //----------------------------------------------------------------------\n\n        /**\n         * @private\n         */\n        _computeIsSmall() {\n            return Boolean(this.callViewer && this.callViewer.threadView.compact && !this.callViewer.isFullScreen);\n        }\n\n    }\n\n    RtcController.fields = {\n        callViewer: one2one('mail.rtc_call_viewer', {\n            inverse: 'rtcController',\n            readonly: true,\n            required: true,\n        }),\n        isSmall: attr({\n            compute: '_computeIsSmall',\n        }),\n        rtcOptionList: one2one('mail.rtc_option_list', {\n            default: insertAndReplace(),\n            inverse: 'rtcController',\n            isCausal: true,\n            required: true,\n        }),\n    };\n    RtcController.identifyingFields = ['callViewer'];\n    RtcController.modelName = 'mail.rtc_controller';\n\n    return RtcController;\n}\n\nregisterNewModel('mail.rtc_controller', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr, one2one } from '@mail/model/model_field';\nimport { clear } from '@mail/model/model_field_command';\n\nfunction factory(dependencies) {\n\n    class RtcLayoutMenu extends dependencies['mail.model'] {\n\n        /**\n         * @override\n         */\n        _created() {\n            super._created();\n            this.onClickFilter = this.onClickFilter.bind(this);\n            this.onClickLayout = this.onClickLayout.bind(this);\n        }\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        /**\n         * @param {MouseEvent} ev\n         */\n        onClickFilter(ev) {\n            ev.preventDefault();\n            switch (ev.target.value) {\n                case 'all':\n                    this.callViewer.update({\n                        filterVideoGrid: false,\n                    });\n                    break;\n                case 'video':\n                    this.callViewer.update({\n                        filterVideoGrid: true,\n                    });\n                    if (this.messaging.focusedRtcSession && !this.messaging.focusedRtcSession.videoStream) {\n                        this.messaging.update({ focusedRtcSession: clear() });\n                    }\n                    break;\n            }\n        }\n\n        /**\n         * @param {MouseEvent} ev\n         */\n        onClickLayout(ev) {\n            ev.preventDefault();\n            this.messaging.userSetting.update({\n                rtcLayout: ev.target.value,\n            });\n            this.component.trigger('dialog-closed');\n        }\n\n    }\n\n    RtcLayoutMenu.fields = {\n        component: attr(),\n        callViewer: one2one('mail.rtc_call_viewer', {\n            inverse: 'rtcLayoutMenu',\n            readonly: true,\n        }),\n    };\n    RtcLayoutMenu.identifyingFields = ['callViewer'];\n    RtcLayoutMenu.modelName = 'mail.rtc_layout_menu';\n\n    return RtcLayoutMenu;\n}\n\nregisterNewModel('mail.rtc_layout_menu', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr, one2one } from '@mail/model/model_field';\n\nfunction factory(dependencies) {\n\n    class RtcOptionList extends dependencies['mail.model'] {\n\n        /**\n         * @override\n         */\n        _created() {\n            super._created();\n            this.onClickDownloadLogs = this.onClickDownloadLogs.bind(this);\n            this.onClickActivateFullScreen = this.onClickActivateFullScreen.bind(this);\n            this.onClickDeactivateFullScreen = this.onClickDeactivateFullScreen.bind(this);\n            this.onClickLayout = this.onClickLayout.bind(this);\n            this.onClickOptions = this.onClickOptions.bind(this);\n        }\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        /**\n         * Creates and download a file that contains the logs of the current RTC call.\n         *\n         * @param {MouseEvent} ev\n         */\n        async onClickDownloadLogs(ev) {\n            const channel = this.rtcController.callViewer.threadView.thread;\n            if (!channel.rtc) {\n                return;\n            }\n            const data = window.JSON.stringify(channel.rtc.logs);\n            const blob = new window.Blob([data], { type: 'application/json' });\n            const url = window.URL.createObjectURL(blob);\n            const a = document.createElement('a');\n            a.href = url;\n            a.download = `RtcLogs_Channel${channel.id}_Session${channel.rtc.currentRtcSession.id}_${window.moment().format('YYYY-MM-DD_HH-mm')}.json`;\n            a.click();\n            window.URL.revokeObjectURL(url);\n            this.component.trigger('o-popover-close');\n        }\n\n        /**\n         * @param {MouseEvent} ev\n         */\n        onClickActivateFullScreen(ev) {\n            this.rtcController.callViewer.activateFullScreen();\n            this.component.trigger('o-popover-close');\n        }\n\n        /**\n         * @param {MouseEvent} ev\n         */\n        onClickDeactivateFullScreen(ev) {\n            this.rtcController.callViewer.deactivateFullScreen();\n            this.component.trigger('o-popover-close');\n        }\n\n        /**\n         * @param {MouseEvent} ev\n         */\n        onClickLayout(ev) {\n            this.rtcController.callViewer.toggleLayoutMenu();\n            this.component.trigger('o-popover-close');\n        }\n\n        /**\n         * @param {MouseEvent} ev\n         */\n        onClickOptions(ev) {\n            this.messaging.userSetting.rtcConfigurationMenu.toggle();\n            this.component.trigger('o-popover-close');\n        }\n\n    }\n\n    RtcOptionList.fields = {\n        /**\n         * States the OWL component of this option list.\n         */\n        component: attr(),\n        rtcController: one2one('mail.rtc_controller', {\n            inverse: 'rtcOptionList',\n            readonly: true,\n            required: true,\n        }),\n    };\n    RtcOptionList.identifyingFields = ['rtcController'];\n    RtcOptionList.modelName = 'mail.rtc_option_list';\n\n    return RtcOptionList;\n}\n\nregisterNewModel('mail.rtc_option_list', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr } from '@mail/model/model_field';\n\nfunction factory(dependencies) {\n\n    class RTCPeerNotification extends dependencies['mail.model'] {\n    }\n\n    RTCPeerNotification.fields = {\n        channelId: attr({\n            readonly: true,\n            required: true,\n        }),\n        event: attr({\n            readonly: true,\n            required: true,\n        }),\n        /**\n         * States the id of this RTC peer notification. This id does not\n         * correspond to any specific value, it is just a unique identifier\n         * given by the creator of this record.\n         */\n        id: attr({\n            readonly: true,\n            required: true,\n        }),\n        payload: attr({\n            readonly: true,\n        }),\n        senderId: attr({\n            readonly: true,\n            required: true,\n        }),\n        targetTokens: attr({\n            readonly: true,\n            required: true,\n        }),\n    };\n    RTCPeerNotification.identifyingFields = ['id'];\n    RTCPeerNotification.modelName = 'mail.rtc_peer_notification';\n\n    return RTCPeerNotification;\n}\n\nregisterNewModel('mail.rtc_peer_notification', factory);\n", "/** @odoo-module **/\n\nimport { browser } from \"@web/core/browser/browser\";\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr, many2one, one2one, one2many } from '@mail/model/model_field';\nimport { clear } from '@mail/model/model_field_command';\n\nfunction factory(dependencies) {\n\n    class RtcSession extends dependencies['mail.model'] {\n\n        /**\n         * @override\n         */\n        _created() {\n            super._created();\n            this._timeoutId = undefined;\n        }\n\n        /**\n         * @override\n         */\n        _willDelete() {\n            this.reset();\n            return super._willDelete(...arguments);\n        }\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        /**\n         * restores the session to its default values\n         */\n        reset() {\n            this._timeoutId && browser.clearTimeout(this._timeoutId);\n            this._removeAudio();\n            this.removeVideo();\n            this.update({\n                audioElement: clear(),\n                isTalking: clear(),\n            });\n        }\n\n        /**\n         * cleanly removes the video stream of the session\n         */\n        removeVideo() {\n            if (this.videoStream) {\n                for (const track of this.videoStream.getTracks() || []) {\n                    track.stop();\n                }\n            }\n            this.update({\n                videoStream: clear(),\n            });\n        }\n\n        /**\n         * @param {Object} param0\n         * @param {MediaStream} param0.audioStream\n         * @param {boolean} param0.isMuted\n         * @param {boolean} param0.isTalking\n         */\n        async setAudio({ audioStream, isMuted, isTalking }) {\n            const audioElement = this.audioElement || new window.Audio();\n            try {\n                audioElement.srcObject = audioStream;\n            } catch (error) {\n                this.update({ isAudioInError: true });\n                console.error(error);\n            }\n            audioElement.load();\n            if (this.partner && this.partner.volumeSetting) {\n                audioElement.volume = this.partner.volumeSetting.volume;\n            } else if (this.guest && this.guest.volumeSetting) {\n                audioElement.volume = this.guest.volumeSetting.volume;\n            } else {\n                audioElement.volume = this.volume;\n            }\n            audioElement.muted = this.messaging.rtc.currentRtcSession.isDeaf;\n            // Using both autoplay and play() as safari may prevent play() outside of user interactions\n            // while some browsers may not support or block autoplay.\n            audioElement.autoplay = true;\n            this.update({\n                audioElement,\n                audioStream,\n                isMuted,\n                isTalking,\n            });\n            try {\n                await audioElement.play();\n                if (!this.exists()) {\n                    return;\n                }\n                this.update({ isAudioInError: false });\n            } catch (error) {\n                if (typeof error === 'object' && error.name === 'NotAllowedError') {\n                    // Ignored as some browsers may reject play() calls that do not\n                    // originate from a user input.\n                    return;\n                }\n                if (this.exists()) {\n                    this.update({ isAudioInError: true });\n                }\n                console.error(error);\n            }\n        }\n\n        /**\n         * @param {number} volume\n         */\n        setVolume(volume) {\n            /**\n             * Manually updating the volume field as it will not update based on\n             * the change of the volume property of the audioElement alone.\n             */\n            this.update({ volume });\n            if (this.audioElement) {\n                this.audioElement.volume = volume;\n            }\n            if (this.isOwnSession) {\n                return;\n            }\n            if (this.partner && this.partner.volumeSetting) {\n                this.partner.volumeSetting.update({ volume });\n            }\n            if (this.guest && this.guest.volumeSetting) {\n                this.guest.volumeSetting.update({ volume });\n            }\n            if (this.messaging.isCurrentUserGuest) {\n                return;\n            }\n            this.messaging.userSetting.saveVolumeSetting({\n                partnerId: this.partner && this.partner.id,\n                guestId: this.guest && this.guest.id,\n                volume,\n            });\n        }\n\n        /**\n         * Toggles the deaf state of the current session, this must be a session\n         * of the current partner.\n         */\n        async toggleDeaf() {\n            if (!this.rtc) {\n                return;\n            }\n            this.updateAndBroadcast({\n                isDeaf: !this.isDeaf,\n            });\n            for (const session of this.messaging.models['mail.rtc_session'].all()) {\n                if (!session.audioElement) {\n                    continue;\n                }\n                session.audioElement.muted = this.isDeaf;\n            }\n            if (this.channel.rtc) {\n                /**\n                 * Ensures that the state of the microphone matches the deaf state\n                 * and notifies peers.\n                 */\n                await this.async(() => this.channel.rtc.toggleMicrophone({\n                    requestAudioDevice: false,\n                }));\n            }\n        }\n\n        /**\n         * updates the record and notifies the server of the change\n         *\n         * @param {Object} data\n         */\n        updateAndBroadcast(data) {\n            if (!this.rtc) {\n                return;\n            }\n            this.update(data);\n            this._debounce(async () => {\n                if (!this.exists()) {\n                    return;\n                }\n                await this.async(() => {\n                    this.env.services.rpc(\n                        {\n                            route: '/mail/rtc/session/update_and_broadcast',\n                            params: {\n                                session_id: this.id,\n                                values: {\n                                    is_camera_on: this.isCameraOn,\n                                    is_deaf: this.isDeaf,\n                                    is_muted: this.isMuted,\n                                    is_screen_sharing_on: this.isScreenSharingOn,\n                                },\n                            },\n                        },\n                        { shadow: true }\n                    );\n                });\n            }, 3000);\n        }\n\n        //----------------------------------------------------------------------\n        // Private\n        //----------------------------------------------------------------------\n\n        /**\n         * @private\n         * @returns {string}\n         */\n        _computeAvatarUrl() {\n            if (!this.channel) {\n                return;\n            }\n            if (this.partner) {\n                return `/mail/channel/${this.channel.id}/partner/${this.partner.id}/avatar_128`;\n            }\n            if (this.guest) {\n                return `/mail/channel/${this.channel.id}/guest/${this.guest.id}/avatar_128?unique=${this.guest.name}`;\n            }\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeIsOwnSession() {\n            if (!this.messaging) {\n                return;\n            }\n            return (this.partner && this.messaging.currentPartner === this.partner) ||\n                (this.guest && this.messaging.currentGuest === this.guest);\n        }\n\n        /**\n         * @private\n         * @returns {string}\n         */\n        _computeName() {\n            if (this.partner) {\n                return this.partner.name;\n            }\n            if (this.guest) {\n                return this.guest.name;\n            }\n        }\n\n        /**\n         * @private\n         * @returns {string}\n         */\n        _computePeerToken() {\n            return String(this.id);\n        }\n\n        /**\n         * @private\n         * @returns {number} float\n         */\n        _computeVolume() {\n            if (this.partner && this.partner.volumeSetting) {\n                return this.partner.volumeSetting.volume;\n            } else if (this.guest && this.guest.volumeSetting) {\n                return this.guest.volumeSetting.volume;\n            }\n            if (this.audioElement) {\n                return this.audioElement.volume;\n            }\n        }\n\n        /**\n         * @private\n         */\n        _debounce(f, delay) {\n            this._timeoutId && browser.clearTimeout(this._timeoutId);\n            this._timeoutId = browser.setTimeout(() => {\n                if (!this.exists()) {\n                    return;\n                }\n                f();\n            }, delay);\n        }\n\n        /**\n         * cleanly removes the audio stream of the session\n         *\n         * @private\n         */\n        _removeAudio() {\n            if (this.audioStream) {\n                for (const track of this.audioStream.getTracks() || []) {\n                    track.stop();\n                }\n            }\n            if (this.audioElement) {\n                this.audioElement.pause();\n                try {\n                    this.audioElement.srcObject = undefined;\n                } catch (error) {\n                    // ignore error during remove, the value will be overwritten at next usage anyway\n                }\n            }\n            this.update({\n                audioStream: clear(),\n                isAudioInError: false,\n            });\n        }\n\n    }\n\n    RtcSession.fields = {\n        /**\n         * HTMLAudioElement that plays and control the audioStream of the user,\n         * it is not mounted on the DOM as it can operate from the JS.\n         */\n        audioElement: attr(),\n        /**\n         * MediaStream\n         */\n        audioStream: attr(),\n        /**\n         * The relative url of the image that represents the session.\n         */\n        avatarUrl: attr({\n            compute: '_computeAvatarUrl',\n        }),\n        /**\n         * The mail.channel of the session, rtc sessions are part and managed by\n         * mail.channel\n         */\n        channel: many2one('mail.thread', {\n            inverse: 'rtcSessions',\n        }),\n        /**\n         * State of the connection with this session, uses RTCPeerConnection.iceConnectionState\n         * once a peerConnection has been initialized.\n         */\n        connectionState: attr({\n            default: 'Waiting for the peer to send a RTC offer',\n        }),\n        guest: many2one('mail.guest', {\n            inverse: 'rtcSessions',\n        }),\n        /**\n         * Id of the record on the server.\n         */\n        id: attr({\n            readonly: true,\n            required: true,\n        }),\n        /**\n         * Channels on which this session is inviting the current partner,\n         * this serves as an explicit inverse as it seems to confuse it with\n         * other session-channel relations otherwise.\n         */\n        calledChannels: one2many('mail.thread', {\n            inverse: 'rtcInvitingSession',\n        }),\n        /**\n         * States whether there is currently an error with the audio element.\n         */\n        isAudioInError: attr({\n            default: false,\n        }),\n        /**\n         * Determines if the user is broadcasting a video from a user device (camera).\n         */\n        isCameraOn: attr({\n            default: false,\n        }),\n        /**\n         * Determines if the user is deafened, which means that all incoming\n         * audio tracks are disabled.\n         */\n        isDeaf: attr({\n            default: false,\n        }),\n        /**\n         * Determines if the user's microphone is in a muted state, which\n         * means that they cannot send sound regardless of the push to talk or\n         * voice activation (isTalking) state.\n         */\n        isMuted: attr({\n            default: false,\n        }),\n        /**\n         * Determines if the session is a session of the current partner.\n         * This can be true for many sessions, as one user can have multiple\n         * sessions active across several tabs, browsers and devices.\n         * To determine if this session is the active session of this tab,\n         * use this.rtc instead.\n         */\n        isOwnSession: attr({\n            compute: '_computeIsOwnSession',\n        }),\n        /**\n         * Determines if the user is sharing their screen.\n         */\n        isScreenSharingOn: attr({\n            default: false,\n        }),\n        /**\n         * Determines if the user is currently talking, which is based on\n         * voice activation or push to talk.\n         */\n        isTalking: attr({\n            default: false,\n        }),\n        /**\n         * Name of the session, based on the partner name if set.\n         */\n        name: attr({\n            compute: '_computeName',\n        }),\n        /**\n         * If set, the partner who owns this rtc session,\n         * there can be multiple rtc sessions per partner if the partner\n         * has open sessions in multiple channels, but only one session per\n         * channel is allowed.\n         */\n        partner: many2one('mail.partner', {\n            inverse: 'rtcSessions',\n        }),\n        /**\n         * Token to identify the session, it is currently just the toString\n         * id of the record.\n         */\n        peerToken: attr({\n            compute: '_computePeerToken',\n        }),\n        /**\n         * If set, this session is the session of the current user and is in the active RTC call.\n         * This information is distinct from this.isOwnSession as there can be other\n         * sessions from other channels with the same partner (sessions opened from different\n         * tabs or devices).\n         */\n        rtc: one2one('mail.rtc', {\n            inverse: 'currentRtcSession',\n        }),\n        /**\n         * MediaStream of the user's video.\n         *\n         * Should be divided into userVideoStream and displayStream,\n         * once we allow both share and cam feeds simultaneously.\n         */\n        videoStream: attr(),\n        /**\n         * The volume of the audio played from this session.\n         */\n        volume: attr({\n            default: 0.5,\n            compute: '_computeVolume',\n        }),\n    };\n    RtcSession.identifyingFields = ['id'];\n    RtcSession.modelName = 'mail.rtc_session';\n\n    return RtcSession;\n}\n\nregisterNewModel('mail.rtc_session', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr } from '@mail/model/model_field';\n\nfunction factory(dependencies) {\n\n    class SoundEffect extends dependencies['mail.model'] {\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        /**\n         * @param {Object} param0\n         * @param {boolean} [param0.loop] true if we want to make the audio loop, will only stop if stop() is called\n         * @param {boolean} [param0.volume]\n         */\n        play({ loop = false, volume = 1 } = {}) {\n            if (typeof(Audio) === \"undefined\") {\n                return;\n            }\n            if (!this.audio) {\n                const audio = new window.Audio();\n                const ext = audio.canPlayType(\"audio/ogg; codecs=vorbis\") ? \".ogg\" : \".mp3\";\n                audio.src = this.path + this.filename + ext;\n                this.update({ audio });\n            }\n            this.audio.pause();\n            this.audio.currentTime = 0;\n            this.audio.loop = loop;\n            this.audio.volume = volume;\n            Promise.resolve(this.audio.play()).catch(()=>{});\n        }\n\n        /**\n         * Resets the audio to the start of the track and pauses it.\n         */\n        stop() {\n            if (this.audio) {\n                this.audio.pause();\n                this.audio.currentTime = 0;\n            }\n        }\n\n    }\n\n    SoundEffect.fields = {\n        /**\n         * HTMLAudioElement\n         * Does not require to be mounted on the DOM to operate.\n         *\n         * Set the first time the audio is played so the file is lazy loaded and\n         * then cached.\n         */\n        audio: attr(),\n        /**\n         * Name of the audio file.\n         */\n        filename: attr({\n            readonly: true,\n            required: true,\n        }),\n        /**\n         * Path to the audio file.\n         */\n        path: attr({\n            default: '/mail/static/src/audio/',\n            readonly: true,\n            required: true,\n        }),\n    };\n    SoundEffect.identifyingFields = ['path', 'filename'];\n    SoundEffect.modelName = 'mail.sound_effect';\n\n    return SoundEffect;\n}\n\nregisterNewModel('mail.sound_effect', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { one2one } from '@mail/model/model_field';\nimport { insertAndReplace } from '@mail/model/model_field_command';\n\nfunction factory(dependencies) {\n\n    class SoundEffects extends dependencies['mail.model'] {\n    }\n\n    SoundEffects.fields = {\n        channelJoin: one2one('mail.sound_effect', {\n            default: insertAndReplace({ filename: 'channel_01_in' }),\n            isCausal: true,\n        }),\n        channelLeave: one2one('mail.sound_effect', {\n            default: insertAndReplace({ filename: 'channel_04_out' }),\n            isCausal: true,\n        }),\n        incomingCall: one2one('mail.sound_effect', {\n            default: insertAndReplace({ filename: 'call_02_in_' }),\n            isCausal: true,\n        }),\n        memberLeave: one2one('mail.sound_effect', {\n            default: insertAndReplace({ filename: 'channel_01_out' }),\n            isCausal: true,\n        }),\n        newMessage: one2one('mail.sound_effect', {\n            default: insertAndReplace({ filename: 'dm_02' }),\n            isCausal: true,\n        }),\n        pushToTalk: one2one('mail.sound_effect', {\n            default: insertAndReplace({ filename: 'dm_01' }),\n            isCausal: true,\n        }),\n        screenSharing: one2one('mail.sound_effect', {\n            default: insertAndReplace({ filename: 'share_02' }),\n            isCausal: true,\n        }),\n    };\n    SoundEffects.identifyingFields = ['messaging'];\n    SoundEffects.modelName = 'mail.sound_effects';\n\n    return SoundEffects;\n}\n\nregisterNewModel('mail.sound_effects', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr, many2one } from '@mail/model/model_field';\n\nfunction factory(dependencies) {\n\n    class SuggestedRecipientInfo extends dependencies['mail.model'] {\n\n        //----------------------------------------------------------------------\n        // private\n        //----------------------------------------------------------------------\n\n        /**\n         * Prevents selecting a recipient that does not have a partner.\n         *\n         * @private\n         * @returns {boolean}\n         */\n        _computeIsSelected() {\n            return this.partner ? this.isSelected : false;\n        }\n\n        /**\n         * @private\n         * @returns {string}\n         */\n        _computeName() {\n            return this.partner && this.partner.nameOrDisplayName || this.name;\n        }\n\n    }\n\n    SuggestedRecipientInfo.fields = {\n        /**\n         * Determines the email of `this`. It serves as visual clue when\n         * displaying `this`, and also serves as default partner email when\n         * creating a new partner from `this`.\n         */\n        email: attr({\n            readonly: true,\n        }),\n        /**\n         * States the id of this suggested recipient info. This id does not\n         * correspond to any specific value, it is just a unique identifier\n         * given by the creator of this record.\n         */\n        id: attr({\n            readonly: true,\n        }),\n        /**\n         * Determines whether `this` will be added to recipients when posting a\n         * new message on `this.thread`.\n         */\n        isSelected: attr({\n            compute: '_computeIsSelected',\n            default: true,\n        }),\n        /**\n         * Determines the name of `this`. It serves as visual clue when\n         * displaying `this`, and also serves as default partner name when\n         * creating a new partner from `this`.\n         */\n        name: attr({\n            compute: '_computeName',\n        }),\n        /**\n         * Determines the optional `mail.partner` associated to `this`.\n         */\n        partner: many2one('mail.partner'),\n        /**\n         * Determines why `this` is a suggestion for `this.thread`. It serves as\n         * visual clue when displaying `this`.\n         */\n        reason: attr(),\n        /**\n         * Determines the `mail.thread` concerned by `this.`\n         */\n        thread: many2one('mail.thread', {\n            inverse: 'suggestedRecipientInfoList',\n            required: true,\n        }),\n    };\n    SuggestedRecipientInfo.identifyingFields = ['id'];\n    SuggestedRecipientInfo.modelName = 'mail.suggested_recipient_info';\n\n    return SuggestedRecipientInfo;\n}\n\nregisterNewModel('mail.suggested_recipient_info', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr, many2many, many2one, one2many, one2one } from '@mail/model/model_field';\nimport { clear, insert, insertAndReplace, link, replace, unlink, unlinkAll } from '@mail/model/model_field_command';\nimport { OnChange } from '@mail/model/model_onchange';\nimport throttle from '@mail/utils/throttle/throttle';\nimport Timer from '@mail/utils/timer/timer';\nimport { cleanSearchTerm } from '@mail/utils/utils';\nimport * as mailUtils from '@mail/js/utils';\n\nimport { str_to_datetime } from 'web.time';\n\nfunction factory(dependencies) {\n\n    const getSuggestedRecipientInfoNextTemporaryId = (function () {\n        let tmpId = 0;\n        return () => {\n            tmpId += 1;\n            return tmpId;\n        };\n    })();\n\n    class Thread extends dependencies['mail.model'] {\n\n        /**\n         * @override\n         */\n        _willCreate() {\n            const res = super._willCreate(...arguments);\n            /**\n             * Timer of current partner that was currently typing something, but\n             * there is no change on the input for 5 seconds. This is used\n             * in order to automatically notify other members that current\n             * partner has stopped typing something, due to making no changes\n             * on the composer for some time.\n             */\n            this._currentPartnerInactiveTypingTimer = new Timer(\n                this.env,\n                () => this.async(() => {\n                    if (this.messaging.currentPartner) {\n                        return this._onCurrentPartnerInactiveTypingTimeout();\n                    }\n                }),\n                5 * 1000\n            );\n            /**\n             * Last 'is_typing' status of current partner that has been notified\n             * to other members. Useful to prevent spamming typing notifications\n             * to other members if it hasn't changed. An exception is the\n             * current partner long typing scenario where current partner has\n             * to re-send the same typing notification from time to time, so\n             * that other members do not assume he/she is no longer typing\n             * something from not receiving any typing notifications for a\n             * very long time.\n             *\n             * Supported values: true/false/undefined.\n             * undefined makes only sense initially and during current partner\n             * long typing timeout flow.\n             */\n            this._currentPartnerLastNotifiedIsTyping = undefined;\n            /**\n             * Timer of current partner that is typing a very long text. When\n             * the other members do not receive any typing notification for a\n             * long time, they must assume that the related partner is no longer\n             * typing something (e.g. they have closed the browser tab).\n             * This is a timer to let other members know that current partner\n             * is still typing something, so that they should not assume he/she\n             * has stopped typing something.\n             */\n            this._currentPartnerLongTypingTimer = new Timer(\n                this.env,\n                () => this.async(() => this._onCurrentPartnerLongTypingTimeout()),\n                50 * 1000\n            );\n            /**\n             * Determines whether the next request to notify current partner\n             * typing status should always result to making RPC, regardless of\n             * whether last notified current partner typing status is the same.\n             * Most of the time we do not want to notify if value hasn't\n             * changed, exception being the long typing scenario of current\n             * partner.\n             */\n            this._forceNotifyNextCurrentPartnerTypingStatus = false;\n            /**\n             * Registry of timers of partners currently typing in the thread,\n             * excluding current partner. This is useful in order to\n             * automatically unregister typing members when not receive any\n             * typing notification after a long time. Timers are internally\n             * indexed by partner records as key. The current partner is\n             * ignored in this registry of timers.\n             *\n             * @see registerOtherMemberTypingMember\n             * @see unregisterOtherMemberTypingMember\n             */\n            this._otherMembersLongTypingTimers = new Map();\n\n            /**\n             * Clearable and cancellable throttled version of the\n             * `_notifyCurrentPartnerTypingStatus` method.\n             * This is useful when the current partner posts a message and\n             * types something else afterwards: it must notify immediately that\n             * he/she is typing something, instead of waiting for the throttle\n             * internal timer.\n             *\n             * @see _notifyCurrentPartnerTypingStatus\n             */\n            this._throttleNotifyCurrentPartnerTypingStatus = throttle(\n                this.env,\n                ({ isTyping }) => this.async(() => this._notifyCurrentPartnerTypingStatus({ isTyping })),\n                2.5 * 1000\n            );\n            return res;\n        }\n\n        /**\n         * @override\n         */\n        _created() {\n            super._created();\n            this.onClick = this.onClick.bind(this);\n            this.onClickLoadMoreMembers = this.onClickLoadMoreMembers.bind(this);\n        }\n\n        /**\n         * @override\n         */\n        _willDelete() {\n            this._currentPartnerInactiveTypingTimer.clear();\n            this._currentPartnerLongTypingTimer.clear();\n            this._throttleNotifyCurrentPartnerTypingStatus.clear();\n            for (const timer of this._otherMembersLongTypingTimers.values()) {\n                timer.clear();\n            }\n            if (this.isTemporary) {\n                for (const message of this.messages) {\n                    message.delete();\n                }\n            }\n            return super._willDelete(...arguments);\n        }\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        /**\n         * Changes description of the thread to the given new description.\n         * Only makes sense for channels.\n         *\n         * @param {string} description\n         */\n        async changeDescription(description) {\n            this.update({ description });\n            return this.env.services.rpc({\n                model: 'mail.channel',\n                method: 'channel_change_description',\n                args: [[this.id]],\n                kwargs: { description },\n            });\n        }\n\n        /**\n         * @static\n         * @param {mail.thread} [thread] the concerned thread\n         */\n        static computeLastCurrentPartnerMessageSeenByEveryone(thread = undefined) {\n            const threads = thread ? [thread] : this.messaging.models['mail.thread'].all();\n            threads.map(localThread => {\n                localThread.update({\n                    lastCurrentPartnerMessageSeenByEveryone: localThread._computeLastCurrentPartnerMessageSeenByEveryone(),\n                });\n            });\n        }\n\n        /**\n         * @static\n         * @param {Object} data\n         * @return {Object}\n         */\n        static convertData(data) {\n            const data2 = {};\n            if ('avatarCacheKey' in data) {\n                data2.avatarCacheKey = data.avatarCacheKey;\n            }\n            if ('defaultDisplayMode' in data) {\n                data2.defaultDisplayMode = data.defaultDisplayMode;\n            }\n            if ('description' in data) {\n                data2.description = data.description;\n            }\n            if ('model' in data) {\n                data2.model = data.model;\n            }\n            if ('channel_type' in data) {\n                data2.channel_type = data.channel_type;\n                data2.model = 'mail.channel';\n            }\n            if ('create_uid' in data) {\n                data2.creator = insert({ id: data.create_uid });\n            }\n            if ('custom_channel_name' in data) {\n                data2.custom_channel_name = data.custom_channel_name;\n            }\n            if ('group_based_subscription' in data) {\n                data2.group_based_subscription = data.group_based_subscription;\n            }\n            if ('guestMembers' in data) {\n                data2.guestMembers = data.guestMembers;\n            }\n            if ('id' in data) {\n                data2.id = data.id;\n            }\n            if ('invitedGuests' in data) {\n                data2.invitedGuests = data.invitedGuests;\n            }\n            if ('invitedPartners' in data) {\n                data2.invitedPartners = data.invitedPartners;\n            }\n            if ('is_minimized' in data && 'state' in data) {\n                data2.serverFoldState = data.is_minimized ? data.state : 'closed';\n            }\n            if ('is_pinned' in data) {\n                data2.isServerPinned = data.is_pinned;\n            }\n            if ('last_interest_dt' in data && data.last_interest_dt) {\n                data2.lastInterestDateTime = str_to_datetime(data.last_interest_dt);\n            }\n            if ('last_message' in data && data.last_message) {\n                const messageData = this.messaging.models['mail.message'].convertData({\n                    id: data.last_message.id,\n                    model: data2.model,\n                    res_id: data2.id,\n                });\n                data2.serverLastMessage = insert(messageData);\n            }\n            if ('last_message_id' in data && data.last_message_id) {\n                const messageData = this.messaging.models['mail.message'].convertData({\n                    id: data.last_message_id,\n                    model: data2.model,\n                    res_id: data2.id,\n                });\n                data2.serverLastMessage = insert(messageData);\n            }\n            if ('memberCount' in data) {\n                data2.memberCount = data.memberCount;\n            }\n            if ('message_needaction_counter' in data) {\n                data2.message_needaction_counter = data.message_needaction_counter;\n            }\n            if ('message_unread_counter' in data) {\n                data2.serverMessageUnreadCounter = data.message_unread_counter;\n            }\n            if ('name' in data) {\n                data2.name = data.name;\n            }\n            if ('public' in data) {\n                data2.public = data.public;\n            }\n            if ('seen_message_id' in data) {\n                data2.lastSeenByCurrentPartnerMessageId = data.seen_message_id || 0;\n            }\n            if ('uuid' in data) {\n                data2.uuid = data.uuid;\n            }\n\n            // relations\n            if ('members' in data) {\n                // The list syntax is kept here because it is used in livechat override\n                if (!data.members) {\n                    data2.members = [unlinkAll()];\n                } else {\n                    data2.members = [insertAndReplace(data.members.map(memberData =>\n                        this.messaging.models['mail.partner'].convertData(memberData)\n                    ))];\n                }\n            }\n            if ('rtc_inviting_session' in data) {\n                data2.rtcInvitingSession = insert(data.rtc_inviting_session);\n            }\n            if ('rtcSessions' in data) {\n                data2.rtcSessions = data.rtcSessions;\n            }\n            if ('seen_partners_info' in data) {\n                if (!data.seen_partners_info) {\n                    data2.partnerSeenInfos = unlinkAll();\n                } else {\n                    data2.partnerSeenInfos = insertAndReplace(\n                        data.seen_partners_info.map(\n                            ({ fetched_message_id, partner_id, seen_message_id }) => {\n                                return {\n                                    lastFetchedMessage: fetched_message_id ? insert({ id: fetched_message_id }) : unlinkAll(),\n                                    lastSeenMessage: seen_message_id ? insert({ id: seen_message_id }) : unlinkAll(),\n                                    partner: insertAndReplace({ id: partner_id }),\n                            };\n                        })\n                    );\n                    if (data.id || this.id) {\n                        const messageIds = data.seen_partners_info.reduce((currentSet, { fetched_message_id, seen_message_id }) => {\n                            if (fetched_message_id) {\n                                currentSet.add(fetched_message_id);\n                            }\n                            if (seen_message_id) {\n                                currentSet.add(seen_message_id);\n                            }\n                            return currentSet;\n                        }, new Set());\n                        if (messageIds.size > 0) {\n                            data2.messageSeenIndicators = insertAndReplace([...messageIds].map(messageId => {\n                                return {\n                                    message: insertAndReplace({ id: messageId }),\n                                };\n                            }));\n                        }\n                    }\n                }\n            }\n\n            return data2;\n        }\n\n        /**\n         * Creates a new group chat with the provided partners.\n         *\n         * @param {Object} param0\n         * @param {number[]} param0.partners_to Ids of the partners to add as channel\n         * members.\n         * @param {boolean|string} param0.default_display_mode\n         * @returns {mail.thread} The newly created group chat.\n         */\n        static async createGroupChat({ default_display_mode, partners_to }) {\n            const channelData = await this.env.services.rpc({\n                model: 'mail.channel',\n                method: 'create_group',\n                kwargs: {\n                    default_display_mode,\n                    partners_to,\n                },\n            });\n            return this.messaging.models['mail.thread'].insert(\n                this.messaging.models['mail.thread'].convertData(channelData)\n            );\n        }\n\n        /**\n         * Client-side ending of the call.\n         */\n        endCall() {\n            if (this.rtc) {\n                this.rtc.reset();\n                this.messaging.soundEffects.channelLeave.play();\n            }\n            this.update({\n                rtc: unlink(),\n                rtcInvitingSession: unlink(),\n            });\n        }\n\n        /**\n         * Fetches threads matching the given composer search state to extend\n         * the JS knowledge and to update the suggestion list accordingly.\n         * More specifically only thread of model 'mail.channel' are fetched.\n         *\n         * @static\n         * @param {string} searchTerm\n         * @param {Object} [options={}]\n         * @param {mail.thread} [options.thread] prioritize and/or restrict\n         *  result in the context of given thread\n         */\n        static async fetchSuggestions(searchTerm, { thread } = {}) {\n            const channelsData = await this.env.services.rpc(\n                {\n                    model: 'mail.channel',\n                    method: 'get_mention_suggestions',\n                    kwargs: { search: searchTerm },\n                },\n                { shadow: true },\n            );\n            this.messaging.models['mail.thread'].insert(channelsData.map(channelData =>\n                Object.assign(\n                    { model: 'mail.channel' },\n                    this.messaging.models['mail.thread'].convertData(channelData),\n                )\n            ));\n        }\n\n        /**\n         * Returns a sort function to determine the order of display of threads\n         * in the suggestion list.\n         *\n         * @static\n         * @param {string} searchTerm\n         * @param {Object} [options={}]\n         * @param {mail.thread} [options.thread] prioritize result in the\n         *  context of given thread\n         * @returns {function}\n         */\n        static getSuggestionSortFunction(searchTerm, { thread } = {}) {\n            const cleanedSearchTerm = cleanSearchTerm(searchTerm);\n            return (a, b) => {\n                const isAPublic = a.model === 'mail.channel' && a.public === 'public';\n                const isBPublic = b.model === 'mail.channel' && b.public === 'public';\n                if (isAPublic && !isBPublic) {\n                    return -1;\n                }\n                if (!isAPublic && isBPublic) {\n                    return 1;\n                }\n                const isMemberOfA = a.model === 'mail.channel' && a.members.includes(this.messaging.currentPartner);\n                const isMemberOfB = b.model === 'mail.channel' && b.members.includes(this.messaging.currentPartner);\n                if (isMemberOfA && !isMemberOfB) {\n                    return -1;\n                }\n                if (!isMemberOfA && isMemberOfB) {\n                    return 1;\n                }\n                const cleanedAName = cleanSearchTerm(a.name || '');\n                const cleanedBName = cleanSearchTerm(b.name || '');\n                if (cleanedAName.startsWith(cleanedSearchTerm) && !cleanedBName.startsWith(cleanedSearchTerm)) {\n                    return -1;\n                }\n                if (!cleanedAName.startsWith(cleanedSearchTerm) && cleanedBName.startsWith(cleanedSearchTerm)) {\n                    return 1;\n                }\n                if (cleanedAName < cleanedBName) {\n                    return -1;\n                }\n                if (cleanedAName > cleanedBName) {\n                    return 1;\n                }\n                return a.id - b.id;\n            };\n        }\n\n        /**\n         * Load the previews of the specified threads. Basically, it fetches the\n         * last messages, since they are used to display inline content of them.\n         *\n         * @static\n         * @param {mail.thread[]} threads\n         */\n        static async loadPreviews(threads) {\n            const channelIds = threads.reduce((list, thread) => {\n                if (thread.model === 'mail.channel') {\n                    return list.concat(thread.id);\n                }\n                return list;\n            }, []);\n            if (channelIds.length === 0) {\n                return;\n            }\n            const channelPreviews = await this.env.services.rpc({\n                model: 'mail.channel',\n                method: 'channel_fetch_preview',\n                args: [channelIds],\n            }, { shadow: true });\n            this.messaging.models['mail.message'].insert(channelPreviews.filter(p => p.last_message).map(\n                channelPreview => this.messaging.models['mail.message'].convertData(channelPreview.last_message)\n            ));\n        }\n\n        /**\n         * Performs the `channel_fold` RPC on `mail.channel`.\n         *\n         * @static\n         * @param {string} uuid\n         * @param {string} state\n         */\n        static async performRpcChannelFold(uuid, state) {\n            return this.env.services.rpc({\n                model: 'mail.channel',\n                method: 'channel_fold',\n                kwargs: {\n                    state,\n                    uuid,\n                }\n            }, { shadow: true });\n        }\n\n        /**\n         * Performs the `channel_info` RPC on `mail.channel`.\n         *\n         * @static\n         * @param {Object} param0\n         * @param {integer[]} param0.ids list of id of channels\n         * @returns {mail.thread[]}\n         */\n        static async performRpcChannelInfo({ ids }) {\n            const channelInfos = await this.env.services.rpc({\n                model: 'mail.channel',\n                method: 'channel_info',\n                args: [ids],\n            }, { shadow: true });\n            const channels = this.messaging.models['mail.thread'].insert(\n                channelInfos.map(channelInfo => this.messaging.models['mail.thread'].convertData(channelInfo))\n            );\n            return channels;\n        }\n\n        /**\n         * Performs the `/mail/channel/set_last_seen_message` RPC.\n         *\n         * @static\n         * @param {Object} param0\n         * @param {integer} param0.id id of channel\n         * @param {integer[]} param0.lastMessageId\n         */\n        static async performRpcChannelSeen({ id, lastMessageId }) {\n            return this.env.services.rpc({\n                route: `/mail/channel/set_last_seen_message`,\n                params: {\n                    channel_id: id,\n                    last_message_id: lastMessageId,\n                },\n            }, { shadow: true });\n        }\n\n        /**\n         * Performs the `channel_pin` RPC on `mail.channel`.\n         *\n         * @static\n         * @param {Object} param0\n         * @param {boolean} [param0.pinned=false]\n         * @param {string} param0.uuid\n         */\n        static async performRpcChannelPin({ pinned = false, uuid }) {\n            return this.env.services.rpc({\n                model: 'mail.channel',\n                method: 'channel_pin',\n                kwargs: {\n                    uuid,\n                    pinned,\n                },\n            }, { shadow: true });\n        }\n\n        /**\n         * Performs the `channel_create` RPC on `mail.channel`.\n         *\n         * @static\n         * @param {Object} param0\n         * @param {string} param0.name\n         * @param {string} [param0.privacy]\n         * @returns {mail.thread} the created channel\n         */\n        static async performRpcCreateChannel({ name, privacy }) {\n            const device = this.messaging.device;\n            const data = await this.env.services.rpc({\n                model: 'mail.channel',\n                method: 'channel_create',\n                args: [name, privacy],\n                kwargs: {\n                    context: Object.assign({}, this.env.session.user_content, {\n                        // optimize the return value by avoiding useless queries\n                        // in non-mobile devices\n                        isMobile: device.isMobile,\n                    }),\n                },\n            });\n            return this.messaging.models['mail.thread'].insert(\n                this.messaging.models['mail.thread'].convertData(data)\n            );\n        }\n\n        /**\n         * Performs the `channel_get` RPC on `mail.channel`.\n         *\n         * `openChat` is preferable in business code because it will avoid the\n         * RPC if the chat already exists.\n         *\n         * @static\n         * @param {Object} param0\n         * @param {integer[]} param0.partnerIds\n         * @param {boolean} [param0.pinForCurrentPartner]\n         * @returns {mail.thread|undefined} the created or existing chat\n         */\n        static async performRpcCreateChat({ partnerIds, pinForCurrentPartner }) {\n            const device = this.messaging.device;\n            // TODO FIX: potential duplicate chat task-2276490\n            const data = await this.env.services.rpc({\n                model: 'mail.channel',\n                method: 'channel_get',\n                kwargs: {\n                    context: Object.assign({}, this.env.session.user_content, {\n                        // optimize the return value by avoiding useless queries\n                        // in non-mobile devices\n                        isMobile: device.isMobile,\n                    }),\n                    partners_to: partnerIds,\n                    pin: pinForCurrentPartner,\n                },\n            });\n            if (!data) {\n                return;\n            }\n            return this.messaging.models['mail.thread'].insert(\n                this.messaging.models['mail.thread'].convertData(data)\n            );\n        }\n\n        /**\n         * Performs the rpc to leave the rtc call of the channel.\n         */\n        async performRpcLeaveCall() {\n            await this.async(() => this.env.services.rpc({\n                route: '/mail/rtc/channel/leave_call',\n                params: { channel_id: this.id },\n            }, { shadow: true }));\n        }\n\n        /**\n         * Performs RPC on the route `/mail/get_suggested_recipients`.\n         *\n         * @static\n         * @param {Object} param0\n         * @param {string} param0.model\n         * @param {integer[]} param0.res_id\n         */\n        static async performRpcMailGetSuggestedRecipients({ model, res_ids }) {\n            const data = await this.env.services.rpc({\n                route: '/mail/get_suggested_recipients',\n                params: {\n                    model,\n                    res_ids,\n                },\n            }, { shadow: true });\n            for (const id in data) {\n                const recipientInfoList = data[id].map(recipientInfoData => {\n                    const [partner_id, emailInfo, reason] = recipientInfoData;\n                    const [name, email] = emailInfo && mailUtils.parseEmail(emailInfo);\n                    return {\n                        email,\n                        id: getSuggestedRecipientInfoNextTemporaryId(),\n                        name,\n                        partner: partner_id ? insert({ id: partner_id }) : unlink(),\n                        reason,\n                    };\n                });\n                this.insert({\n                    id: parseInt(id),\n                    model,\n                    suggestedRecipientInfoList: insertAndReplace(recipientInfoList),\n                });\n            }\n        }\n\n        /**\n         * Search for thread matching `searchTerm`.\n         *\n         * @static\n         * @param {Object} param0\n         * @param {integer} param0.limit\n         * @param {string} param0.searchTerm\n         */\n        static async searchChannelsToOpen({ limit, searchTerm }) {\n            const domain = [\n                ['channel_type', '=', 'channel'],\n                ['name', 'ilike', searchTerm],\n            ];\n            const fields = ['channel_type', 'name'];\n            const channelsData = await this.env.services.rpc({\n                model: \"mail.channel\",\n                method: \"search_read\",\n                kwargs: {\n                    domain,\n                    fields,\n                    limit,\n                },\n            });\n            return this.insert(channelsData.map(\n                channelData => this.convertData(channelData)\n            ));\n        }\n\n        /*\n         * Returns threads that match the given search term. More specially only\n         * threads of model 'mail.channel' are suggested, and if the context\n         * thread is a private channel, only itself is returned if it matches\n         * the search term.\n         *\n         * @static\n         * @param {string} searchTerm\n         * @param {Object} [options={}]\n         * @param {mail.thread} [options.thread] prioritize and/or restrict\n         *  result in the context of given thread\n         * @returns {[mail.threads[], mail.threads[]]}\n         */\n        static searchSuggestions(searchTerm, { thread } = {}) {\n            let threads;\n            if (thread && thread.model === 'mail.channel' && thread.public !== 'public') {\n                // Only return the current channel when in the context of a\n                // non-public channel. Indeed, the message with the mention\n                // would appear in the target channel, so this prevents from\n                // inadvertently leaking the private message into the mentioned\n                // channel.\n                threads = [thread];\n            } else {\n                threads = this.messaging.models['mail.thread'].all();\n            }\n            const cleanedSearchTerm = cleanSearchTerm(searchTerm);\n            return [threads.filter(thread =>\n                !thread.isTemporary &&\n                thread.model === 'mail.channel' &&\n                thread.channel_type === 'channel' &&\n                thread.displayName &&\n                cleanSearchTerm(thread.displayName).includes(cleanedSearchTerm)\n            )];\n        }\n\n         /**\n          * Fetch attachments linked to a record. Useful for populating the store\n          * with these attachments, which are used by attachment box in the chatter.\n          */\n        async fetchAttachments() {\n            return this.fetchData(['attachments']);\n        }\n\n        /**\n         * Requests the given `requestList` data from the server.\n         *\n         * @param {string[]} requestList\n         */\n        async fetchData(requestList) {\n            if (this.isTemporary) {\n                return;\n            }\n            const requestSet = new Set(requestList);\n            if (requestSet.has('attachments')) {\n                this.update({ isLoadingAttachments: true });\n            }\n            const {\n                attachments: attachmentsData,\n            } = await this.env.services.rpc({\n                route: '/mail/thread/data',\n                params: {\n                    request_list: [...requestSet],\n                    thread_id: this.id,\n                    thread_model: this.model,\n                },\n            }, { shadow: true });\n            if (!this.exists()) {\n                return;\n            }\n            const values = {};\n            if (attachmentsData) {\n                Object.assign(values, {\n                    areAttachmentsLoaded: true,\n                    isLoadingAttachments: false,\n                    originThreadAttachments: insertAndReplace(attachmentsData),\n                });\n            }\n            this.update(values);\n        }\n\n        /**\n         * Fetches suggested recipients.\n         */\n        async fetchAndUpdateSuggestedRecipients() {\n            if (this.isTemporary) {\n                return;\n            }\n            return this.messaging.models['mail.thread'].performRpcMailGetSuggestedRecipients({\n                model: this.model,\n                res_ids: [this.id],\n            });\n        }\n\n        /**\n         * Add current user to provided thread's followers.\n         */\n        async follow() {\n            await this.async(() => this.env.services.rpc({\n                model: this.model,\n                method: 'message_subscribe',\n                args: [[this.id]],\n                kwargs: {\n                    partner_ids: [this.messaging.currentPartner.id],\n                },\n            }));\n            this.refreshFollowers();\n            this.fetchAndUpdateSuggestedRecipients();\n        }\n\n        /**\n         * Leaves the current call if there is one, joins the call if the user was\n         * not yet in it.\n         *\n         * @param {Object} options\n         */\n        async toggleCall(options) {\n            this.update({ hasPendingRtcRequest: true });\n            const isActiveCall = !!this.rtc;\n            if (this.messaging.rtc.channel) {\n                await this.messaging.rtc.channel.leaveCall();\n            }\n            if (isActiveCall) {\n                this.update({ hasPendingRtcRequest: false });\n                return;\n            }\n            await this._joinCall(options);\n            this.update({ hasPendingRtcRequest: false });\n        }\n\n        /**\n         * @param {Object} [param0]\n         * @param {boolean} [param0.startWithVideo] whether or not to start the call with the video\n         * @param {boolean} [param0.videoType] type of the video: 'user-video' or 'display'\n         */\n        async _joinCall({ startWithVideo = false, videoType } = {}) {\n            if (this.model !== 'mail.channel') {\n                return;\n            }\n            if (!this.messaging.rtc.isClientRtcCompatible) {\n                this.env.services.notification.notify({\n                    message: this.env._t(\"Your browser does not support webRTC.\"),\n                    type: 'warning',\n                });\n                return;\n            }\n            const { rtcSessions, iceServers, sessionId, invitedPartners, invitedGuests } = await this.async(() => this.env.services.rpc({\n                route: '/mail/rtc/channel/join_call',\n                params: {\n                    channel_id: this.id,\n                    check_rtc_session_ids: this.rtcSessions.map(rtcSession => rtcSession.id),\n                },\n            }, { shadow: true }));\n            if (!this.exists()) {\n                return;\n            }\n            this.update({\n                rtc: link(this.messaging.rtc),\n                rtcInvitingSession: unlink(),\n                rtcSessions,\n                invitedGuests,\n                invitedPartners,\n            });\n            await this.async(() => this.messaging.rtc.initSession({\n                currentSessionId: sessionId,\n                iceServers,\n                startWithAudio: true,\n                startWithVideo,\n                videoType,\n            }));\n            this.messaging.soundEffects.channelJoin.play();\n        }\n\n        /**\n         * Notifies the server and does the cleanup of the current call.\n         */\n        async leaveCall() {\n            await this.performRpcLeaveCall();\n            this.endCall();\n        }\n\n        /**\n         * @param {Array<Object>} rtcSessions server representation of the current rtc sessions of the channel\n         */\n        updateRtcSessions(rtcSessions) {\n            const oldCount = this.rtcSessions.length;\n            this.update({ rtcSessions });\n            if (this.rtc) {\n                const newCount = this.rtcSessions.length;\n                if (newCount > oldCount) {\n                    this.messaging.soundEffects.channelJoin.play();\n                }\n                if (newCount < oldCount) {\n                    this.messaging.soundEffects.memberLeave.play();\n                }\n            }\n            this.rtc && this.rtc.filterCallees(this.rtcSessions);\n            if (this.rtc && !this.rtc.currentRtcSession) {\n                this.endCall();\n            }\n        }\n\n        /**\n         * Returns the name of the given partner in the context of this thread.\n         *\n         * @param {mail.partner} partner\n         * @returns {string}\n         */\n        getMemberName(partner) {\n            return partner.nameOrDisplayName;\n        }\n\n        /**\n         * Returns the text that identifies this thread in a mention.\n         *\n         * @returns {string}\n         */\n        getMentionText() {\n            return this.name;\n        }\n\n        /**\n         * Joins this thread. Only makes sense on channels of type channel.\n         */\n        async join() {\n            await this.env.services.rpc({\n                model: 'mail.channel',\n                method: 'add_members',\n                args: [[this.id]],\n                kwargs: { partner_ids: [this.messaging.currentPartner.id] }\n            });\n        }\n\n        /**\n         * Leaves this thread. Only makes sense on channels of type channel.\n         */\n        async leave() {\n            await this.env.services.rpc({\n                model: 'mail.channel',\n                method: 'action_unfollow',\n                args: [[this.id]],\n            });\n        }\n\n        /**\n         * Load new messages on the main cache of this thread.\n         */\n        loadNewMessages() {\n            this.cache.loadNewMessages();\n        }\n\n        /**\n         * Mark the specified conversation as fetched.\n         */\n        async markAsFetched() {\n            await this.async(() => this.env.services.rpc({\n                model: 'mail.channel',\n                method: 'channel_fetched',\n                args: [[this.id]],\n            }, { shadow: true }));\n        }\n\n        /**\n         * Mark the specified conversation as read/seen.\n         *\n         * @param {mail.message} message the message to be considered as last seen.\n         */\n        async markAsSeen(message) {\n            if (this.messaging.currentGuest) {\n                return;\n            }\n            if (this.model !== 'mail.channel') {\n                return;\n            }\n            if (this.pendingSeenMessageId && message.id <= this.pendingSeenMessageId) {\n                return;\n            }\n            if (\n                this.lastSeenByCurrentPartnerMessageId &&\n                message.id <= this.lastSeenByCurrentPartnerMessageId\n            ) {\n                return;\n            }\n            this.update({ pendingSeenMessageId: message.id });\n            return this.messaging.models['mail.thread'].performRpcChannelSeen({\n                id: this.id,\n                lastMessageId: message.id,\n            });\n        }\n\n        /**\n         * Marks as read all needaction messages with this thread as origin.\n         */\n        async markNeedactionMessagesAsOriginThreadAsRead() {\n            await this.async(() =>\n                this.messaging.models['mail.message'].markAsRead(this.needactionMessagesAsOriginThread)\n            );\n        }\n\n        /**\n         * Notifies the server of new fold state. Useful for initial,\n         * cross-tab, and cross-device chat window state synchronization.\n         *\n         * @param {string} state\n         */\n        async notifyFoldStateToServer(state) {\n            if (this.model !== 'mail.channel') {\n                // Server sync of fold state is only supported for channels.\n                return;\n            }\n            if (!this.uuid) {\n                return;\n            }\n            return this.messaging.models['mail.thread'].performRpcChannelFold(this.uuid, state);\n        }\n\n        /**\n         * Notify server to leave the current channel. Useful for cross-tab\n         * and cross-device chat window state synchronization.\n         *\n         * Only makes sense if isPendingPinned is set to the desired value.\n         */\n        async notifyPinStateToServer() {\n            if (this.channel_type === 'channel') {\n                await this.leave();\n                return;\n            }\n            await this.messaging.models['mail.thread'].performRpcChannelPin({\n                pinned: this.isPendingPinned,\n                uuid: this.uuid,\n            });\n        }\n\n        /**\n         * Handles click on the avatar of the given member in the member list of\n         * this channel.\n         *\n         * @param {mail.partner} member\n         */\n        onClickMemberAvatar(member) {\n            member.openChat();\n        }\n\n        /**\n         * Handles click on the name of the given member in the member list of\n         * this channel.\n         *\n         * @param {mail.partner} member\n         */\n        onClickMemberName(member) {\n            member.openProfile();\n        }\n\n        /**\n         * Opens this thread either as form view, in discuss app, or as a chat\n         * window. The thread will be opened in an \"active\" matter, which will\n         * interrupt current user flow.\n         *\n         * @param {Object} [param0]\n         * @param {boolean} [param0.expanded=false]\n         * @param {boolean} [param0.focus]\n         */\n        async open({ expanded = false, focus } = {}) {\n            const discuss = this.messaging.discuss;\n            // check if thread must be opened in form view\n            if (!['mail.box', 'mail.channel'].includes(this.model)) {\n                if (expanded || discuss.isOpen) {\n                    // Close chat window because having the same thread opened\n                    // both in chat window and as main document does not look\n                    // good.\n                    this.messaging.chatWindowManager.closeThread(this);\n                    await this.messaging.openDocument({\n                        id: this.id,\n                        model: this.model,\n                    });\n                    return;\n                }\n            }\n            // check if thread must be opened in discuss\n            const device = this.messaging.device;\n            if (\n                (!device.isMobile && (discuss.isOpen || expanded)) ||\n                this.model === 'mail.box'\n            ) {\n                return discuss.openThread(this, {\n                    focus: focus !== undefined ? focus : !this.messaging.device.isMobileDevice,\n                });\n            }\n            // thread must be opened in chat window\n            return this.messaging.chatWindowManager.openThread(this, {\n                makeActive: true,\n            });\n        }\n\n        /**\n         * Opens the most appropriate view that is a profile for this thread.\n         */\n        async openProfile() {\n            return this.messaging.openDocument({\n                id: this.id,\n                model: this.model,\n            });\n        }\n\n        /**\n         * Pin this thread and notify server of the change.\n         */\n        async pin() {\n            this.update({ isPendingPinned: true });\n            if (this.messaging.currentGuest) {\n                return;\n            }\n            await this.notifyPinStateToServer();\n        }\n\n        /**\n         * Open a dialog to add partners as followers.\n         */\n        promptAddPartnerFollower() {\n            this._promptAddFollower();\n        }\n\n        async refresh() {\n            if (this.isTemporary) {\n                return;\n            }\n            this.loadNewMessages();\n            await this.async(() => this.fetchAttachments());\n        }\n\n        async refreshActivities() {\n            if (!this.hasActivities) {\n                return;\n            }\n            if (this.isTemporary) {\n                return;\n            }\n            // A bit \"extreme\", may be improved\n            const [{ activity_ids: newActivityIds }] = await this.async(() => this.env.services.rpc({\n                model: this.model,\n                method: 'read',\n                args: [this.id, ['activity_ids']]\n            }, { shadow: true }));\n            const activitiesData = await this.async(() => this.env.services.rpc({\n                model: 'mail.activity',\n                method: 'activity_format',\n                args: [newActivityIds]\n            }, { shadow: true }));\n            const activities = this.messaging.models['mail.activity'].insert(activitiesData.map(\n                activityData => this.messaging.models['mail.activity'].convertData(activityData)\n            ));\n            this.update({ activities: replace(activities) });\n        }\n\n        /**\n         * Refresh followers information from server.\n         */\n        async refreshFollowers() {\n            if (this.isTemporary) {\n                this.update({ followers: unlinkAll() });\n                return;\n            }\n            const { followers } = await this.async(() => this.env.services.rpc({\n                route: '/mail/read_followers',\n                params: {\n                    res_id: this.id,\n                    res_model: this.model,\n                },\n            }, { shadow: true }));\n            this.update({ areFollowersLoaded: true });\n            if (followers.length > 0) {\n                this.update({\n                    followers: insertAndReplace(followers.map(data =>\n                        this.messaging.models['mail.follower'].convertData(data))\n                    ),\n                });\n            } else {\n                this.update({\n                    followers: unlinkAll(),\n                });\n            }\n        }\n\n        /**\n         * Refresh the typing status of the current partner.\n         */\n        refreshCurrentPartnerIsTyping() {\n            this._currentPartnerInactiveTypingTimer.reset();\n        }\n\n        /**\n         * Called to refresh a registered other member partner that is typing\n         * something.\n         *\n         * @param {mail.partner} partner\n         */\n        refreshOtherMemberTypingMember(partner) {\n            this._otherMembersLongTypingTimers.get(partner).reset();\n        }\n\n        /**\n         * Called when current partner is inserting some input in composer.\n         * Useful to notify current partner is currently typing something in the\n         * composer of this thread to all other members.\n         */\n        async registerCurrentPartnerIsTyping() {\n            // Handling of typing timers.\n            this._currentPartnerInactiveTypingTimer.start();\n            this._currentPartnerLongTypingTimer.start();\n            // Manage typing member relation.\n            const currentPartner = this.messaging.currentPartner;\n            const newOrderedTypingMemberLocalIds = this.orderedTypingMemberLocalIds\n                .filter(localId => localId !== currentPartner.localId);\n            newOrderedTypingMemberLocalIds.push(currentPartner.localId);\n            this.update({\n                orderedTypingMemberLocalIds: newOrderedTypingMemberLocalIds,\n                typingMembers: link(currentPartner),\n            });\n            // Notify typing status to other members.\n            await this._throttleNotifyCurrentPartnerTypingStatus({ isTyping: true });\n        }\n\n        /**\n         * Called to register a new other member partner that is typing\n         * something.\n         *\n         * @param {mail.partner} partner\n         */\n        registerOtherMemberTypingMember(partner) {\n            const timer = new Timer(\n                this.env,\n                () => this.async(() => this._onOtherMemberLongTypingTimeout(partner)),\n                60 * 1000\n            );\n            this._otherMembersLongTypingTimers.set(partner, timer);\n            timer.start();\n            const newOrderedTypingMemberLocalIds = this.orderedTypingMemberLocalIds\n                .filter(localId => localId !== partner.localId);\n            newOrderedTypingMemberLocalIds.push(partner.localId);\n            this.update({\n                orderedTypingMemberLocalIds: newOrderedTypingMemberLocalIds,\n                typingMembers: link(partner),\n            });\n        }\n\n        /**\n         * Renames this thread to the given new name.\n         * Only makes sense for channels.\n         *\n         * @param {string} name\n         */\n        async rename(name) {\n            this.update({ name });\n            return this.env.services.rpc({\n                model: 'mail.channel',\n                method: 'channel_rename',\n                args: [[this.id]],\n                kwargs: { name },\n            });\n        }\n\n        /**\n         * Sets the custom name of this thread for the current user to the given\n         * new name.\n         * Only makes sense for channels.\n         *\n         * @param {string} newName\n         */\n        async setCustomName(newName) {\n            return this.env.services.rpc({\n                model: 'mail.channel',\n                method: 'channel_set_custom_name',\n                args: [this.id],\n                kwargs: { name: newName },\n            });\n        }\n\n        /**\n         * Unfollow current partner from this thread.\n         */\n        async unfollow() {\n            const currentPartnerFollower = this.followers.find(\n                follower => follower.partner === this.messaging.currentPartner\n            );\n            await this.async(() => currentPartnerFollower.remove());\n        }\n\n        /**\n         * Unpin this thread and notify server of the change.\n         */\n        async unpin() {\n            this.update({ isPendingPinned: false });\n            if (this.messaging.currentGuest) {\n                return;\n            }\n            await this.notifyPinStateToServer();\n        }\n\n        /**\n         * Called when current partner has explicitly stopped inserting some\n         * input in composer. Useful to notify current partner has currently\n         * stopped typing something in the composer of this thread to all other\n         * members.\n         *\n         * @param {Object} [param0={}]\n         * @param {boolean} [param0.immediateNotify=false] if set, is typing\n         *   status of current partner is immediately notified and doesn't\n         *   consume throttling at all.\n         */\n        async unregisterCurrentPartnerIsTyping({ immediateNotify = false } = {}) {\n            // Handling of typing timers.\n            this._currentPartnerInactiveTypingTimer.clear();\n            this._currentPartnerLongTypingTimer.clear();\n            // Manage typing member relation.\n            const currentPartner = this.messaging.currentPartner;\n            const newOrderedTypingMemberLocalIds = this.orderedTypingMemberLocalIds\n                .filter(localId => localId !== currentPartner.localId);\n            this.update({\n                orderedTypingMemberLocalIds: newOrderedTypingMemberLocalIds,\n                typingMembers: unlink(currentPartner),\n            });\n            // Notify typing status to other members.\n            if (immediateNotify) {\n                this._throttleNotifyCurrentPartnerTypingStatus.clear();\n            }\n            await this.async(\n                () => this._throttleNotifyCurrentPartnerTypingStatus({ isTyping: false })\n            );\n        }\n\n        /**\n         * Called to unregister an other member partner that is no longer typing\n         * something.\n         *\n         * @param {mail.partner} partner\n         */\n        unregisterOtherMemberTypingMember(partner) {\n            this._otherMembersLongTypingTimers.get(partner).clear();\n            this._otherMembersLongTypingTimers.delete(partner);\n            const newOrderedTypingMemberLocalIds = this.orderedTypingMemberLocalIds\n                .filter(localId => localId !== partner.localId);\n            this.update({\n                orderedTypingMemberLocalIds: newOrderedTypingMemberLocalIds,\n                typingMembers: unlink(partner),\n            });\n        }\n\n        /**\n         * Unsubscribe current user from provided channel.\n         */\n        unsubscribe() {\n            this.leaveCall();\n            this.messaging.chatWindowManager.closeThread(this);\n            this.unpin();\n        }\n\n        //----------------------------------------------------------------------\n        // Private\n        //----------------------------------------------------------------------\n\n        /**\n         * @private\n         * @returns {mail.attachment[]}\n         */\n        _computeAllAttachments() {\n            const allAttachments = [...new Set(this.originThreadAttachments.concat(this.attachments))]\n                .sort((a1, a2) => {\n                    // \"uploading\" before \"uploaded\" attachments.\n                    if (!a1.isUploading && a2.isUploading) {\n                        return 1;\n                    }\n                    if (a1.isUploading && !a2.isUploading) {\n                        return -1;\n                    }\n                    // \"most-recent\" before \"oldest\" attachments.\n                    return Math.abs(a2.id) - Math.abs(a1.id);\n                });\n            return replace(allAttachments);\n        }\n\n        /**\n         * @private\n         * @returns {FieldCommand}\n         */\n        _computeComposer() {\n            if (this.model === 'mail.box') {\n                return clear();\n            }\n            return insertAndReplace();\n        }\n\n        /**\n         * @private\n         * @returns {mail.partner}\n         */\n        _computeCorrespondent() {\n            if (this.channel_type === 'channel') {\n                return unlink();\n            }\n            const correspondents = this.members.filter(partner =>\n                partner !== this.messaging.currentPartner\n            );\n            if (correspondents.length === 1) {\n                // 2 members chat\n                return link(correspondents[0]);\n            }\n            if (this.members.length === 1) {\n                // chat with oneself\n                return link(this.members[0]);\n            }\n            return unlink();\n        }\n\n        /**\n         * @private\n         * @returns {FieldCommand}\n         */\n        _computeDiscussSidebarCategoryItem() {\n            if (this.model !== 'mail.channel') {\n                return clear();\n            }\n            if (!this.isPinned) {\n                return clear();\n            }\n            const discussSidebarCategory = this._getDiscussSidebarCategory();\n            if (!discussSidebarCategory) {\n                return clear();\n            }\n            return insertAndReplace({ category: replace(discussSidebarCategory) });\n        }\n\n        /**\n         * @private\n         * @returns {string}\n         */\n        _computeDisplayName() {\n            if (this.channel_type === 'chat' && this.correspondent) {\n                return this.custom_channel_name || this.correspondent.nameOrDisplayName;\n            }\n            if (this.channel_type === 'group' && !this.name) {\n                const partnerNames = this.members.map(partner => partner.nameOrDisplayName);\n                const guestNames = this.guestMembers.map(guest => guest.name);\n                return [...partnerNames, ...guestNames].join(this.env._t(\", \"));\n            }\n            return this.name;\n        }\n\n        /**\n         * @private\n         * @returns {Object}\n         */\n        _computeFetchMessagesParams() {\n            if (this.model === 'mail.box') {\n                return {};\n            }\n            if (this.model === 'mail.channel') {\n                return { 'channel_id': this.id };\n            }\n            return {\n                'thread_id': this.id,\n                'thread_model': this.model,\n            };\n        }\n\n        /**\n         * @private\n         * @returns {string}\n         */\n        _computeFetchMessagesUrl() {\n            switch (this) {\n                case this.messaging.inbox:\n                    return '/mail/inbox/messages';\n                case this.messaging.history:\n                    return '/mail/history/messages';\n                case this.messaging.starred:\n                    return '/mail/starred/messages';\n            }\n            if (this.model === 'mail.channel') {\n                return `/mail/channel/messages`;\n            }\n            return `/mail/thread/messages`;\n        }\n\n        /**\n         * @private\n         * @returns {mail.activity[]}\n         */\n        _computeFutureActivities() {\n            return replace(this.activities.filter(activity => activity.state === 'planned'));\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeHasCallFeature() {\n            return ['channel', 'chat', 'group'].includes(this.channel_type);\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeHasInviteFeature() {\n            return this.model === 'mail.channel';\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeHasSeenIndicators() {\n            if (this.model !== 'mail.channel') {\n                return false;\n            }\n            return ['chat', 'livechat'].includes(this.channel_type);\n        }\n\n        /**\n        * @private\n        * @returns {boolean}\n        */\n        _computeIsChannelDescriptionChangeable() {\n            return this.model === 'mail.channel' && ['channel', 'group'].includes(this.channel_type);\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeIsDescriptionEditableByCurrentUser() {\n            return Boolean(\n                this.messaging.currentUser &&\n                this.messaging.currentUser.isInternalUser &&\n                this.isChannelDescriptionChangeable\n            );\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeIsChannelRenamable() {\n            return (\n                this.model === 'mail.channel' &&\n                ['chat', 'channel', 'group'].includes(this.channel_type)\n            );\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeHasMemberListFeature() {\n            return this.model === 'mail.channel' && ['channel', 'group'].includes(this.channel_type);\n        }\n\n        /**\n         * @returns {string}\n         */\n        _computeInvitationLink() {\n            if (!this.uuid || !this.channel_type || this.channel_type === 'chat') {\n                return clear();\n            }\n            return `${window.location.origin}/chat/${this.id}/${this.uuid}`;\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeIsChatChannel() {\n            return this.channel_type === 'chat' || this.channel_type === 'group';\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeIsCurrentPartnerFollowing() {\n            return this.followers.some(follower =>\n                follower.partner && follower.partner === this.messaging.currentPartner\n            );\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeIsPinned() {\n            return this.isPendingPinned !== undefined ? this.isPendingPinned : this.isServerPinned;\n        }\n\n        /**\n         * @private\n         * @returns {mail.message}\n         */\n        _computeLastCurrentPartnerMessageSeenByEveryone() {\n            const otherPartnerSeenInfos =\n                this.partnerSeenInfos.filter(partnerSeenInfo =>\n                    partnerSeenInfo.partner !== this.messaging.currentPartner);\n            if (otherPartnerSeenInfos.length === 0) {\n                return unlinkAll();\n            }\n\n            const otherPartnersLastSeenMessageIds =\n                otherPartnerSeenInfos.map(partnerSeenInfo =>\n                    partnerSeenInfo.lastSeenMessage ? partnerSeenInfo.lastSeenMessage.id : 0\n                );\n            if (otherPartnersLastSeenMessageIds.length === 0) {\n                return unlinkAll();\n            }\n            const lastMessageSeenByAllId = Math.min(\n                ...otherPartnersLastSeenMessageIds\n            );\n            const currentPartnerOrderedSeenMessages =\n                this.orderedNonTransientMessages.filter(message =>\n                    message.author === this.messaging.currentPartner &&\n                    message.id <= lastMessageSeenByAllId);\n\n            if (\n                !currentPartnerOrderedSeenMessages ||\n                currentPartnerOrderedSeenMessages.length === 0\n            ) {\n                return unlinkAll();\n            }\n            return link(currentPartnerOrderedSeenMessages.slice().pop());\n        }\n\n        /**\n         * @private\n         * @returns {mail.message|undefined}\n         */\n        _computeLastMessage() {\n            const {\n                length: l,\n                [l - 1]: lastMessage,\n            } = this.orderedMessages;\n            if (lastMessage) {\n                return link(lastMessage);\n            }\n            return unlink();\n        }\n\n        /**\n         * @private\n         * @returns {mail.message|undefined}\n         */\n        _computeLastNonTransientMessage() {\n            const {\n                length: l,\n                [l - 1]: lastMessage,\n            } = this.orderedNonTransientMessages;\n            if (lastMessage) {\n                return link(lastMessage);\n            }\n            return unlink();\n        }\n\n        /**\n         * Adjusts the last seen message received from the server to consider\n         * the following messages also as read if they are either transient\n         * messages or messages from the current partner.\n         *\n         * @private\n         * @returns {integer}\n         */\n        _computeLastSeenByCurrentPartnerMessageId() {\n            const firstMessage = this.orderedMessages[0];\n            if (\n                firstMessage &&\n                this.lastSeenByCurrentPartnerMessageId &&\n                this.lastSeenByCurrentPartnerMessageId < firstMessage.id\n            ) {\n                // no deduction can be made if there is a gap\n                return this.lastSeenByCurrentPartnerMessageId;\n            }\n            let lastSeenByCurrentPartnerMessageId = this.lastSeenByCurrentPartnerMessageId;\n            for (const message of this.orderedMessages) {\n                if (message.id <= this.lastSeenByCurrentPartnerMessageId) {\n                    continue;\n                }\n                if (\n                    (message.author && this.messaging.currentPartner && message.author === this.messaging.currentPartner) ||\n                    (message.guestAuthor && this.messaging.currentGuest && message.guestAuthor === this.messaging.currentGuest) ||\n                    message.isTransient\n                ) {\n                    lastSeenByCurrentPartnerMessageId = message.id;\n                    continue;\n                }\n                return lastSeenByCurrentPartnerMessageId;\n            }\n            return lastSeenByCurrentPartnerMessageId;\n        }\n\n        /**\n         * @private\n         * @returns {mail.message|undefined}\n         */\n        _computeLastNeedactionMessageAsOriginThread() {\n            const orderedNeedactionMessagesAsOriginThread = this.needactionMessagesAsOriginThread.sort(\n                (m1, m2) => m1.id < m2.id ? -1 : 1\n            );\n            const {\n                length: l,\n                [l - 1]: lastNeedactionMessageAsOriginThread,\n            } = orderedNeedactionMessagesAsOriginThread;\n            if (lastNeedactionMessageAsOriginThread) {\n                return link(lastNeedactionMessageAsOriginThread);\n            }\n            return unlink();\n        }\n\n        /**\n         * @private\n         * @returns {integer}\n         */\n        _computeLocalMessageUnreadCounter() {\n            if (this.model !== 'mail.channel') {\n                // unread counter only makes sense on channels\n                return clear();\n            }\n            // By default trust the server up to the last message it used\n            // because it's not possible to do better.\n            let baseCounter = this.serverMessageUnreadCounter;\n            let countFromId = this.serverLastMessage ? this.serverLastMessage.id : 0;\n            // But if the client knows the last seen message that the server\n            // returned (and by assumption all the messages that come after),\n            // the counter can be computed fully locally, ignoring potentially\n            // obsolete values from the server.\n            const firstMessage = this.orderedMessages[0];\n            if (\n                firstMessage &&\n                this.lastSeenByCurrentPartnerMessageId &&\n                this.lastSeenByCurrentPartnerMessageId >= firstMessage.id\n            ) {\n                baseCounter = 0;\n                countFromId = this.lastSeenByCurrentPartnerMessageId;\n            }\n            // Include all the messages that are known locally but the server\n            // didn't take into account.\n            return this.orderedMessages.reduce((total, message) => {\n                if (message.id <= countFromId) {\n                    return total;\n                }\n                return total + 1;\n            }, baseCounter);\n        }\n\n        /**\n         * @private\n         * @returns {FieldCommand}\n         */\n        _computeMessagingAsRingingThread() {\n            if (this.rtcInvitingSession) {\n                return replace(this.messaging);\n            }\n            return clear();\n        }\n\n        /**\n         * @private\n         * @returns {FieldCommand}\n         */\n        _computeMessagingMenuAsPinnedAndUnreadChannel() {\n            if (!this.messaging.messagingMenu) {\n                return clear();\n            }\n            return (this.model === 'mail.channel' && this.isPinned && this.localMessageUnreadCounter > 0)\n                ? replace(this.messaging.messagingMenu)\n                : clear();\n        }\n\n        /**\n         * @private\n         * @returns {mail.message[]}\n         */\n        _computeNeedactionMessagesAsOriginThread() {\n            return replace(this.messagesAsOriginThread.filter(message => message.isNeedaction));\n        }\n\n        /**\n         * @private\n         * @returns {mail.message|undefined}\n         */\n        _computeMessageAfterNewMessageSeparator() {\n            if (this.model !== 'mail.channel') {\n                return unlink();\n            }\n            if (this.localMessageUnreadCounter === 0) {\n                return unlink();\n            }\n            const index = this.orderedMessages.findIndex(message =>\n                message.id === this.lastSeenByCurrentPartnerMessageId\n            );\n            if (index === -1) {\n                return unlink();\n            }\n            const message = this.orderedMessages[index + 1];\n            if (!message) {\n                return unlink();\n            }\n            return link(message);\n        }\n\n        /**\n         * @private\n         * @returns {mail.partner[]}\n         */\n        _computeOrderedOfflineMembers() {\n            return replace(this._sortMembers(this.members.filter(member => !member.isOnline)));\n        }\n\n        /**\n         * @private\n         * @returns {mail.partner[]}\n         */\n        _computeOrderedOnlineMembers() {\n            return replace(this._sortMembers(this.members.filter(member => member.isOnline)));\n        }\n\n        /**\n         * @private\n         * @returns {mail.message[]}\n         */\n        _computeOrderedMessages() {\n            return replace(this.messages.sort((m1, m2) => m1.id < m2.id ? -1 : 1));\n        }\n\n        /**\n         * @private\n         * @returns {mail.message[]}\n         */\n        _computeOrderedNonTransientMessages() {\n            return replace(this.orderedMessages.filter(m => !m.isTransient));\n        }\n\n        /**\n         * @private\n         * @returns {mail.partner[]}\n         */\n        _computeOrderedOtherTypingMembers() {\n            return replace(this.orderedTypingMembers.filter(\n                member => member !== this.messaging.currentPartner\n            ));\n        }\n\n        /**\n         * @private\n         * @returns {mail.partner[]}\n         */\n        _computeOrderedTypingMembers() {\n            return [[\n                'replace',\n                this.orderedTypingMemberLocalIds\n                    .map(localId => this.messaging.models['mail.partner'].get(localId))\n                    .filter(member => !!member),\n            ]];\n        }\n\n        /**\n         * @private\n         * @returns {mail.activity[]}\n         */\n        _computeOverdueActivities() {\n            return replace(this.activities.filter(activity => activity.state === 'overdue'));\n        }\n\n        /**\n         * @private\n         * @returns {mail.activity[]}\n         */\n        _computeTodayActivities() {\n            return replace(this.activities.filter(activity => activity.state === 'today'));\n        }\n\n        /**\n         * @private\n         * @returns {string}\n         */\n        _computeTypingStatusText() {\n            if (this.orderedOtherTypingMembers.length === 0) {\n                return this.constructor.fields.typingStatusText.default;\n            }\n            if (this.orderedOtherTypingMembers.length === 1) {\n                return _.str.sprintf(\n                    this.env._t(\"%s is typing...\"),\n                    this.getMemberName(this.orderedOtherTypingMembers[0])\n                );\n            }\n            if (this.orderedOtherTypingMembers.length === 2) {\n                return _.str.sprintf(\n                    this.env._t(\"%s and %s are typing...\"),\n                    this.getMemberName(this.orderedOtherTypingMembers[0]),\n                    this.getMemberName(this.orderedOtherTypingMembers[1])\n                );\n            }\n            return _.str.sprintf(\n                this.env._t(\"%s, %s and more are typing...\"),\n                this.getMemberName(this.orderedOtherTypingMembers[0]),\n                this.getMemberName(this.orderedOtherTypingMembers[1])\n            );\n        }\n\n        /**\n         * @private\n         * @returns {integer}\n         */\n        _computeUnknownMemberCount() {\n            return this.memberCount - this.members.length;\n        }\n\n        /**\n         * Compute an url string that can be used inside a href attribute\n         *\n         * @private\n         * @returns {string}\n         */\n        _computeUrl() {\n            const baseHref = this.env.session.url('/web');\n            if (this.model === 'mail.channel') {\n                return `${baseHref}#action=mail.action_discuss&active_id=${this.model}_${this.id}`;\n            }\n            return `${baseHref}#model=${this.model}&id=${this.id}`;\n        }\n\n        /**\n         * @private\n         * @returns {number}\n         */\n        _computeVideoCount() {\n            return this.rtcSessions.filter(session => session.videoStream).length;\n        }\n\n        /**\n         * Returns the discuss sidebar category that corresponds to this channel\n         * type.\n         *\n         * @private\n         * @returns {mail.discuss_sidebar_category}\n         */\n        _getDiscussSidebarCategory() {\n            switch (this.channel_type) {\n                case 'channel':\n                    return this.messaging.discuss.categoryChannel;\n                case 'chat':\n                case 'group':\n                    return this.messaging.discuss.categoryChat;\n            }\n        }\n\n        /**\n         * @private\n         * @param {Object} param0\n         * @param {boolean} param0.isTyping\n         */\n        async _notifyCurrentPartnerTypingStatus({ isTyping }) {\n            if (\n                this._forceNotifyNextCurrentPartnerTypingStatus ||\n                isTyping !== this._currentPartnerLastNotifiedIsTyping\n            ) {\n                if (this.model === 'mail.channel') {\n                    await this.async(() => this.env.services.rpc({\n                        model: 'mail.channel',\n                        method: 'notify_typing',\n                        args: [this.id],\n                        kwargs: { is_typing: isTyping },\n                    }, { shadow: true }));\n                }\n                if (isTyping && this._currentPartnerLongTypingTimer.isRunning) {\n                    this._currentPartnerLongTypingTimer.reset();\n                }\n            }\n            this._forceNotifyNextCurrentPartnerTypingStatus = false;\n            this._currentPartnerLastNotifiedIsTyping = isTyping;\n        }\n\n        /**\n         * @private\n         */\n        _onChangeLastSeenByCurrentPartnerMessageId() {\n            this.messaging.messagingBus.trigger('o-thread-last-seen-by-current-partner-message-id-changed', {\n                thread: this,\n            });\n        }\n\n        /**\n         * Handles change of pinned state coming from the server. Useful to\n         * clear pending state once server acknowledged the change.\n         *\n         * @private\n         * @see isPendingPinned\n         */\n        _onIsServerPinnedChanged() {\n            if (this.isServerPinned === this.isPendingPinned) {\n                this.update({ isPendingPinned: clear() });\n            }\n        }\n\n        /**\n         * Handles change of fold state coming from the server. Useful to\n         * synchronize corresponding chat window.\n         *\n         * @private\n         */\n        _onServerFoldStateChanged() {\n            if (!this.messaging.chatWindowManager) {\n                // avoid crash during destroy\n                return;\n            }\n            if (this.messaging.device.isMobile) {\n                return;\n            }\n            if (this.serverFoldState === 'closed') {\n                this.messaging.chatWindowManager.closeThread(this, {\n                    notifyServer: false,\n                });\n            } else {\n                this.messaging.chatWindowManager.openThread(this, {\n                    isFolded: this.serverFoldState === 'folded',\n                    notifyServer: false,\n                });\n            }\n        }\n\n        /**\n         * @private\n         */\n        _promptAddFollower() {\n            const action = {\n                type: 'ir.actions.act_window',\n                res_model: 'mail.wizard.invite',\n                view_mode: 'form',\n                views: [[false, 'form']],\n                name: this.env._t(\"Invite Follower\"),\n                target: 'new',\n                context: {\n                    default_res_model: this.model,\n                    default_res_id: this.id,\n                },\n            };\n            this.env.bus.trigger('do-action', {\n                action,\n                options: {\n                    on_close: async () => {\n                       await this.async(() => this.refreshFollowers());\n                       this.env.bus.trigger('mail.thread:promptAddFollower-closed');\n                    },\n                },\n            });\n        }\n\n        /**\n         * @private\n         * @returns {Array[]}\n         */\n        _sortGuestMembers() {\n            return [\n                ['defined-first', 'name'],\n                ['case-insensitive-asc', 'name'],\n            ];\n        }\n\n        /**\n         * @private\n         * @returns {Array[]}\n         */\n        _sortPartnerMembers() {\n            return [\n                ['defined-first', 'nameOrDisplayName'],\n                ['case-insensitive-asc', 'nameOrDisplayName'],\n            ];\n        }\n\n        /**\n         * @private\n         * @param {mail.partner[]} members\n         * @returns {mail.partner[]}\n         */\n        _sortMembers(members) {\n            return [...members].sort((a, b) => {\n                const cleanedAName = cleanSearchTerm(a.nameOrDisplayName || '');\n                const cleanedBName = cleanSearchTerm(b.nameOrDisplayName || '');\n                if (cleanedAName < cleanedBName) {\n                    return -1;\n                }\n                if (cleanedAName > cleanedBName) {\n                    return 1;\n                }\n                return a.id - b.id;\n            });\n        }\n\n        //----------------------------------------------------------------------\n        // Handlers\n        //----------------------------------------------------------------------\n\n        /**\n         * Event handler for clicking thread in discuss app.\n         */\n        async onClick() {\n            await this.open();\n        }\n\n        /**\n         * Handles click on the \"load more members\" button.\n         */\n        async onClickLoadMoreMembers() {\n            const members = await this.env.services.rpc({\n                model: 'mail.channel',\n                method: 'load_more_members',\n                args: [[this.id]],\n                kwargs: {\n                    'known_member_ids': this.members.map(partner => partner.id),\n                },\n            });\n            this.update({ members });\n        }\n\n        /**\n         * @private\n         */\n        async _onCurrentPartnerInactiveTypingTimeout() {\n            await this.async(() => this.unregisterCurrentPartnerIsTyping());\n        }\n\n        /**\n         * Called when current partner has been typing for a very long time.\n         * Immediately notify other members that he/she is still typing.\n         *\n         * @private\n         */\n        async _onCurrentPartnerLongTypingTimeout() {\n            this._forceNotifyNextCurrentPartnerTypingStatus = true;\n            this._throttleNotifyCurrentPartnerTypingStatus.clear();\n            await this.async(\n                () => this._throttleNotifyCurrentPartnerTypingStatus({ isTyping: true })\n            );\n        }\n\n        /**\n         * @private\n         * @param {mail.partner} partner\n         */\n        async _onOtherMemberLongTypingTimeout(partner) {\n            if (!this.typingMembers.includes(partner)) {\n                this._otherMembersLongTypingTimers.delete(partner);\n                return;\n            }\n            this.unregisterOtherMemberTypingMember(partner);\n        }\n\n    }\n\n    Thread.fields = {\n        /**\n         * Determines the `mail.activity` that belong to `this`, assuming `this`\n         * has activities (@see hasActivities).\n         */\n        activities: one2many('mail.activity', {\n            inverse: 'thread',\n        }),\n        allAttachments: many2many('mail.attachment', {\n            compute: '_computeAllAttachments',\n        }),\n        areAttachmentsLoaded: attr({\n            default: false,\n        }),\n        /**\n         * States whether followers have been loaded at least once for this\n         * thread.\n         */\n        areFollowersLoaded: attr({\n            default: false,\n        }),\n        attachments: many2many('mail.attachment', {\n            inverse: 'threads',\n        }),\n        /**\n         * Cache key to force a reload of the avatar when avatar is changed.\n         * It only makes sense for channels.\n         */\n        avatarCacheKey: attr(),\n        cache: one2one('mail.thread_cache', {\n            default: insertAndReplace(),\n            inverse: 'thread',\n            isCausal: true,\n            readonly: true,\n            required: true,\n        }),\n        channel_type: attr(),\n        /**\n         * States the chat window related to this thread (if any).\n         */\n        chatWindow: one2one('mail.chat_window', {\n            inverse: 'thread',\n            isCausal: true,\n        }),\n        /**\n         * Determines the composer state of this thread.\n         */\n        composer: one2one('mail.composer', {\n            compute: '_computeComposer',\n            inverse: 'thread',\n            isCausal: true,\n            readonly: true,\n        }),\n        correspondent: many2one('mail.partner', {\n            compute: '_computeCorrespondent',\n        }),\n        counter: attr({\n            default: 0,\n        }),\n        creator: many2one('mail.user'),\n        custom_channel_name: attr(),\n        /**\n         * Determines the default display mode of this channel. Should contain\n         * either no value (to display the chat), or 'video_full_screen' to\n         * start a call in full screen.\n         */\n        defaultDisplayMode: attr(),\n        /**\n         * States the description of this thread. Only applies to channels.\n         */\n        description: attr(),\n        /**\n         * Determines the discuss sidebar category item that displays this\n         * thread (if any). Only applies to channels.\n         */\n        discussSidebarCategoryItem: one2one('mail.discuss_sidebar_category_item', {\n            compute: '_computeDiscussSidebarCategoryItem',\n            inverse: 'channel',\n            isCausal: true,\n            readonly: true,\n        }),\n        displayName: attr({\n            compute: '_computeDisplayName',\n        }),\n        fetchMessagesParams: attr({\n            compute: '_computeFetchMessagesParams',\n        }),\n        fetchMessagesUrl: attr({\n            compute: '_computeFetchMessagesUrl',\n        }),\n        followersPartner: many2many('mail.partner', {\n            related: 'followers.partner',\n        }),\n        followers: one2many('mail.follower', {\n            inverse: 'followedThread',\n        }),\n        /**\n         * States the `mail.activity` that belongs to `this` and that are\n         * planned in the future (due later than today).\n         */\n        futureActivities: one2many('mail.activity', {\n            compute: '_computeFutureActivities',\n        }),\n        group_based_subscription: attr({\n            default: false,\n        }),\n        guestMembers: many2many('mail.guest', {\n            sort: '_sortGuestMembers',\n        }),\n        /**\n         * States whether `this` has activities (`mail.activity.mixin` server side).\n         */\n        hasActivities: attr({\n            default: false,\n        }),\n        /**\n         * Determines whether the RTC call feature should be displayed.\n         */\n        hasCallFeature: attr({\n            compute: '_computeHasCallFeature',\n        }),\n        /**\n         * States whether this thread should has the invite feature. Only makes\n         * sense for channels.\n         */\n        hasInviteFeature: attr({\n            compute: '_computeHasInviteFeature',\n        }),\n        /**\n         * Determines whether it makes sense for this thread to have a member list.\n         */\n        hasMemberListFeature: attr({\n            compute: '_computeHasMemberListFeature',\n        }),\n        /**\n         * States whether there is a server request for joining or leaving the RTC session.\n         * TODO Should maybe be on messaging (after messaging env rebase) to lock the rpc across all threads.\n         */\n        hasPendingRtcRequest: attr({\n            default: false,\n        }),\n        /**\n         * Determine whether this thread has the seen indicators (V and VV)\n         * enabled or not.\n         */\n        hasSeenIndicators: attr({\n            compute: '_computeHasSeenIndicators',\n            default: false,\n        }),\n        id: attr({\n            readonly: true,\n            required: true,\n        }),\n        invitationLink: attr({\n            compute: '_computeInvitationLink',\n        }),\n        /**\n         * List of guests that have been invited to the RTC call of this channel.\n         * FIXME should be simplified if we have the mail.channel.partner model\n         * in which case the two following fields should be a single relation to that model.\n         */\n        invitedGuests: many2many('mail.guest'),\n        /**\n         * List of partners that have been invited to the RTC call of this channel.\n         */\n        invitedPartners: many2many('mail.partner'),\n        /**\n         * Determines whether this description can be changed.\n         * Only makes sense for channels.\n         */\n        isChannelDescriptionChangeable: attr({\n            compute: '_computeIsChannelDescriptionChangeable',\n        }),\n        /**\n         * Determines whether this thread can be renamed.\n         * Only makes sense for channels.\n         */\n        isChannelRenamable: attr({\n            compute: '_computeIsChannelRenamable',\n        }),\n        /**\n         * States whether this thread is a `mail.channel` qualified as chat.\n         *\n         * Useful to list chat channels, like in messaging menu with the filter\n         * 'chat'.\n         */\n        isChatChannel: attr({\n            compute: '_computeIsChatChannel',\n            default: false,\n        }),\n        isCurrentPartnerFollowing: attr({\n            compute: '_computeIsCurrentPartnerFollowing',\n            default: false,\n        }),\n        /**\n         * States whether this thread description is editable by the current user.\n         */\n        isDescriptionEditableByCurrentUser: attr({\n            compute: '_computeIsDescriptionEditableByCurrentUser',\n        }),\n        /**\n         * States whether `this` is currently loading attachments.\n         */\n        isLoadingAttachments: attr({\n            default: false,\n        }),\n        /**\n         * Determine if there is a pending pin state change, which is a change\n         * of pin state requested by the client but not yet confirmed by the\n         * server.\n         *\n         * This field can be updated to immediately change the pin state on the\n         * interface and to notify the server of the new state.\n         */\n        isPendingPinned: attr(),\n        /**\n         * Boolean that determines whether this thread is pinned\n         * in discuss and present in the messaging menu.\n         */\n        isPinned: attr({\n            compute: '_computeIsPinned',\n        }),\n        /**\n         * Determine the last pin state known by the server, which is the pin\n         * state displayed after initialization or when the last pending\n         * pin state change was confirmed by the server.\n         *\n         * This field should be considered read only in most situations. Only\n         * the code handling pin state change from the server should typically\n         * update it.\n         */\n        isServerPinned: attr({\n            default: false,\n        }),\n        isTemporary: attr({\n            default: false,\n        }),\n        /**\n         * States the date and time of the last interesting event that happened\n         * in this channel for this partner. This includes: creating, joining,\n         * pinning, and new message posted. It is contained as a Date object.\n         */\n        lastInterestDateTime: attr(),\n        lastCurrentPartnerMessageSeenByEveryone: many2one('mail.message', {\n            compute: '_computeLastCurrentPartnerMessageSeenByEveryone',\n        }),\n        /**\n         * Last message of the thread, could be a transient one.\n         */\n        lastMessage: many2one('mail.message', {\n            compute: '_computeLastMessage',\n        }),\n        /**\n         * States the last known needaction message having this thread as origin.\n         */\n        lastNeedactionMessageAsOriginThread: many2one('mail.message', {\n            compute: '_computeLastNeedactionMessageAsOriginThread',\n        }),\n        /**\n         * Last non-transient message.\n         */\n        lastNonTransientMessage: many2one('mail.message', {\n            compute: '_computeLastNonTransientMessage',\n        }),\n        /**\n         * Last seen message id of the channel by current partner.\n         *\n         * Also, it needs to be kept as an id because it's considered like a \"date\" and could stay\n         * even if corresponding message is deleted. It is basically used to know which\n         * messages are before or after it.\n         */\n        lastSeenByCurrentPartnerMessageId: attr({\n            compute: '_computeLastSeenByCurrentPartnerMessageId',\n            default: 0,\n        }),\n        /**\n         * Local value of message unread counter, that means it is based on initial server value and\n         * updated with interface updates.\n         */\n        localMessageUnreadCounter: attr({\n            compute: '_computeLocalMessageUnreadCounter',\n        }),\n        /**\n         * States the number of members in this thread according to the server.\n         * Guests are excluded from the count.\n         * Only makes sense if this thread is a channel.\n         */\n        memberCount: attr(),\n        members: many2many('mail.partner', {\n            inverse: 'memberThreads',\n            sort: '_sortPartnerMembers',\n        }),\n        /**\n         * Determines the last mentioned channels of the last composer related\n         * to this thread. Useful to sync the composer when re-creating it.\n         */\n        mentionedChannelsBackup: many2many('mail.thread'),\n        /**\n         * Determines the last mentioned partners of the last composer related\n         * to this thread. Useful to sync the composer when re-creating it.\n         */\n        mentionedPartnersBackup: many2many('mail.partner'),\n        /**\n         * Determines the message before which the \"new message\" separator must\n         * be positioned, if any.\n         */\n        messageAfterNewMessageSeparator: many2one('mail.message', {\n            compute: '_computeMessageAfterNewMessageSeparator',\n        }),\n        message_needaction_counter: attr({\n            default: 0,\n        }),\n        /**\n         * All messages that this thread is linked to.\n         * Note that this field is automatically computed by inverse\n         * computed field.\n         */\n        messages: many2many('mail.message', {\n            inverse: 'threads',\n            readonly: true,\n        }),\n        /**\n         * All messages that have been originally posted in this thread.\n         */\n        messagesAsOriginThread: one2many('mail.message', {\n            inverse: 'originThread',\n            isCausal: true,\n        }),\n        /**\n         * Contains the message fetched/seen indicators for all messages of this thread.\n         */\n        messageSeenIndicators: one2many('mail.message_seen_indicator', {\n            inverse: 'thread',\n            isCausal: true,\n        }),\n        messagingAsRingingThread: many2one('mail.messaging', {\n            compute: '_computeMessagingAsRingingThread',\n            inverse: 'ringingThreads',\n            readonly: true,\n        }),\n        messagingMenuAsPinnedAndUnreadChannel: many2one('mail.messaging_menu', {\n            compute: '_computeMessagingMenuAsPinnedAndUnreadChannel',\n            inverse: 'pinnedAndUnreadChannels',\n            readonly: true,\n        }),\n        model: attr({\n            readonly: true,\n            required: true,\n        }),\n        model_name: attr(),\n        moduleIcon: attr(),\n        name: attr(),\n        /**\n         * States all known needaction messages having this thread as origin.\n         */\n        needactionMessagesAsOriginThread: many2many('mail.message', {\n            compute: '_computeNeedactionMessagesAsOriginThread',\n        }),\n        /**\n         * All offline members ordered like they are displayed.\n         */\n        orderedOfflineMembers: many2many('mail.partner', {\n            compute: '_computeOrderedOfflineMembers',\n        }),\n        /**\n         * All online members ordered like they are displayed.\n         */\n        orderedOnlineMembers: many2many('mail.partner', {\n            compute: '_computeOrderedOnlineMembers',\n        }),\n        /**\n         * All messages ordered like they are displayed.\n         */\n        orderedMessages: many2many('mail.message', {\n            compute: '_computeOrderedMessages',\n        }),\n        /**\n         * All messages ordered like they are displayed. This field does not\n         * contain transient messages which are not \"real\" records.\n         */\n        orderedNonTransientMessages: many2many('mail.message', {\n            compute: '_computeOrderedNonTransientMessages',\n        }),\n        /**\n         * Ordered typing members on this thread, excluding the current partner.\n         */\n        orderedOtherTypingMembers: many2many('mail.partner', {\n            compute: '_computeOrderedOtherTypingMembers',\n        }),\n        /**\n         * Ordered typing members on this thread. Lower index means this member\n         * is currently typing for the longest time. This list includes current\n         * partner as typer.\n         */\n        orderedTypingMembers: many2many('mail.partner', {\n            compute: '_computeOrderedTypingMembers',\n        }),\n        /**\n         * Technical attribute to manage ordered list of typing members.\n         */\n        orderedTypingMemberLocalIds: attr({\n            default: [],\n        }),\n        originThreadAttachments: one2many('mail.attachment', {\n            inverse: 'originThread',\n            isCausal: true,\n        }),\n        /**\n         * States the `mail.activity` that belongs to `this` and that are\n         * overdue (due earlier than today).\n         */\n        overdueActivities: one2many('mail.activity', {\n            compute: '_computeOverdueActivities',\n        }),\n        /**\n         * Contains the seen information for all members of the thread.\n         * FIXME This field should be readonly once task-2336946 is done.\n         */\n        partnerSeenInfos: one2many('mail.thread_partner_seen_info', {\n            inverse: 'thread',\n            isCausal: true,\n        }),\n        /**\n         * Determine if there is a pending seen message change, which is a change\n         * of seen message requested by the client but not yet confirmed by the\n         * server.\n         */\n        pendingSeenMessageId: attr(),\n        public: attr(),\n        /**\n         * If set, the current thread is the thread that hosts the current RTC call.\n         */\n        rtc: one2one('mail.rtc', {\n            inverse: 'channel',\n        }),\n        /**\n         * The session that invited the current user, it is only set when the\n         * invitation is still pending.\n         */\n        rtcInvitingSession: many2one('mail.rtc_session', {\n            inverse: 'calledChannels',\n        }),\n        rtcSessions: one2many('mail.rtc_session', {\n            inverse: 'channel',\n            isCausal: true,\n        }),\n        /**\n         * Determine the last fold state known by the server, which is the fold\n         * state displayed after initialization or when the last pending\n         * fold state change was confirmed by the server.\n         *\n         * This field should be considered read only in most situations. Only\n         * the code handling fold state change from the server should typically\n         * update it.\n         */\n        serverFoldState: attr({\n            default: 'closed',\n        }),\n        /**\n         * Last message considered by the server.\n         *\n         * Useful to compute localMessageUnreadCounter field.\n         *\n         * @see localMessageUnreadCounter\n         */\n        serverLastMessage: many2one('mail.message'),\n        /**\n         * Message unread counter coming from server.\n         *\n         * Value of this field is unreliable, due to dynamic nature of\n         * messaging. So likely outdated/unsync with server. Should use\n         * localMessageUnreadCounter instead, which smartly guess the actual\n         * message unread counter at all time.\n         *\n         * @see localMessageUnreadCounter\n         */\n        serverMessageUnreadCounter: attr({\n            default: 0,\n        }),\n        /**\n         * Determines the `mail.suggested_recipient_info` concerning `this`.\n         */\n        suggestedRecipientInfoList: one2many('mail.suggested_recipient_info', {\n            inverse: 'thread',\n            isCausal: true,\n        }),\n        /**\n         * Determines the last content of the last composer related to this\n         * thread. Useful to sync the composer when re-creating it.\n         */\n        textInputContentBackup: attr({\n            default: \"\",\n        }),\n        /**\n         * Determines the last cursor end of the last composer related to this\n         * thread. Useful to sync the composer when re-creating it.\n         */\n        textInputCursorEndBackup: attr({\n            default: 0,\n        }),\n        /**\n         * Determines the last cursor start of the last composer related to this\n         * thread. Useful to sync the composer when re-creating it.\n         */\n        textInputCursorStartBackup: attr({\n            default: 0,\n        }),\n        /**\n         * Determines the last selection direction of the last composer related\n         * to this thread. Useful to sync the composer when re-creating it.\n         */\n        textInputSelectionDirectionBackup: attr({\n            default: \"none\",\n        }),\n        threadViews: one2many('mail.thread_view', {\n            inverse: 'thread',\n        }),\n        /**\n         * States the `mail.activity` that belongs to `this` and that are due\n         * specifically today.\n         */\n        todayActivities: one2many('mail.activity', {\n            compute: '_computeTodayActivities',\n        }),\n        /**\n         * Members that are currently typing something in the composer of this\n         * thread, including current partner.\n         */\n        typingMembers: many2many('mail.partner'),\n        /**\n         * Text that represents the status on this thread about typing members.\n         */\n        typingStatusText: attr({\n            compute: '_computeTypingStatusText',\n            default: '',\n        }),\n        /**\n         * States how many members are currently unknown on the client side.\n         * This is the difference between the total number of members of the\n         * channel as reported in memberCount and those actually in members.\n         */\n        unknownMemberCount: attr({\n            compute: '_computeUnknownMemberCount',\n        }),\n        /**\n         * URL to access to the conversation.\n         */\n        url: attr({\n            compute: '_computeUrl',\n            default: '',\n        }),\n        uuid: attr(),\n        /**\n         * The amount of videos broadcast in the current Rtc call\n         */\n        videoCount: attr({\n            compute: '_computeVideoCount',\n            default: 0,\n        }),\n    };\n    Thread.identifyingFields = ['model', 'id'];\n    Thread.onChanges = [\n        new OnChange({\n            dependencies: ['lastSeenByCurrentPartnerMessageId'],\n            methodName: '_onChangeLastSeenByCurrentPartnerMessageId',\n        }),\n        new OnChange({\n            dependencies: ['isServerPinned'],\n            methodName: '_onIsServerPinnedChanged',\n        }),\n        new OnChange({\n            dependencies: ['serverFoldState'],\n            methodName: '_onServerFoldStateChanged',\n        }),\n    ];\n    Thread.modelName = 'mail.thread';\n\n    return Thread;\n}\n\nregisterNewModel('mail.thread', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr, many2many, many2one, one2many, one2one } from '@mail/model/model_field';\nimport { link, replace, unlink, unlinkAll } from '@mail/model/model_field_command';\nimport { OnChange } from '@mail/model/model_onchange';\n\nfunction factory(dependencies) {\n\n    class ThreadCache extends dependencies['mail.model'] {\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        async loadMoreMessages() {\n            if (this.isAllHistoryLoaded || this.isLoading) {\n                return;\n            }\n            if (!this.isLoaded) {\n                this.update({ isCacheRefreshRequested: true });\n                return;\n            }\n            this.update({ isLoadingMore: true });\n            const messageIds = this.fetchedMessages.map(message => message.id);\n            const limit = 30;\n            let fetchedMessages;\n            let success;\n            try {\n                fetchedMessages = await this._loadMessages({ limit, maxId: Math.min(...messageIds) });\n                success = true;\n            } catch (e) {\n                success = false;\n            }\n            if (!this.exists()) {\n                return;\n            }\n            if (success) {\n                if (fetchedMessages.length < limit) {\n                    this.update({ isAllHistoryLoaded: true });\n                }\n                for (const threadView of this.threadViews) {\n                    threadView.addComponentHint('more-messages-loaded', { fetchedMessages });\n                }\n            }\n            this.update({ isLoadingMore: false });\n        }\n\n        /**\n         * @returns {mail.message[]|undefined}\n         */\n        async loadNewMessages() {\n            if (this.isLoading) {\n                return;\n            }\n            if (!this.isLoaded) {\n                this.update({ isCacheRefreshRequested: true });\n                return;\n            }\n            const messageIds = this.fetchedMessages.map(message => message.id);\n            const fetchedMessages = this._loadMessages({ minId: Math.max(...messageIds, 0) });\n            if (!fetchedMessages || fetchedMessages.length === 0) {\n                return;\n            }\n            for (const threadView of this.threadViews) {\n                threadView.addComponentHint('new-messages-loaded', { fetchedMessages });\n            }\n            return fetchedMessages;\n        }\n\n        //----------------------------------------------------------------------\n        // Private\n        //----------------------------------------------------------------------\n\n        /**\n         * @private\n         * @returns {mail.message[]}\n         */\n        _computeFetchedMessages() {\n            if (!this.thread) {\n                return unlinkAll();\n            }\n            const toUnlinkMessages = [];\n            for (const message of this.fetchedMessages) {\n                if (!this.thread.messages.includes(message)) {\n                    toUnlinkMessages.push(message);\n                }\n            }\n            return unlink(toUnlinkMessages);\n        }\n\n        /**\n         * @private\n         * @returns {mail.message|undefined}\n         */\n        _computeLastFetchedMessage() {\n            const {\n                length: l,\n                [l - 1]: lastFetchedMessage,\n            } = this.orderedFetchedMessages;\n            if (!lastFetchedMessage) {\n                return unlink();\n            }\n            return link(lastFetchedMessage);\n        }\n\n        /**\n         * @private\n         * @returns {mail.message|undefined}\n         */\n        _computeLastMessage() {\n            const {\n                length: l,\n                [l - 1]: lastMessage,\n            } = this.orderedMessages;\n            if (!lastMessage) {\n                return unlink();\n            }\n            return link(lastMessage);\n        }\n\n        /**\n         * @private\n         * @returns {mail.message[]}\n         */\n        _computeMessages() {\n            if (!this.thread) {\n                return unlinkAll();\n            }\n            let newerMessages;\n            if (!this.lastFetchedMessage) {\n                newerMessages = this.thread.messages;\n            } else {\n                newerMessages = this.thread.messages.filter(message =>\n                    message.id > this.lastFetchedMessage.id\n                );\n            }\n            return replace(this.fetchedMessages.concat(newerMessages));\n        }\n\n        /**\n         * @private\n         * @returns {mail.message[]}\n         */\n        _computeOrderedFetchedMessages() {\n            return replace(this.fetchedMessages.sort((m1, m2) => m1.id < m2.id ? -1 : 1));\n        }\n\n        /**\n         * @private\n         * @returns {mail.message[]}\n         */\n        _computeOrderedMessages() {\n            return replace(this.messages.sort((m1, m2) => m1.id < m2.id ? -1 : 1));\n        }\n\n        /**\n         *\n         * @private\n         * @returns {mail.message[]}\n         */\n        _computeOrderedNonEmptyMessages() {\n            return replace(this.orderedMessages.filter(message => !message.isEmpty));\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeHasToLoadMessages() {\n            const res = { hasToLoadMessages: false };\n            if (!this.thread) {\n                // happens during destroy or compute executed in wrong order\n                return res;\n            }\n            if (this.hasLoadingFailed) {\n                return res;\n            }\n            const wasCacheRefreshRequested = this.isCacheRefreshRequested;\n            // mark hint as processed\n            if (this.isCacheRefreshRequested) {\n                res.isCacheRefreshRequested = false;\n            }\n            if (this.thread.isTemporary) {\n                // temporary threads don't exist on the server\n                return res;\n            }\n            if (!wasCacheRefreshRequested && this.threadViews.length === 0) {\n                // don't load message that won't be used\n                return res;\n            }\n            if (this.isLoading) {\n                // avoid duplicate RPC\n                return res;\n            }\n            if (!wasCacheRefreshRequested && this.isLoaded) {\n                // avoid duplicate RPC\n                return res;\n            }\n            if (this.isLoaded) {\n                // Ignore request if it is already loaded or loading. Indeed\n                // messages are automatically sync with server updates already,\n                // so there is never a need to refresh it past the first time.\n                return res;\n            }\n            res.hasToLoadMessages = true;\n            return res;\n        }\n\n        /**\n         * @private\n         * @param {Object} [param0={}]\n         * @param {integer} [param0.limit=30]\n         * @param {integer} [param0.maxId]\n         * @param {integer} [param0.minId]\n         * @returns {mail.message[]}\n         * @throws {Error} when failed to load messages\n         */\n        async _loadMessages({ limit = 30, maxId, minId } = {}) {\n            this.update({ isLoading: true });\n            let messages;\n            try {\n                messages = await this.messaging.models['mail.message'].performRpcMessageFetch(this.thread.fetchMessagesUrl, {\n                    ...this.thread.fetchMessagesParams,\n                    limit,\n                    'max_id': maxId,\n                    'min_id': minId,\n                });\n            } catch (e) {\n                if (this.exists()) {\n                    this.update({\n                        hasLoadingFailed: true,\n                        isLoading: false,\n                    });\n                }\n                throw e;\n            }\n            if (!this.exists()) {\n                return;\n            }\n            this.update({\n                fetchedMessages: link(messages),\n                hasLoadingFailed: false,\n                isLoaded: true,\n                isLoading: false,\n            });\n            if (!minId && messages.length < limit) {\n                this.update({ isAllHistoryLoaded: true });\n            }\n            this.messaging.messagingBus.trigger('o-thread-cache-loaded-messages', {\n                fetchedMessages: messages,\n                threadCache: this,\n            });\n            return messages;\n        }\n\n        /**\n         * Split method for `_computeHasToLoadMessages` because it has to write\n         * on 2 fields at once which is not supported by standard compute.\n         *\n         * @private\n         */\n        _onChangeForHasToLoadMessages() {\n            this.update(this._computeHasToLoadMessages());\n        }\n\n        /**\n         * Calls \"mark all as read\" when this thread becomes displayed in a\n         * view (which is notified by `isMarkAllAsReadRequested` being `true`),\n         * but delays the call until some other conditions are met, such as the\n         * messages being loaded.\n         * The reason to wait until messages are loaded is to avoid a race\n         * condition because \"mark all as read\" will change the state of the\n         * messages in parallel to fetch reading them.\n         *\n         * @private\n         */\n        _onChangeMarkAllAsRead() {\n            if (this.messaging.currentGuest) {\n                return;\n            }\n            if (\n                !this.isMarkAllAsReadRequested ||\n                !this.isLoaded ||\n                this.isLoading\n            ) {\n                // wait for change of state before deciding what to do\n                return;\n            }\n            this.update({ isMarkAllAsReadRequested: false });\n            if (\n                this.thread.isTemporary ||\n                this.thread.model === 'mail.box' ||\n                this.threadViews.length === 0\n            ) {\n                // ignore the request\n                return;\n            }\n            this.messaging.models['mail.message'].markAllAsRead([\n                ['model', '=', this.thread.model],\n                ['res_id', '=', this.thread.id],\n            ]);\n        }\n\n        /**\n         * Loads this thread cache, by fetching the most recent messages in this\n         * conversation.\n         *\n         * @private\n         */\n        async _onHasToLoadMessagesChanged() {\n            if (!this.hasToLoadMessages) {\n                return;\n            }\n            const fetchedMessages = await this._loadMessages();\n            for (const threadView of this.threadViews) {\n                threadView.addComponentHint('messages-loaded', { fetchedMessages });\n            }\n        }\n\n    }\n\n    ThreadCache.fields = {\n        /**\n         * List of messages that have been fetched by this cache.\n         *\n         * This DOES NOT necessarily includes all messages linked to this thread\n         * cache (@see messages field for that): it just contains list\n         * of successive messages that have been explicitly fetched by this\n         * cache. For all non-main caches, this corresponds to all messages.\n         * For the main cache, however, messages received from longpolling\n         * should be displayed on main cache but they have not been explicitly\n         * fetched by cache, so they ARE NOT in this list (at least, not until a\n         * fetch on this thread cache contains this message).\n         *\n         * The distinction between messages and fetched messages is important\n         * to manage \"holes\" in message list, while still allowing to display\n         * new messages on main cache of thread in real-time.\n         */\n        fetchedMessages: many2many('mail.message', {\n            compute: '_computeFetchedMessages',\n        }),\n        /**\n         * Determines whether the last message fetch failed.\n         */\n        hasLoadingFailed: attr({\n            default: false,\n        }),\n        /**\n         * Determines whether `this` should load initial messages.\n         * @see `onChangeForHasToLoadMessages` value of this field is mainly set\n         *  from this \"on change\".\n         * @see `isCacheRefreshRequested` to request manual refresh of messages.\n         */\n        hasToLoadMessages: attr(),\n        isAllHistoryLoaded: attr({\n            default: false,\n        }),\n        isLoaded: attr({\n            default: false,\n        }),\n        isLoading: attr({\n            default: false,\n        }),\n        isLoadingMore: attr({\n            default: false,\n        }),\n        /**\n         * Determines whether `this` should consider refreshing its messages.\n         * This field is a hint that may or may not lead to an actual refresh.\n         * @see `hasToLoadMessages`\n         */\n        isCacheRefreshRequested: attr({\n            default: false,\n        }),\n        /**\n         * Determines whether this cache should consider calling \"mark all as\n         * read\" on this thread.\n         *\n         * This field is a hint that may or may not lead to an actual call.\n         * @see `_onChangeMarkAllAsRead`\n         */\n        isMarkAllAsReadRequested: attr({\n            default: false,\n        }),\n        /**\n         * Last message that has been fetched by this thread cache.\n         *\n         * This DOES NOT necessarily mean the last message linked to this thread\n         * cache (@see lastMessage field for that). @see fetchedMessages field\n         * for a deeper explanation about \"fetched\" messages.\n         */\n        lastFetchedMessage: many2one('mail.message', {\n            compute: '_computeLastFetchedMessage',\n        }),\n        lastMessage: many2one('mail.message', {\n            compute: '_computeLastMessage',\n        }),\n        /**\n         * List of messages linked to this cache.\n         */\n        messages: many2many('mail.message', {\n            compute: '_computeMessages',\n        }),\n        /**\n         * Ordered list of messages that have been fetched by this cache.\n         *\n         * This DOES NOT necessarily includes all messages linked to this thread\n         * cache (@see orderedMessages field for that). @see fetchedMessages\n         * field for deeper explanation about \"fetched\" messages.\n         */\n        orderedFetchedMessages: many2many('mail.message', {\n            compute: '_computeOrderedFetchedMessages',\n        }),\n        /**\n         * Ordered list of messages linked to this cache.\n         */\n        orderedMessages: many2many('mail.message', {\n            compute: '_computeOrderedMessages',\n        }),\n        /**\n         * List of ordered non empty messages linked to this cache.\n         */\n        orderedNonEmptyMessages: many2many('mail.message', {\n            compute: '_computeOrderedNonEmptyMessages',\n        }),\n        thread: one2one('mail.thread', {\n            inverse: 'cache',\n            readonly: true,\n            required: true,\n        }),\n        /**\n         * States the 'mail.thread_view' that are currently displaying `this`.\n         */\n        threadViews: one2many('mail.thread_view', {\n            inverse: 'threadCache',\n        }),\n    };\n    ThreadCache.identifyingFields = ['thread'];\n    ThreadCache.onChanges = [\n        new OnChange({\n            dependencies: ['hasLoadingFailed', 'isCacheRefreshRequested', 'isLoaded', 'isLoading', 'thread.isTemporary', 'threadViews'],\n            methodName: '_onChangeForHasToLoadMessages',\n        }),\n        new OnChange({\n            dependencies: ['isLoaded', 'isLoading', 'isMarkAllAsReadRequested', 'thread.isTemporary', 'thread.model', 'threadViews'],\n            methodName: '_onChangeMarkAllAsRead',\n        }),\n        new OnChange({\n            dependencies: ['hasToLoadMessages'],\n            methodName: '_onHasToLoadMessagesChanged',\n        }),\n    ];\n    ThreadCache.modelName = 'mail.thread_cache';\n\n    return ThreadCache;\n}\n\nregisterNewModel('mail.thread_cache', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { many2one } from '@mail/model/model_field';\n\nfunction factory(dependencies) {\n\n    class ThreadPartnerSeenInfo extends dependencies['mail.model'] {\n    }\n\n    ThreadPartnerSeenInfo.fields = {\n        lastFetchedMessage: many2one('mail.message'),\n        lastSeenMessage: many2one('mail.message'),\n        /**\n         * Partner that this seen info is related to.\n         */\n        partner: many2one('mail.partner', {\n            inverse: 'partnerSeenInfos',\n            readonly: true,\n            required: true,\n        }),\n        /**\n         * Thread (channel) that this seen info is related to.\n         */\n        thread: many2one('mail.thread', {\n            inverse: 'partnerSeenInfos',\n            readonly: true,\n            required: true,\n        }),\n    };\n    ThreadPartnerSeenInfo.identifyingFields = ['thread', 'partner'];\n    ThreadPartnerSeenInfo.modelName = 'mail.thread_partner_seen_info';\n\n    return ThreadPartnerSeenInfo;\n}\n\nregisterNewModel('mail.thread_partner_seen_info', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { RecordDeletedError } from '@mail/model/model_errors';\nimport { attr, many2many, many2one, one2many, one2one } from '@mail/model/model_field';\nimport { clear, insertAndReplace, link, replace, unlink, update } from '@mail/model/model_field_command';\nimport { OnChange } from '@mail/model/model_onchange';\n\nfunction factory(dependencies) {\n\n    class ThreadView extends dependencies['mail.model'] {\n\n        /**\n         * @override\n         */\n        _created() {\n            this._loaderTimeout = undefined;\n        }\n\n        /**\n         * @override\n         */\n        _willDelete() {\n            this.env.browser.clearTimeout(this._loaderTimeout);\n            return super._willDelete(...arguments);\n        }\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        /**\n         * This function register a hint for the component related to this\n         * record. Hints are information on changes around this viewer that\n         * make require adjustment on the component. For instance, if this\n         * ThreadView initiated a thread cache load and it now has become\n         * loaded, then it may need to auto-scroll to last message.\n         *\n         * @param {string} hintType name of the hint. Used to determine what's\n         *   the broad type of adjustement the component has to do.\n         * @param {any} [hintData] data of the hint. Used to fine-tune\n         *   adjustments on the component.\n         */\n        addComponentHint(hintType, hintData) {\n            const hint = { data: hintData, type: hintType };\n            this.update({\n                componentHintList: this.componentHintList.concat([hint]),\n            });\n        }\n\n        /**\n         * @param {mail.message} message\n         */\n        handleVisibleMessage(message) {\n            if (!this.lastVisibleMessage || this.lastVisibleMessage.id < message.id) {\n                this.update({ lastVisibleMessage: link(message) });\n            }\n        }\n\n        /**\n         * @param {Object} hint\n         */\n        markComponentHintProcessed(hint) {\n            this.update({\n                componentHintList: this.componentHintList.filter(h => h !== hint),\n            });\n            this.messaging.messagingBus.trigger('o-thread-view-hint-processed', {\n                hint,\n                threadViewer: this.threadViewer,\n            });\n        }\n\n        /**\n         * Starts editing the last message of this thread from the current user.\n         */\n        startEditingLastMessageFromCurrentUser() {\n            const messageViews = this.messageViews;\n            messageViews.reverse();\n            const messageView = messageViews.find(messageViews => messageViews.message.isCurrentUserOrGuestAuthor && messageViews.message.canBeDeleted);\n            if (messageView) {\n                messageView.startEditing();\n            }\n        }\n\n        //----------------------------------------------------------------------\n        // Private\n        //----------------------------------------------------------------------\n\n        /**\n         * @private\n         */\n        _computeRtcCallViewer() {\n            return (this.thread && this.thread.model === 'mail.channel' && this.thread.rtcSessions.length > 0)\n                ? insertAndReplace()\n                : clear();\n        }\n\n        /**\n         * @private\n\n        /**\n         * @private\n         * @returns {FieldCommand}\n         */\n        _computeComposerView() {\n            if (!this.thread || this.thread.model === 'mail.box') {\n                return clear();\n            }\n            if (this.threadViewer && this.threadViewer.chatter) {\n                return clear();\n            }\n            return insertAndReplace();\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeHasSquashCloseMessages() {\n            return Boolean(this.threadViewer && !this.threadViewer.chatter && this.thread && this.thread.model !== 'mail.box');\n        }\n\n        /**\n         * @private\n         * @returns {mail.message_view[]}\n         */\n        _computeMessageViews() {\n            if (!this.threadCache) {\n                return clear();\n            }\n            const orderedMessages = this.threadCache.orderedNonEmptyMessages;\n            if (this.order === 'desc') {\n                orderedMessages.reverse();\n            }\n            const messageViewsData = [];\n            let prevMessage;\n            for (const message of orderedMessages) {\n                messageViewsData.push({\n                    isSquashed: this._shouldMessageBeSquashed(prevMessage, message),\n                    message: replace(message),\n                });\n                prevMessage = message;\n            }\n            return insertAndReplace(messageViewsData);\n        }\n\n        /**\n         * @private\n         * @returns {string[]}\n         */\n        _computeTextInputSendShortcuts() {\n            if (!this.thread) {\n                return;\n            }\n            if (!this.messaging.device) {\n                return;\n            }\n            // Actually in mobile there is a send button, so we need there 'enter' to allow new line.\n            // Hence, we want to use a different shortcut 'ctrl/meta enter' to send for small screen\n            // size with a non-mailing channel.\n            // here send will be done on clicking the button or using the 'ctrl/meta enter' shortcut.\n            if (\n                this.messaging.device.isMobile ||\n                (this.messaging.discuss.threadView === this && this.messaging.discuss.thread === this.messaging.inbox)\n            ) {\n                return ['ctrl-enter', 'meta-enter'];\n            }\n            return ['enter'];\n        }\n\n        /**\n         * @private\n         * @returns {integer|undefined}\n         */\n        _computeThreadCacheInitialScrollHeight() {\n            if (!this.threadCache) {\n                return clear();\n            }\n            const threadCacheInitialScrollHeight = this.threadCacheInitialScrollHeights[this.threadCache.localId];\n            if (threadCacheInitialScrollHeight !== undefined) {\n                return threadCacheInitialScrollHeight;\n            }\n            return clear();\n        }\n\n        /**\n         * @private\n         * @returns {integer|undefined}\n         */\n        _computeThreadCacheInitialScrollPosition() {\n            if (!this.threadCache) {\n                return clear();\n            }\n            const threadCacheInitialScrollPosition = this.threadCacheInitialScrollPositions[this.threadCache.localId];\n            if (threadCacheInitialScrollPosition !== undefined) {\n                return threadCacheInitialScrollPosition;\n            }\n            return clear();\n        }\n\n        /**\n         * Not a real field, used to trigger `thread.markAsSeen` when one of\n         * the dependencies changes.\n         *\n         * @private\n         * @returns {boolean}\n         */\n        _computeThreadShouldBeSetAsSeen() {\n            if (!this.thread) {\n                return;\n            }\n            if (!this.thread.lastNonTransientMessage) {\n                return;\n            }\n            if (!this.lastVisibleMessage) {\n                return;\n            }\n            if (this.lastVisibleMessage !== this.lastMessage) {\n                return;\n            }\n            if (!this.hasComposerFocus) {\n                // FIXME condition should not be on \"composer is focused\" but \"threadView is active\"\n                // See task-2277543\n                return;\n            }\n            if (this.messaging.currentGuest) {\n                return;\n            }\n            this.thread.markAsSeen(this.thread.lastNonTransientMessage).catch(e => {\n                // prevent crash when executing compute during destroy\n                if (!(e instanceof RecordDeletedError)) {\n                    throw e;\n                }\n            });\n        }\n\n        /**\n         * @private\n         */\n        _computeTopbar() {\n            return this.hasTopbar ? insertAndReplace() : clear();\n        }\n\n        /**\n         * @private\n         */\n        _onThreadCacheChanged() {\n            if (this.threadCache) {\n                // clear obsolete hints\n                this.update({ componentHintList: clear() });\n                this.addComponentHint('change-of-thread-cache');\n                this.threadCache.update({\n                    isCacheRefreshRequested: true,\n                    isMarkAllAsReadRequested: true,\n                });\n                this.update({ lastVisibleMessage: unlink() });\n            }\n        }\n\n        /**\n         * @private\n         */\n        _onThreadCacheIsLoadingChanged() {\n            if (this.threadCache && this.threadCache.isLoading) {\n                if (!this.isLoading && !this.isPreparingLoading) {\n                    this.update({ isPreparingLoading: true });\n                    this.async(() =>\n                        new Promise(resolve => {\n                            this._loaderTimeout = this.env.browser.setTimeout(resolve, 400);\n                        }\n                    )).then(() => {\n                        const isLoading = this.threadCache\n                            ? this.threadCache.isLoading\n                            : false;\n                        this.update({ isLoading, isPreparingLoading: false });\n                    });\n                }\n                return;\n            }\n            this.env.browser.clearTimeout(this._loaderTimeout);\n            if (this.thread) {\n                this.update({ isLoading: false, isPreparingLoading: false });\n            }\n        }\n\n        /**\n         * @param {mail.message} prevMessage\n         * @param {mail.message} message\n         * @returns {boolean}\n         */\n        _shouldMessageBeSquashed(prevMessage, message) {\n            if (!this.hasSquashCloseMessages) {\n                return false;\n            }\n            if (message.parentMessage) {\n                return false;\n            }\n            if (!prevMessage) {\n                return false;\n            }\n            if (!prevMessage.date && message.date) {\n                return false;\n            }\n            if (message.date && prevMessage.date && Math.abs(message.date.diff(prevMessage.date)) > 60000) {\n                // more than 1 min. elasped\n                return false;\n            }\n            if (prevMessage.dateDay !== message.dateDay) {\n                return false;\n            }\n            if (prevMessage.message_type !== 'comment' || message.message_type !== 'comment') {\n                return false;\n            }\n            if (prevMessage.author !== message.author || prevMessage.guestAuthor !== message.guestAuthor) {\n                // from a different author\n                return false;\n            }\n            if (prevMessage.originThread !== message.originThread) {\n                return false;\n            }\n            if (\n                prevMessage.notifications.length > 0 ||\n                message.notifications.length > 0\n            ) {\n                // visual about notifications is restricted to non-squashed messages\n                return false;\n            }\n            const prevOriginThread = prevMessage.originThread;\n            const originThread = message.originThread;\n            if (\n                prevOriginThread &&\n                originThread &&\n                prevOriginThread.model === originThread.model &&\n                originThread.model !== 'mail.channel' &&\n                prevOriginThread.id !== originThread.id\n            ) {\n                // messages linked to different document thread\n                return false;\n            }\n            return true;\n        }\n\n    }\n\n    ThreadView.fields = {\n        compact: attr({\n            related: 'threadViewer.compact',\n        }),\n        /**\n         * States which channel invitation form is operating this thread view.\n         * Only applies if this thread is a channel.\n         */\n        channelInvitationForm: one2one('mail.channel_invitation_form', {\n            inverse: 'threadView',\n            isCausal: true,\n        }),\n        /**\n         * List of component hints. Hints contain information that help\n         * components make UI/UX decisions based on their UI state.\n         * For instance, on receiving new messages and the last message\n         * is visible, it should auto-scroll to this new last message.\n         *\n         * Format of a component hint:\n         *\n         *   {\n         *       type: {string} the name of the component hint. Useful\n         *                      for components to dispatch behaviour\n         *                      based on its type.\n         *       data: {Object} data related to the component hint.\n         *                      For instance, if hint suggests to scroll\n         *                      to a certain message, data may contain\n         *                      message id.\n         *   }\n         */\n        componentHintList: attr({\n            default: [],\n        }),\n        composerView: one2one('mail.composer_view', {\n            compute: '_computeComposerView',\n            inverse: 'threadView',\n            isCausal: true,\n        }),\n        /**\n         * Determines which extra class this thread view component should have.\n         */\n        extraClass: attr({\n            related: 'threadViewer.extraClass',\n        }),\n        hasComposerFocus: attr({\n            related: 'composerView.hasFocus',\n        }),\n        /**\n         * Determines whether this thread viewer has a member list.\n         * Only makes sense if thread.hasMemberListFeature is true.\n         */\n        hasMemberList: attr({\n            related: 'threadViewer.hasMemberList',\n        }),\n        /**\n         * Determines whether this thread view should squash close messages.\n         * See `_shouldMessageBeSquashed` for which conditions are considered\n         * to determine if messages are \"close\" to each other.\n         */\n        hasSquashCloseMessages: attr({\n            compute: '_computeHasSquashCloseMessages',\n        }),\n        /**\n         * Determines whether this thread view has a top bar.\n         */\n        hasTopbar: attr({\n            related: 'threadViewer.hasTopbar',\n        }),\n        /**\n         * States whether `this.threadCache` is currently loading messages.\n         *\n         * This field is related to `this.threadCache.isLoading` but with a\n         * delay on its update to avoid flickering on the UI.\n         *\n         * It is computed through `_onThreadCacheIsLoadingChanged` and it should\n         * otherwise be considered read-only.\n         */\n        isLoading: attr({\n            default: false,\n        }),\n        /**\n         * Determines whether the member list of this thread is opened.\n         * Only makes sense if hasMemberListFeature and hasMemberList are true.\n         */\n        isMemberListOpened: attr({\n            default: false,\n        }),\n        /**\n         * States whether `this` is aware of `this.threadCache` currently\n         * loading messages, but `this` is not yet ready to display that loading\n         * on the UI.\n         *\n         * This field is computed through `_onThreadCacheIsLoadingChanged` and\n         * it should otherwise be considered read-only.\n         *\n         * @see `this.isLoading`\n         */\n        isPreparingLoading: attr({\n            default: false,\n        }),\n        /**\n         * Determines whether `this` should automatically scroll on receiving\n         * a new message. Detection of new message is done through the component\n         * hint `message-received`.\n         */\n        hasAutoScrollOnMessageReceived: attr({\n            default: true,\n        }),\n        /**\n         * Last message in the context of the currently displayed thread cache.\n         */\n        lastMessage: many2one('mail.message', {\n            related: 'thread.lastMessage',\n        }),\n        /**\n         * Most recent message in this ThreadView that has been shown to the\n         * current partner in the currently displayed thread cache.\n         */\n        lastVisibleMessage: many2one('mail.message'),\n        messages: many2many('mail.message', {\n            related: 'threadCache.messages',\n        }),\n        /**\n         * States the message views used to display this messages.\n         */\n        messageViews: one2many('mail.message_view', {\n            compute: '_computeMessageViews',\n            inverse: 'threadView',\n            isCausal: true,\n        }),\n        /**\n         * States the order mode of the messages on this thread view.\n         * Either 'asc', or 'desc'.\n         */\n        order: attr({\n            related: 'threadViewer.order',\n        }),\n        /**\n         * Determines the message that's currently being replied to.\n         */\n        replyingToMessageView: many2one('mail.message_view'),\n        /**\n         * Determines the Rtc call viewer of this thread.\n         */\n        rtcCallViewer: one2one('mail.rtc_call_viewer', {\n            compute: '_computeRtcCallViewer',\n            inverse: 'threadView',\n            isCausal: true,\n            readonly: true,\n        }),\n        /**\n         * Determines the keyboard shortcuts that are available to send a message\n         * from the composer of this thread viewer.\n         */\n        textInputSendShortcuts: attr({\n            compute: '_computeTextInputSendShortcuts',\n        }),\n        /**\n         * Determines the `mail.thread` currently displayed by `this`.\n         */\n        thread: many2one('mail.thread', {\n            inverse: 'threadViews',\n            readonly: true,\n            related: 'threadViewer.thread',\n        }),\n        /**\n         * States the `mail.thread_cache` currently displayed by `this`.\n         */\n        threadCache: many2one('mail.thread_cache', {\n            inverse: 'threadViews',\n            readonly: true,\n            related: 'threadViewer.threadCache',\n        }),\n        threadCacheInitialScrollHeight: attr({\n            compute: '_computeThreadCacheInitialScrollHeight',\n        }),\n        threadCacheInitialScrollPosition: attr({\n            compute: '_computeThreadCacheInitialScrollPosition',\n        }),\n        /**\n         * List of saved initial scroll heights of thread caches.\n         */\n        threadCacheInitialScrollHeights: attr({\n            default: {},\n            related: 'threadViewer.threadCacheInitialScrollHeights',\n        }),\n        /**\n         * List of saved initial scroll positions of thread caches.\n         */\n        threadCacheInitialScrollPositions: attr({\n            default: {},\n            related: 'threadViewer.threadCacheInitialScrollPositions',\n        }),\n        /**\n         * Determines the `mail.thread_viewer` currently managing `this`.\n         */\n        threadViewer: one2one('mail.thread_viewer', {\n            inverse: 'threadView',\n            readonly: true,\n            required: true,\n        }),\n        /**\n         * Determines the top bar of this thread view, if any.\n         */\n        topbar: one2one('mail.thread_view_topbar', {\n            compute: '_computeTopbar',\n            inverse: 'threadView',\n            isCausal: true,\n            readonly: true,\n        }),\n    };\n    ThreadView.identifyingFields = ['threadViewer'];\n    ThreadView.onChanges = [\n        new OnChange({\n            dependencies: ['threadCache'],\n            methodName: '_onThreadCacheChanged',\n        }),\n        new OnChange({\n            dependencies: ['threadCache.isLoading'],\n            methodName: '_onThreadCacheIsLoadingChanged',\n        }),\n        new OnChange({\n            dependencies: ['hasComposerFocus', 'lastMessage', 'thread.lastNonTransientMessage', 'lastVisibleMessage', 'threadCache'],\n            methodName: '_computeThreadShouldBeSetAsSeen',\n        }),\n    ];\n    ThreadView.modelName = 'mail.thread_view';\n\n    return ThreadView;\n}\n\nregisterNewModel('mail.thread_view', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr, many2one, one2one } from '@mail/model/model_field';\nimport { clear, insertAndReplace } from '@mail/model/model_field_command';\n\nfunction factory(dependencies) {\n\n    class ThreadViewer extends dependencies['mail.model'] {\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        /**\n         * @param {integer} scrollHeight\n         * @param {mail.thread_cache} threadCache\n         */\n        saveThreadCacheScrollHeightAsInitial(scrollHeight, threadCache) {\n            threadCache = threadCache || this.threadCache;\n            if (!threadCache) {\n                return;\n            }\n            if (this.chatter) {\n                // Initial scroll height is disabled for chatter because it is\n                // too complex to handle correctly and less important\n                // functionally.\n                return;\n            }\n            this.update({\n                threadCacheInitialScrollHeights: Object.assign({}, this.threadCacheInitialScrollHeights, {\n                    [threadCache.localId]: scrollHeight,\n                }),\n            });\n        }\n\n        /**\n         * @param {integer} scrollTop\n         * @param {mail.thread_cache} threadCache\n         */\n        saveThreadCacheScrollPositionsAsInitial(scrollTop, threadCache) {\n            threadCache = threadCache || this.threadCache;\n            if (!threadCache) {\n                return;\n            }\n            if (this.chatter) {\n                // Initial scroll position is disabled for chatter because it is\n                // too complex to handle correctly and less important\n                // functionally.\n                return;\n            }\n            this.update({\n                threadCacheInitialScrollPositions: Object.assign({}, this.threadCacheInitialScrollPositions, {\n                    [threadCache.localId]: scrollTop,\n                }),\n            });\n        }\n\n        //----------------------------------------------------------------------\n        // Private\n        //----------------------------------------------------------------------\n\n        /**\n         * @private\n         * @returns {mail.thread_viewer|undefined}\n         */\n        _computeThreadView() {\n            return this.hasThreadView ? insertAndReplace() : clear();\n        }\n\n    }\n\n    ThreadViewer.fields = {\n        chatter: one2one('mail.chatter', {\n            inverse: 'threadViewer',\n            readonly: true,\n        }),\n        chatWindow: one2one('mail.chat_window', {\n            inverse: 'threadViewer',\n            readonly: true,\n        }),\n        /**\n         * true if the viewer is in a compact format, like in a chat window.\n         */\n        compact: attr({\n            default: false,\n        }),\n        discuss: one2one('mail.discuss', {\n            inverse: 'threadViewer',\n            readonly: true,\n        }),\n        discussPublicView: one2one('mail.discuss_public_view', {\n            inverse: 'threadViewer',\n            readonly: true,\n        }),\n        /**\n         * Determines which extra class this thread view component should have.\n         */\n        extraClass: attr(),\n        /**\n         * Determines whether this thread viewer has a member list.\n         * Only makes sense if this thread is a channel and if the channel is\n         * not a chat.\n         */\n        hasMemberList: attr({\n            default: false,\n        }),\n        /**\n         * Determines whether `this.thread` should be displayed.\n         */\n        hasThreadView: attr({\n            default: false,\n        }),\n        /**\n         * Determines whether this thread viewer has a top bar.\n         */\n        hasTopbar: attr({\n            default: false,\n        }),\n        /**\n         * Determines the order mode of the messages on this thread viewer.\n         * Either 'asc', or 'desc'.\n         */\n        order: attr({\n            default: 'asc',\n        }),\n        /**\n         * Determines the `mail.thread` that should be displayed by `this`.\n         */\n        thread: many2one('mail.thread'),\n        /**\n         * States the `mail.thread_cache` that should be displayed by `this`.\n         */\n        threadCache: many2one('mail.thread_cache', {\n            related: 'thread.cache',\n        }),\n        /**\n         * Determines the initial scroll height of thread caches, which is the\n         * scroll height at the time the last scroll position was saved.\n         * Useful to only restore scroll position when the corresponding height\n         * is available, otherwise the restore makes no sense.\n         */\n        threadCacheInitialScrollHeights: attr({\n            default: {},\n        }),\n        /**\n         * Determines the initial scroll positions of thread caches.\n         * Useful to restore scroll position on changing back to this\n         * thread cache. Note that this is only applied when opening\n         * the thread cache, because scroll position may change fast so\n         * save is already throttled.\n         */\n        threadCacheInitialScrollPositions: attr({\n            default: {},\n        }),\n        /**\n         * States the `mail.thread_view` currently displayed and managed by `this`.\n         */\n        threadView: one2one('mail.thread_view', {\n            compute: '_computeThreadView',\n            inverse: 'threadViewer',\n            isCausal: true,\n        }),\n    };\n    ThreadViewer.identifyingFields = [['chatter', 'chatWindow', 'discuss', 'discussPublicView']];\n    ThreadViewer.modelName = 'mail.thread_viewer';\n\n    return ThreadViewer;\n}\n\nregisterNewModel('mail.thread_viewer', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr, many2one, one2one } from '@mail/model/model_field';\nimport { clear, insertAndReplace, replace } from '@mail/model/model_field_command';\n\nfunction factory(dependencies) {\n\n    class ThreadViewTopbar extends dependencies['mail.model'] {\n\n        /**\n         * @override\n         */\n        _created() {\n            // Bind necessary until OWL supports arrow function in handlers: https://github.com/odoo/owl/issues/876\n            this.onClickHideMemberList = this.onClickHideMemberList.bind(this);\n            this.onClickInboxMarkAllAsRead = this.onClickInboxMarkAllAsRead.bind(this);\n            this.onClickInviteButton = this.onClickInviteButton.bind(this);\n            this.onClickShowMemberList = this.onClickShowMemberList.bind(this);\n            this.onClickTopbarThreadName = this.onClickTopbarThreadName.bind(this);\n            this.onClickUnstarAll = this.onClickUnstarAll.bind(this);\n            this.onClickUserName = this.onClickUserName.bind(this);\n            this.onInputGuestNameInput = this.onInputGuestNameInput.bind(this);\n            this.onInputThreadNameInput = this.onInputThreadNameInput.bind(this);\n            this.onKeyDownGuestNameInput = this.onKeyDownGuestNameInput.bind(this);\n            this.onKeyDownThreadNameInput = this.onKeyDownThreadNameInput.bind(this);\n            this.onMouseEnterUserName = this.onMouseEnterUserName.bind(this);\n            this.onMouseEnterTopbarThreadName = this.onMouseEnterTopbarThreadName.bind(this);\n            this.onMouseLeaveUserName = this.onMouseLeaveUserName.bind(this);\n            this.onMouseLeaveTopbarThreadName = this.onMouseLeaveTopbarThreadName.bind(this);\n            this._onClickCaptureGlobal = this._onClickCaptureGlobal.bind(this);\n            this.onClickTopbarThreadDescription = this.onClickTopbarThreadDescription.bind(this);\n            this.onInputThreadDescriptionInput = this.onInputThreadDescriptionInput.bind(this);\n            this.onKeyDownThreadDescriptionInput = this.onKeyDownThreadDescriptionInput.bind(this);\n            this.onMouseEnterTopbarThreadDescription = this.onMouseEnterTopbarThreadDescription.bind(this);\n            this.onMouseLeaveTopbarThreadDescription = this.onMouseLeaveTopbarThreadDescription.bind(this);\n            document.addEventListener('click', this._onClickCaptureGlobal, true);\n            return super._created();\n        }\n\n        /**\n         * @override\n         */\n        _willDelete() {\n            document.removeEventListener('click', this._onClickCaptureGlobal, true);\n            return super._willDelete();\n        }\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n       /**\n         * Handles click on the \"hide member list\" button.\n         *\n         * @param {Event} ev\n         */\n        onClickHideMemberList(ev) {\n            this.threadView.update({ isMemberListOpened: false });\n            this.threadView.addComponentHint('member-list-hidden');\n        }\n\n        /**\n         * Handles click on the \"mark all as read\" button of Inbox.\n         *\n         * @param {MouseEvent} ev\n         */\n        onClickInboxMarkAllAsRead(ev) {\n            this.messaging.models['mail.message'].markAllAsRead();\n        }\n\n        /**\n         * Handles click on the \"invite\" button.\n         *\n         * @param {MouseEvent} ev\n         */\n        onClickInviteButton(ev) {\n            if (this.invitePopoverView) {\n                this.update({ invitePopoverView: clear() });\n            } else {\n                this.openInvitePopoverView();\n            }\n        }\n\n        /**\n         * Handles click on the \"show member list\" button.\n         *\n         * @param {Event} ev\n         */\n        onClickShowMemberList(ev) {\n            this.threadView.update({ isMemberListOpened: true });\n        }\n\n        /**\n         * Handles click on the \"thread name\" of this top bar.\n         *\n         * @param {MouseEvent} ev\n         */\n        onClickTopbarThreadName(ev) {\n            if (!this.thread || !this.thread.isChannelRenamable) {\n                return;\n            }\n            // Guests cannot edit thread name\n            if (this.messaging.isCurrentUserGuest) {\n                return;\n            }\n            const selection = window.getSelection();\n            this.update({\n                doFocusOnThreadNameInput: true,\n                doSetSelectionDirectionOnThreadNameInput: selection.anchorOffset < selection.focusOffset ? 'forward' : 'backward',\n                doSetSelectionEndOnThreadNameInput: Math.max(selection.focusOffset, selection.anchorOffset),\n                doSetSelectionStartOnThreadNameInput: Math.min(selection.focusOffset, selection.anchorOffset),\n                isEditingThreadName: true,\n                isMouseOverThreadName: false,\n                pendingThreadName: this.thread.displayName,\n            });\n        }\n\n        /**\n         * Handles click on the \"thread description\" of this top bar.\n         *\n         * @param {MouseEvent} ev\n         */\n        onClickTopbarThreadDescription(ev) {\n            if (!this.thread || !this.thread.isDescriptionEditableByCurrentUser) {\n                return;\n            }\n            const selection = window.getSelection();\n            this.update({\n                doFocusOnThreadDescriptionInput: true,\n                doSetSelectionDirectionOnThreadDescriptionInput: selection.anchorOffset < selection.focusOffset ? 'forward' : 'backward',\n                doSetSelectionEndOnThreadDescriptionInput: Math.max(selection.focusOffset, selection.anchorOffset),\n                doSetSelectionStartOnThreadDescriptionInput: Math.min(selection.focusOffset, selection.anchorOffset),\n                isEditingThreadDescription: true,\n                isMouseOverThreadDescription: false,\n                pendingThreadDescription: this.thread.description || \"\",\n            });\n        }\n\n        /**\n         * Handles click on the \"unstar all\" button of Starred box.\n         *\n         * @param {MouseEvent} ev\n         */\n        onClickUnstarAll(ev) {\n            this.messaging.models['mail.message'].unstarAll();\n        }\n\n        /**\n         * Handles click on the guest name.\n         *\n         * @param {MouseEvent} ev\n         */\n        onClickUserName(ev) {\n            if (!this.messaging.isCurrentUserGuest) {\n                return;\n            }\n            const selection = window.getSelection();\n            this.update({\n                doFocusOnGuestNameInput: true,\n                doSetSelectionDirectionOnGuestNameInput: selection.anchorOffset < selection.focusOffset ? 'forward' : 'backward',\n                doSetSelectionEndOnGuestNameInput: Math.max(selection.focusOffset, selection.anchorOffset),\n                doSetSelectionStartOnGuestNameInput: Math.min(selection.focusOffset, selection.anchorOffset),\n                isEditingGuestName: true,\n                isMouseOverUserName: false,\n                pendingGuestName: this.messaging.currentGuest.name,\n            });\n        }\n\n        /**\n         * Handles OWL update on this top bar component.\n         */\n        onComponentUpdate() {\n            if (this.doFocusOnGuestNameInput) {\n                this.guestNameInputRef.el.focus();\n                this.update({ doFocusOnGuestNameInput: clear() });\n            }\n            if (this.doFocusOnThreadNameInput) {\n                this.threadNameInputRef.el.focus();\n                this.update({ doFocusOnThreadNameInput: clear() });\n            }\n            if (this.doFocusOnThreadDescriptionInput) {\n                this.threadDescriptionInputRef.el.focus();\n                this.update({ doFocusOnThreadDescriptionInput: clear() });\n            }\n            if (\n                this.doSetSelectionStartOnGuestNameInput !== undefined &&\n                this.doSetSelectionEndOnGuestNameInput !== undefined &&\n                this.doSetSelectionDirectionOnGuestNameInput !== undefined\n            ) {\n                this.guestNameInputRef.el.setSelectionRange(\n                    this.doSetSelectionStartOnGuestNameInput,\n                    this.doSetSelectionEndOnGuestNameInput,\n                    this.doSetSelectionDirectionOnGuestNameInput\n                );\n                this.update({\n                    doSetSelectionDirectionOnGuestNameInput: clear(),\n                    doSetSelectionEndOnGuestNameInput: clear(),\n                    doSetSelectionStartOnGuestNameInput: clear(),\n                });\n            }\n            if (\n                this.doSetSelectionStartOnThreadNameInput !== undefined &&\n                this.doSetSelectionEndOnThreadNameInput !== undefined &&\n                this.doSetSelectionDirectionOnThreadNameInput !== undefined\n            ) {\n                this.threadNameInputRef.el.setSelectionRange(\n                    this.doSetSelectionStartOnThreadNameInput,\n                    this.doSetSelectionEndOnThreadNameInput,\n                    this.doSetSelectionDirectionOnThreadNameInput\n                );\n                this.update({\n                    doSetSelectionDirectionOnThreadNameInput: clear(),\n                    doSetSelectionEndOnThreadNameInput: clear(),\n                    doSetSelectionStartOnThreadNameInput: clear(),\n                });\n            }\n            if (\n                this.doSetSelectionStartOnThreadDescriptionInput !== undefined &&\n                this.doSetSelectionEndOnThreadDescriptionInput !== undefined &&\n                this.doSetSelectionDirectionOnThreadDescriptionInput !== undefined\n            ) {\n                this.threadDescriptionInputRef.el.setSelectionRange(\n                    this.doSetSelectionStartOnThreadDescriptionInput,\n                    this.doSetSelectionEndOnThreadDescriptionInput,\n                    this.doSetSelectionDirectionOnThreadDescriptionInput\n                );\n                this.update({\n                    doSetSelectionDirectionOnThreadDescriptionInput: clear(),\n                    doSetSelectionEndOnThreadDescriptionInput: clear(),\n                    doSetSelectionStartOnThreadDescriptionInput: clear(),\n                });\n            }\n        }\n\n        /**\n         * @param {KeyboardEvent} ev\n         */\n        onInputGuestNameInput(ev) {\n            this.update({ pendingGuestName: this.guestNameInputRef.el.value });\n        }\n\n        /**\n         * Handles input on the \"thread name\" input of this top bar.\n         *\n         * @param {InputEvent} ev\n         */\n        onInputThreadNameInput(ev) {\n            this.update({ pendingThreadName: ev.target.value });\n        }\n\n        /**\n         * Handles input on the \"thread description\" input of this top bar.\n         *\n         * @param {InputEvent} ev\n         */\n        onInputThreadDescriptionInput(ev) {\n            this.update({ pendingThreadDescription: ev.target.value });\n        }\n\n        /**\n         * Handles keydown on the \"guest name\" input of this top bar.\n         *\n         * @param {KeyboardEvent} ev\n         */\n        onKeyDownGuestNameInput(ev) {\n            switch (ev.key) {\n                case 'Enter':\n                    if (this.pendingGuestName.trim() !== '') {\n                        this._applyGuestRename();\n                    }\n                    break;\n                case 'Escape':\n                    this._resetGuestNameInput();\n                    break;\n            }\n        }\n\n        /**\n         * Handles keydown on the \"thread name\" input of this top bar.\n         *\n         * @param {KeyboardEvent} ev\n         */\n        onKeyDownThreadNameInput(ev) {\n            switch (ev.key) {\n                case 'Enter':\n                    this._applyThreadRename();\n                    break;\n                case 'Escape':\n                    this._discardThreadRename();\n                    break;\n            }\n        }\n\n        /**\n         * Handles keydown on the \"thread description\" input of this top bar.\n         *\n         * @param {KeyboardEvent} ev\n         */\n        onKeyDownThreadDescriptionInput(ev) {\n            switch (ev.key) {\n                case 'Enter':\n                    this._applyThreadChangeDescription();\n                    break;\n                case 'Escape':\n                    this._discardThreadChangeDescription();\n                    break;\n            }\n        }\n\n        /**\n         * Handles mouseenter on the \"thread name\" of this top bar.\n         *\n         * @param {MouseEvent} ev\n         */\n        onMouseEnterTopbarThreadName(ev) {\n            if (!this.thread || !this.thread.isChannelRenamable) {\n                return;\n            }\n            this.update({ isMouseOverThreadName: true });\n        }\n\n        /**\n         * Handles mouseenter on the \"thread description\" of this top bar.\n         *\n         * @param {MouseEvent} ev\n         */\n        onMouseEnterTopbarThreadDescription(ev) {\n            if (!this.exists()) {\n                return;\n            }\n            this.update({ isMouseOverThreadDescription: true });\n        }\n\n        /**\n         * Handles mouseenter on the \"user name\" of this top bar.\n         *\n         * @param {MouseEvent} ev\n         */\n        onMouseEnterUserName(ev) {\n            this.update({ isMouseOverUserName: true });\n        }\n\n        /**\n         * Handles mouseleave on the \"thread name\" of this top bar.\n         *\n         * @param {MouseEvent} ev\n         */\n        onMouseLeaveTopbarThreadName(ev) {\n            this.update({ isMouseOverThreadName: false });\n        }\n\n        /**\n         * Handles mouseleave on the \"thread description\" of this top bar.\n         *\n         * @param {MouseEvent} ev\n         */\n        onMouseLeaveTopbarThreadDescription(ev) {\n            this.update({ isMouseOverThreadDescription: false });\n        }\n\n        /**\n         * Handles mouseleave on the \"user name\" of this top bar.\n         *\n         * @param {MouseEvent} ev\n         */\n        onMouseLeaveUserName(ev) {\n            this.update({ isMouseOverUserName: false });\n        }\n\n        /**\n         * Open the invite popover view in this thread view topbar.\n         */\n        openInvitePopoverView() {\n            this.threadView.update({ channelInvitationForm: insertAndReplace() });\n            this.update({\n                invitePopoverView: insertAndReplace({\n                    channelInvitationForm: replace(this.threadView.channelInvitationForm),\n                }),\n            });\n            if (this.messaging.isCurrentUserGuest) {\n                return;\n            }\n            this.threadView.channelInvitationForm.update({ doFocusOnSearchInput: true });\n            this.threadView.channelInvitationForm.searchPartnersToInvite();\n        }\n\n        //----------------------------------------------------------------------\n        // Private\n        //----------------------------------------------------------------------\n\n        /**\n         * @private\n         */\n        _applyGuestRename() {\n            if (this.hasGuestNameChanged) {\n                this.messaging.models['mail.guest'].performRpcGuestUpdateName({\n                    id: this.messaging.currentGuest.id,\n                    name: this.pendingGuestName.trim(),\n                });\n            }\n            this._resetGuestNameInput();\n        }\n\n        /**\n         * @private\n         */\n        _applyThreadRename() {\n            const newName = this.pendingThreadName;\n            this.update({\n                isEditingThreadName: false,\n                pendingThreadName: clear(),\n            });\n            if (this.thread.channel_type === 'chat' && newName !== this.thread.custom_channel_name) {\n                this.thread.setCustomName(newName);\n            }\n            if (newName && this.thread.channel_type === 'channel' && newName !== this.thread.name) {\n                this.thread.rename(newName);\n            }\n            if (this.thread.channel_type === 'group' && newName !== this.thread.name) {\n                this.thread.rename(newName);\n            }\n        }\n\n        /**\n         * @private\n         */\n        _applyThreadChangeDescription() {\n            const newDescription = this.pendingThreadDescription || \"\";\n            this.update({\n                isEditingThreadDescription: false,\n                pendingThreadDescription: clear(),\n            });\n            if (newDescription !== this.thread.description) {\n                this.thread.changeDescription(newDescription);\n            }\n        }\n\n        /**\n         * @private\n         * @returns {string}\n         */\n        _computeAvatarUrl() {\n            if (this.messaging.isCurrentUserGuest) {\n                if (!this.thread) {\n                    return '';\n                }\n                return `/mail/channel/${this.thread.id}/guest/${this.messaging.currentGuest.id}/avatar_128?unique=${this.messaging.currentGuest.name}`;\n            }\n            return this.messaging.currentPartner.avatarUrl;\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeHasGuestNameChanged() {\n            return Boolean(\n                this.messaging.currentGuest &&\n                this.pendingGuestName !== this.messaging.currentGuest.name\n            );\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeHasDescriptionArea() {\n            return Boolean(this.thread && (this.thread.description || this.thread.isDescriptionEditableByCurrentUser));\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeIsDescriptionHighlighted() {\n            return Boolean(\n                this.isMouseOverThreadDescription &&\n                this.thread.isDescriptionEditableByCurrentUser\n            );\n        }\n\n        /**\n         * @private\n         */\n        _discardThreadRename() {\n            this.update({\n                isEditingThreadName: false,\n                pendingThreadName: clear(),\n            });\n        }\n\n        /**\n         * @private\n         */\n        _discardThreadChangeDescription() {\n            this.update({\n                isEditingThreadDescription: false,\n                pendingThreadDescription: clear(),\n            });\n        }\n\n        /**\n         * @private\n         * @param {MouseEvent} ev\n         */\n        _onClickCaptureGlobal(ev) {\n            if (this.isEditingGuestName && this.guestNameInputRef.el && !this.guestNameInputRef.el.contains(ev.target)) {\n                if (this.pendingGuestName.trim() !== '') {\n                    this._applyGuestRename();\n                } else {\n                    this._resetGuestNameInput();\n                }\n            }\n            if (this.isEditingThreadName && this.threadNameInputRef.el && !this.threadNameInputRef.el.contains(ev.target)) {\n                this._applyThreadRename();\n            }\n            if (this.isEditingThreadDescription && this.threadDescriptionInputRef.el && !this.threadDescriptionInputRef.el.contains(ev.target)) {\n                this._applyThreadChangeDescription();\n            }\n        }\n\n        /**\n         * @private\n         */\n        _resetGuestNameInput() {\n            this.update({\n                isEditingGuestName: false,\n                pendingGuestName: clear(),\n            });\n        }\n\n    }\n\n    ThreadViewTopbar.fields = {\n        /**\n         * States the URL of the profile picture of the current user.\n         */\n        avatarUrl: attr({\n            compute: '_computeAvatarUrl',\n            readonly: true,\n        }),\n        /**\n         * Determines whether the guest name input needs to be focused.\n         */\n        doFocusOnGuestNameInput: attr(),\n        /**\n         * Determines whether this thread name input needs to be focused.\n         */\n        doFocusOnThreadNameInput: attr(),\n        /**\n         * Determines whether this thread description input needs to be focused.\n         */\n        doFocusOnThreadDescriptionInput: attr(),\n        /**\n         * Determines the direction to set on the selection of this guest name\n         * input. This value is not a representation of current selection, but\n         * an instruction to set a new selection. Must be set together with\n         * `doSetSelectionEndOnGuestNameInput` and `doSetSelectionStartOnGuestNameInput`\n         * to have an effect.\n         */\n        doSetSelectionDirectionOnGuestNameInput: attr(),\n        /**\n         * Determines the direction to set on the selection of this thread name\n         * input. This value is not a representation of current selection, but\n         * an instruction to set a new selection. Must be set together with\n         * `doSetSelectionEndOnThreadNameInput` and `doSetSelectionStartOnThreadNameInput`\n         * to have an effect.\n         */\n        doSetSelectionDirectionOnThreadNameInput: attr(),\n        /**\n         * Determines the direction to set on the selection of this thread description\n         * input. This value is not a representation of current selection, but\n         * an instruction to set a new selection. Must be set together with\n         * `doSetSelectionEndOnThreadDescriptionInput` and `doSetSelectionStartOnThreadDescriptionInput`\n         * to have an effect.\n         */ \n        doSetSelectionDirectionOnThreadDescriptionInput: attr(),\n        /**\n         * Determines the ending position where to place the selection on this\n         * guest name input (zero-based index). This value is not a\n         * representation of current selection, but an instruction to set a new\n         * selection. Must be set together with `doSetSelectionDirectionOnGuestNameInput`\n         * and `doSetSelectionStartOnGuestNameInput` to have an effect.\n         */\n        doSetSelectionEndOnGuestNameInput: attr(),\n        /**\n         * Determines the ending position where to place the selection on this\n         * thread name input (zero-based index). This value is not a\n         * representation of current selection, but an instruction to set a new\n         * selection. Must be set together with `doSetSelectionDirectionOnThreadNameInput`\n         * and `doSetSelectionStartOnThreadNameInput` to have an effect.\n         */\n        doSetSelectionEndOnThreadNameInput: attr(),\n        /**\n         * Determines the ending position where to place the selection on this\n         * thread description input (zero-based index). This value is not a\n         * representation of current selection, but an instruction to set a new\n         * selection. Must be set together with `doSetSelectionDirectionOnThreadDescriptionInput`\n         * and `doSetSelectionStartOnThreadDescriptionInput` to have an effect.\n         */\n        doSetSelectionEndOnThreadDescriptionInput: attr(),\n        /**\n         * Determines the starting position where to place the selection on this\n         * guest name input (zero-based index). This value is not a\n         * representation of current selection, but an instruction to set a new\n         * selection. Must be set together with `doSetSelectionDirectionOnGuestNameInput` and\n         * `doSetSelectionEndOnGuestNameInput` to have an effect.\n         */\n        doSetSelectionStartOnGuestNameInput: attr(),\n        /**\n         * Determines the starting position where to place the selection on this\n         * thread name input (zero-based index). This value is not a\n         * representation of current selection, but an instruction to set a new\n         * selection. Must be set together with `doSetSelectionDirectionOnThreadNameInput` and\n         * `doSetSelectionEndOnThreadNameInput` to have an effect.\n         */\n        doSetSelectionStartOnThreadNameInput: attr(),\n        /**\n         * Determines the starting position where to place the selection on this\n         * thread description input (zero-based index). This value is not a\n         * representation of current selection, but an instruction to set a new\n         * selection. Must be set together with `doSetSelectionDirectionOnThreadDescriptionInput` and\n         * `doSetSelectionEndOnThreadDescriptionInput` to have an effect.\n         */\n        doSetSelectionStartOnThreadDescriptionInput: attr(),\n        /**\n         * States the OWL ref of the \"guest name\" input of this top bar.\n         * Useful to focus it, or to know when a click is done outside of it.\n         */\n        guestNameInputRef: attr(),\n        /**\n         * Determines whether the guest's name has been updated.\n         *\n         * Useful to determine whether a RPC should be done to update the name\n         * server side.\n         */\n        hasGuestNameChanged: attr({\n            compute: '_computeHasGuestNameChanged',\n            readonly: true,\n        }),\n        /**\n         * Determines whether description area should display on top bar.\n         */\n        hasDescriptionArea: attr({\n            compute: '_computeHasDescriptionArea',\n        }),\n        /**\n         * Determines whether the guest is currently being renamed.\n         */\n        isEditingGuestName: attr({\n            default: false,\n        }),\n        /**\n         * States the OWL ref of the invite button.\n         * Useful to provide anchor for the invite popover positioning.\n         */\n        inviteButtonRef: attr(),\n        /**\n         * If set, this is the record of invite button popover that is currently\n         * open in the topbar.\n         */\n        invitePopoverView: one2one('mail.popover_view', {\n            isCausal: true,\n            inverse: 'threadViewTopbarOwner',\n        }),\n        /**\n         * States whether this thread description is highlighted.\n         */\n        isDescriptionHighlighted: attr({\n            compute: '_computeIsDescriptionHighlighted'\n        }),\n        /**\n         * Determines whether this thread is currently being renamed.\n         */\n        isEditingThreadName: attr({\n            default: false,\n        }),\n        /**\n         * Determines whether this thread description is currently being changed.\n         */\n        isEditingThreadDescription: attr({\n            default: false,\n        }),\n        /**\n         * States whether the cursor is currently over this thread name in\n         * the top bar.\n         */\n        isMouseOverThreadName: attr({\n            default: false,\n        }),\n        /**\n         * States whether the cursor is currently over this thread description in\n         * the top bar.\n         */\n        isMouseOverThreadDescription: attr({\n            default: false,\n        }),\n        /**\n         * States whether the cursor is currently over the user name in this top\n         * bar.\n         */\n        isMouseOverUserName: attr({\n            default: false,\n        }),\n        /**\n         * Determines the pending name of the guest, which is the new name of\n         * the guest as the current guest is currently typing it, with the goal\n         * of renaming the guest.\n         * This value can either be applied or discarded.\n         */\n        pendingGuestName: attr({\n            default: \"\",\n        }),\n        /**\n         * Determines the pending name of this thread, which is the new name of\n         * the thread as the current user is currently typing it, with the goal\n         * of renaming the thread.\n         * This value can either be applied or discarded.\n         */\n        pendingThreadName: attr({\n            default: \"\",\n        }),\n        /**\n         * Determines the pending description of this thread, which is the new description of\n         * the thread as the current user is currently typing it, with the goal\n         * of changing the description the thread.\n         * This value can either be applied or discarded.\n         */\n        pendingThreadDescription: attr({\n            default: \"\",\n        }),\n        /**\n         * States the thread that is displayed by this top bar.\n         */\n        thread: many2one('mail.thread', {\n            related: 'threadView.thread',\n        }),\n        /**\n         * States the OWL ref of the \"thread name\" input of this top bar.\n         * Useful to focus it, or to know when a click is done outside of it.\n         */\n        threadNameInputRef: attr(),\n        /**\n         * States the OWL ref of the thread description input of this top bar.\n         * Useful to focus it, or to know when a click is done outside of it.\n         */\n        threadDescriptionInputRef: attr(),\n        /**\n         * States the thread view managing this top bar.\n         */\n        threadView: one2one('mail.thread_view', {\n            inverse: 'topbar',\n            readonly: true,\n            required: true,\n        }),\n    };\n    ThreadViewTopbar.identifyingFields = ['threadView'];\n    ThreadViewTopbar.modelName = 'mail.thread_view_topbar';\n\n    return ThreadViewTopbar;\n}\n\nregisterNewModel('mail.thread_view_topbar', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr, one2one } from '@mail/model/model_field';\nimport { insert, unlink } from '@mail/model/model_field_command';\n\nfunction factory(dependencies) {\n\n    class User extends dependencies['mail.model'] {\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        /**\n         * @static\n         * @param {Object} data\n         * @returns {Object}\n         */\n        static convertData(data) {\n            const data2 = {};\n            if ('id' in data) {\n                data2.id = data.id;\n            }\n            if ('partner_id' in data) {\n                if (!data.partner_id) {\n                    data2.partner = unlink();\n                } else {\n                    const partnerNameGet = data['partner_id'];\n                    const partnerData = {\n                        display_name: partnerNameGet[1],\n                        id: partnerNameGet[0],\n                    };\n                    data2.partner = insert(partnerData);\n                }\n            }\n            return data2;\n        }\n\n        /**\n         * Performs the `read` RPC on `res.users`.\n         *\n         * @static\n         * @param {Object} param0\n         * @param {Object} param0.context\n         * @param {string[]} param0.fields\n         * @param {integer[]} param0.ids\n         */\n        static async performRpcRead({ context, fields, ids }) {\n            const usersData = await this.env.services.rpc({\n                model: 'res.users',\n                method: 'read',\n                args: [ids, fields],\n                kwargs: {\n                    context,\n                },\n            }, { shadow: true });\n            return this.messaging.models['mail.user'].insert(usersData.map(userData =>\n                this.messaging.models['mail.user'].convertData(userData)\n            ));\n        }\n\n        /**\n         * Fetches the partner of this user.\n         */\n        async fetchPartner() {\n            return this.messaging.models['mail.user'].performRpcRead({\n                ids: [this.id],\n                fields: ['partner_id'],\n                context: { active_test: false },\n            });\n        }\n\n        /**\n         * Gets the chat between this user and the current user.\n         *\n         * If a chat is not appropriate, a notification is displayed instead.\n         *\n         * @returns {mail.thread|undefined}\n         */\n        async getChat() {\n            if (!this.partner) {\n                await this.async(() => this.fetchPartner());\n            }\n            if (!this.partner) {\n                // This user has been deleted from the server or never existed:\n                // - Validity of id is not verified at insert.\n                // - There is no bus notification in case of user delete from\n                //   another tab or by another user.\n                this.env.services['notification'].notify({\n                    message: this.env._t(\"You can only chat with existing users.\"),\n                    type: 'warning',\n                });\n                return;\n            }\n            // in other cases a chat would be valid, find it or try to create it\n            let chat = this.messaging.models['mail.thread'].find(thread =>\n                thread.channel_type === 'chat' &&\n                thread.correspondent === this.partner &&\n                thread.model === 'mail.channel' &&\n                thread.public === 'private'\n            );\n            if (!chat || !chat.isPinned) {\n                // if chat is not pinned then it has to be pinned client-side\n                // and server-side, which is a side effect of following rpc\n                chat = await this.async(() =>\n                    this.messaging.models['mail.thread'].performRpcCreateChat({\n                        partnerIds: [this.partner.id],\n                    })\n                );\n            }\n            if (!chat) {\n                this.env.services['notification'].notify({\n                    message: this.env._t(\"An unexpected error occurred during the creation of the chat.\"),\n                    type: 'warning',\n                });\n                return;\n            }\n            return chat;\n        }\n\n        /**\n         * Opens a chat between this user and the current user and returns it.\n         *\n         * If a chat is not appropriate, a notification is displayed instead.\n         *\n         * @param {Object} [options] forwarded to @see `mail.thread:open()`\n         * @returns {mail.thread|undefined}\n         */\n        async openChat(options) {\n            const chat = await this.async(() => this.getChat());\n            if (!chat) {\n                return;\n            }\n            await this.async(() => chat.open(options));\n            return chat;\n        }\n\n        /**\n         * Opens the most appropriate view that is a profile for this user.\n         * Because user is a rather technical model to allow login, it's the\n         * partner profile that contains the most useful information.\n         *\n         * @override\n         */\n        async openProfile() {\n            if (!this.partner) {\n                await this.async(() => this.fetchPartner());\n            }\n            if (!this.partner) {\n                // This user has been deleted from the server or never existed:\n                // - Validity of id is not verified at insert.\n                // - There is no bus notification in case of user delete from\n                //   another tab or by another user.\n                this.env.services['notification'].notify({\n                    message: this.env._t(\"You can only open the profile of existing users.\"),\n                    type: 'warning',\n                });\n                return;\n            }\n            return this.partner.openProfile();\n        }\n\n        //----------------------------------------------------------------------\n        // Private\n        //----------------------------------------------------------------------\n\n        /**\n         * @private\n         * @returns {string|undefined}\n         */\n        _computeDisplayName() {\n            return this.display_name || this.partner && this.partner.display_name;\n        }\n\n        /**\n         * @private\n         * @returns {string|undefined}\n         */\n        _computeNameOrDisplayName() {\n            return this.partner && this.partner.nameOrDisplayName || this.display_name;\n        }\n    }\n\n    User.fields = {\n        id: attr({\n            readonly: true,\n            required: true,\n        }),\n        /**\n         * Determines whether this user is an internal user. An internal user is\n         * a member of the group `base.group_user`. This is the inverse of the\n         * `share` field in python.\n         */\n        isInternalUser: attr(),\n        display_name: attr({\n            compute: '_computeDisplayName',\n        }),\n        model: attr({\n            default: 'res.user',\n        }),\n        nameOrDisplayName: attr({\n            compute: '_computeNameOrDisplayName',\n        }),\n        partner: one2one('mail.partner', {\n            inverse: 'user',\n        }),\n        /**\n         * Id of this user's res.users.settings record.\n         */\n        resUsersSettingsId: attr(),\n    };\n    User.identifyingFields = ['id'];\n    User.modelName = 'mail.user';\n\n    return User;\n}\n\nregisterNewModel('mail.user', factory);\n", "/** @odoo-module **/\n\nimport { browser } from \"@web/core/browser/browser\";\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr, one2one, one2many } from '@mail/model/model_field';\nimport { insertAndReplace } from '@mail/model/model_field_command';\n\nfunction factory(dependencies) {\n\n    class UserSetting extends dependencies['mail.model'] {\n\n        /**\n         * @override\n         */\n        _created() {\n            const res = super._created(...arguments);\n            this._timeoutIds = {};\n            this._loadLocalSettings();\n            this._onStorage = this._onStorage.bind(this);\n            browser.addEventListener('storage', this._onStorage);\n            return res;\n        }\n\n        /**\n         * @override\n         */\n        _willDelete() {\n            browser.removeEventListener('storage', this._onStorage);\n            for (const timeoutId of Object.values(this._timeoutIds)) {\n                browser.clearTimeout(timeoutId);\n            }\n            return super._willDelete(...arguments);\n        }\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        /**\n         * @static\n         * @param {Object} data\n         * @returns {Object}\n         */\n        static convertData(data) {\n            const data2 = {};\n            if ('use_push_to_talk' in data) {\n                data2.usePushToTalk = data.use_push_to_talk;\n            }\n            if ('push_to_talk_key' in data) {\n                data2.pushToTalkKey = data.push_to_talk_key || '';\n            }\n            if ('voice_active_duration' in data) {\n                data2.voiceActiveDuration = data.voice_active_duration;\n            }\n            if ('id' in data) {\n                data2.id = data.id;\n            }\n            return data2;\n        }\n\n        /**\n         * @returns {Object} MediaTrackConstraints\n         */\n        getAudioConstraints() {\n            const constraints = {\n                echoCancellation: true,\n                noiseSuppression: true,\n            };\n            if (this.audioInputDeviceId) {\n                constraints.deviceId = this.audioInputDeviceId;\n            }\n            return constraints;\n        }\n\n        /**\n         * @param {event} ev\n         */\n        isPushToTalkKey(ev) {\n            if (!this.usePushToTalk || !this.pushToTalkKey) {\n                return;\n            }\n            const [shiftKey, ctrlKey, altKey, key] = this.pushToTalkKey.split(\".\");\n            const settingsKeySet = this.buildKeySet({ shiftKey, ctrlKey, altKey, key });\n            const eventKeySet = this.buildKeySet({\n                shiftKey: ev.shiftKey,\n                ctrlKey: ev.ctrlKey,\n                altKey: ev.altKey,\n                key: ev.key,\n            });\n            if (ev.type === \"keydown\") {\n                return [...settingsKeySet].every((key) => eventKeySet.has(key));\n            }\n            return settingsKeySet.has(ev.key === \"Meta\" ? \"Alt\" : ev.key);\n        }\n\n        buildKeySet({ shiftKey, ctrlKey, altKey, key }) {\n            const keys = new Set();\n            if (key) {\n                keys.add(key === \"Meta\" ? \"Alt\" : key);\n            }\n            if (shiftKey) {\n                keys.add(\"Shift\");\n            }\n            if (ctrlKey) {\n                keys.add(\"Control\");\n            }\n            if (altKey) {\n                keys.add(\"Alt\");\n            }\n            return keys;\n        }\n\n        pushToTalkKeyFormat() {\n            if (!this.pushToTalkKey) {\n                return;\n            }\n            const [shiftKey, ctrlKey, altKey, key] = this.pushToTalkKey.split(\".\");\n            return {\n                shiftKey: !!shiftKey,\n                ctrlKey: !!ctrlKey,\n                altKey: !!altKey,\n                key: key || false,\n            };\n        }\n\n        pushToTalkKeyToString() {\n            const { shiftKey, ctrlKey, altKey, key } = this.pushToTalkKeyFormat();\n            const f = (k, name) => k ? name : '';\n            const keys = [\n                f(ctrlKey, 'Ctrl'), f(altKey, 'Alt'), f(shiftKey, 'Shift'), key === \" \" ? \"Space\": key\n            ].filter(Boolean);\n            return keys.join(\" + \");\n        }\n\n        /**\n         * @param {String} audioInputDeviceId\n         */\n        async setAudioInputDevice(audioInputDeviceId) {\n            this.update({\n                audioInputDeviceId,\n            });\n            this.env.services.local_storage.setItem('mail_user_setting_audio_input_device_id', audioInputDeviceId);\n            await this.messaging.rtc.updateLocalAudioTrack(true);\n        }\n\n        /**\n         * @param {String} value\n         */\n        setDelayValue(value) {\n            const voiceActiveDuration = parseInt(value, 10);\n            this.update({ voiceActiveDuration });\n            if (!this.messaging.isCurrentUserGuest) {\n                this._saveSettings();\n            }\n        }\n\n        /**\n         * @param {event} ev\n         */\n        async setPushToTalkKey(ev) {\n            const nonElligibleKeys = new Set(['Shift', 'Control', 'Alt', 'Meta']);\n            let pushToTalkKey = `${ev.shiftKey || ''}.${ev.ctrlKey || ev.metaKey || ''}.${ev.altKey || ''}`;\n            if (!nonElligibleKeys.has(ev.key)) {\n                pushToTalkKey += `.${ev.key}`;\n            }\n            this.update({ pushToTalkKey });\n            if (!this.messaging.isCurrentUserGuest) {\n                this._saveSettings();\n            }\n        }\n\n        /**\n         * @param {Object} param0\n         * @param {number} [param0.guestId]\n         * @param {number} [param0.partnerId]\n         * @param {number} param0.volume\n         */\n        async saveVolumeSetting({ guestId, partnerId, volume }) {\n            this._debounce(async () => {\n                await this.async(() => this.env.services.rpc(\n                    {\n                        model: 'res.users.settings',\n                        method: 'set_volume_setting',\n                        args: [\n                            [this.messaging.currentUser.resUsersSettingsId],\n                            partnerId,\n                            volume,\n                        ],\n                        kwargs: {\n                            guest_id: guestId,\n                        },\n                    },\n                    { shadow: true },\n                ));\n            }, 5000, `sound_${partnerId}`);\n        }\n\n        /**\n         * @param {float} voiceActivationThreshold\n         */\n        async setThresholdValue(voiceActivationThreshold) {\n            this.update({ voiceActivationThreshold });\n            this.env.services.local_storage.setItem('mail_user_setting_voice_threshold', voiceActivationThreshold);\n            await this.messaging.rtc.updateVoiceActivation();\n        }\n\n        async togglePushToTalk() {\n            this.update({ usePushToTalk: !this.usePushToTalk });\n            await this.messaging.rtc.updateVoiceActivation();\n            if (!this.messaging.isCurrentUserGuest) {\n                this._saveSettings();\n            }\n        }\n\n        toggleLayoutSettingsWindow() {\n            this.update({ isRtcLayoutSettingDialogOpen: !this.isRtcLayoutSettingDialogOpen });\n        }\n\n        /**\n         * toggles the display of the option window\n         */\n        toggleWindow() {\n            this.update({ isOpen: !this.isOpen });\n        }\n\n        //----------------------------------------------------------------------\n        // Private\n        //----------------------------------------------------------------------\n\n        /**\n         * @private\n         * @param {function} f\n         * @param {number} delay in ms\n         * @param {any} key\n         */\n        _debounce(f, delay, key) {\n            this._timeoutIds[key] && browser.clearTimeout(this._timeoutIds[key]);\n            this._timeoutIds[key] = browser.setTimeout(() => {\n                if (!this.exists()) {\n                    return;\n                }\n                f();\n            }, delay);\n        }\n\n        /**\n         * @private\n         */\n        _loadLocalSettings() {\n            const voiceActivationThresholdString = this.env.services.local_storage.getItem(\n                \"mail_user_setting_voice_threshold\"\n            );\n            const audioInputDeviceId = this.env.services.local_storage.getItem(\n                \"mail_user_setting_audio_input_device_id\"\n            );\n            this.update({\n                voiceActivationThreshold: voiceActivationThresholdString ? parseFloat(voiceActivationThresholdString) : undefined,\n                audioInputDeviceId: audioInputDeviceId || undefined,\n            });\n        }\n\n        /**\n         * @private\n         */\n        async _saveSettings() {\n            this._debounce(async () => {\n                await this.async(() => this.env.services.rpc(\n                    {\n                        model: 'res.users.settings',\n                        method: 'set_res_users_settings',\n                        args: [[this.messaging.currentUser.resUsersSettingsId], {\n                            push_to_talk_key: this.pushToTalkKey,\n                            use_push_to_talk: this.usePushToTalk,\n                            voice_active_duration: this.voiceActiveDuration,\n                        }],\n                    },\n                    { shadow: true },\n                ));\n            }, 2000, 'globalSettings');\n        }\n\n        /**\n         * @private\n         * @param {Event} ev\n         */\n        async _onStorage(ev) {\n            if (ev.key === 'mail_user_setting_voice_threshold') {\n                this.update({ voiceActivationThreshold: ev.newValue });\n                await this.messaging.rtc.updateVoiceActivation();\n            }\n        }\n\n    }\n\n    UserSetting.fields = {\n        /**\n         * DeviceId of the audio input selected by the user\n         */\n        audioInputDeviceId: attr({\n            default: '',\n        }),\n        id: attr({\n            readonly: true,\n            required: true,\n        }),\n        /**\n         * true if the dialog for the call viewer layout is open\n         */\n        isRtcLayoutSettingDialogOpen: attr({\n            default: false,\n        }),\n        /**\n         * Formatted string that represent the push to talk key with its modifiers.\n         */\n        pushToTalkKey: attr({\n            default: '',\n        }),\n        /**\n         * Model for the component with the controls for RTC related settings.\n         */\n        rtcConfigurationMenu: one2one('mail.rtc_configuration_menu', {\n            default: insertAndReplace(),\n            inverse: 'userSetting',\n            isCausal: true,\n            required: true,\n        }),\n        /**\n         * layout of the rtc session display chosen by the user\n         * possible values: tiled, spotlight, sidebar\n         */\n        rtcLayout: attr({\n            default: 'tiled',\n        }),\n        /**\n         * true if the user wants to use push to talk (over voice activation)\n         */\n        usePushToTalk: attr({\n            default: false,\n        }),\n        /**\n         * Normalized volume at which the voice activation system must consider the user as \"talking\".\n         */\n        voiceActivationThreshold: attr({\n            default: 0.05,\n        }),\n        /**\n         * how long the voice remains active after releasing the push-to-talk key in ms\n         */\n        voiceActiveDuration: attr({\n            default: 0,\n        }),\n        /**\n         * Models that represent the volume chosen by the user for each partner.\n         */\n        volumeSettings: one2many('mail.volume_setting', {\n            inverse: 'userSetting',\n            isCausal: true,\n        }),\n    };\n    UserSetting.identifyingFields = ['id'];\n    UserSetting.modelName = 'mail.user_setting';\n\n    return UserSetting;\n}\n\nregisterNewModel('mail.user_setting', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr, one2one, many2one } from '@mail/model/model_field';\nimport { insert } from '@mail/model/model_field_command';\nimport { OnChange } from '@mail/model/model_onchange';\n\nfunction factory(dependencies) {\n\n    class VolumeSetting extends dependencies['mail.model'] {\n\n        //----------------------------------------------------------------------\n        // Private\n        //----------------------------------------------------------------------\n\n        /**\n         * @private\n         */\n        _onChangeVolume() {\n            let rtcSessions;\n            if (this.partner) {\n                rtcSessions = this.partner.rtcSessions;\n            } else if (this.guest) {\n                rtcSessions = this.guest.rtcSessions;\n            } else {\n                return;\n            }\n            for (const rtcSession of rtcSessions) {\n                if (rtcSession.audioElement) {\n                    rtcSession.audioElement.volume = this.volume;\n                }\n            }\n        }\n    }\n\n    VolumeSetting.fields = {\n        guest: one2one('mail.guest', {\n            inverse: 'volumeSetting',\n        }),\n        id: attr({\n            readonly: true,\n            required: true,\n        }),\n        partner: one2one('mail.partner', {\n            inverse: 'volumeSetting',\n        }),\n        userSetting: many2one('mail.user_setting', {\n            inverse: 'volumeSettings',\n            required: true,\n        }),\n        volume: attr({\n            default: 0.5,\n        }),\n    };\n    VolumeSetting.identifyingFields = ['id'];\n    VolumeSetting.onChanges = [\n        new OnChange({\n            dependencies: ['volume'],\n            methodName: '_onChangeVolume',\n        }),\n    ];\n\n    VolumeSetting.modelName = 'mail.volume_setting';\n\n    return VolumeSetting;\n}\n\nregisterNewModel('mail.volume_setting', factory);\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr, one2one } from '@mail/model/model_field';\nimport { clear, insertAndReplace } from '@mail/model/model_field_command';\n\nfunction factory(dependencies) {\n\n    const getNextGuestNameInputId = (function () {\n        let id = 0;\n        return () => ++id;\n    })();\n\n    class WelcomeView extends dependencies['mail.model'] {\n\n        /**\n         * @override\n         */\n        _created() {\n            super._created();\n            // Bind necessary until OWL supports arrow function in handlers: https://github.com/odoo/owl/issues/876\n            this.onClickJoinButton = this.onClickJoinButton.bind(this);\n            this.onInputGuestNameInput = this.onInputGuestNameInput.bind(this);\n            this.onKeydownGuestNameInput = this.onKeydownGuestNameInput.bind(this);\n        }\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        /**\n         * Updates guest if needed then displays the thread view instead of the\n         * welcome view.\n         */\n        async joinChannel() {\n            if (this.hasGuestNameChanged) {\n                await this.messaging.models['mail.guest'].performRpcGuestUpdateName({\n                    id: this.messaging.currentGuest.id,\n                    name: this.pendingGuestName.trim(),\n                });\n            }\n            if (this.discussPublicView.shouldAddGuestAsMemberOnJoin) {\n                await this.performRpcAddGuestAsMember();\n            }\n            this.discussPublicView.switchToThreadView();\n        }\n\n        /**\n         * @param {MouseEvent} ev\n         */\n        onClickJoinButton(ev) {\n            this.joinChannel();\n        }\n\n        /**\n         * Handles OWL update on this WelcomeView component.\n         */\n        onComponentUpdate() {\n            this._handleFocus();\n        }\n\n        /**\n         * @param {KeyboardEvent} ev\n         */\n        onInputGuestNameInput(ev) {\n            this._updateGuestNameWithInputValue();\n        }\n\n        /**\n         * @param {KeyboardEvent} ev\n         */\n        onKeydownGuestNameInput(ev) {\n            if (ev.key === 'Enter') {\n                this.joinChannel();\n            }\n        }\n\n        /**\n         * Adds the current guest to members of the channel linked to this\n         * welcome view.\n         */\n        async performRpcAddGuestAsMember() {\n            await this.env.services.rpc({\n                route: '/mail/channel/add_guest_as_member',\n                params: {\n                    channel_id: this.channel.id,\n                    channel_uuid: this.channel.uuid,\n                },\n            });\n        }\n\n        //----------------------------------------------------------------------\n        // Private\n        //----------------------------------------------------------------------\n\n        /**\n         * @private\n         * @returns {string}\n         */\n        _computeGuestNameInputUniqueId() {\n            return `o_WelcomeView_guestNameInput_${getNextGuestNameInputId()}`;\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeHasGuestNameChanged() {\n            return Boolean(this.messaging.currentGuest && this.originalGuestName !== this.pendingGuestName);\n        }\n\n        /**\n         * @private\n         * @returns {boolean}\n         */\n        _computeIsJoinButtonDisabled() {\n            return Boolean(this.messaging.currentGuest && this.pendingGuestName.trim() === '');\n        }\n\n        /**\n         * @private\n         * @returns {FieldCommand}\n         */\n        _computeMediaPreview() {\n            return (this.channel && this.channel.defaultDisplayMode === 'video_full_screen')\n                ? insertAndReplace()\n                : clear();\n        }\n\n        /**\n         * @private\n         */\n        _handleFocus() {\n            if (this.isDoFocusGuestNameInput) {\n                if (!this.guestNameInputRef.el) {\n                    return;\n                }\n                this.update({ isDoFocusGuestNameInput: false });\n                this.guestNameInputRef.el.focus();\n                // place cursor at end of text\n                const { length } = (this.pendingGuestName || '');\n                this.guestNameInputRef.el.setSelectionRange(length, length);\n            }\n        }\n\n        /**\n         * Updates `pendingGuestName` with the value of the input element\n         * referred by `guestNameInputRef`.\n         *\n         * @private\n         */\n        _updateGuestNameWithInputValue() {\n            this.update({ pendingGuestName: this.guestNameInputRef.el.value });\n        }\n\n    }\n\n    WelcomeView.fields = {\n        /**\n         * States the channel to redirect to once the user clicks on the\n         * 'joinButton'.\n         */\n        channel: one2one('mail.thread', {\n            readonly: true,\n            required: true,\n        }),\n        /**\n         * States discuss public view on which this welcome view is displayed.\n         */\n        discussPublicView: one2one('mail.discuss_public_view', {\n            inverse: 'welcomeView',\n            readonly: true,\n            required: true,\n        }),\n        /**\n         * States the OWL ref the to input element containing the\n         * 'pendingGuestName'.\n         */\n        guestNameInputRef: attr(),\n        /**\n         * States the value to use for `id`, `for`, and `name` attributes of\n         * the guest name input and its label.\n         *\n         * Necessary to ensure the uniqueness.\n         */\n        guestNameInputUniqueId: attr({\n            compute: '_computeGuestNameInputUniqueId',\n            readonly: true,\n        }),\n        /**\n         * Determines whether the guest's name has been updated.\n         *\n         * Useful to determine whether a RPC should be done to update the name\n         * server side.\n         */\n        hasGuestNameChanged: attr({\n            compute: '_computeHasGuestNameChanged',\n            readonly: true,\n        }),\n        /**\n         * Determines whether the 'guestNameInput' should be focused the next\n         * time the component is updated.\n         */\n        isDoFocusGuestNameInput: attr(),\n        /**\n         * Determines whether the 'joinButton' is disabled.\n         *\n         * Shall be disabled when 'pendingGuestName' is an empty string while\n         * the current user is a guest.\n         */\n        isJoinButtonDisabled: attr({\n            compute: '_computeIsJoinButtonDisabled'\n        }),\n        /**\n         * States the media preview embedded in this welcome view.\n         */\n        mediaPreview: one2one('mail.media_preview', {\n            compute: '_computeMediaPreview',\n            isCausal: true,\n            readonly: true,\n        }),\n        /**\n         * States the name the guest had when landing on the welcome view.\n         *\n         * Useful to determine whether the name has changed.\n         */\n        originalGuestName: attr(),\n        /**\n         * Determines the value of the 'guestNameInput'.\n         *\n         * Will be used to update the current guest's name when joining the\n         * channel by clicking on the 'joinButton'.\n         */\n        pendingGuestName: attr(),\n    };\n    WelcomeView.identifyingFields = ['messaging'];\n    WelcomeView.modelName = 'mail.welcome_view';\n\n    return WelcomeView;\n}\n\nregisterNewModel('mail.welcome_view', factory);\n", "/** @odoo-module **/\n\n// ensure component is registered beforehand.\nimport '@mail/components/chat_window_manager/chat_window_manager';\nimport { getMessagingComponent } from \"@mail/utils/messaging_component\";\n\nimport AbstractService from 'web.AbstractService';\nimport { bus } from 'web.core';\n\nexport const ChatWindowService = AbstractService.extend({\n    dependencies: ['messaging'],\n    /**\n     * @override {web.AbstractService}\n     */\n    start() {\n        this._super(...arguments);\n        this._listenHomeMenu();\n    },\n    /**\n     * @private\n     */\n    destroy() {\n        if (this.component) {\n            this.component.destroy();\n            this.component = undefined;\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @returns {Node}\n     */\n    _getParentNode() {\n        return document.querySelector('body');\n    },\n    /**\n     * @private\n     */\n    _listenHomeMenu() {\n        bus.on('web_client_ready', this, this._onWebClientReady.bind(this));\n    },\n    /**\n     * @private\n     */\n    async _mount() {\n        if (this.component) {\n            this.component.destroy();\n            this.component = undefined;\n        }\n        const ChatWindowManagerComponent = getMessagingComponent(\"ChatWindowManager\");\n        this.component = new ChatWindowManagerComponent(null);\n        const parentNode = this._getParentNode();\n        await this.component.mount(parentNode);\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     */\n    async _onWebClientReady() {\n        await this._mount();\n    },\n});\n", "/** @odoo-module **/\n\n// ensure component is registered beforehand.\nimport '@mail/components/dialog_manager/dialog_manager';\nimport { getMessagingComponent } from \"@mail/utils/messaging_component\";\n\nimport AbstractService from 'web.AbstractService';\nimport { bus } from 'web.core';\n\nexport const DialogService = AbstractService.extend({\n    dependencies: ['messaging'],\n    /**\n     * @override {web.AbstractService}\n     */\n    start() {\n        this._super(...arguments);\n        this._listenHomeMenu();\n    },\n    /**\n     * @private\n     */\n    destroy() {\n        if (this.component) {\n            this.component.destroy();\n            this.component = undefined;\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @returns {Node}\n     */\n    _getParentNode() {\n        return document.querySelector('body');\n    },\n    /**\n     * @private\n     */\n    _listenHomeMenu() {\n        bus.on('web_client_ready', this, this._onWebClientReady.bind(this));\n    },\n    /**\n     * @private\n     */\n    async _mount() {\n        if (this.component) {\n            this.component.destroy();\n            this.component = undefined;\n        }\n        const DialogManagerComponent = getMessagingComponent(\"DialogManager\");\n        this.component = new DialogManagerComponent(null);\n        const parentNode = this._getParentNode();\n        await this.component.mount(parentNode);\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     */\n    async _onWebClientReady() {\n        await this._mount();\n    }\n});\n", "/** @odoo-module **/\n\nimport { ModelManager } from '@mail/model/model_manager';\n\nimport AbstractService from 'web.AbstractService';\n\nexport const MessagingService = AbstractService.extend({\n    dependencies: ['bus_service'],\n    messagingValues: {},\n    /**\n     * @override\n     */\n    init(env) {\n        this._super(env);\n        this.modelManager = new ModelManager(env);\n    },\n    /**\n     * @override\n     */\n    start() {\n        this._super();\n        this.modelManager.start(this.messagingValues);\n    },\n    /**\n     * Returns the messaging record once it is initialized. This method should\n     * be considered the main entry point to the messaging system for outside\n     * code.\n     *\n     * @returns {mail.messaging}\n     **/\n    async get() {\n        return this.modelManager.getMessaging();\n    }\n});\n", "/** @odoo-module **/\n\n// ensure components are registered beforehand.\nimport '@mail/components/messaging_menu/messaging_menu';\nimport '@mail/components/rtc_activity_notice/rtc_activity_notice';\nimport { getMessagingComponent } from '@mail/utils/messaging_component';\n\nimport AbstractService from 'web.AbstractService';\nimport { registry } from '@web/core/registry';\n\nconst systrayRegistry = registry.category('systray');\n\nexport const SystrayService = AbstractService.extend({\n    dependencies: ['messaging'],\n    /**\n     * @override {web.AbstractService}\n     */\n    async start() {\n        await owl.Component.env.services.messaging.modelManager.messagingCreatedPromise;\n        systrayRegistry.add('mail.MessagingMenu', {\n            Component: getMessagingComponent('MessagingMenu'),\n        });\n        systrayRegistry.add('mail.RtcActivityNotice', {\n            Component: getMessagingComponent('RtcActivityNotice'),\n        });\n    },\n});\n", "/** @odoo-module **/\n\nimport { registry } from \"@web/core/registry\";\nimport { _lt } from \"@web/core/l10n/translation\";\n\nconst commandCategoryRegistry = registry.category(\"command_categories\");\ncommandCategoryRegistry.add(\"mail\", {}, { sequence: 20 });\n", "/** @odoo-module */\n\nimport { _lt } from \"@web/core/l10n/translation\";\nimport { registry } from \"@web/core/registry\";\n\nconst { Component } = owl;\nconst { xml } = owl.tags;\n\nclass DialogCommand extends Component {}\nDialogCommand.template = xml`\n    <div class=\"o_command_default\">\n        <span t-esc=\"props.name\"/>\n        <span t-if=\"props.email\" t-esc=\"props.email\"/>\n    </div>\n`;\n\nconst commandEmptyMessageRegistry = registry.category(\"command_empty_list\");\ncommandEmptyMessageRegistry.add(\"@\", _lt(\"No user found\"));\ncommandEmptyMessageRegistry.add(\"#\", _lt(\"No channel found\"));\n\nconst commandProviderRegistry = registry.category(\"command_provider\");\ncommandProviderRegistry.add(\"partner\", {\n    namespace: \"@\",\n    async provide(newEnv, options) {\n        const messaging = await Component.env.services.messaging.get();\n        const suggestions = [];\n        await messaging.models['mail.partner'].imSearch({\n            callback(partners) {\n                partners.forEach((partner) => {\n                    suggestions.push({\n                        Component: DialogCommand,\n                        action() {\n                            partner.openChat();\n                        },\n                        name: partner.nameOrDisplayName,\n                        props: {\n                            email: partner.email,\n                        },\n                    });\n                });\n            },\n            keyword: options.searchValue,\n            limit: 10,\n        });\n        return suggestions;\n    },\n});\n\ncommandProviderRegistry.add(\"channel\", {\n    namespace: \"#\",\n    async provide(newEnv, options) {\n        const messaging = await Component.env.services.messaging.get();\n        const channels = await messaging.models['mail.thread'].searchChannelsToOpen({\n            limit: 10,\n            searchTerm: options.searchValue,\n        });\n        return channels.map((channel) => ({\n            async action() {\n                await channel.join();\n                // Channel must be pinned immediately to be able to open it before\n                // the result of join is received on the bus.\n                channel.update({ isServerPinned: true });\n                channel.open();\n            },\n            name: channel.displayName,\n        }));\n    },\n});\n", "/** @odoo-module **/\n\n// ensure component is registered beforehand.\nimport '@mail/components/discuss/discuss';\nimport { getMessagingComponent } from \"@mail/utils/messaging_component\";\n\nimport AbstractAction from 'web.AbstractAction';\n\nconst { Component } = owl;\n\nexport const DiscussWidget = AbstractAction.extend({\n    template: 'mail.widgets.Discuss',\n    /**\n     * @override {web.AbstractAction}\n     * @param {web.ActionManager} parent\n     * @param {Object} action\n     * @param {Object} [action.context]\n     * @param {string} [action.context.active_id]\n     * @param {Object} [action.params]\n     * @param {string} [action.params.default_active_id]\n     * @param {Object} [options={}]\n     */\n    init(parent, action, options={}) {\n        this._super(...arguments);\n\n        // control panel attributes\n        this.action = action;\n        this.actionManager = parent;\n        this.discuss = undefined;\n        this.options = options;\n\n        this.component = undefined;\n\n        this._lastPushStateActiveThread = null;\n        this.env = Component.env;\n        Component.env.services.messaging.modelManager.messagingCreatedPromise.then(async () => {\n            const messaging = Component.env.services.messaging.modelManager.messaging;\n            const initActiveId = this.options.active_id ||\n                (this.action.context && this.action.context.active_id) ||\n                (this.action.params && this.action.params.default_active_id) ||\n                'mail.box_inbox';\n            this.discuss = messaging.discuss;\n            this.discuss.update({ initActiveId, isOpen: true });\n            // Wait for messaging to be initialized to make sure the system\n            // knows of the \"init thread\" if it exists.\n            await messaging.initializedPromise;\n            if (!this.discuss.isInitThreadHandled) {\n                this.discuss.update({ isInitThreadHandled: true });\n                if (!this.discuss.thread) {\n                    this.discuss.openInitThread();\n                }\n            }\n        });\n    },\n    /**\n     * @override {web.AbstractAction}\n     */\n    destroy() {\n        if (this.component) {\n            this.component.destroy();\n            this.component = undefined;\n        }\n        if (this.$buttons) {\n            this.$buttons.off().remove();\n        }\n        this._super(...arguments);\n    },\n    /**\n     * @override {web.AbstractAction}\n     */\n    on_attach_callback() {\n        this._super(...arguments);\n        if (this.component) {\n            // prevent twice call to on_attach_callback (FIXME)\n            return;\n        }\n        const DiscussComponent = getMessagingComponent(\"Discuss\");\n        this.component = new DiscussComponent();\n        this._pushStateActionManagerEventListener = ev => {\n            ev.stopPropagation();\n            if (this._lastPushStateActiveThread === this.discuss.thread) {\n                return;\n            }\n            this._pushStateActionManager();\n            this._lastPushStateActiveThread = this.discuss.thread;\n        };\n        this._showRainbowManEventListener = ev => {\n            ev.stopPropagation();\n            this._showRainbowMan();\n        };\n        this.el.addEventListener(\n            'o-push-state-action-manager',\n            this._pushStateActionManagerEventListener\n        );\n        this.el.addEventListener(\n            'o-show-rainbow-man',\n            this._showRainbowManEventListener\n        );\n        return this.component.mount(this.el);\n    },\n    /**\n     * @override {web.AbstractAction}\n     */\n    on_detach_callback() {\n        this._super(...arguments);\n        if (this.component) {\n            this.component.destroy();\n        }\n        this.component = undefined;\n        this.el.removeEventListener(\n            'o-push-state-action-manager',\n            this._pushStateActionManagerEventListener\n        );\n        this.el.removeEventListener(\n            'o-show-rainbow-man',\n            this._showRainbowManEventListener\n        );\n        this._lastPushStateActiveThread = null;\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     */\n    _pushStateActionManager() {\n        this.actionManager.do_push_state({\n            action: this.action.id,\n            active_id: this.discuss.activeId,\n        });\n    },\n    /**\n     * @private\n     */\n    _showRainbowMan() {\n        this.trigger_up('show_effect', {\n            message: this.env._t(\"Congratulations, your inbox is empty!\"),\n            type: 'rainbow_man',\n        });\n    },\n});\n", "/** @odoo-module **/\n\n// ensure component is registered beforehand.\nimport '@mail/components/chatter_container/chatter_container';\nimport { getMessagingComponent } from \"@mail/utils/messaging_component\";\n\nimport FormRenderer from 'web.FormRenderer';\nimport { ComponentWrapper } from 'web.OwlCompatibility';\n\nclass ChatterContainerWrapperComponent extends ComponentWrapper {}\n\n/**\n * Include the FormRenderer to instantiate the chatter area containing (a\n * subset of) the mail widgets (mail_thread, mail_followers and mail_activity).\n */\nFormRenderer.include({\n    /**\n     * @override\n     */\n    init(parent, state, params) {\n        this._super(...arguments);\n        this.chatterFields = params.chatterFields;\n        this.mailFields = params.mailFields;\n        this._chatterContainerComponent = undefined;\n        /**\n         * The target of chatter, if chatter has to be appended to the DOM.\n         * This is set when arch contains `div.oe_chatter`.\n         */\n        this._chatterContainerTarget = undefined;\n        // Do not load chatter in form view dialogs\n        this._isFromFormViewDialog = params.isFromFormViewDialog;\n    },\n    /**\n     * @override\n     */\n    destroy() {\n        this._super(...arguments);\n        this._chatterContainerComponent = undefined;\n        this.off('o_attachments_changed', this);\n        this.off('o_chatter_rendered', this);\n        this.off('o_message_posted', this);\n        owl.Component.env.bus.off('mail.thread:promptAddFollower-closed', this);\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Returns whether the form renderer has a chatter to display or not.\n     * This is based on arch, which should have `div.oe_chatter`.\n     *\n     * @private\n     * @returns {boolean}\n     */\n    _hasChatter() {\n        return !!this._chatterContainerTarget;\n    },\n    /**\n     * @private\n     */\n    _makeChatterContainerComponent() {\n        const props = this._makeChatterContainerProps();\n        this._chatterContainerComponent = new ChatterContainerWrapperComponent(\n            this,\n            getMessagingComponent(\"ChatterContainer\"),\n            props\n        );\n        // Not in custom_events because other modules may remove this listener\n        // while attempting to extend them.\n        this.on('o_chatter_rendered', this, ev => this._onChatterRendered(ev));\n        if (this.chatterFields.hasRecordReloadOnMessagePosted) {\n            this.on('o_message_posted', this, ev => {\n                this.trigger_up('reload', { keepChanges: true });\n            });\n        }\n        if (this.chatterFields.hasRecordReloadOnAttachmentsChanged) {\n            this.on('o_attachments_changed', this, ev => this.trigger_up('reload', { keepChanges: true }));\n        }\n        if (this.chatterFields.hasRecordReloadOnFollowersUpdate) {\n            owl.Component.env.bus.on('mail.thread:promptAddFollower-closed', this, ev => this.trigger_up('reload', { keepChanges: true }));\n        }\n    },\n    /**\n     * @private\n     * @returns {Object}\n     */\n    _makeChatterContainerProps() {\n        return {\n            hasActivities: this.chatterFields.hasActivityIds,\n            hasFollowers: this.chatterFields.hasMessageFollowerIds,\n            hasMessageList: this.chatterFields.hasMessageIds,\n            isAttachmentBoxVisibleInitially: this.chatterFields.isAttachmentBoxVisibleInitially,\n            threadId: this.state.res_id,\n            threadModel: this.state.model,\n        };\n    },\n    /**\n     * Create the DOM element that will contain the chatter. This is made in\n     * a separate method so it can be overridden (like in mail_enterprise for\n     * example).\n     *\n     * @private\n     * @returns {jQuery.Element}\n     */\n    _makeChatterContainerTarget() {\n        const $el = $('<div class=\"o_FormRenderer_chatterContainer\"/>');\n        this._chatterContainerTarget = $el[0];\n        return $el;\n    },\n    /**\n     * Mount the chatter\n     *\n     * Force re-mounting chatter component in DOM. This is necessary\n     * because each time `_renderView` is called, it puts old content\n     * in a fragment.\n     *\n     * @private\n     */\n    async _mountChatterContainerComponent() {\n        try {\n            await this._chatterContainerComponent.mount(this._chatterContainerTarget);\n        } catch (error) {\n            if (error.message !== \"Mounting operation cancelled\") {\n                throw error;\n            }\n        }\n    },\n    /**\n     * @override\n     */\n    _renderNode(node) {\n        if (node.tag === 'div' && node.attrs.class === 'oe_chatter') {\n            if (this._isFromFormViewDialog) {\n                return $('<div/>');\n            }\n            return this._makeChatterContainerTarget();\n        }\n        return this._super(...arguments);\n    },\n    /**\n     * Overrides the function to render the chatter once the form view is\n     * rendered.\n     *\n     * @override\n     */\n    async __renderView() {\n        await this._super(...arguments);\n        if (this._hasChatter()) {\n            if (!this._chatterContainerComponent) {\n                this._makeChatterContainerComponent();\n            } else {\n                await this._updateChatterContainerComponent();\n            }\n            await this._mountChatterContainerComponent();\n        }\n    },\n    /**\n     * @private\n     */\n    async _updateChatterContainerComponent() {\n        const props = this._makeChatterContainerProps();\n        try {\n            await this._chatterContainerComponent.update(props);\n        } catch (error) {\n            if (error.message !== \"Mounting operation cancelled\") {\n                throw error;\n            }\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @abstract\n     * @private\n     * @param {OdooEvent} ev\n     * @param {Object} ev.data\n     * @param {mail.attachment[]} ev.data.attachments\n     * @param {mail.thread} ev.data.thread\n     */\n    _onChatterRendered(ev) {},\n});\n", "/** @odoo-module **/\n\n// ensure component is registered beforehand.\nimport '@mail/components/notification_alert/notification_alert';\nimport { getMessagingComponent } from \"@mail/utils/messaging_component\";\n\nimport { ComponentWrapper, WidgetAdapterMixin } from 'web.OwlCompatibility';\nimport Widget from 'web.Widget';\nimport widgetRegistry from 'web.widget_registry';\n\nclass NotificationAlertWrapper extends ComponentWrapper {}\n\n// -----------------------------------------------------------------------------\n// Display Notification alert on user preferences form view\n// -----------------------------------------------------------------------------\nconst NotificationAlertWidget = Widget.extend(WidgetAdapterMixin, {\n    /**\n     * @override\n     */\n    init() {\n        this._super(...arguments);\n        this.component = undefined;\n    },\n    /**\n     * @override\n     */\n    async start() {\n        await this._super(...arguments);\n\n        this.component = new NotificationAlertWrapper(\n            this,\n            getMessagingComponent(\"NotificationAlert\"),\n            {}\n        );\n        await this.component.mount(this.el);\n    },\n});\n\nwidgetRegistry.add('notification_alert', NotificationAlertWidget);\n\nexport default NotificationAlertWidget;\n", "odoo.define('product.generate_pricelist', function (require) {\n'use strict';\n\nvar AbstractAction = require('web.AbstractAction');\nvar core = require('web.core');\nvar FieldMany2One = require('web.relational_fields').FieldMany2One;\nvar StandaloneFieldManagerMixin = require('web.StandaloneFieldManagerMixin');\nvar Widget = require('web.Widget');\n\nvar QWeb = core.qweb;\nvar _t = core._t;\n\nvar QtyTagWidget = Widget.extend({\n    template: 'product.report_pricelist_qty',\n    events: {\n        'click .o_remove_qty': '_onClickRemoveQty',\n    },\n    /**\n     * @override\n     */\n    init: function (parent, defaulQuantities) {\n        this._super.apply(this, arguments);\n        this.quantities = defaulQuantities;\n        this.MAX_QTY = 5;\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Add a quantity when add(+) button clicked.\n     *\n     * @private\n     */\n    _onClickAddQty: function () {\n        if (this.quantities.length >= this.MAX_QTY) {\n            this.displayNotification({ message: _.str.sprintf(\n                _t(\"At most %d quantities can be displayed simultaneously. Remove a selected quantity to add others.\"),\n                this.MAX_QTY\n            ) });\n            return;\n        }\n        const qty = parseInt(this.$('.o_product_qty').val());\n        if (qty && qty > 0) {\n            // Check qty already exist\n            if (this.quantities.indexOf(qty) === -1) {\n                this.quantities.push(qty);\n                this.quantities = this.quantities.sort((a, b) => a - b);\n                this.trigger_up('qty_changed', {quantities: this.quantities});\n                this.renderElement();\n            } else {\n                this.displayNotification({\n                    message: _.str.sprintf(_t(\"Quantity already present (%d).\"), qty),\n                    type: 'info'\n                });\n            }\n        } else {\n            this.displayNotification({ message: _t(\"Please enter a positive whole number\") });\n        }\n    },\n    /**\n     * Remove quantity.\n     *\n     * @private\n     * @param {jQueryEvent} ev\n     */\n    _onClickRemoveQty: function (ev) {\n        const qty = parseInt($(ev.currentTarget).closest('.badge').data('qty'));\n        this.quantities = this.quantities.filter(q => q !== qty);\n        this.trigger_up('qty_changed', {quantities: this.quantities});\n        this.renderElement();\n    },\n});\n\nvar GeneratePriceList = AbstractAction.extend(StandaloneFieldManagerMixin, {\n    hasControlPanel: true,\n    events: {\n        'click .o_action': '_onClickAction',\n        'submit form': '_onSubmitForm',\n    },\n    custom_events: Object.assign({}, StandaloneFieldManagerMixin.custom_events, {\n        field_changed: '_onFieldChanged',\n        qty_changed: '_onQtyChanged',\n    }),\n    /**\n     * @override\n     */\n    init: function (parent, params) {\n        this._super.apply(this, arguments);\n        StandaloneFieldManagerMixin.init.call(this);\n        this.context = params.context;\n        // in case the window got refreshed\n        if (params.params && params.params.active_ids && typeof(params.params.active_ids === 'string')) {\n            try {\n                this.context.active_ids = params.params.active_ids.split(',').map(id => parseInt(id));\n                this.context.active_model = params.params.active_model;\n            } catch(e) {\n                console.log('unable to load ids from the url fragment \ud83d\ude41');\n            }\n        }\n        if (!this.context.active_model) {\n            // started without an active module, assume product templates\n            this.context.active_model = 'product.template';\n        }\n        this.context.quantities = [1, 5, 10];\n    },\n    /**\n     * @override\n     */\n    willStart: function () {\n        let getPricelist;\n        // started without a selected pricelist in context? just get the first one\n        if (this.context.default_pricelist) {\n            getPricelist = Promise.resolve([this.context.default_pricelist]);\n        } else {\n            getPricelist = this._rpc({\n                model: 'product.pricelist',\n                method: 'search',\n                args: [[]],\n                kwargs: {limit: 1}\n            });\n        }\n        const fieldSetup = getPricelist.then(pricelistIds => {\n            return this.model.makeRecord('report.product.report_pricelist', [{\n                name: 'pricelist_id',\n                type: 'many2one',\n                relation: 'product.pricelist',\n                value: pricelistIds[0],\n            }]);\n        }).then(recordID => {\n            const record = this.model.get(recordID);\n            this.many2one = new FieldMany2One(this, 'pricelist_id', record, {\n                mode: 'edit',\n                attrs: {\n                    can_create: false,\n                    can_write: false,\n                    options: {no_open: true},\n                },\n            });\n            this._registerWidget(recordID, 'pricelist_id', this.many2one);\n        });\n        return Promise.all([fieldSetup, this._getHtml(), this._super()]);\n    },\n    /**\n     * @override\n     */\n    start: function () {\n        this.controlPanelProps.cp_content = this._renderComponent();\n        const $content = this.controlPanelProps.cp_content;\n        $content[\"$searchview\"][0].querySelector('.o_is_visible_title').addEventListener('click', this._onClickVisibleTitle.bind(this));\n        return this._super.apply(this, arguments).then(() => {\n            this.$('.o_content').html(this.reportHtml);\n        });\n    },\n    /**\n     * Include the current model (template/variant) in the state to allow refreshing without losing\n     * the proper context.\n     * @override\n     */\n    getState: function () {\n        return {\n            active_model: this.context.active_model,\n        };\n    },\n    getTitle: function () {\n        return _t('Pricelist Report');\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Returns the expected data for the report rendering call (html or pdf)\n     *\n     * @private\n     * @returns {Object}\n     */\n    _prepareActionReportParams: function () {\n        return {\n            active_model: this.context.active_model,\n            active_ids: this.context.active_ids || '',\n            is_visible_title: this.context.is_visible_title || '',\n            pricelist_id: this.context.pricelist_id || '',\n            quantities: this.context.quantities || [1],\n        };\n    },\n    /**\n     * Get template to display report.\n     *\n     * @private\n     * @returns {Promise}\n     */\n    _getHtml: function () {\n        return this._rpc({\n            model: 'report.product.report_pricelist',\n            method: 'get_html',\n            kwargs: {\n                data: this._prepareActionReportParams(),\n                context: this.context,\n            },\n        }).then(result => {\n            this.reportHtml = result;\n        });\n    },\n    /**\n     * Reload report.\n     *\n     * @private\n     * @returns {Promise}\n     */\n    _reload: function () {\n        return this._getHtml().then(() => {\n            this.$('.o_content').html(this.reportHtml);\n        });\n    },\n    /**\n     * Render search view and print button.\n     *\n     * @private\n     */\n    _renderComponent: function () {\n        const $buttons = $('<button>', {\n            class: 'btn btn-primary',\n            text: _t(\"Print\"),\n        }).on('click', this._onClickPrint.bind(this));\n\n        const $searchview = $(QWeb.render('product.report_pricelist_search'));\n        this.many2one.appendTo($searchview.find('.o_pricelist'));\n\n        this.qtyTagWidget = new QtyTagWidget(this, this.context.quantities);\n        this.qtyTagWidget.replace($searchview.find('.o_product_qty'));\n        return { $buttons, $searchview };\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Checkbox is checked, the report title will show.\n     *\n     * @private\n     * @param {Event} ev\n     */\n    _onClickVisibleTitle(ev) {\n        this.context.is_visible_title = ev.currentTarget.checked;\n        this._reload();\n    },\n\n    /**\n     * Open form view of particular record when link clicked.\n     *\n     * @private\n     * @param {jQueryEvent} ev\n     */\n    _onClickAction: function (ev) {\n        ev.preventDefault();\n        this.do_action({\n            type: 'ir.actions.act_window',\n            res_model: $(ev.currentTarget).data('model'),\n            res_id: $(ev.currentTarget).data('res-id'),\n            views: [[false, 'form']],\n            target: 'self',\n        });\n    },\n    /**\n     * Print report in PDF when button clicked.\n     *\n     * @private\n     */\n    _onClickPrint: function () {\n        return this.do_action({\n            type: 'ir.actions.report',\n            report_type: 'qweb-pdf',\n            report_name: 'product.report_pricelist',\n            report_file: 'product.report_pricelist',\n            data: this._prepareActionReportParams(),\n        });\n    },\n    /**\n     * Reload report when pricelist changed.\n     *\n     * @override\n     */\n    _onFieldChanged: function (event) {\n        this.context.pricelist_id = event.data.changes.pricelist_id.id;\n        StandaloneFieldManagerMixin._onFieldChanged.apply(this, arguments);\n        this._reload();\n    },\n    /**\n     * Reload report when quantities changed.\n     *\n     * @private\n     * @param {OdooEvent} ev\n     * @param {integer[]} event.data.quantities\n     */\n    _onQtyChanged: function (ev) {\n        this.context.quantities = ev.data.quantities;\n        this._reload();\n    },\n    _onSubmitForm: function (ev) {\n        ev.preventDefault();\n        ev.stopPropagation();\n        this.qtyTagWidget._onClickAddQty();\n    },\n});\n\ncore.action_registry.add('generate_pricelist', GeneratePriceList);\n\nreturn {\n    GeneratePriceList,\n    QtyTagWidget\n};\n\n});\n", "/** @odoo-module **/\n\nimport { registry } from '@web/core/registry'\nimport { HotkeyCommandItem } from '@web/core/commands/default_providers'\n\n// The only way to know if an editor is under focus when the command palette\n// open is to look if there in a selection within a wysiwyg editor in the page.\n// As the selection changes after the command palette is open, we need to save\n// the action (that have the range and editor in the closure) as well as the\n// label to use.\nlet sessionActionLabel = [];\n\nconst commandProviderRegistry = registry.category(\"command_provider\");\ncommandProviderRegistry.add(\"link dialog\", {\n    async provide(env, { sessionId }) {\n        const Wysiwyg = odoo.__DEBUG__.services['web_editor.wysiwyg'];\n        if (!Wysiwyg) {\n            return [];\n        }\n        let [lastSessionId, action, label] = sessionActionLabel;\n        if (lastSessionId !== sessionId) {\n            const wysiwyg = [...Wysiwyg.activeWysiwygs].find((wysiwyg) => {\n                return wysiwyg.isSelectionInEditable();\n            });\n            const selection = wysiwyg && wysiwyg.odooEditor && wysiwyg.odooEditor.document.getSelection();\n            const range = selection && selection.rangeCount && selection.getRangeAt(0);\n            if (range) {\n                label = !wysiwyg.getInSelection('a') ? 'Create link' : 'Edit link';\n                action = () => {\n                    const selection = wysiwyg.odooEditor.document.getSelection();\n                    selection.removeAllRanges();\n                    selection.addRange(range);\n\n                    wysiwyg.openLinkToolsFromSelection();\n                }\n                sessionActionLabel = [sessionId, action, label]\n            } else {\n                sessionActionLabel = [sessionId];\n            }\n        }\n        [lastSessionId, action, label] = sessionActionLabel;\n\n        if (action) {\n            return [\n                {\n                    Component: HotkeyCommandItem,\n                    action: action,\n                    category: 'shortcut_conflict',\n                    name: label,\n                    props: { hotkey: 'control+k' },\n                }\n            ]\n        } else {\n            return [];\n        }\n    },\n});\n", "odoo.define('wysiwyg.widgets.Dialog', function (require) {\n'use strict';\n\nvar config = require('web.config');\nvar core = require('web.core');\nvar Dialog = require('web.Dialog');\n\nvar _t = core._t;\n\n/**\n * Extend Dialog class to handle save/cancel of edition components.\n */\nvar WysiwygDialog = Dialog.extend({\n    /**\n     * @constructor\n     */\n    init: function (parent, options) {\n        this.options = options || {};\n        if (config.device.isMobile) {\n            options.fullscreen = true;\n        }\n        this._super(parent, _.extend({}, {\n            buttons: [{\n                    text: this.options.save_text || _t(\"Save\"),\n                    classes: 'btn-primary',\n                    click: this.save,\n                },\n                {\n                    text: _t(\"Discard\"),\n                    close: true,\n                }\n            ]\n        }, this.options));\n\n        this.destroyAction = 'cancel';\n\n        var self = this;\n        this.opened(function () {\n            const selector = options.focusField\n                ? `input[name=${options.focusField}]` \n                : 'input:visible:first';\n            self.$(selector).focus();\n            self.$el.closest('.modal').addClass('o_web_editor_dialog');\n            self.$el.closest('.modal').on('hidden.bs.modal', self.options.onClose);\n        });\n        this.on('closed', this, function () {\n            self._toggleFullScreen();\n            this.trigger(this.destroyAction, this.final_data || null);\n        });\n    },\n    /**\n     * Only use on config.device.isMobile, it's used by mass mailing to allow the dialog opening on fullscreen\n     * @private\n     */\n    _toggleFullScreen: function() {\n        if (config.device.isMobile && !this.hasFullScreen) {\n            $('#iframe_target[isMobile=\"true\"] #web_editor-top-edit .o_fullscreen').click();\n        }\n    },\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Called when the dialog is saved. Set the destroy action type to \"save\"\n     * and should set the final_data variable correctly before closing.\n     */\n    save: function () {\n        this.destroyAction = \"save\";\n        this.close();\n    },\n    /**\n     * @override\n     * @returns {*}\n     */\n    open: function() {\n        this.hasFullScreen = $(window.top.document.body).hasClass('o_field_widgetTextHtml_fullscreen');\n        this._toggleFullScreen();\n        return this._super.apply(this, arguments);\n    },\n});\n\nreturn WysiwygDialog;\n});\n", "odoo.define('web_editor.loader', function (require) {\n'use strict';\n\nvar ajax = require('web.ajax');\n\nlet wysiwygPromise;\n\nconst exports = {};\n\nfunction loadWysiwyg(additionnalAssets=[]) {\n    return ajax.loadLibs({assetLibs: ['web_editor.compiled_assets_wysiwyg', ...additionnalAssets]}, undefined, '/web_editor/public_render_template');\n}\nexports.loadWysiwyg = loadWysiwyg;\n\n/**\n * Load the assets and create a wysiwyg.\n *\n * @param {Widget} parent The wysiwyg parent\n * @param {object} options The wysiwyg options\n */\nexports.createWysiwyg = async (parent, options, additionnalAssets = []) => {\n    const wysiwygAlias = options.wysiwygAlias || 'web_editor.wysiwyg';\n    if (!wysiwygPromise) {\n        wysiwygPromise = new Promise(async (resolve) => {\n            await loadWysiwyg(additionnalAssets);\n            // Wait the loading of the service and his dependencies (use string to\n            // avoid parsing of require function).\n            const stringFunction = `return new Promise(resolve => {\n                odoo.define('${wysiwygAlias}.loaded', require => {\n                    ` + 'require' + `('${wysiwygAlias}');\n                    resolve();\n                });\n            });`;\n            await new Function(stringFunction)();\n            resolve();\n        });\n    }\n    await wysiwygPromise;\n    const Wysiwyg = odoo.__DEBUG__.services[wysiwygAlias];\n    return new Wysiwyg(parent, options);\n};\n\nexports.loadFromTextarea = async (parent, textarea, options) => {\n    var loading = textarea.nextElementSibling;\n    if (loading && !loading.classList.contains('o_wysiwyg_loading')) {\n        loading = null;\n    }\n    const $textarea = $(textarea);\n    const currentOptions = Object.assign({}, options);\n    currentOptions.value = currentOptions.value || $textarea.val() || '';\n    if (!currentOptions.value.trim()) {\n        currentOptions.value = '<p><br></p>';\n    }\n    const wysiwyg = await exports.createWysiwyg(parent, currentOptions);\n\n    const $wysiwygWrapper = $textarea.closest('.o_wysiwyg_textarea_wrapper');\n    const $form = $textarea.closest('form');\n\n    // hide and append the $textarea in $form so it's value will be send\n    // through the form.\n    $textarea.hide();\n    $form.append($textarea);\n    $wysiwygWrapper.html('');\n\n    await wysiwyg.appendTo($wysiwygWrapper);\n    $form.find('.note-editable').data('wysiwyg', wysiwyg);\n\n    // o_we_selected_image has not always been removed when\n    // saving a post so we need the line below to remove it if it is present.\n    $form.find('.note-editable').find('img.o_we_selected_image').removeClass('o_we_selected_image');\n    $form.on('click', 'button[type=submit]', (e) => {\n        $form.find('.note-editable').find('img.o_we_selected_image').removeClass('o_we_selected_image');\n        // float-left class messes up the post layout OPW 769721\n        $form.find('.note-editable').find('img.float-left').removeClass('float-left');\n        $textarea.html(wysiwyg.getValue());\n    });\n\n    return wysiwyg;\n};\n\nreturn exports;\n});\n", "/** @odoo-module **/\n\nimport { ancestors } from '@web_editor/js/common/wysiwyg_utils';\n\nexport class QWebPlugin {\n    constructor(options = {}) {\n        this._options = options;\n        if (this._options.editor) {\n            this._editable = this._options.editor.editable;\n            this._document = this._options.editor.document;\n        } else {\n            this._editable = this._options.editable;\n            this._document = this._options.document || window.document;\n        }\n        this._editable = this._options.editable || (this._options.editor && this._options.editor.editable);\n        this._document = this._options.document || (this._options.editor && this._options.editor.document) || window.document;\n        this._tGroupCount = 0;\n        this._hideBranchingSelection = this._hideBranchingSelection.bind(this);\n        this._makeBranchingSelection();\n        this._clickListeners = [];\n    }\n    destroy() {\n        this._selectElWrapper.remove();\n        for (const listener of this._clickListeners) {\n            document.removeEventListener('click', listener);\n        }\n    }\n    cleanForSave(editable) {\n        for (const node of editable.querySelectorAll('[data-oe-t-group], [data-oe-t-inline], [data-oe-t-selectable], [data-oe-t-group-active]')) {\n            node.removeAttribute('data-oe-t-group-active');\n            node.removeAttribute('data-oe-t-group');\n            node.removeAttribute('data-oe-t-inline');\n            node.removeAttribute('data-oe-t-selectable');\n        }\n    }\n    sanitizeElement(subRoot) {\n        if (subRoot.nodeType !== Node.ELEMENT_NODE) {\n            return;\n        }\n        if (this._options.editor) {\n            this._options.editor.observerUnactive('qweb-plugin-sanitize');\n        }\n\n        this._fixInlines(subRoot);\n\n        const demoElements = subRoot.querySelectorAll('[t-esc], [t-raw], [t-out]');\n        for (const element of demoElements) {\n            element.setAttribute('contenteditable', 'false');\n        }\n\n        this._groupQwebBranching(subRoot);\n        if (this._options.editor) {\n            this._options.editor.observerActive('qweb-plugin-sanitize');\n        }\n    }\n    _groupQwebBranching(subRoot) {\n        const tNodes = subRoot.querySelectorAll('[t-if], [t-elif], [t-else]');\n        const groupsEncounter = new Set();\n        for (const node of tNodes) {\n            const parentTNode = [...node.parentElement.children];\n            const index = parentTNode.indexOf(node);\n            const prevNode = parentTNode[index - 1];\n\n            let groupId;\n            if (\n                prevNode &&\n                node.previousElementSibling === prevNode &&\n                !node.hasAttribute('t-if')\n            ) {\n                // Make the first t-if selectable, if prevNode is not a t-if,\n                // it's already data-oe-t-selectable.\n                prevNode.setAttribute('data-oe-t-selectable', 'true');\n                groupId = parseInt(prevNode.getAttribute('data-oe-t-group'));\n                node.setAttribute('data-oe-t-selectable', 'true');\n            } else {\n                groupId = this._tGroupCount++;\n            }\n            groupsEncounter.add(groupId);\n            node.setAttribute('data-oe-t-group', groupId);\n\n            const clickListener = e => {\n                e.stopImmediatePropagation();\n                this._showBranchingSelection(node);\n            };\n            this._clickListeners.push(clickListener);\n            node.addEventListener('click', clickListener);\n        }\n        for (const groupId of groupsEncounter) {\n            const isOneElementActive = subRoot.querySelector(\n                `[data-oe-t-group='${groupId}'][data-oe-t-group-active]`,\n            );\n            // If there is no element in groupId activated, activate the first\n            // one.\n            if (!isOneElementActive) {\n                subRoot\n                    .querySelector(`[data-oe-t-group='${groupId}']`)\n                    .setAttribute('data-oe-t-group-active', 'true');\n            }\n        }\n    }\n    _fixInlines(subRoot) {\n        const checkAllInline = el => {\n            return [...el.children].every(child => {\n                if (child.tagName === 'T') {\n                    return checkAllInline(child);\n                } else {\n                    return (\n                        child.nodeType !== Node.ELEMENT_NODE ||\n                        window.getComputedStyle(child).display === 'inline'\n                    );\n                }\n            });\n        };\n        const tElements = subRoot.querySelectorAll('t');\n        // Wait for the content to be on the dom to check checkAllInline\n        // otherwise the getComputedStyle will be wrong.\n        // todo: remove the setTimeout when the editor will provide a signal\n        // that the editable is on the dom.\n        setTimeout(() => {\n            if (this._options.editor) {\n                this._options.editor.observerUnactive('qweb-plugin-checkAllInline');\n            }\n            for (const tElement of tElements) {\n                if (checkAllInline(tElement)) {\n                    tElement.setAttribute('data-oe-t-inline', 'true');\n                }\n            }\n            if (this._options.editor) {\n                this._options.editor.observerActive('qweb-plugin-checkAllInline');\n            }\n        });\n    }\n    _makeBranchingSelection() {\n        const document = this._options.document || window.document;\n        this._selectElWrapper = document.createElement('div');\n        this._selectElWrapper.classList.add('oe-qweb-select');\n        this._selectElWrapper.innerHTML = '';\n        document.body.append(this._selectElWrapper);\n        this._hideBranchingSelection();\n    }\n    _showBranchingSelection(target) {\n        this._hideBranchingSelection();\n\n        const branchingHierarchyElements = [target, ...ancestors(target, this._editable)]\n            .filter(element => element.getAttribute('data-oe-t-group-active') === 'true')\n            .filter(element => {\n                const itemGroupId = element.getAttribute('data-oe-t-group');\n\n                const groupItemsNodes = element.parentElement.querySelectorAll(\n                    `[data-oe-t-group='${itemGroupId}']`,\n                );\n                return groupItemsNodes.length > 1;\n            });\n\n        if (!branchingHierarchyElements.length) return;\n\n        const groupsActive = branchingHierarchyElements.map(node =>\n            node.getAttribute('data-oe-t-group'),\n        );\n        for (const branchingElement of branchingHierarchyElements) {\n            this._selectElWrapper.prepend(this._renderBranchingSelection(branchingElement));\n        }\n        const closeSelectHandler = event => {\n            const path = [event.target, ...ancestors(event.target)];\n            const shouldClose = !path.find(\n                element =>\n                    element === this._selectElWrapper ||\n                    groupsActive.includes(element.getAttribute('data-oe-t-group')),\n            );\n            if (shouldClose) {\n                this._hideBranchingSelection();\n                document.removeEventListener('mousedown', closeSelectHandler);\n            }\n        };\n        document.addEventListener('mousedown', closeSelectHandler);\n        this._selectElWrapper.style.display = 'flex';\n        this._updateBranchingSelectionPosition(\n            branchingHierarchyElements[branchingHierarchyElements.length - 1],\n        );\n    }\n    _updateBranchingSelectionPosition(target) {\n        window.addEventListener('mousewheel', this._hideBranchingSelection);\n\n        const box = target.getBoundingClientRect();\n        const selBox = this._selectElWrapper.getBoundingClientRect();\n\n        this._selectElWrapper.style.left = `${window.scrollX + box.left}px`;\n        this._selectElWrapper.style.top = `${window.scrollY + box.top - selBox.height}px`;\n    }\n    _renderBranchingSelection(target) {\n        const selectEl = document.createElement('select');\n        const groupId = parseInt(target.getAttribute('data-oe-t-group'));\n        const groupElements = target.parentElement.querySelectorAll(\n            `[data-oe-t-group='${groupId}']`,\n        );\n        for (const element of groupElements) {\n            const optionElement = document.createElement('option');\n            if (element.hasAttribute('t-if')) {\n                optionElement.innerText = 'if';\n            } else if (element.hasAttribute('t-elif')) {\n                optionElement.innerText = 'elif';\n            } else if (element.hasAttribute('t-else')) {\n                optionElement.innerText = 'else';\n            }\n            if (element.hasAttribute('data-oe-t-group-active')) {\n                optionElement.selected = true;\n            }\n            selectEl.appendChild(optionElement);\n        }\n\n        selectEl.onchange = () => {\n            let activeElement;\n            for (let i = 0; i < groupElements.length; i++) {\n                if (i === selectEl.selectedIndex) {\n                    activeElement = groupElements[i];\n                    groupElements[i].setAttribute('data-oe-t-group-active', 'true');\n                } else {\n                    groupElements[i].removeAttribute('data-oe-t-group-active');\n                }\n            }\n            this._showBranchingSelection(activeElement);\n        };\n        return selectEl;\n    }\n    _hideBranchingSelection() {\n        this._selectElWrapper.style.display = 'none';\n        this._selectElWrapper.innerHTML = ``;\n        window.removeEventListener('mousewheel', this._hideBranchingSelection);\n    }\n}\n", "/** @odoo-module **/\n\nimport { registry } from \"@web/core/registry\";\n\nconst commandCategoryRegistry = registry.category(\"command_categories\");\ncommandCategoryRegistry.add(\"shortcut_conflict\", {}, { sequence: 5 });\n", "/** @odoo-module alias=web_editor.convertInline */\n'use strict';\n\nimport FieldHtml from 'web_editor.field.html';\nimport { isBlock, rgbToHex } from '../../../lib/odoo-editor/src/utils/utils';\n\n//--------------------------------------------------------------------------\n// Constants\n//--------------------------------------------------------------------------\n\nconst RE_COL_MATCH = /(^| )col(-[\\w\\d]+)*( |$)/;\nconst RE_COMMAS_OUTSIDE_PARENTHESES = /,(?![^(]*?\\))/g;\nconst RE_OFFSET_MATCH = /(^| )offset(-[\\w\\d]+)*( |$)/;\nconst RE_PADDING = /([\\d.]+)/;\nconst RE_WHITESPACE = /[\\s\\u200b]*/;\nconst SELECTORS_IGNORE = /(^\\*$|:hover|:before|:after|:active|:link|::|'|\\([^(),]+[,(])/;\n// Attributes all tables should have in a mailing.\nconst TABLE_ATTRIBUTES = {\n    cellspacing: 0,\n    cellpadding: 0,\n    border: 0,\n    width: '100%',\n    align: 'center',\n    role: 'presentation',\n};\n// Cancel tables default styles.\nconst TABLE_STYLES = {\n    'border-collapse': 'collapse',\n    'text-align': 'inherit',\n    'font-size': 'unset',\n    'line-height': 'unset',\n};\n\n//--------------------------------------------------------------------------\n// Public\n//--------------------------------------------------------------------------\n\n/**\n * Convert snippets and mailing bodies to tables.\n *\n * @param {JQuery} $editable\n */\nfunction addTables($editable) {\n    const editable = $editable.get(0);\n    for (const snippet of editable.querySelectorAll('.o_mail_snippet_general, .o_layout')) {\n        // Convert all snippets and the mailing itself into table > tr > td\n        const table = _createTable(snippet.attributes);\n\n        const row = document.createElement('tr');\n        const col = document.createElement('td');\n        row.appendChild(col);\n        table.appendChild(row);\n\n        for (const child of [...snippet.childNodes]) {\n            col.appendChild(child);\n        }\n        snippet.before(table);\n        snippet.remove();\n\n        // If snippet doesn't have a table as child, wrap its contents in one.\n        const childTables = [...col.children].filter(child => child.nodeName === 'TABLE');\n        if (!childTables.length) {\n            const tableB = _createTable();\n            const rowB = document.createElement('tr');\n            const colB = document.createElement('td');\n\n            rowB.appendChild(colB);\n            tableB.appendChild(rowB);\n            for (const child of [...col.childNodes]) {\n                colB.appendChild(child);\n            }\n            col.appendChild(tableB);\n        }\n    }\n}\n/**\n * Convert CSS display for attachment link to real image.\n * Without this post process, the display depends on the CSS and the picture\n * does not appear when we use the html without css (to send by email for e.g.)\n *\n * @param {JQuery} $editable\n */\nfunction attachmentThumbnailToLinkImg($editable) {\n    const editable = $editable.get(0);\n    const links = [...editable.querySelectorAll(`a[href*=\"/web/content/\"][data-mimetype]:empty`)].filter(link => (\n        RE_WHITESPACE.test(link.textContent)\n    ));\n    for (const link of links) {\n        const image = document.createElement('img');\n        image.setAttribute('src', _getStylePropertyValue(link, 'background-image').replace(/(^url\\(['\"])|(['\"]\\)$)/g, ''));\n        // Note: will trigger layout thrashing.\n        image.setAttribute('height', Math.max(1, _getHeight(link)));\n        image.setAttribute('width', Math.max(1, _getWidth(link)));\n        link.prepend(image);\n    };\n}\n/**\n * Convert Bootstrap rows and columns to actual tables.\n *\n * Note: Because of the limited support of media queries in emails, this doesn't\n * support the mixing and matching of column options (e.g., \"col-4 col-sm-6\" and\n * \"col col-4\" aren't supported).\n *\n * @param {JQuery} $editable\n */\nfunction bootstrapToTable($editable) {\n    const editable = $editable.get(0);\n    // First give all rows in columns a separate container parent.\n    for (const rowInColumn of [...editable.querySelectorAll('.row')].filter(row => RE_COL_MATCH.test(row.parentElement.className))) {\n        const parentColumn = rowInColumn.parentElement;\n        const previous = rowInColumn.previousElementSibling;\n        if (previous && previous.classList.contains('o_fake_table')) {\n            // If a container was already created there, append to it.\n            previous.append(rowInColumn);\n        } else {\n            _wrap(rowInColumn, 'div', 'o_fake_table');\n        }\n        // Bootstrap rows have negative left and right margins, which are not\n        // supported by GMail and Outlook. Add up the padding of the column with\n        // the negative margin of the row to get the correct padding.\n        const rowStyle = getComputedStyle(rowInColumn);\n        const columnStyle = getComputedStyle(parentColumn);\n        for (const side of ['left', 'right']) {\n            const negativeMargin = +rowStyle[`margin-${side}`].replace('px', '');\n            const columnPadding = +columnStyle[`padding-${side}`].replace('px', '');\n            if (negativeMargin < 0 && columnPadding >= Math.abs(negativeMargin)) {\n                parentColumn.style[`padding-${side}`] = `${columnPadding + negativeMargin}px`;\n                rowInColumn.style[`margin-${side}`] = 0;\n            }\n        }\n    }\n\n    // These containers from the mass mailing masonry snippet require full\n    // height contents, which is only possible if the table itself has a set\n    // height. We also need to restyle it because of the change in structure.\n    for(const masonryTopInnerContainer of editable.querySelectorAll('.s_masonry_block > .container')) {\n        masonryTopInnerContainer.style.setProperty('height', '100%');\n    }\n    for (const masonryGrid of editable.querySelectorAll('.o_masonry_grid_container')) {\n        masonryGrid.style.setProperty('padding', 0);\n        for (const fakeTable of [...masonryGrid.children].filter(c => c.classList.contains('o_fake_table'))) {\n            fakeTable.style.setProperty('height', _getHeight(fakeTable) + 'px');\n        }\n    }\n    for (const masonryRow of editable.querySelectorAll('.o_masonry_grid_container > .o_fake_table > .row.h-100')) {\n        masonryRow.style.removeProperty('height');\n        masonryRow.parentElement.style.setProperty('height', '100%');\n    }\n\n    // Now convert all containers with rows to tables.\n    for (const container of [...editable.querySelectorAll('.container, .container-fluid, .o_fake_table')].filter(n => [...n.children].some(c => c.classList.contains('row')))) {\n        // TABLE\n        const table = _createTable(container.attributes);\n        for (const child of [...container.childNodes]) {\n            table.append(child);\n        }\n        table.classList.remove('container', 'container-fluid', 'o_fake_table');\n        if (!table.className) {\n            table.removeAttribute('class');\n        }\n        container.before(table);\n        container.remove();\n\n\n        // ROWS\n        // First give all siblings of rows a separate row/col parent combo.\n        for (const row of [...table.children].filter(child => isBlock(child) && !child.classList.contains('row'))) {\n            const newCol = _wrap(row, 'div', 'col-12');\n            _wrap(newCol, 'div', 'row');\n        }\n\n        for (const bootstrapRow of [...table.children].filter(c => c.classList.contains('row'))) {\n            const tr = document.createElement('tr');\n            for (const attr of bootstrapRow.attributes) {\n                tr.setAttribute(attr.name, attr.value);\n            }\n            tr.classList.remove('row');\n            if (!tr.className) {\n                tr.removeAttribute('class');\n            }\n            for (const child of [...bootstrapRow.childNodes]) {\n                tr.append(child);\n            }\n            bootstrapRow.before(tr);\n            bootstrapRow.remove();\n\n\n            // COLUMNS\n            const bootstrapColumns = [...tr.children].filter(column => column.className && column.className.match(RE_COL_MATCH));\n\n            // 1. Replace generic \"col\" classes with specific \"col-n\", computed\n            //    by sharing the available space between them.\n            const flexColumns = bootstrapColumns.filter(column => !/\\d/.test(column.className.match(RE_COL_MATCH)[0] || '0'));\n            const colTotalSize = bootstrapColumns.map(child => _getColumnSize(child) + _getColumnOffsetSize(child)).reduce((a, b) => a + b, 0);\n            const colSize = Math.max(1, Math.round((12 - colTotalSize) / flexColumns.length));\n            for (const flexColumn of flexColumns) {\n                flexColumn.classList.remove(flexColumn.className.match(RE_COL_MATCH)[0].trim());\n                flexColumn.classList.add(`col-${colSize}`);\n            }\n\n            // 2. Create and fill up the row(s) with grid(s).\n            // Create new, empty columns for column offsets.\n            let columnIndex = 0;\n            for (const bootstrapColumn of [...bootstrapColumns]) {\n                const offsetSize = _getColumnOffsetSize(bootstrapColumn);\n                if (offsetSize) {\n                    const newColumn = document.createElement('div');\n                    newColumn.classList.add(`col-${offsetSize}`);\n                    bootstrapColumn.classList.remove(bootstrapColumn.className.match(RE_OFFSET_MATCH)[0].trim());\n                    bootstrapColumn.before(newColumn);\n                    bootstrapColumns.splice(columnIndex, 0, newColumn);\n                    columnIndex++;\n                }\n                columnIndex++;\n            }\n            let grid = _createColumnGrid();\n            let gridIndex = 0;\n            let currentRow = tr.cloneNode();\n            tr.after(currentRow);\n            let currentCol;\n            columnIndex = 0;\n            for (const bootstrapColumn of bootstrapColumns) {\n                const columnSize = _getColumnSize(bootstrapColumn);\n                if (gridIndex + columnSize < 12) {\n                    currentCol = grid[gridIndex];\n                    _applyColspan(currentCol, columnSize);\n                    gridIndex += columnSize;\n                    if (columnIndex === bootstrapColumns.length - 1) {\n                        // We handled all the columns but there is still space\n                        // in the row. Insert the columns and fill the row.\n                        _applyColspan(grid[gridIndex], 12 - gridIndex);\n                        currentRow.append(...grid.filter(td => td.getAttribute('colspan')));\n                    }\n                } else if (gridIndex + columnSize === 12) {\n                    // Finish the row.\n                    currentCol = grid[gridIndex];\n                    _applyColspan(currentCol, columnSize);\n                    currentRow.append(...grid.filter(td => td.getAttribute('colspan')));\n                    if (columnIndex !== bootstrapColumns.length - 1) {\n                        // The row was filled before we handled all of its\n                        // columns. Create a new one and start again from there.\n                        const previousRow = currentRow;\n                        currentRow = currentRow.cloneNode();\n                        previousRow.after(currentRow);\n                        grid = _createColumnGrid();\n                        gridIndex = 0;\n                    }\n                } else {\n                    // Fill the row with what was in the grid before it\n                    // overflowed.\n                    _applyColspan(grid[gridIndex], 12 - gridIndex);\n                    currentRow.append(...grid.filter(td => td.getAttribute('colspan')));\n                    // Start a new row that starts with the current col.\n                    const previousRow = currentRow;\n                    currentRow = currentRow.cloneNode();\n                    previousRow.after(currentRow);\n                    grid = _createColumnGrid();\n                    currentCol = grid[0];\n                    _applyColspan(currentCol, columnSize);\n                    gridIndex = columnSize;\n                    if (columnIndex === bootstrapColumns.length - 1 && gridIndex < 12) {\n                        // We handled all the columns but there is still space\n                        // in the row. Insert the columns and fill the row.\n                        _applyColspan(grid[gridIndex], 12 - gridIndex);\n                        currentRow.append(...grid.filter(td => td.getAttribute('colspan')));\n                    }\n                }\n                if (currentCol) {\n                    for (const attr of bootstrapColumn.attributes) {\n                        if (attr.name !== 'colspan') {\n                            currentCol.setAttribute(attr.name, attr.value);\n                        }\n                    }\n                    const colMatch = bootstrapColumn.className.match(RE_COL_MATCH);\n                    currentCol.classList.remove(colMatch[0].trim());\n                    if (!currentCol.className) {\n                        currentCol.removeAttribute('class');\n                    }\n                    for (const child of [...bootstrapColumn.childNodes]) {\n                        currentCol.append(child);\n                    }\n                    // Adapt width to colspan.\n                    _applyColspan(currentCol, +currentCol.getAttribute('colspan'));\n                }\n                columnIndex++;\n            }\n            tr.remove(); // row was cloned and inserted already\n        }\n        // Merge tables in tds into one common table, each in its own row.\n        const tds = [...editable.querySelectorAll('td')]\n            .filter(td => td.children.length > 1 && [...td.children].every(child => child.nodeName === 'TABLE'))\n            .reverse();\n        for (const td of tds) {\n            const table = _createTable();\n            const trs = [...td.children].map(child => _wrap(child, 'td')).map(wrappedChild => _wrap(wrappedChild, 'tr'));\n            trs[0].before(table);\n            table.append(...trs);\n        }\n    }\n}\n/**\n * Convert Bootstrap cards to table structures.\n *\n * @param {JQuery} $editable\n */\nfunction cardToTable($editable) {\n    const editable = $editable.get(0);\n    for (const card of editable.querySelectorAll('.card')) {\n        const table = _createTable(card.attributes);\n        table.style.removeProperty('overflow');\n        const cardImgTopSuperRows = [];\n        for (const child of [...card.childNodes]) {\n            const row = document.createElement('tr');\n            const col = document.createElement('td');\n            if (isBlock(child)) {\n                for (const attr of child.attributes) {\n                    col.setAttribute(attr.name, attr.value);\n                }\n                for (const descendant of [...child.childNodes]) {\n                    col.append(descendant);\n                }\n                child.remove();\n            } else if (child.nodeType === Node.TEXT_NODE) {\n                if (child.textContent.replace(RE_WHITESPACE, '').length) {\n                    col.append(child);\n                } else {\n                    continue;\n                }\n            } else {\n                col.append(child);\n            }\n            const subTable = _createTable();\n            const superRow = document.createElement('tr');\n            const superCol = document.createElement('td');\n            row.append(col);\n            subTable.append(row);\n            superCol.append(subTable);\n            superRow.append(superCol);\n            table.append(superRow);\n            if (child.classList && child.classList.contains('card-img-top')) {\n                // Collect .card-img-top superRows to manipulate their heights.\n                cardImgTopSuperRows.push(superRow);\n            }\n        }\n        // We expect successive .card-img-top to have the same height so the\n        // bodies of the cards are aligned. This achieves that without flexboxes\n        // by forcing the height of the smallest card:\n        const smallestCardImgRow = Math.min(0, ...cardImgTopSuperRows.map(row => row.clientHeight));\n        for (const row of cardImgTopSuperRows) {\n            row.style.height = smallestCardImgRow + 'px';\n        }\n        card.before(table);\n        card.remove();\n    }\n}\n/**\n * Convert CSS style to inline style (leave the classes on elements but forces\n * the style they give as inline style).\n *\n * @param {JQuery} $editable\n * @param {Object} cssRules\n */\nfunction classToStyle($editable, cssRules) {\n    const editable = $editable.get(0);\n    const writes = [];\n    const nodeToRules = new Map();\n    const rulesToProcess = [];\n    for (const rule of cssRules) {\n        const nodes = editable.querySelectorAll(rule.selector);\n        if (nodes.length) {\n            rulesToProcess.push(rule);\n        }\n        for (const node of nodes) {\n            const nodeRules = nodeToRules.get(node);\n            if (!nodeRules) {\n                nodeToRules.set(node, [rule]);\n            } else {\n                nodeRules.push(rule);\n            }\n        }\n    }\n    _computeStyleAndSpecificityOnRules(rulesToProcess);\n    for (const rules of nodeToRules.values()) {\n        rules.sort((a, b) => a.specificity - b.specificity);\n    }\n\n    for (const node of nodeToRules.keys()) {\n        const nodeRules = nodeToRules.get(node);\n        const css = nodeRules ? _getMatchedCSSRules(node, nodeRules) : {};\n        // Flexbox\n        for (const styleName of node.style) {\n            if (styleName.includes('flex') || `${node.style[styleName]}`.includes('flex')) {\n                writes.push(() => { node.style[styleName] = ''; });\n            }\n        }\n        // Ignore font-family (mail-safe font declared in <head>)\n        if ('font-family' in css) {\n            delete css['font-family'];\n        }\n\n        // Do not apply css that would override inline styles (which are prioritary).\n        let style = node.getAttribute('style') || '';\n        // Outlook doesn't support inline !important\n        style = style.replace(/!important/g,'');\n        for (const [key, value] of Object.entries(css)) {\n            if (!(new RegExp(`(^|;)\\\\s*${key}`).test(style))) {\n                style = `${key}:${value};${style}`;\n            }\n        };\n        if (_.isEmpty(style)) {\n            writes.push(() => { node.removeAttribute('style'); });\n        } else {\n            writes.push(() => {\n                node.setAttribute('style', style);\n                if (node.style.width) {\n                    node.setAttribute('width', ('' + node.style.width).replace('px', ''));\n                }\n            });\n        }\n\n        // Media list images should not have an inline height\n        if (node.nodeName === 'IMG' && node.classList.contains('s_media_list_img')) {\n            writes.push(() => { node.style.removeProperty('height'); });\n        }\n        // Apple Mail\n        if (node.nodeName === 'TD' && !node.childNodes.length) {\n            writes.push(() => { node.appendChild(document.createTextNode('&nbsp;')); });\n        }\n        // Outlook\n        if (node.nodeName === 'A' && node.classList.contains('btn') && !node.classList.contains('btn-link') && !node.children.length) {\n            writes.push(() => { node.prepend(document.createComment('[if mso]><i style=\"letter-spacing: 25px; mso-font-width: -100%; mso-text-raise: 30pt;\">&nbsp;</i><![endif]')); });\n            writes.push(() => { node.append(document.createComment('[if mso]><i style=\"letter-spacing: 25px; mso-font-width: -100%;\">&nbsp;</i><![endif]')); });\n        } else if (node.nodeName === 'IMG' && node.classList.contains('mx-auto') && node.classList.contains('d-block')) {\n            writes.push(() => { _wrap(node, 'p', 'o_outlook_hack', 'text-align:center;margin:0'); });\n        }\n    };\n    writes.forEach(fn => fn());\n}\n/**\n * Convert the contents of an editable area (as a JQuery element) into content\n * that is widely compatible with email clients. If no CSS Rules are given, they\n * will be computed for the editable element's owner document.\n *\n * @param {JQuery} $editable\n * @param {Object[]} [cssRules] Array<{selector: string;\n *                                   style: {[styleName]: string};\n *                                   specificity: number;}>\n * @param {JQuery} [$iframe] the iframe containing the editable, if any\n */\nfunction toInline($editable, cssRules, $iframe) {\n    $editable.removeClass('odoo-editor-editable');\n    const editable = $editable.get(0);\n    const iframe = $iframe && $iframe.get(0);\n    const doc = editable.ownerDocument;\n    cssRules = cssRules || doc._rulesCache;\n    if (!cssRules) {\n        cssRules = getCSSRules(doc);\n        doc._rulesCache = cssRules;\n    }\n\n    // If the editable is not visible, we need to make it visible in order to\n    // retrieve image/icon dimensions. This iterates over ancestors to make them\n    // visible again. We then restore it at the end of this function.\n    const displaysToRestore = [];\n    if (_isHidden(editable)) {\n        let ancestor = editable;\n        while (ancestor && ancestor.nodeName !== 'html' && _isHidden(ancestor)) {\n            if (_getStylePropertyValue(ancestor, 'display') === 'none') {\n                displaysToRestore.push([ancestor, ancestor.style.display]);\n                ancestor.style.setProperty('display', 'block');\n            }\n            ancestor = ancestor.parentElement;\n            if ((!ancestor || ancestor.nodeName === 'HTML') && iframe) {\n                ancestor = iframe;\n            }\n        }\n    }\n    // Fix card-img-top heights (must happen before we transform everything).\n    for (const imgTop of editable.querySelectorAll('.card-img-top')) {\n        imgTop.style.setProperty('height', _getHeight(imgTop) + 'px');\n    }\n    // Flag img-fluid images with fixed width/height for later.\n    for (const imgFluid of editable.querySelectorAll('.img-fluid')) {\n        if (!Number.isNaN(+imgFluid.style.width.replace('px', ''))) {\n            imgFluid.classList.add('o_img_fluid_fixed_width');\n        }\n        if (!Number.isNaN(+imgFluid.style.height.replace('px', ''))) {\n            imgFluid.classList.add('o_img_fluid_fixed_height');\n        }\n    }\n    // Fix Outlook image rendering bug.\n    for (const attributeName of ['width', 'height']) {\n        const images = editable.querySelectorAll('img');\n        for (const image of images) {\n            let value = image.getAttribute(attributeName) || (attributeName === 'height' && image.offsetHeight);\n            if (!value) {\n                value = attributeName === 'width' ? _getWidth(image) : _getHeight(image);;\n            }\n            image.setAttribute(attributeName, ('' + value).replace('px', ''));\n        };\n    };\n\n    attachmentThumbnailToLinkImg($editable);\n    fontToImg($editable);\n    classToStyle($editable, cssRules);\n    bootstrapToTable($editable);\n    cardToTable($editable);\n    listGroupToTable($editable);\n    addTables($editable);\n    formatTables($editable);\n    normalizeColors($editable);\n    const rootFontSizeProperty = getComputedStyle(editable.ownerDocument.documentElement).fontSize;\n    const rootFontSize = parseFloat(rootFontSizeProperty.replace(/[^\\d\\.]/g, ''));\n    normalizeRem($editable, rootFontSize);\n\n    // Fix mx-auto on images in table cells.\n    for (const centeredImage of editable.querySelectorAll('td > img.mx-auto')) {\n        if (centeredImage.parentElement.children.length === 1) {\n            centeredImage.parentElement.style.setProperty('text-align', 'center');\n        }\n    }\n    // Ensure preservation of aspect-ratio.\n    for (const loneImage of editable.querySelectorAll('img:only-child:not(.img-fluid,[data-class*=fa-])')) {\n        loneImage.style.setProperty('object-fit', 'cover');\n    }\n    // Fix img-fluid.\n    for (const image of editable.querySelectorAll('img.img-fluid')) {\n        // Outlook requires absolute width/height.\n        const clone = image.cloneNode();\n        const width = _getWidth(image);\n        clone.setAttribute('width', width);\n        clone.style.setProperty('width', width + 'px');\n        clone.style.removeProperty('max-width');\n        const height = _getHeight(image);\n        clone.setAttribute('height', height);\n        clone.style.setProperty('height', height + 'px');\n        clone.style.removeProperty('max-height');\n        image.before(document.createComment(`[if mso]>${clone.outerHTML}<![endif]`));\n        image.setAttribute('style', `${image.getAttribute('style') || ''} mso-hide: all;`.trim());\n        image.before(document.createComment('[if !mso]><!'));\n        image.after(document.createComment('<![endif]'));\n        // Account for the absence of responsive stacking (let max-width do the\n        // resizing work outside of Outlook).\n        if (!image.style.width.endsWith('%') && !image.classList.contains('o_img_fluid_fixed_width')) {\n            image.removeAttribute('width');\n            image.style.removeProperty('width');\n        }\n        if (!image.style.height.endsWith('%') && !image.classList.contains('o_img_fluid_fixed_height')) {\n            image.removeAttribute('height');\n            image.style.removeProperty('height');\n        }\n        image.classList.remove('o_img_fluid_fixed_width', 'o_img_fluid_fixed_height');\n    }\n\n    for (const [node, displayValue] of displaysToRestore) {\n        node.style.setProperty('display', displayValue);\n    }\n    $editable.addClass('odoo-editor-editable');\n}\n/**\n * Convert font icons to images.\n *\n * @param {JQuery} $editable - the element in which the font icons have to be\n *                           converted to images\n */\nfunction fontToImg($editable) {\n    const editable = $editable.get(0);\n    const fonts = odoo.__DEBUG__.services[\"wysiwyg.fonts\"];\n\n    for (const font of editable.querySelectorAll('.fa')) {\n        let icon, content;\n        fonts.fontIcons.find(fontIcon => {\n            return fonts.getCssSelectors(fontIcon.parser).find(data => {\n                if (font.matches(data.selector.replace(/::?before/g, ''))) {\n                    icon = data.names[0].split('-').shift();\n                    content = data.css.match(/content:\\s*['\"]?(.)['\"]?/)[1];\n                    return true;\n                }\n            });\n        });\n        if (content) {\n            const color = _getStylePropertyValue(font, 'color').replace(/\\s/g, '');\n            let backgroundColoredElement = font;\n            let bg, isTransparent;\n            do {\n                bg = _getStylePropertyValue(backgroundColoredElement, 'background-color').replace(/\\s/g, '');\n                isTransparent = bg === 'transparent' || bg === 'rgba(0,0,0,0)';\n                backgroundColoredElement = backgroundColoredElement.parentElement;\n            } while (isTransparent && backgroundColoredElement);\n            if (bg === 'rgba(0,0,0,0)' && isTransparent) {\n                // default on white rather than black background since opacity\n                // is not supported.\n                bg = 'rgb(255,255,255)';\n            }\n            const style = font.getAttribute('style');\n            const width = _getWidth(font);\n            const height = _getHeight(font);\n            const lineHeight = _getStylePropertyValue(font, 'line-height');\n            // Compute the padding.\n            // First get the dimensions of the icon itself (::before)\n            font.style.setProperty('height', 'fit-content');\n            font.style.setProperty('width', 'fit-content');\n            font.style.setProperty('line-height', 'normal');\n            const intrinsicWidth = _getWidth(font);\n            const intrinsicHeight = _getHeight(font);\n            const hPadding = width && (width - intrinsicWidth) / 2;\n            const vPadding = height && (height - intrinsicHeight) / 2;\n            let padding = '';\n            if (hPadding || vPadding) {\n                padding = vPadding ? vPadding + 'px ' : '0 ';\n                padding += hPadding ? hPadding + 'px' : '0';\n            }\n            const image = document.createElement('img');\n            image.setAttribute('width', width);\n            image.setAttribute('height', height);\n            image.setAttribute('src', `/web_editor/font_to_img/${content.charCodeAt(0)}/${encodeURIComponent(color)}/${encodeURIComponent(bg)}/${Math.max(1, Math.round(intrinsicWidth))}x${Math.max(1, Math.round(intrinsicHeight))}`);\n            image.setAttribute('data-class', font.getAttribute('class'));\n            image.setAttribute('data-style', style);\n            image.setAttribute('style', style);\n            image.style.setProperty('box-sizing', 'border-box'); // keep the fontawesome's dimensions\n            image.style.setProperty('line-height', lineHeight);\n            image.style.setProperty('width', intrinsicWidth + 'px');\n            image.style.setProperty('height', intrinsicHeight + 'px');\n            image.style.setProperty('vertical-align', 'unset'); // undo Bootstrap's default (middle).\n            if (!padding) {\n                image.style.setProperty('margin', _getStylePropertyValue(font, 'margin'));\n            }\n            // For rounded images, apply the rounded border to a wrapper, make\n            // sure it doesn't get applied to the image itself so the image\n            // doesn't get cropped in the process.\n            const wrapper = document.createElement('span');\n            wrapper.style.setProperty('display', 'inline-block');\n            wrapper.append(image);\n            font.before(wrapper);\n            if (font.classList.contains('mx-auto')) {\n                wrapper.parentElement.style.textAlign = 'center';\n            }\n            font.remove();\n            wrapper.style.setProperty('padding', padding);\n            const wrapperWidth = width + ['left', 'right'].reduce((sum, side) => (\n                sum + (+_getStylePropertyValue(image, `margin-${side}`).replace('px', '') || 0)\n            ), 0);\n            wrapper.style.setProperty('width', wrapperWidth + 'px');\n            wrapper.style.setProperty('height', height + 'px');\n            wrapper.style.setProperty('vertical-align', 'text-bottom');\n            wrapper.style.setProperty('background-color', image.style.backgroundColor);\n            wrapper.setAttribute('class', font.getAttribute('class').replace(new RegExp('(^|\\\\s+)' + icon + '(-[^\\\\s]+)?', 'gi'), '')); // remove inline font-awsome style);\n        } else {\n            font.remove();\n        }\n    }\n}\n/**\n * Format table styles so they display well in most mail clients. This implies\n * moving table paddings to its cells, adding tbody (with canceled styles) where\n * needed, and adding pixel heights to parents of elements with percent heights.\n *\n * @param {JQuery} $editable\n */\nfunction formatTables($editable) {\n    const editable = $editable.get(0);\n    const writes = [];\n    for (const table of editable.querySelectorAll('table.o_mail_snippet_general, .o_mail_snippet_general table')) {\n        const tablePaddingTop = parseFloat(_getStylePropertyValue(table, 'padding-top').match(RE_PADDING)[1]);\n        const tablePaddingRight = parseFloat(_getStylePropertyValue(table, 'padding-right').match(RE_PADDING)[1]);\n        const tablePaddingBottom = parseFloat(_getStylePropertyValue(table, 'padding-bottom').match(RE_PADDING)[1]);\n        const tablePaddingLeft = parseFloat(_getStylePropertyValue(table, 'padding-left').match(RE_PADDING)[1]);\n        const rows = [...table.querySelectorAll('tr')].filter(tr => tr.closest('table') === table);\n        const columns = [...table.querySelectorAll('td')].filter(td => td.closest('table') === table);\n        for (const column of columns) {\n            const columnsInRow = [...column.closest('tr').querySelectorAll('td')].filter(td => td.closest('table') === table);\n            const columnIndex = columnsInRow.findIndex(col => col === column);\n            const rowIndex = rows.findIndex(row => row === column.closest('tr'));\n\n            if (!rowIndex) {\n                const match = _getStylePropertyValue(column, 'padding-top').match(RE_PADDING);\n                const columnPaddingTop = match ? parseFloat(match[1]) : 0;\n                writes.push(() => {column.style['padding-top'] = `${columnPaddingTop + tablePaddingTop}px`; });\n            }\n            if (columnIndex === columnsInRow.length - 1) {\n                const match = _getStylePropertyValue(column, 'padding-right').match(RE_PADDING);\n                const columnPaddingRight = match ? parseFloat(match[1]) : 0;\n                writes.push(() => {column.style['padding-right'] = `${columnPaddingRight + tablePaddingRight}px`; });\n            }\n            if (rowIndex === rows.length - 1) {\n                const match = _getStylePropertyValue(column, 'padding-bottom').match(RE_PADDING);\n                const columnPaddingBottom = match ? parseFloat(match[1]) : 0;\n                writes.push(() => {column.style['padding-bottom'] = `${columnPaddingBottom + tablePaddingBottom}px`; });\n            }\n            if (!columnIndex) {\n                const match = _getStylePropertyValue(column, 'padding-left').match(RE_PADDING);\n                const columnPaddingLeft = match ? parseFloat(match[1]) : 0;\n                writes.push(() => {column.style['padding-left'] = `${columnPaddingLeft + tablePaddingLeft}px`; });\n            }\n        }\n        writes.push(() => { table.style.removeProperty('padding'); });\n    }\n    writes.forEach((fn) => fn());\n    // Ensure a tbody in every table and cancel its default style.\n    for (const table of [...editable.querySelectorAll('table')].filter(n => ![...n.children].some(c => c.nodeName === 'TBODY'))) {\n        const contents = [...table.childNodes];\n        const tbody = document.createElement('tbody');\n        tbody.style.setProperty('vertical-align', 'top');\n        table.prepend(tbody);\n        tbody.append(...contents);\n    }\n    // Children will only take 100% height if the parent has a height property.\n    for (const node of [...editable.querySelectorAll('*')].filter(n => (\n        n.style && n.style.getPropertyValue('height') === '100%' && (\n            !n.parentElement.style.getPropertyValue('height') ||\n            n.parentElement.style.getPropertyValue('height').includes('%'))\n    ))) {\n        let parent = node.parentElement;\n        let height = parent.style.getPropertyValue('height');\n        while (parent && height && height.includes('%')) {\n            parent = parent.parentElement;\n            height = parent.style.getPropertyValue('height');\n        }\n        if (parent) {\n            parent.style.setProperty('height', $(parent).height());\n        }\n    }\n    // Align self and justify content don't work on table cells.\n    for (const cell of editable.querySelectorAll('td')) {\n        const alignSelf = cell.style.alignSelf;\n        const justifyContent = cell.style.justifyContent;\n        if (alignSelf === 'start' || justifyContent === 'start' || justifyContent === 'flex-start') {\n            cell.style.verticalAlign = 'top';\n        } else if (alignSelf === 'center' || justifyContent === 'center') {\n            cell.style.verticalAlign = 'middle';\n        } else if (alignSelf === 'end' || justifyContent === 'end' || justifyContent === 'flex-end') {\n            cell.style.verticalAlign = 'bottom';\n        }\n    }\n    // Align items doesn't work on table rows.\n    for (const row of editable.querySelectorAll('tr')) {\n        const alignItems = row.style.alignItems;\n        if (alignItems === 'flex-start') {\n            row.style.verticalAlign = 'top';\n        } else if (alignItems === 'center') {\n            row.style.verticalAlign = 'middle';\n        } else if (alignItems === 'flex-end' || alignItems === 'baseline') {\n            row.style.verticalAlign = 'bottom';\n        } else if (alignItems === 'stretch') {\n            const columns = [...row.children].filter(child => child.nodeName === 'TD');\n            const biggestHeight = Math.max(...columns.map(column => column.clientHeight));\n            for (const column of columns) {\n                column.style.height = biggestHeight + 'px';\n            }\n        }\n    }\n}\n/**\n * Parse through the given document's stylesheets, preprocess(*) them and return\n * the result as an array of objects, each containing a selector string , a\n * style object and a specificity number. Preprocessing involves grouping\n * whatever rules can be grouped together and precomputing their specificity so\n * as to sort them appropriately.\n *\n * @param {Document} doc\n * @returns {Object[]} Array<{selector: string;\n *                            style: {[styleName]: string};\n *                            specificity: number;}>\n */\nfunction getCSSRules(doc) {\n    const cssRules = [];\n    for (const sheet of doc.styleSheets) {\n        // try...catch because browser may not able to enumerate rules for cross-domain sheets\n        let rules;\n        try {\n            rules = sheet.rules || sheet.cssRules;\n        } catch (e) {\n            console.log(\"Can't read the css rules of: \" + sheet.href, e);\n            continue;\n        }\n        for (const rule of (rules || [])) {\n            const subRules = [rule];\n            const conditionText = rule.conditionText;\n            const minWidthMatch = conditionText && conditionText.match(/\\(min-width *: *(\\d+)/);\n            const minWidth = minWidthMatch && +(minWidthMatch[1] || '0');\n            if (minWidth && minWidth >= 992) {\n                // Large min-width media queries should be included.\n                // eg., .container has a default max-width for all screens.\n                let mediaRules;\n                try {\n                    mediaRules = rule.rules || rule.cssRules;\n                    subRules.push(...mediaRules);\n                } catch (e) {\n                    console.log(`Can't read the css rules of: ${sheet.href} (${conditionText})`, e);\n                }\n            }\n            for (const subRule of subRules) {\n                const selectorText = subRule.selectorText || '';\n                // Split selectors, making sure not to split at commas in parentheses.\n                for (const selector of selectorText.split(RE_COMMAS_OUTSIDE_PARENTHESES)) {\n                    if (selector && !SELECTORS_IGNORE.test(selector)) {\n                        cssRules.push({ selector: selector.trim(), rawRule: subRule });\n                        if (selector === 'body') {\n                            // The top element of a mailing has the class\n                            // 'o_layout'. Give it the body's styles so they can\n                            // trickle down.\n                            cssRules.push({ selector: '.o_layout', rawRule: subRule, specificity: 1 });\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    return cssRules;\n}\n/**\n * Convert Bootstrap list groups and their items to table structures.\n *\n * @param {JQuery} $editable\n */\nfunction listGroupToTable($editable) {\n    const editable = $editable.get(0);\n    for (const listGroup of editable.querySelectorAll('.list-group')) {\n        let table;\n        if (listGroup.querySelectorAll('.list-group-item').length) {\n            table = _createTable(listGroup.attributes);\n        } else {\n            table = listGroup.cloneNode();\n            for (const attr of listGroup.attributes) {\n                table.setAttribute(attr.name, attr.value);\n            }\n        }\n        for (const child of [...listGroup.childNodes]) {\n            if (child.classList && child.classList.contains('list-group-item')) {\n                // List groups are <ul>s that render like tables. Their\n                // li.list-group-item children should translate to tr > td.\n                const row = document.createElement('tr');\n                const col = document.createElement('td');\n                for (const attr of child.attributes) {\n                    col.setAttribute(attr.name, attr.value);\n                }\n                col.append(...child.childNodes);\n                col.classList.remove('list-group-item');\n                if (!col.className) {\n                    col.removeAttribute('class');\n                }\n                row.append(col);\n                table.append(row);\n                child.remove();\n            } else if (child.nodeName === 'LI') {\n                table.append(...child.childNodes);\n            } else {\n                table.append(child);\n            }\n        }\n        table.classList.remove('list-group');\n        if (!table.className) {\n            table.removeAttribute('class');\n        }\n        if (listGroup.nodeName === 'TD') {\n            listGroup.append(table);\n            listGroup.classList.remove('list-group');\n            if (!listGroup.className) {\n                listGroup.removeAttribute('class');\n            }\n        } else {\n            listGroup.before(table);\n            listGroup.remove();\n        }\n    }\n}\n/**\n * Convert all styles containing rgb colors to hexadecimal colors.\n * Note: ignores rgba colors, which are not supported in Microsoft Outlook.\n *\n * @param {JQuery} $editable\n */\nfunction normalizeColors($editable) {\n    const editable = $editable.get(0);\n    for (const node of editable.querySelectorAll('[style*=\"rgb\"]')) {\n        const rgbMatch = node.getAttribute('style').match(/rgb?\\(([\\d\\.]*,?\\s?){3,4}\\)/g);\n        for (const rgb of rgbMatch || []) {\n            node.setAttribute('style', node.getAttribute('style').replace(rgb, rgbToHex(rgb)));\n        }\n    }\n}\n/**\n * Convert all css values that use the rem unit to px.\n *\n * @param {JQuery} $editable\n * @param {Number} rootFontSize=16 The font size of the root element, in pixels\n */\nfunction normalizeRem($editable, rootFontSize=16) {\n    const editable = $editable.get(0);\n    for (const node of editable.querySelectorAll('[style*=\"rem\"]')) {\n        const remMatch = node.getAttribute('style').match(/[\\d\\.]+\\s*rem/g);\n        for (const rem of remMatch || []) {\n            const remValue = parseFloat(rem.replace(/[^\\d\\.]/g, ''));\n            const pxValue = Math.round(remValue * rootFontSize * 100) / 100;\n            node.setAttribute('style', node.getAttribute('style').replace(rem, pxValue + 'px'));\n        }\n    }\n}\n\n//--------------------------------------------------------------------------\n// Private\n//--------------------------------------------------------------------------\n\n/**\n * Take an element and apply a colspan to it. In this context, this implies to\n * also apply a width to it, that corresponds to the colspan.\n *\n * @param {Element} element\n * @param {number} colspan\n */\nfunction _applyColspan(element, colspan) {\n    element.setAttribute('colspan', colspan);\n    // Round to 2 decimal places.\n    const width = (Math.round(+element.getAttribute('colspan') * 10000 / 12) / 100) + '%';\n    element.setAttribute('width', width);\n    element.style.setProperty('width', width);\n}\n/**\n * Take a selector and return its specificity according to the w3 specification.\n *\n * @see http://www.w3.org/TR/css3-selectors/#specificity\n * @param {string} selector\n * @returns number\n */\nfunction _computeSpecificity(selector) {\n    let a = 0;\n    selector = selector.replace(/#[a-z0-9_-]+/gi, () => { a++; return ''; });\n    let b = 0;\n    selector = selector.replace(/(\\.[a-z0-9_-]+)|(\\[.*?\\])/gi, () => { b++; return ''; });\n    let c = 0;\n    selector = selector.replace(/(^|\\s+|:+)[a-z0-9_-]+/gi, a => { if (!a.includes(':not(')) c++; return ''; });\n    return (a * 100) + (b * 10) + c;\n}\n/**\n * Take all the rules and modify them to contain information on their\n * specificity and to have normalized style.\n *\n * @see _computeSpecificity\n * @see _normalizeStyle\n * @param {Object} cssRules\n */\nfunction _computeStyleAndSpecificityOnRules(cssRules) {\n    for (const cssRule of cssRules) {\n        if (!cssRule.style && cssRule.rawRule.style) {\n            const style = _normalizeStyle(cssRule.rawRule.style);\n            if (Object.keys(style).length) {\n                Object.assign(cssRule,  { style, specificity: _computeSpecificity(cssRule.selector) });\n            }\n        }\n    }\n}\n/**\n * Return an array of twelve table cells as JQuery elements.\n *\n * @returns {Element[]}\n */\nfunction _createColumnGrid() {\n    return new Array(12).fill().map(() => document.createElement('td'));\n}\n/**\n * Return a table element, with its default styles and attributes, as well as\n * the applicable given attributes, if any.\n *\n * @see TABLE_ATTRIBUTES\n * @see TABLE_STYLES\n * @param {NamedNodeMap | Attr[]} [attributes] default: []\n * @returns {Element}\n */\nfunction _createTable(attributes = []) {\n    const table = document.createElement('table');\n    Object.entries(TABLE_ATTRIBUTES).forEach(([att, value]) => table.setAttribute(att, value));\n    table.style.setProperty('width', '100%', 'important');\n    for (const attr of attributes) {\n        if (!(attr.name === 'width' && attr.value === '100%')) {\n            table.setAttribute(attr.name, attr.value);\n        }\n    }\n    if (table.classList.contains('o_layout')) {\n        // The top mailing element inherits the body's font size and line-height\n        // and should keep them.\n        const layoutStyles = {...TABLE_STYLES};\n        delete layoutStyles['font-size'];\n        delete layoutStyles['line-height'];\n        Object.entries(layoutStyles).forEach(([att, value]) => table.style[att] = value)\n    } else {\n        for (const styleName in TABLE_STYLES) {\n            if (!('style' in attributes && attributes.style.value.includes(styleName + ':'))) {\n                table.style[styleName] = TABLE_STYLES[styleName];\n            }\n        }\n    }\n    return table;\n}\n/**\n * Take a Bootstrap grid column element and return its size, computed by using\n * its Bootstrap classes.\n *\n * @see RE_COL_MATCH\n * @param {Element} column\n * @returns {number}\n */\nfunction _getColumnSize(column) {\n    const colMatch = column.className.match(RE_COL_MATCH);\n    const colOptions = colMatch[2] && colMatch[2].substr(1).split('-');\n    const colSize = colOptions && (colOptions.length === 2 ? +colOptions[1] : +colOptions[0]) || 0;\n    return colSize;\n}\n/**\n * Take a Bootstrap grid column element and return its offset size, computed by\n * using its Bootstrap classes.\n *\n * @see RE_OFFSET_MATCH\n * @param {Element} column\n * @returns {number}\n */\nfunction _getColumnOffsetSize(column) {\n    const offsetMatch = column.className.match(RE_OFFSET_MATCH);\n    const offsetOptions = offsetMatch && offsetMatch[2] && offsetMatch[2].substr(1).split('-');\n    const offsetSize = offsetOptions && (offsetOptions.length === 2 ? +offsetOptions[1] : +offsetOptions[0]) || 0;\n    return offsetSize;\n}\n/**\n * Return the CSS rules which applies on an element, tweaked so that they are\n * browser/mail client ok.\n *\n * @param {Node} node\n * @param {Object[]} Array<{selector: string;\n *                          style: {[styleName]: string};\n *                          specificity: number;}>\n * @returns {Object} {[styleName]: string}\n */\nfunction _getMatchedCSSRules(node, cssRules) {\n    node.matches = node.matches || node.webkitMatchesSelector || node.mozMatchesSelector || node.msMatchesSelector || node.oMatchesSelector;\n    const styles = cssRules.map((rule) => rule.style).filter(Boolean);\n\n    // Add inline styles at the highest specificity.\n    if (node.style.length) {\n        const inlineStyles = {};\n        for (const styleName of node.style) {\n            inlineStyles[styleName] = node.style[styleName];\n        }\n        styles.push(inlineStyles);\n    }\n\n    const processedStyle = {};\n    for (const style of styles) {\n        for (const [key, value] of Object.entries(style)) {\n            if (!processedStyle[key] || !processedStyle[key].includes('important') || value.includes('important')) {\n                processedStyle[key] = value;\n            }\n        }\n    }\n\n    for (const [key, value] of Object.entries(processedStyle)) {\n        if (value && value.endsWith('important')) {\n            processedStyle[key] = value.replace(/\\s*!important\\s*$/, '');\n        }\n    };\n\n    if (processedStyle.display === 'block' && !(node.classList && ['btn-block', 'oe-nested'].some(klass => node.classList.contains(klass)))) {\n        delete processedStyle.display;\n    }\n    if (!processedStyle['box-sizing']) {\n        processedStyle['box-sizing'] = 'border-box'; // This is by default with Bootstrap.\n    }\n\n    // The css generates all the attributes separately and not in simplified\n    // form. In order to have a better compatibility (outlook for example) we\n    // simplify the css tags. e.g. border-left-style: none; border-bottom-s ....\n    // will be simplified in border-style = none\n    for (const info of [\n        {name: 'margin'},\n        {name: 'padding'},\n        {name: 'border', suffix: '-style', defaultValue: 'none'},\n    ]) {\n        const positions = ['top', 'right', 'bottom', 'left'];\n        const positionalKeys = positions.map(position => `${info.name}-${position}${info.suffix || ''}`);\n        const hasStyles = positionalKeys.some(key => processedStyle[key]);\n        const inherits = positionalKeys.some(key => ['inherit', 'initial'].includes((processedStyle[key] || '').trim()));\n        if (hasStyles && !inherits) {\n            const propertyName = `${info.name}${info.suffix || ''}`;\n            processedStyle[propertyName] = positionalKeys.every(key => processedStyle[positionalKeys[0]] === processedStyle[key])\n                ? processedStyle[propertyName] = processedStyle[positionalKeys[0]] // top = right = bottom = left => property: [top];\n                : positionalKeys.map(key => processedStyle[key] || (info.defaultValue || 0)).join(' '); // property: [top] [right] [bottom] [left];\n            for (const prop of positionalKeys) {\n                delete processedStyle[prop];\n            }\n        }\n    };\n\n    if (processedStyle['border-bottom-left-radius']) {\n        processedStyle['border-radius'] = processedStyle['border-bottom-left-radius'];\n        delete processedStyle['border-bottom-left-radius'];\n        delete processedStyle['border-bottom-right-radius'];\n        delete processedStyle['border-top-left-radius'];\n        delete processedStyle['border-top-right-radius'];\n    }\n\n    // If the border styling is initial we remove it to simplify the css tags\n    // for compatibility. Also, since we do not send a css style tag, the\n    // initial value of the border is useless.\n    for (const styleName in processedStyle) {\n        if (styleName.includes('border') && processedStyle[styleName] === 'initial') {\n            delete processedStyle[styleName];\n        }\n    };\n\n    // text-decoration rule is decomposed in -line, -color and -style. This is\n    // however not supported by many browser/mail clients and the editor does\n    // not allow to change -color and -style rule anyway\n    if (processedStyle['text-decoration-line']) {\n        processedStyle['text-decoration'] = processedStyle['text-decoration-line'];\n        delete processedStyle['text-decoration-line'];\n        delete processedStyle['text-decoration-color'];\n        delete processedStyle['text-decoration-style'];\n        delete processedStyle['text-decoration-thickness'];\n    }\n\n    // flexboxes are not supported in Windows Outlook\n    for (const styleName in processedStyle) {\n        if (styleName.includes('flex') || `${processedStyle[styleName]}`.includes('flex')) {\n            delete processedStyle[styleName];\n        }\n    }\n\n    return processedStyle;\n}\nlet lastComputedStyleElement;\nlet lastComputedStyle\n/**\n * Return the value of the given style property on the given element. This\n * caches the last computed style so if it's called several times in a row for\n * the same element, we don't recompute it every time.\n *\n * @param {Element} element\n * @param {string} propertyName\n * @returns\n */\nfunction _getStylePropertyValue(element, propertyName) {\n    const computedStyle = lastComputedStyleElement === element ? lastComputedStyle : getComputedStyle(element)\n    lastComputedStyleElement = element;\n    lastComputedStyle = computedStyle;\n    return computedStyle[propertyName] || element.style.getPropertyValue(propertyName);\n}\n/**\n * Equivalent to JQuery's `width` method. Returns the element's visible width.\n *\n * @param {Element} element\n * @returns {Number}\n */\nfunction _getWidth(element) {\n    return parseFloat(getComputedStyle(element).width.replace('px', ''));\n}\n/**\n * Equivalent to JQuery's `height` method. Returns the element's visible height.\n *\n * @param {Element} element\n * @returns {Number}\n */\nfunction _getHeight(element) {\n    return parseFloat(getComputedStyle(element).height.replace('px', ''));\n}\n/**\n * Return true if the given element is hidden.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetParent\n * @param {Element} element\n * @returns {boolean}\n */\nfunction _isHidden(element) {\n    return element.offsetParent === null;\n}\n/**\n * Take a css style declaration return a \"normalized\" version of it (as a\n * standard object) for the purposes of emails. This means removing its styles\n * that are invalid, describe animations or aren't standard css (webkit\n * extensions). It also involves adding the \"!important\" suffix to styles that\n * have that priority, so they can be handled without access to the full\n * declaration.\n *\n * @param {CSSStyleDeclaration} style\n * @returns {Object} {[styleName]: string}\n */\nfunction _normalizeStyle(style) {\n    const normalizedStyle = {};\n    for (const styleName of style) {\n        const value = style[styleName];\n        if (value && !styleName.includes('animation') && !styleName.includes('-webkit') && _.isString(value)) {\n            const normalizedStyleName = styleName.replace(/-(.)/g, (a, b) => b.toUpperCase());\n            normalizedStyle[styleName] = style[normalizedStyleName];\n            if (style.getPropertyPriority(styleName) === 'important') {\n                normalizedStyle[styleName] += ' !important';\n            }\n        }\n    }\n    return normalizedStyle;\n}\n/**\n * Wrap a given element into a new parent, in place.\n *\n * @param {Element} element\n * @param {string} wrapperTag\n * @param {string} [wrapperClass] optional class to apply to the wrapper\n * @param {string} [wrapperStyle] optional style to apply to the wrapper\n * @returns {Element} the wrapper\n */\n function _wrap(element, wrapperTag, wrapperClass, wrapperStyle) {\n    const wrapper = document.createElement(wrapperTag);\n    if (wrapperClass) {\n        wrapper.className = wrapperClass;\n    }\n    if (wrapperStyle) {\n        wrapper.style.cssText = wrapperStyle;\n    }\n    element.parentElement.insertBefore(wrapper, element);\n    wrapper.append(element);\n    return wrapper;\n}\n\n//--------------------------------------------------------------------------\n// Widget\n//--------------------------------------------------------------------------\n\n\nFieldHtml.include({\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     */\n    commitChanges: function () {\n        if (this.nodeOptions['style-inline'] && this.mode === \"edit\") {\n            this._toInline();\n        }\n        return this._super();\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Converts CSS dependencies to CSS-independent HTML.\n     * - CSS display for attachment link -> real image\n     * - Font icons -> images\n     * - CSS styles -> inline styles\n     *\n     * @private\n     */\n    _toInline: function () {\n        var $editable = this.wysiwyg.getEditable();\n        var html = this.wysiwyg.getValue();\n        const $odooEditor = $editable.closest('.odoo-editor');\n        // Remove temporarily the class so that css editing will not be converted.\n        $odooEditor.removeClass('odoo-editor');\n        $editable.html(html);\n\n        toInline($editable, this.cssRules, this.wysiwyg.$iframe);\n        $odooEditor.addClass('odoo-editor');\n\n        this.wysiwyg.setValue($editable.html(), {\n            notifyChange: false,\n        });\n    },\n});\n\nexport default {\n    addTables: addTables,\n    attachmentThumbnailToLinkImg: attachmentThumbnailToLinkImg,\n    bootstrapToTable: bootstrapToTable,\n    cardToTable: cardToTable,\n    classToStyle: classToStyle,\n    fontToImg: fontToImg,\n    formatTables: formatTables,\n    getCSSRules: getCSSRules,\n    listGroupToTable: listGroupToTable,\n    normalizeColors: normalizeColors,\n    normalizeRem: normalizeRem,\n    toInline: toInline,\n};\n", "odoo.define('web_editor.field.html', function (require) {\n'use strict';\n\nvar ajax = require('web.ajax');\nvar basic_fields = require('web.basic_fields');\nvar core = require('web.core');\nvar wysiwygLoader = require('web_editor.loader');\nvar field_registry = require('web.field_registry');\nconst {QWebPlugin} = require('@web_editor/js/backend/QWebPlugin');\n// must wait for web/ to add the default html widget, otherwise it would override the web_editor one\nrequire('web._field_registry');\n\nvar _lt = core._lt;\nvar _t = core._t;\nvar TranslatableFieldMixin = basic_fields.TranslatableFieldMixin;\nvar QWeb = core.qweb;\n\n/**\n * FieldHtml Widget\n * Intended to display HTML content. This widget uses the wysiwyg editor\n * improved by odoo.\n *\n * nodeOptions:\n *  - style-inline => convert class to inline style (no re-edition) => for sending by email\n *  - no-attachment\n *  - cssEdit\n *  - cssReadonly\n *  - snippets\n *  - wrapper\n *  - resizable\n *  - codeview\n */\nvar FieldHtml = basic_fields.DebouncedField.extend(TranslatableFieldMixin, {\n    description: _lt(\"Html\"),\n    className: 'oe_form_field oe_form_field_html',\n    supportedFieldTypes: ['html'],\n    isQuickEditable: true,\n    quickEditExclusion: [\n        '[href]',\n    ],\n\n    custom_events: {\n        wysiwyg_focus: '_onWysiwygFocus',\n        wysiwyg_blur: '_onWysiwygBlur',\n        wysiwyg_change: '_onChange',\n        wysiwyg_attachment: '_onAttachmentChange',\n    },\n    /**\n     * @override\n     */\n    willStart: async function () {\n        this.isRendered = false;\n        this._onUpdateIframeId = 'onLoad_' + _.uniqueId('FieldHtml');\n        await this._super();\n        if (this.nodeOptions.cssReadonly) {\n            this.cssReadonly = await ajax.loadAsset(this.nodeOptions.cssReadonly);\n        }\n        if (this.nodeOptions.cssEdit || this.nodeOptions['style-inline']) {\n            this.cssEdit = await ajax.loadAsset(this.nodeOptions.cssEdit || 'web_editor.assets_edit_html_field');\n        }\n    },\n    /**\n     * @override\n     */\n    destroy: function () {\n        delete window.top[this._onUpdateIframeId];\n        if (this.$iframe) {\n            this.$iframe.remove();\n        }\n        if (this._qwebPlugin) {\n            this._qwebPlugin.destroy();\n        }\n        this._super();\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     */\n    activate: function (options) {\n        if (this.wysiwyg) {\n            this.wysiwyg.focus();\n            return true;\n        }\n    },\n    /**\n     * Wysiwyg doesn't notify for changes done in code mode. We override\n     * commitChanges to manually switch back to normal mode before committing\n     * changes, so that the widget is aware of the changes done in code mode.\n     *\n     * @override\n     */\n    commitChanges: async function () {\n        if (this.mode == \"readonly\" || !this.isRendered) {\n            return this._super();\n        }\n        var _super = this._super.bind(this);\n        // Do not wait for the resolution of the cleanForSave promise to update\n        // the internal value in case this happens during an urgentSave as the\n        // beforeunload event does not play well with asynchronicity. It is\n        // better to have a partially cleared value than to lose changes. When\n        // this function is called outside of an urgentSave context, the full\n        // cleaning is still awaited below and `_super` will reupdate the value.\n        const fullClean = this.wysiwyg.cleanForSave();\n        this._setValue(this._getValue());\n        this._isDirty = this.wysiwyg.isDirty();\n        await fullClean;\n        await this.wysiwyg.saveModifiedImages(this.$content);\n        // Update the value to the fully cleaned version.\n        this._setValue(this._getValue());\n        _super();\n    },\n    /**\n     * @override\n     */\n    isSet: function () {\n        var value = this.value && this.value.split('&nbsp;').join('').replace(/\\s/g, ''); // Removing spaces & html spaces\n        return value && value !== \"<p></p>\" && value !== \"<p><br></p>\" && value.match(/\\S/);\n    },\n    /**\n     * @override\n     */\n    getFocusableElement: function () {\n        return this.wysiwyg && this.wysiwyg.$editable || $();\n    },\n    /**\n     * Do not re-render this field if it was the origin of the onchange call.\n     *\n     * @override\n     */\n    reset: function (record, event) {\n        this._reset(record, event);\n        var value = this.value;\n        if (this.nodeOptions.wrapper) {\n            value = this._wrap(value);\n        }\n        value = this._textToHtml(value);\n        if (!event || event.target !== this) {\n            if (this.mode === 'edit' && this.wysiwyg) {\n                this.wysiwyg.setValue(value);\n            } else if (this.cssReadonly) {\n                return Promise.resolve();\n            } else {\n                this.$content.html(value);\n            }\n        }\n        return Promise.resolve();\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     */\n    _getValue: function () {\n        let value;\n        if (!this._$codeview || this._$codeview.hasClass('d-none')) {\n           value = this.wysiwyg.getValue();\n        } else {\n            value = this._$codeview.val();\n        }\n        if (this.nodeOptions.wrapper) {\n            return this._unWrap(value);\n        }\n        return value;\n    },\n    /**\n     * Create the wysiwyg instance with the target (this.$target)\n     * then add the editable content (this.$content).\n     *\n     * @private\n     * @returns {$.Promise}\n     */\n    _createWysiwygIntance: async function () {\n        this.wysiwyg = await wysiwygLoader.createWysiwyg(this, this._getWysiwygOptions());\n        return this.wysiwyg.appendTo(this.$el).then(() => {\n            this.$content = this.wysiwyg.$editable;\n            this._onLoadWysiwyg();\n            this.isRendered = true;\n        });\n    },\n    /**\n     * Get wysiwyg options to create wysiwyg instance.\n     *\n     * @private\n     * @returns {Object}\n     */\n    _getWysiwygOptions: function () {\n        return Object.assign({}, this.nodeOptions, {\n            recordInfo: {\n                context: this.record.getContext(this.recordParams),\n                res_model: this.model,\n                res_id: this.res_id,\n            },\n            placeholder: this.attrs && this.attrs.placeholder,\n            collaborationChannel: !!this.nodeOptions.collaborative && {\n                collaborationModelName: this.model,\n                collaborationFieldName: this.name,\n                collaborationResId: parseInt(this.res_id),\n            },\n            noAttachment: this.nodeOptions['no-attachment'],\n            inIframe: !!this.nodeOptions.cssEdit,\n            iframeCssAssets: this.nodeOptions.cssEdit,\n            snippets: this.nodeOptions.snippets,\n            value: this.value,\n            allowCommandVideo: Boolean(this.nodeOptions.allowCommandVideo) && (!this.field.sanitize || !this.field.sanitize_tags),\n            mediaModalParams: {\n                noVideos: 'noVideos' in this.nodeOptions ? this.nodeOptions.noVideos : true,\n                res_model: this.model,\n                res_id: this.res_id,\n                useMediaLibrary: true,\n            },\n            linkForceNewWindow: true,\n            tabsize: 0,\n            height: this.nodeOptions.height,\n            minHeight: this.nodeOptions.minHeight,\n            maxHeight: this.nodeOptions.maxHeight,\n            resizable: 'resizable' in this.nodeOptions ? this.nodeOptions.resizable : false,\n            editorPlugins: [QWebPlugin],\n        });\n    },\n    /**\n     * Toggle the code view and update the UI.\n     *\n     * @param {JQuery} $codeview\n     */\n    _toggleCodeView: function ($codeview) {\n        this.wysiwyg.odooEditor.observerUnactive();\n        $codeview.toggleClass('d-none');\n        this.$content.toggleClass('d-none');\n        if ($codeview.hasClass('d-none')) {\n            this.wysiwyg.odooEditor.observerActive();\n            this.wysiwyg.setValue($codeview.val());\n            this.wysiwyg.odooEditor.sanitize();\n            this.wysiwyg.odooEditor.historyStep(true);\n        } else {\n            $codeview.val(this.$content.html());\n            this.wysiwyg.odooEditor.observerActive();\n        }\n    },\n    /**\n     * trigger_up 'field_changed' add record into the \"ir.attachment\" field found in the view.\n     * This method is called when an image is uploaded via the media dialog.\n     *\n     * For e.g. when sending email, this allows people to add attachments with the content\n     * editor interface and that they appear in the attachment list.\n     * The new documents being attached to the email, they will not be erased by the CRON\n     * when closing the wizard.\n     *\n     * @private\n     * @param {Object} event the event containing attachment data\n     */\n    _onAttachmentChange: function (event) {\n        // This only needs to happen for the composer for now\n        if (!this.fieldNameAttachment || this.model !== 'mail.compose.message') {\n            return;\n        }\n        this.trigger_up('field_changed', {\n            dataPointID: this.dataPointID,\n            changes: _.object([this.fieldNameAttachment], [{\n                operation: 'ADD_M2M',\n                ids: event.data\n            }])\n        });\n    },\n    /**\n     * @override\n     */\n    _renderEdit: function () {\n        if (this.nodeOptions.notEditable) {\n            return this._renderReadonly();\n        }\n        var value = this._textToHtml(this.value);\n        if (this.nodeOptions.wrapper) {\n            value = this._wrap(value);\n        }\n        var fieldNameAttachment = _.chain(this.recordData)\n            .pairs()\n            .find(function (value) {\n                return _.isObject(value[1]) && value[1].model === \"ir.attachment\";\n            })\n            .first()\n            .value();\n        if (fieldNameAttachment) {\n            this.fieldNameAttachment = fieldNameAttachment;\n        }\n\n        if (this.nodeOptions.cssEdit) {\n            // must be async because the target must be append in the DOM\n            this._createWysiwygIntance();\n        } else {\n            return this._createWysiwygIntance();\n        }\n    },\n    /**\n     * @override\n     */\n    _renderReadonly: function () {\n        var self = this;\n        var value = this._textToHtml(this.value);\n        if (this.nodeOptions.wrapper) {\n            value = this._wrap(value);\n        }\n\n        this.$el.empty();\n        var resolver;\n        var def = new Promise(function (resolve) {\n            resolver = resolve;\n        });\n        const externalLinkSelector = `a:not([href^=\"${location.origin}\"]):not([href^=\"/\"])`;\n        if (this.nodeOptions.cssReadonly) {\n            this.$iframe = $('<iframe class=\"o_readonly d-none\"/>');\n            this.$iframe.appendTo(this.$el);\n\n            var avoidDoubleLoad = 0; // this bug only appears on some computers with some chrome version.\n\n            // inject content in iframe\n\n            this.$iframe.data('loadDef', def); // for unit test\n            window.top[this._onUpdateIframeId] = function (_avoidDoubleLoad) {\n                if (_avoidDoubleLoad !== avoidDoubleLoad) {\n                    console.warn('Wysiwyg iframe double load detected');\n                    return;\n                }\n                self.$content = $('#iframe_target', self.$iframe[0].contentWindow.document.body);\n                resolver();\n                self.trigger_up('iframe_updated', { $iframe: self.$iframe });\n            };\n\n            this.$iframe.on('load', function onLoad() {\n                var _avoidDoubleLoad = ++avoidDoubleLoad;\n                ajax.loadAsset(self.nodeOptions.cssReadonly).then(function (asset) {\n                    if (_avoidDoubleLoad !== avoidDoubleLoad) {\n                        console.warn('Wysiwyg immediate iframe double load detected');\n                        return;\n                    }\n                    var cwindow = self.$iframe[0].contentWindow;\n                    try {\n                        cwindow.document;\n                    } catch (e) {\n                        return;\n                    }\n                    cwindow.document\n                        .open(\"text/html\", \"replace\")\n                        .write(\n                            '<!DOCTYPE html><html>' +\n                            '<head>' +\n                                '<meta charset=\"utf-8\"/>' +\n                                '<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\"/>\\n' +\n                                '<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, user-scalable=no\"/>\\n' +\n                                _.map(asset.cssLibs, function (cssLib) {\n                                    return '<link type=\"text/css\" rel=\"stylesheet\" href=\"' + cssLib + '\"/>';\n                                }).join('\\n') + '\\n' +\n                                _.map(asset.cssContents, function (cssContent) {\n                                    return '<style type=\"text/css\">' + cssContent + '</style>';\n                                }).join('\\n') + '\\n' +\n                            '</head>\\n' +\n                            '<body class=\"o_in_iframe o_readonly\" style=\"overflow: hidden;\">\\n' +\n                                '<div id=\"iframe_target\">' + value + '</div>\\n' +\n                                '<script type=\"text/javascript\">' +\n                                    'if (window.top.' + self._onUpdateIframeId + ') {' +\n                                        'window.top.' + self._onUpdateIframeId + '(' + _avoidDoubleLoad + ')' +\n                                    '}' +\n                                '</script>\\n' +\n                            '</body>' +\n                            '</html>');\n\n                    var height = cwindow.document.body.scrollHeight;\n                    self.$iframe.css('height', Math.max(30, Math.min(height, 500)) + 'px');\n\n                    $(cwindow).on('click', function (ev) {\n                        if (!ev.target.closest(\"[href]\")) {\n                            self._onClick(ev);\n                        }\n                    });\n\n                    // Ensure all external links are opened in a new tab.\n                    for (const externalLink of cwindow.document.body.querySelectorAll(externalLinkSelector)) {\n                        externalLink.setAttribute('target', '_blank');\n                        externalLink.setAttribute('rel', 'noreferrer');\n                    }\n                });\n            });\n        } else {\n            this.$content = $('<div class=\"o_readonly\"/>').html(value);\n            this.$content.appendTo(this.$el);\n            this._qwebPlugin = new QWebPlugin();\n            this._qwebPlugin.sanitizeElement(this.$content[0]);\n            // Ensure all external links are opened in a new tab.\n            for (const externalLink of this.$content.find(externalLinkSelector)) {\n                externalLink.setAttribute('target', '_blank');\n                externalLink.setAttribute('rel', 'noreferrer');\n            }\n            resolver();\n        }\n\n        def.then(function () {\n            if (!self.hasReadonlyModifier) {\n                self.$content.on('click', 'ul.o_checklist > li', self._onReadonlyClickChecklist.bind(self));\n            }\n            if (self.$iframe) {\n                // Iframe is hidden until fully loaded to avoid glitches.\n                self.$iframe.removeClass('d-none');\n            }\n        });\n    },\n    /**\n     * @private\n     * @param {string} text\n     * @returns {string} the text converted to html\n     */\n    _textToHtml: function (text) {\n        var value = text || \"\";\n        try {\n            $(text)[0].innerHTML; // crashes if text isn't html\n        } catch (e) {\n            if (value.match(/^\\s*$/)) {\n                value = '<p><br/></p>';\n            } else {\n                value = \"<p>\" + value.split(/<br\\/?>/).join(\"<br/></p><p>\") + \"</p>\";\n                value = value\n                            .replace(/<p><\\/p>/g, '')\n                            .replace('<p><p>', '<p>')\n                            .replace('<p><p ', '<p ')\n                            .replace('</p></p>', '</p>');\n            }\n        }\n        return value;\n    },\n    /**\n     * Move HTML contents out of their wrapper.\n     *\n     * @private\n     * @param {string} html content\n     * @returns {string} html content\n     */\n    _unWrap: function (html) {\n        var $wrapper = $(html).find('#wrapper');\n        return $wrapper.length ? $wrapper.html() : html;\n    },\n    /**\n     * Wrap HTML in order to create a custom display.\n     *\n     * The wrapper (this.nodeOptions.wrapper) must be a static\n     * XML template with content id=\"wrapper\".\n     *\n     * @private\n     * @param {string} html content\n     * @returns {string} html content\n     */\n    _wrap: function (html) {\n        return $(QWeb.render(this.nodeOptions.wrapper))\n            .find('#wrapper').html(html)\n            .end().prop('outerHTML');\n    },\n\n    //--------------------------------------------------------------------------\n    // Handler\n    //--------------------------------------------------------------------------\n\n    /**\n     * Method called when wysiwyg triggers a change.\n     *\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onChange: function (ev) {\n        this._doDebouncedAction.apply(this, arguments);\n\n        var $lis = this.$content.find('.note-editable ul.o_checklist > li:not(:has(> ul.o_checklist))');\n        if (!$lis.length) {\n            return;\n        }\n        var max = 0;\n        var ids = [];\n        $lis.map(function () {\n            var checklistId = parseInt(($(this).attr('id') || '0').replace(/^checklist-id-/, ''));\n            if (ids.indexOf(checklistId) === -1) {\n                if (checklistId > max) {\n                    max = checklistId;\n                }\n                ids.push(checklistId);\n            } else {\n                $(this).removeAttr('id');\n            }\n        });\n        $lis.not('[id]').each(function () {\n            $(this).attr('id', 'checklist-id-' + (++max));\n        });\n    },\n    /**\n     * Allows Enter keypress in a textarea (source mode)\n     *\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onKeydown: function (ev) {\n        if (ev.which === $.ui.keyCode.ENTER) {\n            ev.stopPropagation();\n            return;\n        }\n        this._super.apply(this, arguments);\n    },\n    /**\n     * Method called when wysiwyg triggers a change.\n     *\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onReadonlyClickChecklist: function (ev) {\n        var self = this;\n        if (ev.offsetX > 0) {\n            return;\n        }\n        ev.stopPropagation();\n        ev.preventDefault();\n        var checked = $(ev.target).hasClass('o_checked');\n        var checklistId = parseInt(($(ev.target).attr('id') || '0').replace(/^checklist-id-/, ''));\n\n        this._rpc({\n            route: '/web_editor/checklist',\n            params: {\n                res_model: this.model,\n                res_id: this.res_id,\n                filename: this.name,\n                checklistId: checklistId,\n                checked: !checked,\n            },\n        }).then(function (value) {\n            self._setValue(value);\n        });\n    },\n    /**\n     * Method called when the wysiwyg instance is loaded.\n     *\n     * @private\n     */\n    _onLoadWysiwyg: function () {\n        var $button = this._renderTranslateButton();\n        var $container;\n        if (this.nodeOptions.cssEdit && this.wysiwyg) {\n            $container = this.wysiwyg.$iframeBody.find('.email_designer_top_actions');\n        } else {\n            $container = this.$el;\n            $button.css({\n                'font-size': '15px',\n                position: 'absolute',\n                top: '5px',\n                [_t.database.parameters.direction === 'rtl' ? 'left' : 'right']: odoo.debug && this.nodeOptions.codeview ? '40px' : '5px',\n            });\n        }\n        $container.append($button);\n        if (odoo.debug && this.nodeOptions.codeview) {\n            const $codeviewButtonToolbar = $(`\n                <div id=\"codeview-btn-group\" class=\"btn-group\">\n                    <button class=\"o_codeview_btn btn btn-primary\">\n                        <i class=\"fa fa-code\"></i>\n                    </button>\n                </div>\n            `);\n            this.$floatingCodeViewButton = $codeviewButtonToolbar.clone();\n            this._$codeview = $('<textarea class=\"o_codeview d-none\"/>');\n            this.wysiwyg.$editable.after(this._$codeview);\n            this._$codeview.after(this.$floatingCodeViewButton);\n            this.wysiwyg.toolbar.$el.append($codeviewButtonToolbar);\n            $codeviewButtonToolbar.click(() => this._toggleCodeView(this._$codeview));\n            this.$floatingCodeViewButton.click(() => this._toggleCodeView(this._$codeview));\n        }\n    },\n    /**\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onWysiwygBlur: function (ev) {\n        ev.stopPropagation();\n        this._doAction();\n        if (ev.data.key === 'TAB') {\n            this.trigger_up('navigation_move', {\n                direction: ev.data.shiftKey ? 'left' : 'right',\n            });\n        }\n    },\n    /**\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onWysiwygFocus: function (ev) {},\n});\n\n\nfield_registry.add('html', FieldHtml);\n\n\nreturn FieldHtml;\n});\n", "\nodoo.define('resource.section_backend', function (require) {\n// The goal of this file is to contain JS hacks related to allowing\n// section on resource calendar.\n\n\"use strict\";\nvar FieldOne2Many = require('web.relational_fields').FieldOne2Many;\nvar fieldRegistry = require('web.field_registry');\nvar ListRenderer = require('web.ListRenderer');\n\nvar SectionListRenderer = ListRenderer.extend({\n    /**\n     * We want section to take the whole line (except handle and trash)\n     * to look better and to hide the unnecessary fields.\n     *\n     * @override\n     */\n    _renderBodyCell: function (record, node, index, options) {\n        var $cell = this._super.apply(this, arguments);\n\n        var isSection = record.data.display_type === 'line_section';\n\n        if (isSection) {\n            if (node.attrs.widget === \"handle\") {\n                return $cell;\n            } else if (node.attrs.name === \"display_name\") {\n                var nbrColumns = this._getNumberOfCols();\n                if (this.handleField) {\n                    nbrColumns--;\n                }\n                if (this.addTrashIcon) {\n                    nbrColumns--;\n                }\n                $cell.attr('colspan', nbrColumns);\n            } else {\n                return $cell.addClass('o_hidden');\n            }\n        }\n\n        return $cell;\n    },\n    /**\n     * We add the o_is_{display_type} class to allow custom behaviour both in JS and CSS.\n     *\n     * @override\n     */\n    _renderRow: function (record, index) {\n        var $row = this._super.apply(this, arguments);\n\n        if (record.data.display_type) {\n            $row.addClass('o_is_' + record.data.display_type);\n        }\n\n        return $row;\n    },\n    /**\n     * We want to add .o_section_list_view on the table to have stronger CSS.\n     *\n     * @override\n     * @private\n     */\n    _renderView: function () {\n        var self = this;\n        return this._super.apply(this, arguments).then(function () {\n            self.$('.o_list_table').addClass('o_section_list_view');\n            // Discard the possibility to remove the sections\n            self.$('.o_is_line_section .o_list_record_remove').remove()\n        });\n    },\n});\n\n// We create a custom widget because this is the cleanest way to do it:\n// to be sure this custom code will only impact selected fields having the widget\n// and not applied to any other existing ListRenderer.\nvar SectionFieldOne2Many = FieldOne2Many.extend({\n    /**\n     * We want to use our custom renderer for the list.\n     *\n     * @override\n     */\n    _getRenderer: function () {\n        if (this.view.arch.tag === 'tree') {\n            return SectionListRenderer;\n        }\n        return this._super.apply(this, arguments);\n    },\n});\n\nfieldRegistry.add('section_one2many', SectionFieldOne2Many);\n\n});\n", "odoo.define('account.payment', function (require) {\n\"use strict\";\n\nvar AbstractField = require('web.AbstractField');\nvar core = require('web.core');\nvar field_registry = require('web.field_registry');\nvar field_utils = require('web.field_utils');\n\nvar QWeb = core.qweb;\nvar _t = core._t;\n\nvar ShowPaymentLineWidget = AbstractField.extend({\n    events: _.extend({\n        'click .outstanding_credit_assign': '_onOutstandingCreditAssign',\n        'click .open_account_move': '_onOpenPayment',\n    }, AbstractField.prototype.events),\n    supportedFieldTypes: ['char'],\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     * @returns {boolean}\n     */\n    isSet: function() {\n        return true;\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @override\n     */\n    _render: function() {\n        this.viewAlreadyOpened = false;\n        var self = this;\n        var info = JSON.parse(this.value);\n        if (!info) {\n            this.$el.html('');\n            return;\n        }\n        _.each(info.content, function (k, v){\n            k.index = v;\n            k.amount = field_utils.format.float(k.amount, {digits: k.digits});\n            if (k.date){\n                k.date = field_utils.format.date(field_utils.parse.date(k.date, {}, {isUTC: true}));\n            }\n        });\n        this.$el.html(QWeb.render('ShowPaymentInfo', {\n            lines: info.content,\n            outstanding: info.outstanding,\n            title: info.title\n        }));\n        _.each(this.$('.js_payment_info'), function (k, v){\n            var isRTL = _t.database.parameters.direction === \"rtl\";\n            var content = info.content[v];\n            var options = {\n                content: function () {\n                    var $content = $(QWeb.render('PaymentPopOver', content));\n                    var unreconcile_button = $content.filter('.js_unreconcile_payment').on('click', self._onRemoveMoveReconcile.bind(self));\n\n                    $content.filter('.js_open_payment').on('click', self._onOpenPayment.bind(self));\n                    return $content;\n                },\n                html: true,\n                placement: isRTL ? 'bottom' : 'left',\n                title: 'Payment Information',\n                trigger: 'focus',\n                delay: { \"show\": 0, \"hide\": 100 },\n                container: $(k).parent(), // FIXME Ugly, should use the default body container but system & tests to adapt to properly destroy the popover\n            };\n            $(k).popover(options);\n        });\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @override\n     * @param {MouseEvent} event\n     */\n    _onOpenPayment: function (event) {\n        var paymentId = parseInt($(event.target).attr('payment-id'));\n        var moveId = parseInt($(event.target).attr('move-id'));\n        var resModel;\n        var id;\n        if (paymentId !== undefined && !isNaN(paymentId)){\n            resModel = \"account.payment\";\n            id = paymentId;\n        } else if (moveId !== undefined && !isNaN(moveId)){\n            resModel = \"account.move\";\n            id = moveId;\n        }\n        //Open form view of account.move with id = move_id\n        //viewAlreadyopened is a flag to prevent the user from clicking on another account.move/account.payment\n        //while the first one he clicked on is loading\n        if (!this.viewAlreadyOpened && resModel && id) {\n            this.viewAlreadyOpened = true;\n            this.do_action({\n                type: 'ir.actions.act_window',\n                res_model: resModel,\n                res_id: id,\n                views: [[false, 'form']],\n                target: 'current'\n            });\n        }\n    },\n    /**\n     * @private\n     * @override\n     * @param {MouseEvent} event\n     */\n    _onOutstandingCreditAssign: function (event) {\n        event.stopPropagation();\n        event.preventDefault();\n        var self = this;\n        var id = $(event.target).data('id') || false;\n        this._rpc({\n                model: 'account.move',\n                method: 'js_assign_outstanding_line',\n                args: [JSON.parse(this.value).move_id, id],\n            }).then(function () {\n                self.trigger_up('reload');\n            });\n    },\n    /**\n     * @private\n     * @override\n     * @param {MouseEvent} event\n     */\n    _onRemoveMoveReconcile: function (event) {\n        var self = this;\n        var moveId = parseInt($(event.target).attr('move-id'));\n        var partialId = parseInt($(event.target).attr('partial-id'));\n        if (partialId !== undefined && !isNaN(partialId)){\n            this._rpc({\n                model: 'account.move',\n                method: 'js_remove_outstanding_partial',\n                args: [moveId, partialId],\n            }).then(function () {\n                self.trigger_up('reload');\n            });\n        }\n    },\n});\n\nfield_registry.add('payment', ShowPaymentLineWidget);\n\nreturn {\n    ShowPaymentLineWidget: ShowPaymentLineWidget\n};\n\n});\n", "odoo.define('account.ShowResequenceRenderer', function (require) {\n\"use strict\";\n\nconst { Component } = owl;\nconst { useState } = owl.hooks;\nconst AbstractFieldOwl = require('web.AbstractFieldOwl');\nconst field_registry = require('web.field_registry_owl');\n\nclass ChangeLine extends Component { }\nChangeLine.template = 'account.ResequenceChangeLine';\nChangeLine.props = [\"changeLine\", 'ordering'];\n\n\nclass ShowResequenceRenderer extends AbstractFieldOwl {\n    constructor(...args) {\n        super(...args);\n        this.data = this.value ? JSON.parse(this.value) : {\n            changeLines: [],\n            ordering: 'date',\n        };\n    }\n    async willUpdateProps(nextProps) {\n        await super.willUpdateProps(nextProps);\n        Object.assign(this.data, JSON.parse(this.value));\n    }\n}\nShowResequenceRenderer.template = 'account.ResequenceRenderer';\nShowResequenceRenderer.components = { ChangeLine }\n\nfield_registry.add('account_resequence_widget', ShowResequenceRenderer);\nreturn ShowResequenceRenderer;\n});\n", "odoo.define('account.ShowGroupedList', function (require) {\n\"use strict\";\n\nconst { Component } = owl;\nconst { useState } = owl.hooks;\nconst AbstractFieldOwl = require('web.AbstractFieldOwl');\nconst field_registry = require('web.field_registry_owl');\n\nclass ListItem extends Component { }\nListItem.template = 'account.GroupedItemTemplate';\nListItem.props = [\"item_vals\", \"options\"];\n\nclass ListGroup extends Component { }\nListGroup.template = 'account.GroupedItemsTemplate';\nListGroup.components = { ListItem }\nListGroup.props = [\"group_vals\", \"options\"];\n\n\nclass ShowGroupedList extends AbstractFieldOwl {\n    constructor(...args) {\n        super(...args);\n        this.data = this.value ? JSON.parse(this.value) : {\n            groups_vals: [],\n            options: {\n                discarded_number: '',\n                columns: [],\n            },\n        };\n    }\n    async willUpdateProps(nextProps) {\n        await super.willUpdateProps(nextProps);\n        Object.assign(this.data, JSON.parse(this.value));\n    }\n}\nShowGroupedList.template = 'account.GroupedListTemplate';\nShowGroupedList.components = { ListGroup }\n\nfield_registry.add('grouped_view_widget', ShowGroupedList);\nreturn ShowGroupedList;\n});\n", "odoo.define('account.activity', function (require) {\n\"use strict\";\n\nvar AbstractField = require('web.AbstractField');\nvar core = require('web.core');\nvar field_registry = require('web.field_registry');\n\nvar QWeb = core.qweb;\nvar _t = core._t;\n\nvar VatActivity = AbstractField.extend({\n    className: 'o_journal_activity_kanban',\n    events: {\n        'click .see_all_activities': '_onOpenAll',\n        'click .see_activity': '_onOpenActivity',\n    },\n    init: function () {\n        this.MAX_ACTIVITY_DISPLAY = 5;\n        this._super.apply(this, arguments);\n    },\n    //------------------------------------------------------------\n    // Private\n    //------------------------------------------------------------\n    _render: function () {\n        var self = this;\n        var info = JSON.parse(this.value);\n        if (!info) {\n            this.$el.html('');\n            return;\n        }\n        info.more_activities = false;\n        if (info.activities.length > this.MAX_ACTIVITY_DISPLAY) {\n            info.more_activities = true;\n            info.activities = info.activities.slice(0, this.MAX_ACTIVITY_DISPLAY);\n        }\n        this.$el.html(QWeb.render('accountJournalDashboardActivity', info));\n    },\n\n    _onOpenActivity: function(e) {\n        e.preventDefault();\n        var self = this;\n        self.do_action({\n            type: 'ir.actions.act_window',\n            name: _t('Journal Entry'),\n            target: 'current',\n            res_id: $(e.target).data('resId'),\n            res_model:  'account.move',\n            views: [[false, 'form']],\n        });\n    },\n\n    _onOpenAll: function(e) {\n        e.preventDefault();\n        var self = this;\n        self.do_action({\n            type: 'ir.actions.act_window',\n            name: _t('Journal Entries'),\n            res_model:  'account.move',\n            views: [[false, 'kanban'], [false, 'form']],\n            search_view_id: [false],\n            domain: [['journal_id', '=', self.res_id], ['activity_ids', '!=', false]],\n        });\n    }\n})\n\nfield_registry.add('kanban_vat_activity', VatActivity);\n\nreturn VatActivity;\n});\n", "/** @odoo-module alias=account.tax_group_owl **/\n\"use strict\";\n\nconst { Component } = owl;\nconst { useState, useRef } = owl.hooks;\nimport session from 'web.session';\nimport AbstractFieldOwl from 'web.AbstractFieldOwl';\nimport fieldUtils from 'web.field_utils';\nimport field_registry from 'web.field_registry_owl';\n\n/**\n    A line of some TaxTotalsComponent, giving the values of a tax group.\n**/\nclass TaxGroupComponent extends Component {\n\n    constructor(parent, props) {\n        super(parent, props);\n        this.inputTax = useRef('taxValueInput');\n        this.state = useState({value: 'readonly'});\n        this.allowTaxEdition = this.__owl__.parent.mode === 'edit' ? props.allowTaxEdition : false;\n    }\n\n    //--------------------------------------------------------------------------\n    // Life cycle methods\n    //--------------------------------------------------------------------------\n\n    willUpdateProps(nextProps) {\n        this.setState('readonly'); // If props are edited, we set the state to readonly\n    }\n\n    patched() {\n        if (this.state.value === 'edit') {\n            let newValue = this.props.taxGroup.tax_group_amount;\n            let currency = session.get_currency(this.props.record.data.currency_id.data.id);\n\n            newValue = fieldUtils.format.float(newValue, null, {digits: currency.digits});\n            this.inputTax.el.focus(); // Focus the input\n            this.inputTax.el.value = newValue;\n        }\n    }\n\n    //--------------------------------------------------------------------------\n    // Main methods\n    //--------------------------------------------------------------------------\n\n    /**\n     * The purpose of this method is to change the state of the component.\n     * It can have one of the following three states:\n     *  - readonly: display in read-only mode of the field,\n     *  - edit: display with a html input field,\n     *  - disable: display with a html input field that is disabled.\n     *\n     * If a value other than one of these 3 states is passed as a parameter,\n     * the component is set to readonly by default.\n     *\n     * @param {String} value\n     */\n    setState(value) {\n        if (['readonly', 'edit', 'disable'].includes(value)) {\n            this.state.value = value;\n        }\n        else {\n            this.state.value = 'readonly';\n        }\n    }\n\n    /**\n     * This method handles the \"_onChangeTaxValue\" event. In this method,\n     * we get the new value for the tax group, we format it and we call\n     * the method to recalculate the tax lines. At the moment the method\n     * is called, we disable the html input field.\n     *\n     * In case the value has not changed or the tax group is equal to 0,\n     * the modification does not take place.\n     */\n    _onChangeTaxValue() {\n        this.setState('disable'); // Disable the input\n        let newValue = this.inputTax.el.value; // Get the new value\n        let currency = session.get_currency(this.props.record.data.currency_id.data.id); // The records using this widget must have a currency_id field.\n        try {\n            newValue = fieldUtils.parse.float(newValue); // Need a float for format the value\n            newValue = fieldUtils.format.float(newValue, null, {digits: currency.digits}); // Return a string rounded to currency precision\n            newValue = fieldUtils.parse.float(newValue); // Convert back to Float to compare with oldValue to know if value has changed\n        } catch (err) {\n            $(this.inputTax.el).addClass('o_field_invalid');\n            this.setState('edit');\n            return;\n        }\n        // The newValue can't be equals to 0\n        if (newValue === this.props.taxGroup.tax_group_amount || newValue === 0) {\n            this.setState('readonly');\n            return;\n        }\n        this.props.taxGroup.tax_group_amount = newValue;\n        this.trigger('change-tax-group', {\n            oldValue: this.props.taxGroup.tax_group_amount,\n            newValue: newValue,\n            taxGroupId: this.props.taxGroup.tax_group_id\n        });\n    }\n}\nTaxGroupComponent.props = ['taxGroup', 'allowTaxEdition', 'record'];\nTaxGroupComponent.template = 'account.TaxGroupComponent';\n\n/**\n    Widget used to display tax totals by tax groups for invoices, PO and SO,\n    and possibly allowing editing them.\n\n    Note that this widget requires the object it is used on to have a\n    currency_id field.\n**/\nclass TaxTotalsComponent extends AbstractFieldOwl {\n    constructor(...args) {\n        super(...args);\n        this.totals = useState({value: this.value ? JSON.parse(this.value) : null});\n        this.allowTaxEdition = this.nodeOptions['allowTaxEdition'];\n    }\n\n    willUpdateProps(nextProps) {\n        // We only reformat tax groups if there are changed\n        this.totals.value = JSON.parse(nextProps.record.data[this.props.fieldName]);\n    }\n\n    _onKeydown(ev) {\n        switch (ev.which) {\n            // Trigger only if the user clicks on ENTER or on TAB.\n            case $.ui.keyCode.ENTER:\n            case $.ui.keyCode.TAB:\n                // trigger blur to prevent the code being executed twice\n                $(ev.target).blur();\n        }\n    }\n\n    /**\n     * This method is the main function of the tax group widget.\n     * It is called by an event trigger (from the TaxGroupComponent) and receives\n     * a particular payload.\n     *\n     * It is responsible for calculating taxes based on tax groups and triggering\n     * an event to notify the ORM of a change.\n     */\n    _onChangeTaxValueByTaxGroup(ev) {\n        this.trigger('field-changed', {\n            dataPointID: this.record.id,\n            changes: { tax_totals_json: JSON.stringify(this.totals.value) }\n        })\n    }\n}\n\nTaxTotalsComponent.template = 'account.TaxTotalsField';\nTaxTotalsComponent.components = { TaxGroupComponent };\n\n\nfield_registry.add('account-tax-totals-field', TaxTotalsComponent);\n\nexport default TaxTotalsComponent\n", "\nodoo.define('account.section_and_note_backend', function (require) {\n// The goal of this file is to contain JS hacks related to allowing\n// section and note on sale order and invoice.\n\n// [UPDATED] now also allows configuring products on sale order.\n\n\"use strict\";\nvar FieldChar = require('web.basic_fields').FieldChar;\nvar FieldOne2Many = require('web.relational_fields').FieldOne2Many;\nvar fieldRegistry = require('web.field_registry');\nvar ListFieldText = require('web.basic_fields').ListFieldText;\nvar ListRenderer = require('web.ListRenderer');\n\nvar SectionAndNoteListRenderer = ListRenderer.extend({\n    /**\n     * We want section and note to take the whole line (except handle and trash)\n     * to look better and to hide the unnecessary fields.\n     *\n     * @override\n     */\n    _renderBodyCell: function (record, node, index, options) {\n        var $cell = this._super.apply(this, arguments);\n\n        var isSection = record.data.display_type === 'line_section';\n        var isNote = record.data.display_type === 'line_note';\n\n        if (isSection || isNote) {\n            if (node.attrs.widget === \"handle\") {\n                return $cell;\n            } else if (node.attrs.name === \"name\") {\n                var nbrColumns = this._getNumberOfCols();\n                if (this.handleField) {\n                    nbrColumns--;\n                }\n                if (this.addTrashIcon) {\n                    nbrColumns--;\n                }\n                $cell.attr('colspan', nbrColumns);\n            } else {\n                $cell.removeClass('o_invisible_modifier');\n                return $cell.addClass('o_hidden');\n            }\n        }\n\n        return $cell;\n    },\n    /**\n     * We add the o_is_{display_type} class to allow custom behaviour both in JS and CSS.\n     *\n     * @override\n     */\n    _renderRow: function (record, index) {\n        var $row = this._super.apply(this, arguments);\n\n        if (record.data.display_type) {\n            $row.addClass('o_is_' + record.data.display_type);\n        }\n\n        return $row;\n    },\n    /**\n     * We want to add .o_section_and_note_list_view on the table to have stronger CSS.\n     *\n     * @override\n     * @private\n     */\n    _renderView: function () {\n        var self = this;\n        return this._super.apply(this, arguments).then(function () {\n            self.$('.o_list_table').addClass('o_section_and_note_list_view');\n        });\n    }\n});\n\n// We create a custom widget because this is the cleanest way to do it:\n// to be sure this custom code will only impact selected fields having the widget\n// and not applied to any other existing ListRenderer.\nvar SectionAndNoteFieldOne2Many = FieldOne2Many.extend({\n    /**\n     * We want to use our custom renderer for the list.\n     *\n     * @override\n     */\n    _getRenderer: function () {\n        if (this.view.arch.tag === 'tree') {\n            return SectionAndNoteListRenderer;\n        }\n        return this._super.apply(this, arguments);\n    },\n});\n\n// This is a merge between a FieldText and a FieldChar.\n// We want a FieldChar for section,\n// and a FieldText for the rest (product and note).\nvar SectionAndNoteFieldText = function (parent, name, record, options) {\n    var isSection = record.data.display_type === 'line_section';\n    var Constructor = isSection ? FieldChar : ListFieldText;\n    return new Constructor(parent, name, record, options);\n};\n\nfieldRegistry.add('section_and_note_one2many', SectionAndNoteFieldOne2Many);\nfieldRegistry.add('section_and_note_text', SectionAndNoteFieldText);\n\nreturn SectionAndNoteListRenderer;\n});\n", "odoo.define('account.tour', function(require) {\n\"use strict\";\n\nvar core = require('web.core');\nconst {Markup} = require('web.utils');\nvar tour = require('web_tour.tour');\n\nvar _t = core._t;\n\ntour.register('account_tour', {\n    url: \"/web\",\n    sequence: 60,\n}, [\n    ...tour.stepUtils.goToAppSteps('account.menu_finance', _t('Send invoices to your customers in no time with the <b>Invoicing app</b>.')),\n    {\n        trigger: \"a.o_onboarding_step_action[data-method=action_open_base_onboarding_company]\",\n        content: _t(\"Start by checking your company's data.\"),\n        position: \"bottom\",\n    }, {\n        trigger: \"button[name=action_save_onboarding_company_step]\",\n        extra_trigger: \"a.o_onboarding_step_action[data-method=action_open_base_onboarding_company]\",\n        content: _t(\"Looks good. Let's continue.\"),\n        position: \"bottom\",\n    }, {\n        trigger: \"a.o_onboarding_step_action[data-method=action_open_base_document_layout]\",\n        content: _t(\"Customize your layout.\"),\n        position: \"bottom\",\n    }, {\n        trigger: \"button[name=document_layout_save]\",\n        extra_trigger: \"a.o_onboarding_step_action[data-method=action_open_base_document_layout]\",\n        content: _t(\"Once everything is as you want it, validate.\"),\n        position: \"top\",\n    }, {\n        trigger: \"a.o_onboarding_step_action[data-method=action_open_account_onboarding_create_invoice]\",\n        content: _t(\"Now, we'll create your first invoice.\"),\n        position: \"bottom\",\n    }, {\n        trigger: \"div[name=partner_id] input\",\n        extra_trigger: \"[name=move_type][raw-value=out_invoice]\",\n        content: Markup(_t(\"Write a company name to <b>create one</b> or <b>see suggestions</b>.\")),\n        position: \"right\",\n    }, {\n        trigger: \".o_m2o_dropdown_option a:contains('Create')\",\n        extra_trigger: \"[name=move_type][raw-value=out_invoice]\",\n        content: _t(\"Select first partner\"),\n        auto: true,\n    }, {\n        trigger: \".modal-content button.btn-primary\",\n        extra_trigger: \"[name=move_type][raw-value=out_invoice]\",\n        content: Markup(_t(\"Once everything is set, you are good to continue. You will be able to edit this later in the <b>Customers</b> menu.\")),\n        auto: true,\n    }, {\n        trigger: \"div[name=invoice_line_ids] .o_field_x2many_list_row_add a:not([data-context])\",\n        extra_trigger: \"[name=move_type][raw-value=out_invoice]\",\n        content: _t(\"Add a line to your invoice\"),\n    }, {\n        trigger: \"div[name=invoice_line_ids] textarea[name=name]\",\n        extra_trigger: \"[name=move_type][raw-value=out_invoice]\",\n        content: _t(\"Fill in the details of the line.\"),\n        position: \"bottom\",\n    }, {\n        trigger: \"div[name=invoice_line_ids] input[name=price_unit]\",\n        extra_trigger: \"[name=move_type][raw-value=out_invoice]\",\n        content: _t(\"Set a price\"),\n        position: \"bottom\",\n        run: 'text 100',\n    }, {\n        trigger: \"button[name=action_post]\",\n        extra_trigger: \"[name=move_type][raw-value=out_invoice]\",\n        content: _t(\"Once your invoice is ready, press CONFIRM.\"),\n    }, {\n        trigger: \"button[name=action_invoice_sent]\",\n        extra_trigger: \"[name=move_type][raw-value=out_invoice]\",\n        content: _t(\"Send the invoice and check what the customer will receive.\"),\n    }, {\n        trigger: \"input[name=email]\",\n        extra_trigger: \"[name=move_type][raw-value=out_invoice]\",\n        content: Markup(_t(\"Write here <b>your own email address</b> to test the flow.\")),\n        run: 'text customer@example.com',\n        auto: true,\n    }, {\n        trigger: \".modal-content button.btn-primary\",\n        extra_trigger: \"[name=move_type][raw-value=out_invoice]\",\n        content: _t(\"Validate.\"),\n        auto: true,\n    }, {\n        trigger: \"button[name=send_and_print_action]\",\n        extra_trigger: \"[name=move_type][raw-value=out_invoice]\",\n        content: _t(\"Let's send the invoice.\"),\n        position: \"top\"\n    }\n]);\n\n});\n", "odoo.define('account.upload.bill.mixin', function (require) {\n\"use strict\";\n\n    var core = require('web.core');\n    var _t = core._t;\n\n    var qweb = core.qweb;\n\n    var UploadBillMixin = {\n\n        start: function () {\n            // define a unique uploadId and a callback method\n            this.fileUploadID = _.uniqueId('account_bill_file_upload');\n            $(window).on(this.fileUploadID, this._onFileUploaded.bind(this));\n            return this._super.apply(this, arguments);\n        },\n\n        _onAddAttachment: function (ev) {\n            // Auto submit form once we've selected an attachment\n            var $input = $(ev.currentTarget).find('input.o_input_file');\n            if ($input.val() !== '') {\n                var $binaryForm = this.$('.o_vendor_bill_upload form.o_form_binary_form');\n                $binaryForm.submit();\n            }\n        },\n\n        _onFileUploaded: function () {\n            // Callback once attachment have been created, create a bill with attachment ids\n            var self = this;\n            var attachments = Array.prototype.slice.call(arguments, 1);\n            // Get id from result\n            var attachent_ids = attachments.reduce(function(filtered, record) {\n                if (record.id) {\n                    filtered.push(record.id);\n                }\n                return filtered;\n            }, []);\n            return this._rpc({\n                model: 'account.journal',\n                method: 'create_invoice_from_attachment',\n                args: [\"\", attachent_ids],\n                context: this.initialState.context,\n            }).then(function(result) {\n                self.do_action(result);\n            }).catch(function () {\n                // Reset the file input, allowing to select again the same file if needed\n                self.$('.o_vendor_bill_upload .o_input_file').val('');\n            });\n        },\n\n        _onUpload: function (event) {\n            var self = this;\n            // If hidden upload form don't exists, create it\n            var $formContainer = this.$('.o_content').find('.o_vendor_bill_upload');\n            if (!$formContainer.length) {\n                $formContainer = $(qweb.render('account.BillsHiddenUploadForm', {widget: this}));\n                $formContainer.appendTo(this.$('.o_content'));\n            }\n            // Trigger the input to select a file\n            this.$('.o_vendor_bill_upload .o_input_file').click();\n        },\n    }\n    return UploadBillMixin;\n});\n\n\nodoo.define('account.bills.tree', function (require) {\n\"use strict\";\n    var core = require('web.core');\n    var ListController = require('web.ListController');\n    var ListView = require('web.ListView');\n    var UploadBillMixin = require('account.upload.bill.mixin');\n    var viewRegistry = require('web.view_registry');\n\n    var BillsListController = ListController.extend(UploadBillMixin, {\n        buttons_template: 'BillsListView.buttons',\n        events: _.extend({}, ListController.prototype.events, {\n            'click .o_button_upload_bill': '_onUpload',\n            'change .o_vendor_bill_upload .o_form_binary_form': '_onAddAttachment',\n        }),\n    });\n\n    var BillsListView = ListView.extend({\n        config: _.extend({}, ListView.prototype.config, {\n            Controller: BillsListController,\n        }),\n    });\n\n    viewRegistry.add('account_tree', BillsListView);\n});\n\nodoo.define('account.bills.kanban', function (require) {\n    var KanbanController = require('web.KanbanController');\n    var KanbanView = require('web.KanbanView');\n    var UploadBillMixin = require('account.upload.bill.mixin');\n    var viewRegistry = require('web.view_registry');\n\n    var BillsKanbanController = KanbanController.extend(UploadBillMixin, {\n        buttons_template: 'BillsKanbanView.buttons',\n        events: _.extend({}, KanbanController.prototype.events, {\n            'click .o_button_upload_bill': '_onUpload',\n            'change .o_vendor_bill_upload .o_form_binary_form': '_onAddAttachment',\n        }),\n    });\n\n    var BillsKanbanView = KanbanView.extend({\n        config: _.extend({}, KanbanView.prototype.config, {\n            Controller: BillsKanbanController,\n        }),\n    });\n\n    viewRegistry.add('account_bills_kanban', BillsKanbanView);\n});\n\nodoo.define('account.dashboard.kanban', function (require) {\n\"use strict\";\n    var core = require('web.core');\n    var KanbanController = require('web.KanbanController');\n    var KanbanView = require('web.KanbanView');\n    var UploadBillMixin = require('account.upload.bill.mixin');\n    var viewRegistry = require('web.view_registry');\n\n    var DashboardKanbanController = KanbanController.extend(UploadBillMixin, {\n        events: _.extend({}, KanbanController.prototype.events, {\n            'click .o_button_upload_bill': '_onUpload',\n            'change .o_vendor_bill_upload .o_form_binary_form': '_onAddAttachment',\n        }),\n        /**\n         * We override _onUpload (from the upload bill mixin) to pass default_journal_id\n         * and default_move_type in context.\n         *\n         * @override\n         */\n        _onUpload: function (event) {\n            var kanbanRecord = $(event.currentTarget).closest('.o_kanban_record').data('record');\n            this.initialState.context['default_journal_id'] = kanbanRecord.id;\n            if ($(event.currentTarget).attr('journal_type') == 'sale') {\n                this.initialState.context['default_move_type'] = 'out_invoice'\n            } else if ($(event.currentTarget).attr('journal_type') == 'purchase') {\n                this.initialState.context['default_move_type'] = 'in_invoice'\n            }\n            UploadBillMixin._onUpload.apply(this, arguments);\n        }\n    });\n\n    var DashboardKanbanView = KanbanView.extend({\n        config: _.extend({}, KanbanView.prototype.config, {\n            Controller: DashboardKanbanController,\n        }),\n    });\n\n    viewRegistry.add('account_dashboard_kanban', DashboardKanbanView);\n});\n", "odoo.define('account.hierarchy.selection', function (require) {\n\"use strict\";\n\n    var core = require('web.core');\n    var relational_fields = require('web.relational_fields');\n    var _t = core._t;\n    var registry = require('web.field_registry');\n\n\n    var FieldSelection = relational_fields.FieldSelection;\n\n    var qweb = core.qweb;\n\n    var HierarchySelection = FieldSelection.extend({\n        _renderEdit: function () {\n            var self = this;\n            var prom = Promise.resolve()\n            if (!self.hierarchy_groups) {\n                prom = this._rpc({\n                    model: 'account.account.type',\n                    method: 'search_read',\n                    kwargs: {\n                        domain: [],\n                        fields: ['id', 'internal_group', 'display_name'],\n                    },\n                }).then(function(arg) {\n                    self.values = _.map(arg, v => [v['id'], v['display_name']])\n                    self.hierarchy_groups = [\n                        {\n                            'name': _t('Balance Sheet'),\n                            'children': [\n                                {'name': _t('Assets'), 'ids': _.map(_.filter(arg, v => v['internal_group'] == 'asset'), v => v['id'])},\n                                {'name': _t('Liabilities'), 'ids': _.map(_.filter(arg, v => v['internal_group'] == 'liability'), v => v['id'])},\n                                {'name': _t('Equity'), 'ids': _.map(_.filter(arg, v => v['internal_group'] == 'equity'), v => v['id'])},\n                            ],\n                        },\n                        {\n                            'name': _t('Profit & Loss'),\n                            'children': [\n                                {'name': _t('Income'), 'ids': _.map(_.filter(arg, v => v['internal_group'] == 'income'), v => v['id'])},\n                                {'name': _t('Expense'), 'ids': _.map(_.filter(arg, v => v['internal_group'] == 'expense'), v => v['id'])},\n                            ],\n                        },\n                        {'name': _t('Other'), 'ids': _.map(_.filter(arg, v => !['asset', 'liability', 'equity', 'income', 'expense'].includes(v['internal_group'])), v => v['id'])},\n                    ]\n                });\n            }\n\n            Promise.resolve(prom).then(function() {\n                self.$el.empty();\n                self._addHierarchy(self.$el, self.hierarchy_groups, 0);\n                var value = self.value;\n                if (self.field.type === 'many2one' && value) {\n                    value = value.data.id;\n                }\n                self.$el.val(JSON.stringify(value));\n            });\n        },\n        _addHierarchy: function(el, group, level) {\n            var self = this;\n            _.each(group, function(item) {\n                var optgroup = $('<optgroup/>').attr(({\n                    'label': $('<div/>').html('&nbsp;'.repeat(6 * level) + item['name']).text(),\n                }))\n                _.each(item['ids'], function(id) {\n                    var value = _.find(self.values, v => v[0] == id)\n                    optgroup.append($('<option/>', {\n                        value: JSON.stringify(value[0]),\n                        text: value[1],\n                    }));\n                })\n                el.append(optgroup)\n                if (item['children']) {\n                    self._addHierarchy(el, item['children'], level + 1);\n                }\n            })\n        }\n    });\n    registry.add(\"account_hierarchy_selection\", HierarchySelection);\n});\n", "odoo.define('utm.campaing_kanban_examples', function (require) {\n'use strict';\n\nvar core = require('web.core');\nvar kanbanExamplesRegistry = require('web.kanban_examples_registry');\n\nvar _lt = core._lt;\n\nkanbanExamplesRegistry.add('utm_campaign', {\n    ghostColumns: [_lt('Ideas'), _lt('Design'), _lt('Review'), _lt('Send'), _lt('Done')],\n    applyExamplesText: _lt(\"Use This For My Campaigns\"),\n    examples: [{\n        name: _lt('Creative Flow'),\n        columns: [_lt('Ideas'), _lt('Design'), _lt('Review'), _lt('Send'), _lt('Done')],\n        description: _lt(\"Collect ideas, design creative content and publish it once reviewed.\"),\n    }, {\n        name: _lt('Event-driven Flow'),\n        columns: [_lt('Later'), _lt('This Month'), _lt('This Week'), _lt('Running'), _lt('Sent')],\n        description: _lt(\"Track incoming events (e.g. : Christmas, Black Friday, ...) and publish timely content.\"),\n    }, {\n        name: _lt('Soft-Launch Flow'),\n        columns: [_lt('Pre-Launch'), _lt('Soft-Launch'), _lt('Deploy'), _lt('Report'), _lt('Done')],\n        description: _lt(\"Prepare your Campaign, test it with part of your audience and deploy it fully afterwards.\"),\n    }, {\n        name: _lt('Audience-driven Flow'),\n        columns: [_lt('Gather Data'), _lt('List-Building'), _lt('Copywriting'), _lt('Sent')],\n        description: _lt(\"Gather data, build a recipient list and write content based on your Marketing target.\"),\n    }, {\n        name: _lt('Approval-based Flow'),\n        columns: [_lt('To be Approved'), _lt('Approved'), _lt('Deployed')],\n        description: _lt(\"Prepare Campaigns and get them approved before making them go live.\"),\n    }],\n});\n});\n", "odoo.define('sale.sales_team_dashboard', function (require) {\n\"use strict\";\n\nvar core = require('web.core');\nvar KanbanRecord = require('web.KanbanRecord');\nvar session = require('web.session');\nvar _t = core._t;\n\nKanbanRecord.include({\n    events: _.defaults({\n        'click .sales_team_target_definition': '_onSalesTeamTargetClick',\n    }, KanbanRecord.prototype.events),\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @param {MouseEvent} ev\n     */\n    _onSalesTeamTargetClick: function (ev) {\n        ev.preventDefault();\n        var self = this;\n\n        this.$target_input = $('<input>');\n        this.$('.o_kanban_primary_bottom:last').html(this.$target_input);\n        this.$target_input.focus();\n        let preLabel = _t(\"Set an invoicing target: \");\n        let postLabel = _t(\" / Month\");\n        const kanbanBottomBlock = this.$el.find('.o_kanban_primary_bottom.bottom_block:last-child');\n        if (this.recordData.currency_id) {\n            const currency = session.get_currency(this.recordData.currency_id.res_id);\n            if (currency.position === \"after\") {\n                postLabel = ` ${' ' + currency.symbol}${postLabel}`;\n            } else {\n               preLabel = `${preLabel} ${currency.symbol + ' '}`;\n            }\n        }\n        kanbanBottomBlock.prepend($('<span/>').text(preLabel));\n        kanbanBottomBlock.append($('<span/>').text(postLabel));\n\n        this.$target_input.on({\n            blur: this._onSalesTeamTargetSet.bind(this),\n            keydown: function (ev) {\n                if (ev.keyCode === $.ui.keyCode.ENTER) {\n                    self._onSalesTeamTargetSet();\n                }\n            },\n        });\n    },\n    /**\n     * Mostly a handler for what happens to the input \"this.$target_input\"\n     *\n     * @private\n     *\n     */\n    _onSalesTeamTargetSet: function () {\n        var self = this;\n        var value = Number(this.$target_input.val());\n        if (isNaN(value)) {\n            this.displayNotification({ message: _t(\"Please enter an integer value\"), type: 'danger' });\n        } else {\n            this.trigger_up('kanban_record_update', {\n                invoiced_target: value,\n                onSuccess: function () {\n                    self.trigger_up('reload');\n                },\n            });\n        }\n    },\n});\n\n});\n", "odoo.define('sale.tour', function(require) {\n\"use strict\";\n\nconst {_t} = require('web.core');\nconst {Markup} = require('web.utils');\nvar tour = require('web_tour.tour');\n\ntour.register(\"sale_tour\", {\n    url: \"/web\",\n    rainbowMan: false,\n    sequence: 20,\n}, [tour.stepUtils.showAppsMenuItem(), {\n    trigger: \".o_app[data-menu-xmlid='sale.sale_menu_root']\",\n    content: _t(\"Open Sales app to send your first quotation in a few clicks.\"),\n    position: \"right\",\n    edition: \"community\"\n}, {\n    trigger: \".o_app[data-menu-xmlid='sale.sale_menu_root']\",\n    content: _t(\"Open Sales app to send your first quotation in a few clicks.\"),\n    position: \"bottom\",\n    edition: \"enterprise\"\n}, {\n    trigger: 'a.o_onboarding_step_action.btn[data-method=action_open_base_onboarding_company]',\n    extra_trigger: \".o_sale_order\",\n    content: _t(\"Start by checking your company's data.\"),\n    position: \"bottom\",\n}, {\n    trigger: \".modal-content button[name='action_save_onboarding_company_step']\",\n    content: _t(\"Looks good. Let's continue.\"),\n    position: \"left\",\n}, {\n    trigger: 'a.o_onboarding_step_action.btn[data-method=action_open_base_document_layout]',\n    extra_trigger: \".o_sale_order\",\n    content: _t(\"Customize your quotes and orders.\"),\n    position: \"bottom\",\n}, {\n    trigger: \"button[name='document_layout_save']\",\n    extra_trigger: \".o_sale_order\",\n    content: _t(\"Good job, let's continue.\"),\n    position: \"top\", // dot NOT move to bottom, it would cause a resize flicker\n}, {\n    trigger: 'a.o_onboarding_step_action.btn[data-method=action_open_sale_onboarding_payment_acquirer]',\n    extra_trigger: \".o_sale_order\",\n    content: _t(\"To speed up order confirmation, we can activate electronic signatures or payments.\"),\n    position: \"bottom\",\n}, {\n    trigger: \"button[name='add_payment_methods']\",\n    extra_trigger: \".o_sale_order\",\n    content: _t(\"Lets keep electronic signature for now.\"),\n    position: \"bottom\",\n}, {\n    trigger: 'a.o_onboarding_step_action.btn[data-method=action_open_sale_onboarding_sample_quotation]',\n    extra_trigger: \".o_sale_order\",\n    content: _t(\"Now, we'll create a sample quote.\"),\n    position: \"bottom\",\n}]);\n\ntour.register(\"sale_quote_tour\", {\n        url: \"/web#action=sale.action_quotations_with_onboarding&view_type=form\",\n        rainbowMan: true,\n        rainbowManMessage: \"<b>Congratulations</b>, your first quotation is sent!<br>Check your email to validate the quote.\",\n        sequence: 30,\n    }, [{\n        trigger: \".o_form_editable .o_field_many2one[name='partner_id']\",\n        extra_trigger: \".o_sale_order\",\n        content: _t(\"Write a company name to create one, or see suggestions.\"),\n        position: \"right\",\n        run: function (actions) {\n            actions.text(\"Agrolait\", this.$anchor.find(\"input\"));\n        },\n    }, {\n        trigger: \".ui-menu-item > a\",\n        auto: true,\n        in_modal: false,\n    }, {\n        trigger: \".o_field_x2many_list_row_add > a\",\n        extra_trigger: \".o_field_many2one[name='partner_id'] .o_external_button\",\n        content: _t(\"Click here to add some products or services to your quotation.\"),\n        position: \"bottom\",\n    }, {\n        trigger: \".o_field_widget[name='product_id'], .o_field_widget[name='product_template_id']\",\n        extra_trigger: \".o_sale_order\",\n        content: _t(\"Select a product, or create a new one on the fly.\"),\n        position: \"right\",\n        run: function (actions) {\n            var $input = this.$anchor.find(\"input\");\n            actions.text(\"DESK0001\", $input.length === 0 ? this.$anchor : $input);\n            // fake keydown to trigger search\n            var keyDownEvent = jQuery.Event(\"keydown\");\n            keyDownEvent.which = 42;\n            this.$anchor.trigger(keyDownEvent);\n            var $descriptionElement = $(\".o_form_editable textarea[name='name']\");\n            // when description changes, we know the product has been created\n            $descriptionElement.change(function () {\n                $descriptionElement.addClass(\"product_creation_success\");\n            });\n        },\n        id: \"product_selection_step\"\n    }, {\n        trigger: \".ui-menu.ui-widget .ui-menu-item a:contains('DESK0001')\",\n        auto: true,\n    }, {\n        trigger: \".o_form_editable textarea[name='name'].product_creation_success\",\n        auto: true,\n        run: function () {\n        } // wait for product creation\n    }, {\n        trigger: \".o_field_widget[name='price_unit'] \",\n        extra_trigger: \".o_sale_order\",\n        content: Markup(_t(\"<b>Set a price</b>.\")),\n        position: \"right\",\n        run: \"text 10.0\"\n    },\n    ...tour.stepUtils.statusbarButtonsSteps(\"Send by Email\", Markup(_t(\"<b>Send the quote</b> to yourself and check what the customer will receive.\")), \".o_statusbar_buttons button[name='action_quotation_send']\"),\n    {\n        trigger: \".modal-footer button.btn-primary\",\n        auto: true,\n    }, {\n        trigger: \".modal-footer button[name='action_send_mail']\",\n        extra_trigger: \".modal-footer button[name='action_send_mail']\",\n        content: _t(\"Let's send the quote.\"),\n        position: \"bottom\",\n    }]);\n\n});\n", "odoo.define('sale.product_configurator', function (require) {\nvar relationalFields = require('web.relational_fields');\nvar FieldsRegistry = require('web.field_registry');\nvar core = require('web.core');\nvar _t = core._t;\n\n/**\n * The sale.product_configurator widget is a simple widget extending FieldMany2One\n * It allows the development of configuration strategies in other modules through\n * widget extensions.\n *\n *\n * !!! WARNING !!!\n *\n * This widget is only designed for sale_order_line creation/updates.\n * !!! It should only be used on a product_product or product_template field !!!\n */\nvar ProductConfiguratorWidget = relationalFields.FieldMany2One.extend({\n    events: _.extend({}, relationalFields.FieldMany2One.prototype.events, {\n        'click .o_edit_product_configuration': '_onEditConfiguration'\n    }),\n\n     /**\n      * @override\n      */\n    _render: function () {\n        this._super.apply(this, arguments);\n        if (this.mode === 'edit' && this.value &&\n        (this._isConfigurableProduct() || this._isConfigurableLine())) {\n            this._addProductLinkButton();\n            this._addConfigurationEditButton();\n        } else if (this.mode === 'edit' && this.value) {\n            this._addProductLinkButton();\n            this.$('.o_edit_product_configuration').hide();\n        } else {\n            this.$('.o_external_button').hide();\n            this.$('.o_edit_product_configuration').hide();\n        }\n    },\n\n    /**\n     * Add button linking to product_id/product_template_id form.\n     */\n    _addProductLinkButton: function () {\n        if (this.$('.o_external_button').length === 0) {\n            var $productLinkButton = $('<button>', {\n                type: 'button',\n                class: 'fa fa-external-link btn btn-secondary o_external_button',\n                tabindex: '-1',\n                draggable: false,\n                'aria-label': _t('External Link'),\n                title: _t('External Link')\n            });\n\n            var $inputDropdown = this.$('.o_input_dropdown');\n            $inputDropdown.after($productLinkButton);\n        }\n    },\n\n    /**\n     * If current product is configurable,\n     * Show edit button (in Edit Mode) after the product/product_template\n     */\n    _addConfigurationEditButton: function () {\n        var $inputDropdown = this.$('.o_input_dropdown');\n\n        if ($inputDropdown.length !== 0 &&\n            this.$('.o_edit_product_configuration').length === 0) {\n            var $editConfigurationButton = $('<button>', {\n                type: 'button',\n                class: 'fa fa-pencil btn btn-secondary o_edit_product_configuration',\n                tabindex: '-1',\n                draggable: false,\n                'aria-label': _t('Edit Configuration'),\n                title: _t('Edit Configuration')\n            });\n\n            $inputDropdown.after($editConfigurationButton);\n        }\n    },\n\n    /**\n     * Hook to override with _onEditProductConfiguration\n     * to know if edit pencil button has to be put next to the field\n     *\n     * @private\n     */\n    _isConfigurableProduct: function () {\n        return false;\n    },\n\n    /**\n     * Hook to override with _onEditProductConfiguration\n     * to know if edit pencil button has to be put next to the field\n     *\n     * @private\n     */\n    _isConfigurableLine: function () {\n        return false;\n    },\n\n    /**\n     * Override catching changes on product_id or product_template_id.\n     * Calls _onTemplateChange in case of product_template change.\n     * Calls _onProductChange in case of product change.\n     * Shouldn't be overridden by product configurators\n     * or only to setup some data for further computation\n     * before calling super.\n     *\n     * @override\n     * @param {OdooEvent} ev\n     * @param {boolean} ev.data.preventProductIdCheck prevent the product configurator widget\n     *     from looping forever when it needs to change the 'product_template_id'\n     *\n     * @private\n     */\n    reset: async function (record, ev) {\n        await this._super(...arguments);\n        if (ev && ev.target === this) {\n            if (ev.data.changes && !ev.data.preventProductIdCheck && ev.data.changes.product_template_id) {\n                this._onTemplateChange(record.data.product_template_id.data.id, ev.data.dataPointID);\n            } else if (ev.data.changes && ev.data.changes.product_id) {\n                this._onProductChange(record.data.product_id.data && record.data.product_id.data.id, ev.data.dataPointID).then(wizardOpened => {\n                    if (!wizardOpened) {\n                        this._onLineConfigured();\n                    }\n                });\n            }\n        }\n    },\n\n    /**\n     * Hook for product_template based configurators\n     * (product configurator, matrix, ...).\n     *\n     * @param {integer} productTemplateId\n     * @param {String} dataPointID\n     *\n     * @private\n     */\n    _onTemplateChange: function (productTemplateId, dataPointId) {\n        return Promise.resolve(false);\n    },\n\n    /**\n     * Hook for product_product based configurators\n     * (event, rental, ...).\n     * Should return\n     *    true if product has been configured through wizard or\n     *        the result of the super call for other wizard extensions\n     *    false if the product wasn't configurable through the wizard\n     *\n     * @param {integer} productId\n     * @param {String} dataPointID\n     * @returns {Promise<Boolean>} stopPropagation true if a suitable configurator has been found.\n     *\n     * @private\n     */\n    _onProductChange: function (productId, dataPointId) {\n        return Promise.resolve(false);\n    },\n\n    /**\n     * Hook for configurator happening after line has been set\n     * (options, ...).\n     * Allows sale_product_configurator module to apply its options\n     * after line configuration has been done.\n     *\n     * @private\n     */\n    _onLineConfigured: function () {\n\n    },\n\n    /**\n     * Triggered on click of the configuration button.\n     * It is only shown in Edit mode,\n     * when _isConfigurableProduct or _isConfigurableLine is True.\n     *\n     * After reflexion, when a line was configured through two wizards,\n     * only the line configuration will open.\n     *\n     * Two hooks are available depending on configurator category:\n     * _onEditLineConfiguration : line configurators\n     * _onEditProductConfiguration : product configurators\n     *\n     * @private\n     */\n    _onEditConfiguration: function () {\n        if (this._isConfigurableLine()) {\n            this._onEditLineConfiguration();\n        } else if (this._isConfigurableProduct()) {\n            this._onEditProductConfiguration();\n        }\n    },\n\n    /**\n     * Hook for line configurators (rental, event)\n     * on line edition (pencil icon inside product field)\n     */\n    _onEditLineConfiguration: function () {\n\n    },\n\n    /**\n     * Hook for product configurators (matrix, product)\n     * on line edition (pencil icon inside product field)\n     */\n    _onEditProductConfiguration: function () {\n\n    },\n\n    /**\n     * Utilities for recordData conversion\n     */\n\n    /**\n     * Will convert the values contained in the recordData parameter to\n     * a list of '4' operations that can be passed as a 'default_' parameter.\n     *\n     * @param {Object} recordData\n     *\n     * @private\n     */\n    _convertFromMany2Many: function (recordData) {\n        if (recordData) {\n            var convertedValues = [];\n            _.each(recordData.res_ids, function (resId) {\n                convertedValues.push([4, parseInt(resId)]);\n            });\n\n            return convertedValues;\n        }\n\n        return null;\n    },\n\n    /**\n     * Will convert the values contained in the recordData parameter to\n     * a list of '0' or '4' operations (based on wether the record is already persisted or not)\n     * that can be passed as a 'default_' parameter.\n     *\n     * @param {Object} recordData\n     *\n     * @private\n     */\n    _convertFromOne2Many: function (recordData) {\n        if (recordData) {\n            var convertedValues = [];\n            _.each(recordData.res_ids, function (resId) {\n                if (isNaN(resId)) {\n                    _.each(recordData.data, function (record) {\n                        if (record.ref === resId) {\n                            convertedValues.push([0, 0, {\n                                custom_product_template_attribute_value_id: record.data.custom_product_template_attribute_value_id.data.id,\n                                custom_value: record.data.custom_value\n                            }]);\n                        }\n                    });\n                } else {\n                    convertedValues.push([4, resId]);\n                }\n            });\n\n            return convertedValues;\n        }\n\n        return null;\n    }\n});\n\nFieldsRegistry.add('product_configurator', ProductConfiguratorWidget);\n\nreturn ProductConfiguratorWidget;\n\n});\n", "odoo.define('sale.SaleOrderView', function (require) {\n    \"use strict\";\n\n    const FormController = require('web.FormController');\n    const FormView = require('web.FormView');\n    const viewRegistry = require('web.view_registry');\n    const Dialog = require('web.Dialog');\n    const core = require('web.core');\n    const _t = core._t;\n\n    const SaleOrderFormController = FormController.extend({\n        custom_events: _.extend({}, FormController.prototype.custom_events, {\n            open_discount_wizard: '_onOpenDiscountWizard',\n        }),\n\n        // -------------------------------------------------------------------------\n        // Handlers\n        // -------------------------------------------------------------------------\n\n        /**\n         * Handler called if user changes the discount field in the sale order line.\n         * The wizard will open only if\n         *  (1) Sale order line is 3 or more\n         *  (2) First sale order line is changed to discount\n         *  (3) Discount is the same in all sale order line\n         */\n        _onOpenDiscountWizard(ev) {\n            const orderLines = this.renderer.state.data.order_line.data.filter(line => !line.data.display_type);\n            const recordData = ev.target.recordData;\n            if (recordData.discount === orderLines[0].data.discount) return;\n            const isEqualDiscount = orderLines.slice(1).every(line => line.data.discount === recordData.discount);\n            if (orderLines.length >= 3 && recordData.sequence === orderLines[0].data.sequence && isEqualDiscount) {\n                Dialog.confirm(this, _t(\"Do you want to apply this discount to all order lines?\"), {\n                    confirm_callback: () => {\n                        orderLines.slice(1).forEach((line) => {\n                            this.trigger_up('field_changed', {\n                                dataPointID: this.renderer.state.id,\n                                changes: {order_line: {operation: \"UPDATE\", id: line.id, data: {discount: orderLines[0].data.discount}}},\n                            });\n                        });\n                    },\n                });\n            }\n        },\n    });\n\n    const SaleOrderView = FormView.extend({\n        config: _.extend({}, FormView.prototype.config, {\n            Controller: SaleOrderFormController,\n        }),\n    });\n\n    viewRegistry.add('sale_discount_form', SaleOrderView);\n\n    return SaleOrderView;\n\n});\n", "odoo.define('sale.product_discount', function (require) {\n    \"use strict\";\n\n    const BasicFields = require('web.basic_fields');\n    const FieldsRegistry = require('web.field_registry');\n\n    /**\n     * The sale.product_discount widget is a simple widget extending FieldFloat\n     *\n     *\n     * !!! WARNING !!!\n     *\n     * This widget is only designed for sale_order_line creation/updates.\n     * !!! It should only be used on a discount field !!!\n     */\n    const ProductDiscountWidget = BasicFields.FieldFloat.extend({\n\n        /**\n         * Override changes at a discount.\n         *\n         * @override\n         * @param {OdooEvent} ev\n         *\n         */\n        async reset(record, ev) {\n            if (ev && ev.data.changes && ev.data.changes.discount >= 0) {\n               this.trigger_up('open_discount_wizard');\n            }\n            this._super(...arguments);\n        },\n    });\n\n    FieldsRegistry.add('product_discount', ProductDiscountWidget);\n\n    return ProductDiscountWidget;\n\n});\n", "odoo.define('barcodes.BarcodeEvents', function(require) {\n\"use strict\";\n\nvar config = require('web.config');\nvar core = require('web.core');\nvar mixins = require('web.mixins');\nvar session = require('web.session');\n\n\n// For IE >= 9, use this, new CustomEvent(), instead of new Event()\nfunction CustomEvent ( event, params ) {\n    params = params || { bubbles: false, cancelable: false, detail: undefined };\n    var evt = document.createEvent( 'CustomEvent' );\n    evt.initCustomEvent( event, params.bubbles, params.cancelable, params.detail );\n    return evt;\n   }\nCustomEvent.prototype = window.Event.prototype;\n\nvar BarcodeEvents = core.Class.extend(mixins.PropertiesMixin, {\n    timeout: null,\n    key_pressed: {},\n    buffered_key_events: [],\n    // Regexp to match a barcode input and extract its payload\n    // Note: to build in init() if prefix/suffix can be configured\n    regexp: /(.{3,})[\\n\\r\\t]*/,\n    // By knowing the terminal character we can interpret buffered keys\n    // as a barcode as soon as it's encountered (instead of waiting x ms)\n    suffix: /[\\n\\r\\t]+/,\n    // Keys from a barcode scanner are usually processed as quick as possible,\n    // but some scanners can use an intercharacter delay (we support <= 50 ms)\n    max_time_between_keys_in_ms: session.max_time_between_keys_in_ms || 100,\n    // To be able to receive the barcode value, an input must be focused.\n    // On mobile devices, this causes the virtual keyboard to open.\n    // Unfortunately it is not possible to avoid this behavior...\n    // To avoid keyboard flickering at each detection of a barcode value,\n    // we want to keep it open for a while (800 ms).\n    inputTimeOut: 800,\n\n    init: function() {\n        mixins.PropertiesMixin.init.call(this);\n        // Keep a reference of the handler functions to use when adding and removing event listeners\n        this.__keydown_handler = _.bind(this.keydown_handler, this);\n        this.__keyup_handler = _.bind(this.keyup_handler, this);\n        this.__handler = _.bind(this.handler, this);\n        // Bind event handler once the DOM is loaded\n        // TODO: find a way to be active only when there are listeners on the bus\n        $(_.bind(this.start, this, false));\n\n        // Mobile device detection\n        this.isChromeMobile = config.device.isMobileDevice && navigator.userAgent.match(/Chrome/i);\n\n        // Creates an input who will receive the barcode scanner value.\n        this.$barcodeInput = $('<input/>', {\n            name: 'barcode',\n            type: 'text',\n            css: {\n                'position': 'fixed',\n                'top': '50%',\n                'transform': 'translateY(-50%)',\n                'z-index': '-1',\n                'opacity': '0',\n            },\n        });\n        // Avoid to show autocomplete for a non appearing input\n        this.$barcodeInput.attr('autocomplete', 'off');\n\n        this.__blurBarcodeInput = _.debounce(this._blurBarcodeInput, this.inputTimeOut);\n    },\n\n    handle_buffered_keys: function() {\n        var str = this.buffered_key_events.reduce(function(memo, e) { return memo + String.fromCharCode(e.which) }, '');\n        var match = str.match(this.regexp);\n\n        if (match) {\n            var barcode = match[1];\n\n            // Send the target in case there are several barcode widgets on the same page (e.g.\n            // registering the lot numbers in a stock picking)\n            core.bus.trigger('barcode_scanned', barcode, this.buffered_key_events[0].target);\n\n            // Dispatch a barcode_scanned DOM event to elements that have barcode_events=\"true\" set.\n            if (this.buffered_key_events[0].target.getAttribute(\"barcode_events\") === \"true\")\n                $(this.buffered_key_events[0].target).trigger('barcode_scanned', barcode);\n        } else {\n            this.resend_buffered_keys();\n        }\n\n        this.buffered_key_events = [];\n    },\n\n    resend_buffered_keys: function() {\n        var old_event, new_event;\n        for(var i = 0; i < this.buffered_key_events.length; i++) {\n            old_event = this.buffered_key_events[i];\n\n            if(old_event.which !== 13) { // ignore returns\n                // We do not create a 'real' keypress event through\n                // eg. KeyboardEvent because there are several issues\n                // with them that make them very different from\n                // genuine keypresses. Chrome per example has had a\n                // bug for the longest time that causes keyCode and\n                // charCode to not be set for events created this way:\n                // https://bugs.webkit.org/show_bug.cgi?id=16735\n                var params = {\n                    'bubbles': old_event.bubbles,\n                    'cancelable': old_event.cancelable,\n                };\n                new_event = $.Event('keypress', params);\n                new_event.viewArg = old_event.viewArg;\n                new_event.ctrl = old_event.ctrl;\n                new_event.alt = old_event.alt;\n                new_event.shift = old_event.shift;\n                new_event.meta = old_event.meta;\n                new_event.char = old_event.char;\n                new_event.key = old_event.key;\n                new_event.charCode = old_event.charCode;\n                new_event.keyCode = old_event.keyCode || old_event.which; // Firefox doesn't set keyCode for keypresses, only keyup/down\n                new_event.which = old_event.which;\n                new_event.dispatched_by_barcode_reader = true;\n\n                $(old_event.target).trigger(new_event);\n            }\n        }\n    },\n\n    element_is_editable: function(element) {\n        return $(element).is('input,textarea,[contenteditable=\"true\"]');\n    },\n\n    // This checks that a keypress event is either ESC, TAB, an arrow\n    // key or a function key. This is Firefox specific, in Chrom{e,ium}\n    // keypress events are not fired for these types of keys, only\n    // keyup/keydown.\n    is_special_key: function(e) {\n        if (e.key === \"ArrowLeft\" || e.key === \"ArrowRight\" ||\n            e.key === \"ArrowUp\" || e.key === \"ArrowDown\" ||\n            e.key === \"Escape\" || e.key === \"Tab\" ||\n            e.key === \"Backspace\" || e.key === \"Delete\" ||\n            e.key === \"Home\" || e.key === \"End\" ||\n            e.key === \"PageUp\" || e.key === \"PageDown\" ||\n            e.key === \"Unidentified\" || /F\\d\\d?/.test(e.key)) {\n            return true;\n        } else {\n            return false;\n        }\n    },\n\n    // The keydown and keyup handlers are here to disallow key\n    // repeat. When preventDefault() is called on a keydown event\n    // the keypress that normally follows is cancelled.\n    keydown_handler: function(e){\n        if (this.key_pressed[e.which]) {\n            e.preventDefault();\n        } else {\n            this.key_pressed[e.which] = true;\n        }\n    },\n\n    keyup_handler: function(e){\n        this.key_pressed[e.which] = false;\n    },\n\n    handler: function(e){\n        // Don't catch events we resent\n        if (e.dispatched_by_barcode_reader)\n            return;\n        // Don't catch non-printable keys for which Firefox triggers a keypress\n        if (this.is_special_key(e))\n            return;\n        // Don't catch keypresses which could have a UX purpose (like shortcuts)\n        if (e.ctrlKey || e.metaKey || e.altKey)\n            return;\n        // Don't catch Return when nothing is buffered. This way users\n        // can still use Return to 'click' on focused buttons or links.\n        if (e.which === 13 && this.buffered_key_events.length === 0)\n            return;\n        // Don't catch events targeting elements that are editable because we\n        // have no way of redispatching 'genuine' key events. Resent events\n        // don't trigger native event handlers of elements. So this means that\n        // our fake events will not appear in eg. an <input> element.\n        if ((this.element_is_editable(e.target) && !$(e.target).data('enableBarcode')) && e.target.getAttribute(\"barcode_events\") !== \"true\")\n            return;\n\n        // Catch and buffer the event\n        this.buffered_key_events.push(e);\n        e.preventDefault();\n        e.stopImmediatePropagation();\n\n        // Handle buffered keys immediately if the keypress marks the end\n        // of a barcode or after x milliseconds without a new keypress\n        clearTimeout(this.timeout);\n        if (String.fromCharCode(e.which).match(this.suffix)) {\n            this.handle_buffered_keys();\n        } else {\n            this.timeout = setTimeout(_.bind(this.handle_buffered_keys, this), this.max_time_between_keys_in_ms);\n        }\n    },\n\n    /**\n     * Try to detect the barcode value by listening all keydown events:\n     * Checks if a dom element who may contains text value has the focus.\n     * If not, it's probably because these events are triggered by a barcode scanner.\n     * To be able to handle this value, a focused input will be created.\n     *\n     * This function also has the responsibility to detect the end of the barcode value.\n     * (1) In most of cases, an optional key (tab or enter) is sent to mark the end of the value.\n     * So, we direclty handle the value.\n     * (2) If no end key is configured, we have to calculate the delay between each keydowns.\n     * 'max_time_between_keys_in_ms' depends of the device and may be configured.\n     * Exceeded this timeout, we consider that the barcode value is entirely sent.\n     *\n     * @private\n     * @param  {jQuery.Event} e keydown event\n     */\n    _listenBarcodeScanner: function (e) {\n        if ($(document.activeElement).not('input:text, textarea, [contenteditable], ' +\n            '[type=\"email\"], [type=\"number\"], [type=\"password\"], [type=\"tel\"], [type=\"search\"]').length) {\n            $('body').append(this.$barcodeInput);\n            this.$barcodeInput.focus();\n        }\n        if (this.$barcodeInput.is(\":focus\")) {\n            // Handle buffered keys immediately if the keypress marks the end\n            // of a barcode or after x milliseconds without a new keypress.\n            clearTimeout(this.timeout);\n            // On chrome mobile, e.which only works for some special characters like ENTER or TAB.\n            if (String.fromCharCode(e.which).match(this.suffix)) {\n                this._handleBarcodeValue(e);\n            } else {\n                this.timeout = setTimeout(this._handleBarcodeValue.bind(this, e),\n                    this.max_time_between_keys_in_ms);\n            }\n            // if the barcode input doesn't receive keydown for a while, remove it.\n            this.__blurBarcodeInput();\n        }\n    },\n\n    /**\n     * Retrieves the barcode value from the temporary input element.\n     * This checks this value and trigger it on the bus.\n     *\n     * @private\n     * @param  {jQuery.Event} keydown event\n     */\n    _handleBarcodeValue: function (e) {\n        var barcodeValue = this.$barcodeInput.val();\n        if (barcodeValue.match(this.regexp)) {\n            core.bus.trigger('barcode_scanned', barcodeValue, $(e.target).parent()[0]);\n            this._blurBarcodeInput();\n        }\n    },\n\n    /**\n     * Removes the value and focus from the barcode input.\n     * If nothing happens, the focus will be lost and\n     * the virtual keyboard on mobile devices will be closed.\n     *\n     * @private\n     */\n    _blurBarcodeInput: function () {\n        // Close the virtual keyboard on mobile browsers\n        // FIXME: actually we can't prevent keyboard from opening\n        this.$barcodeInput.val('').blur();\n    },\n\n    start: function(prevent_key_repeat){\n        // Chrome Mobile isn't triggering keypress event.\n        // This is marked as Legacy in the DOM-Level-3 Standard.\n        // See: https://www.w3.org/TR/uievents/#legacy-keyboardevent-event-types\n        // This fix is only applied for Google Chrome Mobile but it should work for\n        // all other cases.\n        // In master, we could remove the behavior with keypress and only use keydown.\n        if (this.isChromeMobile) {\n            $('body').on(\"keydown\", this._listenBarcodeScanner.bind(this));\n        } else {\n            $('body').bind(\"keypress\", this.__handler);\n        }\n        if (prevent_key_repeat === true) {\n            $('body').bind(\"keydown\", this.__keydown_handler);\n            $('body').bind('keyup', this.__keyup_handler);\n        }\n    },\n\n    stop: function(){\n        $('body').off(\"keypress\", this.__handler);\n        $('body').off(\"keydown\", this.__keydown_handler);\n        $('body').off('keyup', this.__keyup_handler);\n    },\n});\n\nreturn {\n    /** Singleton that emits barcode_scanned events on core.bus */\n    BarcodeEvents: new BarcodeEvents(),\n    /**\n     * List of barcode prefixes that are reserved for internal purposes\n     * @type Array\n     */\n    ReservedBarcodePrefixes: ['O-CMD'],\n};\n\n});\n", "odoo.define('barcodes.field', function(require) {\n\"use strict\";\n\nvar AbstractField = require('web.AbstractField');\nvar basicFields = require('web.basic_fields');\nvar fieldRegistry = require('web.field_registry');\nvar BarcodeEvents = require('barcodes.BarcodeEvents').BarcodeEvents;\n\n// Field in which the user can both type normally and scan barcodes\n\nvar FieldFloatScannable = basicFields.FieldFloat.extend({\n    events: _.extend({}, basicFields.FieldFloat.prototype.events, {\n        // The barcode_events component intercepts keypresses and releases them when it\n        // appears they are not part of a barcode. But since released keypresses don't\n        // trigger native behaviour (like characters input), we must simulate it.\n        keypress: '_onKeypress',\n    }),\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     * @private\n     */\n    _renderEdit: function () {\n        var self = this;\n        return Promise.resolve(this._super()).then(function () {\n            self.$input.data('enableBarcode', true);\n        });\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {KeyboardEvent} e\n     */\n    _onKeypress: function (e) {\n        /* only simulate a keypress if it has been previously prevented */\n        if (e.dispatched_by_barcode_reader !== true) {\n            if (!BarcodeEvents.is_special_key(e)) {\n                e.preventDefault();\n            }\n            return;\n        }\n        var character = String.fromCharCode(e.which);\n        var current_str = e.target.value;\n        var str_before_carret = current_str.substring(0, e.target.selectionStart);\n        var str_after_carret = current_str.substring(e.target.selectionEnd);\n        e.target.value = str_before_carret + character + str_after_carret;\n        var new_carret_index = str_before_carret.length + character.length;\n        e.target.setSelectionRange(new_carret_index, new_carret_index);\n        // trigger an 'input' event to notify the widget that it's value changed\n        $(e.target).trigger('input');\n    },\n});\n\n// Field to use scan barcodes\nvar FormViewBarcodeHandler = AbstractField.extend({\n    /**\n     * @override\n     */\n    init: function() {\n        this._super.apply(this, arguments);\n\n        this.trigger_up('activeBarcode', {\n            name: this.name,\n            commands: {\n                barcode: '_barcodeAddX2MQuantity',\n            }\n        });\n    },\n});\n\nfieldRegistry.add('field_float_scannable', FieldFloatScannable);\nfieldRegistry.add('barcode_handler', FormViewBarcodeHandler);\n\nreturn {\n    FieldFloatScannable: FieldFloatScannable,\n    FormViewBarcodeHandler: FormViewBarcodeHandler,\n};\n\n});\n", "odoo.define('barcodes.FormView', function (require) {\n\"use strict\";\n\nvar BarcodeEvents = require('barcodes.BarcodeEvents'); // handle to trigger barcode on bus\nvar concurrency = require('web.concurrency');\nvar core = require('web.core');\nvar Dialog = require('web.Dialog');\nvar FormController = require('web.FormController');\nvar FormRenderer = require('web.FormRenderer');\n\nvar _t = core._t;\n\n\nFormController.include({\n    custom_events: _.extend({}, FormController.prototype.custom_events, {\n        activeBarcode: '_barcodeActivated',\n    }),\n\n    /**\n     * add default barcode commands for from view\n     *\n     * @override\n     */\n    init: function () {\n        this._super.apply(this, arguments);\n        this.activeBarcode = {\n            form_view: {\n                commands: {\n                    'O-CMD.EDIT': this._barcodeEdit.bind(this),\n                    'O-CMD.DISCARD': this._barcodeDiscard.bind(this),\n                    'O-CMD.SAVE': this._barcodeSave.bind(this),\n                    'O-CMD.PREV': this._barcodePagerPrevious.bind(this),\n                    'O-CMD.NEXT': this._barcodePagerNext.bind(this),\n                    'O-CMD.PAGER-FIRST': this._barcodePagerFirst.bind(this),\n                    'O-CMD.PAGER-LAST': this._barcodePagerLast.bind(this),\n                },\n            },\n        };\n\n        this.barcodeMutex = new concurrency.Mutex();\n        this._barcodeStartListening();\n    },\n    /**\n     * @override\n     */\n    destroy: function () {\n        this._barcodeStopListening();\n        this._super();\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {string} barcode sent by the scanner (string generate from keypress series)\n     * @param {Object} activeBarcode: options sent by the field who use barcode features\n     * @returns {Promise}\n     */\n    _barcodeAddX2MQuantity: function (barcode, activeBarcode) {\n        if (this.mode === 'readonly') {\n            this.displayNotification({ message: _t('Enable edit mode to modify this document'), type: 'danger' });\n            return Promise.reject();\n        }\n\n        var record = this.model.get(this.handle);\n        var candidate = this._getBarCodeRecord(record, barcode, activeBarcode);\n        if (candidate) {\n            return this._barcodeSelectedCandidate(candidate, record, barcode, activeBarcode);\n        } else {\n            return this._barcodeWithoutCandidate(record, barcode, activeBarcode);\n        }\n    },\n    /**\n     * @private\n     */\n    _barcodeDiscard: function () {\n        return this.discardChanges();\n    },\n    /**\n     * @private\n     */\n    _barcodeEdit: function () {\n        return this._setMode('edit');\n    },\n    /**\n     * @private\n     */\n    _barcodePagerFirst: async function () {\n        return this._updatePage(() => 1);\n    },\n    /**\n     * @private\n     */\n    _barcodePagerLast: async function () {\n        return this._updatePage((min, state) => state.count);\n    },\n    /**\n     * @private\n     */\n    _barcodePagerNext: function () {\n        return this._updatePage((min, state) => {\n            min += 1;\n            if (min > state.count) {\n                min = 1;\n            }\n            return min;\n        });\n    },\n    /**\n     * @private\n     */\n    _barcodePagerPrevious: function () {\n        return this._updatePage((min, state) => {\n            min -= 1;\n            if (min < 1) {\n                min = state.count;\n            }\n            return min;\n        });\n    },\n    /**\n     * Change the current minimum value of the pager using provided function.\n     * This function will be given the current minimum and state and must return\n     * the updated value.\n     *\n     * @private\n     * @param {Function(currentMin: Number, state: Object)} updater\n     */\n    _updatePage: async function (updater) {\n        await this.mutex.exec(() => {});\n        const state = this.model.get(this.handle, { raw: true });\n        const pagingInfo = this._getPagingInfo(state);\n        if (!pagingInfo) {\n            return this.displayNotification({ message: _t('Pager unavailable'), type: 'danger' });\n        }\n        const currentMinimum = updater(pagingInfo.currentMinimum, state);\n        const limit = pagingInfo.limit;\n        const reloadParams = state.groupedBy && state.groupedBy.length ? {\n                groupsLimit: limit,\n                groupsOffset: currentMinimum - 1,\n            } : {\n                limit,\n                offset: currentMinimum - 1,\n            };\n        await this.reload(reloadParams);\n        // reset the scroll position to the top on page changed only\n        if (state.limit === limit) {\n            this.trigger_up('scrollTo', { top: 0 });\n        }\n    },\n    /**\n     * Returns true iff the given barcode matches the given record (candidate).\n     *\n     * @private\n     * @param {Object} candidate: record in the x2m\n     * @param {string} barcode sent by the scanner (string generate from keypress series)\n     * @param {Object} activeBarcode: options sent by the field who use barcode features\n     * @returns {boolean}\n     */\n    _barcodeRecordFilter: function (candidate, barcode, activeBarcode) {\n        return candidate.data.product_barcode === barcode;\n    },\n    /**\n     * @private\n     */\n    _barcodeSave: function () {\n        return this.saveRecord();\n    },\n    /**\n     * @private\n     * @param {Object} candidate: record in the x2m\n     * @param {Object} current record\n     * @param {string} barcode sent by the scanner (string generate from keypress series)\n     * @param {Object} activeBarcode: options sent by the field who use barcode features\n     * @returns {Promise}\n     */\n    _barcodeSelectedCandidate: function (candidate, record, barcode, activeBarcode, quantity) {\n        var changes = {};\n        var candidateChanges = {};\n        candidateChanges[activeBarcode.quantity] = quantity ? quantity : candidate.data[activeBarcode.quantity] + 1;\n        changes[activeBarcode.fieldName] = {\n            operation: 'UPDATE',\n            id: candidate.id,\n            data: candidateChanges,\n        };\n        return this.model.notifyChanges(this.handle, changes, {notifyChange: activeBarcode.notifyChange});\n    },\n    /**\n     * @private\n     */\n    _barcodeStartListening: function () {\n        core.bus.on('barcode_scanned', this, this._barcodeScanned);\n        core.bus.on('keypress', this, this._quantityListener);\n    },\n    /**\n     * @private\n     */\n    _barcodeStopListening: function () {\n        core.bus.off('barcode_scanned', this, this._barcodeScanned);\n        core.bus.off('keypress', this, this._quantityListener);\n    },\n    /**\n     * @private\n     * @param {Object} current record\n     * @param {string} barcode sent by the scanner (string generate from keypress series)\n     * @param {Object} activeBarcode: options sent by the field who use barcode features\n     * @returns {Promise}\n     */\n    _barcodeWithoutCandidate: function (record, barcode, activeBarcode) {\n        var changes = {};\n        changes[activeBarcode.name] = barcode;\n        return this.model.notifyChanges(record.id, changes);\n    },\n    /**\n     * @private\n     * @param {Object} current record\n     * @param {string} barcode sent by the scanner (string generate from keypress series)\n     * @param {Object} activeBarcode: options sent by the field who use barcode features\n     * @returns {Object|undefined}\n     */\n    _getBarCodeRecord: function (record, barcode, activeBarcode) {\n        var self = this;\n        if (!activeBarcode.fieldName || !record.data[activeBarcode.fieldName]) {\n            return;\n        }\n        return _.find(record.data[activeBarcode.fieldName].data, function (record) {\n            return self._barcodeRecordFilter(record, barcode, activeBarcode);\n        });\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * The barcode is activate when at least one widget trigger_up 'activeBarcode' event\n     * with the widget option\n     *\n     * @param {OdooEvent} event\n     * @param {string} event.data.name: the current field name\n     * @param {string} [event.data.fieldName] optional for x2many sub field\n     * @param {boolean} [event.data.notifyChange] optional for x2many sub field\n     *     do not trigger on change server side if a candidate has been found\n     * @param {string} [event.data.quantity] optional field to increase quantity\n     * @param {Object} [event.data.commands] optional added methods\n     *     can use comand with specific barcode (with ReservedBarcodePrefixes)\n     *     or change 'barcode' for all other received barcodes\n     *     (e.g.: 'O-CMD.MAIN-MENU': function ..., barcode: function () {...})\n     */\n    _barcodeActivated: function (event) {\n        event.stopPropagation();\n        var name = event.data.name;\n        this.activeBarcode[name] = {\n            name: name,\n            handle: this.handle,\n            target: event.target,\n            widget: event.target.attrs && event.target.attrs.widget,\n            setQuantityWithKeypress: !! event.data.setQuantityWithKeypress,\n            fieldName: event.data.fieldName,\n            notifyChange: (event.data.notifyChange !== undefined) ? event.data.notifyChange : true,\n            quantity: event.data.quantity,\n            commands: event.data.commands || {},\n            candidate: this.activeBarcode[name] && this.activeBarcode[name].handle === this.handle ?\n                this.activeBarcode[name].candidate : null,\n        };\n\n        // we want to disable autofocus when activating the barcode to avoid\n        // putting the scanned value in the focused field\n        this.disableAutofocus = true;\n    },\n    /**\n     * @private\n     * @param {string|function} method defined by the commands options\n     * @param {string} barcode sent by the scanner (string generate from keypress series)\n     * @param {Object} activeBarcode: options sent by the field who use barcode features\n     * @returns {Promise}\n     */\n    _barcodeActiveScanned: function (method, barcode, activeBarcode) {\n        var self = this;\n        var methodDef;\n        var def = new Promise(function (resolve, reject) {\n            if (typeof method === 'string') {\n                methodDef = self[method](barcode, activeBarcode);\n            } else {\n                methodDef = method.call(self, barcode, activeBarcode);\n            }\n            methodDef\n                .then(function () {\n                    var record = self.model.get(self.handle);\n                    var candidate = self._getBarCodeRecord(record, barcode, activeBarcode);\n                    activeBarcode.candidate = candidate;\n                })\n                .then(resolve, resolve);\n        });\n        return def;\n    },\n    /**\n     * Method called when a user scan a barcode, call each method in function of the\n     * widget options then update the renderer\n     *\n     * @private\n     * @param {string} barcode sent by the scanner (string generate from keypress series)\n     * @param {DOM Object} target\n     * @returns {Promise}\n     */\n    _barcodeScanned: function (barcode, target) {\n        var self = this;\n        return this.barcodeMutex.exec(function () {\n            var prefixed = _.any(BarcodeEvents.ReservedBarcodePrefixes,\n                    function (reserved) {return barcode.indexOf(reserved) === 0;});\n            var hasCommand = false;\n            var defs = [];\n            if (! $.contains(target, self.el)) {\n                return;\n            }\n            for (var k in self.activeBarcode) {\n                var activeBarcode = self.activeBarcode[k];\n                // Handle the case where there are several barcode widgets on the same page. Since the\n                // event is global on the page, all barcode widgets will be triggered. However, we only\n                // want to keep the event on the target widget.\n                var methods = self.activeBarcode[k].commands;\n                var method = prefixed ? methods[barcode] : methods.barcode;\n                if (method) {\n                    if (prefixed) {\n                        hasCommand = true;\n                    }\n                    defs.push(self._barcodeActiveScanned(method, barcode, activeBarcode));\n                }\n            }\n            if (prefixed && !hasCommand) {\n                self.displayNotification({ title: _t('Undefined barcode command'), message: barcode, type: 'danger' });\n            }\n            return self.alive(Promise.all(defs)).then(function () {\n                if (!prefixed) {\n                    // remember the barcode scanned for the quantity listener\n                    self.current_barcode = barcode;\n                    // redraw the view if we scanned a real barcode (required if\n                    // we manually apply the change in JS, e.g. incrementing the\n                    // quantity)\n                    self.update({}, {reload: false});\n                }\n            });\n        });\n    },\n    /**\n     * @private\n     * @param {KeyEvent} event\n     */\n    _quantityListener: function (event) {\n        var character = String.fromCharCode(event.which);\n\n        if (! $.contains(event.target, this.el)) {\n            return;\n        }\n        // only catch the event if we're not focused in\n        // another field and it's a number\n        if (!$(event.target).is('body, .modal') || !/[0-9]/.test(character)) {\n            return;\n        }\n\n        var barcodeInfos = _.filter(this.activeBarcode, 'setQuantityWithKeypress');\n        if (!barcodeInfos.length) {\n            return;\n        }\n\n        if (!_.compact(_.pluck(barcodeInfos, 'candidate')).length) {\n            return this.displayNotification({ message: _t('Scan a barcode to set the quantity'), type: 'danger' });\n        }\n\n        for (var k in this.activeBarcode) {\n            if (this.activeBarcode[k].candidate) {\n                this._quantityOpenDialog(character, this.activeBarcode[k]);\n            }\n        }\n    },\n    /**\n     * @private\n     * @param {string} character\n     * @param {Object} activeBarcode: options sent by the field who use barcode features\n     */\n    _quantityOpenDialog: function (character, activeBarcode) {\n        var self = this;\n        var $content = $('<div>').append($('<input>', {type: 'text', class: 'o_set_qty_input'}));\n        this.dialog = new Dialog(this, {\n            title: _t('Set quantity'),\n            buttons: [{text: _t('Select'), classes: 'btn-primary', close: true, click: function () {\n                var new_qty = this.$content.find('.o_set_qty_input').val();\n                var record = self.model.get(self.handle);\n                return self._barcodeSelectedCandidate(activeBarcode.candidate, record,\n                        self.current_barcode, activeBarcode, parseFloat(new_qty))\n                .then(function () {\n                    self.update({}, {reload: false});\n                });\n            }}, {text: _t('Discard'), close: true}],\n            $content: $content,\n        });\n        this.dialog.opened().then(function () {\n            // This line set the value of the key which triggered the _set_quantity in the input\n            var $input = self.dialog.$('.o_set_qty_input').focus().val(character);\n            var $selectBtn = self.dialog.$footer.find('.btn-primary');\n            $input.on('keypress', function (event){\n                if (event.which === 13) {\n                    event.preventDefault();\n                    $input.off();\n                    $selectBtn.click();\n                }\n            });\n        });\n        this.dialog.open();\n    },\n});\n\n\nFormRenderer.include({\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n    /**\n     * trigger_up 'activeBarcode' to Add barcode event handler\n     *\n     * @private\n     * @param {jQueryElement} $button\n     * @param {Object} node\n     */\n    _barcodeButtonHandler: function ($button, node) {\n        var commands = {};\n        commands.barcode = function () {return Promise.resolve();};\n        commands['O-BTN.' + node.attrs.barcode_trigger] = function () {\n            if (!$button.hasClass('o_invisible_modifier')) {\n                $button.click();\n            }\n            return Promise.resolve();\n        };\n        var name = node.attrs.name;\n        if (node.attrs.string) {\n            name = JSON.stringify(node.attrs);\n        }\n\n        this.trigger_up('activeBarcode', {\n            name: name,\n            commands: commands\n        });\n    },\n    /**\n     * Add barcode event handler\n     *\n     * @override\n     * @private\n     * @param {Object} node\n     * @returns {jQueryElement}\n     */\n    _renderHeaderButton: function (node) {\n        var $button = this._super.apply(this, arguments);\n        if (node.attrs.barcode_trigger) {\n            this._barcodeButtonHandler($button, node);\n        }\n        return $button;\n    },\n    /**\n     * Add barcode event handler\n     *\n     * @override\n     * @private\n     * @param {Object} node\n     * @returns {jQueryElement}\n     */\n    _renderStatButton: function (node) {\n        var $button = this._super.apply(this, arguments);\n        if (node.attrs.barcode_trigger) {\n            this._barcodeButtonHandler($button, node);\n        }\n        return $button;\n    },\n    /**\n     * Add barcode event handler\n     *\n     * @override\n     * @private\n     * @param {Object} node\n     * @returns {jQueryElement}\n     */\n    _renderTagButton: function (node) {\n        var $button = this._super.apply(this, arguments);\n        if (node.attrs.barcode_trigger) {\n            this._barcodeButtonHandler($button, node);\n        }\n        return $button;\n    }\n});\n\nBarcodeEvents.ReservedBarcodePrefixes.push('O-BTN');\n\n});\n", "odoo.define('barcodes.BarcodeParser', function (require) {\n\"use strict\";\n\nvar Class = require('web.Class');\nvar rpc = require('web.rpc');\n\n// The BarcodeParser is used to detect what is the category\n// of a barcode (product, partner, ...) and extract an encoded value\n// (like weight, price, etc.)\nvar BarcodeParser = Class.extend({\n    init: function(attributes) {\n        this.nomenclature_id = attributes.nomenclature_id;\n        this.nomenclature = attributes.nomenclature;\n        this.loaded = this.load();\n    },\n\n    // This loads the barcode nomenclature and barcode rules which are\n    // necessary to parse the barcodes. The BarcodeParser is operational\n    // only when those data have been loaded\n    load: function(){\n        if (!this.nomenclature_id) {\n            return this.nomenclature ? Promise.resolve() : Promise.reject();\n        }\n        var id = this.nomenclature_id[0];\n        return rpc.query({\n                model: 'barcode.nomenclature',\n                method: 'read',\n                args: [[id], this._barcodeNomenclatureFields()],\n            }).then(nomenclatures => {\n                this.nomenclature = nomenclatures[0];\n                var args = [\n                    [['barcode_nomenclature_id', '=', this.nomenclature.id]],\n                    this._barcodeRuleFields(),\n                ];\n                return rpc.query({\n                    model: 'barcode.rule',\n                    method: 'search_read',\n                    args: args,\n                });\n            }).then(rules => {\n                rules = rules.sort(function(a, b){ return a.sequence - b.sequence; });\n                this.nomenclature.rules = rules;\n            });\n    },\n\n    // resolves when the barcode parser is operational.\n    is_loaded: function() {\n        return this.loaded;\n    },\n\n    /**\n     * This algorithm is identical for all fixed length numeric GS1 data structures.\n     *\n     * It is also valid for EAN-8, EAN-12 (UPC-A), EAN-13 check digit after sanitizing.\n     * https://www.gs1.org/sites/default/files/docs/barcodes/GS1_General_Specifications.pdf\n     *\n     * @param {String} numericBarcode Need to have a length of 18\n     * @returns {number} Check Digit\n     */\n    get_barcode_check_digit(numericBarcode) {\n        let oddsum = 0, evensum = 0, total = 0;\n        // Reverses the barcode to be sure each digit will be in the right place\n        // regardless the barcode length.\n        const code = numericBarcode.split('').reverse();\n        // Removes the last barcode digit (should not be took in account for its own computing).\n        code.shift();\n\n        // Multiply value of each position by\n        // N1  N2  N3  N4  N5  N6  N7  N8  N9  N10 N11 N12 N13 N14 N15 N16 N17 N18\n        // x3  X1  x3  x1  x3  x1  x3  x1  x3  x1  x3  x1  x3  x1  x3  x1  x3  CHECK_DIGIT\n        for (let i = 0; i < code.length; i++) {\n            if (i % 2 === 0) {\n                evensum += parseInt(code[i]);\n            } else {\n                oddsum += parseInt(code[i]);\n            }\n        }\n        total = evensum * 3 + oddsum;\n        return (10 - total % 10) % 10;\n    },\n\n    /**\n     * Checks if the barcode string is encoded with the provided encoding.\n     *\n     * @param {String} barcode\n     * @param {String} encoding could be 'any' (no encoding rules), 'ean8', 'upca' or 'ean13'\n     * @returns {boolean}\n     */\n    check_encoding: function(barcode, encoding) {\n        if (encoding === 'any') {\n            return true;\n        }\n        const barcodeSizes = {\n            ean8: 8,\n            ean13: 13,\n            upca: 12,\n        };\n        return barcode.length === barcodeSizes[encoding] && /^\\d+$/.test(barcode) &&\n            this.get_barcode_check_digit(barcode) === parseInt(barcode[barcode.length - 1]);\n    },\n\n    /**\n     * Sanitizes a EAN-13 prefix by padding it with chars zero.\n     *\n     * @param {String} ean\n     * @returns {String}\n     */\n    sanitize_ean: function(ean){\n        ean = ean.substr(0, 13);\n        ean = \"0\".repeat(13 - ean.length) + ean;\n        return ean.substr(0, 12) + this.get_barcode_check_digit(ean);\n    },\n\n    /**\n     * Sanitizes a UPC-A prefix by padding it with chars zero.\n     *\n     * @param {String} upc\n     * @returns {String}\n     */\n    sanitize_upc: function(upc) {\n        return this.sanitize_ean(upc).substr(1, 12);\n    },\n\n    // Checks if barcode matches the pattern\n    // Additionnaly retrieves the optional numerical content in barcode\n    // Returns an object containing:\n    // - value: the numerical value encoded in the barcode (0 if no value encoded)\n    // - base_code: the barcode in which numerical content is replaced by 0's\n    // - match: boolean\n    match_pattern: function (barcode, pattern, encoding){\n        var match = {\n            value: 0,\n            base_code: barcode,\n            match: false,\n        };\n        barcode = barcode.replace(\"\\\\\", \"\\\\\\\\\").replace(\"{\", '\\{').replace(\"}\", \"\\}\").replace(\".\", \"\\.\");\n\n        var numerical_content = pattern.match(/[{][N]*[D]*[}]/); // look for numerical content in pattern\n        var base_pattern = pattern;\n        if(numerical_content){ // the pattern encodes a numerical content\n            var num_start = numerical_content.index; // start index of numerical content\n            var num_length = numerical_content[0].length; // length of numerical content\n            var value_string = barcode.substr(num_start, num_length-2); // numerical content in barcode\n            var whole_part_match = numerical_content[0].match(\"[{][N]*[D}]\"); // looks for whole part of numerical content\n            var decimal_part_match = numerical_content[0].match(\"[{N][D]*[}]\"); // looks for decimal part\n            var whole_part = value_string.substr(0, whole_part_match.index+whole_part_match[0].length-2); // retrieve whole part of numerical content in barcode\n            var decimal_part = \"0.\" + value_string.substr(decimal_part_match.index, decimal_part_match[0].length-1); // retrieve decimal part\n            if (whole_part === ''){\n                whole_part = '0';\n            }\n            match.value = parseInt(whole_part) + parseFloat(decimal_part);\n\n            // replace numerical content by 0's in barcode and pattern\n            match.base_code = barcode.substr(0, num_start);\n            base_pattern = pattern.substr(0, num_start);\n            for(var i=0;i<(num_length-2);i++) {\n                match.base_code += \"0\";\n                base_pattern += \"0\";\n            }\n            match.base_code += barcode.substr(num_start + num_length - 2, barcode.length - 1);\n            base_pattern += pattern.substr(num_start + num_length, pattern.length - 1);\n\n            match.base_code = match.base_code\n                .replace(\"\\\\\\\\\", \"\\\\\")\n                .replace(\"\\{\", \"{\")\n                .replace(\"\\}\",\"}\")\n                .replace(\"\\.\",\".\");\n\n            var base_code = match.base_code.split('');\n            if (encoding === 'ean13') {\n                base_code[12] = '' + this.get_barcode_check_digit(match.base_code);\n            } else if (encoding === 'ean8') {\n                base_code[7]  = '' + this.get_barcode_check_digit(match.base_code);\n            } else if (encoding === 'upca') {\n                base_code[11] = '' + this.get_barcode_check_digit(match.base_code);\n            }\n            match.base_code = base_code.join('');\n        }\n\n        base_pattern = base_pattern.split('|')\n            .map(part => part.startsWith('^') ? part : '^' + part)\n            .join('|');\n        match.match = match.base_code.match(base_pattern);\n\n        return match;\n    },\n\n    /**\n     * Attempts to interpret a barcode (string encoding a barcode Code-128)\n     *\n     * @param {string} barcode\n     * @returns {Object} the returned object containing informations about the barcode:\n     *      - code: the barcode\n     *      - type: the type of the barcode (e.g. alias, unit product, weighted product...)\n     *      - value: if the barcode encodes a numerical value, it will be put there\n     *      - base_code: the barcode with all the encoding parts set to zero; the one put on the product in the backend\n     */\n    parse_barcode: function(barcode){\n        var parsed_result = {\n            encoding: '',\n            type:'error',\n            code:barcode,\n            base_code: barcode,\n            value: 0,\n        };\n\n        if (!this.nomenclature) {\n            return parsed_result;\n        }\n\n        var rules = this.nomenclature.rules;\n        for (var i = 0; i < rules.length; i++) {\n            var rule = rules[i];\n            var cur_barcode = barcode;\n\n            if (    rule.encoding === 'ean13' &&\n                    this.check_encoding(barcode,'upca') &&\n                    this.nomenclature.upc_ean_conv in {'upc2ean':'','always':''} ){\n                cur_barcode = '0' + cur_barcode;\n            } else if (rule.encoding === 'upca' &&\n                    this.check_encoding(barcode,'ean13') &&\n                    barcode[0] === '0' &&\n                    this.upc_ean_conv in {'ean2upc':'','always':''} ){\n                cur_barcode = cur_barcode.substr(1,12);\n            }\n\n            if (!this.check_encoding(cur_barcode,rule.encoding)) {\n                continue;\n            }\n\n            var match = this.match_pattern(cur_barcode, rules[i].pattern, rule.encoding);\n            if (match.match) {\n                if(rules[i].type === 'alias') {\n                    barcode = rules[i].alias;\n                    parsed_result.code = barcode;\n                    parsed_result.type = 'alias';\n                }\n                else {\n                    parsed_result.encoding  = rules[i].encoding;\n                    parsed_result.type      = rules[i].type;\n                    parsed_result.value     = match.value;\n                    parsed_result.code      = cur_barcode;\n                    if (rules[i].encoding === \"ean13\"){\n                        parsed_result.base_code = this.sanitize_ean(match.base_code);\n                    }\n                    else{\n                        parsed_result.base_code = match.base_code;\n                    }\n                    return parsed_result;\n                }\n            }\n        }\n        return parsed_result;\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    _barcodeNomenclatureFields: function () {\n        return [\n            'name',\n            'rule_ids',\n            'upc_ean_conv',\n        ];\n    },\n\n    _barcodeRuleFields: function () {\n        return [\n            'name',\n            'sequence',\n            'type',\n            'encoding',\n            'pattern',\n            'alias',\n        ];\n    },\n});\n\nreturn BarcodeParser;\n});\n", "odoo.define('stock.InventoryReportListController', function (require) {\n\"use strict\";\n\nvar ListController = require('web.ListController');\n\nvar InventoryReportListController = ListController.extend({\n    buttons_template: 'StockInventoryReport.Buttons',\n\n    // -------------------------------------------------------------------------\n    // Public\n    // -------------------------------------------------------------------------\n\n    init: function (parent, model, renderer, params) {\n        this.context = renderer.state.getContext();\n        return this._super.apply(this, arguments);\n    },\n\n    /**\n     * @override\n     */\n    renderButtons: function ($node) {\n        this._super.apply(this, arguments);\n        if (this.context.no_at_date) {\n            this.$buttons.find('button.o_button_at_date').hide();\n        }\n        this.$buttons.on('click', '.o_button_at_date', this._onOpenWizard.bind(this));\n    },\n\n    // -------------------------------------------------------------------------\n    // Handlers\n    // -------------------------------------------------------------------------\n\n    /**\n     * Handler called when the user clicked on the 'Inventory at Date' button.\n     * Opens wizard to display, at choice, the products inventory or a computed\n     * inventory at a given date.\n     */\n    _onOpenWizard: function () {\n        var state = this.model.get(this.handle, {raw: true});\n        var stateContext = state.getContext();\n        var context = {\n            active_model: this.modelName,\n        };\n        if (stateContext.default_product_id) {\n            context.product_id = stateContext.default_product_id;\n        } else if (stateContext.product_tmpl_id) {\n            context.product_tmpl_id = stateContext.product_tmpl_id;\n        }\n        this.do_action({\n            res_model: 'stock.quantity.history',\n            views: [[false, 'form']],\n            target: 'new',\n            type: 'ir.actions.act_window',\n            context: context,\n        });\n    },\n});\n\nreturn InventoryReportListController;\n\n});\n", "odoo.define('stock.InventoryReportListView', function (require) {\n\"use strict\";\n\nvar ListView = require('web.ListView');\nvar InventoryReportListController = require('stock.InventoryReportListController');\nvar viewRegistry = require('web.view_registry');\n\n\nvar InventoryReportListView = ListView.extend({\n    config: _.extend({}, ListView.prototype.config, {\n        Controller: InventoryReportListController,\n    }),\n});\n\nviewRegistry.add('inventory_report_list', InventoryReportListView);\n\nreturn InventoryReportListView;\n\n});\n", "odoo.define('stock.SingletonListRenderer', function (require) {\n\"use strict\";\n\nvar core = require('web.core');\nvar ListRenderer = require('web.ListRenderer');\n\nvar _t = core._t;\n\n/**\n * The purpose of this override is to disable line buttons when the row is edited.\n *\n */\n\nvar SingletonListRenderer = ListRenderer.extend({\n\n    _disableRecordSelectors: function () {\n        this._super.apply(this, arguments);\n        var row = this._getRow(this._getRecordID(this.currentRow))[0];\n        var lineButtons = row.querySelectorAll('button[name=action_set_inventory_quantity]');\n        lineButtons.forEach(elem => elem.setAttribute('disabled', true));\n    },\n    /**\n     * @private\n     */\n    _enableRecordSelectors: function () {\n        this._super.apply(this, arguments);\n        var lineButtons = this.el.querySelectorAll('button.disabled');\n        lineButtons.forEach(elem => elem.removeAttribute('disabled'));\n    },\n});\n\nreturn SingletonListRenderer;\n\n});\n", "odoo.define('stock.SingletonListController', function (require) {\n\"use strict\";\n\nvar core = require('web.core');\nvar InventoryReportListController = require('stock.InventoryReportListController');\n\nvar _t = core._t;\n\n/**\n * The purpose of this override has 2 purposes:\n *\n * 1. Avoid having two or more similar records in the list view.\n *    It is expected to be used in quant list views, when the list is editable\n *    and allows new line creation. Checks for whether newly created quant\n *    already exists and if it does => update the existing quant instead of the\n *    newly created one, and then we refresh the view to avoid having 2 similar lines.\n *\n * 2. Support Inventory Adjustments (i.e. inventory counts) view.\n *    Specifically adds necessary buttons (or hides them when appropriate) and\n *    autosaving logic to prevent button actions before edits are saved.\n */\n\nvar SingletonListController = InventoryReportListController.extend({\n\n    // -------------------------------------------------------------------------\n    // Private\n    // -------------------------------------------------------------------------\n\n    /**\n     * @override\n     * @return {Promise} rejected when updating the list because we don't want\n     * to select a cell that might not exist anymore.\n     */\n    _confirmSave: function (id) {\n        var newRecord = this.model.localData[id];\n        var model = newRecord.model;\n        var res_id = newRecord.res_id;\n\n        var findSimilarRecords = function (record) {\n            if ((record.groupedBy && record.groupedBy.length > 0) || record.data.length) {\n                var recordsToReturn = [];\n                for (var i in record.data) {\n                    var foundRecords = findSimilarRecords(record.data[i]);\n                    recordsToReturn = recordsToReturn.concat(foundRecords || []);\n                }\n                return recordsToReturn;\n            } else {\n                if (record.res_id === res_id && record.model === model) {\n                    if (record.count === 0){\n                        return [record];\n                    }\n                    else if (record.ref && record.ref.indexOf('virtual') !== -1) {\n                        return [record];\n                    }\n                }\n            }\n        };\n\n        var handle = this.model.get(this.handle);\n        var similarRecords = findSimilarRecords(handle);\n\n        if (similarRecords.length > 1) {\n            var notification = _t(\"You have tried to create a record which already exists. \" +\n            \"The existing record has been modified instead.\");\n            this.displayNotification({ title: _t(\"This record already exists.\"), message: notification });\n            this.reload();\n            return Promise.reject();\n        }\n        else {\n            return this._super.apply(this, arguments);\n        }\n    },\n\n    // -------------------------------------------------------------------------\n    // Handlers\n    // -------------------------------------------------------------------------\n\n    /**\n     *\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onButtonClicked: function (ev) {\n        ev.stopPropagation();\n        var self = this;\n        return self.saveRecord(ev.data.record.id, {\n            stayInEdit: true,\n        }).then(function () {\n            // we need to re-get the record to make sure we have changes made\n            // by the basic model, such as the new res_id, if the record is\n            // new.\n            var record = self.model.get(ev.data.record.id);\n            return self._callButtonAction(ev.data.attrs, record);\n        }).then(function () {\n            self._enableButtons();\n        }).guardedCatch(this._enableButtons.bind(this));\n    },\n});\n\nreturn SingletonListController;\n\n});\n", "odoo.define('stock.SingletonListView', function (require) {\n'use strict';\n\nvar InventoryReportListView = require('stock.InventoryReportListView');\nvar SingletonListController = require('stock.SingletonListController');\nvar SingletonListRenderer = require('stock.SingletonListRenderer');\nvar viewRegistry = require('web.view_registry');\n\nvar SingletonListView = InventoryReportListView.extend({\n    config: _.extend({}, InventoryReportListView.prototype.config, {\n        Controller: SingletonListController,\n        Renderer: SingletonListRenderer,\n    }),\n});\n\nviewRegistry.add('singleton_list', SingletonListView);\n\nreturn SingletonListView;\n\n});\n", "odoo.define('stock.ReplenishReport', function (require) {\n\"use strict\";\n\nconst { loadLegacyViews } = require(\"@web/legacy/legacy_views\");\n\nconst clientAction = require('report.client_action');\nconst core = require('web.core');\nconst dom = require('web.dom');\n\nconst qweb = core.qweb;\nconst _t = core._t;\n\nconst viewRegistry = require(\"web.view_registry\");\n\nconst ReplenishReport = clientAction.extend({\n    /**\n     * @override\n     */\n    init: function (parent, action, options) {\n        this._super.apply(this, arguments);\n        this.context = action.context;\n        this.productId = this.context.active_id;\n        this.resModel = this.context.active_model || this.context.params.active_model || 'product.template';\n        const isTemplate = this.resModel === 'product.template';\n        this.actionMethod = `action_product_${isTemplate ? 'tmpl_' : ''}forecast_report`;\n        const reportName = `report_product_${isTemplate ? 'template' : 'product'}_replenishment`;\n        this.report_url = `/report/html/stock.${reportName}/${this.productId}`;\n        this._title = action.name;\n    },\n\n    /**\n     * @override\n     */\n    willStart: function() {\n        var loadWarehouses = this._rpc({\n            model: 'report.stock.report_product_product_replenishment',\n            method: 'get_warehouses',\n            context: this.context,\n        }).then((res) => {\n            this.warehouses = res;\n            if (this.context.warehouse) {\n                this.active_warehouse = this.warehouses.find(w => w.id == this.context.warehouse);\n            }\n            else {\n                this.active_warehouse = this.warehouses[0];\n                this.context.warehouse = this.active_warehouse.id;\n            }\n            this.report_url += `?context=${JSON.stringify(this.context)}`;\n        });\n        return Promise.all([\n            this._super.apply(this, arguments),\n            loadWarehouses,\n            loadLegacyViews({ rpc: this._rpc.bind(this) }),\n        ]);\n    },\n\n    /**\n     * @override\n     */\n    start: function () {\n        return Promise.all([\n            this._super(...arguments),\n        ]).then(() => {\n            this._renderWarehouseFilters();\n            this._renderButtons();\n        });\n    },\n\n    /**\n     * @override\n     */\n    on_attach_callback: function () {\n        this._super();\n        this._createGraphView();\n        this.iframe.addEventListener(\"load\",\n            () => this._bindAdditionalActionHandlers(),\n            { once: true }\n        );\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {Promise<GraphController>} graphPromise\n     * @returns {Promise}\n     */\n    async _appendGraph(graphPromise) {\n        const graphController = await graphPromise;\n        const iframeDoc = this.iframe.contentDocument;\n        const reportGraphDiv = iframeDoc.querySelector(\".o_report_graph\");\n        if (!reportGraphDiv) {\n            return;\n        }\n        dom.append(reportGraphDiv, graphController.el, {\n            in_DOM: true,\n            callbacks: [{ widget: graphController }],\n        });\n        // Hack to put the res_model on the url. This way, the report always know on with res_model it refers.\n        if (location.href.indexOf('active_model') === -1) {\n            const url = window.location.href + `&active_model=${this.resModel}`;\n            window.history.replaceState({}, \"\", url);\n        }\n    },\n\n    /**\n     * @private\n     * @returns {Promise<GraphController>}\n     */\n    async _createGraphController() {\n        const model = \"report.stock.quantity\";\n        const viewInfo = await this._rpc({\n            model,\n            method: \"fields_view_get\",\n            kwargs: { view_type: \"graph\" }\n        });\n        const params = {\n            domain: this._getReportDomain(),\n            modelName: model,\n            noContentHelp: _t(\"Try to add some incoming or outgoing transfers.\"),\n            withControlPanel: false,\n            context: {fill_temporal: false},\n        };\n        const viewArch = new DOMParser().parseFromString(viewInfo.arch, \"text/xml\");\n        const viewArchJSClass = viewArch.documentElement.getAttribute(\"js_class\");\n        const viewRegistryKey = viewArchJSClass && viewRegistry.contains(viewArchJSClass) ? viewArchJSClass : \"graph\";\n        const GraphView = viewRegistry.get(viewRegistryKey);\n        const graphView = new GraphView(viewInfo, params);\n        const graphController = await graphView.getController(this);\n        await graphController.appendTo(document.createDocumentFragment());\n\n        // Since we render the container in a fragment, we may endup in this case:\n        // https://github.com/chartjs/Chart.js/issues/2210#issuecomment-204984449\n        // so, the canvas won't be resizing when it is relocated in the iframe.\n        // Also, since the iframe's position is absolute, chartJS reiszing may not work\n        //  (https://www.chartjs.org/docs/2.9.4/general/responsive.html -- #Important Note)\n        // Finally, we do want to set a height for the canvas rendering in chartJS.\n        // We do this via the chartJS API, that is legacy/graph_renderer.js:@_prepareOptions\n        //  (maintainAspectRatio = false) and with the *attribute* height (not the style).\n        //  (https://www.chartjs.org/docs/2.9.4/general/responsive.html -- #Responsive Charts)\n        // Luckily, the chartJS is not fully rendered, so changing the height here is relevant.\n        // It wouldn't be if we were after GraphRenderer@mounted.\n        graphController.el.querySelector(\".o_graph_canvas_container canvas\").height = \"300\";\n\n        return graphController;\n    },\n\n    /**\n     * Instantiates a chart graph and moves it into the report's iframe.\n     */\n    _createGraphView() {\n        const graphPromise = this._createGraphController();\n        this.iframe.addEventListener(\"load\",\n            () => this._appendGraph(graphPromise),\n            { once: true }\n        );\n    },\n\n    /**\n     * Return the action to open this report.\n     *\n     * @returns {Promise}\n     */\n    _getForecastedReportAction: function () {\n        return this._rpc({\n            model: this.resModel,\n            method: this.actionMethod,\n            args: [this.productId],\n            context: this.context,\n        });\n    },\n\n    /**\n     * Returns a domain to filter on the product variant or product template\n     * depending of the active model.\n     *\n     * @returns {Array}\n     */\n    _getReportDomain: function () {\n        const domain = [\n            ['state', '=', 'forecast'],\n            ['warehouse_id', '=', this.active_warehouse.id],\n        ];\n        if (this.resModel === 'product.template') {\n            domain.push(['product_tmpl_id', '=', this.productId]);\n        } else if (this.resModel === 'product.product') {\n            domain.push(['product_id', '=', this.productId]);\n        }\n        return domain;\n    },\n\n    /**\n     * TODO\n     *\n     * @param {Object} additionnalContext\n     */\n    _reloadReport: function (additionnalContext) {\n        return this._getForecastedReportAction().then((action) => {\n            action.context = Object.assign({\n                active_id: this.productId,\n                active_model: this.resModel,\n            }, this.context, additionnalContext);\n            return this.do_action(action, {replace_last_action: true});\n        });\n    },\n\n    /**\n     * Renders the 'Replenish' button and replaces the default 'Print' button by this new one.\n     */\n    _renderButtons: function () {\n        const $newButtons = $(qweb.render('replenish_report_buttons', {}));\n        this.$buttons.find('.o_report_print').replaceWith($newButtons);\n        this.$buttons.on('click', '.o_report_replenish_buy', this._onClickReplenish.bind(this));\n        this.controlPanelProps.cp_content = {\n            $buttons: this.$buttons,\n        };\n    },\n\n    /**\n     * Renders the Warehouses filter\n     */\n    _renderWarehouseFilters: function () {\n        const $filters = $(qweb.render('warehouseFilter', {\n            active_warehouse: this.active_warehouse,\n            warehouses: this.warehouses,\n            displayWarehouseFilter: (this.warehouses.length > 1),\n        }));\n        // Bind handlers.\n        $filters.on('click', '.warehouse_filter', this._onClickFilter.bind(this));\n        this.$('.o_search_options').append($filters);\n    },\n\n    /**\n     * Bind additional action handlers (<button>, <a>)\n     * \n     * @returns {Promise}\n     */\n    _bindAdditionalActionHandlers: function () {\n        let rr = this.$el.find('iframe').contents().find('.o_report_replenishment');\n        rr.on('click', '.o_report_replenish_change_priority', this._onClickChangePriority.bind(this));\n        rr.on('mouseenter', '.o_report_replenish_change_priority', this._onMouseEnterPriority.bind(this));\n        rr.on('mouseleave', '.o_report_replenish_change_priority', this._onMouseLeavePriority.bind(this));\n        rr.on('click', '.o_report_replenish_unreserve', this._onClickUnreserve.bind(this));\n        rr.on('click', '.o_report_replenish_reserve', this._onClickReserve.bind(this));\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Opens the product replenish wizard. Could re-open the report if pending\n     * forecasted quantities need to be updated.\n     *\n     * @returns {Promise}\n     */\n    _onClickReplenish: function () {\n        const context = Object.assign({}, this.context);\n        if (this.resModel === 'product.product') {\n            context.default_product_id = this.productId;\n        } else if (this.resModel === 'product.template') {\n            context.default_product_tmpl_id = this.productId;\n        }\n        context.default_warehouse_id = this.active_warehouse.id;\n\n        const on_close = function (res) {\n            if (res && res.special) {\n                // Do nothing when the wizard is discarded.\n                return;\n            }\n            // Otherwise, opens again the report.\n            return this._reloadReport();\n        };\n\n        const action = {\n            res_model: 'product.replenish',\n            name: _t('Product Replenish'),\n            type: 'ir.actions.act_window',\n            views: [[false, 'form']],\n            target: 'new',\n            context: context,\n        };\n\n        return this.do_action(action, {\n            on_close: on_close.bind(this),\n        });\n    },\n\n    /**\n     * Re-opens the report with data for the specified warehouse.\n     *\n     * @returns {Promise}\n     */\n    _onClickFilter: function (ev) {\n        const data = ev.target.dataset;\n        const warehouse_id = Number(data.warehouseId);\n        return this._reloadReport({warehouse: warehouse_id});\n    },\n\n    /**\n     * Change the priority of the specified model/id, then reload this report.\n     *\n     * @returns {Promise}\n     */\n    _onClickChangePriority: function(ev) {\n        const model = ev.target.getAttribute('model');\n        const modelId = parseInt(ev.target.getAttribute('model-id'));\n        const value = ev.target.classList.contains('zero')?'1':'0';\n        this._rpc( {\n            model: model,\n            args: [[modelId], {priority: value}],\n            method: 'write'\n        }).then((result) => {\n            return this._reloadReport();\n        });\n    },\n    _onMouseEnterPriority: function(ev) {\n        ev.target.classList.toggle('fa-star');\n        ev.target.classList.toggle('fa-star-o');\n    },\n    _onMouseLeavePriority: function(ev) {\n        ev.target.classList.toggle('fa-star');\n        ev.target.classList.toggle('fa-star-o');\n    },\n\n    /**\n     * Unreserve the specified model/id, then reload this report.\n     *\n     * @returns {Promise}\n     */\n    _onClickUnreserve: function(ev) {\n        const model = ev.target.getAttribute('model');\n        const modelId = parseInt(ev.target.getAttribute('model-id'));\n        return this._rpc( {\n            model,\n            args: [[modelId]],\n            method: 'do_unreserve',\n            context: { unreserve_parent: true },\n        }).then(() => this._reloadReport());\n    },\n\n    /**\n     * Reserve the specified model/id, then reload this report.\n     *\n     * @returns {Promise}\n     */\n    _onClickReserve: function(ev) {\n        const model = ev.target.getAttribute('model');\n        const modelId = parseInt(ev.target.getAttribute('model-id'));\n        return this._rpc( {\n            model,\n            args: [[modelId]],\n            method: 'action_assign'\n        }).then(() => this._reloadReport());\n    }\n\n});\n\ncore.action_registry.add('replenish_report', ReplenishReport);\n\nreturn(ReplenishReport);\n\n});\n", "/** @odoo-module **/\n\nimport clientAction from 'report.client_action';\nimport core from 'web.core';\n\nconst qweb = core.qweb;\nconst _t = core._t;\n\nconst ReceptionReport = clientAction.extend({\n    /**\n     * @override\n     */\n    init: function (parent, action, options) {\n        this._super(...arguments);\n        this.context = Object.assign(action.context || {}, {\n            active_ids: action.context.default_picking_ids,\n        });\n        this.report_name = `stock.report_reception`;\n        this.report_url = `/report/html/${this.report_name}/?context=${JSON.stringify(this.context)}`;\n        this._title = action.name;\n    },\n\n    /**\n     * @override\n     */\n     start: function () {\n        return Promise.all([\n            this._super(...arguments),\n        ]).then(() => {\n            this._renderButtons();\n        });\n    },\n\n    /**\n     * @override\n     */\n    on_attach_callback: function () {\n        this._super();\n        this.iframe.addEventListener(\"load\",\n            () => this._bindAdditionalActionHandlers(),\n            { once: true }\n        );\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Renders extra report buttons in control panel\n     */\n     _renderButtons: function () {\n        this.$buttons.append(qweb.render('reception_report_buttons', {}));\n        this.$buttons.on('click', '.o_report_reception_assign', this._onClickAssign.bind(this));\n        this.$buttons.on('click', '.o_print_label', this._onClickPrintLabel.bind(this));\n        this.controlPanelProps.cp_content = {\n            $buttons: this.$buttons,\n        };\n    },\n\n    /**\n     * Bind additional <button> action handlers\n     */\n    _bindAdditionalActionHandlers: function () {\n        const rr = $(this.iframe).contents().find('.o_report_reception');\n        rr.on('click', '.o_report_reception_assign', this._onClickAssign.bind(this));\n        rr.on('click', '.o_report_reception_unassign', this._onClickUnassign.bind(this));\n        rr.on('click', '.o_report_reception_forecasted', this._onClickForecastReport.bind(this));\n        rr.on('click', '.o_print_label', this._onClickPrintLabel.bind(this));\n    },\n\n\n    _switchButton: function (button) {\n        button.innerText = button.innerText.includes(_t(\"Unassign\")) ? _t(\"Assign\") : _t(\"Unassign\");\n        button.name = button.name === 'assign_link' ? 'unassign_link' : 'assign_link';\n        button.classList.toggle(\"o_report_reception_assign\");\n        button.classList.toggle(\"o_report_reception_unassign\");\n    },\n\n    /**\n     * Assign the specified move(s)\n     *\n     * @returns {Promise}\n     */\n    _onClickAssign: function (ev) {\n        const el = ev.currentTarget;\n        const quantities = []; // incoming qty amounts to assign\n        const moveIds = [];\n        const inIds = [];\n        let nodeToAssign = [];\n        if (el.name === 'assign_link') { // One line \"Assign\"\n            nodeToAssign = [el];\n            el.closest('tbody').previousElementSibling.querySelectorAll('.o_print_label_all').forEach(button => button.removeAttribute('disabled'));\n        } else {\n            el.style.display = 'none';\n            if (el.name === \"assign_all_link\") { // Global \"Assign All\"\n                const iframe = this.iframe.contentDocument;\n                iframe.querySelectorAll('.o_assign_all').forEach(button => button.style.display = 'none');\n                iframe.querySelectorAll('.o_print_label_all').forEach(button => button.removeAttribute('disabled'));\n                nodeToAssign = iframe.querySelectorAll('.o_report_reception_assign:not(.o_assign_all)');\n            } else { // Local assign all\n                nodeToAssign = el.closest('thead').nextElementSibling.querySelectorAll('.o_report_reception_assign:not(.o_assign_all)');\n                const thead = el.closest('thead');\n                thead.querySelector('.o_print_label_all').removeAttribute('disabled');\n                thead.nextElementSibling.querySelectorAll('.o_print_label_all').forEach(button => button.removeAttribute('disabled'));\n            }\n        }\n        nodeToAssign.forEach(node => {\n            node.closest('td').nextElementSibling.querySelectorAll('.o_print_label').forEach(button => button.removeAttribute('disabled'));\n            moveIds.push(parseInt(node.getAttribute('move-id')));\n            quantities.push(parseFloat(node.getAttribute('qty')));\n            inIds.push(JSON.parse(node.getAttribute('move-ins-ids')));\n            this._switchButton(node);\n        });\n\n        return this._rpc({\n            model: 'report.stock.report_reception',\n            args: [false, moveIds, quantities, inIds],\n            method: 'action_assign'\n        });\n    },\n\n    /**\n     * Unassign the specified move\n     *\n     * @returns {Promise}\n     */\n     _onClickUnassign: function (ev) {\n        const el = ev.currentTarget;\n        const quantity = parseFloat(el.getAttribute('qty'));\n        const modelId = parseInt(el.getAttribute('move-id'));\n        const inIds = JSON.parse(\"[\" + el.getAttribute('move-ins-ids') + \"]\");\n        return this._rpc({\n            model: 'report.stock.report_reception',\n            args: [false, modelId, quantity, inIds[0]],\n            method: 'action_unassign'\n        }).then(() => {\n            // only switch buttons if successful\n            this._switchButton(el);\n            el.closest('td').nextElementSibling.querySelectorAll('.o_print_label').forEach(button => button.setAttribute('disabled', true));\n        });\n    },\n\n    /**\n     * Open the forecast report for the product of the selected move.\n     *\n     * @returns {Promise}\n     */\n    _onClickForecastReport: function (ev) {\n        const modelId = parseInt(ev.currentTarget.getAttribute('move-id'));\n        return this._rpc({\n            model: 'stock.move',\n            args: [[modelId]],\n            method: 'action_product_forecast_report'\n        }).then((action) => {\n            return this.do_action(action);\n        });\n    },\n\n    /**\n     * Print the corresponding source label\n     */\n    _onClickPrintLabel: function (ev) {\n        const el = ev.currentTarget;\n        const modelIds = [];\n        const productQtys = [];\n        const report_file = 'stock.report_reception_report_label';\n        let nodeToPrint = [];\n\n        if (el.name === 'print_label') { // One line print\n            nodeToPrint = [el];\n        } else {\n            if (el.name === \"print_all_labels\") { // Global \"Print Labels\"\n                nodeToPrint = this.iframe.contentDocument.querySelectorAll('.o_print_label:not(.o_print_label_all):not(:disabled)');\n            } else { // Local \"Print Labels\"\n                nodeToPrint = el.closest('thead').nextElementSibling.querySelectorAll('.o_print_label:not(.o_print_label_all):not(:disabled)');\n            }\n        }\n\n        nodeToPrint.forEach(node => {\n            modelIds.push(parseInt(node.getAttribute('move-id')));\n            productQtys.push(Math.ceil(node.getAttribute('qty')) || '1');\n        });\n\n        if (!modelIds.length) { // Nothing to print for this model.\n            return Promise.resolve();\n        }\n        const report_name = `${report_file}?docids=${modelIds}&report_type=qweb-pdf&quantity=${productQtys}`;\n        const action = {\n            type: 'ir.actions.report',\n            report_type: 'qweb-pdf',\n            report_name,\n            report_file,\n        };\n        return this.do_action(action);\n    }\n\n});\n\ncore.action_registry.add('reception_report', ReceptionReport);\n\nexport default ReceptionReport;\n", "/** @odoo-module **/\n\nimport viewRegistry from \"web.view_registry\";\nimport ListModel from \"web.ListModel\";\nimport ListRenderer from \"web.ListRenderer\";\nimport ListView from \"web.ListView\";\n\nfunction _findRecordsInState(entrypoint, result = []) {\n    if (entrypoint && entrypoint.type === \"list\") {\n        for (const element of entrypoint.data.values()) {\n            _findRecordsInState(element, result);\n        }\n    } else if (entrypoint && entrypoint.type === \"record\") {\n        result.push(entrypoint);\n    }\n    return result;\n}\n\nfunction _bindLazyColumnToState(entrypoint, lazyColumns, values, startRequestTime) {\n    let records = _findRecordsInState(entrypoint);\n    for (const recordData of records.values()) {\n        // keep track of request start time (in _fetchRecord) when we fetch a particular record (can happens we\n        // modify the priority field) to avoids to erase the old data if the lazy loaded finished after.\n        if (startRequestTime && recordData.specialData && recordData.specialData.lastUpdateLazy && startRequestTime <= recordData.specialData.lastUpdateLazy){\n            continue\n        }\n        for (const lazyCol of lazyColumns) {\n            recordData.data[lazyCol] =\n                (values && values[recordData.data.id] && values[recordData.data.id][lazyCol]) ||\n                false;\n        }\n    }\n}\n\nfunction _getLazyColumns(fieldsInfo) {\n    const lazyColumns = [];\n    if (!fieldsInfo) {\n        return lazyColumns;\n    }\n    for (const [key, value] of Object.entries(fieldsInfo)) {\n        if (value.options && value.options.lazy) {\n            lazyColumns.push(key);\n        }\n    }\n    return lazyColumns;\n}\n\nconst LazyColumnListModel = ListModel.extend({\n    /**\n     * Avoid to fetch lazy fields by filter-out for the model\n     * (`_searchReadUngroupedList`), and let the controller manage it.\n     *\n     * @param {Object} element an element from the localData\n     * @param {Object} [options]\n     * @param {Object} [options.viewType] current viewType. If not set, we will\n     *   assume main viewType from the record\n     * @returns {string[]} the list of field names\n     */\n    _getFieldNames: function (element, options) {\n        const res = this._super.apply(this, arguments);\n        if (element.type !== \"list\") {\n            // lazy is only for list type element\n            return res;\n        }\n        const fieldsInfo = element.fieldsInfo;\n        const viewType = (options && options.viewType) || element.viewType;\n        const lazyColumns = _getLazyColumns(fieldsInfo[viewType]);\n        return res.filter((column) => !lazyColumns.includes(column));\n    },\n\n    _makeDataPoint: function () {\n        // Should put the lazy column to work with decoration\n        const dataPoint = this._super.apply(this, arguments);\n        if (dataPoint.type === \"record\" && dataPoint.fieldsInfo) {\n            const fieldsInfo = dataPoint.fieldsInfo[dataPoint.viewType];\n            const lazyColumn = _getLazyColumns(fieldsInfo);\n            _bindLazyColumnToState(dataPoint, lazyColumn);\n        }\n        return dataPoint;\n    },\n    \n    _fetchRecord: function(record, options) {\n        record.specialData.lastUpdateLazy = Date.now();\n        return this._super.apply(this, arguments);\n    }\n});\n\nconst LazyColumnListRenderer = ListRenderer.extend({\n    init: function () {\n        this.currentNbLazyRpc = 0;\n        return this._super.apply(this, arguments);\n    },\n\n    _lazyLoad: async function (state, lazyColumns) {\n        const startRequestTime = Date.now()\n        const res = await this._rpc(\n            {\n                model: state.model,\n                method: \"search_read\",\n                args: [state.domain.concat([['id', 'in', state.res_ids]]), lazyColumns],\n            },\n            { shadow: true }\n        );\n        const resById = {};\n        for (const element of res.values()) {\n            resById[element.id] = {};\n            for (const lazyCol of lazyColumns) {\n                resById[element.id][lazyCol] = element[lazyCol];\n            }\n        }\n        _bindLazyColumnToState(this.state, lazyColumns, resById, startRequestTime);\n        this.currentNbLazyRpc -= 1;\n        // Render only the lazy columns\n        for (const lazyCol of lazyColumns) {\n            const node = this.columns.find((colAttribute) => colAttribute.attrs.name === lazyCol);\n            if (!node) {\n                continue;\n            }\n            const indexNode = this.columns.findIndex(\n                (colAttribute) => colAttribute.attrs.name === lazyCol\n            );\n            const $columnHeader = this.$el.find(`th[data-name='${lazyCol}']`);\n            $columnHeader.replaceWith(this._renderHeaderCell(node));\n            const $cellsLazy = this.$el.find(`.o_data_cell[name='${lazyCol}']`);\n            for (let i = 0; i <= $cellsLazy.length; i++) {\n                const $cell = $($cellsLazy[i]);\n                const idRecord = $cell.parent().data(\"id\");\n                const record = _findRecordsInState(this.state).find((rec) => rec.id === idRecord);\n                if (record) {\n                    $cell.replaceWith(\n                        this._renderBodyCell(record, node, indexNode, { mode: \"readonly\" })\n                    );\n                }\n            }\n        }\n    },\n\n    async _render() {\n        const lazyColumns = _getLazyColumns(this.state.fieldsInfo[this.state.type]);\n        const lazyVisible = lazyColumns.some((col) => {\n            return !!this.columns.find((colAttribute) => colAttribute.attrs.name === col);\n        });\n        const lazyLoad = lazyVisible && this.state.res_ids.length > 0;\n        if (lazyLoad) {\n            this.currentNbLazyRpc += 1;\n        }\n        const res = await this._super(...arguments);\n        if (lazyLoad) {\n            this._lazyLoad(this.state, lazyColumns);\n        }\n        return res;\n    },\n\n    _isLazyNode: function (node) {\n        try {\n            if (JSON.parse(node.attrs.options).lazy) {\n                return true;\n            }\n        } catch (e) {\n            return false;\n        }\n        return false;\n    },\n\n    _renderBodyCell: function (record, node) {\n        const $res = this._super.apply(this, arguments);\n        const lazyColumns = _getLazyColumns(this.state.fieldsInfo[this.state.type]);\n        if (this._isLazyNode(node)) {\n            // Decorations doesn't work for lazy column because the evalContext isn't updated and it is a readonly attribute\n            // Then a lazy fields can be only used in a other lazy fields decoration.\n            const extraData = {};\n            for (const col of lazyColumns) {\n                extraData[col] = record.data[col];\n            }\n            const evalContext = Object.assign({}, record.evalContext, extraData);\n            for (const [cssClass, expr] of Object.entries(this.fieldDecorations[node.attrs.name])) {\n                $res.toggleClass(cssClass, py.PY_isTrue(py.evaluate(expr, evalContext)));\n            }\n        }\n        return $res;\n    },\n\n    _renderHeaderCell: function (node) {\n        const $res = this._super.apply(this, arguments);\n        if (this._isLazyNode(node)) {\n            const $spin = $('<i class=\"fa fa-refresh fa-spin m-1\"/>');\n            if (this.currentNbLazyRpc == 0) {\n                $spin.addClass(\"invisible\");\n            }\n            $res.find(\":last\").before($spin);\n        }\n        return $res;\n    },\n});\n\nconst LazyColumnList = ListView.extend({\n    config: Object.assign({}, ListView.prototype.config, {\n        Renderer: LazyColumnListRenderer,\n        Model: LazyColumnListModel,\n    }),\n});\n\nviewRegistry.add(\"lazy_column_list\", LazyColumnList);\n\nexport default LazyColumnList;\n", "odoo.define('stock.StockOrderpointListController', function (require) {\n\"use strict\";\n\nvar core = require('web.core');\nvar ListController = require('web.ListController');\nvar FormView = require('web.FormView');\n\nvar qweb = core.qweb;\n\n\nvar StockOrderpointListController = ListController.extend({\n\n    // -------------------------------------------------------------------------\n    // Public\n    // -------------------------------------------------------------------------\n\n    /**\n     * @override\n     */\n    renderButtons: function () {\n        this._super.apply(this, arguments);\n        this.$buttons.find('.o_list_export_xlsx').addClass('d-none');\n        this.$buttons.find('.o_list_button_add').removeClass('btn-primary').addClass('btn-secondary');\n        var $buttons = $(qweb.render('StockOrderpoint.Buttons'));\n        var $buttonOrder = $buttons.find('.o_button_order');\n        var $buttonSnooze = $buttons.find('.o_button_snooze');\n        $buttonOrder.on('click', this._onReplenish.bind(this));\n        $buttonSnooze.on('click', this._onSnooze.bind(this));\n        $buttons.prependTo(this.$buttons);\n    },\n\n    // -------------------------------------------------------------------------\n    // Handlers\n    // -------------------------------------------------------------------------\n\n    _onButtonClicked: function (ev) {\n        if (ev.data.attrs.class && ev.data.attrs.class.split(' ').includes('o_replenish_buttons')) {\n            ev.stopPropagation();\n            this.trigger_up('save_line', {\n                recordID: ev.data.record.id,\n                onSuccess: () => this._callButtonAction(ev.data.attrs, ev.data.record).then(() => this.reload())\n            });\n        } else {\n            this._super.apply(this, arguments);\n        }\n    },\n\n    _onReplenish: function () {\n        this.getSelectedIdsWithDomain().then(ids => this.model.replenish((ids)));\n    },\n\n    _onSelectionChanged: function (ev) {\n        this._super(ev);\n        var $buttonOrder = this.$el.find('.o_button_order');\n        var $buttonSnooze = this.$el.find('.o_button_snooze');\n        if (this.getSelectedIds().length === 0){\n            $buttonOrder.addClass('d-none');\n            $buttonSnooze.addClass('d-none');\n        } else {\n            $buttonOrder.removeClass('d-none');\n            $buttonSnooze.removeClass('d-none');\n        }\n    },\n\n    _onSnooze: function () {\n        this.getSelectedIdsWithDomain().then(ids => this.model.snooze((ids)));\n    },\n});\n\nreturn StockOrderpointListController;\n\n});\n", "odoo.define('stock.StockOrderpointListModel', function (require) {\n\"use strict\";\n\nvar core = require('web.core');\nvar ListModel = require('web.ListModel');\n\nvar qweb = core.qweb;\n\n\nvar StockOrderpointListModel = ListModel.extend({\n\n    // -------------------------------------------------------------------------\n    // Public\n    // -------------------------------------------------------------------------\n    /**\n     */\n    replenish: function (recordResIds) {\n      var self = this;\n      return this._rpc({\n          model: this.loadParams.modelName,\n          method: 'action_replenish',\n          args: [recordResIds],\n          context: this.loadParams.context,\n      }).then(function () {\n          return self.do_action('stock.action_replenishment');\n      });\n    },\n\n    snooze: function (recordResIds) {\n      var self = this;\n      return this.do_action('stock.action_orderpoint_snooze', {\n          additional_context: {\n              default_orderpoint_ids: recordResIds\n          },\n          on_close: () => self.do_action('stock.action_replenishment')\n      });\n    },\n});\n\nreturn StockOrderpointListModel;\n\n});\n", "odoo.define('stock.StockOrderpointListView', function (require) {\n\"use strict\";\n\nvar ListView = require('web.ListView');\nvar StockOrderpointListController = require('stock.StockOrderpointListController');\nvar StockOrderpointListModel = require('stock.StockOrderpointListModel');\nvar viewRegistry = require('web.view_registry');\n\n\nvar StockOrderpointListView = ListView.extend({\n    config: _.extend({}, ListView.prototype.config, {\n        Controller: StockOrderpointListController,\n        Model: StockOrderpointListModel,\n    }),\n});\n\nviewRegistry.add('stock_orderpoint_list', StockOrderpointListView);\n\nreturn StockOrderpointListView;\n\n});\n", "odoo.define('stock.stock_report_generic', function (require) {\n'use strict';\n\nvar AbstractAction = require('web.AbstractAction');\nvar core = require('web.core');\nvar session = require('web.session');\nvar ReportWidget = require('stock.ReportWidget');\nvar framework = require('web.framework');\n\nvar QWeb = core.qweb;\n\nvar stock_report_generic = AbstractAction.extend({\n    hasControlPanel: true,\n\n    // Stores all the parameters of the action.\n    init: function(parent, action) {\n        this._super.apply(this, arguments);\n        this.actionManager = parent;\n        this.given_context = Object.assign({}, session.user_context);\n        this.controller_url = action.context.url;\n        if (action.context.context) {\n            this.given_context = action.context.context;\n        }\n        this.given_context.active_id = action.context.active_id || action.params.active_id;\n        this.given_context.model = action.context.active_model || false;\n        this.given_context.ttype = action.context.ttype || false;\n        this.given_context.auto_unfold = action.context.auto_unfold || false;\n        this.given_context.lot_name = action.context.lot_name || false;\n    },\n    willStart: function() {\n        return Promise.all([this._super.apply(this, arguments), this.get_html()]);\n    },\n    set_html: function() {\n        var self = this;\n        var def = Promise.resolve();\n        if (!this.report_widget) {\n            this.report_widget = new ReportWidget(this, this.given_context);\n            def = this.report_widget.appendTo(this.$('.o_content'));\n        }\n        return def.then(function () {\n            self.report_widget.$el.html(self.html);\n            self.report_widget.$el.find('.o_report_heading').html('<h1>Traceability Report</h1>');\n            if (self.given_context.auto_unfold) {\n                _.each(self.$el.find('.fa-caret-right'), function (line) {\n                    self.report_widget.autounfold(line, self.given_context.lot_name);\n                });\n            }\n        });\n    },\n    start: async function() {\n        this.controlPanelProps.cp_content = { $buttons: this.$buttons };\n        await this._super(...arguments);\n        this.set_html();\n    },\n    // Fetches the html and is previous report.context if any, else create it\n    get_html: async function() {\n        const { html } = await this._rpc({\n            args: [this.given_context],\n            method: 'get_html',\n            model: 'stock.traceability.report',\n        });\n        this.html = html;\n        this.renderButtons();\n    },\n    // Updates the control panel and render the elements that have yet to be rendered\n    update_cp: function() {\n        if (!this.$buttons) {\n            this.renderButtons();\n        }\n        this.controlPanelProps.cp_content = { $buttons: this.$buttons };\n        return this.updateControlPanel();\n    },\n    renderButtons: function() {\n        var self = this;\n        this.$buttons = $(QWeb.render(\"stockReports.buttons\", {}));\n        // pdf output\n        this.$buttons.bind('click', function () {\n            var $element = $(self.$el[0]).find('.o_stock_reports_table tbody tr');\n            var dict = [];\n\n            $element.each(function( index ) {\n                var $el = $($element[index]);\n                dict.push({\n                        'id': $el.data('id'),\n                        'model_id': $el.data('model_id'),\n                        'model_name': $el.data('model'),\n                        'unfoldable': $el.data('unfold'),\n                        'level': $el.find('td:first').data('level') || 1\n                });\n            });\n            framework.blockUI();\n            var url_data = self.controller_url.replace(':active_id', self.given_context.active_id);\n            url_data = url_data.replace(':active_model', self.given_context.model);\n            session.get_file({\n                url: url_data.replace('output_format', 'pdf'),\n                data: {data: JSON.stringify(dict)},\n                complete: framework.unblockUI,\n                error: (error) => self.call('crash_manager', 'rpc_error', error),\n            });\n        });\n        return this.$buttons;\n    },\n});\n\ncore.action_registry.add(\"stock_report_generic\", stock_report_generic);\nreturn stock_report_generic;\n});\n", "odoo.define('stock.ReportWidget', function (require) {\n'use strict';\n\nvar core = require('web.core');\nvar Widget = require('web.Widget');\n\nvar QWeb = core.qweb;\n\nvar _t = core._t;\n\nvar ReportWidget = Widget.extend({\n    events: {\n        'click span.o_stock_reports_foldable': 'fold',\n        'click span.o_stock_reports_unfoldable': 'unfold',\n        'click .o_stock_reports_web_action': 'boundLink',\n        'click .o_stock_reports_stream': 'updownStream',\n        'click .o_stock_report_lot_action': 'actionOpenLot'\n    },\n    init: function(parent) {\n        this._super.apply(this, arguments);\n    },\n    start: function() {\n        QWeb.add_template(\"/stock/static/src/xml/stock_traceability_report_line.xml\");\n        return this._super.apply(this, arguments);\n    },\n    boundLink: function(e) {\n        e.preventDefault();\n        return this.do_action({\n            type: 'ir.actions.act_window',\n            res_model: $(e.target).data('res-model'),\n            res_id: $(e.target).data('active-id'),\n            views: [[false, 'form']],\n            target: 'current'\n        });\n    },\n    actionOpenLot: function(e) {\n        e.preventDefault();\n        var $el = $(e.target).parents('tr');\n        this.do_action({\n            type: 'ir.actions.client',\n            tag: 'stock_report_generic',\n            name: $el.data('lot_name') !== undefined && $el.data('lot_name').toString(),\n            context: {\n                active_id : $el.data('lot_id'),\n                active_model : 'stock.production.lot',\n                url: '/stock/output_format/stock?active_id=:active_id&active_model=:active_model',\n            },\n        });\n    },\n    updownStream: function(e) {\n        var $el = $(e.target).parents('tr');\n        this.do_action({\n            type: \"ir.actions.client\",\n            tag: 'stock_report_generic',\n            name: _t(\"Traceability Report\"),\n            context: {\n                active_id : $el.data('model_id'),\n                active_model : $el.data('model'),\n                auto_unfold: true,\n                lot_name: $el.data('lot_name') !== undefined && $el.data('lot_name').toString(),\n                url: '/stock/output_format/stock/active_id'\n            },\n        });\n    },\n    removeLine: function(element) {\n        var self = this;\n        var el, $el;\n        var rec_id = element.data('id');\n        var $stockEl = element.nextAll('tr[data-parent_id=' + rec_id + ']')\n        for (el in $stockEl) {\n            $el = $($stockEl[el]).find(\".o_stock_reports_domain_line_0, .o_stock_reports_domain_line_1\");\n            if ($el.length === 0) {\n                break;\n            }\n            else {\n                var $nextEls = $($el[0]).parents(\"tr\");\n                self.removeLine($nextEls);\n                $nextEls.remove();\n            }\n            $el.remove();\n        }\n        return true;\n    },\n    fold: function(e) {\n        this.removeLine($(e.target).parents('tr'));\n        var active_id = $(e.target).parents('tr').find('td.o_stock_reports_foldable').data('id');\n        $(e.target).parents('tr').find('td.o_stock_reports_foldable').attr('class', 'o_stock_reports_unfoldable ' + active_id); // Change the class, rendering, and remove line from model\n        $(e.target).parents('tr').find('span.o_stock_reports_foldable').replaceWith(QWeb.render(\"unfoldable\", {lineId: active_id}));\n        $(e.target).parents('tr').toggleClass('o_stock_reports_unfolded');\n    },\n    autounfold: function(target, lot_name) {\n        var self = this;\n        var $CurretElement;\n        $CurretElement = $(target).parents('tr').find('td.o_stock_reports_unfoldable');\n        var active_id = $CurretElement.data('id');\n        var active_model_name = $CurretElement.data('model');\n        var active_model_id = $CurretElement.data('model_id');\n        var row_level = $CurretElement.data('level');\n        var $cursor = $(target).parents('tr');\n        this._rpc({\n                model: 'stock.traceability.report',\n                method: 'get_lines',\n                args: [parseInt(active_id, 10)],\n                kwargs: {\n                    'model_id': active_model_id,\n                    'model_name': active_model_name,\n                    'level': parseInt(row_level) + 30 || 1\n                },\n            })\n            .then(function (lines) {// After loading the line\n                _.each(lines, function (line) { // Render each line\n                    $cursor.after(QWeb.render(\"report_mrp_line\", {l: line}));\n                    $cursor = $cursor.next();\n                    if ($cursor && line.unfoldable && line.lot_name == lot_name) {\n                        self.autounfold($cursor.find(\".fa-caret-right\"), lot_name);\n                    }\n                });\n            });\n        $CurretElement.attr('class', 'o_stock_reports_foldable ' + active_id); // Change the class, and rendering of the unfolded line\n        $(target).parents('tr').find('span.o_stock_reports_unfoldable').replaceWith(QWeb.render(\"foldable\", {lineId: active_id}));\n        $(target).parents('tr').toggleClass('o_stock_reports_unfolded');\n    },\n    unfold: function(e) {\n        this.autounfold($(e.target));\n    },\n\n});\n\nreturn ReportWidget;\n\n});\n", "odoo.define('stock.popover_widget', function (require) {\n'use strict';\n\nvar AbstractField = require('web.AbstractField');\nvar core = require('web.core');\nvar QWeb = core.qweb;\nvar Context = require('web.Context');\nvar data_manager = require('web.data_manager');\nvar fieldRegistry = require('web.field_registry');\n\n/**\n * Widget Popover for JSON field (char), by default render a simple html message\n * {\n *  'msg': '<CONTENT OF THE POPOVER>',\n *  'icon': '<FONT AWESOME CLASS>' (optionnal),\n *  'color': '<COLOR CLASS OF ICON>' (optionnal),\n *  'title': '<TITLE OF POPOVER>' (optionnal),\n *  'popoverTemplate': '<TEMPLATE OF THE TEMPLATE>' (optionnal)\n * }\n */\nvar PopoverWidgetField = AbstractField.extend({\n    supportedFieldTypes: ['char'],\n    buttonTemplape: 'stock.popoverButton',\n    popoverTemplate: 'stock.popoverContent',\n    trigger: 'focus',\n    placement: 'top',\n    html: true,\n    color: 'text-primary',\n    icon: 'fa-info-circle',\n\n    _render: function () {\n        var value = JSON.parse(this.value);\n        if (!value) {\n            this.$el.html('');\n            return;\n        }\n        this.$el.css('max-width', '17px');\n        this.$el.html(QWeb.render(this.buttonTemplape, _.defaults(value, {color: this.color, icon: this.icon})));\n        this.$el.addClass('o_widget');\n        this.$el.find('a').prop('special_click', true);\n        this.$popover = $(QWeb.render(value.popoverTemplate || this.popoverTemplate, value));\n        this.$popover.on('click', '.action_open_forecast', this._openForecast.bind(this));\n        this.$el.find('a').popover({\n            content: this.$popover,\n            html: this.html,\n            placement: this.placement,\n            title: value.title || this.title.toString(),\n            trigger: this.trigger,\n            delay: {'show': 0, 'hide': 100},\n        });\n    },\n\n    /**\n     * Redirect to the product forecasted report.\n     *\n     * @private\n     * @param {MouseEvent} event\n     * @returns {Promise} action loaded\n     */\n    async _openForecast(ev) {\n        ev.stopPropagation();\n        const reportContext = {\n            active_model: 'product.product',\n            active_id: this.recordData.product_id.data.id,\n            warehouse: this.recordData.warehouse_id.data.id,\n        };\n        const action = await this._rpc({\n            model: reportContext.active_model,\n            method: 'action_product_forecast_report',\n            args: [[reportContext.active_id]],\n        });\n        action.context = new Context(action.context, reportContext);\n        return this.do_action(action);\n    },\n\n    destroy: function () {\n        this.$el.find('a').popover('dispose');\n        this._super.apply(this, arguments);\n    },\n\n});\n\nfieldRegistry.add('popover_widget', PopoverWidgetField);\n\nreturn PopoverWidgetField;\n});\n", "odoo.define('stock.forecast_widget', function (require) {\n'use strict';\n\nconst AbstractField = require('web.AbstractField');\nconst fieldRegistry = require('web.field_registry');\nconst field_utils = require('web.field_utils');\nconst utils = require('web.utils');\nconst core = require('web.core');\nconst QWeb = core.qweb;\n\nconst ForecastWidgetField = AbstractField.extend({\n    supportedFieldTypes: ['float'],\n\n    _render: function () {\n        var data = Object.assign({}, this.record.data, {\n            forecast_availability_str: field_utils.format.float(\n                this.record.data.forecast_availability,\n                this.record.fields.forecast_availability,\n                this.nodeOptions\n            ),\n            reserved_availability_str: field_utils.format.float(\n                this.record.data.reserved_availability,\n                this.record.fields.reserved_availability,\n                this.nodeOptions\n            ),\n            forecast_expected_date_str: field_utils.format.date(\n                this.record.data.forecast_expected_date,\n                this.record.fields.forecast_expected_date\n            ),\n        });\n        if (data.forecast_expected_date && data.date_deadline) {\n            data.forecast_is_late = data.forecast_expected_date > data.date_deadline;\n        }\n        data.will_be_fulfilled = utils.round_decimals(data.forecast_availability, this.record.fields.forecast_availability.digits[1]) >= utils.round_decimals(data.product_qty, this.record.fields.forecast_availability.digits[1]);\n\n        this.$el.html(QWeb.render('stock.forecastWidget', data));\n        this.$('.o_forecast_report_button').on('click', this._onOpenReport.bind(this));\n    },\n\n    isSet: function () {\n        return true;\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Opens the Forecast Report for the `stock.move` product.\n     *\n     * @param {MouseEvent} ev\n     */\n    _onOpenReport: function (ev) {\n        ev.preventDefault();\n        ev.stopPropagation();\n        if (!this.recordData.id) {\n            return;\n        }\n        this._rpc({\n            model: 'stock.move',\n            method: 'action_product_forecast_report',\n            args: [this.recordData.id],\n        }).then(action => {\n            action.context = Object.assign(action.context || {}, {\n                active_model: 'product.product',\n                active_id: this.recordData.product_id.res_id,\n            });\n            this.do_action(action);\n        });\n    },\n});\n\nconst JsonWidget = AbstractField.extend({\n    supportedFieldTypes: ['char'],\n\n    _render: function () {\n        var value = JSON.parse(this.value);\n        if (!value || !value.template) {\n            this.$el.html('');\n            return;\n        }\n        $(QWeb.render(value.template, value)).appendTo(this.$el);\n    },\n});\n\nfieldRegistry.add('forecast_widget', ForecastWidgetField);\nfieldRegistry.add('json_widget', JsonWidget);\n\nreturn ForecastWidgetField;\n});\n", "/** @odoo-module alias=stock.counted_quantity_widget **/\n\nimport BasicFields from 'web.basic_fields';\nimport fieldRegistry from 'web.field_registry';\n\nconst CountedQuantityWidgetField = BasicFields.FieldFloat.extend({\n    supportedFieldTypes: ['float'],\n\n     _renderReadonly: function () {\n        if (this.recordData.inventory_quantity_set) {\n            this.el.textContent = this._formatValue(this.recordData.inventory_quantity);\n        } else {\n            this.el.textContent = \"\";\n        }\n    },\n\n    _onChange: function () {\n        if (!this.recordData.inventory_quantity_set) {\n            this.recordData.inventory_quantity_set = true;\n        }\n        this._super.apply(this);\n    },\n\n    _isSameValue: function(value) {\n        // We want to trigger the update of the view when inserting 0\n        if (value == 0) {\n            return false;\n        }\n        return this._super(...arguments);\n    }\n\n});\n\nfieldRegistry.add('counted_quantity_widget', CountedQuantityWidgetField);\n\nexport default CountedQuantityWidgetField;\n", "odoo.define('stock.BasicModel', function (require) {\n\"use strict\";\n\nvar BasicModel = require('web.BasicModel');\nvar localStorage = require('web.local_storage');\n\nBasicModel.include({\n\n    _invalidateCache: function (dataPoint) {\n        this._super.apply(this, arguments);\n        if (dataPoint.model === 'stock.warehouse' && !localStorage.getItem('running_tour')) {\n            this.do_action('reload_context');\n        }\n    }\n});\n});\n", "odoo.define('stock.PopoverStockPicking', function (require) {\n\"use strict\";\n\nvar core = require('web.core');\n\nvar PopoverWidgetField = require('stock.popover_widget');\nvar registry = require('web.field_registry');\nvar _lt = core._lt;\n\nvar PopoverStockPicking = PopoverWidgetField.extend({\n    title: _lt('Planning Issue'),\n    trigger: 'focus',\n    color: 'text-danger',\n    icon: 'fa-exclamation-triangle',\n\n    _render: function () {\n        this._super();\n        if (this.$popover) {\n            var self = this;\n            this.$popover.find('a').on('click', function (ev) {\n                ev.preventDefault();\n                ev.stopPropagation();\n                self.do_action({\n                    type: 'ir.actions.act_window',\n                    res_model: ev.currentTarget.getAttribute('element-model'),\n                    res_id: parseInt(ev.currentTarget.getAttribute('element-id'), 10),\n                    views: [[false, 'form']],\n                    target: 'current'\n                });\n            });\n        }\n    },\n\n});\n\nregistry.add('stock_rescheduling_popover', PopoverStockPicking);\n\nreturn PopoverStockPicking;\n});\n", "odoo.define('sale_stock.QtyAtDateWidget', function (require) {\n\"use strict\";\n\nvar core = require('web.core');\nvar QWeb = core.qweb;\n\nvar Widget = require('web.Widget');\nvar widget_registry = require('web.widget_registry');\nvar utils = require('web.utils');\n\nvar _t = core._t;\nvar time = require('web.time');\n\nvar QtyAtDateWidget = Widget.extend({\n    template: 'sale_stock.qtyAtDate',\n    events: _.extend({}, Widget.prototype.events, {\n        'click .fa-area-chart': '_onClickButton',\n    }),\n\n    /**\n     * @override\n     * @param {Widget|null} parent\n     * @param {Object} params\n     */\n    init: function (parent, params) {\n        this.data = params.data;\n        this.fields = params.fields;\n        this._updateData();\n        this._super(parent);\n    },\n\n    start: function () {\n        var self = this;\n        return this._super.apply(this, arguments).then(function () {\n            self._setPopOver();\n        });\n    },\n\n    _updateData: function() {\n        // add some data to simplify the template\n        if (this.data.scheduled_date) {\n            var qty_to_deliver = utils.round_decimals(this.data.qty_to_deliver, this.fields.qty_to_deliver.digits[1]);\n            if (this.data.state === 'sale') {\n                this.data.will_be_fulfilled = utils.round_decimals(this.data.free_qty_today, this.fields.free_qty_today.digits[1]) >= qty_to_deliver\n            } else {\n                this.data.will_be_fulfilled = utils.round_decimals(this.data.virtual_available_at_date, this.fields.virtual_available_at_date.digits[1]) >= qty_to_deliver\n            }\n            this.data.will_be_late = this.data.forecast_expected_date && this.data.forecast_expected_date > this.data.scheduled_date;\n            if (['draft', 'sent'].includes(this.data.state)){\n                // Moves aren't created yet, then the forecasted is only based on virtual_available of quant\n                this.data.forecasted_issue = !this.data.will_be_fulfilled && !this.data.is_mto;\n            } else {\n                // Moves are created, using the forecasted data of related moves\n                this.data.forecasted_issue = !this.data.will_be_fulfilled || this.data.will_be_late;\n            }\n        }\n    },\n    \n    updateState: function (state) {\n        this.$el.popover('dispose');\n        var candidate = state.data[this.getParent().currentRow];\n        if (candidate) {\n            this.data = candidate.data;\n            this._updateData();\n            this.renderElement();\n            this._setPopOver();\n        }\n    },\n    /**\n     * Redirect to the product graph view.\n     *\n     * @private\n     * @param {MouseEvent} event\n     * @returns {Promise} action loaded\n     */\n    async _openForecast(ev) {\n        ev.stopPropagation();\n        // TODO: in case of kit product, the forecast view should show the kit's components (get_component)\n        // The forecast_report doesn't not allow for now multiple products \n        var action = await this._rpc({\n            model: 'product.product',\n            method: 'action_product_forecast_report',\n            args: [[this.data.product_id.data.id]]\n        });\n        action.context = {\n            active_model: 'product.product',\n            active_id: this.data.product_id.data.id,\n            warehouse: this.data.warehouse_id && this.data.warehouse_id.res_id,\n            move_to_match_ids: this.data.move_ids.res_ids,\n            sale_line_to_match_id: this.data.id,\n        };\n        return this.do_action(action);\n    },\n\n    _getContent() {\n        if (!this.data.scheduled_date) {\n            return;\n        }\n        this.data.delivery_date = this.data.scheduled_date.clone().add(this.getSession().getTZOffset(this.data.scheduled_date), 'minutes').format(time.getLangDateFormat());\n        if (this.data.forecast_expected_date) {\n            this.data.forecast_expected_date_str = this.data.forecast_expected_date.clone().add(this.getSession().getTZOffset(this.data.forecast_expected_date), 'minutes').format(time.getLangDateFormat());\n        }\n        const $content = $(QWeb.render('sale_stock.QtyDetailPopOver', {\n            data: this.data,\n        }));\n        $content.on('click', '.action_open_forecast', this._openForecast.bind(this));\n        return $content;\n    },\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n    /**\n     * Set a bootstrap popover on the current QtyAtDate widget that display available\n     * quantity.\n     */\n    _setPopOver() {\n        const $content = this._getContent();\n        if (!$content) {\n            return;\n        }\n        const options = {\n            content: $content,\n            html: true,\n            placement: 'left',\n            title: _t('Availability'),\n            trigger: 'focus',\n            delay: {'show': 0, 'hide': 100 },\n        };\n        this.$el.popover(options);\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n    _onClickButton: function () {\n        // We add the property special click on the widget link.\n        // This hack allows us to trigger the popover (see _setPopOver) without\n        // triggering the _onRowClicked that opens the order line form view.\n        this.$el.find('.fa-area-chart').prop('special_click', true);\n    },\n});\n\nwidget_registry.add('qty_at_date_widget', QtyAtDateWidget);\n\nreturn QtyAtDateWidget;\n});\n", "odoo.define('hotel_room_dashboard_view', function(require) {\n\t'use strict';\n//\talert(\"LOad\");\n\tvar core = require('web.core');\n\tvar AbstractAction = require('web.AbstractAction');\n\tvar Widget = require('web.Widget');\n//\tvar Models = require('web.Model');\n\tvar webclient = require('web.WebClient');\n//\tvar Model = require('web.DataModel');\n\tvar datepicker = require('web.datepicker');\n\tvar time = require('web.time');\n\tvar framework = require('web.framework');\n\tvar session = require('web.session');\n\tvar _t = core._t;\n\tvar _lt = core._lt;\n\tvar QWeb = core.qweb;\n\tvar Class = core.Class;\n\tvar RoomDashboardView = AbstractAction.extend({\n\t\ttemplate : 'RoomDashboardView',\n\t\tinit : function(parent, options) {\n\t\t\tconsole.log(\"INit \")\n\t\t\tthis._super(parent,options);\n\t\t\toptions = options || {};\n\t\t\tvar self = this;\n\t\t\tthis.reservation_lines = null;\n\t\t\tthis.reservations = null;\n\t\t\tthis.booking_data = new Array();\n\t\t\tthis.categories;\n\t\t\tthis.product_lines;\n\t\t\tthis.product_template_lines;\n\t\t\tthis.selected_categ = new Array();\n\t\t\tthis.guest_details = new Array();\n\t\t\tthis.housekeeping_lines = new Array();\n\t\t\tthis.view_ids;\n\t\t},\n\t\tshow : function() {\n\t\t\tthis.$el.show();\n\t\t},\n\n\t\tstart : function() {\n\t\t\tvar self = this;\n\t\t\tself.renderElement();\n\n\t\t\tthis.$(\".openerp.oe_application > div\").addClass('custom_oe_application');\n\n\t\t\tthis.$(\"#from_date\").datepicker({\n\t\t\t\tshowButtonPanel : true,\n\t\t\t\tdateFormat : \"yy-mm-dd\",\n\t\t\t\tchangeMonth : true,\n\t\t\t\tchangeYear : true,\n\t\t\t\taltField : \"#alternate\",\n\t\t\t});\n\n\t\t\tjQuery.datepicker._gotoToday = function(id) {\n\t\t\t\tvar today = new Date();\n\t\t\t\tvar dateRef = jQuery(\"<td><a>\" + today.getDate() + \"</a></td>\");\n\t\t\t\tthis._selectDay(id, today.getMonth(), today.getFullYear(), dateRef);\n\t\t\t};\n\n\t\t\tthis.$(\"#to_date\").datepicker({\n\t\t\t\tshowButtonPanel : true,\n\t\t\t\tdateFormat : \"yy-mm-dd\",\n\t\t\t\tchangeMonth : true,\n\t\t\t\tchangeYear : true,\n\n\t\t\t});\n\t\t\tthis.$(\"#show_dashboard\").click(function() {\n\t\t\t\tself.show_dashboard();\n\t\t\t});\n\n\t\t\tthis.$(\"#close_button\").click(function() {\n\t\t\t\tframework.unblockUI();\n\t\t\t\twindow.location = '/web';\n\t\t\t});\n\n\t\t\tself.fetch('product.category', ['id', 'name', 'isroomtype', 'parent_id', 'child_id'], [['isroomtype', '=', true],['company_id','=',session.company_id]], {}).then(function(room_type) {\n\t\t\t\tfor (var i = 0; i < room_type.length; i++) {\n\t\t\t\t\t$(\"#room_type\").append($(\"<option>\", {\n\t\t\t\t\t\ttext : room_type[i].name,\n\t\t\t\t\t\tvalue : room_type[i].id\n\t\t\t\t\t}));\n\t\t\t\t}\n\t\t\t\tself.categories = room_type;\n\t\t\t});\n\n\t\t\tthis.$(document).tooltip({\n\n\t\t\t\tusing : function() {\n\t\t\t\t\treturn '<div style=\"color:red;\">' + this.title + '</div>';\n\t\t\t\t},\n\n\t\t\t\tshow : {\n\t\t\t\t\teffect : \"slideDown\",\n\t\t\t\t\tdelay : 500\n\t\t\t\t},\n\n\t\t\t\thide : {\n\t\t\t\t\teffect : \"slideUp\",\n\t\t\t\t\tdelay : 100\n\t\t\t\t},\n\n\t\t\t});\n\n\t\t\tself.fetch('sale.shop', ['id', 'name'], [], {}).then(function(shop) {\n\t\t\t\tfor (var i = 0; i < shop.length; i++) {\n\t\t\t\t\t$(\"#shops\").append($(\"<option>\", {\n\t\t\t\t\t\ttext : shop[i].name,\n\t\t\t\t\t\tvalue : shop[i].id\n\t\t\t\t\t}));\n\t\t\t\t}\n\n\t\t\t});\n\t\t},\n\n\t\trenderElement : function() {\n\t\t\tthis._super();\n\t\t},\n\n\t\tshow_dashboard : function() {\n\t\t\t$(\"#powered_by\").hide();\n\t\t\t$(\"#tbl_dashboard\").html(\"\");\n\t\t\tvar self = this;\n\t\t\tvar room_type=$(\"#room_type\").val()\n\t\t\tif (room_type == null) {\n\t\t\t\talert(\"Please Add room type\");\n\t\t\t\treturn false\n\t\t\t\t}\n\t\t\tif ($(\"#from_date\").val() == \"\") {\n\t\t\t\talert(\"Please Enter From Date\");\n\t\t\t\treturn true;\n\t\t\t} else if ($(\"#to_date\").val() == \"\") {\n\t\t\t\talert(\"Please Enter To Date\");\n\t\t\t\treturn true;\n\t\t\t}\n\n\n\n\t\t\tself.from_date = time.str_to_date($(\"#from_date\").val());\n\t\t\tself.to_date = time.str_to_date($(\"#to_date\").val());\n\t\t\tself.next_date = self.from_date;\n\t\t\tvar th = '<th width=\"100px\" height=\"27px\">Room No</th><th width=\"200px\"><div class=\"extra_div\"></div></th>';\n\t\t\tvar td;\n\t\t\tvar tdmonths = '<td  width=\"200px\" ><div class=\"extra_div\"></div></td>';\n\t\t\tif (self.from_date > self.to_date) {\n\t\t\t\talert(\"To Date must be greater than From Date\");\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\t$.when(this.load_data()).then(function() {\n\t\t\t\tself.selected_categ = new Array();\n\t\t\t\tself.fetch('product.category', ['id', 'name'], [['id', 'child_of', [parseInt($(\"#room_type\").val())]]], {}).then(function(child_ids) {\n//\t\t\t\t\tconsole.log(\"ccccccccccccccccccccccc\",child_ids)\n\t\t\t\t\tif (child_ids.length > 0) {\n\t\t\t\t\t\tfor (var ch = 0; ch < child_ids.length; ch++) {\n\t\t\t\t\t\t\tself.selected_categ.push(child_ids[ch].id);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t//*****************Creating Table headers**********************************\n\t\t\t\t\tvar cnt = 0;\n\t\t\t\t\twhile (self.next_date <= self.to_date) {\n\t\t\t\t\t\tvar prev_date = new Date(self.next_date);\n\t\t\t\t\t\tprev_date.setDate(prev_date.getDate() - 1);\n\t\t\t\t\t\tif (self.next_date.toDateString().substr(0, 3) == \"Sat\" || self.next_date.toDateString().substr(0, 3) == \"Sun\") {\n\t\t\t\t\t\t\tth = th + \"<th style='color:red;'>\" + self.next_date.toDateString().substr(0, 3) + \"<br/>\" + self.next_date.getDate() + \"</th>\";\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tth = th + \"<th>\" + self.next_date.toDateString().substr(0, 3) + \"<br/>\" + self.next_date.getDate() + \"</th>\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (self.next_date.getMonth() > prev_date.getMonth() || cnt == 0) {\n\t\t\t\t\t\t\ttdmonths = tdmonths + \"<td>\" + self.next_date.toDateString().substr(4, 4) + \"</td>\";\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttdmonths = tdmonths + \"<td></td>\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tself.next_date.setDate(self.next_date.getDate() + 1);\n\t\t\t\t\t\tcnt++;\n\t\t\t\t\t}\n\t\t\t\t\t$(\"#tbl_dashboard\").append(\"<tr>\" + \"<td>Months</td>\" + tdmonths + \"</tr>\");\n\t\t\t\t\t$(\"#tbl_dashboard\").append(\"<tr>\" + th + \"</tr>\");\n\t\t\t\t\tself.next_date.setDate(self.next_date.getDate() - cnt);\n\t\t\t\t\t//*****************End of Creating Table headers**********************************\n\t\t\t\t\t\n\t\t\t\t\t//*****************Adding Room Names**********************************************\n\n\t\t\t\t\tself.fetch('hotel.room', ['id', 'categ_id', 'product_id'], [['shop_id', '=', parseInt($('#shops').val())]], {}).then(function(room) {\n\t\t\t\t\t\tfor (var i = 0; i < room.length; i++) {\n\t\t\t\t\t\t\ttd = '<td width=\"200px\"><div class=\"extra_div\"></div></td>';\n\t\t\t\t\t\t\tvar count = 0;\n\t\t\t\t\t\t\twhile (self.next_date <= self.to_date) {\n//\t\t\t\t\t\t\t\tvar prod = self.get_product_list(room[i].product_id);\n\t\t\t\t\t\t\t\tvar prod = room[i].product_id[1];\n\t\t\t\t\t\t\t\tvar is_dirty_room = self.get_dirty_room(time.date_to_str(self.next_date), room[i].product_id);\n\t\t\t\t\t\t\t\tif (is_dirty_room == true) {\n\t\t\t\t\t\t\t\t\ttd = td + '<td>' + '<div class=\"room_dirty\" title=\"Unavailable/ Under Maintenance\" id=\"' + prod + '_' + time.date_to_str(self.next_date) + '\">**********</div></td>';\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\ttd = td + '<td>' + '<div class=\"room_available\" title=\"Available\" id=\"' + prod + '_' + time.date_to_str(self.next_date) + '\">**********</div></td>';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tself.next_date.setDate(self.next_date.getDate() + 1);\n\t\t\t\t\t\t\t\tcount++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tself.next_date.setDate(self.next_date.getDate() - count);\n\t\t\t\t\t\t\tif (self.selected_categ.indexOf(room[i].categ_id[0]) >= 0) {\n\t\t\t\t\t\t\t\t$(\"#tbl_dashboard\").append('<tr id=\"' + prod + '\">' + prod + '<td>' + prod + '</td>' + td + '</tr>');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}//for end\n\t\t\t\t\t\tif (self.reservations != null) {\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tfor (var res = 0; res < self.reservations.length; res++) {\n//\t\t\t\t\t\t\t    console.log(\"vvvvvvvvvvvvvvvvvvvvvvv\",self.reservations.length)\n\n\t\t\t\t\t\t\t\tvar res_lines = self.reservations[res].reservation_line;\n\t\t\t\t\t\t\t\tvar rline = 0;\n\t\t\t\t\t\t\t\tif (res_lines != null) {\n\n\t\t\t\t\t\t\t\t\tfor ( rline = 0; rline < res_lines.length; rline++) {\n\t\t\t\t\t\t\t\t\t\tvar line_info = self.get_reservation_line(res_lines[rline]);\n\t\t\t\t\t\t\t\t\t\tif (line_info != undefined) {\n\t\t\t\t\t\t\t\t\t\t\tif (self.selected_categ.indexOf(line_info.categ_id[0]) >= 0) {\n\t\t\t\t\t\t\t\t\t\t\t\tvar n_date = time.str_to_date(line_info.checkin.substr(0, 10));\n\t\t\t\t\t\t\t\t\t\t\t\tvar days = parseInt(line_info.number_of_days);\n\t\t\t\t\t\t\t\t\t\t\t\tvar cnt = 0;\n\t\t\t\t\t\t\t\t\t\t\t\tvar divid;\n\t\t\t\t\t\t\t\t\t\t\t\twhile (cnt <= days) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tdivid = line_info.room_number[1] + \"_\" + time.date_to_str(n_date);\n\t\t\t\t\t\t\t\t\t\t\t\t\tn_date.setDate(n_date.getDate() + 1);\n\n//\t\t\t\t\t\t\t\t\t\t\t\t\tconsole.log(\"divid:::::::::::::::::::@@@@@\",divid)\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t$(\"div[id='\" + divid + \"']\").html(self.reservations[res].reservation_no);\n\t\t\t\t\t\t\t\t\t\t\t\t\t$(\"div[id='\" + divid + \"']\").removeClass('room_available');\n\t\t\t\t\t\t\t\t\t\t\t\t\t$(\"div[id='\" + divid + \"']\").addClass('room_booked');\n\t\t\t\t\t\t\t\t\t\t\t\t\tconsole.log(\"trickyyyyyyyyyyyyyyyyyyyyyyyyy\",$(\"div[id='\" + divid + \"']\").hasClass(\"room_dirty\"))\n\t\t\t\t\t\t\t\t\t\t\t\t\tif ($(\"div[id='\" + divid + \"']\").hasClass(\"room_dirty\")) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t$(\"div[id='\" + divid + \"']\").removeClass('room_available');\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t$(\"div[id='\" + divid + \"']\").addClass('room_booked_and_dirty');\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t$(\"div[id='\" + divid + \"']\").addClass(self.reservations[res].state);\n\t\t\t\t\t\t\t\t\t\t\t\t\tvar guests;\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (res_lines.id_line_ids != undefined) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tguests = self.get_guest_details(res_lines);\n\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tguests = false;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tvar tooltip_text = \"<table class='tooltip_table'><tr>\" \n\t\t\t\t\t\t\t\t\t\t\t\t\t + \"<td >\" + \"Reservation No :\" + \"</td><td>\" + self.reservations[res].reservation_no + \"</td></tr>\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t + \"<tr><td>\" + \"Checkin Date :\" + \"</td><td>\" + time.str_to_datetime(line_info.checkin).toString() + \"</td></tr>\" \n\t\t\t\t\t\t\t\t\t\t\t\t\t + \"<tr><td>\" + \"Checkout Date :\" + \"</td><td>\" + time.str_to_datetime(line_info.checkout).toString() + \"</td></tr>\" \n\t\t\t\t\t\t\t\t\t\t\t\t\t + \"<tr><td>\" + \"Customer :\" + \"</td><td>\" + self.reservations[res].partner_id[1] + \"</td></tr>\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t + \"<tr><td>\" + \"Status :\" + \"</td><td>\" + self.reservations[res].state + \"</td></tr>\";\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (guests != false) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttooltip_text += \"<tr><td>\" + \"Guest Details :\" + \"</td><td></td></tr>\" + \"<tr><td colspan='2'>\" + guests + \"</td></tr>\" + \"</table>\";\n\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttooltip_text += \"</table>\";\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tif ($(\"div[id='\" + divid + \"']\").length > 0) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif ($(\"div[id='\"+ divid +\"']\")[0].title == \"Available\") {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t$(\"div[id='\"+ divid +\"']\")[0].title = \"\";\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t$(\"div[id='\"+ divid +\"']\")[0].title += $(tooltip_text).html();\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (cnt == 0) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t$(\"div[id='\" + divid + \"']\").addClass('booking_start');\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (cnt == days - 1) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t$(\"div[id='\" + divid + \"']\").addClass('booking_end');\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tcnt++;\n\t\t\t\t\t\t\t\t\t\t\t\t\t//setting background color to div tooltip\n\t\t\t\t\t\t\t\t\t\t\t\t\t//Setting Tooltip on Div\n\t\t\t\t\t\t\t\t\t\t\t\t\t$(\"div[id='\" + divid + \"']\").tooltip({\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tusing : function() {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn '<div>' + this.title + '</div>';\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tshow : {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\teffect : \"slideDown\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdelay : 1000\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\thide : {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\teffect : \"slideUp\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdelay : 100\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t\t\t}// while end\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}//main for of self.reservations.length\n\t\t\t\t\t\t\t$(\".room_booked\").dblclick(function(ev){\n\n//\t\t\t\t\t\t\tconsole.log(\"room_booked::::::::::::::::::::::::::::::dblclick\",ev.currentTarget.innerHTML)\n\t\t\t\t\t\t\tvar res_info = self.get_reservation(ev.currentTarget.innerHTML);\n\t\t\t\t\t\t\tvar view_ids=self.get_view_id();\n\t\t\t\t\t\t\tself.do_action({\n\t\t\t\t\t\t\tname: _t(\"Hotel Reservation\"),\n\t\t\t\t\t\t\tres_model: 'hotel.reservation',\n\t\t\t\t\t\t\tviews: [[view_ids, 'form']],\n\t\t\t\t\t\t\tres_id:res_info.id,\n\t\t\t\t\t\t\tview_mode:['form'],\n\t\t\t\t\t\t\ttype: 'ir.actions.act_window',\n\t\t\t\t\t\t\ttarget: \"new\",\n\n\t\t\t\t\t\t\tcontext: {},\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});//room booked dbclick end\n\n\t\t\t\t\t\t\t$(\".room_booked\").hover(function(ev) {\n//\t\t\t\t\t\t\t    console.log(\"room_booked::::::::::::::::::::::::::::::hover\")\n\t\t\t\t\t\t\t\tvar res_info = self.get_reservation(ev.currentTarget.innerHTML);\n\t\t\t\t\t\t\t\tvar elements = document.getElementsByClassName(\"room_booked\");\n\t\t\t\t\t\t\t\tfor (var ele = 0; ele < elements.length; ele++) {\n\t\t\t\t\t\t\t\t\tif (elements[ele].innerHTML == res_info.reservation_no) {\n\t\t\t\t\t\t\t\t\t\t$(\"div[id='\" + elements[ele].id + \"']\").addClass(\"highlight_booked\");\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t$(this).addClass(\"highlight_booked\");\n\t\t\t\t\t\t\t}, function(ev) {\n\t\t\t\t\t\t\t\tvar res_info = self.get_reservation(ev.currentTarget.innerHTML);\n\t\t\t\t\t\t\t\tvar elements = document.getElementsByClassName(\"room_booked\");\n\t\t\t\t\t\t\t\tfor (var ele = 0; ele < elements.length; ele++) {\n\t\t\t\t\t\t\t\t\tif (elements[ele].innerHTML == res_info.reservation_no) {\n\t\t\t\t\t\t\t\t\t\t$(\"div[id='\" + elements[ele].id + \"']\").removeClass(\"highlight_booked\");\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t$(this).removeClass(\"highlight_booked\");\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t//end room booked hover\n\t\t\t\t\t\t\tvar isMouseDown = false;\n\t\t\t\t\t\t\t$(\".room_available\").mousedown(function() {\n\t\t\t\t\t\t\t\tvar today = new Date();\n\t\t\t\t\t\t\t\tvar month='';\n\t\t\t\t\t\t\t\tvar day=''\n\n\t\t\t\t\t\t\t\tif (today.getMonth().toString().length < 2)\n\t\t\t\t\t\t\t\t    {\n                                    month = '0' + (today.getMonth()+1);\n                                    }\n                                else\n                                    {\n                                    month=(today.getMonth()+1)\n\n                                    }\n\n\n                                if (today.getDate().toString().length < 2)\n                                    {\n                                            day = '0' + today.getDate();\n                                    }\n\n                                else\n                                    {\n                                        day =today.getDate()\n\n                                    }\n\n\n                                var date = today.getFullYear()+'-'+(month)+'-'+(day);\n                                var time = today.getHours() + \":\" + today.getMinutes() + \":\" + today.getSeconds();\n\n\n\n\t\t\t\t\t\t\t\tisMouseDown = true;\n\t\t\t\t\t\t\t\tvar id_str = this.id.toString();\n\t\t\t\t\t\t\t\tvar date1=date.toString()\n\t\t\t\t\t\t\t\tvar today_date=(id_str.slice(id_str.length - 10, id_str.length)).toString()\n\t\t\t\t\t\t\t\tvar selected_date = new Date(id_str.slice(id_str.length - 10, id_str.length));\n\n\n\n\t\t\t\t\t\t\t\tvar sk=new Date().toString()\n\n\t\t\t\t\t\t\t\tif (date1==today_date)\n\t\t\t\t\t\t\t\t{\n\n\t\t\t\t\t\t\t\t$(this).removeClass(\"room_available\");\n\t\t\t\t\t\t\t\t\t$(this).addClass(\"room_booked\");\n\t\t\t\t\t\t\t\t\tif (self.booking_data.indexOf(this.id) < 0) {\n\t\t\t\t\t\t\t\t\t\tself.booking_data.push(this.id);\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t{\n\n                                    if (selected_date < new Date()) {\n                                        isMouseDown = false;\n\n                                        alert('You can not book the room for this date!');\n                                    } else {\n                                        $(this).removeClass(\"room_available\");\n                                        $(this).addClass(\"room_booked\");\n                                        if (self.booking_data.indexOf(this.id) < 0) {\n                                            self.booking_data.push(this.id);\n                                        }\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t//end room available mousedown\n\n\t\t\t\t\t\t\t$(\".room_available\").mouseover(function() {\n\t\t\t\t\t\t\t\tif (isMouseDown) {\n\t\t\t\t\t\t\t\t\tif (self.booking_data.indexOf(this.id) < 0) {\n\t\t\t\t\t\t\t\t\t\tself.booking_data.push(this.id);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t$(this).removeClass(\"room_available\");\n\t\t\t\t\t\t\t\t\t$(this).addClass(\"room_booked\");\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t//end  room_available mouseover\n\n\t\t\t\t\t\t\t//**************Book new Reservation**********************\n\t\t\t\t\t\t\t$(\".room_available\").mouseup(function() {\n\t\t\t\t\t\t\t    console.log(\"mouseup::::::::::::::::::::::::::::\",self.booking_data)\n\t\t\t\t\t\t\t\tif (self.booking_data.length > 0) {\n\t\t\t\t\t\t\t\t\tself.booking_data.sort();\n\t\t\t\t\t\t\t\t\tvar view_ids=self.get_view_id();\n\t\t\t\t\t\t\t\t\tself.do_action({\n\t\t\t\t\t\t\t\t\t\tname : _t(\"Hotel Reservation\"),\n\t\t\t\t\t\t\t\t\t\tres_model : 'hotel.reservation',\n\t\t\t\t\t\t\t\t\t\tviews : [[view_ids, 'form']],\n\n\t\t\t\t\t\t\t\t\t\ttype : 'ir.actions.act_window',\n\n\t\t\t\t\t\t\t\t\t\ttarget : \"new\",\n\t\t\t\t\t\t\t\t\t\tcontext : {\n\t\t\t\t\t\t\t\t\t\t\t'booking_data' : self.booking_data,\n\t\t\t\t\t\t\t\t\t\t\t'shop' : parseInt($(\"#shops\").val())\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tflags : {\n\t\t\t\t\t\t\t\t\t\t\taction_buttons : true,\n\t\t\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t$(\"#show_dashboard\").trigger('click');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tself.booking_data = new Array();\n\t\t\t\t\t\t\t\tisMouseDown = false;\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t// end room_available mouseup\n\n\t\t\t\t\t\t\t$(document).mouseup(function() {\n\t\t\t\t\t\t\t\tisMouseDown = false;\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t//end doc\n\n\t\t\t\t\t\t}\t//end reservation if\n\n\t\t\t\t\t});\n\t\t\t\t\t//end fetch hotel.room\n\n\t\t\t\t\t//*****************End Adding Rooms*******************************************************\n\n\t\t\t\t});\n\t\t\t\t//end fetch product category\n\n\t\t\t});\n\t\t\t//end load_data\n\n\t\t}, //end show dashboard\n\n\t\tfetch : function(model, fields, domain, ctx) {\n//\t\t\treturn new Models(model).query(fields).filter(domain).context(ctx).all();\n\t\t\tvar domain = domain;\n\t\t\treturn this._rpc({\n                    model: model,\n                    method: 'search_read',\n                    domain: domain,\n                    fields: fields,\n                })\n\t\t},\n\n\t\tget_reservation_line : function(line_id) {\n\n//\t\t    console.log(\"innnnnnnnnnnnnnnnnnnnnnnnnnnnnn1\")\n\n\n\t\t\tfor (var rline = 0; rline < this.reservation_lines.length; rline++) {\n\t\t\t\tif (this.reservation_lines[rline].id == line_id) {\n\t\t\t\t\treturn this.reservation_lines[rline];\n\t\t\t\t}\n\t\t\t}\n\n\t\t},\n\n\t\tget_reservation : function(res_name) {\n//\t\t    console.log(\"innnnnnnnnnnnnnnnnnnnnnnnnnnnnn2\")\n\t\t\tfor (var rline = 0; rline < this.reservations.length; rline++) {\n\t\t\t\tif (this.reservations[rline].reservation_no == res_name) {\n\t\t\t\t\treturn this.reservations[rline];\n\t\t\t\t}\n\t\t\t}\n\n\t\t},\n\n\t\tget_guest_info : function(guest_id) {\n\t\t\tvar self = this;\n\t\t\tvar guests_info = self.guest_details;\n\t\t\tfor (var guest = 0; guest < guests_info.length; guest++) {\n\t\t\t\tif (guest_id == guests_info[guest].id) {\n\t\t\t\t\treturn guests_info[guest];\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tget_guest_details : function(res_line) {\n\t\t\tvar self = this;\n\t\t\tvar id_details = reservations.id_line_ids;\n\t\t\tvar guest_info;\n\t\t\tvar guest_details = \"<table class='tbl_guest_details'><tr><th>Guest Name</th>\" + \"<th>Gender</th>\" + \"<th>Id Card No.</th>\" + \"<th>Doc. Type</th>\";\n\t\t\tfor (var id = 0; id < id_details.length; id++) {\n\t\t\t\tguest_info = self.get_guest_info(id_details[id]);\n\t\t\t\tguest_details += \"<tr><td>\" + guest_info.partner_name + \"</td>\" + \"<td>\" + guest_info.gender + \"</td>\" + \"<td>\" + guest_info.name + \"</td>\" + \"<td>\" + guest_info.client_id[1] + \"</td></tr>\";\n\t\t\t}\n\t\t\tguest_details += \"</table>\";\n\t\t\treturn guest_details;\n\t\t},\n\n\t\t//\t**********************************Fetching required records from Database*******************************************\n\n\t\tload_data : function() {\n\t\t\tvar self = this;\n\t\t\tvar loaded = self.fetch('hotel.reservation.line', ['id', 'room_number', 'categ_id',  'checkin', 'checkout', 'number_of_days'], ['&', ['line_id', '!=', false], ['checkin', '<=', $(\"#to_date\").val()]], {}).then(function(res_lines) {\n\t\t\t\tself.reservation_lines = res_lines;\n\t\t\t\treturn self.fetch('hotel.reservation', ['id', 'reservation_no', 'reservation_line', 'state','id_line_ids','partner_id'], [['state', 'not in', ['cancel']]], {});\n\t\t\t}).then(function(reservation) {\n\t\t\t\tself.reservations = reservation;\n\t\t\t\treturn self.fetch('hotel.resv.id.details', ['id', 'name', 'partner_name', 'gender', 'country_id', 'date_birth', 'client_id'], [], [], {});\n\t\t\t}).then(function(guest_details) {\n\t\t\t\tself.guest_details = guest_details;\n\t\t\t\treturn self.fetch('hotel.housekeeping', ['id', 'current_date', 'end_date', 'room_no', 'state'], [['state', 'in', ['dirty']], ['current_date', '>=', $(\"#from_date\").val()]], {});\n\t\t\t}).then(function(housekeeping_details) {\n\t\t\t\tself.housekeeping_lines = housekeeping_details;\n\t\t\t\treturn self.fetch('product.product', ['id', 'product_tmpl_id'], [], [], {});\n\t\t\t}).then(function(productlines) {\n\t\t\t\tself.product_lines = productlines;\n\t\t\t\treturn self.fetch('ir.ui.view', ['id', 'name','model','type'], [['name', '=', 'hotel.reservation.form1'],['model', '=', 'hotel.reservation'],['type','=','form']], {});\n\t\t\t}).then(function(views) {\n\t\t\t\tself.view_ids = views;\n\t\t\t});\n\t\t\treturn loaded;\n\t\t},\n\t\t//*********************************************************************************************************************************\n\n\t\tget_dirty_room : function(compare_date, product_id) {\n\t\t\t\n\t\t\tfor (var hline = 0; hline < this.housekeeping_lines.length; hline++) {\n\t\t\t\tif (this.housekeeping_lines[hline].room_no[0] == product_id[0]) {\n\t\t\t\t\tif ((this.housekeeping_lines[hline].current_date <= compare_date) && (compare_date <= this.housekeeping_lines[hline].end_date)) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\n\t\t\n\t\t/*get_product_list : function(product_id) {\n\t\t\tfor (var pline = 0; pline < this.product_lines.length; pline++) {\n\t\t\t\tif (this.product_lines[pline].id == product_id[0]) {\n\t\t\t\t\treturn this.product_lines[pline].name_template;\n\t\t\t\t}\n\t\t\t}\n\t\t},*/\n\t\t\n\t\tget_view_id : function() {\n\t\t\treturn this.view_ids[0].id;\n\t\t\t\n\t\t},\n\t\t\t\n\t});\n\n\tcore.action_registry.add('room.dashboard.ui', RoomDashboardView);\n\treturn {\n\t\tRoomDashboardView : RoomDashboardView,\n\t};\n});\n", "odoo.define(\"hotel_room_dashboard_view.dashboard_hotel\", function (require) {\n    \"use strict\";\n    var core = require(\"web.core\");\n    var Widget = require(\"web.Widget\");\n    var AbstractAction = require(\"web.AbstractAction\");\n    var datepicker = require(\"web.datepicker\");\n    var time = require(\"web.time\");\n    var framework = require(\"web.framework\");\n    var session = require(\"web.session\");\n    var _t = core._t;\n    var _lt = core._lt;\n    var QWeb = core.qweb;\n    var Class = core.Class;\n\n    var rpc = require(\"web.rpc\");\n    var ajax = require(\"web.ajax\");\n    var dialogs = require(\"web.view_dialogs\");\n    var field_utils = require(\"web.field_utils\");\n    var field_registry = require(\"web.field_registry\");\n    var field_utils = require(\"web.field_utils\");\n    var _lt = core._lt;\n    //    var search_inputs = require('web.search_inputs');\n    //    var config = require('web.config');\n    var Domain = require(\"web.Domain\");\n    //    var DropdownMenu = require('web.DropdownMenu');\n    var context = {};\n    var id_id = false;\n    var self = this;\n    var HotelDashboardView = AbstractAction.extend({\n        template: \"hotel_dashboard_template\",\n\n        init: function (parent, options) {\n            console.log(\"INit \");\n            this._super(parent, options);\n            options = options || {};\n            var self = this;\n            this.reservation_lines = null;\n            this.reservations = null;\n\n            this.reservation_lines1 = null;\n            this.reservations1 = null;\n            this.hotel_room = null;\n            this.booking_data = new Array();\n            this.categories;\n            this.product_lines;\n            this.product_template_lines;\n            this.selected_categ = new Array();\n            this.selected_categ_room = new Array();\n            this.guest_details = new Array();\n            this.housekeeping_lines = new Array();\n            this.folio_id = null;\n            this.view_ids;\n            this.value = null;\n            this.items = [];\n            self.event_data = false;\n            self.configuration_time = 0;\n            self.time_diff = 0;\n            self.checkout_policy_name = \"\";\n        },\n\n        start: function () {\n            var self = this;\n            self.renderElement();\n            self._super.apply(this, arguments);\n            self.fetch(\"sale.shop\", [\"id\", \"name\"], [], {}).then(function (\n                shop\n            ) {\n                $(\"#shops option[value='1']\").remove();\n                for (var i = 0; i < shop.length; i++) {\n                    console.log(shop[i]);\n                    $(\"#shops\").append(\n                        $(\"<option>\", {\n                            text: shop[i].name,\n                            value: shop[i].id,\n                        })\n                    );\n                }\n                self.load_hotel_function();\n                var shop_id = $(\"#shops option:selected\").val();\n                console.log(\"ssssssssssfffffffff\", shop_id);\n                $.ajax({\n                    url: \"/get/checkout/configuration\",\n                    data: { shop_id: shop_id },\n                }).then(function (resp) {\n                    console.log(\"RESPONSE==>>>\", resp);\n                    resp = JSON.parse(resp);\n                    console.log(\n                        \"CHECKOUT TIME===>>>>>>>>>>>>>>\",\n                        resp[\"checkout_time\"]\n                    );\n                    self.configuration_time = parseInt(resp[\"checkout_time\"]);\n                    self.time_diff = resp[\"time_difference\"];\n                    self.checkout_policy_name = resp[\"checkout_policy_name\"];\n                });\n            });\n        },\n\n        load_hotel_function: function (e) {\n            var self = this;\n            var domain = [];\n            self.hotel_dashboard_view(domain);\n            $(\"#booking_calendar\").fullCalendar(\"removeEvents\");\n            $(\"#booking_calendar\").fullCalendar(\"renderEvent\", self.event_data);\n            $(\"#booking_calendar\").fullCalendar(\n                \"addEventSource\",\n                self.event_data\n            );\n            $(\"#booking_calendar\").fullCalendar(\"refetchEvents\");\n            $(\"#shops\").change(function (e) {\n                var hotel_id = $(\"#shops\").val();\n                $(\"#booking_calendar\").fullCalendar(\"destroy\");\n                self.hotel_dashboard_view();\n            });\n            $(\"#dashboard_reload\").on(\"click\", function (e) {\n                $('[data-toggle=\"popover\"]').each(function () {\n                    if (\n                        !$(this).is(e.target) &&\n                        $(this).has(e.target).length === 0 &&\n                        $(\".popover\").has(e.target).length === 0\n                    ) {\n                        $(this).popover(\"hide\");\n                    }\n                });\n                var list_of_cls_name = e.target.className;\n                var x = \"fc-prev-button\";\n                var y = \"fc-next-button\";\n                var z = \"fc-month-button\";\n                var w = \"fc-customWeek-button\";\n                var t = \"fc-today-button\";\n                if (\n                    !(\n                        list_of_cls_name.includes(x) ||\n                        list_of_cls_name.includes(y) ||\n                        list_of_cls_name.includes(z) ||\n                        list_of_cls_name.includes(w) ||\n                        list_of_cls_name.includes(t)\n                    )\n                ) {\n                    $(\"#booking_calendar\").fullCalendar(\"destroy\");\n                    self.hotel_dashboard_view();\n                    $(\".fc-divider\")\n                        .find(\".fc-cell-content\")\n                        .addClass(\"fc-expander\");\n                    $(\".popover\").popover(\"hide\");\n                }\n            });\n        },\n\n        hotel_dashboard_view: function (moment_date) {\n            var self = this;\n            var resourceList = false;\n            var eventList = false;\n            var room_type_list_data = [];\n            var room_data_event_list = [];\n            var ml = [];\n            var data = {};\n            var room_k = false;\n            var room_dirty = false;\n            var remaining = false;\n            var vals_folio_id = false;\n\n            $.when(this.load_hotel()).then(function () {\n                self.selected_categ = new Array();\n                self.selected_categ_room = new Array();\n                var shop_id = $(\"#shops option:selected\").val();\n                for (var res = 0; res < self.hotel_room.length; res++) {\n                    console.log(self.hotel_room[res], shop_id);\n                    if (\n                        parseInt(self.hotel_room[res].shop_id[0]) ===\n                        parseInt(shop_id)\n                    ) {\n                        self.selected_categ.push({\n                            id: self.hotel_room[res].product_id[0],\n                            building: self.hotel_room[res].categ_id[1],\n                            room: self.hotel_room[res].name,\n                        });\n                    }\n\n                    var today = new Date();\n                    var Today = moment(today).format(\"YYYY-MM-DD\");\n                    for (var hline = 0; hline < self.housekeeping_lines.length; hline++) {\n                        if(self.housekeeping_lines[hline].room_no[0] == self.hotel_room[res].product_id[0] ) {\n                            if (self.housekeeping_lines[hline].current_date >= Today && Today <= self.housekeeping_lines[hline].end_date ) {\n                                // var startd = moment(\n                                //     self.housekeeping_lines[hline].current_date,\n                                //     \"YYYY-MM-DD HH:mm:ss\"\n                                // ).add(self.time_diff, \"seconds\");\n                                // var endd = moment(\n                                //     self.housekeeping_lines[hline].end_date,\n                                //     \"YYYY-MM-DD HH:mm:ss\"\n                                // ).add(self.time_diff, \"seconds\");\n                                var startd=moment( self.housekeeping_lines[hline].current_date+' 05:30:00', \"YYYY-MM-DD HH:mm:ss\").add(self.time_diff, \"seconds\");\n                                var endd=moment(self.housekeeping_lines[hline].end_date+' 05:30:00', \"YYYY-MM-DD HH:mm:ss\").add(self.time_diff, \"seconds\");\n                                if (self.housekeeping_lines[hline].quality == \"clean\") {\n                                    self.selected_categ_room.push({\n                                        title: \"Unavailable/ Under Cleaning\",\n                                        description:\n                                            \"Unavailable/ Under Cleaning\",\n                                        // start: moment(self.housekeeping_lines[hline].current_date+' 05:30:00', \"YYYY-MM-DD HH:mm:ss\").add(self.time_diff, \"seconds\"),\n                                        // end: moment(self.housekeeping_lines[hline].end_date+' 05:30:00', \"YYYY-MM-DD HH:mm:ss\").add(self.time_diff, \"seconds\"),\n                                        start: startd.toString(),\n                                        end: endd.toString(),\n                                        resourceIds: [\n                                            self.hotel_room[res].product_id[0],\n                                        ],\n                                        color: \"black\",\n                                        partner_id: false,\n                                        state: self.housekeeping_lines[hline]\n                                            .state,\n\n                                        checkin: moment(startd).format(\n                                            \"YYYY-MM-DD HH:mm:ss\"\n                                        ),\n                                        checkout: moment(endd).format(\n                                            \"YYYY-MM-DD HH:mm:ss\"\n                                        ),\n\n                                        room_number:\n                                            self.housekeeping_lines[hline]\n                                                .room_no,\n                                        // resourceEditable: false,\n                                        // disableResizing: false,\n                                    });\n                                } \n                                else if(self.housekeeping_lines[hline].quality == \"ooo\")\n                                {\n                                    self.selected_categ_room.push({\n                                        title: \"Unavailable/ Out Of Order\",\n                                        description:\n                                            \"Unavailable/ Out Of Order\",\n                                        // start: moment( self.housekeeping_lines[hline].current_date+' 05:30:00', \"YYYY-MM-DD HH:mm:ss\").add(self.time_diff, \"seconds\"),\n                                        // end: moment(self.housekeeping_lines[hline].end_date+' 05:30:00', \"YYYY-MM-DD HH:mm:ss\").add(self.time_diff, \"seconds\"),\n                                        start: startd.toString(),\n                                        end: endd.toString(),\n                                        resourceIds: [\n                                            self.hotel_room[res].product_id[0],\n                                        ],\n                                        color: \"#FF9800\",\n                                        partner_id: false,\n                                        state: self.housekeeping_lines[hline]\n                                            .state,\n\n                                        checkin: moment(startd).format(\n                                            \"YYYY-MM-DD HH:mm:ss\"\n                                        ),\n                                        checkout: moment(endd).format(\n                                            \"YYYY-MM-DD HH:mm:ss\"\n                                        ),\n\n                                        room_number:\n                                            self.housekeeping_lines[hline]\n                                                .room_no,\n                                    });\n                                }\n                                else if(self.housekeeping_lines[hline].quality == \"oos\")\n                                {\n                                    self.selected_categ_room.push({\n                                        title: \"Unavailable/ Out Of Service\",\n                                        description:\n                                            \"Unavailable/ Out of Service\",\n                                        // start: moment( self.housekeeping_lines[hline].current_date+' 05:30:00', \"YYYY-MM-DD HH:mm:ss\").add(self.time_diff, \"seconds\"),\n                                        // end: moment(self.housekeeping_lines[hline].end_date+' 05:30:00', \"YYYY-MM-DD HH:mm:ss\").add(self.time_diff, \"seconds\"),\n                                        start: startd.toString(),\n                                        end: endd.toString(),\n                                        resourceIds: [\n                                            self.hotel_room[res].product_id[0],\n                                        ],\n                                        color: \"#FF5722\",\n                                        partner_id: false,\n                                        state: self.housekeeping_lines[hline]\n                                            .state,\n\n                                        checkin: moment(startd).format(\n                                            \"YYYY-MM-DD HH:mm:ss\"\n                                        ),\n                                        checkout: moment(endd).format(\n                                            \"YYYY-MM-DD HH:mm:ss\"\n                                        ),\n\n                                        room_number:\n                                            self.housekeeping_lines[hline]\n                                                .room_no,\n                                    });\n                                }\n                                else \n                                {\n                                    self.selected_categ_room.push({\n                                        title: \"Unavailable/ Under Maintenance\",\n                                        description:\n                                            \"Unavailable/ Under Maintenance\",\n                                        // start: moment( self.housekeeping_lines[hline].current_date+' 05:30:00', \"YYYY-MM-DD HH:mm:ss\").add(self.time_diff, \"seconds\"),\n                                        // end: moment(self.housekeeping_lines[hline].end_date+' 05:30:00', \"YYYY-MM-DD HH:mm:ss\").add(self.time_diff, \"seconds\"),\n                                        start: startd.toString(),\n                                        end: endd.toString(),\n                                        resourceIds: [\n                                            self.hotel_room[res].product_id[0],\n                                        ],\n                                        color: \"purple\",\n                                        partner_id: false,\n                                        state: self.housekeeping_lines[hline]\n                                            .state,\n\n                                        checkin: moment(startd).format(\n                                            \"YYYY-MM-DD HH:mm:ss\"\n                                        ),\n                                        checkout: moment(endd).format(\n                                            \"YYYY-MM-DD HH:mm:ss\"\n                                        ),\n\n                                        room_number:\n                                            self.housekeeping_lines[hline]\n                                                .room_no,\n                                    });\n                                }\n                            }\n                        }\n                    }\n                }\n                for (\n                    var res_line_id = 0;\n                    res_line_id < self.reservation_lines1.length;\n                    res_line_id++\n                ) {\n                    room_dirty = false;\n                    for (\n                        var res_line = 0;\n                        res_line < self.reservations1.length;\n                        res_line++\n                    ) {\n                        if (\n                            self.reservations1[res_line].id ==\n                            self.reservation_lines1[res_line_id].line_id[0]\n                        ) {\n                            if (self.reservations1[res_line].state == \"done\") {\n                                remaining = false;\n                                vals_folio_id = false;\n                                for (\n                                    var res = 0;\n                                    res < self.folio_id.length;\n                                    res++\n                                ) {\n                                    if (\n                                        self.reservations1[res_line].id ==\n                                        self.folio_id[res].reservation_id[0]\n                                    ) {\n                                        remaining =\n                                            self.folio_id[res].remaining_amt;\n                                        if (\n                                            self.folio_id[res].state ==\n                                            \"check_out\"\n                                        ) {\n                                            vals_folio_id = true;\n                                        }\n                                    }\n                                }\n\n                                if (vals_folio_id == true) {\n                                    var checkin = moment(\n                                        self.reservation_lines1[res_line_id]\n                                            .checkin,\n                                        \"YYYY-MM-DD HH:mm:ss\"\n                                    ).add(self.time_diff, \"seconds\");\n                                    var checkout = moment(\n                                        self.reservation_lines1[res_line_id]\n                                            .checkout,\n                                        \"YYYY-MM-DD HH:mm:ss\"\n                                    ).add(self.time_diff, \"seconds\");\n\n                                    //---- Logic to manage the slot booking in calendar dashboard ---\n\n                                    var cout = moment(\n                                        self.reservation_lines1[res_line_id]\n                                            .checkout,\n                                        \"YYYY-MM-DD HH:mm:ss\"\n                                    ).add(self.time_diff, \"seconds\");\n\n                                    //----------- Logic Ended -------------\n\n                                    self.selected_categ_room.push({\n                                        title:\n                                            self.reservations1[res_line]\n                                                .reservation_no +\n                                            self.reservations1[res_line]\n                                                .partner_id[1] +\n                                            \"[\" +\n                                            remaining +\n                                            \"]\",\n                                        description:\n                                            self.reservations1[res_line]\n                                                .reservation_no,\n                                        start: self.reservation_lines1[\n                                            res_line_id\n                                        ].checkin,\n                                        // end: self.reservation_lines1[\n                                        //     res_line_id\n                                        // ].checkout,\n                                        end: cout.toString(),\n                                        resourceIds: [\n                                            self.reservation_lines1[res_line_id]\n                                                .room_number[0],\n                                        ],\n                                        color: \"royalBlue\",\n                                        partner_id:\n                                            self.reservations1[res_line]\n                                                .partner_id,\n                                        state: self.reservations1[res_line]\n                                            .state,\n\n                                        checkin: moment(checkin).format(\n                                            \"YYYY-MM-DD HH:mm:ss\"\n                                        ),\n                                        checkout: moment(checkout).format(\n                                            \"YYYY-MM-DD HH:mm:ss\"\n                                        ),\n\n                                        room_number:\n                                            self.reservation_lines1[res_line_id]\n                                                .room_number,\n                                    });\n                                } else {\n                                    var checkin = moment(\n                                        self.reservation_lines1[res_line_id]\n                                            .checkin,\n                                        \"YYYY-MM-DD HH:mm:ss\"\n                                    ).add(self.time_diff, \"seconds\");\n                                    var checkout = moment(\n                                        self.reservation_lines1[res_line_id]\n                                            .checkout,\n                                        \"YYYY-MM-DD HH:mm:ss\"\n                                    ).add(self.time_diff, \"seconds\");\n\n                                    //---- Logic to manage the slot booking in calendar dashboard ---\n\n                                    var cout = moment(\n                                        self.reservation_lines1[res_line_id]\n                                            .checkout,\n                                        \"YYYY-MM-DD HH:mm:ss\"\n                                    ).add(self.time_diff, \"seconds\");\n\n                                    //----------- Logic Ended -------------\n\n                                    self.selected_categ_room.push({\n                                        title:\n                                            self.reservations1[res_line]\n                                                .reservation_no +\n                                            self.reservations1[res_line]\n                                                .partner_id[1] +\n                                            \"[\" +\n                                            remaining +\n                                            \"]\",\n                                        description:\n                                            self.reservations1[res_line]\n                                                .reservation_no,\n                                        start: self.reservation_lines1[\n                                            res_line_id\n                                        ].checkin,\n                                        // end: self.reservation_lines1[\n                                        //     res_line_id\n                                        // ].checkout,\n                                        end: cout.toString(),\n                                        resourceIds: [\n                                            self.reservation_lines1[res_line_id]\n                                                .room_number[0],\n                                        ],\n                                        color: \"red\",\n                                        partner_id:\n                                            self.reservations1[res_line]\n                                                .partner_id,\n                                        state: self.reservations1[res_line]\n                                            .state,\n\n                                        checkin: moment(checkin).format(\n                                            \"YYYY-MM-DD HH:mm:ss\"\n                                        ),\n                                        checkout: moment(checkout).format(\n                                            \"YYYY-MM-DD HH:mm:ss\"\n                                        ),\n\n                                        room_number:\n                                            self.reservation_lines1[res_line_id]\n                                                .room_number,\n                                    });\n                                }\n                            } else if (\n                                self.reservations1[res_line].state == \"confirm\"\n                            ) {\n                                var checkin = moment(\n                                    self.reservation_lines1[res_line_id]\n                                        .checkin,\n                                    \"YYYY-MM-DD HH:mm:ss\"\n                                ).add(self.time_diff, \"seconds\");\n                                var checkout = moment(\n                                    self.reservation_lines1[res_line_id]\n                                        .checkout,\n                                    \"YYYY-MM-DD HH:mm:ss\"\n                                ).add(self.time_diff, \"seconds\");\n\n                                //---- Logic to manage the slot booking in calendar dashboard ---\n\n                                var cout = moment(\n                                    self.reservation_lines1[res_line_id]\n                                        .checkout,\n                                    \"YYYY-MM-DD HH:mm:ss\"\n                                ).add(self.time_diff, \"seconds\");\n\n                                //----------- Logic Ended -------------\n\n                                self.selected_categ_room.push({\n                                    title:\n                                        self.reservations1[res_line]\n                                            .reservation_no +\n                                        self.reservations1[res_line]\n                                            .partner_id[1] +\n                                        \"[\" +\n                                        [\n                                            self.reservations1[res_line]\n                                                .total_cost1 -\n                                                self.reservations1[res_line]\n                                                    .deposit_cost2,\n                                        ] +\n                                        \"]\",\n                                    description:\n                                        self.reservations1[res_line]\n                                            .reservation_no,\n                                    start: self.reservation_lines1[res_line_id]\n                                        .checkin,\n                                    // end: self.reservation_lines1[res_line_id]\n                                    //     .checkout,\n                                    end: cout.toString(),\n                                    resourceIds: [\n                                        self.reservation_lines1[res_line_id]\n                                            .room_number[0],\n                                    ],\n                                    color: \"#A6A6A6\",\n                                    partner_id:\n                                        self.reservations1[res_line].partner_id,\n                                    state: self.reservations1[res_line].state,\n                                    checkin: moment(checkin).format(\n                                        \"YYYY-MM-DD HH:mm:ss\"\n                                    ),\n                                    checkout: moment(checkout).format(\n                                        \"YYYY-MM-DD HH:mm:ss\"\n                                    ),\n\n                                    room_number:\n                                        self.reservation_lines1[res_line_id]\n                                            .room_number,\n                                });\n                            } else if (\n                                self.reservations1[res_line].state == \"draft\"\n                            ) {\n                                var checkin = moment(\n                                    self.reservation_lines1[res_line_id]\n                                        .checkin,\n                                    \"YYYY-MM-DD HH:mm:ss\"\n                                ).add(self.time_diff, \"seconds\");\n                                var checkout = moment(\n                                    self.reservation_lines1[res_line_id]\n                                        .checkout,\n                                    \"YYYY-MM-DD HH:mm:ss\"\n                                ).add(self.time_diff, \"seconds\");\n\n                                // ---- Logic to manage the slot booking in calendar dashboard ---\n\n                                var cout = moment(\n                                    self.reservation_lines1[res_line_id]\n                                        .checkout,\n                                    \"YYYY-MM-DD HH:mm:ss\"\n                                ).add(self.time_diff, \"seconds\");\n\n                                //----------- Logic Ended -------------\n\n                                self.selected_categ_room.push({\n                                    title:\n                                        self.reservations1[res_line]\n                                            .reservation_no +\n                                        self.reservations1[res_line]\n                                            .partner_id[1] +\n                                        \"[\" +\n                                        self.reservations1[res_line]\n                                            .total_cost1 +\n                                        \"]\",\n                                    description:\n                                        self.reservations1[res_line]\n                                            .reservation_no,\n                                    start: self.reservation_lines1[res_line_id]\n                                        .checkin,\n                                    // end: self.reservation_lines1[res_line_id]\n                                    //     .checkout,\n                                    end: cout.toString(),\n                                    resourceIds: [\n                                        self.reservation_lines1[res_line_id]\n                                            .room_number[0],\n                                    ],\n                                    color: \"#FFDA2F\",\n                                    partner_id:\n                                        self.reservations1[res_line].partner_id,\n                                    state: self.reservations1[res_line].state,\n                                    checkin: moment(checkin).format(\n                                        \"YYYY-MM-DD HH:mm:ss\"\n                                    ),\n                                    checkout: moment(checkout).format(\n                                        \"YYYY-MM-DD HH:mm:ss\"\n                                    ),\n\n                                    room_number:\n                                        self.reservation_lines1[res_line_id]\n                                            .room_number,\n                                });\n                            } else {\n                            }\n                        }\n                    }\n                }\n                room_type_list_data = self.selected_categ;\n                room_data_event_list = self.selected_categ_room;\n                self.event_data = room_data_event_list;\n                self.$el.find(\"#booking_calendar\").fullCalendar({\n                    defaultView: \"customWeek\",\n                    //                    defaultDate: moment_date ? moment(moment_date).format('YYYY-MM-DD') : moment(),\n                    aspectRatio: 1.5,\n                    editable: true,\n                    allDaySlot: false,\n                    eventOverlap: false,\n                    selectable: true,\n                    height: 420,\n                    resourceAreaWidth: \"17%\",\n                    slotDuration: \"00:00\",\n                    eventLimit: true,\n                    header: {\n                        left: \"title\",\n                        center: \"\",\n                        right: \"today prev,next,month,customWeek\",\n                    },\n                    views: {\n                        customWeek: {\n                            type: \"timeline\",\n                            duration: {\n                                weeks: 4,\n                            },\n                            slotDuration: {\n                                days: 1,\n                            },\n                            buttonText: \"Week\",\n                            columnHeaderFormat: \"ddd M/D\",\n                        },\n                        month: {\n                            editable: false,\n                            selectable: false,\n                        },\n                    },\n                    resourceColumns: [\n                        {\n                            labelText: \"Room Types\",\n                            field: \"room\",\n                        },\n                    ],\n                    resources: room_type_list_data,\n                    resourceGroupField: \"building\",\n                    weekNumberTitle: \"W\",\n                    weekNumberCalculation: \"local\",\n                    buttonText: {\n                        prev: \"Prev\",\n                        next: \"Next\",\n                        prevYear: \"Prev year\",\n                        nextYear: \"Next year\",\n                        year: \"Year\", // TODO: locale files need to specify this\n                        today: \"Today\",\n                        month: \"Month\",\n                        week: \"Week\",\n                        day: \"Day\",\n                    },\n                    selectAllow: function (selectInfo) {\n                        //                        console.log(\"selectInfo::::::::::\",selectInfo.resourceId,moment(selectInfo.start).format('YYYY-MM-DD'))\n                        if (\n                            selectInfo.start.isBefore(\n                                moment().subtract(1, \"d\").toDate()\n                            )\n                        )\n                            return false;\n\n                        return true;\n                    },\n                    select: function (start, end, jsEvent, view, resource) {\n                        $(\".popover\").popover(\"hide\");\n                        $(this).popover(\"hide\");\n                        var hotel_id = $(\"#shops\").val();\n\n                        var selection_diff = moment.duration(\n                            moment(end).diff(moment(start))\n                        );\n                        var minutes = parseInt(selection_diff.asMinutes());\n\n                        if (self.checkout_policy_name == \"custom\") {\n                            if (self.configuration_time) {\n                                var start_date = new moment(\n                                    start,\n                                    \"YYYY-MM-DD HH:mm:ss\"\n                                ).add(self.configuration_time, \"hours\");\n                                var end_date = new moment(\n                                    end,\n                                    \"YYYY-MM-DD HH:mm:ss\"\n                                ).add(self.configuration_time, \"hours\");\n\n                                /* In end paramater, we are getting one day ahead\n                                for the checkout_date so we are manually subtract\n                                one day from it*/\n                                end_date = moment(\n                                    end_date,\n                                    \"YYYY-MM-DD HH:mm:ss\"\n                                ).subtract(1440, \"minutes\");\n\n                                start_date = moment(\n                                    start_date,\n                                    \"YYYY-MM-DD HH:mm:ss\"\n                                ).subtract(self.time_diff, \"seconds\");\n                                end_date = moment(\n                                    end_date,\n                                    \"YYYY-MM-DD HH:mm:ss\"\n                                ).subtract(self.time_diff, \"seconds\");\n\n                                start_date = start_date.utc();\n                                end_date = end_date.utc();\n                            }\n                        } else if (self.checkout_policy_name == \"24hour\") {\n                            start_date = moment(start).format(\"YYYY-MM-DD\");\n                            var current_date = moment().format(\"YYYY-MM-DD\");\n\n                            if (start_date == current_date) {\n                                var current_time = moment().format(\n                                    \"YYYY-MM-DD HH:mm:ss\"\n                                );\n\n                                var hours = moment().format(\"HH\");\n                                var hours_in_sec = parseInt(hours) * 3600;\n                                var min = moment().format(\"mm\");\n                                var min_in_sec = parseInt(min) * 60;\n                                var sec = moment().format(\"ss\");\n                                var total_sec =\n                                    parseInt(hours_in_sec) +\n                                    parseInt(min_in_sec) +\n                                    parseInt(sec);\n\n                                var end_date = new moment(\n                                    end,\n                                    \"YYYY-MM-DD HH:mm:ss\"\n                                ).add(parseInt(total_sec), \"seconds\");\n                                end_date = moment(\n                                    end_date,\n                                    \"YYYY-MM-DD HH:mm:ss\"\n                                ).subtract(self.time_diff, \"seconds\");\n\n                                var start_date = current_time;\n                                start_date = moment(\n                                    start_date,\n                                    \"YYYY-MM-DD HH:mm:ss\"\n                                );\n                            }\n                            // If we click single slot in the dashboard\n                            else if (\n                                start_date != current_date &&\n                                minutes / 60 < 48\n                            ) {\n                                var current_Date = new Date();\n\n                                var start_date_time = new Date(start);\n\n                                start_date_time.setHours(\n                                    current_Date.getHours(),\n                                    current_Date.getMinutes(),\n                                    current_Date.getSeconds()\n                                );\n\n                                var hours = moment().format(\"HH\");\n                                var hours_in_sec = parseInt(hours) * 3600;\n                                var min = moment().format(\"mm\");\n                                var min_in_sec = parseInt(min) * 60;\n                                var sec = moment().format(\"ss\");\n                                var total_sec =\n                                    parseInt(hours_in_sec) +\n                                    parseInt(min_in_sec) +\n                                    parseInt(sec);\n\n                                var end_date = new moment(\n                                    end,\n                                    \"YYYY-MM-DD HH:mm:ss\"\n                                ).add(parseInt(total_sec), \"seconds\");\n\n                                start_date = moment(\n                                    start_date_time,\n                                    \"YYYY-MM-DD HH:mm:ss\"\n                                );\n\n                                end_date = moment(\n                                    end_date,\n                                    \"YYYY-MM-DD HH:mm:ss\"\n                                ).subtract(self.time_diff, \"seconds\");\n\n                                start_date = start_date.utc();\n                                end_date = end_date.utc();\n                            }\n                            // If we select a particular slot range in dashboard\n                            else {\n                                var start_date = new moment(\n                                    start,\n                                    \"YYYY-MM-DD HH:mm:ss\"\n                                ).add(self.configuration_time, \"hours\");\n                                var end_date = new moment(\n                                    end,\n                                    \"YYYY-MM-DD HH:mm:ss\"\n                                ).add(self.configuration_time, \"hours\");\n\n                                start_date = moment(\n                                    start_date,\n                                    \"YYYY-MM-DD HH:mm:ss\"\n                                ).subtract(self.time_diff, \"seconds\");\n                                end_date = moment(\n                                    end_date,\n                                    \"YYYY-MM-DD HH:mm:ss\"\n                                ).subtract(self.time_diff, \"seconds\");\n\n                                /* In end paramater, we are getting one day ahead\n                                for the checkout_date so we are manually subtract\n                                one day from it*/\n                                end_date = moment(\n                                    end_date,\n                                    \"YYYY-MM-DD HH:mm:ss\"\n                                ).subtract(1440, \"minutes\");\n\n                                start_date = start_date.utc();\n                                end_date = end_date.utc();\n                            }\n                        }\n                        var HotelresourceId = resource.id;\n                        var dialog = new dialogs.FormViewDialog(self, {\n                            res_model: \"hotel.reservation\",\n                            res_id: false,\n                            title: _t(\"Hotel Reservation\"),\n                            readonly: false,\n                            context: {\n                                checkin: moment\n                                    .utc(start_date)\n                                    .format(\"YYYY-MM-DD HH:mm:ss\"),\n                                checkout: moment\n                                    .utc(end_date)\n                                    .format(\"YYYY-MM-DD HH:mm:ss\"),\n                                hotel_resource: resource.id,\n                                shop_id: parseInt(hotel_id),\n                            },\n\n                            on_saved: function (record, changed) {\n                                $(\"#booking_calendar\").fullCalendar(\"destroy\");\n                                self.hotel_dashboard_view(moment_date);\n                                $(\".fc-divider\")\n                                    .find(\".fc-cell-content\")\n                                    .addClass(\"fc-expander\");\n                            },\n                        }).open();\n                    },\n                    buttonIcons: {\n                        prev: \"left-single-arrow\",\n                        next: \"right-single-arrow\",\n                        prevYear: \"left-double-arrow\",\n                        nextYear: \"right-double-arrow\",\n                    },\n                    eventRender: function (eventObj, $el) {\n                        console.log(\"eventObj::::::::::::\", eventObj);\n\n                        $el.popover({\n                            title: eventObj.title,\n                            content:\n                                \"<table class='tooltip_table'><tr>\" +\n                                \"<td >\" +\n                                \"Reservation No :\" +\n                                \"</td><td>\" +\n                                eventObj.description +\n                                \"</td></tr>\" +\n                                \"<tr><td>\" +\n                                \"Checkin Date :\" +\n                                \"</td><td>\" +\n                                eventObj.checkin +\n                                \"</td></tr>\" +\n                                \"<tr><td>\" +\n                                \"Checkout Date :\" +\n                                \"</td><td>\" +\n                                eventObj.checkout +\n                                \"</td></tr>\" +\n                                \"<tr><td>\" +\n                                \"Customer :\" +\n                                \"</td><td>\" +\n                                eventObj.partner_id[1] +\n                                \"</td></tr>\" +\n                                \"<tr><td>\" +\n                                \"Status :\" +\n                                \"</td><td>\" +\n                                eventObj.state +\n                                \"</td></tr>\",\n                            html: true,\n                            trigger: \"hover\",\n                            placement: \"top\",\n                            container: \"body\",\n                        });\n                        $el.css({\n                            \"font-weight\": \"bold\",\n                            \"font-size\": \"12px\",\n                        });\n                    },\n                    events: room_data_event_list,\n                    eventClick: function (calEvent, jsEvent, view) {\n                        var res_info = self.get_reservation(\n                            calEvent.description\n                        );\n                        var res = false;\n                        var folio_state = false;\n                        if (res_info == undefined) {\n                            res = false;\n                        } else {\n                            res = res_info.id;\n                            var params = {\n                                model: \"hotel.reservation\",\n                                method: \"get_folio_status\",\n                                args: [parseInt(res_info.id)],\n                            };\n                            rpc.query(params, {\n                                async: false,\n                            }).then(function (res_state) {\n                                if (res_state) {\n                                    folio_state = res_state;\n                                }\n\n                                var view_ids = self.get_view_id();\n                                var eventObj = self.do_action({\n                                    name: _t(\"Hotel Reservation\"),\n                                    res_model: \"hotel.reservation\",\n                                    views: [[view_ids, \"form\"]],\n                                    res_id: res,\n                                    view_mode: [\"form\"],\n                                    type: \"ir.actions.act_window\",\n                                    target: \"new\",\n                                    context: { state: res_state },\n                                });\n                            });\n                        }\n                    },\n                    eventResize: function (event, delta, revertFunc) {\n                        /* Below logic to set the previous checkout date\n                            if we drag the slot ahead in calendar dasboard*/\n                        var out_date = new Date(event.end);\n                        var previous_checkout = new Date(event.checkout);\n                        out_date.setHours(\n                            previous_checkout.getHours(),\n                            previous_checkout.getMinutes(),\n                            previous_checkout.getSeconds()\n                        );\n                        checkout = moment(out_date, \"YYYY-MM-DD HH:mm:ss\");\n\n                        $(\".popover\").popover(\"hide\");\n                        $(this).popover(\"hide\");\n                        var params = {\n                            model: \"hotel.reservation\",\n                            method: \"update_reservation_line\",\n                            args: [\n                                parseInt(event.id),\n                                event.description,\n                                moment(event.start).format(\n                                    \"YYYY-MM-DD HH:mm:ss\"\n                                ),\n                                moment(checkout)\n                                    .utc()\n                                    .format(\"YYYY-MM-DD HH:mm:ss\"),\n                                event.resourceId,\n                                moment(event.start).format(\"YYYY-MM-DD\"),\n                                moment(checkout).format(\"YYYY-MM-DD\"),\n                            ],\n                        };\n                        rpc.query(params, {\n                            async: false,\n                        }).then(function (res) {});\n                        $(\"#booking_calendar\").fullCalendar(\"destroy\");\n                        self.hotel_dashboard_view(moment_date);\n                        $(\".fc-divider\")\n                            .find(\".fc-cell-content\")\n                            .addClass(\"fc-expander\");\n                    },\n                    eventDrop: function (\n                        event,\n                        oldEvent,\n                        delta,\n                        reverse,\n                        view,\n                        el,\n                        jsEvent\n                    ) {\n                        $(\".popover\").popover(\"hide\");\n                        $(this).popover(\"hide\");\n\n                        /* Below logic to set the previous checkout date\n                            if we drag the slot ahead in calendar dasboard*/\n                        var previous_checkout = new Date(event.checkout);\n                        var out_date = new Date(event.end);\n                        out_date.setHours(\n                            previous_checkout.getHours(),\n                            previous_checkout.getMinutes(),\n                            previous_checkout.getSeconds()\n                        );\n                        checkout = moment(out_date, \"YYYY-MM-DD HH:mm:ss\");\n\n                        rpc.query(\n                            {\n                                model: \"hotel.reservation\",\n                                method: \"update_room\",\n                                args: [\n                                    event.id,\n                                    event.description,\n                                    parseInt(event.resourceId),\n                                    moment(event.start).format(\n                                        \"YYYY-MM-DD HH:mm:ss\"\n                                    ),\n                                    moment(checkout)\n                                        .utc()\n                                        .format(\"YYYY-MM-DD HH:mm:ss\"),\n                                    id_id,\n                                    moment(event.start).format(\"YYYY-MM-DD \"),\n                                    moment(event.start).format(\"YYYY-MM-DD\"),\n                                ],\n                            },\n                            {\n                                async: false,\n                            }\n                        ).then(function (res) {});\n                        if (res) {\n                        } else {\n                            reverse();\n                        }\n                        $(\"#booking_calendar\").fullCalendar(\"destroy\");\n                        self.hotel_dashboard_view(moment_date);\n                        $(\".fc-divider\")\n                            .find(\".fc-cell-content\")\n                            .addClass(\"fc-expander\");\n                    },\n                    eventDragStart: function (event, jsEvent, view) {\n                        id_id = false;\n                        id_id = event.resourceId;\n                    },\n                });\n            });\n        },\n\n        fetch: function (model, fields, domain, ctx) {\n            var domain = domain;\n            return this._rpc({\n                model: model,\n                method: \"search_read\",\n                domain: domain,\n                fields: fields,\n            });\n        },\n\n        get_reservation_line: function (line_id) {\n            console.log(\"innnnnnnnnnnnnnnnnnnnnnnnnnnnnn1\");\n\n            for (\n                var rline = 0;\n                rline < this.reservation_lines.length;\n                rline++\n            ) {\n                if (this.reservation_lines[rline].id == line_id) {\n                    return this.reservation_lines[rline];\n                }\n            }\n        },\n\n        get_reservation: function (res_name) {\n            console.log(\n                \"innnnnnnnnnnnnnnnnnnnnnnnnnnnnn2\",\n                res_name,\n                this.reservations1\n            );\n            for (var rline = 0; rline < this.reservations1.length; rline++) {\n                if (this.reservations1[rline].reservation_no == res_name) {\n                    return this.reservations1[rline];\n                }\n            }\n        },\n        get_view_id: function () {\n            return this.view_ids[0].id;\n        },\n\n        get_dirty_room: function (compare_date, product_id) {\n            for (\n                var hline = 0;\n                hline < this.housekeeping_lines.length;\n                hline++\n            ) {\n                //              console.log(\"product_id::::::::::::::::\",this.housekeeping_lines[hline].room_no[0],product_id)\n                if (this.housekeeping_lines[hline].room_no[0] == product_id) {\n                    //                  console.log(\"qqqqqqqqqqqqq\",this.housekeeping_lines[hline].current_date,compare_date)\n                    if (\n                        this.housekeeping_lines[hline].current_date <=\n                            compare_date &&\n                        compare_date <= this.housekeeping_lines[hline].end_date\n                    ) {\n                        return true;\n                    } else {\n                        return false;\n                    }\n                }\n            }\n        },\n\n        load_data: function () {\n            var self = this;\n            var loaded = self\n                .fetch(\n                    \"hotel.reservation.line\",\n                    [\n                        \"id\",\n                        \"room_number\",\n                        \"categ_id\",\n                        \"checkin\",\n                        \"checkout\",\n                        \"number_of_days\",\n                    ],\n                    [\n                        \"&\",\n                        [\"line_id\", \"!=\", false],\n                        [\"checkin\", \"<=\", $(\"#to_date\").val()],\n                    ],\n                    {}\n                )\n                .then(function (res_lines) {\n                    self.reservation_lines = res_lines;\n                    return self.fetch(\n                        \"hotel.reservation\",\n                        [\n                            \"id\",\n                            \"reservation_no\",\n                            \"reservation_line\",\n                            \"state\",\n                            \"id_line_ids\",\n                            \"partner_id\",\n                            \"folio_id\",\n                        ],\n                        [[\"state\", \"not in\", [\"cancel\"]]],\n                        {}\n                    );\n                })\n                .then(function (reservation) {\n                    self.reservations = reservation;\n                    return self.fetch(\n                        \"hotel.resv.id.details\",\n                        [\n                            \"id\",\n                            \"name\",\n                            \"partner_name\",\n                            \"gender\",\n                            \"country_id\",\n                            \"date_birth\",\n                            \"client_id\",\n                        ],\n                        [],\n                        [],\n                        {}\n                    );\n                })\n                .then(function (guest_details) {\n                    self.guest_details = guest_details;\n                    return self.fetch(\n                        \"hotel.housekeeping\",\n                        [\n                            \"id\",\n                            \"current_date\",\n                            \"end_date\",\n                            \"room_no\",\n                            \"state\",\n                            \"quality\",\n                        ],\n                        [\n                            [\"state\", \"in\", [\"dirty\"]],\n                            [\"current_date\", \">=\", $(\"#from_date\").val()],\n                        ],\n                        {}\n                    );\n                })\n                .then(function (housekeeping_details) {\n                    self.housekeeping_lines = housekeeping_details;\n                    return self.fetch(\n                        \"product.product\",\n                        [\"id\", \"product_tmpl_id\"],\n                        [],\n                        [],\n                        {}\n                    );\n                })\n                .then(function (productlines) {\n                    self.product_lines = productlines;\n                    return self.fetch(\n                        \"ir.ui.view\",\n                        [\"id\", \"name\", \"model\", \"type\"],\n                        [\n                            [\"name\", \"=\", \"hotel.reservation.form1\"],\n                            [\"model\", \"=\", \"hotel.reservation\"],\n                            [\"type\", \"=\", \"form\"],\n                        ],\n                        {}\n                    );\n                })\n                .then(function (views) {\n                    self.view_ids = views;\n                });\n\n            return loaded;\n        },\n\n        load_hotel: function () {\n            var self = this;\n            var dddd = self\n                .fetch(\n                    \"hotel.room\",\n                    [\n                        \"id\",\n                        \"name\",\n                        \"categ_id\",\n                        \"shop_id\",\n                        \"room_folio_ids\",\n                        \"product_id\",\n                    ],\n                    [],\n                    {}\n                )\n                .then(function (shop) {\n                    self.hotel_room = shop;\n                });\n\n            var reservation = self\n                .fetch(\n                    \"hotel.reservation.line\",\n                    [\n                        \"id\",\n                        \"room_number\",\n                        \"categ_id\",\n                        \"checkin\",\n                        \"checkout\",\n                        \"number_of_days\",\n                        \"line_id\",\n                    ],\n                    [\n                        \"&\",\n                        [\"line_id\", \"!=\", false],\n                        [\"company_id\", \"=\", session.company_id],\n                    ],\n                    {}\n                )\n                .then(function (res_lines) {\n                    self.reservation_lines1 = res_lines;\n                    return self.fetch(\n                        \"hotel.reservation\",\n                        [\n                            \"id\",\n                            \"reservation_no\",\n                            \"reservation_line\",\n                            \"state\",\n                            \"id_line_ids\",\n                            \"partner_id\",\n                            \"total_cost1\",\n                            \"deposit_cost2\",\n                        ],\n                        [[\"state\", \"not in\", [\"cancel\"]]],\n                        {}\n                    );\n                })\n                .then(function (reservation) {\n                    self.reservations1 = reservation;\n                    return self.fetch(\n                        \"ir.ui.view\",\n                        [\"id\", \"name\", \"model\", \"type\"],\n                        [\n                            [\"name\", \"=\", \"hotel.reservation.form1\"],\n                            [\"model\", \"=\", \"hotel.reservation\"],\n                            [\"type\", \"=\", \"form\"],\n                        ],\n                        {}\n                    );\n                })\n                .then(function (views) {\n                    self.view_ids = views;\n                    return self.fetch(\n                        \"hotel.housekeeping\",\n                        [\n                            \"id\",\n                            \"current_date\",\n                            \"end_date\",\n                            \"room_no\",\n                            \"state\",\n                            \"quality\",\n                        ],\n                        [[\"state\", \"in\", [\"dirty\"]]],\n                        {}\n                    );\n                })\n                .then(function (housekeeping_details) {\n                    self.housekeeping_lines = housekeeping_details;\n\n                    return self.fetch(\n                        \"hotel.folio\",\n                        [\"id\", \"reservation_id\", \"remaining_amt\", \"state\"],\n                        [],\n                        {}\n                    );\n                })\n                .then(function (folio_id) {\n                    self.folio_id = folio_id;\n                });\n\n            return dddd, reservation;\n        },\n    });\n    core.action_registry.add(\"HotelDashboardView_temp\", HotelDashboardView);\n\n    return {\n        HotelDashboardView: HotelDashboardView,\n    };\n});\n", "! function (t, e) {\n    \"object\" == typeof exports && \"object\" == typeof module ? module.exports = e(require(\"moment\"), require(\"jquery\")) : \"function\" == typeof define && define.amd ? define([\"moment\", \"jquery\"], e) : \"object\" == typeof exports ? exports.FullCalendar = e(require(\"moment\"), require(\"jquery\")) : t.FullCalendar = e(t.moment, t.jQuery)\n}(\"undefined\" != typeof self ? self : this, function (t, e) {\n    return function (t) {\n        function e(r) {\n            if (n[r]) return n[r].exports;\n            var i = n[r] = {\n                i: r,\n                l: !1,\n                exports: {}\n            };\n            return t[r].call(i.exports, i, i.exports, e), i.l = !0, i.exports\n        }\n        var n = {};\n        return e.m = t, e.c = n, e.d = function (t, n, r) {\n            e.o(t, n) || Object.defineProperty(t, n, {\n                configurable: !1,\n                enumerable: !0,\n                get: r\n            })\n        }, e.n = function (t) {\n            var n = t && t.__esModule ? function () {\n                return t.default\n            } : function () {\n                return t\n            };\n            return e.d(n, \"a\", n), n\n        }, e.o = function (t, e) {\n            return Object.prototype.hasOwnProperty.call(t, e)\n        }, e.p = \"\", e(e.s = 256)\n    }([function (e, n) {\n        e.exports = t\n    }, , function (t, e) {\n        var n = Object.setPrototypeOf || {\n            __proto__: []\n        }\n            instanceof Array && function (t, e) {\n                t.__proto__ = e\n            } || function (t, e) {\n                for (var n in e) e.hasOwnProperty(n) && (t[n] = e[n])\n            };\n        e.__extends = function (t, e) {\n            function r() {\n                this.constructor = t\n            }\n            n(t, e), t.prototype = null === e ? Object.create(e) : (r.prototype = e.prototype, new r)\n        }\n    }, function (t, n) {\n        t.exports = e\n    }, function (t, e, n) {\n        function r(t, e) {\n            e.left && t.css({\n                \"border-left-width\": 1,\n                \"margin-left\": e.left - 1\n            }), e.right && t.css({\n                \"border-right-width\": 1,\n                \"margin-right\": e.right - 1\n            })\n        }\n\n        function i(t) {\n            t.css({\n                \"margin-left\": \"\",\n                \"margin-right\": \"\",\n                \"border-left-width\": \"\",\n                \"border-right-width\": \"\"\n            })\n        }\n\n        function o() {\n            ht(\"body\").addClass(\"fc-not-allowed\")\n        }\n\n        function s() {\n            ht(\"body\").removeClass(\"fc-not-allowed\")\n        }\n\n        function a(t, e, n) {\n            var r = Math.floor(e / t.length),\n                i = Math.floor(e - r * (t.length - 1)),\n                o = [],\n                s = [],\n                a = [],\n                u = 0;\n            l(t), t.each(function (e, n) {\n                var l = e === t.length - 1 ? i : r,\n                    d = ht(n).outerHeight(!0);\n                d < l ? (o.push(n), s.push(d), a.push(ht(n).height())) : u += d\n            }), n && (e -= u, r = Math.floor(e / o.length), i = Math.floor(e - r * (o.length - 1))), ht(o).each(function (t, e) {\n                var n = t === o.length - 1 ? i : r,\n                    l = s[t],\n                    u = a[t],\n                    d = n - (l - u);\n                l < n && ht(e).height(d)\n            })\n        }\n\n        function l(t) {\n            t.height(\"\")\n        }\n\n        function u(t) {\n            var e = 0;\n            return t.find(\"> *\").each(function (t, n) {\n                var r = ht(n).outerWidth();\n                r > e && (e = r)\n            }), e++, t.width(e), e\n        }\n\n        function d(t, e) {\n            var n, r = t.add(e);\n            return r.css({\n                position: \"relative\",\n                left: -1\n            }), n = t.outerHeight() - e.outerHeight(), r.css({\n                position: \"\",\n                left: \"\"\n            }), n\n        }\n\n        function c(t) {\n            var e = t.css(\"position\"),\n                n = t.parents().filter(function () {\n                    var t = ht(this);\n                    return /(auto|scroll)/.test(t.css(\"overflow\") + t.css(\"overflow-y\") + t.css(\"overflow-x\"))\n                }).eq(0);\n            return \"fixed\" !== e && n.length ? n : ht(t[0].ownerDocument || document)\n        }\n\n        function p(t, e) {\n            var n = t.offset(),\n                r = n.left - (e ? e.left : 0),\n                i = n.top - (e ? e.top : 0);\n            return {\n                left: r,\n                right: r + t.outerWidth(),\n                top: i,\n                bottom: i + t.outerHeight()\n            }\n        }\n\n        function h(t, e) {\n            var n = t.offset(),\n                r = g(t),\n                i = n.left + b(t, \"border-left-width\") + r.left - (e ? e.left : 0),\n                o = n.top + b(t, \"border-top-width\") + r.top - (e ? e.top : 0);\n            return {\n                left: i,\n                right: i + t[0].clientWidth,\n                top: o,\n                bottom: o + t[0].clientHeight\n            }\n        }\n\n        function f(t, e) {\n            var n = t.offset(),\n                r = n.left + b(t, \"border-left-width\") + b(t, \"padding-left\") - (e ? e.left : 0),\n                i = n.top + b(t, \"border-top-width\") + b(t, \"padding-top\") - (e ? e.top : 0);\n            return {\n                left: r,\n                right: r + t.width(),\n                top: i,\n                bottom: i + t.height()\n            }\n        }\n\n        function g(t) {\n            var e, n = t[0].offsetWidth - t[0].clientWidth,\n                r = t[0].offsetHeight - t[0].clientHeight;\n            return n = v(n), r = v(r), e = {\n                left: 0,\n                right: 0,\n                top: 0,\n                bottom: r\n            }, y() && \"rtl\" === t.css(\"direction\") ? e.left = n : e.right = n, e\n        }\n\n        function v(t) {\n            return t = Math.max(0, t), t = Math.round(t)\n        }\n\n        function y() {\n            return null === ft && (ft = m()), ft\n        }\n\n        function m() {\n            var t = ht(\"<div><div/></div>\").css({\n                position: \"absolute\",\n                top: -1e3,\n                left: 0,\n                border: 0,\n                padding: 0,\n                overflow: \"scroll\",\n                direction: \"rtl\"\n            }).appendTo(\"body\"),\n                e = t.children(),\n                n = e.offset().left > t.offset().left;\n            return t.remove(), n\n        }\n\n        function b(t, e) {\n            return parseFloat(t.css(e)) || 0\n        }\n\n        function w(t) {\n            return 1 === t.which && !t.ctrlKey\n        }\n\n        function D(t) {\n            var e = t.originalEvent.touches;\n            return e && e.length ? e[0].pageX : t.pageX\n        }\n\n        function E(t) {\n            var e = t.originalEvent.touches;\n            return e && e.length ? e[0].pageY : t.pageY\n        }\n\n        function S(t) {\n            return /^touch/.test(t.type)\n        }\n\n        function C(t) {\n            t.addClass(\"fc-unselectable\").on(\"selectstart\", T)\n        }\n\n        function R(t) {\n            t.removeClass(\"fc-unselectable\").off(\"selectstart\", T)\n        }\n\n        function T(t) {\n            t.preventDefault()\n        }\n\n        function M(t, e) {\n            var n = {\n                left: Math.max(t.left, e.left),\n                right: Math.min(t.right, e.right),\n                top: Math.max(t.top, e.top),\n                bottom: Math.min(t.bottom, e.bottom)\n            };\n            return n.left < n.right && n.top < n.bottom && n\n        }\n\n        function I(t, e) {\n            return {\n                left: Math.min(Math.max(t.left, e.left), e.right),\n                top: Math.min(Math.max(t.top, e.top), e.bottom)\n            }\n        }\n\n        function H(t) {\n            return {\n                left: (t.left + t.right) / 2,\n                top: (t.top + t.bottom) / 2\n            }\n        }\n\n        function P(t, e) {\n            return {\n                left: t.left - e.left,\n                top: t.top - e.top\n            }\n        }\n\n        function _(t) {\n            var e, n, r = [],\n                i = [];\n            for (\"string\" == typeof t ? i = t.split(/\\s*,\\s*/) : \"function\" == typeof t ? i = [t] : ht.isArray(t) && (i = t), e = 0; e < i.length; e++) n = i[e], \"string\" == typeof n ? r.push(\"-\" === n.charAt(0) ? {\n                field: n.substring(1),\n                order: -1\n            } : {\n                field: n,\n                order: 1\n            }) : \"function\" == typeof n && r.push({\n                func: n\n            });\n            return r\n        }\n\n        function x(t, e, n, r, i) {\n            var o, s;\n            for (o = 0; o < n.length; o++)\n                if (s = O(t, e, n[o], r, i)) return s;\n            return 0\n        }\n\n        function O(t, e, n, r, i) {\n            if (n.func) return n.func(t, e);\n            var o = t[n.field],\n                s = e[n.field];\n            return null == o && r && (o = r[n.field]), null == s && i && (s = i[n.field]), F(o, s) * (n.order || 1)\n        }\n\n        function F(t, e) {\n            return t || e ? null == e ? -1 : null == t ? 1 : \"string\" === ht.type(t) || \"string\" === ht.type(e) ? String(t).localeCompare(String(e)) : t - e : 0\n        }\n\n        function z(t, e) {\n            return pt.duration({\n                days: t.clone().stripTime().diff(e.clone().stripTime(), \"days\"),\n                ms: t.time() - e.time()\n            })\n        }\n\n        function B(t, e) {\n            return pt.duration({\n                days: t.clone().stripTime().diff(e.clone().stripTime(), \"days\")\n            })\n        }\n\n        function A(t, e, n) {\n            return pt.duration(Math.round(t.diff(e, n, !0)), n)\n        }\n\n        function k(t, n) {\n            var r, i, o;\n            for (r = 0; r < e.unitsDesc.length && (i = e.unitsDesc[r], !((o = V(i, t, n)) >= 1 && ut(o))); r++);\n            return i\n        }\n\n        function L(t, e) {\n            var n = k(t);\n            return \"week\" === n && \"object\" == typeof e && e.days && (n = \"day\"), n\n        }\n\n        function V(t, e, n) {\n            return null != n ? n.diff(e, t, !0) : pt.isDuration(e) ? e.as(t) : e.end.diff(e.start, t, !0)\n        }\n\n        function G(t, e, n) {\n            var r;\n            return U(n) ? (e - t) / n : (r = n.asMonths(), Math.abs(r) >= 1 && ut(r) ? e.diff(t, \"months\", !0) / r : e.diff(t, \"days\", !0) / n.asDays())\n        }\n\n        function N(t, e) {\n            var n, r;\n            return U(t) || U(e) ? t / e : (n = t.asMonths(), r = e.asMonths(), Math.abs(n) >= 1 && ut(n) && Math.abs(r) >= 1 && ut(r) ? n / r : t.asDays() / e.asDays())\n        }\n\n        function j(t, e) {\n            var n;\n            return U(t) ? pt.duration(t * e) : (n = t.asMonths(), Math.abs(n) >= 1 && ut(n) ? pt.duration({\n                months: n * e\n            }) : pt.duration({\n                days: t.asDays() * e\n            }))\n        }\n\n        function U(t) {\n            return Boolean(t.hours() || t.minutes() || t.seconds() || t.milliseconds())\n        }\n\n        function W(t) {\n            return \"[object Date]\" === Object.prototype.toString.call(t) || t instanceof Date\n        }\n\n        function q(t) {\n            return \"string\" == typeof t && /^\\d+\\:\\d+(?:\\:\\d+\\.?(?:\\d{3})?)?$/.test(t)\n        }\n\n        function Y() {\n            for (var t = [], e = 0; e < arguments.length; e++) t[e] = arguments[e];\n            var n = window.console;\n            if (n && n.log) return n.log.apply(n, t)\n        }\n\n        function Z() {\n            for (var t = [], e = 0; e < arguments.length; e++) t[e] = arguments[e];\n            var n = window.console;\n            return n && n.warn ? n.warn.apply(n, t) : Y.apply(null, t)\n        }\n\n        function X(t, e) {\n            var n, r, i, o, s, a, l = {};\n            if (e)\n                for (n = 0; n < e.length; n++) {\n                    for (r = e[n], i = [], o = t.length - 1; o >= 0; o--)\n                        if (\"object\" == typeof (s = t[o][r])) i.unshift(s);\n                        else if (void 0 !== s) {\n                            l[r] = s;\n                            break\n                        }\n                    i.length && (l[r] = X(i))\n                }\n            for (n = t.length - 1; n >= 0; n--) {\n                a = t[n];\n                for (r in a) r in l || (l[r] = a[r])\n            }\n            return l\n        }\n\n        function Q(t, e) {\n            for (var n in t) $(t, n) && (e[n] = t[n])\n        }\n\n        function $(t, e) {\n            return gt.call(t, e)\n        }\n\n        function K(t, e, n) {\n            if (ht.isFunction(t) && (t = [t]), t) {\n                var r = void 0,\n                    i = void 0;\n                for (r = 0; r < t.length; r++) i = t[r].apply(e, n) || i;\n                return i\n            }\n        }\n\n        function J(t, e) {\n            for (var n = 0, r = 0; r < t.length;) e(t[r]) ? (t.splice(r, 1), n++) : r++;\n            return n\n        }\n\n        function tt(t, e) {\n            for (var n = 0, r = 0; r < t.length;) t[r] === e ? (t.splice(r, 1), n++) : r++;\n            return n\n        }\n\n        function et(t, e) {\n            var n, r = t.length;\n            if (null == r || r !== e.length) return !1;\n            for (n = 0; n < r; n++)\n                if (t[n] !== e[n]) return !1;\n            return !0\n        }\n\n        function nt() {\n            for (var t = [], e = 0; e < arguments.length; e++) t[e] = arguments[e];\n            for (var n = 0; n < t.length; n++)\n                if (void 0 !== t[n]) return t[n]\n        }\n\n        function rt(t) {\n            return (t + \"\").replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/'/g, \"&#039;\").replace(/\"/g, \"&quot;\").replace(/\\n/g, \"<br />\")\n        }\n\n        function it(t) {\n            return t.replace(/&.*?;/g, \"\")\n        }\n\n        function ot(t) {\n            var e = [];\n            return ht.each(t, function (t, n) {\n                null != n && e.push(t + \":\" + n)\n            }), e.join(\";\")\n        }\n\n        function st(t) {\n            var e = [];\n            return ht.each(t, function (t, n) {\n                null != n && e.push(t + '=\"' + rt(n) + '\"')\n            }), e.join(\" \")\n        }\n\n        function at(t) {\n            return t.charAt(0).toUpperCase() + t.slice(1)\n        }\n\n        function lt(t, e) {\n            return t - e\n        }\n\n        function ut(t) {\n            return t % 1 == 0\n        }\n\n        function dt(t, e) {\n            var n = t[e];\n            return function () {\n                return n.apply(t, arguments)\n            }\n        }\n\n        function ct(t, e, n) {\n            void 0 === n && (n = !1);\n            var r, i, o, s, a, l = function () {\n                var u = +new Date - s;\n                u < e ? r = setTimeout(l, e - u) : (r = null, n || (a = t.apply(o, i), o = i = null))\n            };\n            return function () {\n                o = this, i = arguments, s = +new Date;\n                var u = n && !r;\n                return r || (r = setTimeout(l, e)), u && (a = t.apply(o, i), o = i = null), a\n            }\n        }\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var pt = n(0),\n            ht = n(3);\n        e.compensateScroll = r, e.uncompensateScroll = i, e.disableCursor = o, e.enableCursor = s, e.distributeHeight = a, e.undistributeHeight = l, e.matchCellWidths = u, e.subtractInnerElHeight = d, e.getScrollParent = c, e.getOuterRect = p, e.getClientRect = h, e.getContentRect = f, e.getScrollbarWidths = g;\n        var ft = null;\n        e.isPrimaryMouseButton = w, e.getEvX = D, e.getEvY = E, e.getEvIsTouch = S, e.preventSelection = C, e.allowSelection = R, e.preventDefault = T, e.intersectRects = M, e.constrainPoint = I, e.getRectCenter = H, e.diffPoints = P, e.parseFieldSpecs = _, e.compareByFieldSpecs = x, e.compareByFieldSpec = O, e.flexibleCompare = F, e.dayIDs = [\"sun\", \"mon\", \"tue\", \"wed\", \"thu\", \"fri\", \"sat\"], e.unitsDesc = [\"year\", \"month\", \"week\", \"day\", \"hour\", \"minute\", \"second\", \"millisecond\"], e.diffDayTime = z, e.diffDay = B, e.diffByUnit = A, e.computeGreatestUnit = k, e.computeDurationGreatestUnit = L, e.divideRangeByDuration = G, e.divideDurationByDuration = N, e.multiplyDuration = j, e.durationHasTime = U, e.isNativeDate = W, e.isTimeString = q, e.log = Y, e.warn = Z;\n        var gt = {}.hasOwnProperty;\n        e.mergeProps = X, e.copyOwnProps = Q, e.hasOwnProp = $, e.applyAll = K, e.removeMatching = J, e.removeExact = tt, e.isArraysEqual = et, e.firstDefined = nt, e.htmlEscape = rt, e.stripHtmlEntities = it, e.cssToStr = ot, e.attrsToStr = st, e.capitaliseFirstLetter = at, e.compareNumbers = lt, e.isInt = ut, e.proxy = dt, e.debounce = ct\n    }, function (t, e, n) {\n        function r(t, e) {\n            return t.startMs - e.startMs\n        }\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var i = n(0),\n            o = n(11),\n            s = function () {\n                function t(t, e) {\n                    this.isStart = !0, this.isEnd = !0, i.isMoment(t) && (t = t.clone().stripZone()), i.isMoment(e) && (e = e.clone().stripZone()), t && (this.startMs = t.valueOf()), e && (this.endMs = e.valueOf())\n                }\n                return t.invertRanges = function (e, n) {\n                    var i, o, s = [],\n                        a = n.startMs;\n                    for (e.sort(r), i = 0; i < e.length; i++) o = e[i], o.startMs > a && s.push(new t(a, o.startMs)), o.endMs > a && (a = o.endMs);\n                    return a < n.endMs && s.push(new t(a, n.endMs)), s\n                }, t.prototype.intersect = function (e) {\n                    var n = this.startMs,\n                        r = this.endMs,\n                        i = null;\n                    return null != e.startMs && (n = null == n ? e.startMs : Math.max(n, e.startMs)), null != e.endMs && (r = null == r ? e.endMs : Math.min(r, e.endMs)), (null == n || null == r || n < r) && (i = new t(n, r), i.isStart = this.isStart && n === this.startMs, i.isEnd = this.isEnd && r === this.endMs), i\n                }, t.prototype.intersectsWith = function (t) {\n                    return (null == this.endMs || null == t.startMs || this.endMs > t.startMs) && (null == this.startMs || null == t.endMs || this.startMs < t.endMs)\n                }, t.prototype.containsRange = function (t) {\n                    return (null == this.startMs || null != t.startMs && t.startMs >= this.startMs) && (null == this.endMs || null != t.endMs && t.endMs <= this.endMs)\n                }, t.prototype.containsDate = function (t) {\n                    var e = t.valueOf();\n                    return (null == this.startMs || e >= this.startMs) && (null == this.endMs || e < this.endMs)\n                }, t.prototype.constrainDate = function (t) {\n                    var e = t.valueOf();\n                    return null != this.startMs && e < this.startMs && (e = this.startMs), null != this.endMs && e >= this.endMs && (e = this.endMs - 1), e\n                }, t.prototype.equals = function (t) {\n                    return this.startMs === t.startMs && this.endMs === t.endMs\n                }, t.prototype.clone = function () {\n                    var e = new t(this.startMs, this.endMs);\n                    return e.isStart = this.isStart, e.isEnd = this.isEnd, e\n                }, t.prototype.getStart = function () {\n                    return null != this.startMs ? o.default.utc(this.startMs).stripZone() : null\n                }, t.prototype.getEnd = function () {\n                    return null != this.endMs ? o.default.utc(this.endMs).stripZone() : null\n                }, t.prototype.as = function (t) {\n                    return i.utc(this.endMs).diff(i.utc(this.startMs), t, !0)\n                }, t\n            }();\n        e.default = s\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(2),\n            i = n(3),\n            o = n(52),\n            s = n(35),\n            a = n(36),\n            l = function (t) {\n                function e(n) {\n                    var r = t.call(this) || this;\n                    return r.calendar = n, r.className = [], r.uid = String(e.uuid++), r\n                }\n                return r.__extends(e, t), e.parse = function (t, e) {\n                    var n = new this(e);\n                    return !(\"object\" != typeof t || !n.applyProps(t)) && n\n                }, e.normalizeId = function (t) {\n                    return t ? String(t) : null\n                }, e.prototype.fetch = function (t, e, n) { }, e.prototype.removeEventDefsById = function (t) { }, e.prototype.removeAllEventDefs = function () { }, e.prototype.getPrimitive = function (t) { }, e.prototype.parseEventDefs = function (t) {\n                    var e, n, r = [];\n                    for (e = 0; e < t.length; e++)(n = this.parseEventDef(t[e])) && r.push(n);\n                    return r\n                }, e.prototype.parseEventDef = function (t) {\n                    var e = this.calendar.opt(\"eventDataTransform\"),\n                        n = this.eventDataTransform;\n                    return e && (t = e(t, this.calendar)), n && (t = n(t, this.calendar)), a.default.parse(t, this)\n                }, e.prototype.applyManualStandardProps = function (t) {\n                    return null != t.id && (this.id = e.normalizeId(t.id)), i.isArray(t.className) ? this.className = t.className : \"string\" == typeof t.className && (this.className = t.className.split(/\\s+/)), !0\n                }, e.uuid = 0, e.defineStandardProps = o.default.defineStandardProps, e.copyVerbatimStandardProps = o.default.copyVerbatimStandardProps, e\n            }(s.default);\n        e.default = l, o.default.mixInto(l), l.defineStandardProps({\n            id: !1,\n            className: !1,\n            color: !0,\n            backgroundColor: !0,\n            borderColor: !0,\n            textColor: !0,\n            editable: !0,\n            startEditable: !0,\n            durationEditable: !0,\n            rendering: !0,\n            overlap: !0,\n            constraint: !0,\n            allDayDefault: !0,\n            eventDataTransform: !0\n        })\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(2),\n            i = n(3),\n            o = n(15),\n            s = 0,\n            a = function (t) {\n                function e() {\n                    return null !== t && t.apply(this, arguments) || this\n                }\n                return r.__extends(e, t), e.prototype.listenTo = function (t, e, n) {\n                    if (\"object\" == typeof e)\n                        for (var r in e) e.hasOwnProperty(r) && this.listenTo(t, r, e[r]);\n                    else \"string\" == typeof e && t.on(e + \".\" + this.getListenerNamespace(), i.proxy(n, this))\n                }, e.prototype.stopListeningTo = function (t, e) {\n                    t.off((e || \"\") + \".\" + this.getListenerNamespace())\n                }, e.prototype.getListenerNamespace = function () {\n                    return null == this.listenerId && (this.listenerId = s++), \"_listener\" + this.listenerId\n                }, e\n            }(o.default);\n        e.default = a\n    }, , function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(2),\n            i = n(37),\n            o = n(53),\n            s = n(16),\n            a = function (t) {\n                function e() {\n                    return null !== t && t.apply(this, arguments) || this\n                }\n                return r.__extends(e, t), e.prototype.buildInstances = function () {\n                    return [this.buildInstance()]\n                }, e.prototype.buildInstance = function () {\n                    return new o.default(this, this.dateProfile)\n                }, e.prototype.isAllDay = function () {\n                    return this.dateProfile.isAllDay()\n                }, e.prototype.clone = function () {\n                    var e = t.prototype.clone.call(this);\n                    return e.dateProfile = this.dateProfile, e\n                }, e.prototype.rezone = function () {\n                    var t = this.source.calendar,\n                        e = this.dateProfile;\n                    this.dateProfile = new s.default(t.moment(e.start), e.end ? t.moment(e.end) : null, t)\n                }, e.prototype.applyManualStandardProps = function (e) {\n                    var n = t.prototype.applyManualStandardProps.call(this, e),\n                        r = s.default.parse(e, this.source);\n                    return !!r && (this.dateProfile = r, null != e.date && (this.miscProps.date = e.date), n)\n                }, e\n            }(i.default);\n        e.default = a, a.defineStandardProps({\n            start: !1,\n            date: !1,\n            end: !1,\n            allDay: !1\n        })\n    }, , function (t, e, n) {\n        function r(t, e) {\n            return c.format.call(t, e)\n        }\n\n        function i(t, e, n) {\n            void 0 === e && (e = !1), void 0 === n && (n = !1);\n            var r, i, d, c, p = t[0],\n                h = 1 === t.length && \"string\" == typeof p;\n            return o.isMoment(p) || a.isNativeDate(p) || void 0 === p ? c = o.apply(null, t) : (r = !1, i = !1, h ? l.test(p) ? (p += \"-01\", t = [p], r = !0, i = !0) : (d = u.exec(p)) && (r = !d[5], i = !0) : s.isArray(p) && (i = !0), c = e || r ? o.utc.apply(o, t) : o.apply(null, t), r ? (c._ambigTime = !0, c._ambigZone = !0) : n && (i ? c._ambigZone = !0 : h && c.utcOffset(p))), c._fullCalendar = !0, c\n        }\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var o = n(0),\n            s = n(3),\n            a = n(4),\n            l = /^\\s*\\d{4}-\\d\\d$/,\n            u = /^\\s*\\d{4}-(?:(\\d\\d-\\d\\d)|(W\\d\\d$)|(W\\d\\d-\\d)|(\\d\\d\\d))((T| )(\\d\\d(:\\d\\d(:\\d\\d(\\.\\d+)?)?)?)?)?$/,\n            d = o.fn;\n        e.newMomentProto = d;\n        var c = s.extend({}, d);\n        e.oldMomentProto = c;\n        var p = o.momentProperties;\n        p.push(\"_fullCalendar\"), p.push(\"_ambigTime\"), p.push(\"_ambigZone\"), e.oldMomentFormat = r;\n        var h = function () {\n            return i(arguments)\n        };\n        e.default = h, h.utc = function () {\n            var t = i(arguments, !0);\n            return t.hasTime() && t.utc(), t\n        }, h.parseZone = function () {\n            return i(arguments, !0, !0)\n        }, d.week = d.weeks = function (t) {\n            var e = this._locale._fullCalendar_weekCalc;\n            return null == t && \"function\" == typeof e ? e(this) : \"ISO\" === e ? c.isoWeek.apply(this, arguments) : c.week.apply(this, arguments)\n        }, d.time = function (t) {\n            if (!this._fullCalendar) return c.time.apply(this, arguments);\n            if (null == t) return o.duration({\n                hours: this.hours(),\n                minutes: this.minutes(),\n                seconds: this.seconds(),\n                milliseconds: this.milliseconds()\n            });\n            this._ambigTime = !1, o.isDuration(t) || o.isMoment(t) || (t = o.duration(t));\n            var e = 0;\n            return o.isDuration(t) && (e = 24 * Math.floor(t.asDays())), this.hours(e + t.hours()).minutes(t.minutes()).seconds(t.seconds()).milliseconds(t.milliseconds())\n        }, d.stripTime = function () {\n            return this._ambigTime || (this.utc(!0), this.set({\n                hours: 0,\n                minutes: 0,\n                seconds: 0,\n                ms: 0\n            }), this._ambigTime = !0, this._ambigZone = !0), this\n        }, d.hasTime = function () {\n            return !this._ambigTime\n        }, d.stripZone = function () {\n            var t;\n            return this._ambigZone || (t = this._ambigTime, this.utc(!0), this._ambigTime = t || !1, this._ambigZone = !0), this\n        }, d.hasZone = function () {\n            return !this._ambigZone\n        }, d.local = function (t) {\n            return c.local.call(this, this._ambigZone || t), this._ambigTime = !1, this._ambigZone = !1, this\n        }, d.utc = function (t) {\n            return c.utc.call(this, t), this._ambigTime = !1, this._ambigZone = !1, this\n        }, d.utcOffset = function (t) {\n            return null != t && (this._ambigTime = !1, this._ambigZone = !1), c.utcOffset.apply(this, arguments)\n        }\n    }, function (t, e) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var n = function () {\n            function t(t, e) {\n                this.isAllDay = !1, this.unzonedRange = t, this.isAllDay = e\n            }\n            return t.prototype.toLegacy = function (t) {\n                return {\n                    start: t.msToMoment(this.unzonedRange.startMs, this.isAllDay),\n                    end: t.msToMoment(this.unzonedRange.endMs, this.isAllDay)\n                }\n            }, t\n        }();\n        e.default = n\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(2),\n            i = n(3),\n            o = n(15),\n            s = function (t) {\n                function e() {\n                    return null !== t && t.apply(this, arguments) || this\n                }\n                return r.__extends(e, t), e.prototype.on = function (t, e) {\n                    return i(this).on(t, this._prepareIntercept(e)), this\n                }, e.prototype.one = function (t, e) {\n                    return i(this).one(t, this._prepareIntercept(e)), this\n                }, e.prototype._prepareIntercept = function (t) {\n                    var e = function (e, n) {\n                        return t.apply(n.context || this, n.args || [])\n                    };\n                    return t.guid || (t.guid = i.guid++), e.guid = t.guid, e\n                }, e.prototype.off = function (t, e) {\n                    return i(this).off(t, e), this\n                }, e.prototype.trigger = function (t) {\n                    for (var e = [], n = 1; n < arguments.length; n++) e[n - 1] = arguments[n];\n                    return i(this).triggerHandler(t, {\n                        args: e\n                    }), this\n                }, e.prototype.triggerWith = function (t, e, n) {\n                    return i(this).triggerHandler(t, {\n                        context: e,\n                        args: n\n                    }), this\n                }, e.prototype.hasHandlers = function (t) {\n                    var e = i._data(this, \"events\");\n                    return e && e[t] && e[t].length > 0\n                }, e\n            }(o.default);\n        e.default = s\n    }, function (t, e) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var n = function () {\n            function t(t) {\n                this.view = t._getView(), this.component = t\n            }\n            return t.prototype.opt = function (t) {\n                return this.view.opt(t)\n            }, t.prototype.end = function () { }, t\n        }();\n        e.default = n\n    }, function (t, e) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var n = function () {\n            function t() { }\n            return t.mixInto = function (t) {\n                var e = this;\n                Object.getOwnPropertyNames(this.prototype).forEach(function (n) {\n                    t.prototype[n] || (t.prototype[n] = e.prototype[n])\n                })\n            }, t.mixOver = function (t) {\n                var e = this;\n                Object.getOwnPropertyNames(this.prototype).forEach(function (n) {\n                    t.prototype[n] = e.prototype[n]\n                })\n            }, t\n        }();\n        e.default = n\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(5),\n            i = function () {\n                function t(t, e, n) {\n                    this.start = t, this.end = e || null, this.unzonedRange = this.buildUnzonedRange(n)\n                }\n                return t.parse = function (e, n) {\n                    var r = e.start || e.date,\n                        i = e.end;\n                    if (!r) return !1;\n                    var o = n.calendar,\n                        s = o.moment(r),\n                        a = i ? o.moment(i) : null,\n                        l = e.allDay,\n                        u = o.opt(\"forceEventDuration\");\n                    return !!s.isValid() && (null == l && null == (l = n.allDayDefault) && (l = o.opt(\"allDayDefault\")), !0 === l ? (s.stripTime(), a && a.stripTime()) : !1 === l && (s.hasTime() || s.time(0), a && !a.hasTime() && a.time(0)), !a || a.isValid() && a.isAfter(s) || (a = null), !a && u && (a = o.getDefaultEventEnd(!s.hasTime(), s)), new t(s, a, o))\n                }, t.isStandardProp = function (t) {\n                    return \"start\" === t || \"date\" === t || \"end\" === t || \"allDay\" === t\n                }, t.prototype.isAllDay = function () {\n                    return !(this.start.hasTime() || this.end && this.end.hasTime())\n                }, t.prototype.buildUnzonedRange = function (t) {\n                    var e = this.start.clone().stripZone().valueOf(),\n                        n = this.getEnd(t).stripZone().valueOf();\n                    return new r.default(e, n)\n                }, t.prototype.getEnd = function (t) {\n                    return this.end ? this.end.clone() : t.getDefaultEventEnd(this.isAllDay(), this.start)\n                }, t\n            }();\n        e.default = i\n    }, function (t, e, n) {\n        function r(t, e) {\n            return !t && !e || !(!t || !e) && (t.component === e.component && i(t, e) && i(e, t))\n        }\n\n        function i(t, e) {\n            for (var n in t)\n                if (!/^(component|left|right|top|bottom)$/.test(n) && t[n] !== e[n]) return !1;\n            return !0\n        }\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var o = n(2),\n            s = n(4),\n            a = n(59),\n            l = function (t) {\n                function e(e, n) {\n                    var r = t.call(this, n) || this;\n                    return r.component = e, r\n                }\n                return o.__extends(e, t), e.prototype.handleInteractionStart = function (e) {\n                    var n, r, i, o = this.subjectEl;\n                    this.component.hitsNeeded(), this.computeScrollBounds(), e ? (r = {\n                        left: s.getEvX(e),\n                        top: s.getEvY(e)\n                    }, i = r, o && (n = s.getOuterRect(o), i = s.constrainPoint(i, n)), this.origHit = this.queryHit(i.left, i.top), o && this.options.subjectCenter && (this.origHit && (n = s.intersectRects(this.origHit, n) || n), i = s.getRectCenter(n)), this.coordAdjust = s.diffPoints(i, r)) : (this.origHit = null, this.coordAdjust = null), t.prototype.handleInteractionStart.call(this, e)\n                }, e.prototype.handleDragStart = function (e) {\n                    var n;\n                    t.prototype.handleDragStart.call(this, e), (n = this.queryHit(s.getEvX(e), s.getEvY(e))) && this.handleHitOver(n)\n                }, e.prototype.handleDrag = function (e, n, i) {\n                    var o;\n                    t.prototype.handleDrag.call(this, e, n, i), o = this.queryHit(s.getEvX(i), s.getEvY(i)), r(o, this.hit) || (this.hit && this.handleHitOut(), o && this.handleHitOver(o))\n                }, e.prototype.handleDragEnd = function (e) {\n                    this.handleHitDone(), t.prototype.handleDragEnd.call(this, e)\n                }, e.prototype.handleHitOver = function (t) {\n                    var e = r(t, this.origHit);\n                    this.hit = t, this.trigger(\"hitOver\", this.hit, e, this.origHit)\n                }, e.prototype.handleHitOut = function () {\n                    this.hit && (this.trigger(\"hitOut\", this.hit), this.handleHitDone(), this.hit = null)\n                }, e.prototype.handleHitDone = function () {\n                    this.hit && this.trigger(\"hitDone\", this.hit)\n                }, e.prototype.handleInteractionEnd = function (e, n) {\n                    t.prototype.handleInteractionEnd.call(this, e, n), this.origHit = null, this.hit = null, this.component.hitsNotNeeded()\n                }, e.prototype.handleScrollEnd = function () {\n                    t.prototype.handleScrollEnd.call(this), this.isDragging && (this.component.releaseHits(), this.component.prepareHits())\n                }, e.prototype.queryHit = function (t, e) {\n                    return this.coordAdjust && (t += this.coordAdjust.left, e += this.coordAdjust.top), this.component.queryHit(t, e)\n                }, e\n            }(a.default);\n        e.default = l\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        }), e.version = \"3.10.1\", e.internalApiVersion = 12;\n        var r = n(4);\n        e.applyAll = r.applyAll, e.debounce = r.debounce, e.isInt = r.isInt, e.htmlEscape = r.htmlEscape, e.cssToStr = r.cssToStr, e.proxy = r.proxy, e.capitaliseFirstLetter = r.capitaliseFirstLetter, e.getOuterRect = r.getOuterRect, e.getClientRect = r.getClientRect, e.getContentRect = r.getContentRect, e.getScrollbarWidths = r.getScrollbarWidths, e.preventDefault = r.preventDefault, e.parseFieldSpecs = r.parseFieldSpecs, e.compareByFieldSpecs = r.compareByFieldSpecs, e.compareByFieldSpec = r.compareByFieldSpec, e.flexibleCompare = r.flexibleCompare, e.computeGreatestUnit = r.computeGreatestUnit, e.divideRangeByDuration = r.divideRangeByDuration, e.divideDurationByDuration = r.divideDurationByDuration, e.multiplyDuration = r.multiplyDuration, e.durationHasTime = r.durationHasTime, e.log = r.log, e.warn = r.warn, e.removeExact = r.removeExact, e.intersectRects = r.intersectRects, e.allowSelection = r.allowSelection, e.attrsToStr = r.attrsToStr, e.compareNumbers = r.compareNumbers, e.compensateScroll = r.compensateScroll, e.computeDurationGreatestUnit = r.computeDurationGreatestUnit, e.constrainPoint = r.constrainPoint, e.copyOwnProps = r.copyOwnProps, e.diffByUnit = r.diffByUnit, e.diffDay = r.diffDay, e.diffDayTime = r.diffDayTime, e.diffPoints = r.diffPoints, e.disableCursor = r.disableCursor, e.distributeHeight = r.distributeHeight, e.enableCursor = r.enableCursor, e.firstDefined = r.firstDefined, e.getEvIsTouch = r.getEvIsTouch, e.getEvX = r.getEvX, e.getEvY = r.getEvY, e.getRectCenter = r.getRectCenter, e.getScrollParent = r.getScrollParent, e.hasOwnProp = r.hasOwnProp, e.isArraysEqual = r.isArraysEqual, e.isNativeDate = r.isNativeDate, e.isPrimaryMouseButton = r.isPrimaryMouseButton, e.isTimeString = r.isTimeString, e.matchCellWidths = r.matchCellWidths, e.mergeProps = r.mergeProps, e.preventSelection = r.preventSelection, e.removeMatching = r.removeMatching, e.stripHtmlEntities = r.stripHtmlEntities, e.subtractInnerElHeight = r.subtractInnerElHeight, e.uncompensateScroll = r.uncompensateScroll, e.undistributeHeight = r.undistributeHeight, e.dayIDs = r.dayIDs, e.unitsDesc = r.unitsDesc;\n        var i = n(49);\n        e.formatDate = i.formatDate, e.formatRange = i.formatRange, e.queryMostGranularFormatUnit = i.queryMostGranularFormatUnit;\n        var o = n(32);\n        e.datepickerLocale = o.datepickerLocale, e.locale = o.locale, e.getMomentLocaleData = o.getMomentLocaleData, e.populateInstanceComputableOptions = o.populateInstanceComputableOptions;\n        var s = n(19);\n        e.eventDefsToEventInstances = s.eventDefsToEventInstances, e.eventFootprintToComponentFootprint = s.eventFootprintToComponentFootprint, e.eventInstanceToEventRange = s.eventInstanceToEventRange, e.eventInstanceToUnzonedRange = s.eventInstanceToUnzonedRange, e.eventRangeToEventFootprint = s.eventRangeToEventFootprint;\n        var a = n(11);\n        e.moment = a.default;\n        var l = n(13);\n        e.EmitterMixin = l.default;\n        var u = n(7);\n        e.ListenerMixin = u.default;\n        var d = n(51);\n        e.Model = d.default;\n        var c = n(217);\n        e.Constraints = c.default;\n        var p = n(55);\n        e.DateProfileGenerator = p.default;\n        var h = n(5);\n        e.UnzonedRange = h.default;\n        var f = n(12);\n        e.ComponentFootprint = f.default;\n        var g = n(218);\n        e.BusinessHourGenerator = g.default;\n        var v = n(219);\n        e.EventPeriod = v.default;\n        var y = n(220);\n        e.EventManager = y.default;\n        var m = n(37);\n        e.EventDef = m.default;\n        var b = n(39);\n        e.EventDefMutation = b.default;\n        var w = n(36);\n        e.EventDefParser = w.default;\n        var D = n(53);\n        e.EventInstance = D.default;\n        var E = n(50);\n        e.EventRange = E.default;\n        var S = n(54);\n        e.RecurringEventDef = S.default;\n        var C = n(9);\n        e.SingleEventDef = C.default;\n        var R = n(40);\n        e.EventDefDateMutation = R.default;\n        var T = n(16);\n        e.EventDateProfile = T.default;\n        var M = n(38);\n        e.EventSourceParser = M.default;\n        var I = n(6);\n        e.EventSource = I.default;\n        var H = n(57);\n        e.defineThemeSystem = H.defineThemeSystem, e.getThemeSystemClass = H.getThemeSystemClass;\n        var P = n(20);\n        e.EventInstanceGroup = P.default;\n        var _ = n(56);\n        e.ArrayEventSource = _.default;\n        var x = n(223);\n        e.FuncEventSource = x.default;\n        var O = n(224);\n        e.JsonFeedEventSource = O.default;\n        var F = n(34);\n        e.EventFootprint = F.default;\n        var z = n(35);\n        e.Class = z.default;\n        var B = n(15);\n        e.Mixin = B.default;\n        var A = n(58);\n        e.CoordCache = A.default;\n        var k = n(225);\n        e.Iterator = k.default;\n        var L = n(59);\n        e.DragListener = L.default;\n        var V = n(17);\n        e.HitDragListener = V.default;\n        var G = n(226);\n        e.MouseFollower = G.default;\n        var N = n(52);\n        e.ParsableModelMixin = N.default;\n        var j = n(227);\n        e.Popover = j.default;\n        var U = n(21);\n        e.Promise = U.default;\n        var W = n(228);\n        e.TaskQueue = W.default;\n        var q = n(229);\n        e.RenderQueue = q.default;\n        var Y = n(41);\n        e.Scroller = Y.default;\n        var Z = n(22);\n        e.Theme = Z.default;\n        var X = n(230);\n        e.Component = X.default;\n        var Q = n(231);\n        e.DateComponent = Q.default;\n        var $ = n(42);\n        e.InteractiveDateComponent = $.default;\n        var K = n(232);\n        e.Calendar = K.default;\n        var J = n(43);\n        e.View = J.default;\n        var tt = n(24);\n        e.defineView = tt.defineView, e.getViewConfig = tt.getViewConfig;\n        var et = n(60);\n        e.DayTableMixin = et.default;\n        var nt = n(61);\n        e.BusinessHourRenderer = nt.default;\n        var rt = n(44);\n        e.EventRenderer = rt.default;\n        var it = n(62);\n        e.FillRenderer = it.default;\n        var ot = n(63);\n        e.HelperRenderer = ot.default;\n        var st = n(233);\n        e.ExternalDropping = st.default;\n        var at = n(234);\n        e.EventResizing = at.default;\n        var lt = n(64);\n        e.EventPointing = lt.default;\n        var ut = n(235);\n        e.EventDragging = ut.default;\n        var dt = n(236);\n        e.DateSelecting = dt.default;\n        var ct = n(237);\n        e.DateClicking = ct.default;\n        var pt = n(14);\n        e.Interaction = pt.default;\n        var ht = n(65);\n        e.StandardInteractionsMixin = ht.default;\n        var ft = n(238);\n        e.AgendaView = ft.default;\n        var gt = n(239);\n        e.TimeGrid = gt.default;\n        var vt = n(240);\n        e.TimeGridEventRenderer = vt.default;\n        var yt = n(242);\n        e.TimeGridFillRenderer = yt.default;\n        var mt = n(241);\n        e.TimeGridHelperRenderer = mt.default;\n        var bt = n(66);\n        e.DayGrid = bt.default;\n        var wt = n(243);\n        e.DayGridEventRenderer = wt.default;\n        var Dt = n(245);\n        e.DayGridFillRenderer = Dt.default;\n        var Et = n(244);\n        e.DayGridHelperRenderer = Et.default;\n        var St = n(67);\n        e.BasicView = St.default;\n        var Ct = n(68);\n        e.BasicViewDateProfileGenerator = Ct.default;\n        var Rt = n(246);\n        e.MonthView = Rt.default;\n        var Tt = n(247);\n        e.MonthViewDateProfileGenerator = Tt.default;\n        var Mt = n(248);\n        e.ListView = Mt.default;\n        var It = n(250);\n        e.ListEventPointing = It.default;\n        var Ht = n(249);\n        e.ListEventRenderer = Ht.default\n    }, function (t, e, n) {\n        function r(t, e) {\n            var n, r = [];\n            for (n = 0; n < t.length; n++) r.push.apply(r, t[n].buildInstances(e));\n            return r\n        }\n\n        function i(t) {\n            return new l.default(t.dateProfile.unzonedRange, t.def, t)\n        }\n\n        function o(t) {\n            return new u.default(new d.default(t.unzonedRange, t.eventDef.isAllDay()), t.eventDef, t.eventInstance)\n        }\n\n        function s(t) {\n            return t.dateProfile.unzonedRange\n        }\n\n        function a(t) {\n            return t.componentFootprint\n        }\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var l = n(50),\n            u = n(34),\n            d = n(12);\n        e.eventDefsToEventInstances = r, e.eventInstanceToEventRange = i, e.eventRangeToEventFootprint = o, e.eventInstanceToUnzonedRange = s, e.eventFootprintToComponentFootprint = a\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(5),\n            i = n(19),\n            o = n(50),\n            s = function () {\n                function t(t) {\n                    this.eventInstances = t || []\n                }\n                return t.prototype.getAllEventRanges = function (t) {\n                    return t ? this.sliceNormalRenderRanges(t) : this.eventInstances.map(i.eventInstanceToEventRange)\n                }, t.prototype.sliceRenderRanges = function (t) {\n                    return this.isInverse() ? this.sliceInverseRenderRanges(t) : this.sliceNormalRenderRanges(t)\n                }, t.prototype.sliceNormalRenderRanges = function (t) {\n                    var e, n, r, i = this.eventInstances,\n                        s = [];\n                    for (e = 0; e < i.length; e++) n = i[e], (r = n.dateProfile.unzonedRange.intersect(t)) && s.push(new o.default(r, n.def, n));\n                    return s\n                }, t.prototype.sliceInverseRenderRanges = function (t) {\n                    var e = this.eventInstances.map(i.eventInstanceToUnzonedRange),\n                        n = this.getEventDef();\n                    return e = r.default.invertRanges(e, t), e.map(function (t) {\n                        return new o.default(t, n)\n                    })\n                }, t.prototype.isInverse = function () {\n                    return this.getEventDef().hasInverseRendering()\n                }, t.prototype.getEventDef = function () {\n                    return this.explicitEventDef || this.eventInstances[0].def\n                }, t\n            }();\n        e.default = s\n    }, function (t, e, n) {\n        function r(t, e) {\n            t.then = function (n) {\n                return \"function\" == typeof n ? s.resolve(n(e)) : t\n            }\n        }\n\n        function i(t) {\n            t.then = function (e, n) {\n                return \"function\" == typeof n && n(), t\n            }\n        }\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var o = n(3),\n            s = {\n                construct: function (t) {\n                    var e = o.Deferred(),\n                        n = e.promise();\n                    return \"function\" == typeof t && t(function (t) {\n                        e.resolve(t), r(n, t)\n                    }, function () {\n                        e.reject(), i(n)\n                    }), n\n                },\n                resolve: function (t) {\n                    var e = o.Deferred().resolve(t),\n                        n = e.promise();\n                    return r(n, t), n\n                },\n                reject: function () {\n                    var t = o.Deferred().reject(),\n                        e = t.promise();\n                    return i(e), e\n                }\n            };\n        e.default = s\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(3),\n            i = function () {\n                function t(t) {\n                    this.optionsManager = t, this.processIconOverride()\n                }\n                return t.prototype.processIconOverride = function () {\n                    this.iconOverrideOption && this.setIconOverride(this.optionsManager.get(this.iconOverrideOption))\n                }, t.prototype.setIconOverride = function (t) {\n                    var e, n;\n                    if (r.isPlainObject(t)) {\n                        e = r.extend({}, this.iconClasses);\n                        for (n in t) e[n] = this.applyIconOverridePrefix(t[n]);\n                        this.iconClasses = e\n                    } else !1 === t && (this.iconClasses = {})\n                }, t.prototype.applyIconOverridePrefix = function (t) {\n                    var e = this.iconOverridePrefix;\n                    return e && 0 !== t.indexOf(e) && (t = e + t), t\n                }, t.prototype.getClass = function (t) {\n                    return this.classes[t] || \"\"\n                }, t.prototype.getIconClass = function (t) {\n                    var e = this.iconClasses[t];\n                    return e ? this.baseIconClass + \" \" + e : \"\"\n                }, t.prototype.getCustomButtonIconClass = function (t) {\n                    var e;\n                    return this.iconOverrideCustomButtonOption && (e = t[this.iconOverrideCustomButtonOption]) ? this.baseIconClass + \" \" + this.applyIconOverridePrefix(e) : \"\"\n                }, t\n            }();\n        e.default = i, i.prototype.classes = {}, i.prototype.iconClasses = {}, i.prototype.baseIconClass = \"\", i.prototype.iconOverridePrefix = \"\"\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(3),\n            i = n(18),\n            o = n(13),\n            s = n(7);\n        i.touchMouseIgnoreWait = 500;\n        var a = null,\n            l = 0,\n            u = function () {\n                function t() {\n                    this.isTouching = !1, this.mouseIgnoreDepth = 0\n                }\n                return t.get = function () {\n                    return a || (a = new t, a.bind()), a\n                }, t.needed = function () {\n                    t.get(), l++\n                }, t.unneeded = function () {\n                    --l || (a.unbind(), a = null)\n                }, t.prototype.bind = function () {\n                    var t = this;\n                    this.listenTo(r(document), {\n                        touchstart: this.handleTouchStart,\n                        touchcancel: this.handleTouchCancel,\n                        touchend: this.handleTouchEnd,\n                        mousedown: this.handleMouseDown,\n                        mousemove: this.handleMouseMove,\n                        mouseup: this.handleMouseUp,\n                        click: this.handleClick,\n                        selectstart: this.handleSelectStart,\n                        contextmenu: this.handleContextMenu\n                    }), window.addEventListener(\"touchmove\", this.handleTouchMoveProxy = function (e) {\n                        t.handleTouchMove(r.Event(e))\n                    }, {\n                        passive: !1\n                    }), window.addEventListener(\"scroll\", this.handleScrollProxy = function (e) {\n                        t.handleScroll(r.Event(e))\n                    }, !0)\n                }, t.prototype.unbind = function () {\n                    this.stopListeningTo(r(document)), window.removeEventListener(\"touchmove\", this.handleTouchMoveProxy, {\n                        passive: !1\n                    }), window.removeEventListener(\"scroll\", this.handleScrollProxy, !0)\n                }, t.prototype.handleTouchStart = function (t) {\n                    this.stopTouch(t, !0), this.isTouching = !0, this.trigger(\"touchstart\", t)\n                }, t.prototype.handleTouchMove = function (t) {\n                    this.isTouching && this.trigger(\"touchmove\", t)\n                }, t.prototype.handleTouchCancel = function (t) {\n                    this.isTouching && (this.trigger(\"touchcancel\", t), this.stopTouch(t))\n                }, t.prototype.handleTouchEnd = function (t) {\n                    this.stopTouch(t)\n                }, t.prototype.handleMouseDown = function (t) {\n                    this.shouldIgnoreMouse() || this.trigger(\"mousedown\", t)\n                }, t.prototype.handleMouseMove = function (t) {\n                    this.shouldIgnoreMouse() || this.trigger(\"mousemove\", t)\n                }, t.prototype.handleMouseUp = function (t) {\n                    this.shouldIgnoreMouse() || this.trigger(\"mouseup\", t)\n                }, t.prototype.handleClick = function (t) {\n                    this.shouldIgnoreMouse() || this.trigger(\"click\", t)\n                }, t.prototype.handleSelectStart = function (t) {\n                    this.trigger(\"selectstart\", t)\n                }, t.prototype.handleContextMenu = function (t) {\n                    this.trigger(\"contextmenu\", t)\n                }, t.prototype.handleScroll = function (t) {\n                    this.trigger(\"scroll\", t)\n                }, t.prototype.stopTouch = function (t, e) {\n                    void 0 === e && (e = !1), this.isTouching && (this.isTouching = !1, this.trigger(\"touchend\", t), e || this.startTouchMouseIgnore())\n                }, t.prototype.startTouchMouseIgnore = function () {\n                    var t = this,\n                        e = i.touchMouseIgnoreWait;\n                    e && (this.mouseIgnoreDepth++, setTimeout(function () {\n                        t.mouseIgnoreDepth--\n                    }, e))\n                }, t.prototype.shouldIgnoreMouse = function () {\n                    return this.isTouching || Boolean(this.mouseIgnoreDepth)\n                }, t\n            }();\n        e.default = u, s.default.mixInto(u), o.default.mixInto(u)\n    }, function (t, e, n) {\n        function r(t, n) {\n            e.viewHash[t] = n\n        }\n\n        function i(t) {\n            return e.viewHash[t]\n        }\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var o = n(18);\n        e.viewHash = {}, o.views = e.viewHash, e.defineView = r, e.getViewConfig = i\n    }, , , , , , , , function (t, e, n) {\n        function r(t) {\n            a.each(f, function (e, n) {\n                null == t[e] && (t[e] = n(t))\n            })\n        }\n\n        function i(t, n, r) {\n            var i = e.localeOptionHash[t] || (e.localeOptionHash[t] = {});\n            i.isRTL = r.isRTL, i.weekNumberTitle = r.weekHeader, a.each(p, function (t, e) {\n                i[t] = e(r)\n            });\n            var o = a.datepicker;\n            o && (o.regional[n] = o.regional[t] = r, o.regional.en = o.regional[\"\"], o.setDefaults(r))\n        }\n\n        function o(t, n) {\n            var r, i;\n            r = e.localeOptionHash[t] || (e.localeOptionHash[t] = {}), n && (r = e.localeOptionHash[t] = d.mergeOptions([r, n])), i = s(t), a.each(h, function (t, e) {\n                null == r[t] && (r[t] = e(i, r))\n            }), d.globalDefaults.locale = t\n        }\n\n        function s(t) {\n            return l.localeData(t) || l.localeData(\"en\")\n        }\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var a = n(3),\n            l = n(0),\n            u = n(18),\n            d = n(33),\n            c = n(4);\n        e.localeOptionHash = {}, u.locales = e.localeOptionHash;\n        var p = {\n            buttonText: function (t) {\n                return {\n                    prev: c.stripHtmlEntities(t.prevText),\n                    next: c.stripHtmlEntities(t.nextText),\n                    today: c.stripHtmlEntities(t.currentText)\n                }\n            },\n            monthYearFormat: function (t) {\n                return t.showMonthAfterYear ? \"YYYY[\" + t.yearSuffix + \"] MMMM\" : \"MMMM YYYY[\" + t.yearSuffix + \"]\"\n            }\n        },\n            h = {\n                dayOfMonthFormat: function (t, e) {\n                    var n = t.longDateFormat(\"l\");\n                    return n = n.replace(/^Y+[^\\w\\s]*|[^\\w\\s]*Y+$/g, \"\"), e.isRTL ? n += \" ddd\" : n = \"ddd \" + n, n\n                },\n                mediumTimeFormat: function (t) {\n                    return t.longDateFormat(\"LT\").replace(/\\s*a$/i, \"a\")\n                },\n                smallTimeFormat: function (t) {\n                    return t.longDateFormat(\"LT\").replace(\":mm\", \"(:mm)\").replace(/(\\Wmm)$/, \"($1)\").replace(/\\s*a$/i, \"a\")\n                },\n                extraSmallTimeFormat: function (t) {\n                    return t.longDateFormat(\"LT\").replace(\":mm\", \"(:mm)\").replace(/(\\Wmm)$/, \"($1)\").replace(/\\s*a$/i, \"t\")\n                },\n                hourFormat: function (t) {\n                    return t.longDateFormat(\"LT\").replace(\":mm\", \"\").replace(/(\\Wmm)$/, \"\").replace(/\\s*a$/i, \"a\")\n                },\n                noMeridiemTimeFormat: function (t) {\n                    return t.longDateFormat(\"LT\").replace(/\\s*a$/i, \"\")\n                }\n            },\n            f = {\n                smallDayDateFormat: function (t) {\n                    return t.isRTL ? \"D dd\" : \"dd D\"\n                },\n                weekFormat: function (t) {\n                    return t.isRTL ? \"w[ \" + t.weekNumberTitle + \"]\" : \"[\" + t.weekNumberTitle + \" ]w\"\n                },\n                smallWeekFormat: function (t) {\n                    return t.isRTL ? \"w[\" + t.weekNumberTitle + \"]\" : \"[\" + t.weekNumberTitle + \"]w\"\n                }\n            };\n        e.populateInstanceComputableOptions = r, e.datepickerLocale = i, e.locale = o, e.getMomentLocaleData = s, o(\"en\", d.englishDefaults)\n    }, function (t, e, n) {\n        function r(t) {\n            return i.mergeProps(t, o)\n        }\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var i = n(4);\n        e.globalDefaults = {\n            titleRangeSeparator: \" \u2013 \",\n            monthYearFormat: \"MMMM YYYY\",\n            defaultTimedEventDuration: \"02:00:00\",\n            defaultAllDayEventDuration: {\n                days: 1\n            },\n            forceEventDuration: !1,\n            nextDayThreshold: \"09:00:00\",\n            columnHeader: !0,\n            defaultView: \"month\",\n            aspectRatio: 1.35,\n            header: {\n                left: \"title\",\n                center: \"\",\n                right: \"today prev,next\"\n            },\n            weekends: !0,\n            weekNumbers: !1,\n            weekNumberTitle: \"W\",\n            weekNumberCalculation: \"local\",\n            scrollTime: \"06:00:00\",\n            minTime: \"00:00:00\",\n            maxTime: \"24:00:00\",\n            showNonCurrentDates: !0,\n            lazyFetching: !0,\n            startParam: \"start\",\n            endParam: \"end\",\n            timezoneParam: \"timezone\",\n            timezone: !1,\n            locale: null,\n            isRTL: !1,\n            buttonText: {\n                prev: \"prev\",\n                next: \"next\",\n                prevYear: \"prev year\",\n                nextYear: \"next year\",\n                year: \"year\",\n                today: \"today\",\n                month: \"month\",\n                week: \"week\",\n                day: \"day\"\n            },\n            allDayText: \"all-day\",\n            agendaEventMinHeight: 0,\n            theme: !1,\n            dragOpacity: .75,\n            dragRevertDuration: 500,\n            dragScroll: !0,\n            unselectAuto: !0,\n            dropAccept: \"*\",\n            eventOrder: \"title\",\n            eventLimit: !1,\n            eventLimitText: \"more\",\n            eventLimitClick: \"popover\",\n            dayPopoverFormat: \"LL\",\n            handleWindowResize: !0,\n            windowResizeDelay: 100,\n            longPressDelay: 1e3\n        }, e.englishDefaults = {\n            dayPopoverFormat: \"dddd, MMMM D\"\n        }, e.rtlDefaults = {\n            header: {\n                left: \"next,prev today\",\n                center: \"\",\n                right: \"title\"\n            },\n            buttonIcons: {\n                prev: \"right-single-arrow\",\n                next: \"left-single-arrow\",\n                prevYear: \"right-double-arrow\",\n                nextYear: \"left-double-arrow\"\n            },\n            themeButtonIcons: {\n                prev: \"circle-triangle-e\",\n                next: \"circle-triangle-w\",\n                nextYear: \"seek-prev\",\n                prevYear: \"seek-next\"\n            }\n        };\n        var o = [\"header\", \"footer\", \"buttonText\", \"buttonIcons\", \"themeButtonIcons\"];\n        e.mergeOptions = r\n    }, function (t, e) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var n = function () {\n            function t(t, e, n) {\n                this.componentFootprint = t, this.eventDef = e, n && (this.eventInstance = n)\n            }\n            return t.prototype.getEventLegacy = function () {\n                return (this.eventInstance || this.eventDef).toLegacy()\n            }, t\n        }();\n        e.default = n\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(2),\n            i = n(4),\n            o = function () {\n                function t() { }\n                return t.extend = function (t) {\n                    var e = function (t) {\n                        function e() {\n                            return null !== t && t.apply(this, arguments) || this\n                        }\n                        return r.__extends(e, t), e\n                    }(this);\n                    return i.copyOwnProps(t, e.prototype), e\n                }, t.mixin = function (t) {\n                    i.copyOwnProps(t, this.prototype)\n                }, t\n            }();\n        e.default = o\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(0),\n            i = n(4),\n            o = n(9),\n            s = n(54);\n        e.default = {\n            parse: function (t, e) {\n                return i.isTimeString(t.start) || r.isDuration(t.start) || i.isTimeString(t.end) || r.isDuration(t.end) ? s.default.parse(t, e) : o.default.parse(t, e)\n            }\n        }\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(3),\n            i = n(52),\n            o = function () {\n                function t(t) {\n                    this.source = t, this.className = [], this.miscProps = {}\n                }\n                return t.parse = function (t, e) {\n                    var n = new this(e);\n                    return !!n.applyProps(t) && n\n                }, t.normalizeId = function (t) {\n                    return String(t)\n                }, t.generateId = function () {\n                    return \"_fc\" + t.uuid++\n                }, t.prototype.clone = function () {\n                    var e = new this.constructor(this.source);\n                    return e.id = this.id, e.rawId = this.rawId, e.uid = this.uid, t.copyVerbatimStandardProps(this, e), e.className = this.className.slice(), e.miscProps = r.extend({}, this.miscProps), e\n                }, t.prototype.hasInverseRendering = function () {\n                    return \"inverse-background\" === this.getRendering()\n                }, t.prototype.hasBgRendering = function () {\n                    var t = this.getRendering();\n                    return \"inverse-background\" === t || \"background\" === t\n                }, t.prototype.getRendering = function () {\n                    return null != this.rendering ? this.rendering : this.source.rendering\n                }, t.prototype.getConstraint = function () {\n                    return null != this.constraint ? this.constraint : null != this.source.constraint ? this.source.constraint : this.source.calendar.opt(\"eventConstraint\")\n                }, t.prototype.getOverlap = function () {\n                    return null != this.overlap ? this.overlap : null != this.source.overlap ? this.source.overlap : this.source.calendar.opt(\"eventOverlap\")\n                }, t.prototype.isStartExplicitlyEditable = function () {\n                    return null != this.startEditable ? this.startEditable : this.source.startEditable\n                }, t.prototype.isDurationExplicitlyEditable = function () {\n                    return null != this.durationEditable ? this.durationEditable : this.source.durationEditable\n                }, t.prototype.isExplicitlyEditable = function () {\n                    return null != this.editable ? this.editable : this.source.editable\n                }, t.prototype.toLegacy = function () {\n                    var e = r.extend({}, this.miscProps);\n                    return e._id = this.uid, e.source = this.source, e.className = this.className.slice(), e.allDay = this.isAllDay(), null != this.rawId && (e.id = this.rawId), t.copyVerbatimStandardProps(this, e), e\n                }, t.prototype.applyManualStandardProps = function (e) {\n                    return null != e.id ? this.id = t.normalizeId(this.rawId = e.id) : this.id = t.generateId(), null != e._id ? this.uid = String(e._id) : this.uid = t.generateId(), r.isArray(e.className) && (this.className = e.className), \"string\" == typeof e.className && (this.className = e.className.split(/\\s+/)), !0\n                }, t.prototype.applyMiscProps = function (t) {\n                    r.extend(this.miscProps, t)\n                }, t.uuid = 0, t.defineStandardProps = i.default.defineStandardProps, t.copyVerbatimStandardProps = i.default.copyVerbatimStandardProps, t\n            }();\n        e.default = o, i.default.mixInto(o), o.defineStandardProps({\n            _id: !1,\n            id: !1,\n            className: !1,\n            source: !1,\n            title: !0,\n            url: !0,\n            rendering: !0,\n            constraint: !0,\n            overlap: !0,\n            editable: !0,\n            startEditable: !0,\n            durationEditable: !0,\n            color: !0,\n            backgroundColor: !0,\n            borderColor: !0,\n            textColor: !0\n        })\n    }, function (t, e) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        }), e.default = {\n            sourceClasses: [],\n            registerClass: function (t) {\n                this.sourceClasses.unshift(t)\n            },\n            parse: function (t, e) {\n                var n, r, i = this.sourceClasses;\n                for (n = 0; n < i.length; n++)\n                    if (r = i[n].parse(t, e)) return r\n            }\n        }\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(4),\n            i = n(16),\n            o = n(37),\n            s = n(40),\n            a = n(9),\n            l = function () {\n                function t() { }\n                return t.createFromRawProps = function (e, n, a) {\n                    var l, u, d, c, p = e.def,\n                        h = {},\n                        f = {},\n                        g = {},\n                        v = {},\n                        y = null,\n                        m = null;\n                    for (l in n) i.default.isStandardProp(l) ? h[l] = n[l] : p.isStandardProp(l) ? f[l] = n[l] : p.miscProps[l] !== n[l] && (g[l] = n[l]);\n                    return u = i.default.parse(h, p.source), u && (d = s.default.createFromDiff(e.dateProfile, u, a)), f.id !== p.id && (y = f.id), r.isArraysEqual(f.className, p.className) || (m = f.className), o.default.copyVerbatimStandardProps(f, v), c = new t, c.eventDefId = y, c.className = m, c.verbatimStandardProps = v, c.miscProps = g, d && (c.dateMutation = d), c\n                }, t.prototype.mutateSingle = function (t) {\n                    var e;\n                    return this.dateMutation && (e = t.dateProfile, t.dateProfile = this.dateMutation.buildNewDateProfile(e, t.source.calendar)), null != this.eventDefId && (t.id = o.default.normalizeId(t.rawId = this.eventDefId)), this.className && (t.className = this.className), this.verbatimStandardProps && a.default.copyVerbatimStandardProps(this.verbatimStandardProps, t), this.miscProps && t.applyMiscProps(this.miscProps), e ? function () {\n                        t.dateProfile = e\n                    } : function () { }\n                }, t.prototype.setDateMutation = function (t) {\n                    t && !t.isEmpty() ? this.dateMutation = t : this.dateMutation = null\n                }, t.prototype.isEmpty = function () {\n                    return !this.dateMutation\n                }, t\n            }();\n        e.default = l\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(4),\n            i = n(16),\n            o = function () {\n                function t() {\n                    this.clearEnd = !1, this.forceTimed = !1, this.forceAllDay = !1\n                }\n                return t.createFromDiff = function (e, n, i) {\n                    function o(t, e) {\n                        return i ? r.diffByUnit(t, e, i) : n.isAllDay() ? r.diffDay(t, e) : r.diffDayTime(t, e)\n                    }\n                    var s, a, l, u, d = e.end && !n.end,\n                        c = e.isAllDay() && !n.isAllDay(),\n                        p = !e.isAllDay() && n.isAllDay();\n                    return s = o(n.start, e.start), n.end && (a = o(n.unzonedRange.getEnd(), e.unzonedRange.getEnd()), l = a.subtract(s)), u = new t, u.clearEnd = d, u.forceTimed = c, u.forceAllDay = p, u.setDateDelta(s), u.setEndDelta(l), u\n                }, t.prototype.buildNewDateProfile = function (t, e) {\n                    var n = t.start.clone(),\n                        r = null,\n                        o = !1;\n                    return t.end && !this.clearEnd ? r = t.end.clone() : this.endDelta && !r && (r = e.getDefaultEventEnd(t.isAllDay(), n)), this.forceTimed ? (o = !0, n.hasTime() || n.time(0), r && !r.hasTime() && r.time(0)) : this.forceAllDay && (n.hasTime() && n.stripTime(), r && r.hasTime() && r.stripTime()), this.dateDelta && (o = !0, n.add(this.dateDelta), r && r.add(this.dateDelta)), this.endDelta && (o = !0, r.add(this.endDelta)), this.startDelta && (o = !0, n.add(this.startDelta)), o && (n = e.applyTimezone(n), r && (r = e.applyTimezone(r))), !r && e.opt(\"forceEventDuration\") && (r = e.getDefaultEventEnd(t.isAllDay(), n)), new i.default(n, r, e)\n                }, t.prototype.setDateDelta = function (t) {\n                    t && t.valueOf() ? this.dateDelta = t : this.dateDelta = null\n                }, t.prototype.setStartDelta = function (t) {\n                    t && t.valueOf() ? this.startDelta = t : this.startDelta = null\n                }, t.prototype.setEndDelta = function (t) {\n                    t && t.valueOf() ? this.endDelta = t : this.endDelta = null\n                }, t.prototype.isEmpty = function () {\n                    return !(this.clearEnd || this.forceTimed || this.forceAllDay || this.dateDelta || this.startDelta || this.endDelta)\n                }, t\n            }();\n        e.default = o\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(2),\n            i = n(3),\n            o = n(4),\n            s = n(35),\n            a = function (t) {\n                function e(e) {\n                    var n = t.call(this) || this;\n                    return e = e || {}, n.overflowX = e.overflowX || e.overflow || \"auto\", n.overflowY = e.overflowY || e.overflow || \"auto\", n\n                }\n                return r.__extends(e, t), e.prototype.render = function () {\n                    this.el = this.renderEl(), this.applyOverflow()\n                }, e.prototype.renderEl = function () {\n                    return this.scrollEl = i('<div class=\"fc-scroller\"></div>')\n                }, e.prototype.clear = function () {\n                    this.setHeight(\"auto\"), this.applyOverflow()\n                }, e.prototype.destroy = function () {\n                    this.el.remove()\n                }, e.prototype.applyOverflow = function () {\n                    this.scrollEl.css({\n                        \"overflow-x\": this.overflowX,\n                        \"overflow-y\": this.overflowY\n                    })\n                }, e.prototype.lockOverflow = function (t) {\n                    var e = this.overflowX,\n                        n = this.overflowY;\n                    t = t || this.getScrollbarWidths(), \"auto\" === e && (e = t.top || t.bottom || this.scrollEl[0].scrollWidth - 1 > this.scrollEl[0].clientWidth ? \"scroll\" : \"hidden\"), \"auto\" === n && (n = t.left || t.right || this.scrollEl[0].scrollHeight - 1 > this.scrollEl[0].clientHeight ? \"scroll\" : \"hidden\"), this.scrollEl.css({\n                        \"overflow-x\": e,\n                        \"overflow-y\": n\n                    })\n                }, e.prototype.setHeight = function (t) {\n                    this.scrollEl.height(t)\n                }, e.prototype.getScrollTop = function () {\n                    return this.scrollEl.scrollTop()\n                }, e.prototype.setScrollTop = function (t) {\n                    this.scrollEl.scrollTop(t)\n                }, e.prototype.getClientWidth = function () {\n                    return this.scrollEl[0].clientWidth\n                }, e.prototype.getClientHeight = function () {\n                    return this.scrollEl[0].clientHeight\n                }, e.prototype.getScrollbarWidths = function () {\n                    return o.getScrollbarWidths(this.scrollEl)\n                }, e\n            }(s.default);\n        e.default = a\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(2),\n            i = n(3),\n            o = n(4),\n            s = n(231),\n            a = n(23),\n            l = function (t) {\n                function e(e, n) {\n                    var r = t.call(this, e, n) || this;\n                    return r.segSelector = \".fc-event-container > *\", r.dateSelectingClass && (r.dateClicking = new r.dateClickingClass(r)), r.dateSelectingClass && (r.dateSelecting = new r.dateSelectingClass(r)), r.eventPointingClass && (r.eventPointing = new r.eventPointingClass(r)), r.eventDraggingClass && r.eventPointing && (r.eventDragging = new r.eventDraggingClass(r, r.eventPointing)), r.eventResizingClass && r.eventPointing && (r.eventResizing = new r.eventResizingClass(r, r.eventPointing)), r.externalDroppingClass && (r.externalDropping = new r.externalDroppingClass(r)), r\n                }\n                return r.__extends(e, t), e.prototype.setElement = function (e) {\n                    t.prototype.setElement.call(this, e), this.dateClicking && this.dateClicking.bindToEl(e), this.dateSelecting && this.dateSelecting.bindToEl(e), this.bindAllSegHandlersToEl(e)\n                }, e.prototype.removeElement = function () {\n                    this.endInteractions(), t.prototype.removeElement.call(this)\n                }, e.prototype.executeEventUnrender = function () {\n                    this.endInteractions(), t.prototype.executeEventUnrender.call(this)\n                }, e.prototype.bindGlobalHandlers = function () {\n                    t.prototype.bindGlobalHandlers.call(this), this.externalDropping && this.externalDropping.bindToDocument()\n                }, e.prototype.unbindGlobalHandlers = function () {\n                    t.prototype.unbindGlobalHandlers.call(this), this.externalDropping && this.externalDropping.unbindFromDocument()\n                }, e.prototype.bindDateHandlerToEl = function (t, e, n) {\n                    var r = this;\n                    this.el.on(e, function (t) {\n                        if (!i(t.target).is(r.segSelector + \":not(.fc-helper),\" + r.segSelector + \":not(.fc-helper) *,.fc-more,a[data-goto]\")) return n.call(r, t)\n                    })\n                }, e.prototype.bindAllSegHandlersToEl = function (t) {\n                    [this.eventPointing, this.eventDragging, this.eventResizing].forEach(function (e) {\n                        e && e.bindToEl(t)\n                    })\n                }, e.prototype.bindSegHandlerToEl = function (t, e, n) {\n                    var r = this;\n                    t.on(e, this.segSelector, function (t) {\n                        var e = i(t.currentTarget);\n                        if (!e.is(\".fc-helper\")) {\n                            var o = e.data(\"fc-seg\");\n                            if (o && !r.shouldIgnoreEventPointing()) return n.call(r, o, t)\n                        }\n                    })\n                }, e.prototype.shouldIgnoreMouse = function () {\n                    return a.default.get().shouldIgnoreMouse()\n                }, e.prototype.shouldIgnoreTouch = function () {\n                    var t = this._getView();\n                    return t.isSelected || t.selectedEvent\n                }, e.prototype.shouldIgnoreEventPointing = function () {\n                    return this.eventDragging && this.eventDragging.isDragging || this.eventResizing && this.eventResizing.isResizing\n                }, e.prototype.canStartSelection = function (t, e) {\n                    return o.getEvIsTouch(e) && !this.canStartResize(t, e) && (this.isEventDefDraggable(t.footprint.eventDef) || this.isEventDefResizable(t.footprint.eventDef))\n                }, e.prototype.canStartDrag = function (t, e) {\n                    return !this.canStartResize(t, e) && this.isEventDefDraggable(t.footprint.eventDef)\n                }, e.prototype.canStartResize = function (t, e) {\n                    var n = this._getView(),\n                        r = t.footprint.eventDef;\n                    return (!o.getEvIsTouch(e) || n.isEventDefSelected(r)) && this.isEventDefResizable(r) && i(e.target).is(\".fc-resizer\")\n                }, e.prototype.endInteractions = function () {\n                    [this.dateClicking, this.dateSelecting, this.eventPointing, this.eventDragging, this.eventResizing].forEach(function (t) {\n                        t && t.end()\n                    })\n                }, e.prototype.isEventDefDraggable = function (t) {\n                    return this.isEventDefStartEditable(t)\n                }, e.prototype.isEventDefStartEditable = function (t) {\n                    var e = t.isStartExplicitlyEditable();\n                    return null == e && null == (e = this.opt(\"eventStartEditable\")) && (e = this.isEventDefGenerallyEditable(t)), e\n                }, e.prototype.isEventDefGenerallyEditable = function (t) {\n                    var e = t.isExplicitlyEditable();\n                    return null == e && (e = this.opt(\"editable\")), e\n                }, e.prototype.isEventDefResizableFromStart = function (t) {\n                    return this.opt(\"eventResizableFromStart\") && this.isEventDefResizable(t)\n                }, e.prototype.isEventDefResizableFromEnd = function (t) {\n                    return this.isEventDefResizable(t)\n                }, e.prototype.isEventDefResizable = function (t) {\n                    var e = t.isDurationExplicitlyEditable();\n                    return null == e && null == (e = this.opt(\"eventDurationEditable\")) && (e = this.isEventDefGenerallyEditable(t)), e\n                }, e.prototype.diffDates = function (t, e) {\n                    return this.largeUnit ? o.diffByUnit(t, e, this.largeUnit) : o.diffDayTime(t, e)\n                }, e.prototype.isEventInstanceGroupAllowed = function (t) {\n                    var e, n = this._getView(),\n                        r = this.dateProfile,\n                        i = this.eventRangesToEventFootprints(t.getAllEventRanges());\n                    for (e = 0; e < i.length; e++)\n                        if (!r.validUnzonedRange.containsRange(i[e].componentFootprint.unzonedRange)) return !1;\n                    return n.calendar.constraints.isEventInstanceGroupAllowed(t)\n                }, e.prototype.isExternalInstanceGroupAllowed = function (t) {\n                    var e, n = this._getView(),\n                        r = this.dateProfile,\n                        i = this.eventRangesToEventFootprints(t.getAllEventRanges());\n                    for (e = 0; e < i.length; e++)\n                        if (!r.validUnzonedRange.containsRange(i[e].componentFootprint.unzonedRange)) return !1;\n                    for (e = 0; e < i.length; e++)\n                        if (!n.calendar.constraints.isSelectionFootprintAllowed(i[e].componentFootprint)) return !1;\n                    return !0\n                }, e\n            }(s.default);\n        e.default = l\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(2),\n            i = n(3),\n            o = n(0),\n            s = n(4),\n            a = n(229),\n            l = n(55),\n            u = n(42),\n            d = n(23),\n            c = n(5),\n            p = function (t) {\n                function e(e, n) {\n                    var r = t.call(this, null, n.options) || this;\n                    return r.batchRenderDepth = 0, r.isSelected = !1, r.calendar = e, r.viewSpec = n, r.type = n.type, r.name = r.type, r.initRenderQueue(), r.initHiddenDays(), r.dateProfileGenerator = new r.dateProfileGeneratorClass(r), r.bindBaseRenderHandlers(), r.eventOrderSpecs = s.parseFieldSpecs(r.opt(\"eventOrder\")), r.initialize && r.initialize(), r\n                }\n                return r.__extends(e, t), e.prototype._getView = function () {\n                    return this\n                }, e.prototype.opt = function (t) {\n                    return this.options[t]\n                }, e.prototype.initRenderQueue = function () {\n                    this.renderQueue = new a.default({\n                        event: this.opt(\"eventRenderWait\")\n                    }), this.renderQueue.on(\"start\", this.onRenderQueueStart.bind(this)), this.renderQueue.on(\"stop\", this.onRenderQueueStop.bind(this)), this.on(\"before:change\", this.startBatchRender), this.on(\"change\", this.stopBatchRender)\n                }, e.prototype.onRenderQueueStart = function () {\n                    this.calendar.freezeContentHeight(), this.addScroll(this.queryScroll())\n                }, e.prototype.onRenderQueueStop = function () {\n                    this.calendar.updateViewSize() && this.popScroll(), this.calendar.thawContentHeight()\n                }, e.prototype.startBatchRender = function () {\n                    this.batchRenderDepth++ || this.renderQueue.pause()\n                }, e.prototype.stopBatchRender = function () {\n                    --this.batchRenderDepth || this.renderQueue.resume()\n                }, e.prototype.requestRender = function (t, e, n) {\n                    this.renderQueue.queue(t, e, n)\n                }, e.prototype.whenSizeUpdated = function (t) {\n                    this.renderQueue.isRunning ? this.renderQueue.one(\"stop\", t.bind(this)) : t.call(this)\n                }, e.prototype.computeTitle = function (t) {\n                    var e;\n                    return e = /^(year|month)$/.test(t.currentRangeUnit) ? t.currentUnzonedRange : t.activeUnzonedRange, this.formatRange({\n                        start: this.calendar.msToMoment(e.startMs, t.isRangeAllDay),\n                        end: this.calendar.msToMoment(e.endMs, t.isRangeAllDay)\n                    }, t.isRangeAllDay, this.opt(\"titleFormat\") || this.computeTitleFormat(t), this.opt(\"titleRangeSeparator\"))\n                }, e.prototype.computeTitleFormat = function (t) {\n                    var e = t.currentRangeUnit;\n                    return \"year\" === e ? \"YYYY\" : \"month\" === e ? this.opt(\"monthYearFormat\") : t.currentUnzonedRange.as(\"days\") > 1 ? \"ll\" : \"LL\"\n                }, e.prototype.setDate = function (t) {\n                    var e = this.get(\"dateProfile\"),\n                        n = this.dateProfileGenerator.build(t, void 0, !0);\n                    e && e.activeUnzonedRange.equals(n.activeUnzonedRange) || this.set(\"dateProfile\", n)\n                }, e.prototype.unsetDate = function () {\n                    this.unset(\"dateProfile\")\n                }, e.prototype.fetchInitialEvents = function (t) {\n                    var e = this.calendar,\n                        n = t.isRangeAllDay && !this.usesMinMaxTime;\n                    return e.requestEvents(e.msToMoment(t.activeUnzonedRange.startMs, n), e.msToMoment(t.activeUnzonedRange.endMs, n))\n                }, e.prototype.bindEventChanges = function () {\n                    this.listenTo(this.calendar, \"eventsReset\", this.resetEvents)\n                }, e.prototype.unbindEventChanges = function () {\n                    this.stopListeningTo(this.calendar, \"eventsReset\")\n                }, e.prototype.setEvents = function (t) {\n                    this.set(\"currentEvents\", t), this.set(\"hasEvents\", !0)\n                }, e.prototype.unsetEvents = function () {\n                    this.unset(\"currentEvents\"), this.unset(\"hasEvents\")\n                }, e.prototype.resetEvents = function (t) {\n                    this.startBatchRender(), this.unsetEvents(), this.setEvents(t), this.stopBatchRender()\n                }, e.prototype.requestDateRender = function (t) {\n                    var e = this;\n                    this.requestRender(function () {\n                        e.executeDateRender(t)\n                    }, \"date\", \"init\")\n                }, e.prototype.requestDateUnrender = function () {\n                    var t = this;\n                    this.requestRender(function () {\n                        t.executeDateUnrender()\n                    }, \"date\", \"destroy\")\n                }, e.prototype.executeDateRender = function (e) {\n                    t.prototype.executeDateRender.call(this, e), this.render && this.render(), this.trigger(\"datesRendered\"), this.addScroll({\n                        isDateInit: !0\n                    }), this.startNowIndicator()\n                }, e.prototype.executeDateUnrender = function () {\n                    this.unselect(), this.stopNowIndicator(), this.trigger(\"before:datesUnrendered\"), this.destroy && this.destroy(), t.prototype.executeDateUnrender.call(this)\n                }, e.prototype.bindBaseRenderHandlers = function () {\n                    var t = this;\n                    this.on(\"datesRendered\", function () {\n                        t.whenSizeUpdated(t.triggerViewRender)\n                    }), this.on(\"before:datesUnrendered\", function () {\n                        t.triggerViewDestroy()\n                    })\n                }, e.prototype.triggerViewRender = function () {\n                    this.publiclyTrigger(\"viewRender\", {\n                        context: this,\n                        args: [this, this.el]\n                    })\n                }, e.prototype.triggerViewDestroy = function () {\n                    this.publiclyTrigger(\"viewDestroy\", {\n                        context: this,\n                        args: [this, this.el]\n                    })\n                }, e.prototype.requestEventsRender = function (t) {\n                    var e = this;\n                    this.requestRender(function () {\n                        e.executeEventRender(t), e.whenSizeUpdated(e.triggerAfterEventsRendered)\n                    }, \"event\", \"init\")\n                }, e.prototype.requestEventsUnrender = function () {\n                    var t = this;\n                    this.requestRender(function () {\n                        t.triggerBeforeEventsDestroyed(), t.executeEventUnrender()\n                    }, \"event\", \"destroy\")\n                }, e.prototype.requestBusinessHoursRender = function (t) {\n                    var e = this;\n                    this.requestRender(function () {\n                        e.renderBusinessHours(t)\n                    }, \"businessHours\", \"init\")\n                }, e.prototype.requestBusinessHoursUnrender = function () {\n                    var t = this;\n                    this.requestRender(function () {\n                        t.unrenderBusinessHours()\n                    }, \"businessHours\", \"destroy\")\n                }, e.prototype.bindGlobalHandlers = function () {\n                    t.prototype.bindGlobalHandlers.call(this), this.listenTo(d.default.get(), {\n                        touchstart: this.processUnselect,\n                        mousedown: this.handleDocumentMousedown\n                    })\n                }, e.prototype.unbindGlobalHandlers = function () {\n                    t.prototype.unbindGlobalHandlers.call(this), this.stopListeningTo(d.default.get())\n                }, e.prototype.startNowIndicator = function () {\n                    var t, e, n, r = this;\n                    this.opt(\"nowIndicator\") && (t = this.getNowIndicatorUnit()) && (e = s.proxy(this, \"updateNowIndicator\"), this.initialNowDate = this.calendar.getNow(), this.initialNowQueriedMs = (new Date).valueOf(), n = this.initialNowDate.clone().startOf(t).add(1, t).valueOf() - this.initialNowDate.valueOf(), this.nowIndicatorTimeoutID = setTimeout(function () {\n                        r.nowIndicatorTimeoutID = null, e(), n = +o.duration(1, t), n = Math.max(100, n), r.nowIndicatorIntervalID = setInterval(e, n)\n                    }, n))\n                }, e.prototype.updateNowIndicator = function () {\n                    this.isDatesRendered && this.initialNowDate && (this.unrenderNowIndicator(), this.renderNowIndicator(this.initialNowDate.clone().add((new Date).valueOf() - this.initialNowQueriedMs)), this.isNowIndicatorRendered = !0)\n                }, e.prototype.stopNowIndicator = function () {\n                    this.isNowIndicatorRendered && (this.nowIndicatorTimeoutID && (clearTimeout(this.nowIndicatorTimeoutID), this.nowIndicatorTimeoutID = null), this.nowIndicatorIntervalID && (clearInterval(this.nowIndicatorIntervalID), this.nowIndicatorIntervalID = null), this.unrenderNowIndicator(), this.isNowIndicatorRendered = !1)\n                }, e.prototype.updateSize = function (e, n, r) {\n                    this.setHeight ? this.setHeight(e, n) : t.prototype.updateSize.call(this, e, n, r), this.updateNowIndicator()\n                }, e.prototype.addScroll = function (t) {\n                    var e = this.queuedScroll || (this.queuedScroll = {});\n                    i.extend(e, t)\n                }, e.prototype.popScroll = function () {\n                    this.applyQueuedScroll(), this.queuedScroll = null\n                }, e.prototype.applyQueuedScroll = function () {\n                    this.queuedScroll && this.applyScroll(this.queuedScroll)\n                }, e.prototype.queryScroll = function () {\n                    var t = {};\n                    return this.isDatesRendered && i.extend(t, this.queryDateScroll()), t\n                }, e.prototype.applyScroll = function (t) {\n                    t.isDateInit && this.isDatesRendered && i.extend(t, this.computeInitialDateScroll()), this.isDatesRendered && this.applyDateScroll(t)\n                }, e.prototype.computeInitialDateScroll = function () {\n                    return {}\n                }, e.prototype.queryDateScroll = function () {\n                    return {}\n                }, e.prototype.applyDateScroll = function (t) { }, e.prototype.reportEventDrop = function (t, e, n, r) {\n                    var i = this.calendar.eventManager,\n                        s = i.mutateEventsWithId(t.def.id, e),\n                        a = e.dateMutation;\n                    a && (t.dateProfile = a.buildNewDateProfile(t.dateProfile, this.calendar)), this.triggerEventDrop(t, a && a.dateDelta || o.duration(), s, n, r)\n                }, e.prototype.triggerEventDrop = function (t, e, n, r, i) {\n                    this.publiclyTrigger(\"eventDrop\", {\n                        context: r[0],\n                        args: [t.toLegacy(), e, n, i, {}, this]\n                    })\n                }, e.prototype.reportExternalDrop = function (t, e, n, r, i, o) {\n                    e && this.calendar.eventManager.addEventDef(t, n), this.triggerExternalDrop(t, e, r, i, o)\n                }, e.prototype.triggerExternalDrop = function (t, e, n, r, i) {\n                    this.publiclyTrigger(\"drop\", {\n                        context: n[0],\n                        args: [t.dateProfile.start.clone(), r, i, this]\n                    }), e && this.publiclyTrigger(\"eventReceive\", {\n                        context: this,\n                        args: [t.buildInstance().toLegacy(), this]\n                    })\n                }, e.prototype.reportEventResize = function (t, e, n, r) {\n                    var i = this.calendar.eventManager,\n                        o = i.mutateEventsWithId(t.def.id, e);\n                    t.dateProfile = e.dateMutation.buildNewDateProfile(t.dateProfile, this.calendar);\n                    var s = e.dateMutation.endDelta || e.dateMutation.startDelta;\n                    this.triggerEventResize(t, s, o, n, r)\n                }, e.prototype.triggerEventResize = function (t, e, n, r, i) {\n                    this.publiclyTrigger(\"eventResize\", {\n                        context: r[0],\n                        args: [t.toLegacy(), e, n, i, {}, this]\n                    })\n                }, e.prototype.select = function (t, e) {\n                    this.unselect(e), this.renderSelectionFootprint(t), this.reportSelection(t, e)\n                }, e.prototype.renderSelectionFootprint = function (e) {\n                    this.renderSelection ? this.renderSelection(e.toLegacy(this.calendar)) : t.prototype.renderSelectionFootprint.call(this, e)\n                }, e.prototype.reportSelection = function (t, e) {\n                    this.isSelected = !0, this.triggerSelect(t, e)\n                }, e.prototype.triggerSelect = function (t, e) {\n                    var n = this.calendar.footprintToDateProfile(t);\n                    this.publiclyTrigger(\"select\", {\n                        context: this,\n                        args: [n.start, n.end, e, this]\n                    })\n                }, e.prototype.unselect = function (t) {\n                    this.isSelected && (this.isSelected = !1, this.destroySelection && this.destroySelection(), this.unrenderSelection(), this.publiclyTrigger(\"unselect\", {\n                        context: this,\n                        args: [t, this]\n                    }))\n                }, e.prototype.selectEventInstance = function (t) {\n                    this.selectedEventInstance && this.selectedEventInstance === t || (this.unselectEventInstance(), this.getEventSegs().forEach(function (e) {\n                        e.footprint.eventInstance === t && e.el && e.el.addClass(\"fc-selected\")\n                    }), this.selectedEventInstance = t)\n                }, e.prototype.unselectEventInstance = function () {\n                    this.selectedEventInstance && (this.getEventSegs().forEach(function (t) {\n                        t.el && t.el.removeClass(\"fc-selected\")\n                    }), this.selectedEventInstance = null)\n                }, e.prototype.isEventDefSelected = function (t) {\n                    return this.selectedEventInstance && this.selectedEventInstance.def.id === t.id\n                }, e.prototype.handleDocumentMousedown = function (t) {\n                    s.isPrimaryMouseButton(t) && this.processUnselect(t)\n                }, e.prototype.processUnselect = function (t) {\n                    this.processRangeUnselect(t), this.processEventUnselect(t)\n                }, e.prototype.processRangeUnselect = function (t) {\n                    var e;\n                    this.isSelected && this.opt(\"unselectAuto\") && ((e = this.opt(\"unselectCancel\")) && i(t.target).closest(e).length || this.unselect(t))\n                }, e.prototype.processEventUnselect = function (t) {\n                    this.selectedEventInstance && (i(t.target).closest(\".fc-selected\").length || this.unselectEventInstance())\n                }, e.prototype.triggerBaseRendered = function () {\n                    this.publiclyTrigger(\"viewRender\", {\n                        context: this,\n                        args: [this, this.el]\n                    })\n                }, e.prototype.triggerBaseUnrendered = function () {\n                    this.publiclyTrigger(\"viewDestroy\", {\n                        context: this,\n                        args: [this, this.el]\n                    })\n                }, e.prototype.triggerDayClick = function (t, e, n) {\n                    var r = this.calendar.footprintToDateProfile(t);\n                    this.publiclyTrigger(\"dayClick\", {\n                        context: e,\n                        args: [r.start, n, this]\n                    })\n                }, e.prototype.isDateInOtherMonth = function (t, e) {\n                    return !1\n                }, e.prototype.getUnzonedRangeOption = function (t) {\n                    var e = this.opt(t);\n                    if (\"function\" == typeof e && (e = e.apply(null, Array.prototype.slice.call(arguments, 1))), e) return this.calendar.parseUnzonedRange(e)\n                }, e.prototype.initHiddenDays = function () {\n                    var t, e = this.opt(\"hiddenDays\") || [],\n                        n = [],\n                        r = 0;\n                    for (!1 === this.opt(\"weekends\") && e.push(0, 6), t = 0; t < 7; t++)(n[t] = -1 !== i.inArray(t, e)) || r++;\n                    if (!r) throw new Error(\"invalid hiddenDays\");\n                    this.isHiddenDayHash = n\n                }, e.prototype.trimHiddenDays = function (t) {\n                    var e = t.getStart(),\n                        n = t.getEnd();\n                    return e && (e = this.skipHiddenDays(e)), n && (n = this.skipHiddenDays(n, -1, !0)), null === e || null === n || e < n ? new c.default(e, n) : null\n                }, e.prototype.isHiddenDay = function (t) {\n                    return o.isMoment(t) && (t = t.day()), this.isHiddenDayHash[t]\n                }, e.prototype.skipHiddenDays = function (t, e, n) {\n                    void 0 === e && (e = 1), void 0 === n && (n = !1);\n                    for (var r = t.clone(); this.isHiddenDayHash[(r.day() + (n ? e : 0) + 7) % 7];) r.add(e, \"days\");\n                    return r\n                }, e\n            }(u.default);\n        e.default = p, p.prototype.usesMinMaxTime = !1, p.prototype.dateProfileGeneratorClass = l.default, p.watch(\"displayingDates\", [\"isInDom\", \"dateProfile\"], function (t) {\n            this.requestDateRender(t.dateProfile)\n        }, function () {\n            this.requestDateUnrender()\n        }), p.watch(\"displayingBusinessHours\", [\"displayingDates\", \"businessHourGenerator\"], function (t) {\n            this.requestBusinessHoursRender(t.businessHourGenerator)\n        }, function () {\n            this.requestBusinessHoursUnrender()\n        }), p.watch(\"initialEvents\", [\"dateProfile\"], function (t) {\n            return this.fetchInitialEvents(t.dateProfile)\n        }), p.watch(\"bindingEvents\", [\"initialEvents\"], function (t) {\n            this.setEvents(t.initialEvents), this.bindEventChanges()\n        }, function () {\n            this.unbindEventChanges(), this.unsetEvents()\n        }), p.watch(\"displayingEvents\", [\"displayingDates\", \"hasEvents\"], function () {\n            this.requestEventsRender(this.get(\"currentEvents\"))\n        }, function () {\n            this.requestEventsUnrender()\n        }), p.watch(\"title\", [\"dateProfile\"], function (t) {\n            return this.title = this.computeTitle(t.dateProfile)\n        }), p.watch(\"legacyDateProps\", [\"dateProfile\"], function (t) {\n            var e = this.calendar,\n                n = t.dateProfile;\n            this.start = e.msToMoment(n.activeUnzonedRange.startMs, n.isRangeAllDay), this.end = e.msToMoment(n.activeUnzonedRange.endMs, n.isRangeAllDay), this.intervalStart = e.msToMoment(n.currentUnzonedRange.startMs, n.isRangeAllDay), this.intervalEnd = e.msToMoment(n.currentUnzonedRange.endMs, n.isRangeAllDay)\n        })\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(3),\n            i = n(4),\n            o = function () {\n                function t(t, e) {\n                    this.view = t._getView(), this.component = t, this.fillRenderer = e\n                }\n                return t.prototype.opt = function (t) {\n                    return this.view.opt(t)\n                }, t.prototype.rangeUpdated = function () {\n                    var t, e;\n                    this.eventTimeFormat = this.opt(\"eventTimeFormat\") || this.opt(\"timeFormat\") || this.computeEventTimeFormat(), t = this.opt(\"displayEventTime\"), null == t && (t = this.computeDisplayEventTime()), e = this.opt(\"displayEventEnd\"), null == e && (e = this.computeDisplayEventEnd()), this.displayEventTime = t, this.displayEventEnd = e\n                }, t.prototype.render = function (t) {\n                    var e, n, r, i = this.component._getDateProfile(),\n                        o = [],\n                        s = [];\n                    for (e in t) n = t[e], r = n.sliceRenderRanges(i.activeUnzonedRange), n.getEventDef().hasBgRendering() ? o.push.apply(o, r) : s.push.apply(s, r);\n                    this.renderBgRanges(o), this.renderFgRanges(s)\n                }, t.prototype.unrender = function () {\n                    this.unrenderBgRanges(), this.unrenderFgRanges()\n                }, t.prototype.renderFgRanges = function (t) {\n                    var e = this.component.eventRangesToEventFootprints(t),\n                        n = this.component.eventFootprintsToSegs(e);\n                    n = this.renderFgSegEls(n), !1 !== this.renderFgSegs(n) && (this.fgSegs = n)\n                }, t.prototype.unrenderFgRanges = function () {\n                    this.unrenderFgSegs(this.fgSegs || []), this.fgSegs = null\n                }, t.prototype.renderBgRanges = function (t) {\n                    var e = this.component.eventRangesToEventFootprints(t),\n                        n = this.component.eventFootprintsToSegs(e);\n                    !1 !== this.renderBgSegs(n) && (this.bgSegs = n)\n                }, t.prototype.unrenderBgRanges = function () {\n                    this.unrenderBgSegs(), this.bgSegs = null\n                }, t.prototype.getSegs = function () {\n                    return (this.bgSegs || []).concat(this.fgSegs || [])\n                }, t.prototype.renderFgSegs = function (t) {\n                    return !1\n                }, t.prototype.unrenderFgSegs = function (t) { }, t.prototype.renderBgSegs = function (t) {\n                    var e = this;\n                    if (!this.fillRenderer) return !1;\n                    this.fillRenderer.renderSegs(\"bgEvent\", t, {\n                        getClasses: function (t) {\n                            return e.getBgClasses(t.footprint.eventDef)\n                        },\n                        getCss: function (t) {\n                            return {\n                                \"background-color\": e.getBgColor(t.footprint.eventDef)\n                            }\n                        },\n                        filterEl: function (t, n) {\n                            return e.filterEventRenderEl(t.footprint, n)\n                        }\n                    })\n                }, t.prototype.unrenderBgSegs = function () {\n                    this.fillRenderer && this.fillRenderer.unrender(\"bgEvent\")\n                }, t.prototype.renderFgSegEls = function (t, e) {\n                    var n = this;\n                    void 0 === e && (e = !1);\n                    var i, o = this.view.hasPublicHandlers(\"eventRender\"),\n                        s = \"\",\n                        a = [];\n                    if (t.length) {\n                        for (i = 0; i < t.length; i++) this.beforeFgSegHtml(t[i]), s += this.fgSegHtml(t[i], e);\n                        r(s).each(function (e, i) {\n                            var s = t[e],\n                                l = r(i);\n                            o && (l = n.filterEventRenderEl(s.footprint, l)), l && (l.data(\"fc-seg\", s), s.el = l, a.push(s))\n                        })\n                    }\n                    return a\n                }, t.prototype.beforeFgSegHtml = function (t) { }, t.prototype.fgSegHtml = function (t, e) { }, t.prototype.getSegClasses = function (t, e, n) {\n                    var r = [\"fc-event\", t.isStart ? \"fc-start\" : \"fc-not-start\", t.isEnd ? \"fc-end\" : \"fc-not-end\"].concat(this.getClasses(t.footprint.eventDef));\n                    return e && r.push(\"fc-draggable\"), n && r.push(\"fc-resizable\"), this.view.isEventDefSelected(t.footprint.eventDef) && r.push(\"fc-selected\"), r\n                }, t.prototype.filterEventRenderEl = function (t, e) {\n                    var n = t.getEventLegacy(),\n                        i = this.view.publiclyTrigger(\"eventRender\", {\n                            context: n,\n                            args: [n, e, this.view]\n                        });\n                    return !1 === i ? e = null : i && !0 !== i && (e = r(i)), e\n                }, t.prototype.getTimeText = function (t, e, n) {\n                    return this._getTimeText(t.eventInstance.dateProfile.start, t.eventInstance.dateProfile.end, t.componentFootprint.isAllDay, e, n)\n                }, t.prototype._getTimeText = function (t, e, n, r, i) {\n                    return null == r && (r = this.eventTimeFormat), null == i && (i = this.displayEventEnd), this.displayEventTime && !n ? i && e ? this.view.formatRange({\n                        start: t,\n                        end: e\n                    }, !1, r) : t.format(r) : \"\"\n                }, t.prototype.computeEventTimeFormat = function () {\n                    return this.opt(\"smallTimeFormat\")\n                }, t.prototype.computeDisplayEventTime = function () {\n                    return !0\n                }, t.prototype.computeDisplayEventEnd = function () {\n                    return !0\n                }, t.prototype.getBgClasses = function (t) {\n                    var e = this.getClasses(t);\n                    return e.push(\"fc-bgevent\"), e\n                }, t.prototype.getClasses = function (t) {\n                    var e, n = this.getStylingObjs(t),\n                        r = [];\n                    for (e = 0; e < n.length; e++) r.push.apply(r, n[e].eventClassName || n[e].className || []);\n                    return r\n                }, t.prototype.getSkinCss = function (t) {\n                    return {\n                        \"background-color\": this.getBgColor(t),\n                        \"border-color\": this.getBorderColor(t),\n                        color: this.getTextColor(t)\n                    }\n                }, t.prototype.getBgColor = function (t) {\n                    var e, n, r = this.getStylingObjs(t);\n                    for (e = 0; e < r.length && !n; e++) n = r[e].eventBackgroundColor || r[e].eventColor || r[e].backgroundColor || r[e].color;\n                    return n || (n = this.opt(\"eventBackgroundColor\") || this.opt(\"eventColor\")), n\n                }, t.prototype.getBorderColor = function (t) {\n                    var e, n, r = this.getStylingObjs(t);\n                    for (e = 0; e < r.length && !n; e++) n = r[e].eventBorderColor || r[e].eventColor || r[e].borderColor || r[e].color;\n                    return n || (n = this.opt(\"eventBorderColor\") || this.opt(\"eventColor\")), n\n                }, t.prototype.getTextColor = function (t) {\n                    var e, n, r = this.getStylingObjs(t);\n                    for (e = 0; e < r.length && !n; e++) n = r[e].eventTextColor || r[e].textColor;\n                    return n || (n = this.opt(\"eventTextColor\")), n\n                }, t.prototype.getStylingObjs = function (t) {\n                    var e = this.getFallbackStylingObjs(t);\n                    return e.unshift(t), e\n                }, t.prototype.getFallbackStylingObjs = function (t) {\n                    return [t.source]\n                }, t.prototype.sortEventSegs = function (t) {\n                    t.sort(i.proxy(this, \"compareEventSegs\"))\n                }, t.prototype.compareEventSegs = function (t, e) {\n                    var n = t.footprint,\n                        r = e.footprint,\n                        o = n.componentFootprint,\n                        s = r.componentFootprint,\n                        a = o.unzonedRange,\n                        l = s.unzonedRange;\n                    return a.startMs - l.startMs || l.endMs - l.startMs - (a.endMs - a.startMs) || s.isAllDay - o.isAllDay || i.compareByFieldSpecs(n.eventDef, r.eventDef, this.view.eventOrderSpecs, n.eventDef.miscProps, r.eventDef.miscProps)\n                }, t\n            }();\n        e.default = o\n    }, , , , , function (t, e, n) {\n        function r(t) {\n            return \"en\" !== t.locale() ? t.clone().locale(\"en\") : t\n        }\n\n        function i(t, e) {\n            return h(a(e).fakeFormatString, t)\n        }\n\n        function o(t, e, n, r, i) {\n            var o;\n            return t = y.default.parseZone(t), e = y.default.parseZone(e), o = t.localeData(), n = o.longDateFormat(n) || n, s(a(n), t, e, r || \" - \", i)\n        }\n\n        function s(t, e, n, r, i) {\n            var o, s, a, l = t.sameUnits,\n                u = e.clone().stripZone(),\n                d = n.clone().stripZone(),\n                c = f(t.fakeFormatString, e),\n                p = f(t.fakeFormatString, n),\n                h = \"\",\n                v = \"\",\n                y = \"\",\n                m = \"\",\n                b = \"\";\n            for (o = 0; o < l.length && (!l[o] || u.isSame(d, l[o])); o++) h += c[o];\n            for (s = l.length - 1; s > o && (!l[s] || u.isSame(d, l[s])) && (s - 1 !== o || \".\" !== c[s]); s--) v = c[s] + v;\n            for (a = o; a <= s; a++) y += c[a], m += p[a];\n            return (y || m) && (b = i ? m + r + y : y + r + m), g(h + b + v)\n        }\n\n        function a(t) {\n            return C[t] || (C[t] = l(t))\n        }\n\n        function l(t) {\n            var e = u(t);\n            return {\n                fakeFormatString: c(e),\n                sameUnits: p(e)\n            }\n        }\n\n        function u(t) {\n            for (var e, n = [], r = /\\[([^\\]]*)\\]|\\(([^\\)]*)\\)|(LTS|LT|(\\w)\\4*o?)|([^\\w\\[\\(]+)/g; e = r.exec(t);) e[1] ? n.push.apply(n, d(e[1])) : e[2] ? n.push({\n                maybe: u(e[2])\n            }) : e[3] ? n.push({\n                token: e[3]\n            }) : e[5] && n.push.apply(n, d(e[5]));\n            return n\n        }\n\n        function d(t) {\n            return \". \" === t ? [\".\", \" \"] : [t]\n        }\n\n        function c(t) {\n            var e, n, r = [];\n            for (e = 0; e < t.length; e++) n = t[e], \"string\" == typeof n ? r.push(\"[\" + n + \"]\") : n.token ? n.token in E ? r.push(b + \"[\" + n.token + \"]\") : r.push(n.token) : n.maybe && r.push(w + c(n.maybe) + w);\n            return r.join(m)\n        }\n\n        function p(t) {\n            var e, n, r, i = [];\n            for (e = 0; e < t.length; e++) n = t[e], n.token ? (r = S[n.token.charAt(0)], i.push(r ? r.unit : \"second\")) : n.maybe ? i.push.apply(i, p(n.maybe)) : i.push(null);\n            return i\n        }\n\n        function h(t, e) {\n            return g(f(t, e).join(\"\"))\n        }\n\n        function f(t, e) {\n            var n, r, i = [],\n                o = y.oldMomentFormat(e, t),\n                s = o.split(m);\n            for (n = 0; n < s.length; n++) r = s[n], r.charAt(0) === b ? i.push(E[r.substring(1)](e)) : i.push(r);\n            return i\n        }\n\n        function g(t) {\n            return t.replace(D, function (t, e) {\n                return e.match(/[1-9]/) ? e : \"\"\n            })\n        }\n\n        function v(t) {\n            var e, n, r, i, o = u(t);\n            for (e = 0; e < o.length; e++) n = o[e], n.token && (r = S[n.token.charAt(0)]) && (!i || r.value > i.value) && (i = r);\n            return i ? i.unit : null\n        }\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var y = n(11);\n        y.newMomentProto.format = function () {\n            return this._fullCalendar && arguments[0] ? i(this, arguments[0]) : this._ambigTime ? y.oldMomentFormat(r(this), \"YYYY-MM-DD\") : this._ambigZone ? y.oldMomentFormat(r(this), \"YYYY-MM-DD[T]HH:mm:ss\") : this._fullCalendar ? y.oldMomentFormat(r(this)) : y.oldMomentProto.format.apply(this, arguments)\n        }, y.newMomentProto.toISOString = function () {\n            return this._ambigTime ? y.oldMomentFormat(r(this), \"YYYY-MM-DD\") : this._ambigZone ? y.oldMomentFormat(r(this), \"YYYY-MM-DD[T]HH:mm:ss\") : this._fullCalendar ? y.oldMomentProto.toISOString.apply(r(this), arguments) : y.oldMomentProto.toISOString.apply(this, arguments)\n        };\n        var m = \"\\v\",\n            b = \"\u001f\",\n            w = \"\u001e\",\n            D = new RegExp(w + \"([^\" + w + \"]*)\" + w, \"g\"),\n            E = {\n                t: function (t) {\n                    return y.oldMomentFormat(t, \"a\").charAt(0)\n                },\n                T: function (t) {\n                    return y.oldMomentFormat(t, \"A\").charAt(0)\n                }\n            },\n            S = {\n                Y: {\n                    value: 1,\n                    unit: \"year\"\n                },\n                M: {\n                    value: 2,\n                    unit: \"month\"\n                },\n                W: {\n                    value: 3,\n                    unit: \"week\"\n                },\n                w: {\n                    value: 3,\n                    unit: \"week\"\n                },\n                D: {\n                    value: 4,\n                    unit: \"day\"\n                },\n                d: {\n                    value: 4,\n                    unit: \"day\"\n                }\n            };\n        e.formatDate = i, e.formatRange = o;\n        var C = {};\n        e.queryMostGranularFormatUnit = v\n    }, function (t, e) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var n = function () {\n            function t(t, e, n) {\n                this.unzonedRange = t, this.eventDef = e, n && (this.eventInstance = n)\n            }\n            return t\n        }();\n        e.default = n\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(2),\n            i = n(35),\n            o = n(13),\n            s = n(7),\n            a = function (t) {\n                function e() {\n                    var e = t.call(this) || this;\n                    return e._watchers = {}, e._props = {}, e.applyGlobalWatchers(), e.constructed(), e\n                }\n                return r.__extends(e, t), e.watch = function (t) {\n                    for (var e = [], n = 1; n < arguments.length; n++) e[n - 1] = arguments[n];\n                    this.prototype.hasOwnProperty(\"_globalWatchArgs\") || (this.prototype._globalWatchArgs = Object.create(this.prototype._globalWatchArgs)), this.prototype._globalWatchArgs[t] = e\n                }, e.prototype.constructed = function () { }, e.prototype.applyGlobalWatchers = function () {\n                    var t, e = this._globalWatchArgs;\n                    for (t in e) this.watch.apply(this, [t].concat(e[t]))\n                }, e.prototype.has = function (t) {\n                    return t in this._props\n                }, e.prototype.get = function (t) {\n                    return void 0 === t ? this._props : this._props[t]\n                }, e.prototype.set = function (t, e) {\n                    var n;\n                    \"string\" == typeof t ? (n = {}, n[t] = void 0 === e ? null : e) : n = t, this.setProps(n)\n                }, e.prototype.reset = function (t) {\n                    var e, n = this._props,\n                        r = {};\n                    for (e in n) r[e] = void 0;\n                    for (e in t) r[e] = t[e];\n                    this.setProps(r)\n                }, e.prototype.unset = function (t) {\n                    var e, n, r = {};\n                    for (e = \"string\" == typeof t ? [t] : t, n = 0; n < e.length; n++) r[e[n]] = void 0;\n                    this.setProps(r)\n                }, e.prototype.setProps = function (t) {\n                    var e, n, r = {},\n                        i = 0;\n                    for (e in t) \"object\" != typeof (n = t[e]) && n === this._props[e] || (r[e] = n, i++);\n                    if (i) {\n                        this.trigger(\"before:batchChange\", r);\n                        for (e in r) n = r[e], this.trigger(\"before:change\", e, n), this.trigger(\"before:change:\" + e, n);\n                        for (e in r) n = r[e], void 0 === n ? delete this._props[e] : this._props[e] = n, this.trigger(\"change:\" + e, n), this.trigger(\"change\", e, n);\n                        this.trigger(\"batchChange\", r)\n                    }\n                }, e.prototype.watch = function (t, e, n, r) {\n                    var i = this;\n                    this.unwatch(t), this._watchers[t] = this._watchDeps(e, function (e) {\n                        var r = n.call(i, e);\n                        r && r.then ? (i.unset(t), r.then(function (e) {\n                            i.set(t, e)\n                        })) : i.set(t, r)\n                    }, function (e) {\n                        i.unset(t), r && r.call(i, e)\n                    })\n                }, e.prototype.unwatch = function (t) {\n                    var e = this._watchers[t];\n                    e && (delete this._watchers[t], e.teardown())\n                }, e.prototype._watchDeps = function (t, e, n) {\n                    var r = this,\n                        i = 0,\n                        o = t.length,\n                        s = 0,\n                        a = {},\n                        l = [],\n                        u = !1,\n                        d = function (t, e, r) {\n                            1 === ++i && s === o && (u = !0, n(a), u = !1)\n                        },\n                        c = function (t, n, r) {\n                            void 0 === n ? (r || void 0 === a[t] || s--, delete a[t]) : (r || void 0 !== a[t] || s++, a[t] = n), --i || s === o && (u || e(a))\n                        },\n                        p = function (t, e) {\n                            r.on(t, e), l.push([t, e])\n                        };\n                    return t.forEach(function (t) {\n                        var e = !1;\n                        \"?\" === t.charAt(0) && (t = t.substring(1), e = !0), p(\"before:change:\" + t, function (t) {\n                            d()\n                        }), p(\"change:\" + t, function (n) {\n                            c(t, n, e)\n                        })\n                    }), t.forEach(function (t) {\n                        var e = !1;\n                        \"?\" === t.charAt(0) && (t = t.substring(1), e = !0), r.has(t) ? (a[t] = r.get(t), s++) : e && s++\n                    }), s === o && e(a), {\n                        teardown: function () {\n                            for (var t = 0; t < l.length; t++) r.off(l[t][0], l[t][1]);\n                            l = null, s === o && n()\n                        },\n                        flash: function () {\n                            s === o && (n(), e(a))\n                        }\n                    }\n                }, e.prototype.flash = function (t) {\n                    var e = this._watchers[t];\n                    e && e.flash()\n                }, e\n            }(i.default);\n        e.default = a, a.prototype._globalWatchArgs = {}, o.default.mixInto(a), s.default.mixInto(a)\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(2),\n            i = n(4),\n            o = n(15),\n            s = function (t) {\n                function e() {\n                    return null !== t && t.apply(this, arguments) || this\n                }\n                return r.__extends(e, t), e.defineStandardProps = function (t) {\n                    var e = this.prototype;\n                    e.hasOwnProperty(\"standardPropMap\") || (e.standardPropMap = Object.create(e.standardPropMap)), i.copyOwnProps(t, e.standardPropMap)\n                }, e.copyVerbatimStandardProps = function (t, e) {\n                    var n, r = this.prototype.standardPropMap;\n                    for (n in r) null != t[n] && !0 === r[n] && (e[n] = t[n])\n                }, e.prototype.applyProps = function (t) {\n                    var e, n = this.standardPropMap,\n                        r = {},\n                        i = {};\n                    for (e in t) !0 === n[e] ? this[e] = t[e] : !1 === n[e] ? r[e] = t[e] : i[e] = t[e];\n                    return this.applyMiscProps(i), this.applyManualStandardProps(r)\n                }, e.prototype.applyManualStandardProps = function (t) {\n                    return !0\n                }, e.prototype.applyMiscProps = function (t) { }, e.prototype.isStandardProp = function (t) {\n                    return t in this.standardPropMap\n                }, e\n            }(o.default);\n        e.default = s, s.prototype.standardPropMap = {}\n    }, function (t, e) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var n = function () {\n            function t(t, e) {\n                this.def = t, this.dateProfile = e\n            }\n            return t.prototype.toLegacy = function () {\n                var t = this.dateProfile,\n                    e = this.def.toLegacy();\n                return e.start = t.start.clone(), e.end = t.end ? t.end.clone() : null, e\n            }, t\n        }();\n        e.default = n\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(2),\n            i = n(3),\n            o = n(0),\n            s = n(37),\n            a = n(53),\n            l = n(16),\n            u = function (t) {\n                function e() {\n                    return null !== t && t.apply(this, arguments) || this\n                }\n                return r.__extends(e, t), e.prototype.isAllDay = function () {\n                    return !this.startTime && !this.endTime\n                }, e.prototype.buildInstances = function (t) {\n                    for (var e, n, r, i = this.source.calendar, o = t.getStart(), s = t.getEnd(), u = []; o.isBefore(s);) this.dowHash && !this.dowHash[o.day()] || (e = i.applyTimezone(o), n = e.clone(), r = null, this.startTime ? n.time(this.startTime) : n.stripTime(), this.endTime && (r = e.clone().time(this.endTime)), u.push(new a.default(this, new l.default(n, r, i)))), o.add(1, \"days\");\n                    return u\n                }, e.prototype.setDow = function (t) {\n                    this.dowHash || (this.dowHash = {});\n                    for (var e = 0; e < t.length; e++) this.dowHash[t[e]] = !0\n                }, e.prototype.clone = function () {\n                    var e = t.prototype.clone.call(this);\n                    return e.startTime && (e.startTime = o.duration(this.startTime)), e.endTime && (e.endTime = o.duration(this.endTime)), this.dowHash && (e.dowHash = i.extend({}, this.dowHash)), e\n                }, e\n            }(s.default);\n        e.default = u, u.prototype.applyProps = function (t) {\n            var e = s.default.prototype.applyProps.call(this, t);\n            return t.start && (this.startTime = o.duration(t.start)), t.end && (this.endTime = o.duration(t.end)), t.dow && this.setDow(t.dow), e\n        }, u.defineStandardProps({\n            start: !1,\n            end: !1,\n            dow: !1\n        })\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(0),\n            i = n(4),\n            o = n(5),\n            s = function () {\n                function t(t) {\n                    this._view = t\n                }\n                return t.prototype.opt = function (t) {\n                    return this._view.opt(t)\n                }, t.prototype.trimHiddenDays = function (t) {\n                    return this._view.trimHiddenDays(t)\n                }, t.prototype.msToUtcMoment = function (t, e) {\n                    return this._view.calendar.msToUtcMoment(t, e)\n                }, t.prototype.buildPrev = function (t) {\n                    var e = t.date.clone().startOf(t.currentRangeUnit).subtract(t.dateIncrement);\n                    return this.build(e, -1)\n                }, t.prototype.buildNext = function (t) {\n                    var e = t.date.clone().startOf(t.currentRangeUnit).add(t.dateIncrement);\n                    return this.build(e, 1)\n                }, t.prototype.build = function (t, e, n) {\n                    void 0 === n && (n = !1);\n                    var i, o, s, a, l, u, d = !t.hasTime(),\n                        c = null,\n                        p = null;\n                    return i = this.buildValidRange(), i = this.trimHiddenDays(i), n && (t = this.msToUtcMoment(i.constrainDate(t), d)), o = this.buildCurrentRangeInfo(t, e), s = /^(year|month|week|day)$/.test(o.unit), a = this.buildRenderRange(this.trimHiddenDays(o.unzonedRange), o.unit, s), a = this.trimHiddenDays(a), l = a.clone(), this.opt(\"showNonCurrentDates\") || (l = l.intersect(o.unzonedRange)), c = r.duration(this.opt(\"minTime\")), p = r.duration(this.opt(\"maxTime\")), l = this.adjustActiveRange(l, c, p), l = l.intersect(i), l && (t = this.msToUtcMoment(l.constrainDate(t), d)), u = o.unzonedRange.intersectsWith(i), {\n                        validUnzonedRange: i,\n                        currentUnzonedRange: o.unzonedRange,\n                        currentRangeUnit: o.unit,\n                        isRangeAllDay: s,\n                        activeUnzonedRange: l,\n                        renderUnzonedRange: a,\n                        minTime: c,\n                        maxTime: p,\n                        isValid: u,\n                        date: t,\n                        dateIncrement: this.buildDateIncrement(o.duration)\n                    }\n                }, t.prototype.buildValidRange = function () {\n                    return this._view.getUnzonedRangeOption(\"validRange\", this._view.calendar.getNow()) || new o.default\n                }, t.prototype.buildCurrentRangeInfo = function (t, e) {\n                    var n, r = this._view.viewSpec,\n                        o = null,\n                        s = null,\n                        a = null;\n                    return r.duration ? (o = r.duration, s = r.durationUnit, a = this.buildRangeFromDuration(t, e, o, s)) : (n = this.opt(\"dayCount\")) ? (s = \"day\", a = this.buildRangeFromDayCount(t, e, n)) : (a = this.buildCustomVisibleRange(t)) ? s = i.computeGreatestUnit(a.getStart(), a.getEnd()) : (o = this.getFallbackDuration(), s = i.computeGreatestUnit(o), a = this.buildRangeFromDuration(t, e, o, s)), {\n                        duration: o,\n                        unit: s,\n                        unzonedRange: a\n                    }\n                }, t.prototype.getFallbackDuration = function () {\n                    return r.duration({\n                        days: 1\n                    })\n                }, t.prototype.adjustActiveRange = function (t, e, n) {\n                    var r = t.getStart(),\n                        i = t.getEnd();\n                    return this._view.usesMinMaxTime && (e < 0 && r.time(0).add(e), n > 864e5 && i.time(n - 864e5)), new o.default(r, i)\n                }, t.prototype.buildRangeFromDuration = function (t, e, n, s) {\n                    function a() {\n                        d = t.clone().startOf(h), c = d.clone().add(n), p = new o.default(d, c)\n                    }\n                    var l, u, d, c, p, h = this.opt(\"dateAlignment\");\n                    return h || (l = this.opt(\"dateIncrement\"), l ? (u = r.duration(l), h = u < n ? i.computeDurationGreatestUnit(u, l) : s) : h = s), n.as(\"days\") <= 1 && this._view.isHiddenDay(d) && (d = this._view.skipHiddenDays(d, e), d.startOf(\"day\")), a(), this.trimHiddenDays(p) || (t = this._view.skipHiddenDays(t, e), a()), p\n                }, t.prototype.buildRangeFromDayCount = function (t, e, n) {\n                    var r, i, s = this.opt(\"dateAlignment\"),\n                        a = 0;\n                    if (s || -1 !== e) {\n                        r = t.clone(), s && r.startOf(s), r.startOf(\"day\"), r = this._view.skipHiddenDays(r), i = r.clone();\n                        do {\n                            i.add(1, \"day\"), this._view.isHiddenDay(i) || a++\n                        } while (a < n)\n                    } else {\n                        i = t.clone().startOf(\"day\").add(1, \"day\"), i = this._view.skipHiddenDays(i, -1, !0), r = i.clone();\n                        do {\n                            r.add(-1, \"day\"), this._view.isHiddenDay(r) || a++\n                        } while (a < n)\n                    }\n                    return new o.default(r, i)\n                }, t.prototype.buildCustomVisibleRange = function (t) {\n                    var e = this._view.getUnzonedRangeOption(\"visibleRange\", this._view.calendar.applyTimezone(t));\n                    return !e || null != e.startMs && null != e.endMs ? e : null\n                }, t.prototype.buildRenderRange = function (t, e, n) {\n                    return t.clone()\n                }, t.prototype.buildDateIncrement = function (t) {\n                    var e, n = this.opt(\"dateIncrement\");\n                    return n ? r.duration(n) : (e = this.opt(\"dateAlignment\")) ? r.duration(1, e) : t || r.duration({\n                        days: 1\n                    })\n                }, t\n            }();\n        e.default = s\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(2),\n            i = n(3),\n            o = n(4),\n            s = n(21),\n            a = n(6),\n            l = n(9),\n            u = function (t) {\n                function e(e) {\n                    var n = t.call(this, e) || this;\n                    return n.eventDefs = [], n\n                }\n                return r.__extends(e, t), e.parse = function (t, e) {\n                    var n;\n                    return i.isArray(t.events) ? n = t : i.isArray(t) && (n = {\n                        events: t\n                    }), !!n && a.default.parse.call(this, n, e)\n                }, e.prototype.setRawEventDefs = function (t) {\n                    this.rawEventDefs = t, this.eventDefs = this.parseEventDefs(t)\n                }, e.prototype.fetch = function (t, e, n) {\n                    var r, i = this.eventDefs;\n                    if (null != this.currentTimezone && this.currentTimezone !== n)\n                        for (r = 0; r < i.length; r++) i[r] instanceof l.default && i[r].rezone();\n                    return this.currentTimezone = n, s.default.resolve(i)\n                }, e.prototype.addEventDef = function (t) {\n                    this.eventDefs.push(t)\n                }, e.prototype.removeEventDefsById = function (t) {\n                    return o.removeMatching(this.eventDefs, function (e) {\n                        return e.id === t\n                    })\n                }, e.prototype.removeAllEventDefs = function () {\n                    this.eventDefs = []\n                }, e.prototype.getPrimitive = function () {\n                    return this.rawEventDefs\n                }, e.prototype.applyManualStandardProps = function (e) {\n                    var n = t.prototype.applyManualStandardProps.call(this, e);\n                    return this.setRawEventDefs(e.events), n\n                }, e\n            }(a.default);\n        e.default = u, u.defineStandardProps({\n            events: !1\n        })\n    }, function (t, e, n) {\n        function r(t, e) {\n            a[t] = e\n        }\n\n        function i(t) {\n            return t ? !0 === t ? s.default : a[t] : o.default\n        }\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var o = n(221),\n            s = n(222),\n            a = {};\n        e.defineThemeSystem = r, e.getThemeSystemClass = i\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(3),\n            i = n(4),\n            o = function () {\n                function t(t) {\n                    this.isHorizontal = !1, this.isVertical = !1, this.els = r(t.els), this.isHorizontal = t.isHorizontal, this.isVertical = t.isVertical, this.forcedOffsetParentEl = t.offsetParent ? r(t.offsetParent) : null\n                }\n                return t.prototype.build = function () {\n                    var t = this.forcedOffsetParentEl;\n                    !t && this.els.length > 0 && (t = this.els.eq(0).offsetParent()), this.origin = t ? t.offset() : null, this.boundingRect = this.queryBoundingRect(), this.isHorizontal && this.buildElHorizontals(), this.isVertical && this.buildElVerticals()\n                }, t.prototype.clear = function () {\n                    this.origin = null, this.boundingRect = null, this.lefts = null, this.rights = null, this.tops = null, this.bottoms = null\n                }, t.prototype.ensureBuilt = function () {\n                    this.origin || this.build()\n                }, t.prototype.buildElHorizontals = function () {\n                    var t = [],\n                        e = [];\n                    this.els.each(function (n, i) {\n                        var o = r(i),\n                            s = o.offset().left,\n                            a = o.outerWidth();\n                        t.push(s), e.push(s + a)\n                    }), this.lefts = t, this.rights = e\n                }, t.prototype.buildElVerticals = function () {\n                    var t = [],\n                        e = [];\n                    this.els.each(function (n, i) {\n                        var o = r(i),\n                            s = o.offset().top,\n                            a = o.outerHeight();\n                        t.push(s), e.push(s + a)\n                    }), this.tops = t, this.bottoms = e\n                }, t.prototype.getHorizontalIndex = function (t) {\n                    this.ensureBuilt();\n                    var e, n = this.lefts,\n                        r = this.rights,\n                        i = n.length;\n                    for (e = 0; e < i; e++)\n                        if (t >= n[e] && t < r[e]) return e\n                }, t.prototype.getVerticalIndex = function (t) {\n                    this.ensureBuilt();\n                    var e, n = this.tops,\n                        r = this.bottoms,\n                        i = n.length;\n                    for (e = 0; e < i; e++)\n                        if (t >= n[e] && t < r[e]) return e\n                }, t.prototype.getLeftOffset = function (t) {\n                    return this.ensureBuilt(), this.lefts[t]\n                }, t.prototype.getLeftPosition = function (t) {\n                    return this.ensureBuilt(), this.lefts[t] - this.origin.left\n                }, t.prototype.getRightOffset = function (t) {\n                    return this.ensureBuilt(), this.rights[t]\n                }, t.prototype.getRightPosition = function (t) {\n                    return this.ensureBuilt(), this.rights[t] - this.origin.left\n                }, t.prototype.getWidth = function (t) {\n                    return this.ensureBuilt(), this.rights[t] - this.lefts[t]\n                }, t.prototype.getTopOffset = function (t) {\n                    return this.ensureBuilt(), this.tops[t]\n                }, t.prototype.getTopPosition = function (t) {\n                    return this.ensureBuilt(), this.tops[t] - this.origin.top\n                }, t.prototype.getBottomOffset = function (t) {\n                    return this.ensureBuilt(), this.bottoms[t]\n                }, t.prototype.getBottomPosition = function (t) {\n                    return this.ensureBuilt(), this.bottoms[t] - this.origin.top\n                }, t.prototype.getHeight = function (t) {\n                    return this.ensureBuilt(), this.bottoms[t] - this.tops[t]\n                }, t.prototype.queryBoundingRect = function () {\n                    var t;\n                    return this.els.length > 0 && (t = i.getScrollParent(this.els.eq(0)), !t.is(document) && !t.is(\"html,body\")) ? i.getClientRect(t) : null\n                }, t.prototype.isPointInBounds = function (t, e) {\n                    return this.isLeftInBounds(t) && this.isTopInBounds(e)\n                }, t.prototype.isLeftInBounds = function (t) {\n                    return !this.boundingRect || t >= this.boundingRect.left && t < this.boundingRect.right\n                }, t.prototype.isTopInBounds = function (t) {\n                    return !this.boundingRect || t >= this.boundingRect.top && t < this.boundingRect.bottom\n                }, t\n            }();\n        e.default = o\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(3),\n            i = n(4),\n            o = n(7),\n            s = n(23),\n            a = function () {\n                function t(t) {\n                    this.isInteracting = !1, this.isDistanceSurpassed = !1, this.isDelayEnded = !1, this.isDragging = !1, this.isTouch = !1, this.isGeneric = !1, this.shouldCancelTouchScroll = !0, this.scrollAlwaysKills = !1, this.isAutoScroll = !1, this.scrollSensitivity = 30, this.scrollSpeed = 200, this.scrollIntervalMs = 50, this.options = t || {}\n                }\n                return t.prototype.startInteraction = function (t, e) {\n                    if (void 0 === e && (e = {}), \"mousedown\" === t.type) {\n                        if (s.default.get().shouldIgnoreMouse()) return;\n                        if (!i.isPrimaryMouseButton(t)) return;\n                        t.preventDefault()\n                    }\n                    this.isInteracting || (this.delay = i.firstDefined(e.delay, this.options.delay, 0), this.minDistance = i.firstDefined(e.distance, this.options.distance, 0), this.subjectEl = this.options.subjectEl, i.preventSelection(r(\"body\")), this.isInteracting = !0, this.isTouch = i.getEvIsTouch(t), this.isGeneric = \"dragstart\" === t.type, this.isDelayEnded = !1, this.isDistanceSurpassed = !1, this.originX = i.getEvX(t), this.originY = i.getEvY(t), this.scrollEl = i.getScrollParent(r(t.target)), this.bindHandlers(), this.initAutoScroll(), this.handleInteractionStart(t), this.startDelay(t), this.minDistance || this.handleDistanceSurpassed(t))\n                }, t.prototype.handleInteractionStart = function (t) {\n                    this.trigger(\"interactionStart\", t)\n                }, t.prototype.endInteraction = function (t, e) {\n                    this.isInteracting && (this.endDrag(t), this.delayTimeoutId && (clearTimeout(this.delayTimeoutId), this.delayTimeoutId = null), this.destroyAutoScroll(), this.unbindHandlers(), this.isInteracting = !1, this.handleInteractionEnd(t, e), i.allowSelection(r(\"body\")))\n                }, t.prototype.handleInteractionEnd = function (t, e) {\n                    this.trigger(\"interactionEnd\", t, e || !1)\n                }, t.prototype.bindHandlers = function () {\n                    var t = s.default.get();\n                    this.isGeneric ? this.listenTo(r(document), {\n                        drag: this.handleMove,\n                        dragstop: this.endInteraction\n                    }) : this.isTouch ? this.listenTo(t, {\n                        touchmove: this.handleTouchMove,\n                        touchend: this.endInteraction,\n                        scroll: this.handleTouchScroll\n                    }) : this.listenTo(t, {\n                        mousemove: this.handleMouseMove,\n                        mouseup: this.endInteraction\n                    }), this.listenTo(t, {\n                        selectstart: i.preventDefault,\n                        contextmenu: i.preventDefault\n                    })\n                }, t.prototype.unbindHandlers = function () {\n                    this.stopListeningTo(s.default.get()), this.stopListeningTo(r(document))\n                }, t.prototype.startDrag = function (t, e) {\n                    this.startInteraction(t, e), this.isDragging || (this.isDragging = !0, this.handleDragStart(t))\n                }, t.prototype.handleDragStart = function (t) {\n                    this.trigger(\"dragStart\", t)\n                }, t.prototype.handleMove = function (t) {\n                    var e = i.getEvX(t) - this.originX,\n                        n = i.getEvY(t) - this.originY,\n                        r = this.minDistance;\n                    this.isDistanceSurpassed || e * e + n * n >= r * r && this.handleDistanceSurpassed(t), this.isDragging && this.handleDrag(e, n, t)\n                }, t.prototype.handleDrag = function (t, e, n) {\n                    this.trigger(\"drag\", t, e, n), this.updateAutoScroll(n)\n                }, t.prototype.endDrag = function (t) {\n                    this.isDragging && (this.isDragging = !1, this.handleDragEnd(t))\n                }, t.prototype.handleDragEnd = function (t) {\n                    this.trigger(\"dragEnd\", t)\n                }, t.prototype.startDelay = function (t) {\n                    var e = this;\n                    this.delay ? this.delayTimeoutId = setTimeout(function () {\n                        e.handleDelayEnd(t)\n                    }, this.delay) : this.handleDelayEnd(t)\n                }, t.prototype.handleDelayEnd = function (t) {\n                    this.isDelayEnded = !0, this.isDistanceSurpassed && this.startDrag(t)\n                }, t.prototype.handleDistanceSurpassed = function (t) {\n                    this.isDistanceSurpassed = !0, this.isDelayEnded && this.startDrag(t)\n                }, t.prototype.handleTouchMove = function (t) {\n                    this.isDragging && this.shouldCancelTouchScroll && t.preventDefault(), this.handleMove(t)\n                }, t.prototype.handleMouseMove = function (t) {\n                    this.handleMove(t)\n                }, t.prototype.handleTouchScroll = function (t) {\n                    this.isDragging && !this.scrollAlwaysKills || this.endInteraction(t, !0)\n                }, t.prototype.trigger = function (t) {\n                    for (var e = [], n = 1; n < arguments.length; n++) e[n - 1] = arguments[n];\n                    this.options[t] && this.options[t].apply(this, e), this[\"_\" + t] && this[\"_\" + t].apply(this, e)\n                }, t.prototype.initAutoScroll = function () {\n                    var t = this.scrollEl;\n                    this.isAutoScroll = this.options.scroll && t && !t.is(window) && !t.is(document), this.isAutoScroll && this.listenTo(t, \"scroll\", i.debounce(this.handleDebouncedScroll, 100))\n                }, t.prototype.destroyAutoScroll = function () {\n                    this.endAutoScroll(), this.isAutoScroll && this.stopListeningTo(this.scrollEl, \"scroll\")\n                }, t.prototype.computeScrollBounds = function () {\n                    this.isAutoScroll && (this.scrollBounds = i.getOuterRect(this.scrollEl))\n                }, t.prototype.updateAutoScroll = function (t) {\n                    var e, n, r, o, s = this.scrollSensitivity,\n                        a = this.scrollBounds,\n                        l = 0,\n                        u = 0;\n                    a && (e = (s - (i.getEvY(t) - a.top)) / s, n = (s - (a.bottom - i.getEvY(t))) / s, r = (s - (i.getEvX(t) - a.left)) / s, o = (s - (a.right - i.getEvX(t))) / s, e >= 0 && e <= 1 ? l = e * this.scrollSpeed * -1 : n >= 0 && n <= 1 && (l = n * this.scrollSpeed), r >= 0 && r <= 1 ? u = r * this.scrollSpeed * -1 : o >= 0 && o <= 1 && (u = o * this.scrollSpeed)), this.setScrollVel(l, u)\n                }, t.prototype.setScrollVel = function (t, e) {\n                    this.scrollTopVel = t, this.scrollLeftVel = e, this.constrainScrollVel(), !this.scrollTopVel && !this.scrollLeftVel || this.scrollIntervalId || (this.scrollIntervalId = setInterval(i.proxy(this, \"scrollIntervalFunc\"), this.scrollIntervalMs))\n                }, t.prototype.constrainScrollVel = function () {\n                    var t = this.scrollEl;\n                    this.scrollTopVel < 0 ? t.scrollTop() <= 0 && (this.scrollTopVel = 0) : this.scrollTopVel > 0 && t.scrollTop() + t[0].clientHeight >= t[0].scrollHeight && (this.scrollTopVel = 0), this.scrollLeftVel < 0 ? t.scrollLeft() <= 0 && (this.scrollLeftVel = 0) : this.scrollLeftVel > 0 && t.scrollLeft() + t[0].clientWidth >= t[0].scrollWidth && (this.scrollLeftVel = 0)\n                }, t.prototype.scrollIntervalFunc = function () {\n                    var t = this.scrollEl,\n                        e = this.scrollIntervalMs / 1e3;\n                    this.scrollTopVel && t.scrollTop(t.scrollTop() + this.scrollTopVel * e), this.scrollLeftVel && t.scrollLeft(t.scrollLeft() + this.scrollLeftVel * e), this.constrainScrollVel(), this.scrollTopVel || this.scrollLeftVel || this.endAutoScroll()\n                }, t.prototype.endAutoScroll = function () {\n                    this.scrollIntervalId && (clearInterval(this.scrollIntervalId), this.scrollIntervalId = null, this.handleScrollEnd())\n                }, t.prototype.handleDebouncedScroll = function () {\n                    this.scrollIntervalId || this.handleScrollEnd()\n                }, t.prototype.handleScrollEnd = function () { }, t\n            }();\n        e.default = a, o.default.mixInto(a)\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(2),\n            i = n(4),\n            o = n(15),\n            s = function (t) {\n                function e() {\n                    return null !== t && t.apply(this, arguments) || this\n                }\n                return r.__extends(e, t), e.prototype.updateDayTable = function () {\n                    for (var t, e, n, r = this, i = r.view, o = i.calendar, s = o.msToUtcMoment(r.dateProfile.renderUnzonedRange.startMs, !0), a = o.msToUtcMoment(r.dateProfile.renderUnzonedRange.endMs, !0), l = -1, u = [], d = []; s.isBefore(a);) i.isHiddenDay(s) ? u.push(l + .5) : (l++, u.push(l), d.push(s.clone())), s.add(1, \"days\");\n                    if (this.breakOnWeeks) {\n                        for (e = d[0].day(), t = 1; t < d.length && d[t].day() !== e; t++);\n                        n = Math.ceil(d.length / t)\n                    } else n = 1, t = d.length;\n                    this.dayDates = d, this.dayIndices = u, this.daysPerRow = t, this.rowCnt = n, this.updateDayTableCols()\n                }, e.prototype.updateDayTableCols = function () {\n                    this.colCnt = this.computeColCnt(), this.colHeadFormat = this.opt(\"columnHeaderFormat\") || this.opt(\"columnFormat\") || this.computeColHeadFormat()\n                }, e.prototype.computeColCnt = function () {\n                    return this.daysPerRow\n                }, e.prototype.getCellDate = function (t, e) {\n                    return this.dayDates[this.getCellDayIndex(t, e)].clone()\n                }, e.prototype.getCellRange = function (t, e) {\n                    var n = this.getCellDate(t, e);\n                    return {\n                        start: n,\n                        end: n.clone().add(1, \"days\")\n                    }\n                }, e.prototype.getCellDayIndex = function (t, e) {\n                    return t * this.daysPerRow + this.getColDayIndex(e)\n                }, e.prototype.getColDayIndex = function (t) {\n                    return this.isRTL ? this.colCnt - 1 - t : t\n                }, e.prototype.getDateDayIndex = function (t) {\n                    var e = this.dayIndices,\n                        n = t.diff(this.dayDates[0], \"days\");\n                    return n < 0 ? e[0] - 1 : n >= e.length ? e[e.length - 1] + 1 : e[n]\n                }, e.prototype.computeColHeadFormat = function () {\n                    return this.rowCnt > 1 || this.colCnt > 10 ? \"ddd\" : this.colCnt > 1 ? this.opt(\"dayOfMonthFormat\") : \"dddd\"\n                }, e.prototype.sliceRangeByRow = function (t) {\n                    var e, n, r, i, o, s = this.daysPerRow,\n                        a = this.view.computeDayRange(t),\n                        l = this.getDateDayIndex(a.start),\n                        u = this.getDateDayIndex(a.end.clone().subtract(1, \"days\")),\n                        d = [];\n                    for (e = 0; e < this.rowCnt; e++) n = e * s, r = n + s - 1, i = Math.max(l, n), o = Math.min(u, r), i = Math.ceil(i), o = Math.floor(o), i <= o && d.push({\n                        row: e,\n                        firstRowDayIndex: i - n,\n                        lastRowDayIndex: o - n,\n                        isStart: i === l,\n                        isEnd: o === u\n                    });\n                    return d\n                }, e.prototype.sliceRangeByDay = function (t) {\n                    var e, n, r, i, o, s, a = this.daysPerRow,\n                        l = this.view.computeDayRange(t),\n                        u = this.getDateDayIndex(l.start),\n                        d = this.getDateDayIndex(l.end.clone().subtract(1, \"days\")),\n                        c = [];\n                    for (e = 0; e < this.rowCnt; e++)\n                        for (n = e * a, r = n + a - 1, i = n; i <= r; i++) o = Math.max(u, i), s = Math.min(d, i), o = Math.ceil(o), s = Math.floor(s), o <= s && c.push({\n                            row: e,\n                            firstRowDayIndex: o - n,\n                            lastRowDayIndex: s - n,\n                            isStart: o === u,\n                            isEnd: s === d\n                        });\n                    return c\n                }, e.prototype.renderHeadHtml = function () {\n                    var t = this.view.calendar.theme;\n                    return '<div class=\"fc-row ' + t.getClass(\"headerRow\") + '\"><table class=\"' + t.getClass(\"tableGrid\") + '\"><thead>' + this.renderHeadTrHtml() + \"</thead></table></div>\"\n                }, e.prototype.renderHeadIntroHtml = function () {\n                    return this.renderIntroHtml()\n                }, e.prototype.renderHeadTrHtml = function () {\n                    return \"<tr>\" + (this.isRTL ? \"\" : this.renderHeadIntroHtml()) + this.renderHeadDateCellsHtml() + (this.isRTL ? this.renderHeadIntroHtml() : \"\") + \"</tr>\"\n                }, e.prototype.renderHeadDateCellsHtml = function () {\n                    var t, e, n = [];\n                    for (t = 0; t < this.colCnt; t++) e = this.getCellDate(0, t), n.push(this.renderHeadDateCellHtml(e));\n                    return n.join(\"\")\n                }, e.prototype.renderHeadDateCellHtml = function (t, e, n) {\n                    var r, o = this,\n                        s = o.view,\n                        a = o.dateProfile.activeUnzonedRange.containsDate(t),\n                        l = [\"fc-day-header\", s.calendar.theme.getClass(\"widgetHeader\")];\n                    return r = \"function\" == typeof o.opt(\"columnHeaderHtml\") ? o.opt(\"columnHeaderHtml\")(t) : \"function\" == typeof o.opt(\"columnHeaderText\") ? i.htmlEscape(o.opt(\"columnHeaderText\")(t)) : i.htmlEscape(t.format(o.colHeadFormat)), 1 === o.rowCnt ? l = l.concat(o.getDayClasses(t, !0)) : l.push(\"fc-\" + i.dayIDs[t.day()]), '<th class=\"' + l.join(\" \") + '\"' + (1 === (a && o.rowCnt) ? ' data-date=\"' + t.format(\"YYYY-MM-DD\") + '\"' : \"\") + (e > 1 ? ' colspan=\"' + e + '\"' : \"\") + (n ? \" \" + n : \"\") + \">\" + (a ? s.buildGotoAnchorHtml({\n                        date: t,\n                        forceOff: o.rowCnt > 1 || 1 === o.colCnt\n                    }, r) : r) + \"</th>\"\n                }, e.prototype.renderBgTrHtml = function (t) {\n                    return \"<tr>\" + (this.isRTL ? \"\" : this.renderBgIntroHtml(t)) + this.renderBgCellsHtml(t) + (this.isRTL ? this.renderBgIntroHtml(t) : \"\") + \"</tr>\"\n                }, e.prototype.renderBgIntroHtml = function (t) {\n                    return this.renderIntroHtml()\n                }, e.prototype.renderBgCellsHtml = function (t) {\n                    var e, n, r = [];\n                    for (e = 0; e < this.colCnt; e++) n = this.getCellDate(t, e), r.push(this.renderBgCellHtml(n));\n                    return r.join(\"\")\n                }, e.prototype.renderBgCellHtml = function (t, e) {\n                    var n = this,\n                        r = n.view,\n                        i = n.dateProfile.activeUnzonedRange.containsDate(t),\n                        o = n.getDayClasses(t);\n                    return o.unshift(\"fc-day\", r.calendar.theme.getClass(\"widgetContent\")), '<td class=\"' + o.join(\" \") + '\"' + (i ? ' data-date=\"' + t.format(\"YYYY-MM-DD\") + '\"' : \"\") + (e ? \" \" + e : \"\") + \"></td>\"\n                }, e.prototype.renderIntroHtml = function () { }, e.prototype.bookendCells = function (t) {\n                    var e = this.renderIntroHtml();\n                    e && (this.isRTL ? t.append(e) : t.prepend(e))\n                }, e\n            }(o.default);\n        e.default = s\n    }, function (t, e) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var n = function () {\n            function t(t, e) {\n                this.component = t, this.fillRenderer = e\n            }\n            return t.prototype.render = function (t) {\n                var e = this.component,\n                    n = e._getDateProfile().activeUnzonedRange,\n                    r = t.buildEventInstanceGroup(e.hasAllDayBusinessHours, n),\n                    i = r ? e.eventRangesToEventFootprints(r.sliceRenderRanges(n)) : [];\n                this.renderEventFootprints(i)\n            }, t.prototype.renderEventFootprints = function (t) {\n                var e = this.component.eventFootprintsToSegs(t);\n                this.renderSegs(e), this.segs = e\n            }, t.prototype.renderSegs = function (t) {\n                this.fillRenderer && this.fillRenderer.renderSegs(\"businessHours\", t, {\n                    getClasses: function (t) {\n                        return [\"fc-nonbusiness\", \"fc-bgevent\"]\n                    }\n                })\n            }, t.prototype.unrender = function () {\n                this.fillRenderer && this.fillRenderer.unrender(\"businessHours\"), this.segs = null\n            }, t.prototype.getSegs = function () {\n                return this.segs || []\n            }, t\n        }();\n        e.default = n\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(3),\n            i = n(4),\n            o = function () {\n                function t(t) {\n                    this.fillSegTag = \"div\", this.component = t, this.elsByFill = {}\n                }\n                return t.prototype.renderFootprint = function (t, e, n) {\n                    this.renderSegs(t, this.component.componentFootprintToSegs(e), n)\n                }, t.prototype.renderSegs = function (t, e, n) {\n                    var r;\n                    return e = this.buildSegEls(t, e, n), r = this.attachSegEls(t, e), r && this.reportEls(t, r), e\n                }, t.prototype.unrender = function (t) {\n                    var e = this.elsByFill[t];\n                    e && (e.remove(), delete this.elsByFill[t])\n                }, t.prototype.buildSegEls = function (t, e, n) {\n                    var i, o = this,\n                        s = \"\",\n                        a = [];\n                    if (e.length) {\n                        for (i = 0; i < e.length; i++) s += this.buildSegHtml(t, e[i], n);\n                        r(s).each(function (t, i) {\n                            var s = e[t],\n                                l = r(i);\n                            n.filterEl && (l = n.filterEl(s, l)), l && (l = r(l), l.is(o.fillSegTag) && (s.el = l, a.push(s)))\n                        })\n                    }\n                    return a\n                }, t.prototype.buildSegHtml = function (t, e, n) {\n                    var r = n.getClasses ? n.getClasses(e) : [],\n                        o = i.cssToStr(n.getCss ? n.getCss(e) : {});\n                    return \"<\" + this.fillSegTag + (r.length ? ' class=\"' + r.join(\" \") + '\"' : \"\") + (o ? ' style=\"' + o + '\"' : \"\") + \" />\"\n                }, t.prototype.attachSegEls = function (t, e) { }, t.prototype.reportEls = function (t, e) {\n                    this.elsByFill[t] ? this.elsByFill[t] = this.elsByFill[t].add(e) : this.elsByFill[t] = r(e)\n                }, t\n            }();\n        e.default = o\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(9),\n            i = n(34),\n            o = n(6),\n            s = function () {\n                function t(t, e) {\n                    this.view = t._getView(), this.component = t, this.eventRenderer = e\n                }\n                return t.prototype.renderComponentFootprint = function (t) {\n                    this.renderEventFootprints([this.fabricateEventFootprint(t)])\n                }, t.prototype.renderEventDraggingFootprints = function (t, e, n) {\n                    this.renderEventFootprints(t, e, \"fc-dragging\", n ? null : this.view.opt(\"dragOpacity\"))\n                }, t.prototype.renderEventResizingFootprints = function (t, e, n) {\n                    this.renderEventFootprints(t, e, \"fc-resizing\")\n                }, t.prototype.renderEventFootprints = function (t, e, n, r) {\n                    var i, o = this.component.eventFootprintsToSegs(t),\n                        s = \"fc-helper \" + (n || \"\");\n                    for (o = this.eventRenderer.renderFgSegEls(o), i = 0; i < o.length; i++) o[i].el.addClass(s);\n                    if (null != r)\n                        for (i = 0; i < o.length; i++) o[i].el.css(\"opacity\", r);\n                    this.helperEls = this.renderSegs(o, e)\n                }, t.prototype.renderSegs = function (t, e) { }, t.prototype.unrender = function () {\n                    this.helperEls && (this.helperEls.remove(), this.helperEls = null)\n                }, t.prototype.fabricateEventFootprint = function (t) {\n                    var e, n = this.view.calendar,\n                        s = n.footprintToDateProfile(t),\n                        a = new r.default(new o.default(n));\n                    return a.dateProfile = s, e = a.buildInstance(), new i.default(t, a, e)\n                }, t\n            }();\n        e.default = s\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(2),\n            i = n(23),\n            o = n(14),\n            s = function (t) {\n                function e() {\n                    return null !== t && t.apply(this, arguments) || this\n                }\n                return r.__extends(e, t), e.prototype.bindToEl = function (t) {\n                    var e = this.component;\n                    e.bindSegHandlerToEl(t, \"click\", this.handleClick.bind(this)), e.bindSegHandlerToEl(t, \"mouseenter\", this.handleMouseover.bind(this)), e.bindSegHandlerToEl(t, \"mouseleave\", this.handleMouseout.bind(this))\n                }, e.prototype.handleClick = function (t, e) {\n                    !1 === this.component.publiclyTrigger(\"eventClick\", {\n                        context: t.el[0],\n                        args: [t.footprint.getEventLegacy(), e, this.view]\n                    }) && e.preventDefault()\n                }, e.prototype.handleMouseover = function (t, e) {\n                    i.default.get().shouldIgnoreMouse() || this.mousedOverSeg || (this.mousedOverSeg = t, this.view.isEventDefResizable(t.footprint.eventDef) && t.el.addClass(\"fc-allow-mouse-resize\"), this.component.publiclyTrigger(\"eventMouseover\", {\n                        context: t.el[0],\n                        args: [t.footprint.getEventLegacy(), e, this.view]\n                    }))\n                }, e.prototype.handleMouseout = function (t, e) {\n                    this.mousedOverSeg && (this.mousedOverSeg = null, this.view.isEventDefResizable(t.footprint.eventDef) && t.el.removeClass(\"fc-allow-mouse-resize\"), this.component.publiclyTrigger(\"eventMouseout\", {\n                        context: t.el[0],\n                        args: [t.footprint.getEventLegacy(), e || {}, this.view]\n                    }))\n                }, e.prototype.end = function () {\n                    this.mousedOverSeg && this.handleMouseout(this.mousedOverSeg)\n                }, e\n            }(o.default);\n        e.default = s\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(2),\n            i = n(15),\n            o = n(237),\n            s = n(236),\n            a = n(64),\n            l = n(235),\n            u = n(234),\n            d = n(233),\n            c = function (t) {\n                function e() {\n                    return null !== t && t.apply(this, arguments) || this\n                }\n                return r.__extends(e, t), e\n            }(i.default);\n        e.default = c, c.prototype.dateClickingClass = o.default, c.prototype.dateSelectingClass = s.default, c.prototype.eventPointingClass = a.default, c.prototype.eventDraggingClass = l.default, c.prototype.eventResizingClass = u.default, c.prototype.externalDroppingClass = d.default\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(2),\n            i = n(3),\n            o = n(4),\n            s = n(58),\n            a = n(227),\n            l = n(5),\n            u = n(12),\n            d = n(34),\n            c = n(61),\n            p = n(65),\n            h = n(42),\n            f = n(60),\n            g = n(243),\n            v = n(244),\n            y = n(245),\n            m = function (t) {\n                function e(e) {\n                    var n = t.call(this, e) || this;\n                    return n.cellWeekNumbersVisible = !1, n.bottomCoordPadding = 0, n.isRigid = !1, n.hasAllDayBusinessHours = !0, n\n                }\n                return r.__extends(e, t), e.prototype.componentFootprintToSegs = function (t) {\n                    var e, n, r = this.sliceRangeByRow(t.unzonedRange);\n                    for (e = 0; e < r.length; e++) n = r[e], this.isRTL ? (n.leftCol = this.daysPerRow - 1 - n.lastRowDayIndex, n.rightCol = this.daysPerRow - 1 - n.firstRowDayIndex) : (n.leftCol = n.firstRowDayIndex, n.rightCol = n.lastRowDayIndex);\n                    return r\n                }, e.prototype.renderDates = function (t) {\n                    this.dateProfile = t, this.updateDayTable(), this.renderGrid()\n                }, e.prototype.unrenderDates = function () {\n                    this.removeSegPopover()\n                }, e.prototype.renderGrid = function () {\n                    var t, e, n = this.view,\n                        r = this.rowCnt,\n                        i = this.colCnt,\n                        o = \"\";\n                    for (this.headContainerEl && this.headContainerEl.html(this.renderHeadHtml()), t = 0; t < r; t++) o += this.renderDayRowHtml(t, this.isRigid);\n                    for (this.el.html(o), this.rowEls = this.el.find(\".fc-row\"), this.cellEls = this.el.find(\".fc-day, .fc-disabled-day\"), this.rowCoordCache = new s.default({\n                        els: this.rowEls,\n                        isVertical: !0\n                    }), this.colCoordCache = new s.default({\n                        els: this.cellEls.slice(0, this.colCnt),\n                        isHorizontal: !0\n                    }), t = 0; t < r; t++)\n                        for (e = 0; e < i; e++) this.publiclyTrigger(\"dayRender\", {\n                            context: n,\n                            args: [this.getCellDate(t, e), this.getCellEl(t, e), n]\n                        })\n                }, e.prototype.renderDayRowHtml = function (t, e) {\n                    var n = this.view.calendar.theme,\n                        r = [\"fc-row\", \"fc-week\", n.getClass(\"dayRow\")];\n                    return e && r.push(\"fc-rigid\"), '<div class=\"' + r.join(\" \") + '\"><div class=\"fc-bg\"><table class=\"' + n.getClass(\"tableGrid\") + '\">' + this.renderBgTrHtml(t) + '</table></div><div class=\"fc-content-skeleton\"><table>' + (this.getIsNumbersVisible() ? \"<thead>\" + this.renderNumberTrHtml(t) + \"</thead>\" : \"\") + \"</table></div></div>\"\n                }, e.prototype.getIsNumbersVisible = function () {\n                    return this.getIsDayNumbersVisible() || this.cellWeekNumbersVisible\n                }, e.prototype.getIsDayNumbersVisible = function () {\n                    return this.rowCnt > 1\n                }, e.prototype.renderNumberTrHtml = function (t) {\n                    return \"<tr>\" + (this.isRTL ? \"\" : this.renderNumberIntroHtml(t)) + this.renderNumberCellsHtml(t) + (this.isRTL ? this.renderNumberIntroHtml(t) : \"\") + \"</tr>\"\n                }, e.prototype.renderNumberIntroHtml = function (t) {\n                    return this.renderIntroHtml()\n                }, e.prototype.renderNumberCellsHtml = function (t) {\n                    var e, n, r = [];\n                    for (e = 0; e < this.colCnt; e++) n = this.getCellDate(t, e), r.push(this.renderNumberCellHtml(n));\n                    return r.join(\"\")\n                }, e.prototype.renderNumberCellHtml = function (t) {\n                    var e, n, r = this.view,\n                        i = \"\",\n                        o = this.dateProfile.activeUnzonedRange.containsDate(t),\n                        s = this.getIsDayNumbersVisible() && o;\n                    return s || this.cellWeekNumbersVisible ? (e = this.getDayClasses(t), e.unshift(\"fc-day-top\"), this.cellWeekNumbersVisible && (n = \"ISO\" === t._locale._fullCalendar_weekCalc ? 1 : t._locale.firstDayOfWeek()), i += '<td class=\"' + e.join(\" \") + '\"' + (o ? ' data-date=\"' + t.format() + '\"' : \"\") + \">\", this.cellWeekNumbersVisible && t.day() === n && (i += r.buildGotoAnchorHtml({\n                        date: t,\n                        type: \"week\"\n                    }, {\n                        class: \"fc-week-number\"\n                    }, t.format(\"w\"))), s && (i += r.buildGotoAnchorHtml(t, {\n                        class: \"fc-day-number\"\n                    }, t.format(\"D\"))), i += \"</td>\") : \"<td/>\"\n                }, e.prototype.prepareHits = function () {\n                    this.colCoordCache.build(), this.rowCoordCache.build(), this.rowCoordCache.bottoms[this.rowCnt - 1] += this.bottomCoordPadding\n                }, e.prototype.releaseHits = function () {\n                    this.colCoordCache.clear(), this.rowCoordCache.clear()\n                }, e.prototype.queryHit = function (t, e) {\n                    if (this.colCoordCache.isLeftInBounds(t) && this.rowCoordCache.isTopInBounds(e)) {\n                        var n = this.colCoordCache.getHorizontalIndex(t),\n                            r = this.rowCoordCache.getVerticalIndex(e);\n                        if (null != r && null != n) return this.getCellHit(r, n)\n                    }\n                }, e.prototype.getHitFootprint = function (t) {\n                    var e = this.getCellRange(t.row, t.col);\n                    return new u.default(new l.default(e.start, e.end), !0)\n                }, e.prototype.getHitEl = function (t) {\n                    return this.getCellEl(t.row, t.col)\n                }, e.prototype.getCellHit = function (t, e) {\n                    return {\n                        row: t,\n                        col: e,\n                        component: this,\n                        left: this.colCoordCache.getLeftOffset(e),\n                        right: this.colCoordCache.getRightOffset(e),\n                        top: this.rowCoordCache.getTopOffset(t),\n                        bottom: this.rowCoordCache.getBottomOffset(t)\n                    }\n                }, e.prototype.getCellEl = function (t, e) {\n                    return this.cellEls.eq(t * this.colCnt + e)\n                }, e.prototype.executeEventUnrender = function () {\n                    this.removeSegPopover(), t.prototype.executeEventUnrender.call(this)\n                }, e.prototype.getOwnEventSegs = function () {\n                    return t.prototype.getOwnEventSegs.call(this).concat(this.popoverSegs || [])\n                }, e.prototype.renderDrag = function (t, e, n) {\n                    var r;\n                    for (r = 0; r < t.length; r++) this.renderHighlight(t[r].componentFootprint);\n                    if (t.length && e && e.component !== this) return this.helperRenderer.renderEventDraggingFootprints(t, e, n), !0\n                }, e.prototype.unrenderDrag = function () {\n                    this.unrenderHighlight(), this.helperRenderer.unrender()\n                }, e.prototype.renderEventResize = function (t, e, n) {\n                    var r;\n                    for (r = 0; r < t.length; r++) this.renderHighlight(t[r].componentFootprint);\n                    this.helperRenderer.renderEventResizingFootprints(t, e, n)\n                }, e.prototype.unrenderEventResize = function () {\n                    this.unrenderHighlight(), this.helperRenderer.unrender()\n                }, e.prototype.removeSegPopover = function () {\n                    this.segPopover && this.segPopover.hide()\n                }, e.prototype.limitRows = function (t) {\n                    var e, n, r = this.eventRenderer.rowStructs || [];\n                    for (e = 0; e < r.length; e++) this.unlimitRow(e), !1 !== (n = !!t && (\"number\" == typeof t ? t : this.computeRowLevelLimit(e))) && this.limitRow(e, n)\n                }, e.prototype.computeRowLevelLimit = function (t) {\n                    function e(t, e) {\n                        o = Math.max(o, i(e).outerHeight())\n                    }\n                    var n, r, o, s = this.rowEls.eq(t),\n                        a = s.height(),\n                        l = this.eventRenderer.rowStructs[t].tbodyEl.children();\n                    for (n = 0; n < l.length; n++)\n                        if (r = l.eq(n).removeClass(\"fc-limited\"), o = 0, r.find(\"> td > :first-child\").each(e), r.position().top + o > a) return n;\n                    return !1\n                }, e.prototype.limitRow = function (t, e) {\n                    var n, r, o, s, a, l, u, d, c, p, h, f, g, v, y, m = this,\n                        b = this.eventRenderer.rowStructs[t],\n                        w = [],\n                        D = 0,\n                        E = function (n) {\n                            for (; D < n;) l = m.getCellSegs(t, D, e), l.length && (c = r[e - 1][D], y = m.renderMoreLink(t, D, l), v = i(\"<div/>\").append(y), c.append(v), w.push(v[0])), D++\n                        };\n                    if (e && e < b.segLevels.length) {\n                        for (n = b.segLevels[e - 1], r = b.cellMatrix, o = b.tbodyEl.children().slice(e).addClass(\"fc-limited\").get(), s = 0; s < n.length; s++) {\n                            for (a = n[s], E(a.leftCol), d = [], u = 0; D <= a.rightCol;) l = this.getCellSegs(t, D, e), d.push(l), u += l.length, D++;\n                            if (u) {\n                                for (c = r[e - 1][a.leftCol], p = c.attr(\"rowspan\") || 1, h = [], f = 0; f < d.length; f++) g = i('<td class=\"fc-more-cell\"/>').attr(\"rowspan\", p), l = d[f], y = this.renderMoreLink(t, a.leftCol + f, [a].concat(l)), v = i(\"<div/>\").append(y), g.append(v), h.push(g[0]), w.push(g[0]);\n                                c.addClass(\"fc-limited\").after(i(h)), o.push(c[0])\n                            }\n                        }\n                        E(this.colCnt), b.moreEls = i(w), b.limitedEls = i(o)\n                    }\n                }, e.prototype.unlimitRow = function (t) {\n                    var e = this.eventRenderer.rowStructs[t];\n                    e.moreEls && (e.moreEls.remove(), e.moreEls = null), e.limitedEls && (e.limitedEls.removeClass(\"fc-limited\"), e.limitedEls = null)\n                }, e.prototype.renderMoreLink = function (t, e, n) {\n                    var r = this,\n                        o = this.view;\n                    return i('<a class=\"fc-more\"/>').text(this.getMoreLinkText(n.length)).on(\"click\", function (s) {\n                        var a = r.opt(\"eventLimitClick\"),\n                            l = r.getCellDate(t, e),\n                            u = i(s.currentTarget),\n                            d = r.getCellEl(t, e),\n                            c = r.getCellSegs(t, e),\n                            p = r.resliceDaySegs(c, l),\n                            h = r.resliceDaySegs(n, l);\n                        \"function\" == typeof a && (a = r.publiclyTrigger(\"eventLimitClick\", {\n                            context: o,\n                            args: [{\n                                date: l.clone(),\n                                dayEl: d,\n                                moreEl: u,\n                                segs: p,\n                                hiddenSegs: h\n                            }, s, o]\n                        })), \"popover\" === a ? r.showSegPopover(t, e, u, p) : \"string\" == typeof a && o.calendar.zoomTo(l, a)\n                    })\n                }, e.prototype.showSegPopover = function (t, e, n, r) {\n                    var i, o, s = this,\n                        l = this.view,\n                        u = n.parent();\n                    i = 1 === this.rowCnt ? l.el : this.rowEls.eq(t), o = {\n                        className: \"fc-more-popover \" + l.calendar.theme.getClass(\"popover\"),\n                        content: this.renderSegPopoverContent(t, e, r),\n                        parentEl: l.el,\n                        top: i.offset().top,\n                        autoHide: !0,\n                        viewportConstrain: this.opt(\"popoverViewportConstrain\"),\n                        hide: function () {\n                            s.popoverSegs && s.triggerBeforeEventSegsDestroyed(s.popoverSegs), s.segPopover.removeElement(), s.segPopover = null, s.popoverSegs = null\n                        }\n                    }, this.isRTL ? o.right = u.offset().left + u.outerWidth() + 1 : o.left = u.offset().left - 1, this.segPopover = new a.default(o), this.segPopover.show(), this.bindAllSegHandlersToEl(this.segPopover.el), this.triggerAfterEventSegsRendered(r)\n                }, e.prototype.renderSegPopoverContent = function (t, e, n) {\n                    var r, s = this.view,\n                        a = s.calendar.theme,\n                        l = this.getCellDate(t, e).format(this.opt(\"dayPopoverFormat\")),\n                        u = i('<div class=\"fc-header ' + a.getClass(\"popoverHeader\") + '\"><span class=\"fc-close ' + a.getIconClass(\"close\") + '\"></span><span class=\"fc-title\">' + o.htmlEscape(l) + '</span><div class=\"fc-clear\"/></div><div class=\"fc-body ' + a.getClass(\"popoverContent\") + '\"><div class=\"fc-event-container\"></div></div>'),\n                        d = u.find(\".fc-event-container\");\n                    for (n = this.eventRenderer.renderFgSegEls(n, !0), this.popoverSegs = n, r = 0; r < n.length; r++) this.hitsNeeded(), n[r].hit = this.getCellHit(t, e), this.hitsNotNeeded(), d.append(n[r].el);\n                    return u\n                }, e.prototype.resliceDaySegs = function (t, e) {\n                    var n, r, o, s = e.clone(),\n                        a = s.clone().add(1, \"days\"),\n                        c = new l.default(s, a),\n                        p = [];\n                    for (n = 0; n < t.length; n++) r = t[n], (o = r.footprint.componentFootprint.unzonedRange.intersect(c)) && p.push(i.extend({}, r, {\n                        footprint: new d.default(new u.default(o, r.footprint.componentFootprint.isAllDay), r.footprint.eventDef, r.footprint.eventInstance),\n                        isStart: r.isStart && o.isStart,\n                        isEnd: r.isEnd && o.isEnd\n                    }));\n                    return this.eventRenderer.sortEventSegs(p), p\n                }, e.prototype.getMoreLinkText = function (t) {\n                    var e = this.opt(\"eventLimitText\");\n                    return \"function\" == typeof e ? e(t) : \"+\" + t + \" \" + e\n                }, e.prototype.getCellSegs = function (t, e, n) {\n                    for (var r, i = this.eventRenderer.rowStructs[t].segMatrix, o = n || 0, s = []; o < i.length;) r = i[o][e], r && s.push(r), o++;\n                    return s\n                }, e\n            }(h.default);\n        e.default = m, m.prototype.eventRendererClass = g.default, m.prototype.businessHourRendererClass = c.default, m.prototype.helperRendererClass = v.default, m.prototype.fillRendererClass = y.default, p.default.mixInto(m), f.default.mixInto(m)\n    }, function (t, e, n) {\n        function r(t) {\n            return function (t) {\n                function e() {\n                    var e = null !== t && t.apply(this, arguments) || this;\n                    return e.colWeekNumbersVisible = !1, e\n                }\n                return i.__extends(e, t), e.prototype.renderHeadIntroHtml = function () {\n                    var t = this.view;\n                    return this.colWeekNumbersVisible ? '<th class=\"fc-week-number ' + t.calendar.theme.getClass(\"widgetHeader\") + '\" ' + t.weekNumberStyleAttr() + \"><span>\" + s.htmlEscape(this.opt(\"weekNumberTitle\")) + \"</span></th>\" : \"\"\n                }, e.prototype.renderNumberIntroHtml = function (t) {\n                    var e = this.view,\n                        n = this.getCellDate(t, 0);\n                    return this.colWeekNumbersVisible ? '<td class=\"fc-week-number\" ' + e.weekNumberStyleAttr() + \">\" + e.buildGotoAnchorHtml({\n                        date: n,\n                        type: \"week\",\n                        forceOff: 1 === this.colCnt\n                    }, n.format(\"w\")) + \"</td>\" : \"\"\n                }, e.prototype.renderBgIntroHtml = function () {\n                    var t = this.view;\n                    return this.colWeekNumbersVisible ? '<td class=\"fc-week-number ' + t.calendar.theme.getClass(\"widgetContent\") + '\" ' + t.weekNumberStyleAttr() + \"></td>\" : \"\"\n                }, e.prototype.renderIntroHtml = function () {\n                    var t = this.view;\n                    return this.colWeekNumbersVisible ? '<td class=\"fc-week-number\" ' + t.weekNumberStyleAttr() + \"></td>\" : \"\"\n                }, e.prototype.getIsNumbersVisible = function () {\n                    return d.default.prototype.getIsNumbersVisible.apply(this, arguments) || this.colWeekNumbersVisible\n                }, e\n            }(t)\n        }\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var i = n(2),\n            o = n(3),\n            s = n(4),\n            a = n(41),\n            l = n(43),\n            u = n(68),\n            d = n(66),\n            c = function (t) {\n                function e(e, n) {\n                    var r = t.call(this, e, n) || this;\n                    return r.dayGrid = r.instantiateDayGrid(), r.dayGrid.isRigid = r.hasRigidRows(), r.opt(\"weekNumbers\") && (r.opt(\"weekNumbersWithinDays\") ? (r.dayGrid.cellWeekNumbersVisible = !0, r.dayGrid.colWeekNumbersVisible = !1) : (r.dayGrid.cellWeekNumbersVisible = !1, r.dayGrid.colWeekNumbersVisible = !0)), r.addChild(r.dayGrid), r.scroller = new a.default({\n                        overflowX: \"hidden\",\n                        overflowY: \"auto\"\n                    }), r\n                }\n                return i.__extends(e, t), e.prototype.instantiateDayGrid = function () {\n                    return new (r(this.dayGridClass))(this)\n                }, e.prototype.executeDateRender = function (e) {\n                    this.dayGrid.breakOnWeeks = /year|month|week/.test(e.currentRangeUnit), t.prototype.executeDateRender.call(this, e)\n                }, e.prototype.renderSkeleton = function () {\n                    var t, e;\n                    this.el.addClass(\"fc-basic-view\").html(this.renderSkeletonHtml()), this.scroller.render(), t = this.scroller.el.addClass(\"fc-day-grid-container\"), e = o('<div class=\"fc-day-grid\" />').appendTo(t), this.el.find(\".fc-body > tr > td\").append(t), this.dayGrid.headContainerEl = this.el.find(\".fc-head-container\"), this.dayGrid.setElement(e)\n                }, e.prototype.unrenderSkeleton = function () {\n                    this.dayGrid.removeElement(), this.scroller.destroy()\n                }, e.prototype.renderSkeletonHtml = function () {\n                    var t = this.calendar.theme;\n                    return '<table class=\"' + t.getClass(\"tableGrid\") + '\">' + (this.opt(\"columnHeader\") ? '<thead class=\"fc-head\"><tr><td class=\"fc-head-container ' + t.getClass(\"widgetHeader\") + '\">&nbsp;</td></tr></thead>' : \"\") + '<tbody class=\"fc-body\"><tr><td class=\"' + t.getClass(\"widgetContent\") + '\"></td></tr></tbody></table>'\n                }, e.prototype.weekNumberStyleAttr = function () {\n                    return null != this.weekNumberWidth ? 'style=\"width:' + this.weekNumberWidth + 'px\"' : \"\"\n                }, e.prototype.hasRigidRows = function () {\n                    var t = this.opt(\"eventLimit\");\n                    return t && \"number\" != typeof t\n                }, e.prototype.updateSize = function (e, n, r) {\n                    var i, o, a = this.opt(\"eventLimit\"),\n                        l = this.dayGrid.headContainerEl.find(\".fc-row\");\n                    if (!this.dayGrid.rowEls) return void (n || (i = this.computeScrollerHeight(e), this.scroller.setHeight(i)));\n                    t.prototype.updateSize.call(this, e, n, r), this.dayGrid.colWeekNumbersVisible && (this.weekNumberWidth = s.matchCellWidths(this.el.find(\".fc-week-number\"))), this.scroller.clear(), s.uncompensateScroll(l), this.dayGrid.removeSegPopover(), a && \"number\" == typeof a && this.dayGrid.limitRows(a), i = this.computeScrollerHeight(e), this.setGridHeight(i, n), a && \"number\" != typeof a && this.dayGrid.limitRows(a), n || (this.scroller.setHeight(i), o = this.scroller.getScrollbarWidths(), (o.left || o.right) && (s.compensateScroll(l, o), i = this.computeScrollerHeight(e), this.scroller.setHeight(i)), this.scroller.lockOverflow(o))\n                }, e.prototype.computeScrollerHeight = function (t) {\n                    return t - s.subtractInnerElHeight(this.el, this.scroller.el)\n                }, e.prototype.setGridHeight = function (t, e) {\n                    e ? s.undistributeHeight(this.dayGrid.rowEls) : s.distributeHeight(this.dayGrid.rowEls, t, !0)\n                }, e.prototype.computeInitialDateScroll = function () {\n                    return {\n                        top: 0\n                    }\n                }, e.prototype.queryDateScroll = function () {\n                    return {\n                        top: this.scroller.getScrollTop()\n                    }\n                }, e.prototype.applyDateScroll = function (t) {\n                    void 0 !== t.top && this.scroller.setScrollTop(t.top)\n                }, e\n            }(l.default);\n        e.default = c, c.prototype.dateProfileGeneratorClass = u.default, c.prototype.dayGridClass = d.default\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(2),\n            i = n(5),\n            o = n(55),\n            s = function (t) {\n                function e() {\n                    return null !== t && t.apply(this, arguments) || this\n                }\n                return r.__extends(e, t), e.prototype.buildRenderRange = function (e, n, r) {\n                    var o = t.prototype.buildRenderRange.call(this, e, n, r),\n                        s = this.msToUtcMoment(o.startMs, r),\n                        a = this.msToUtcMoment(o.endMs, r);\n                    return /^(year|month)$/.test(n) && (s.startOf(\"week\"), a.weekday() && a.add(1, \"week\").startOf(\"week\")), new i.default(s, a)\n                }, e\n            }(o.default);\n        e.default = s\n    }, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , function (t, e, n) {\n        function r(t, e, n) {\n            var r;\n            for (r = 0; r < t.length; r++)\n                if (!e(t[r].eventInstance.toLegacy(), n ? n.toLegacy() : null)) return !1;\n            return !0\n        }\n\n        function i(t, e) {\n            var n, r, i, o, s = e.toLegacy();\n            for (n = 0; n < t.length; n++) {\n                if (r = t[n].eventInstance, i = r.def, !1 === (o = i.getOverlap())) return !1;\n                if (\"function\" == typeof o && !o(r.toLegacy(), s)) return !1\n            }\n            return !0\n        }\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var o = n(5),\n            s = n(12),\n            a = n(36),\n            l = n(6),\n            u = n(19),\n            d = function () {\n                function t(t, e) {\n                    this.eventManager = t, this._calendar = e\n                }\n                return t.prototype.opt = function (t) {\n                    return this._calendar.opt(t)\n                }, t.prototype.isEventInstanceGroupAllowed = function (t) {\n                    var e, n = t.getEventDef(),\n                        r = this.eventRangesToEventFootprints(t.getAllEventRanges()),\n                        i = this.getPeerEventInstances(n),\n                        o = i.map(u.eventInstanceToEventRange),\n                        s = this.eventRangesToEventFootprints(o),\n                        a = n.getConstraint(),\n                        l = n.getOverlap(),\n                        d = this.opt(\"eventAllow\");\n                    for (e = 0; e < r.length; e++)\n                        if (!this.isFootprintAllowed(r[e].componentFootprint, s, a, l, r[e].eventInstance)) return !1;\n                    if (d)\n                        for (e = 0; e < r.length; e++)\n                            if (!1 === d(r[e].componentFootprint.toLegacy(this._calendar), r[e].getEventLegacy())) return !1;\n                    return !0\n                }, t.prototype.getPeerEventInstances = function (t) {\n                    return this.eventManager.getEventInstancesWithoutId(t.id)\n                }, t.prototype.isSelectionFootprintAllowed = function (t) {\n                    var e, n = this.eventManager.getEventInstances(),\n                        r = n.map(u.eventInstanceToEventRange),\n                        i = this.eventRangesToEventFootprints(r);\n                    return !!this.isFootprintAllowed(t, i, this.opt(\"selectConstraint\"), this.opt(\"selectOverlap\")) && (!(e = this.opt(\"selectAllow\")) || !1 !== e(t.toLegacy(this._calendar)))\n                }, t.prototype.isFootprintAllowed = function (t, e, n, o, s) {\n                    var a, l;\n                    if (null != n && (a = this.constraintValToFootprints(n, t.isAllDay), !this.isFootprintWithinConstraints(t, a))) return !1;\n                    if (l = this.collectOverlapEventFootprints(e, t), !1 === o) {\n                        if (l.length) return !1\n                    } else if (\"function\" == typeof o && !r(l, o, s)) return !1;\n                    return !(s && !i(l, s))\n                }, t.prototype.isFootprintWithinConstraints = function (t, e) {\n                    var n;\n                    for (n = 0; n < e.length; n++)\n                        if (this.footprintContainsFootprint(e[n], t)) return !0;\n                    return !1\n                }, t.prototype.constraintValToFootprints = function (t, e) {\n                    var n;\n                    return \"businessHours\" === t ? this.buildCurrentBusinessFootprints(e) : \"object\" == typeof t ? (n = this.parseEventDefToInstances(t), n ? this.eventInstancesToFootprints(n) : this.parseFootprints(t)) : null != t ? (n = this.eventManager.getEventInstancesWithId(t), this.eventInstancesToFootprints(n)) : void 0\n                }, t.prototype.buildCurrentBusinessFootprints = function (t) {\n                    var e = this._calendar.view,\n                        n = e.get(\"businessHourGenerator\"),\n                        r = e.dateProfile.activeUnzonedRange,\n                        i = n.buildEventInstanceGroup(t, r);\n                    return i ? this.eventInstancesToFootprints(i.eventInstances) : []\n                }, t.prototype.eventInstancesToFootprints = function (t) {\n                    var e = t.map(u.eventInstanceToEventRange);\n                    return this.eventRangesToEventFootprints(e).map(u.eventFootprintToComponentFootprint)\n                }, t.prototype.collectOverlapEventFootprints = function (t, e) {\n                    var n, r = [];\n                    for (n = 0; n < t.length; n++) this.footprintsIntersect(e, t[n].componentFootprint) && r.push(t[n]);\n                    return r\n                }, t.prototype.parseEventDefToInstances = function (t) {\n                    var e = this.eventManager,\n                        n = a.default.parse(t, new l.default(this._calendar));\n                    return !!n && n.buildInstances(e.currentPeriod.unzonedRange)\n                }, t.prototype.eventRangesToEventFootprints = function (t) {\n                    var e, n = [];\n                    for (e = 0; e < t.length; e++) n.push.apply(n, this.eventRangeToEventFootprints(t[e]));\n                    return n\n                }, t.prototype.eventRangeToEventFootprints = function (t) {\n                    return [u.eventRangeToEventFootprint(t)]\n                }, t.prototype.parseFootprints = function (t) {\n                    var e, n;\n                    return t.start && (e = this._calendar.moment(t.start), e.isValid() || (e = null)), t.end && (n = this._calendar.moment(t.end), n.isValid() || (n = null)), [new s.default(new o.default(e, n), e && !e.hasTime() || n && !n.hasTime())]\n                }, t.prototype.footprintContainsFootprint = function (t, e) {\n                    return t.unzonedRange.containsRange(e.unzonedRange)\n                }, t.prototype.footprintsIntersect = function (t, e) {\n                    return t.unzonedRange.intersectsWith(e.unzonedRange)\n                }, t\n            }();\n        e.default = d\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(3),\n            i = n(19),\n            o = n(20),\n            s = n(54),\n            a = n(6),\n            l = {\n                start: \"09:00\",\n                end: \"17:00\",\n                dow: [1, 2, 3, 4, 5],\n                rendering: \"inverse-background\"\n            },\n            u = function () {\n                function t(t, e) {\n                    this.rawComplexDef = t, this.calendar = e\n                }\n                return t.prototype.buildEventInstanceGroup = function (t, e) {\n                    var n, r = this.buildEventDefs(t);\n                    if (r.length) return n = new o.default(i.eventDefsToEventInstances(r, e)), n.explicitEventDef = r[0], n\n                }, t.prototype.buildEventDefs = function (t) {\n                    var e, n = this.rawComplexDef,\n                        i = [],\n                        o = !1,\n                        s = [];\n                    for (!0 === n ? i = [{}] : r.isPlainObject(n) ? i = [n] : r.isArray(n) && (i = n, o = !0), e = 0; e < i.length; e++) o && !i[e].dow || s.push(this.buildEventDef(t, i[e]));\n                    return s\n                }, t.prototype.buildEventDef = function (t, e) {\n                    var n = r.extend({}, l, e);\n                    return t && (n.start = null, n.end = null), s.default.parse(n, new a.default(this.calendar))\n                }, t\n            }();\n        e.default = u\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(3),\n            i = n(4),\n            o = n(21),\n            s = n(13),\n            a = n(5),\n            l = n(20),\n            u = function () {\n                function t(t, e, n) {\n                    this.pendingCnt = 0, this.freezeDepth = 0, this.stuntedReleaseCnt = 0, this.releaseCnt = 0, this.start = t, this.end = e, this.timezone = n, this.unzonedRange = new a.default(t.clone().stripZone(), e.clone().stripZone()), this.requestsByUid = {}, this.eventDefsByUid = {}, this.eventDefsById = {}, this.eventInstanceGroupsById = {}\n                }\n                return t.prototype.isWithinRange = function (t, e) {\n                    return !t.isBefore(this.start) && !e.isAfter(this.end)\n                }, t.prototype.requestSources = function (t) {\n                    this.freeze();\n                    for (var e = 0; e < t.length; e++) this.requestSource(t[e]);\n                    this.thaw()\n                }, t.prototype.requestSource = function (t) {\n                    var e = this,\n                        n = {\n                            source: t,\n                            status: \"pending\",\n                            eventDefs: null\n                        };\n                    this.requestsByUid[t.uid] = n, this.pendingCnt += 1, t.fetch(this.start, this.end, this.timezone).then(function (t) {\n                        \"cancelled\" !== n.status && (n.status = \"completed\", n.eventDefs = t, e.addEventDefs(t), e.pendingCnt--, e.tryRelease())\n                    }, function () {\n                        \"cancelled\" !== n.status && (n.status = \"failed\", e.pendingCnt--, e.tryRelease())\n                    })\n                }, t.prototype.purgeSource = function (t) {\n                    var e = this.requestsByUid[t.uid];\n                    e && (delete this.requestsByUid[t.uid], \"pending\" === e.status ? (e.status = \"cancelled\", this.pendingCnt--, this.tryRelease()) : \"completed\" === e.status && e.eventDefs.forEach(this.removeEventDef.bind(this)))\n                }, t.prototype.purgeAllSources = function () {\n                    var t, e, n = this.requestsByUid,\n                        r = 0;\n                    for (t in n) e = n[t], \"pending\" === e.status ? e.status = \"cancelled\" : \"completed\" === e.status && r++;\n                    this.requestsByUid = {}, this.pendingCnt = 0, r && this.removeAllEventDefs()\n                }, t.prototype.getEventDefByUid = function (t) {\n                    return this.eventDefsByUid[t]\n                }, t.prototype.getEventDefsById = function (t) {\n                    var e = this.eventDefsById[t];\n                    return e ? e.slice() : []\n                }, t.prototype.addEventDefs = function (t) {\n                    for (var e = 0; e < t.length; e++) this.addEventDef(t[e])\n                }, t.prototype.addEventDef = function (t) {\n                    var e, n = this.eventDefsById,\n                        r = t.id,\n                        i = n[r] || (n[r] = []),\n                        o = t.buildInstances(this.unzonedRange);\n                    for (i.push(t), this.eventDefsByUid[t.uid] = t, e = 0; e < o.length; e++) this.addEventInstance(o[e], r)\n                }, t.prototype.removeEventDefsById = function (t) {\n                    var e = this;\n                    this.getEventDefsById(t).forEach(function (t) {\n                        e.removeEventDef(t)\n                    })\n                }, t.prototype.removeAllEventDefs = function () {\n                    var t = r.isEmptyObject(this.eventDefsByUid);\n                    this.eventDefsByUid = {}, this.eventDefsById = {}, this.eventInstanceGroupsById = {}, t || this.tryRelease()\n                }, t.prototype.removeEventDef = function (t) {\n                    var e = this.eventDefsById,\n                        n = e[t.id];\n                    delete this.eventDefsByUid[t.uid], n && (i.removeExact(n, t), n.length || delete e[t.id], this.removeEventInstancesForDef(t))\n                }, t.prototype.getEventInstances = function () {\n                    var t, e = this.eventInstanceGroupsById,\n                        n = [];\n                    for (t in e) n.push.apply(n, e[t].eventInstances);\n                    return n\n                }, t.prototype.getEventInstancesWithId = function (t) {\n                    var e = this.eventInstanceGroupsById[t];\n                    return e ? e.eventInstances.slice() : []\n                }, t.prototype.getEventInstancesWithoutId = function (t) {\n                    var e, n = this.eventInstanceGroupsById,\n                        r = [];\n                    for (e in n) e !== t && r.push.apply(r, n[e].eventInstances);\n                    return r\n                }, t.prototype.addEventInstance = function (t, e) {\n                    var n = this.eventInstanceGroupsById;\n                    (n[e] || (n[e] = new l.default)).eventInstances.push(t), this.tryRelease()\n                }, t.prototype.removeEventInstancesForDef = function (t) {\n                    var e, n = this.eventInstanceGroupsById,\n                        r = n[t.id];\n                    r && (e = i.removeMatching(r.eventInstances, function (e) {\n                        return e.def === t\n                    }), r.eventInstances.length || delete n[t.id], e && this.tryRelease())\n                }, t.prototype.tryRelease = function () {\n                    this.pendingCnt || (this.freezeDepth ? this.stuntedReleaseCnt++ : this.release())\n                }, t.prototype.release = function () {\n                    this.releaseCnt++, this.trigger(\"release\", this.eventInstanceGroupsById)\n                }, t.prototype.whenReleased = function () {\n                    var t = this;\n                    return this.releaseCnt ? o.default.resolve(this.eventInstanceGroupsById) : o.default.construct(function (e) {\n                        t.one(\"release\", e)\n                    })\n                }, t.prototype.freeze = function () {\n                    this.freezeDepth++ || (this.stuntedReleaseCnt = 0)\n                }, t.prototype.thaw = function () {\n                    --this.freezeDepth || !this.stuntedReleaseCnt || this.pendingCnt || this.release()\n                }, t\n            }();\n        e.default = u, s.default.mixInto(u)\n    }, function (t, e, n) {\n        function r(t, e) {\n            return t.getPrimitive() === e.getPrimitive()\n        }\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var i = n(3),\n            o = n(4),\n            s = n(219),\n            a = n(56),\n            l = n(6),\n            u = n(38),\n            d = n(9),\n            c = n(20),\n            p = n(13),\n            h = n(7),\n            f = function () {\n                function t(t) {\n                    this.calendar = t, this.stickySource = new a.default(t), this.otherSources = []\n                }\n                return t.prototype.requestEvents = function (t, e, n, r) {\n                    return !r && this.currentPeriod && this.currentPeriod.isWithinRange(t, e) && n === this.currentPeriod.timezone || this.setPeriod(new s.default(t, e, n)), this.currentPeriod.whenReleased()\n                }, t.prototype.addSource = function (t) {\n                    this.otherSources.push(t), this.currentPeriod && this.currentPeriod.requestSource(t)\n                }, t.prototype.removeSource = function (t) {\n                    o.removeExact(this.otherSources, t), this.currentPeriod && this.currentPeriod.purgeSource(t)\n                }, t.prototype.removeAllSources = function () {\n                    this.otherSources = [], this.currentPeriod && this.currentPeriod.purgeAllSources()\n                }, t.prototype.refetchSource = function (t) {\n                    var e = this.currentPeriod;\n                    e && (e.freeze(), e.purgeSource(t), e.requestSource(t), e.thaw())\n                }, t.prototype.refetchAllSources = function () {\n                    var t = this.currentPeriod;\n                    t && (t.freeze(), t.purgeAllSources(), t.requestSources(this.getSources()), t.thaw())\n                }, t.prototype.getSources = function () {\n                    return [this.stickySource].concat(this.otherSources)\n                }, t.prototype.multiQuerySources = function (t) {\n                    t ? i.isArray(t) || (t = [t]) : t = [];\n                    var e, n = [];\n                    for (e = 0; e < t.length; e++) n.push.apply(n, this.querySources(t[e]));\n                    return n\n                }, t.prototype.querySources = function (t) {\n                    var e, n, o = this.otherSources;\n                    for (e = 0; e < o.length; e++)\n                        if ((n = o[e]) === t) return [n];\n                    return (n = this.getSourceById(l.default.normalizeId(t))) ? [n] : (t = u.default.parse(t, this.calendar), t ? i.grep(o, function (e) {\n                        return r(t, e)\n                    }) : void 0)\n                }, t.prototype.getSourceById = function (t) {\n                    return i.grep(this.otherSources, function (e) {\n                        return e.id && e.id === t\n                    })[0]\n                }, t.prototype.setPeriod = function (t) {\n                    this.currentPeriod && (this.unbindPeriod(this.currentPeriod), this.currentPeriod = null), this.currentPeriod = t, this.bindPeriod(t), t.requestSources(this.getSources())\n                }, t.prototype.bindPeriod = function (t) {\n                    this.listenTo(t, \"release\", function (t) {\n                        this.trigger(\"release\", t)\n                    })\n                }, t.prototype.unbindPeriod = function (t) {\n                    this.stopListeningTo(t)\n                }, t.prototype.getEventDefByUid = function (t) {\n                    if (this.currentPeriod) return this.currentPeriod.getEventDefByUid(t)\n                }, t.prototype.addEventDef = function (t, e) {\n                    e && this.stickySource.addEventDef(t), this.currentPeriod && this.currentPeriod.addEventDef(t)\n                }, t.prototype.removeEventDefsById = function (t) {\n                    this.getSources().forEach(function (e) {\n                        e.removeEventDefsById(t)\n                    }), this.currentPeriod && this.currentPeriod.removeEventDefsById(t)\n                }, t.prototype.removeAllEventDefs = function () {\n                    this.getSources().forEach(function (t) {\n                        t.removeAllEventDefs()\n                    }), this.currentPeriod && this.currentPeriod.removeAllEventDefs()\n                }, t.prototype.mutateEventsWithId = function (t, e) {\n                    var n, r = this.currentPeriod,\n                        i = [];\n                    return r ? (r.freeze(), n = r.getEventDefsById(t), n.forEach(function (t) {\n                        r.removeEventDef(t), i.push(e.mutateSingle(t)), r.addEventDef(t)\n                    }), r.thaw(), function () {\n                        r.freeze();\n                        for (var t = 0; t < n.length; t++) r.removeEventDef(n[t]), i[t](), r.addEventDef(n[t]);\n                        r.thaw()\n                    }) : function () { }\n                }, t.prototype.buildMutatedEventInstanceGroup = function (t, e) {\n                    var n, r, i = this.getEventDefsById(t),\n                        o = [];\n                    for (n = 0; n < i.length; n++)(r = i[n].clone()) instanceof d.default && (e.mutateSingle(r), o.push.apply(o, r.buildInstances()));\n                    return new c.default(o)\n                }, t.prototype.freeze = function () {\n                    this.currentPeriod && this.currentPeriod.freeze()\n                }, t.prototype.thaw = function () {\n                    this.currentPeriod && this.currentPeriod.thaw()\n                }, t.prototype.getEventDefsById = function (t) {\n                    return this.currentPeriod.getEventDefsById(t)\n                }, t.prototype.getEventInstances = function () {\n                    return this.currentPeriod.getEventInstances()\n                }, t.prototype.getEventInstancesWithId = function (t) {\n                    return this.currentPeriod.getEventInstancesWithId(t)\n                }, t.prototype.getEventInstancesWithoutId = function (t) {\n                    return this.currentPeriod.getEventInstancesWithoutId(t)\n                }, t\n            }();\n        e.default = f, p.default.mixInto(f), h.default.mixInto(f)\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(2),\n            i = n(22),\n            o = function (t) {\n                function e() {\n                    return null !== t && t.apply(this, arguments) || this\n                }\n                return r.__extends(e, t), e\n            }(i.default);\n        e.default = o, o.prototype.classes = {\n            widget: \"fc-unthemed\",\n            widgetHeader: \"fc-widget-header\",\n            widgetContent: \"fc-widget-content\",\n            buttonGroup: \"fc-button-group\",\n            button: \"fc-button\",\n            cornerLeft: \"fc-corner-left\",\n            cornerRight: \"fc-corner-right\",\n            stateDefault: \"fc-state-default\",\n            stateActive: \"fc-state-active\",\n            stateDisabled: \"fc-state-disabled\",\n            stateHover: \"fc-state-hover\",\n            stateDown: \"fc-state-down\",\n            popoverHeader: \"fc-widget-header\",\n            popoverContent: \"fc-widget-content\",\n            headerRow: \"fc-widget-header\",\n            dayRow: \"fc-widget-content\",\n            listView: \"fc-widget-content\"\n        }, o.prototype.baseIconClass = \"fc-icon\", o.prototype.iconClasses = {\n            close: \"fc-icon-x\",\n            prev: \"fc-icon-left-single-arrow\",\n            next: \"fc-icon-right-single-arrow\",\n            prevYear: \"fc-icon-left-double-arrow\",\n            nextYear: \"fc-icon-right-double-arrow\"\n        }, o.prototype.iconOverrideOption = \"buttonIcons\", o.prototype.iconOverrideCustomButtonOption = \"icon\", o.prototype.iconOverridePrefix = \"fc-icon-\"\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(2),\n            i = n(22),\n            o = function (t) {\n                function e() {\n                    return null !== t && t.apply(this, arguments) || this\n                }\n                return r.__extends(e, t), e\n            }(i.default);\n        e.default = o, o.prototype.classes = {\n            widget: \"ui-widget\",\n            widgetHeader: \"ui-widget-header\",\n            widgetContent: \"ui-widget-content\",\n            buttonGroup: \"fc-button-group\",\n            button: \"ui-button\",\n            cornerLeft: \"ui-corner-left\",\n            cornerRight: \"ui-corner-right\",\n            stateDefault: \"ui-state-default\",\n            stateActive: \"ui-state-active\",\n            stateDisabled: \"ui-state-disabled\",\n            stateHover: \"ui-state-hover\",\n            stateDown: \"ui-state-down\",\n            today: \"ui-state-highlight\",\n            popoverHeader: \"ui-widget-header\",\n            popoverContent: \"ui-widget-content\",\n            headerRow: \"ui-widget-header\",\n            dayRow: \"ui-widget-content\",\n            listView: \"ui-widget-content\"\n        }, o.prototype.baseIconClass = \"ui-icon\", o.prototype.iconClasses = {\n            close: \"ui-icon-closethick\",\n            prev: \"ui-icon-circle-triangle-w\",\n            next: \"ui-icon-circle-triangle-e\",\n            prevYear: \"ui-icon-seek-prev\",\n            nextYear: \"ui-icon-seek-next\"\n        }, o.prototype.iconOverrideOption = \"themeButtonIcons\", o.prototype.iconOverrideCustomButtonOption = \"themeIcon\", o.prototype.iconOverridePrefix = \"ui-icon-\"\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(2),\n            i = n(3),\n            o = n(21),\n            s = n(6),\n            a = function (t) {\n                function e() {\n                    return null !== t && t.apply(this, arguments) || this\n                }\n                return r.__extends(e, t), e.parse = function (t, e) {\n                    var n;\n                    return i.isFunction(t.events) ? n = t : i.isFunction(t) && (n = {\n                        events: t\n                    }), !!n && s.default.parse.call(this, n, e)\n                }, e.prototype.fetch = function (t, e, n) {\n                    var r = this;\n                    return this.calendar.pushLoading(), o.default.construct(function (i) {\n                        r.func.call(r.calendar, t.clone(), e.clone(), n, function (t) {\n                            r.calendar.popLoading(), i(r.parseEventDefs(t))\n                        })\n                    })\n                }, e.prototype.getPrimitive = function () {\n                    return this.func\n                }, e.prototype.applyManualStandardProps = function (e) {\n                    var n = t.prototype.applyManualStandardProps.call(this, e);\n                    return this.func = e.events, n\n                }, e\n            }(s.default);\n        e.default = a, a.defineStandardProps({\n            events: !1\n        })\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(2),\n            i = n(3),\n            o = n(4),\n            s = n(21),\n            a = n(6),\n            l = function (t) {\n                function e() {\n                    return null !== t && t.apply(this, arguments) || this\n                }\n                return r.__extends(e, t), e.parse = function (t, e) {\n                    var n;\n                    return \"string\" == typeof t.url ? n = t : \"string\" == typeof t && (n = {\n                        url: t\n                    }), !!n && a.default.parse.call(this, n, e)\n                }, e.prototype.fetch = function (t, n, r) {\n                    var a = this,\n                        l = this.ajaxSettings,\n                        u = l.success,\n                        d = l.error,\n                        c = this.buildRequestParams(t, n, r);\n                    return this.calendar.pushLoading(), s.default.construct(function (t, n) {\n                        i.ajax(i.extend({}, e.AJAX_DEFAULTS, l, {\n                            url: a.url,\n                            data: c,\n                            success: function (e, r, s) {\n                                var l;\n                                a.calendar.popLoading(), e ? (l = o.applyAll(u, a, [e, r, s]), i.isArray(l) && (e = l), t(a.parseEventDefs(e))) : n()\n                            },\n                            error: function (t, e, r) {\n                                a.calendar.popLoading(), o.applyAll(d, a, [t, e, r]), n()\n                            }\n                        }))\n                    })\n                }, e.prototype.buildRequestParams = function (t, e, n) {\n                    var r, o, s, a, l = this.calendar,\n                        u = this.ajaxSettings,\n                        d = {};\n                    return r = this.startParam, null == r && (r = l.opt(\"startParam\")), o = this.endParam, null == o && (o = l.opt(\"endParam\")), s = this.timezoneParam, null == s && (s = l.opt(\"timezoneParam\")), a = i.isFunction(u.data) ? u.data() : u.data || {}, i.extend(d, a), d[r] = t.format(), d[o] = e.format(), n && \"local\" !== n && (d[s] = n), d\n                }, e.prototype.getPrimitive = function () {\n                    return this.url\n                }, e.prototype.applyMiscProps = function (t) {\n                    this.ajaxSettings = t\n                }, e.AJAX_DEFAULTS = {\n                    dataType: \"json\",\n                    cache: !1\n                }, e\n            }(a.default);\n        e.default = l, l.defineStandardProps({\n            url: !0,\n            startParam: !0,\n            endParam: !0,\n            timezoneParam: !0\n        })\n    }, function (t, e) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var n = function () {\n            function t(t) {\n                this.items = t || []\n            }\n            return t.prototype.proxyCall = function (t) {\n                for (var e = [], n = 1; n < arguments.length; n++) e[n - 1] = arguments[n];\n                var r = [];\n                return this.items.forEach(function (n) {\n                    r.push(n[t].apply(n, e))\n                }), r\n            }, t\n        }();\n        e.default = n\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(3),\n            i = n(4),\n            o = n(7),\n            s = function () {\n                function t(t, e) {\n                    this.isFollowing = !1, this.isHidden = !1, this.isAnimating = !1, this.options = e = e || {}, this.sourceEl = t, this.parentEl = e.parentEl ? r(e.parentEl) : t.parent()\n                }\n                return t.prototype.start = function (t) {\n                    this.isFollowing || (this.isFollowing = !0, this.y0 = i.getEvY(t), this.x0 = i.getEvX(t), this.topDelta = 0, this.leftDelta = 0, this.isHidden || this.updatePosition(), i.getEvIsTouch(t) ? this.listenTo(r(document), \"touchmove\", this.handleMove) : this.listenTo(r(document), \"mousemove\", this.handleMove))\n                }, t.prototype.stop = function (t, e) {\n                    var n = this,\n                        i = this.options.revertDuration,\n                        o = function () {\n                            n.isAnimating = !1, n.removeElement(), n.top0 = n.left0 = null, e && e()\n                        };\n                    this.isFollowing && !this.isAnimating && (this.isFollowing = !1, this.stopListeningTo(r(document)), t && i && !this.isHidden ? (this.isAnimating = !0, this.el.animate({\n                        top: this.top0,\n                        left: this.left0\n                    }, {\n                        duration: i,\n                        complete: o\n                    })) : o())\n                }, t.prototype.getEl = function () {\n                    var t = this.el;\n                    return t || (t = this.el = this.sourceEl.clone().addClass(this.options.additionalClass || \"\").css({\n                        position: \"absolute\",\n                        visibility: \"\",\n                        display: this.isHidden ? \"none\" : \"\",\n                        margin: 0,\n                        right: \"auto\",\n                        bottom: \"auto\",\n                        width: this.sourceEl.width(),\n                        height: this.sourceEl.height(),\n                        opacity: this.options.opacity || \"\",\n                        zIndex: this.options.zIndex\n                    }), t.addClass(\"fc-unselectable\"), t.appendTo(this.parentEl)), t\n                }, t.prototype.removeElement = function () {\n                    this.el && (this.el.remove(), this.el = null)\n                }, t.prototype.updatePosition = function () {\n                    var t, e;\n                    this.getEl(), null == this.top0 && (t = this.sourceEl.offset(), e = this.el.offsetParent().offset(), this.top0 = t.top - e.top, this.left0 = t.left - e.left), this.el.css({\n                        top: this.top0 + this.topDelta,\n                        left: this.left0 + this.leftDelta\n                    })\n                }, t.prototype.handleMove = function (t) {\n                    this.topDelta = i.getEvY(t) - this.y0, this.leftDelta = i.getEvX(t) - this.x0, this.isHidden || this.updatePosition()\n                }, t.prototype.hide = function () {\n                    this.isHidden || (this.isHidden = !0, this.el && this.el.hide())\n                }, t.prototype.show = function () {\n                    this.isHidden && (this.isHidden = !1, this.updatePosition(), this.getEl().show())\n                }, t\n            }();\n        e.default = s, o.default.mixInto(s)\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(3),\n            i = n(4),\n            o = n(7),\n            s = function () {\n                function t(t) {\n                    this.isHidden = !0, this.margin = 10, this.options = t || {}\n                }\n                return t.prototype.show = function () {\n                    this.isHidden && (this.el || this.render(), this.el.show(), this.position(), this.isHidden = !1, this.trigger(\"show\"))\n                }, t.prototype.hide = function () {\n                    this.isHidden || (this.el.hide(), this.isHidden = !0, this.trigger(\"hide\"))\n                }, t.prototype.render = function () {\n                    var t = this,\n                        e = this.options;\n                    this.el = r('<div class=\"fc-popover\"/>').addClass(e.className || \"\").css({\n                        top: 0,\n                        left: 0\n                    }).append(e.content).appendTo(e.parentEl), this.el.on(\"click\", \".fc-close\", function () {\n                        t.hide()\n                    }), e.autoHide && this.listenTo(r(document), \"mousedown\", this.documentMousedown)\n                }, t.prototype.documentMousedown = function (t) {\n                    this.el && !r(t.target).closest(this.el).length && this.hide()\n                }, t.prototype.removeElement = function () {\n                    this.hide(), this.el && (this.el.remove(), this.el = null), this.stopListeningTo(r(document), \"mousedown\")\n                }, t.prototype.position = function () {\n                    var t, e, n, o, s, a = this.options,\n                        l = this.el.offsetParent().offset(),\n                        u = this.el.outerWidth(),\n                        d = this.el.outerHeight(),\n                        c = r(window),\n                        p = i.getScrollParent(this.el);\n                    o = a.top || 0, s = void 0 !== a.left ? a.left : void 0 !== a.right ? a.right - u : 0, p.is(window) || p.is(document) ? (p = c, t = 0, e = 0) : (n = p.offset(), t = n.top, e = n.left), t += c.scrollTop(), e += c.scrollLeft(), !1 !== a.viewportConstrain && (o = Math.min(o, t + p.outerHeight() - d - this.margin), o = Math.max(o, t + this.margin), s = Math.min(s, e + p.outerWidth() - u - this.margin), s = Math.max(s, e + this.margin)), this.el.css({\n                        top: o - l.top,\n                        left: s - l.left\n                    })\n                }, t.prototype.trigger = function (t) {\n                    this.options[t] && this.options[t].apply(this, Array.prototype.slice.call(arguments, 1))\n                }, t\n            }();\n        e.default = s, o.default.mixInto(s)\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(13),\n            i = function () {\n                function t() {\n                    this.q = [], this.isPaused = !1, this.isRunning = !1\n                }\n                return t.prototype.queue = function () {\n                    for (var t = [], e = 0; e < arguments.length; e++) t[e] = arguments[e];\n                    this.q.push.apply(this.q, t), this.tryStart()\n                }, t.prototype.pause = function () {\n                    this.isPaused = !0\n                }, t.prototype.resume = function () {\n                    this.isPaused = !1, this.tryStart()\n                }, t.prototype.getIsIdle = function () {\n                    return !this.isRunning && !this.isPaused\n                }, t.prototype.tryStart = function () {\n                    !this.isRunning && this.canRunNext() && (this.isRunning = !0, this.trigger(\"start\"), this.runRemaining())\n                }, t.prototype.canRunNext = function () {\n                    return !this.isPaused && this.q.length\n                }, t.prototype.runRemaining = function () {\n                    var t, e, n = this;\n                    do {\n                        if (t = this.q.shift(), (e = this.runTask(t)) && e.then) return void e.then(function () {\n                            n.canRunNext() && n.runRemaining()\n                        })\n                    } while (this.canRunNext());\n                    this.trigger(\"stop\"), this.isRunning = !1, this.tryStart()\n                }, t.prototype.runTask = function (t) {\n                    return t()\n                }, t\n            }();\n        e.default = i, r.default.mixInto(i)\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(2),\n            i = n(228),\n            o = function (t) {\n                function e(e) {\n                    var n = t.call(this) || this;\n                    return n.waitsByNamespace = e || {}, n\n                }\n                return r.__extends(e, t), e.prototype.queue = function (t, e, n) {\n                    var r, i = {\n                        func: t,\n                        namespace: e,\n                        type: n\n                    };\n                    e && (r = this.waitsByNamespace[e]), this.waitNamespace && (e === this.waitNamespace && null != r ? this.delayWait(r) : (this.clearWait(), this.tryStart())), this.compoundTask(i) && (this.waitNamespace || null == r ? this.tryStart() : this.startWait(e, r))\n                }, e.prototype.startWait = function (t, e) {\n                    this.waitNamespace = t, this.spawnWait(e)\n                }, e.prototype.delayWait = function (t) {\n                    clearTimeout(this.waitId), this.spawnWait(t)\n                }, e.prototype.spawnWait = function (t) {\n                    var e = this;\n                    this.waitId = setTimeout(function () {\n                        e.waitNamespace = null, e.tryStart()\n                    }, t)\n                }, e.prototype.clearWait = function () {\n                    this.waitNamespace && (clearTimeout(this.waitId), this.waitId = null, this.waitNamespace = null)\n                }, e.prototype.canRunNext = function () {\n                    if (!t.prototype.canRunNext.call(this)) return !1;\n                    if (this.waitNamespace) {\n                        for (var e = this.q, n = 0; n < e.length; n++)\n                            if (e[n].namespace !== this.waitNamespace) return !0;\n                        return !1\n                    }\n                    return !0\n                }, e.prototype.runTask = function (t) {\n                    t.func()\n                }, e.prototype.compoundTask = function (t) {\n                    var e, n, r = this.q,\n                        i = !0;\n                    if (t.namespace && \"destroy\" === t.type)\n                        for (e = r.length - 1; e >= 0; e--)\n                            if (n = r[e], n.namespace === t.namespace) switch (n.type) {\n                                case \"init\":\n                                    i = !1;\n                                case \"add\":\n                                case \"remove\":\n                                    r.splice(e, 1)\n                            }\n                    return i && r.push(t), i\n                }, e\n            }(i.default);\n        e.default = o\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(2),\n            i = n(51),\n            o = function (t) {\n                function e() {\n                    return null !== t && t.apply(this, arguments) || this\n                }\n                return r.__extends(e, t), e.prototype.setElement = function (t) {\n                    this.el = t, this.bindGlobalHandlers(), this.renderSkeleton(), this.set(\"isInDom\", !0)\n                }, e.prototype.removeElement = function () {\n                    this.unset(\"isInDom\"), this.unrenderSkeleton(), this.unbindGlobalHandlers(), this.el.remove()\n                }, e.prototype.bindGlobalHandlers = function () { }, e.prototype.unbindGlobalHandlers = function () { }, e.prototype.renderSkeleton = function () { }, e.prototype.unrenderSkeleton = function () { }, e\n            }(i.default);\n        e.default = o\n    }, function (t, e, n) {\n        function r(t) {\n            var e, n, r, i = [];\n            for (e in t)\n                for (n = t[e].eventInstances, r = 0; r < n.length; r++) i.push(n[r].toLegacy());\n            return i\n        }\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var i = n(2),\n            o = n(3),\n            s = n(0),\n            a = n(4),\n            l = n(11),\n            u = n(49),\n            d = n(230),\n            c = n(19),\n            p = function (t) {\n                function e(n, r) {\n                    var i = t.call(this) || this;\n                    return i.isRTL = !1, i.hitsNeededDepth = 0, i.hasAllDayBusinessHours = !1, i.isDatesRendered = !1, n && (i.view = n), r && (i.options = r), i.uid = String(e.guid++), i.childrenByUid = {}, i.nextDayThreshold = s.duration(i.opt(\"nextDayThreshold\")), i.isRTL = i.opt(\"isRTL\"), i.fillRendererClass && (i.fillRenderer = new i.fillRendererClass(i)), i.eventRendererClass && (i.eventRenderer = new i.eventRendererClass(i, i.fillRenderer)), i.helperRendererClass && i.eventRenderer && (i.helperRenderer = new i.helperRendererClass(i, i.eventRenderer)), i.businessHourRendererClass && i.fillRenderer && (i.businessHourRenderer = new i.businessHourRendererClass(i, i.fillRenderer)), i\n                }\n                return i.__extends(e, t), e.prototype.addChild = function (t) {\n                    return !this.childrenByUid[t.uid] && (this.childrenByUid[t.uid] = t, !0)\n                }, e.prototype.removeChild = function (t) {\n                    return !!this.childrenByUid[t.uid] && (delete this.childrenByUid[t.uid], !0)\n                }, e.prototype.updateSize = function (t, e, n) {\n                    this.callChildren(\"updateSize\", arguments)\n                }, e.prototype.opt = function (t) {\n                    return this._getView().opt(t)\n                }, e.prototype.publiclyTrigger = function () {\n                    for (var t = [], e = 0; e < arguments.length; e++) t[e] = arguments[e];\n                    var n = this._getCalendar();\n                    return n.publiclyTrigger.apply(n, t)\n                }, e.prototype.hasPublicHandlers = function () {\n                    for (var t = [], e = 0; e < arguments.length; e++) t[e] = arguments[e];\n                    var n = this._getCalendar();\n                    return n.hasPublicHandlers.apply(n, t)\n                }, e.prototype.executeDateRender = function (t) {\n                    this.dateProfile = t, this.renderDates(t), this.isDatesRendered = !0, this.callChildren(\"executeDateRender\", arguments)\n                }, e.prototype.executeDateUnrender = function () {\n                    this.callChildren(\"executeDateUnrender\", arguments), this.dateProfile = null, this.unrenderDates(), this.isDatesRendered = !1\n                }, e.prototype.renderDates = function (t) { }, e.prototype.unrenderDates = function () { }, e.prototype.getNowIndicatorUnit = function () { }, e.prototype.renderNowIndicator = function (t) {\n                    this.callChildren(\"renderNowIndicator\", arguments)\n                }, e.prototype.unrenderNowIndicator = function () {\n                    this.callChildren(\"unrenderNowIndicator\", arguments)\n                }, e.prototype.renderBusinessHours = function (t) {\n                    this.businessHourRenderer && this.businessHourRenderer.render(t), this.callChildren(\"renderBusinessHours\", arguments)\n                }, e.prototype.unrenderBusinessHours = function () {\n                    this.callChildren(\"unrenderBusinessHours\", arguments), this.businessHourRenderer && this.businessHourRenderer.unrender()\n                }, e.prototype.executeEventRender = function (t) {\n                    this.eventRenderer ? (this.eventRenderer.rangeUpdated(), this.eventRenderer.render(t)) : this.renderEvents && this.renderEvents(r(t)), this.callChildren(\"executeEventRender\", arguments)\n                }, e.prototype.executeEventUnrender = function () {\n                    this.callChildren(\"executeEventUnrender\", arguments), this.eventRenderer ? this.eventRenderer.unrender() : this.destroyEvents && this.destroyEvents()\n                }, e.prototype.getBusinessHourSegs = function () {\n                    var t = this.getOwnBusinessHourSegs();\n                    return this.iterChildren(function (e) {\n                        t.push.apply(t, e.getBusinessHourSegs())\n                    }), t\n                }, e.prototype.getOwnBusinessHourSegs = function () {\n                    return this.businessHourRenderer ? this.businessHourRenderer.getSegs() : []\n                }, e.prototype.getEventSegs = function () {\n                    var t = this.getOwnEventSegs();\n                    return this.iterChildren(function (e) {\n                        t.push.apply(t, e.getEventSegs())\n                    }), t\n                }, e.prototype.getOwnEventSegs = function () {\n                    return this.eventRenderer ? this.eventRenderer.getSegs() : []\n                }, e.prototype.triggerAfterEventsRendered = function () {\n                    this.triggerAfterEventSegsRendered(this.getEventSegs()), this.publiclyTrigger(\"eventAfterAllRender\", {\n                        context: this,\n                        args: [this]\n                    })\n                }, e.prototype.triggerAfterEventSegsRendered = function (t) {\n                    var e = this;\n                    this.hasPublicHandlers(\"eventAfterRender\") && t.forEach(function (t) {\n                        var n;\n                        t.el && (n = t.footprint.getEventLegacy(), e.publiclyTrigger(\"eventAfterRender\", {\n                            context: n,\n                            args: [n, t.el, e]\n                        }))\n                    })\n                }, e.prototype.triggerBeforeEventsDestroyed = function () {\n                    this.triggerBeforeEventSegsDestroyed(this.getEventSegs())\n                }, e.prototype.triggerBeforeEventSegsDestroyed = function (t) {\n                    var e = this;\n                    this.hasPublicHandlers(\"eventDestroy\") && t.forEach(function (t) {\n                        var n;\n                        t.el && (n = t.footprint.getEventLegacy(), e.publiclyTrigger(\"eventDestroy\", {\n                            context: n,\n                            args: [n, t.el, e]\n                        }))\n                    })\n                }, e.prototype.showEventsWithId = function (t) {\n                    this.getEventSegs().forEach(function (e) {\n                        e.footprint.eventDef.id === t && e.el && e.el.css(\"visibility\", \"\")\n                    }), this.callChildren(\"showEventsWithId\", arguments)\n                }, e.prototype.hideEventsWithId = function (t) {\n                    this.getEventSegs().forEach(function (e) {\n                        e.footprint.eventDef.id === t && e.el && e.el.css(\"visibility\", \"hidden\")\n                    }), this.callChildren(\"hideEventsWithId\", arguments)\n                }, e.prototype.renderDrag = function (t, e, n) {\n                    var r = !1;\n                    return this.iterChildren(function (i) {\n                        i.renderDrag(t, e, n) && (r = !0)\n                    }), r\n                }, e.prototype.unrenderDrag = function () {\n                    this.callChildren(\"unrenderDrag\", arguments)\n                }, e.prototype.renderEventResize = function (t, e, n) {\n                    this.callChildren(\"renderEventResize\", arguments)\n                }, e.prototype.unrenderEventResize = function () {\n                    this.callChildren(\"unrenderEventResize\", arguments)\n                }, e.prototype.renderSelectionFootprint = function (t) {\n                    this.renderHighlight(t), this.callChildren(\"renderSelectionFootprint\", arguments)\n                }, e.prototype.unrenderSelection = function () {\n                    this.unrenderHighlight(), this.callChildren(\"unrenderSelection\", arguments)\n                }, e.prototype.renderHighlight = function (t) {\n                    this.fillRenderer && this.fillRenderer.renderFootprint(\"highlight\", t, {\n                        getClasses: function () {\n                            return [\"fc-highlight\"]\n                        }\n                    }), this.callChildren(\"renderHighlight\", arguments)\n                }, e.prototype.unrenderHighlight = function () {\n                    this.fillRenderer && this.fillRenderer.unrender(\"highlight\"), this.callChildren(\"unrenderHighlight\", arguments)\n                }, e.prototype.hitsNeeded = function () {\n                    this.hitsNeededDepth++ || this.prepareHits(), this.callChildren(\"hitsNeeded\", arguments)\n                }, e.prototype.hitsNotNeeded = function () {\n                    this.hitsNeededDepth && !--this.hitsNeededDepth && this.releaseHits(), this.callChildren(\"hitsNotNeeded\", arguments)\n                }, e.prototype.prepareHits = function () { }, e.prototype.releaseHits = function () { }, e.prototype.queryHit = function (t, e) {\n                    var n, r, i = this.childrenByUid;\n                    for (n in i)\n                        if (r = i[n].queryHit(t, e)) break;\n                    return r\n                }, e.prototype.getSafeHitFootprint = function (t) {\n                    var e = this.getHitFootprint(t);\n                    return this.dateProfile.activeUnzonedRange.containsRange(e.unzonedRange) ? e : null\n                }, e.prototype.getHitFootprint = function (t) { }, e.prototype.getHitEl = function (t) { }, e.prototype.eventRangesToEventFootprints = function (t) {\n                    var e, n = [];\n                    for (e = 0; e < t.length; e++) n.push.apply(n, this.eventRangeToEventFootprints(t[e]));\n                    return n\n                }, e.prototype.eventRangeToEventFootprints = function (t) {\n                    return [c.eventRangeToEventFootprint(t)]\n                }, e.prototype.eventFootprintsToSegs = function (t) {\n                    var e, n = [];\n                    for (e = 0; e < t.length; e++) n.push.apply(n, this.eventFootprintToSegs(t[e]));\n                    return n\n                }, e.prototype.eventFootprintToSegs = function (t) {\n                    var e, n, r, i = t.componentFootprint.unzonedRange;\n                    for (e = this.componentFootprintToSegs(t.componentFootprint), n = 0; n < e.length; n++) r = e[n], i.isStart || (r.isStart = !1), i.isEnd || (r.isEnd = !1), r.footprint = t;\n                    return e\n                }, e.prototype.componentFootprintToSegs = function (t) {\n                    return []\n                }, e.prototype.callChildren = function (t, e) {\n                    this.iterChildren(function (n) {\n                        n[t].apply(n, e)\n                    })\n                }, e.prototype.iterChildren = function (t) {\n                    var e, n = this.childrenByUid;\n                    for (e in n) t(n[e])\n                }, e.prototype._getCalendar = function () {\n                    var t = this;\n                    return t.calendar || t.view.calendar\n                }, e.prototype._getView = function () {\n                    return this.view\n                }, e.prototype._getDateProfile = function () {\n                    return this._getView().get(\"dateProfile\")\n                }, e.prototype.buildGotoAnchorHtml = function (t, e, n) {\n                    var r, i, s, u;\n                    return o.isPlainObject(t) ? (r = t.date, i = t.type, s = t.forceOff) : r = t, r = l.default(r), u = {\n                        date: r.format(\"YYYY-MM-DD\"),\n                        type: i || \"day\"\n                    }, \"string\" == typeof e && (n = e, e = null), e = e ? \" \" + a.attrsToStr(e) : \"\", n = n || \"\", !s && this.opt(\"navLinks\") ? \"<a\" + e + ' data-goto=\"' + a.htmlEscape(JSON.stringify(u)) + '\">' + n + \"</a>\" : \"<span\" + e + \">\" + n + \"</span>\"\n                }, e.prototype.getAllDayHtml = function () {\n                    return this.opt(\"allDayHtml\") || a.htmlEscape(this.opt(\"allDayText\"))\n                }, e.prototype.getDayClasses = function (t, e) {\n                    var n, r = this._getView(),\n                        i = [];\n                    return this.dateProfile.activeUnzonedRange.containsDate(t) ? (i.push(\"fc-\" + a.dayIDs[t.day()]), r.isDateInOtherMonth(t, this.dateProfile) && i.push(\"fc-other-month\"), n = r.calendar.getNow(), t.isSame(n, \"day\") ? (i.push(\"fc-today\"), !0 !== e && i.push(r.calendar.theme.getClass(\"today\"))) : t < n ? i.push(\"fc-past\") : i.push(\"fc-future\")) : i.push(\"fc-disabled-day\"), i\n                }, e.prototype.formatRange = function (t, e, n, r) {\n                    var i = t.end;\n                    return e && (i = i.clone().subtract(1)), u.formatRange(t.start, i, n, r, this.isRTL)\n                }, e.prototype.currentRangeAs = function (t) {\n                    return this._getDateProfile().currentUnzonedRange.as(t)\n                }, e.prototype.computeDayRange = function (t) {\n                    var e = this._getCalendar(),\n                        n = e.msToUtcMoment(t.startMs, !0),\n                        r = e.msToUtcMoment(t.endMs),\n                        i = +r.time(),\n                        o = r.clone().stripTime();\n                    return i && i >= this.nextDayThreshold && o.add(1, \"days\"), o <= n && (o = n.clone().add(1, \"days\")), {\n                        start: n,\n                        end: o\n                    }\n                }, e.prototype.isMultiDayRange = function (t) {\n                    var e = this.computeDayRange(t);\n                    return e.end.diff(e.start, \"days\") > 1\n                }, e.guid = 0, e\n            }(d.default);\n        e.default = p\n    }, function (t, e, n) {\n        function r(t, e) {\n            return null == e ? t : i.isFunction(e) ? t.filter(e) : (e += \"\", t.filter(function (t) {\n                return t.id == e || t._id === e\n            }))\n        }\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var i = n(3),\n            o = n(0),\n            s = n(4),\n            a = n(33),\n            l = n(225),\n            u = n(23),\n            d = n(13),\n            c = n(7),\n            p = n(257),\n            h = n(258),\n            f = n(259),\n            g = n(217),\n            v = n(32),\n            y = n(11),\n            m = n(5),\n            b = n(12),\n            w = n(16),\n            D = n(220),\n            E = n(218),\n            S = n(38),\n            C = n(36),\n            R = n(9),\n            T = n(39),\n            M = n(6),\n            I = n(57),\n            H = function () {\n                function t(t, e) {\n                    this.loadingLevel = 0, this.ignoreUpdateViewSize = 0, this.freezeContentHeightDepth = 0, u.default.needed(), this.el = t, this.viewsByType = {}, this.optionsManager = new h.default(this, e), this.viewSpecManager = new f.default(this.optionsManager, this), this.initMomentInternals(), this.initCurrentDate(), this.initEventManager(), this.constraints = new g.default(this.eventManager, this), this.constructed()\n                }\n                return t.prototype.constructed = function () { }, t.prototype.getView = function () {\n                    return this.view\n                }, t.prototype.publiclyTrigger = function (t, e) {\n                    var n, r, o = this.opt(t);\n                    if (i.isPlainObject(e) ? (n = e.context, r = e.args) : i.isArray(e) && (r = e), null == n && (n = this.el[0]), r || (r = []), this.triggerWith(t, n, r), o) return o.apply(n, r)\n                }, t.prototype.hasPublicHandlers = function (t) {\n                    return this.hasHandlers(t) || this.opt(t)\n                }, t.prototype.option = function (t, e) {\n                    var n;\n                    if (\"string\" == typeof t) {\n                        if (void 0 === e) return this.optionsManager.get(t);\n                        n = {}, n[t] = e, this.optionsManager.add(n)\n                    } else \"object\" == typeof t && this.optionsManager.add(t)\n                }, t.prototype.opt = function (t) {\n                    return this.optionsManager.get(t)\n                }, t.prototype.instantiateView = function (t) {\n                    var e = this.viewSpecManager.getViewSpec(t);\n                    if (!e) throw new Error('View type \"' + t + '\" is not valid');\n                    return new e.class(this, e)\n                }, t.prototype.isValidViewType = function (t) {\n                    return Boolean(this.viewSpecManager.getViewSpec(t))\n                }, t.prototype.changeView = function (t, e) {\n                    e && (e.start && e.end ? this.optionsManager.recordOverrides({\n                        visibleRange: e\n                    }) : this.currentDate = this.moment(e).stripZone()), this.renderView(t)\n                }, t.prototype.zoomTo = function (t, e) {\n                    var n;\n                    e = e || \"day\", n = this.viewSpecManager.getViewSpec(e) || this.viewSpecManager.getUnitViewSpec(e), this.currentDate = t.clone(), this.renderView(n ? n.type : null)\n                }, t.prototype.initCurrentDate = function () {\n                    var t = this.opt(\"defaultDate\");\n                    this.currentDate = null != t ? this.moment(t).stripZone() : this.getNow()\n                }, t.prototype.prev = function () {\n                    var t = this.view,\n                        e = t.dateProfileGenerator.buildPrev(t.get(\"dateProfile\"));\n                    e.isValid && (this.currentDate = e.date, this.renderView())\n                }, t.prototype.next = function () {\n                    var t = this.view,\n                        e = t.dateProfileGenerator.buildNext(t.get(\"dateProfile\"));\n                    e.isValid && (this.currentDate = e.date, this.renderView())\n                }, t.prototype.prevYear = function () {\n                    this.currentDate.add(-1, \"years\"), this.renderView()\n                }, t.prototype.nextYear = function () {\n                    this.currentDate.add(1, \"years\"), this.renderView()\n                }, t.prototype.today = function () {\n                    this.currentDate = this.getNow(), this.renderView()\n                }, t.prototype.gotoDate = function (t) {\n                    this.currentDate = this.moment(t).stripZone(), this.renderView()\n                }, t.prototype.incrementDate = function (t) {\n                    this.currentDate.add(o.duration(t)), this.renderView()\n                }, t.prototype.getDate = function () {\n                    return this.applyTimezone(this.currentDate)\n                }, t.prototype.pushLoading = function () {\n                    this.loadingLevel++ || this.publiclyTrigger(\"loading\", [!0, this.view])\n                }, t.prototype.popLoading = function () {\n                    --this.loadingLevel || this.publiclyTrigger(\"loading\", [!1, this.view])\n                }, t.prototype.render = function () {\n                    this.contentEl ? this.elementVisible() && (this.calcSize(), this.updateViewSize()) : this.initialRender()\n                }, t.prototype.initialRender = function () {\n                    var t = this,\n                        e = this.el;\n                    e.addClass(\"fc\"), e.on(\"click.fc\", \"a[data-goto]\", function (e) {\n                        var n = i(e.currentTarget),\n                            r = n.data(\"goto\"),\n                            o = t.moment(r.date),\n                            a = r.type,\n                            l = t.view.opt(\"navLink\" + s.capitaliseFirstLetter(a) + \"Click\");\n                        \"function\" == typeof l ? l(o, e) : (\"string\" == typeof l && (a = l), t.zoomTo(o, a))\n                    }), this.optionsManager.watch(\"settingTheme\", [\"?theme\", \"?themeSystem\"], function (n) {\n                        var r = I.getThemeSystemClass(n.themeSystem || n.theme),\n                            i = new r(t.optionsManager),\n                            o = i.getClass(\"widget\");\n                        t.theme = i, o && e.addClass(o)\n                    }, function () {\n                        var n = t.theme.getClass(\"widget\");\n                        t.theme = null, n && e.removeClass(n)\n                    }), this.optionsManager.watch(\"settingBusinessHourGenerator\", [\"?businessHours\"], function (e) {\n                        t.businessHourGenerator = new E.default(e.businessHours, t), t.view && t.view.set(\"businessHourGenerator\", t.businessHourGenerator)\n                    }, function () {\n                        t.businessHourGenerator = null\n                    }), this.optionsManager.watch(\"applyingDirClasses\", [\"?isRTL\", \"?locale\"], function (t) {\n                        e.toggleClass(\"fc-ltr\", !t.isRTL), e.toggleClass(\"fc-rtl\", t.isRTL)\n                    }), this.contentEl = i(\"<div class='fc-view-container'/>\").prependTo(e), this.initToolbars(), this.renderHeader(), this.renderFooter(), this.renderView(this.opt(\"defaultView\")), this.opt(\"handleWindowResize\") && i(window).resize(this.windowResizeProxy = s.debounce(this.windowResize.bind(this), this.opt(\"windowResizeDelay\")))\n                }, t.prototype.destroy = function () {\n                    this.view && this.clearView(), this.toolbarsManager.proxyCall(\"removeElement\"), this.contentEl.remove(), this.el.removeClass(\"fc fc-ltr fc-rtl\"), this.optionsManager.unwatch(\"settingTheme\"), this.optionsManager.unwatch(\"settingBusinessHourGenerator\"), this.el.off(\".fc\"), this.windowResizeProxy && (i(window).unbind(\"resize\", this.windowResizeProxy), this.windowResizeProxy = null), u.default.unneeded()\n                }, t.prototype.elementVisible = function () {\n                    return this.el.is(\":visible\")\n                }, t.prototype.bindViewHandlers = function (t) {\n                    var e = this;\n                    t.watch(\"titleForCalendar\", [\"title\"], function (n) {\n                        t === e.view && e.setToolbarsTitle(n.title)\n                    }), t.watch(\"dateProfileForCalendar\", [\"dateProfile\"], function (n) {\n                        t === e.view && (e.currentDate = n.dateProfile.date, e.updateToolbarButtons(n.dateProfile))\n                    })\n                }, t.prototype.unbindViewHandlers = function (t) {\n                    t.unwatch(\"titleForCalendar\"), t.unwatch(\"dateProfileForCalendar\")\n                }, t.prototype.renderView = function (t) {\n                    var e, n = this.view;\n                    this.freezeContentHeight(), n && t && n.type !== t && this.clearView(), !this.view && t && (e = this.view = this.viewsByType[t] || (this.viewsByType[t] = this.instantiateView(t)), this.bindViewHandlers(e), e.startBatchRender(), e.setElement(i(\"<div class='fc-view fc-\" + t + \"-view' />\").appendTo(this.contentEl)), this.toolbarsManager.proxyCall(\"activateButton\", t)), this.view && (this.view.get(\"businessHourGenerator\") !== this.businessHourGenerator && this.view.set(\"businessHourGenerator\", this.businessHourGenerator), this.view.setDate(this.currentDate), e && e.stopBatchRender()), this.thawContentHeight()\n                }, t.prototype.clearView = function () {\n                    var t = this.view;\n                    this.toolbarsManager.proxyCall(\"deactivateButton\", t.type), this.unbindViewHandlers(t), t.removeElement(), t.unsetDate(), this.view = null\n                }, t.prototype.reinitView = function () {\n                    var t = this.view,\n                        e = t.queryScroll();\n                    this.freezeContentHeight(), this.clearView(), this.calcSize(), this.renderView(t.type), this.view.applyScroll(e), this.thawContentHeight()\n                }, t.prototype.getSuggestedViewHeight = function () {\n                    return null == this.suggestedViewHeight && this.calcSize(), this.suggestedViewHeight\n                }, t.prototype.isHeightAuto = function () {\n                    return \"auto\" === this.opt(\"contentHeight\") || \"auto\" === this.opt(\"height\")\n                }, t.prototype.updateViewSize = function (t) {\n                    void 0 === t && (t = !1);\n                    var e, n = this.view;\n                    if (!this.ignoreUpdateViewSize && n) return t && (this.calcSize(), e = n.queryScroll()), this.ignoreUpdateViewSize++, n.updateSize(this.getSuggestedViewHeight(), this.isHeightAuto(), t), this.ignoreUpdateViewSize--, t && n.applyScroll(e), !0\n                }, t.prototype.calcSize = function () {\n                    this.elementVisible() && this._calcSize()\n                }, t.prototype._calcSize = function () {\n                    var t = this.opt(\"contentHeight\"),\n                        e = this.opt(\"height\");\n                    this.suggestedViewHeight = \"number\" == typeof t ? t : \"function\" == typeof t ? t() : \"number\" == typeof e ? e - this.queryToolbarsHeight() : \"function\" == typeof e ? e() - this.queryToolbarsHeight() : \"parent\" === e ? this.el.parent().height() - this.queryToolbarsHeight() : Math.round(this.contentEl.width() / Math.max(this.opt(\"aspectRatio\"), .5))\n                }, t.prototype.windowResize = function (t) {\n                    t.target === window && this.view && this.view.isDatesRendered && this.updateViewSize(!0) && this.publiclyTrigger(\"windowResize\", [this.view])\n                }, t.prototype.freezeContentHeight = function () {\n                    this.freezeContentHeightDepth++ || this.forceFreezeContentHeight()\n                }, t.prototype.forceFreezeContentHeight = function () {\n                    this.contentEl.css({\n                        width: \"100%\",\n                        height: this.contentEl.height(),\n                        overflow: \"hidden\"\n                    })\n                }, t.prototype.thawContentHeight = function () {\n                    this.freezeContentHeightDepth--, this.contentEl.css({\n                        width: \"\",\n                        height: \"\",\n                        overflow: \"\"\n                    }), this.freezeContentHeightDepth && this.forceFreezeContentHeight()\n                }, t.prototype.initToolbars = function () {\n                    this.header = new p.default(this, this.computeHeaderOptions()), this.footer = new p.default(this, this.computeFooterOptions()), this.toolbarsManager = new l.default([this.header, this.footer])\n                }, t.prototype.computeHeaderOptions = function () {\n                    return {\n                        extraClasses: \"fc-header-toolbar\",\n                        layout: this.opt(\"header\")\n                    }\n                }, t.prototype.computeFooterOptions = function () {\n                    return {\n                        extraClasses: \"fc-footer-toolbar\",\n                        layout: this.opt(\"footer\")\n                    }\n                }, t.prototype.renderHeader = function () {\n                    var t = this.header;\n                    t.setToolbarOptions(this.computeHeaderOptions()), t.render(), t.el && this.el.prepend(t.el)\n                }, t.prototype.renderFooter = function () {\n                    var t = this.footer;\n                    t.setToolbarOptions(this.computeFooterOptions()), t.render(), t.el && this.el.append(t.el)\n                }, t.prototype.setToolbarsTitle = function (t) {\n                    this.toolbarsManager.proxyCall(\"updateTitle\", t)\n                }, t.prototype.updateToolbarButtons = function (t) {\n                    var e = this.getNow(),\n                        n = this.view,\n                        r = n.dateProfileGenerator.build(e),\n                        i = n.dateProfileGenerator.buildPrev(n.get(\"dateProfile\")),\n                        o = n.dateProfileGenerator.buildNext(n.get(\"dateProfile\"));\n                    this.toolbarsManager.proxyCall(r.isValid && !t.currentUnzonedRange.containsDate(e) ? \"enableButton\" : \"disableButton\", \"today\"), this.toolbarsManager.proxyCall(i.isValid ? \"enableButton\" : \"disableButton\", \"prev\"), this.toolbarsManager.proxyCall(o.isValid ? \"enableButton\" : \"disableButton\", \"next\")\n                }, t.prototype.queryToolbarsHeight = function () {\n                    return this.toolbarsManager.items.reduce(function (t, e) {\n                        return t + (e.el ? e.el.outerHeight(!0) : 0)\n                    }, 0)\n                }, t.prototype.select = function (t, e) {\n                    this.view.select(this.buildSelectFootprint.apply(this, arguments))\n                }, t.prototype.unselect = function () {\n                    this.view && this.view.unselect()\n                }, t.prototype.buildSelectFootprint = function (t, e) {\n                    var n, r = this.moment(t).stripZone();\n                    return n = e ? this.moment(e).stripZone() : r.hasTime() ? r.clone().add(this.defaultTimedEventDuration) : r.clone().add(this.defaultAllDayEventDuration), new b.default(new m.default(r, n), !r.hasTime())\n                }, t.prototype.initMomentInternals = function () {\n                    var t = this;\n                    this.defaultAllDayEventDuration = o.duration(this.opt(\"defaultAllDayEventDuration\")), this.defaultTimedEventDuration = o.duration(this.opt(\"defaultTimedEventDuration\")), this.optionsManager.watch(\"buildingMomentLocale\", [\"?locale\", \"?monthNames\", \"?monthNamesShort\", \"?dayNames\", \"?dayNamesShort\", \"?firstDay\", \"?weekNumberCalculation\"], function (e) {\n                        var n, r = e.weekNumberCalculation,\n                            i = e.firstDay;\n                        \"iso\" === r && (r = \"ISO\");\n                        var o = Object.create(v.getMomentLocaleData(e.locale));\n                        e.monthNames && (o._months = e.monthNames), e.monthNamesShort && (o._monthsShort = e.monthNamesShort), e.dayNames && (o._weekdays = e.dayNames), e.dayNamesShort && (o._weekdaysShort = e.dayNamesShort), null == i && \"ISO\" === r && (i = 1), null != i && (n = Object.create(o._week), n.dow = i, o._week = n), \"ISO\" !== r && \"local\" !== r && \"function\" != typeof r || (o._fullCalendar_weekCalc = r), t.localeData = o, t.currentDate && t.localizeMoment(t.currentDate)\n                    })\n                }, t.prototype.moment = function () {\n                    for (var t = [], e = 0; e < arguments.length; e++) t[e] = arguments[e];\n                    var n;\n                    return \"local\" === this.opt(\"timezone\") ? (n = y.default.apply(null, t), n.hasTime() && n.local()) : n = \"UTC\" === this.opt(\"timezone\") ? y.default.utc.apply(null, t) : y.default.parseZone.apply(null, t), this.localizeMoment(n), n\n                }, t.prototype.msToMoment = function (t, e) {\n                    var n = y.default.utc(t);\n                    return e ? n.stripTime() : n = this.applyTimezone(n), this.localizeMoment(n), n\n                },\n                    t.prototype.msToUtcMoment = function (t, e) {\n                        var n = y.default.utc(t);\n                        return e && n.stripTime(), this.localizeMoment(n), n\n                    }, t.prototype.localizeMoment = function (t) {\n                        t._locale = this.localeData\n                    }, t.prototype.getIsAmbigTimezone = function () {\n                        return \"local\" !== this.opt(\"timezone\") && \"UTC\" !== this.opt(\"timezone\")\n                    }, t.prototype.applyTimezone = function (t) {\n                        if (!t.hasTime()) return t.clone();\n                        var e, n = this.moment(t.toArray()),\n                            r = t.time().asMilliseconds() - n.time().asMilliseconds();\n                        return r && (e = n.clone().add(r), t.time().asMilliseconds() - e.time().asMilliseconds() == 0 && (n = e)), n\n                    }, t.prototype.footprintToDateProfile = function (t, e) {\n                        void 0 === e && (e = !1);\n                        var n, r = y.default.utc(t.unzonedRange.startMs);\n                        return e || (n = y.default.utc(t.unzonedRange.endMs)), t.isAllDay ? (r.stripTime(), n && n.stripTime()) : (r = this.applyTimezone(r), n && (n = this.applyTimezone(n))), this.localizeMoment(r), n && this.localizeMoment(n), new w.default(r, n, this)\n                    }, t.prototype.getNow = function () {\n                        var t = this.opt(\"now\");\n                        return \"function\" == typeof t && (t = t()), this.moment(t).stripZone()\n                    }, t.prototype.humanizeDuration = function (t) {\n                        return t.locale(this.opt(\"locale\")).humanize()\n                    }, t.prototype.parseUnzonedRange = function (t) {\n                        var e = null,\n                            n = null;\n                        return t.start && (e = this.moment(t.start).stripZone()), t.end && (n = this.moment(t.end).stripZone()), e || n ? e && n && n.isBefore(e) ? null : new m.default(e, n) : null\n                    }, t.prototype.initEventManager = function () {\n                        var t = this,\n                            e = new D.default(this),\n                            n = this.opt(\"eventSources\") || [],\n                            r = this.opt(\"events\");\n                        this.eventManager = e, r && n.unshift(r), e.on(\"release\", function (e) {\n                            t.trigger(\"eventsReset\", e)\n                        }), e.freeze(), n.forEach(function (n) {\n                            var r = S.default.parse(n, t);\n                            r && e.addSource(r)\n                        }), e.thaw()\n                    }, t.prototype.requestEvents = function (t, e) {\n                        return this.eventManager.requestEvents(t, e, this.opt(\"timezone\"), !this.opt(\"lazyFetching\"))\n                    }, t.prototype.getEventEnd = function (t) {\n                        return t.end ? t.end.clone() : this.getDefaultEventEnd(t.allDay, t.start)\n                    }, t.prototype.getDefaultEventEnd = function (t, e) {\n                        var n = e.clone();\n                        return t ? n.stripTime().add(this.defaultAllDayEventDuration) : n.add(this.defaultTimedEventDuration), this.getIsAmbigTimezone() && n.stripZone(), n\n                    }, t.prototype.rerenderEvents = function () {\n                        this.view.flash(\"displayingEvents\")\n                    }, t.prototype.refetchEvents = function () {\n                        this.eventManager.refetchAllSources()\n                    }, t.prototype.renderEvents = function (t, e) {\n                        this.eventManager.freeze();\n                        for (var n = 0; n < t.length; n++) this.renderEvent(t[n], e);\n                        this.eventManager.thaw()\n                    }, t.prototype.renderEvent = function (t, e) {\n                        void 0 === e && (e = !1);\n                        var n = this.eventManager,\n                            r = C.default.parse(t, t.source || n.stickySource);\n                        r && n.addEventDef(r, e)\n                    }, t.prototype.removeEvents = function (t) {\n                        var e, n, i = this.eventManager,\n                            o = [],\n                            s = {};\n                        if (null == t) i.removeAllEventDefs();\n                        else {\n                            for (i.getEventInstances().forEach(function (t) {\n                                o.push(t.toLegacy())\n                            }), o = r(o, t), n = 0; n < o.length; n++) e = this.eventManager.getEventDefByUid(o[n]._id), s[e.id] = !0;\n                            i.freeze();\n                            for (n in s) i.removeEventDefsById(n);\n                            i.thaw()\n                        }\n                    }, t.prototype.clientEvents = function (t) {\n                        var e = [];\n                        return this.eventManager.getEventInstances().forEach(function (t) {\n                            e.push(t.toLegacy())\n                        }), r(e, t)\n                    }, t.prototype.updateEvents = function (t) {\n                        this.eventManager.freeze();\n                        for (var e = 0; e < t.length; e++) this.updateEvent(t[e]);\n                        this.eventManager.thaw()\n                    }, t.prototype.updateEvent = function (t) {\n                        var e, n, r = this.eventManager.getEventDefByUid(t._id);\n                        r instanceof R.default && (e = r.buildInstance(), n = T.default.createFromRawProps(e, t, null), this.eventManager.mutateEventsWithId(r.id, n))\n                    }, t.prototype.getEventSources = function () {\n                        return this.eventManager.otherSources.slice()\n                    }, t.prototype.getEventSourceById = function (t) {\n                        return this.eventManager.getSourceById(M.default.normalizeId(t))\n                    }, t.prototype.addEventSource = function (t) {\n                        var e = S.default.parse(t, this);\n                        e && this.eventManager.addSource(e)\n                    }, t.prototype.removeEventSources = function (t) {\n                        var e, n, r = this.eventManager;\n                        if (null == t) this.eventManager.removeAllSources();\n                        else {\n                            for (e = r.multiQuerySources(t), r.freeze(), n = 0; n < e.length; n++) r.removeSource(e[n]);\n                            r.thaw()\n                        }\n                    }, t.prototype.removeEventSource = function (t) {\n                        var e, n = this.eventManager,\n                            r = n.querySources(t);\n                        for (n.freeze(), e = 0; e < r.length; e++) n.removeSource(r[e]);\n                        n.thaw()\n                    }, t.prototype.refetchEventSources = function (t) {\n                        var e, n = this.eventManager,\n                            r = n.multiQuerySources(t);\n                        for (n.freeze(), e = 0; e < r.length; e++) n.refetchSource(r[e]);\n                        n.thaw()\n                    }, t.defaults = a.globalDefaults, t.englishDefaults = a.englishDefaults, t.rtlDefaults = a.rtlDefaults, t\n            }();\n        e.default = H, d.default.mixInto(H), c.default.mixInto(H)\n    }, function (t, e, n) {\n        function r(t) {\n            var e, n, r, i, l = a.dataAttrPrefix;\n            return l && (l += \"-\"), e = t.data(l + \"event\") || null, e && (e = \"object\" == typeof e ? o.extend({}, e) : {}, n = e.start, null == n && (n = e.time), r = e.duration, i = e.stick, delete e.start, delete e.time, delete e.duration, delete e.stick), null == n && (n = t.data(l + \"start\")), null == n && (n = t.data(l + \"time\")), null == r && (r = t.data(l + \"duration\")), null == i && (i = t.data(l + \"stick\")), n = null != n ? s.duration(n) : null, r = null != r ? s.duration(r) : null, i = Boolean(i), {\n                eventProps: e,\n                startTime: n,\n                duration: r,\n                stick: i\n            }\n        }\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var i = n(2),\n            o = n(3),\n            s = n(0),\n            a = n(18),\n            l = n(4),\n            u = n(11),\n            d = n(7),\n            c = n(17),\n            p = n(9),\n            h = n(20),\n            f = n(6),\n            g = n(14),\n            v = function (t) {\n                function e() {\n                    var e = null !== t && t.apply(this, arguments) || this;\n                    return e.isDragging = !1, e\n                }\n                return i.__extends(e, t), e.prototype.end = function () {\n                    this.dragListener && this.dragListener.endInteraction()\n                }, e.prototype.bindToDocument = function () {\n                    this.listenTo(o(document), {\n                        dragstart: this.handleDragStart,\n                        sortstart: this.handleDragStart\n                    })\n                }, e.prototype.unbindFromDocument = function () {\n                    this.stopListeningTo(o(document))\n                }, e.prototype.handleDragStart = function (t, e) {\n                    var n, r;\n                    this.opt(\"droppable\") && (n = o((e ? e.item : null) || t.target), r = this.opt(\"dropAccept\"), (o.isFunction(r) ? r.call(n[0], n) : n.is(r)) && (this.isDragging || this.listenToExternalDrag(n, t, e)))\n                }, e.prototype.listenToExternalDrag = function (t, e, n) {\n                    var i, o = this,\n                        s = this.component,\n                        a = this.view,\n                        u = r(t);\n                    (this.dragListener = new c.default(s, {\n                        interactionStart: function () {\n                            o.isDragging = !0\n                        },\n                        hitOver: function (t) {\n                            var e, n = !0,\n                                r = t.component.getSafeHitFootprint(t);\n                            r ? (i = o.computeExternalDrop(r, u), i ? (e = new h.default(i.buildInstances()), n = u.eventProps ? s.isEventInstanceGroupAllowed(e) : s.isExternalInstanceGroupAllowed(e)) : n = !1) : n = !1, n || (i = null, l.disableCursor()), i && s.renderDrag(s.eventRangesToEventFootprints(e.sliceRenderRanges(s.dateProfile.renderUnzonedRange, a.calendar)))\n                        },\n                        hitOut: function () {\n                            i = null\n                        },\n                        hitDone: function () {\n                            l.enableCursor(), s.unrenderDrag()\n                        },\n                        interactionEnd: function (e) {\n                            i && a.reportExternalDrop(i, Boolean(u.eventProps), Boolean(u.stick), t, e, n), o.isDragging = !1, o.dragListener = null\n                        }\n                    })).startDrag(e)\n                }, e.prototype.computeExternalDrop = function (t, e) {\n                    var n, r = this.view.calendar,\n                        i = u.default.utc(t.unzonedRange.startMs).stripZone();\n                    return t.isAllDay && (e.startTime ? i.time(e.startTime) : i.stripTime()), e.duration && (n = i.clone().add(e.duration)), i = r.applyTimezone(i), n && (n = r.applyTimezone(n)), p.default.parse(o.extend({}, e.eventProps, {\n                        start: i,\n                        end: n\n                    }), new f.default(r))\n                }, e\n            }(g.default);\n        e.default = v, d.default.mixInto(v), a.dataAttrPrefix = \"\"\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(2),\n            i = n(3),\n            o = n(4),\n            s = n(39),\n            a = n(40),\n            l = n(17),\n            u = n(14),\n            d = function (t) {\n                function e(e, n) {\n                    var r = t.call(this, e) || this;\n                    return r.isResizing = !1, r.eventPointing = n, r\n                }\n                return r.__extends(e, t), e.prototype.end = function () {\n                    this.dragListener && this.dragListener.endInteraction()\n                }, e.prototype.bindToEl = function (t) {\n                    var e = this.component;\n                    e.bindSegHandlerToEl(t, \"mousedown\", this.handleMouseDown.bind(this)), e.bindSegHandlerToEl(t, \"touchstart\", this.handleTouchStart.bind(this))\n                }, e.prototype.handleMouseDown = function (t, e) {\n                    this.component.canStartResize(t, e) && this.buildDragListener(t, i(e.target).is(\".fc-start-resizer\")).startInteraction(e, {\n                        distance: 5\n                    })\n                }, e.prototype.handleTouchStart = function (t, e) {\n                    this.component.canStartResize(t, e) && this.buildDragListener(t, i(e.target).is(\".fc-start-resizer\")).startInteraction(e)\n                }, e.prototype.buildDragListener = function (t, e) {\n                    var n, r, i = this,\n                        s = this.component,\n                        a = this.view,\n                        u = a.calendar,\n                        d = u.eventManager,\n                        c = t.el,\n                        p = t.footprint.eventDef,\n                        h = t.footprint.eventInstance;\n                    return this.dragListener = new l.default(s, {\n                        scroll: this.opt(\"dragScroll\"),\n                        subjectEl: c,\n                        interactionStart: function () {\n                            n = !1\n                        },\n                        dragStart: function (e) {\n                            n = !0, i.eventPointing.handleMouseout(t, e), i.segResizeStart(t, e)\n                        },\n                        hitOver: function (n, l, c) {\n                            var h, f = !0,\n                                g = s.getSafeHitFootprint(c),\n                                v = s.getSafeHitFootprint(n);\n                            g && v ? (r = e ? i.computeEventStartResizeMutation(g, v, t.footprint) : i.computeEventEndResizeMutation(g, v, t.footprint), r ? (h = d.buildMutatedEventInstanceGroup(p.id, r), f = s.isEventInstanceGroupAllowed(h)) : f = !1) : f = !1, f ? r.isEmpty() && (r = null) : (r = null, o.disableCursor()), r && (a.hideEventsWithId(t.footprint.eventDef.id), a.renderEventResize(s.eventRangesToEventFootprints(h.sliceRenderRanges(s.dateProfile.renderUnzonedRange, u)), t))\n                        },\n                        hitOut: function () {\n                            r = null\n                        },\n                        hitDone: function () {\n                            a.unrenderEventResize(t), a.showEventsWithId(t.footprint.eventDef.id), o.enableCursor()\n                        },\n                        interactionEnd: function (e) {\n                            n && i.segResizeStop(t, e), r && a.reportEventResize(h, r, c, e), i.dragListener = null\n                        }\n                    })\n                }, e.prototype.segResizeStart = function (t, e) {\n                    this.isResizing = !0, this.component.publiclyTrigger(\"eventResizeStart\", {\n                        context: t.el[0],\n                        args: [t.footprint.getEventLegacy(), e, {}, this.view]\n                    })\n                }, e.prototype.segResizeStop = function (t, e) {\n                    this.isResizing = !1, this.component.publiclyTrigger(\"eventResizeStop\", {\n                        context: t.el[0],\n                        args: [t.footprint.getEventLegacy(), e, {}, this.view]\n                    })\n                }, e.prototype.computeEventStartResizeMutation = function (t, e, n) {\n                    var r, i, o = n.componentFootprint.unzonedRange,\n                        l = this.component.diffDates(e.unzonedRange.getStart(), t.unzonedRange.getStart());\n                    return o.getStart().add(l) < o.getEnd() && (r = new a.default, r.setStartDelta(l), i = new s.default, i.setDateMutation(r), i)\n                }, e.prototype.computeEventEndResizeMutation = function (t, e, n) {\n                    var r, i, o = n.componentFootprint.unzonedRange,\n                        l = this.component.diffDates(e.unzonedRange.getEnd(), t.unzonedRange.getEnd());\n                    return o.getEnd().add(l) > o.getStart() && (r = new a.default, r.setEndDelta(l), i = new s.default, i.setDateMutation(r), i)\n                }, e\n            }(u.default);\n        e.default = d\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(2),\n            i = n(4),\n            o = n(39),\n            s = n(40),\n            a = n(59),\n            l = n(17),\n            u = n(226),\n            d = n(14),\n            c = function (t) {\n                function e(e, n) {\n                    var r = t.call(this, e) || this;\n                    return r.isDragging = !1, r.eventPointing = n, r\n                }\n                return r.__extends(e, t), e.prototype.end = function () {\n                    this.dragListener && this.dragListener.endInteraction()\n                }, e.prototype.getSelectionDelay = function () {\n                    var t = this.opt(\"eventLongPressDelay\");\n                    return null == t && (t = this.opt(\"longPressDelay\")), t\n                }, e.prototype.bindToEl = function (t) {\n                    var e = this.component;\n                    e.bindSegHandlerToEl(t, \"mousedown\", this.handleMousedown.bind(this)), e.bindSegHandlerToEl(t, \"touchstart\", this.handleTouchStart.bind(this))\n                }, e.prototype.handleMousedown = function (t, e) {\n                    !this.component.shouldIgnoreMouse() && this.component.canStartDrag(t, e) && this.buildDragListener(t).startInteraction(e, {\n                        distance: 5\n                    })\n                }, e.prototype.handleTouchStart = function (t, e) {\n                    var n = this.component,\n                        r = {\n                            delay: this.view.isEventDefSelected(t.footprint.eventDef) ? 0 : this.getSelectionDelay()\n                        };\n                    n.canStartDrag(t, e) ? this.buildDragListener(t).startInteraction(e, r) : n.canStartSelection(t, e) && this.buildSelectListener(t).startInteraction(e, r)\n                }, e.prototype.buildSelectListener = function (t) {\n                    var e = this,\n                        n = this.view,\n                        r = t.footprint.eventDef,\n                        i = t.footprint.eventInstance;\n                    if (this.dragListener) return this.dragListener;\n                    var o = this.dragListener = new a.default({\n                        dragStart: function (t) {\n                            o.isTouch && !n.isEventDefSelected(r) && i && n.selectEventInstance(i)\n                        },\n                        interactionEnd: function (t) {\n                            e.dragListener = null\n                        }\n                    });\n                    return o\n                }, e.prototype.buildDragListener = function (t) {\n                    var e, n, r, o = this,\n                        s = this.component,\n                        a = this.view,\n                        d = a.calendar,\n                        c = d.eventManager,\n                        p = t.el,\n                        h = t.footprint.eventDef,\n                        f = t.footprint.eventInstance;\n                    if (this.dragListener) return this.dragListener;\n                    var g = this.dragListener = new l.default(a, {\n                        scroll: this.opt(\"dragScroll\"),\n                        subjectEl: p,\n                        subjectCenter: !0,\n                        interactionStart: function (r) {\n                            t.component = s, e = !1, n = new u.default(t.el, {\n                                additionalClass: \"fc-dragging\",\n                                parentEl: a.el,\n                                opacity: g.isTouch ? null : o.opt(\"dragOpacity\"),\n                                revertDuration: o.opt(\"dragRevertDuration\"),\n                                zIndex: 2\n                            }), n.hide(), n.start(r)\n                        },\n                        dragStart: function (n) {\n                            g.isTouch && !a.isEventDefSelected(h) && f && a.selectEventInstance(f), e = !0, o.eventPointing.handleMouseout(t, n), o.segDragStart(t, n), a.hideEventsWithId(t.footprint.eventDef.id)\n                        },\n                        hitOver: function (e, l, u) {\n                            var p, f, v, y = !0;\n                            t.hit && (u = t.hit), p = u.component.getSafeHitFootprint(u), f = e.component.getSafeHitFootprint(e), p && f ? (r = o.computeEventDropMutation(p, f, h), r ? (v = c.buildMutatedEventInstanceGroup(h.id, r), y = s.isEventInstanceGroupAllowed(v)) : y = !1) : y = !1, y || (r = null, i.disableCursor()), r && a.renderDrag(s.eventRangesToEventFootprints(v.sliceRenderRanges(s.dateProfile.renderUnzonedRange, d)), t, g.isTouch) ? n.hide() : n.show(), l && (r = null)\n                        },\n                        hitOut: function () {\n                            a.unrenderDrag(t), n.show(), r = null\n                        },\n                        hitDone: function () {\n                            i.enableCursor()\n                        },\n                        interactionEnd: function (i) {\n                            delete t.component, n.stop(!r, function () {\n                                e && (a.unrenderDrag(t), o.segDragStop(t, i)), a.showEventsWithId(t.footprint.eventDef.id), r && a.reportEventDrop(f, r, p, i)\n                            }), o.dragListener = null\n                        }\n                    });\n                    return g\n                }, e.prototype.segDragStart = function (t, e) {\n                    this.isDragging = !0, this.component.publiclyTrigger(\"eventDragStart\", {\n                        context: t.el[0],\n                        args: [t.footprint.getEventLegacy(), e, {}, this.view]\n                    })\n                }, e.prototype.segDragStop = function (t, e) {\n                    this.isDragging = !1, this.component.publiclyTrigger(\"eventDragStop\", {\n                        context: t.el[0],\n                        args: [t.footprint.getEventLegacy(), e, {}, this.view]\n                    })\n                }, e.prototype.computeEventDropMutation = function (t, e, n) {\n                    var r = new o.default;\n                    return r.setDateMutation(this.computeEventDateMutation(t, e)), r\n                }, e.prototype.computeEventDateMutation = function (t, e) {\n                    var n, r, i = t.unzonedRange.getStart(),\n                        o = e.unzonedRange.getStart(),\n                        a = !1,\n                        l = !1,\n                        u = !1;\n                    return t.isAllDay !== e.isAllDay && (a = !0, e.isAllDay ? (u = !0, i.stripTime()) : l = !0), n = this.component.diffDates(o, i), r = new s.default, r.clearEnd = a, r.forceTimed = l, r.forceAllDay = u, r.setDateDelta(n), r\n                }, e\n            }(d.default);\n        e.default = c\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(2),\n            i = n(4),\n            o = n(17),\n            s = n(12),\n            a = n(5),\n            l = n(14),\n            u = function (t) {\n                function e(e) {\n                    var n = t.call(this, e) || this;\n                    return n.dragListener = n.buildDragListener(), n\n                }\n                return r.__extends(e, t), e.prototype.end = function () {\n                    this.dragListener.endInteraction()\n                }, e.prototype.getDelay = function () {\n                    var t = this.opt(\"selectLongPressDelay\");\n                    return null == t && (t = this.opt(\"longPressDelay\")), t\n                }, e.prototype.bindToEl = function (t) {\n                    var e = this,\n                        n = this.component,\n                        r = this.dragListener;\n                    n.bindDateHandlerToEl(t, \"mousedown\", function (t) {\n                        e.opt(\"selectable\") && !n.shouldIgnoreMouse() && r.startInteraction(t, {\n                            distance: e.opt(\"selectMinDistance\")\n                        })\n                    }), n.bindDateHandlerToEl(t, \"touchstart\", function (t) {\n                        e.opt(\"selectable\") && !n.shouldIgnoreTouch() && r.startInteraction(t, {\n                            delay: e.getDelay()\n                        })\n                    }), i.preventSelection(t)\n                }, e.prototype.buildDragListener = function () {\n                    var t, e = this,\n                        n = this.component;\n                    return new o.default(n, {\n                        scroll: this.opt(\"dragScroll\"),\n                        interactionStart: function () {\n                            t = null\n                        },\n                        dragStart: function (t) {\n                            e.view.unselect(t)\n                        },\n                        hitOver: function (r, o, s) {\n                            var a, l;\n                            s && (a = n.getSafeHitFootprint(s), l = n.getSafeHitFootprint(r), t = a && l ? e.computeSelection(a, l) : null, t ? n.renderSelectionFootprint(t) : !1 === t && i.disableCursor())\n                        },\n                        hitOut: function () {\n                            t = null, n.unrenderSelection()\n                        },\n                        hitDone: function () {\n                            i.enableCursor()\n                        },\n                        interactionEnd: function (n, r) {\n                            !r && t && e.view.reportSelection(t, n)\n                        }\n                    })\n                }, e.prototype.computeSelection = function (t, e) {\n                    var n = this.computeSelectionFootprint(t, e);\n                    return !(n && !this.isSelectionFootprintAllowed(n)) && n\n                }, e.prototype.computeSelectionFootprint = function (t, e) {\n                    var n = [t.unzonedRange.startMs, t.unzonedRange.endMs, e.unzonedRange.startMs, e.unzonedRange.endMs];\n                    return n.sort(i.compareNumbers), new s.default(new a.default(n[0], n[3]), t.isAllDay)\n                }, e.prototype.isSelectionFootprintAllowed = function (t) {\n                    return this.component.dateProfile.validUnzonedRange.containsRange(t.unzonedRange) && this.view.calendar.constraints.isSelectionFootprintAllowed(t)\n                }, e\n            }(l.default);\n        e.default = u\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(2),\n            i = n(17),\n            o = n(14),\n            s = function (t) {\n                function e(e) {\n                    var n = t.call(this, e) || this;\n                    return n.dragListener = n.buildDragListener(), n\n                }\n                return r.__extends(e, t), e.prototype.end = function () {\n                    this.dragListener.endInteraction()\n                }, e.prototype.bindToEl = function (t) {\n                    var e = this.component,\n                        n = this.dragListener;\n                    e.bindDateHandlerToEl(t, \"mousedown\", function (t) {\n                        e.shouldIgnoreMouse() || n.startInteraction(t)\n                    }), e.bindDateHandlerToEl(t, \"touchstart\", function (t) {\n                        e.shouldIgnoreTouch() || n.startInteraction(t)\n                    })\n                }, e.prototype.buildDragListener = function () {\n                    var t, e = this,\n                        n = this.component,\n                        r = new i.default(n, {\n                            scroll: this.opt(\"dragScroll\"),\n                            interactionStart: function () {\n                                t = r.origHit\n                            },\n                            hitOver: function (e, n, r) {\n                                n || (t = null)\n                            },\n                            hitOut: function () {\n                                t = null\n                            },\n                            interactionEnd: function (r, i) {\n                                var o;\n                                !i && t && (o = n.getSafeHitFootprint(t)) && e.view.triggerDayClick(o, n.getHitEl(t), r)\n                            }\n                        });\n                    return r.shouldCancelTouchScroll = !1, r.scrollAlwaysKills = !0, r\n                }, e\n            }(o.default);\n        e.default = s\n    }, function (t, e, n) {\n        function r(t) {\n            var e, n = [],\n                r = [];\n            for (e = 0; e < t.length; e++) t[e].componentFootprint.isAllDay ? n.push(t[e]) : r.push(t[e]);\n            return {\n                allDay: n,\n                timed: r\n            }\n        }\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var i, o, s = n(2),\n            a = n(0),\n            l = n(3),\n            u = n(4),\n            d = n(41),\n            c = n(43),\n            p = n(239),\n            h = n(66),\n            f = function (t) {\n                function e(e, n) {\n                    var r = t.call(this, e, n) || this;\n                    return r.usesMinMaxTime = !0, r.timeGrid = r.instantiateTimeGrid(), r.addChild(r.timeGrid), r.opt(\"allDaySlot\") && (r.dayGrid = r.instantiateDayGrid(), r.addChild(r.dayGrid)), r.scroller = new d.default({\n                        overflowX: \"hidden\",\n                        overflowY: \"auto\"\n                    }), r\n                }\n                return s.__extends(e, t), e.prototype.instantiateTimeGrid = function () {\n                    var t = new this.timeGridClass(this);\n                    return u.copyOwnProps(i, t), t\n                }, e.prototype.instantiateDayGrid = function () {\n                    var t = new this.dayGridClass(this);\n                    return u.copyOwnProps(o, t), t\n                }, e.prototype.renderSkeleton = function () {\n                    var t, e;\n                    this.el.addClass(\"fc-agenda-view\").html(this.renderSkeletonHtml()), this.scroller.render(), t = this.scroller.el.addClass(\"fc-time-grid-container\"), e = l('<div class=\"fc-time-grid\" />').appendTo(t), this.el.find(\".fc-body > tr > td\").append(t), this.timeGrid.headContainerEl = this.el.find(\".fc-head-container\"), this.timeGrid.setElement(e), this.dayGrid && (this.dayGrid.setElement(this.el.find(\".fc-day-grid\")), this.dayGrid.bottomCoordPadding = this.dayGrid.el.next(\"hr\").outerHeight())\n                }, e.prototype.unrenderSkeleton = function () {\n                    this.timeGrid.removeElement(), this.dayGrid && this.dayGrid.removeElement(), this.scroller.destroy()\n                }, e.prototype.renderSkeletonHtml = function () {\n                    var t = this.calendar.theme;\n                    return '<table class=\"' + t.getClass(\"tableGrid\") + '\">' + (this.opt(\"columnHeader\") ? '<thead class=\"fc-head\"><tr><td class=\"fc-head-container ' + t.getClass(\"widgetHeader\") + '\">&nbsp;</td></tr></thead>' : \"\") + '<tbody class=\"fc-body\"><tr><td class=\"' + t.getClass(\"widgetContent\") + '\">' + (this.dayGrid ? '<div class=\"fc-day-grid\"/><hr class=\"fc-divider ' + t.getClass(\"widgetHeader\") + '\"/>' : \"\") + \"</td></tr></tbody></table>\"\n                }, e.prototype.axisStyleAttr = function () {\n                    return null != this.axisWidth ? 'style=\"width:' + this.axisWidth + 'px\"' : \"\"\n                }, e.prototype.getNowIndicatorUnit = function () {\n                    return this.timeGrid.getNowIndicatorUnit()\n                }, e.prototype.updateSize = function (e, n, r) {\n                    var i, o, s;\n                    if (t.prototype.updateSize.call(this, e, n, r), this.axisWidth = u.matchCellWidths(this.el.find(\".fc-axis\")), !this.timeGrid.colEls) return void (n || (o = this.computeScrollerHeight(e), this.scroller.setHeight(o)));\n                    var a = this.el.find(\".fc-row:not(.fc-scroller *)\");\n                    this.timeGrid.bottomRuleEl.hide(), this.scroller.clear(), u.uncompensateScroll(a), this.dayGrid && (this.dayGrid.removeSegPopover(), i = this.opt(\"eventLimit\"), i && \"number\" != typeof i && (i = 5), i && this.dayGrid.limitRows(i)), n || (o = this.computeScrollerHeight(e), this.scroller.setHeight(o), s = this.scroller.getScrollbarWidths(), (s.left || s.right) && (u.compensateScroll(a, s), o = this.computeScrollerHeight(e), this.scroller.setHeight(o)), this.scroller.lockOverflow(s), this.timeGrid.getTotalSlatHeight() < o && this.timeGrid.bottomRuleEl.show())\n                }, e.prototype.computeScrollerHeight = function (t) {\n                    return t - u.subtractInnerElHeight(this.el, this.scroller.el)\n                }, e.prototype.computeInitialDateScroll = function () {\n                    var t = a.duration(this.opt(\"scrollTime\")),\n                        e = this.timeGrid.computeTimeTop(t);\n                    return e = Math.ceil(e), e && e++, {\n                        top: e\n                    }\n                }, e.prototype.queryDateScroll = function () {\n                    return {\n                        top: this.scroller.getScrollTop()\n                    }\n                }, e.prototype.applyDateScroll = function (t) {\n                    void 0 !== t.top && this.scroller.setScrollTop(t.top)\n                }, e.prototype.getHitFootprint = function (t) {\n                    return t.component.getHitFootprint(t)\n                }, e.prototype.getHitEl = function (t) {\n                    return t.component.getHitEl(t)\n                }, e.prototype.executeEventRender = function (t) {\n                    var e, n, r = {},\n                        i = {};\n                    for (e in t) n = t[e], n.getEventDef().isAllDay() ? r[e] = n : i[e] = n;\n                    this.timeGrid.executeEventRender(i), this.dayGrid && this.dayGrid.executeEventRender(r)\n                }, e.prototype.renderDrag = function (t, e, n) {\n                    var i = r(t),\n                        o = !1;\n                    return o = this.timeGrid.renderDrag(i.timed, e, n), this.dayGrid && (o = this.dayGrid.renderDrag(i.allDay, e, n) || o), o\n                }, e.prototype.renderEventResize = function (t, e, n) {\n                    var i = r(t);\n                    this.timeGrid.renderEventResize(i.timed, e, n), this.dayGrid && this.dayGrid.renderEventResize(i.allDay, e, n)\n                }, e.prototype.renderSelectionFootprint = function (t) {\n                    t.isAllDay ? this.dayGrid && this.dayGrid.renderSelectionFootprint(t) : this.timeGrid.renderSelectionFootprint(t)\n                }, e\n            }(c.default);\n        e.default = f, f.prototype.timeGridClass = p.default, f.prototype.dayGridClass = h.default, i = {\n            renderHeadIntroHtml: function () {\n                var t, e = this.view,\n                    n = e.calendar,\n                    r = n.msToUtcMoment(this.dateProfile.renderUnzonedRange.startMs, !0);\n                return this.opt(\"weekNumbers\") ? (t = r.format(this.opt(\"smallWeekFormat\")), '<th class=\"fc-axis fc-week-number ' + n.theme.getClass(\"widgetHeader\") + '\" ' + e.axisStyleAttr() + \">\" + e.buildGotoAnchorHtml({\n                    date: r,\n                    type: \"week\",\n                    forceOff: this.colCnt > 1\n                }, u.htmlEscape(t)) + \"</th>\") : '<th class=\"fc-axis ' + n.theme.getClass(\"widgetHeader\") + '\" ' + e.axisStyleAttr() + \"></th>\"\n            },\n            renderBgIntroHtml: function () {\n                var t = this.view;\n                return '<td class=\"fc-axis ' + t.calendar.theme.getClass(\"widgetContent\") + '\" ' + t.axisStyleAttr() + \"></td>\"\n            },\n            renderIntroHtml: function () {\n                return '<td class=\"fc-axis\" ' + this.view.axisStyleAttr() + \"></td>\"\n            }\n        }, o = {\n            renderBgIntroHtml: function () {\n                var t = this.view;\n                return '<td class=\"fc-axis ' + t.calendar.theme.getClass(\"widgetContent\") + '\" ' + t.axisStyleAttr() + \"><span>\" + t.getAllDayHtml() + \"</span></td>\"\n            },\n            renderIntroHtml: function () {\n                return '<td class=\"fc-axis\" ' + this.view.axisStyleAttr() + \"></td>\"\n            }\n        }\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(2),\n            i = n(3),\n            o = n(0),\n            s = n(4),\n            a = n(42),\n            l = n(61),\n            u = n(65),\n            d = n(60),\n            c = n(58),\n            p = n(5),\n            h = n(12),\n            f = n(240),\n            g = n(241),\n            v = n(242),\n            y = [{\n                hours: 1\n            }, {\n                minutes: 30\n            }, {\n                minutes: 15\n            }, {\n                seconds: 30\n            }, {\n                seconds: 15\n            }],\n            m = function (t) {\n                function e(e) {\n                    var n = t.call(this, e) || this;\n                    return n.processOptions(), n\n                }\n                return r.__extends(e, t), e.prototype.componentFootprintToSegs = function (t) {\n                    var e, n = this.sliceRangeByTimes(t.unzonedRange);\n                    for (e = 0; e < n.length; e++) this.isRTL ? n[e].col = this.daysPerRow - 1 - n[e].dayIndex : n[e].col = n[e].dayIndex;\n                    return n\n                }, e.prototype.sliceRangeByTimes = function (t) {\n                    var e, n, r = [];\n                    for (n = 0; n < this.daysPerRow; n++)(e = t.intersect(this.dayRanges[n])) && r.push({\n                        startMs: e.startMs,\n                        endMs: e.endMs,\n                        isStart: e.isStart,\n                        isEnd: e.isEnd,\n                        dayIndex: n\n                    });\n                    return r\n                }, e.prototype.processOptions = function () {\n                    var t, e = this.opt(\"slotDuration\"),\n                        n = this.opt(\"snapDuration\");\n                    e = o.duration(e), n = n ? o.duration(n) : e, this.slotDuration = e, this.snapDuration = n, this.snapsPerSlot = e / n, t = this.opt(\"slotLabelFormat\"), i.isArray(t) && (t = t[t.length - 1]), this.labelFormat = t || this.opt(\"smallTimeFormat\"), t = this.opt(\"slotLabelInterval\"), this.labelInterval = t ? o.duration(t) : this.computeLabelInterval(e)\n                }, e.prototype.computeLabelInterval = function (t) {\n                    var e, n, r;\n                    for (e = y.length - 1; e >= 0; e--)\n                        if (n = o.duration(y[e]), r = s.divideDurationByDuration(n, t), s.isInt(r) && r > 1) return n;\n                    return o.duration(t)\n                }, e.prototype.renderDates = function (t) {\n                    this.dateProfile = t, this.updateDayTable(), this.renderSlats(), this.renderColumns()\n                }, e.prototype.unrenderDates = function () {\n                    this.unrenderColumns()\n                }, e.prototype.renderSkeleton = function () {\n                    var t = this.view.calendar.theme;\n                    this.el.html('<div class=\"fc-bg\"></div><div class=\"fc-slats\"></div><hr class=\"fc-divider ' + t.getClass(\"widgetHeader\") + '\" style=\"display:none\" />'), this.bottomRuleEl = this.el.find(\"hr\")\n                }, e.prototype.renderSlats = function () {\n                    var t = this.view.calendar.theme;\n                    this.slatContainerEl = this.el.find(\"> .fc-slats\").html('<table class=\"' + t.getClass(\"tableGrid\") + '\">' + this.renderSlatRowHtml() + \"</table>\"), this.slatEls = this.slatContainerEl.find(\"tr\"), this.slatCoordCache = new c.default({\n                        els: this.slatEls,\n                        isVertical: !0\n                    })\n                }, e.prototype.renderSlatRowHtml = function () {\n                    for (var t, e, n, r = this.view, i = r.calendar, a = i.theme, l = this.isRTL, u = this.dateProfile, d = \"\", c = o.duration(+u.minTime), p = o.duration(0); c < u.maxTime;) t = i.msToUtcMoment(u.renderUnzonedRange.startMs).time(c), e = s.isInt(s.divideDurationByDuration(p, this.labelInterval)), n = '<td class=\"fc-axis fc-time ' + a.getClass(\"widgetContent\") + '\" ' + r.axisStyleAttr() + \">\" + (e ? \"<span>\" + s.htmlEscape(t.format(this.labelFormat)) + \"</span>\" : \"\") + \"</td>\", d += '<tr data-time=\"' + t.format(\"HH:mm:ss\") + '\"' + (e ? \"\" : ' class=\"fc-minor\"') + \">\" + (l ? \"\" : n) + '<td class=\"' + a.getClass(\"widgetContent\") + '\"/>' + (l ? n : \"\") + \"</tr>\", c.add(this.slotDuration), p.add(this.slotDuration);\n                    return d\n                }, e.prototype.renderColumns = function () {\n                    var t = this.dateProfile,\n                        e = this.view.calendar.theme;\n                    this.dayRanges = this.dayDates.map(function (e) {\n                        return new p.default(e.clone().add(t.minTime), e.clone().add(t.maxTime))\n                    }), this.headContainerEl && this.headContainerEl.html(this.renderHeadHtml()), this.el.find(\"> .fc-bg\").html('<table class=\"' + e.getClass(\"tableGrid\") + '\">' + this.renderBgTrHtml(0) + \"</table>\"), this.colEls = this.el.find(\".fc-day, .fc-disabled-day\"), this.colCoordCache = new c.default({\n                        els: this.colEls,\n                        isHorizontal: !0\n                    }), this.renderContentSkeleton()\n                }, e.prototype.unrenderColumns = function () {\n                    this.unrenderContentSkeleton()\n                }, e.prototype.renderContentSkeleton = function () {\n                    var t, e, n = \"\";\n                    for (t = 0; t < this.colCnt; t++) n += '<td><div class=\"fc-content-col\"><div class=\"fc-event-container fc-helper-container\"></div><div class=\"fc-event-container\"></div><div class=\"fc-highlight-container\"></div><div class=\"fc-bgevent-container\"></div><div class=\"fc-business-container\"></div></div></td>';\n                    e = this.contentSkeletonEl = i('<div class=\"fc-content-skeleton\"><table><tr>' + n + \"</tr></table></div>\"), this.colContainerEls = e.find(\".fc-content-col\"), this.helperContainerEls = e.find(\".fc-helper-container\"), this.fgContainerEls = e.find(\".fc-event-container:not(.fc-helper-container)\"), this.bgContainerEls = e.find(\".fc-bgevent-container\"), this.highlightContainerEls = e.find(\".fc-highlight-container\"), this.businessContainerEls = e.find(\".fc-business-container\"), this.bookendCells(e.find(\"tr\")), this.el.append(e)\n                }, e.prototype.unrenderContentSkeleton = function () {\n                    this.contentSkeletonEl && (this.contentSkeletonEl.remove(), this.contentSkeletonEl = null, this.colContainerEls = null, this.helperContainerEls = null, this.fgContainerEls = null, this.bgContainerEls = null, this.highlightContainerEls = null, this.businessContainerEls = null)\n                }, e.prototype.groupSegsByCol = function (t) {\n                    var e, n = [];\n                    for (e = 0; e < this.colCnt; e++) n.push([]);\n                    for (e = 0; e < t.length; e++) n[t[e].col].push(t[e]);\n                    return n\n                }, e.prototype.attachSegsByCol = function (t, e) {\n                    var n, r, i;\n                    for (n = 0; n < this.colCnt; n++)\n                        for (r = t[n], i = 0; i < r.length; i++) e.eq(n).append(r[i].el)\n                }, e.prototype.getNowIndicatorUnit = function () {\n                    return \"minute\"\n                }, e.prototype.renderNowIndicator = function (t) {\n                    if (this.colContainerEls) {\n                        var e, n = this.componentFootprintToSegs(new h.default(new p.default(t, t.valueOf() + 1), !1)),\n                            r = this.computeDateTop(t, t),\n                            o = [];\n                        for (e = 0; e < n.length; e++) o.push(i('<div class=\"fc-now-indicator fc-now-indicator-line\"></div>').css(\"top\", r).appendTo(this.colContainerEls.eq(n[e].col))[0]);\n                        n.length > 0 && o.push(i('<div class=\"fc-now-indicator fc-now-indicator-arrow\"></div>').css(\"top\", r).appendTo(this.el.find(\".fc-content-skeleton\"))[0]), this.nowIndicatorEls = i(o)\n                    }\n                }, e.prototype.unrenderNowIndicator = function () {\n                    this.nowIndicatorEls && (this.nowIndicatorEls.remove(), this.nowIndicatorEls = null)\n                }, e.prototype.updateSize = function (e, n, r) {\n                    t.prototype.updateSize.call(this, e, n, r), this.slatCoordCache.build(), r && this.updateSegVerticals([].concat(this.eventRenderer.getSegs(), this.businessSegs || []))\n                }, e.prototype.getTotalSlatHeight = function () {\n                    return this.slatContainerEl.outerHeight()\n                }, e.prototype.computeDateTop = function (t, e) {\n                    return this.computeTimeTop(o.duration(t - e.clone().stripTime()))\n                }, e.prototype.computeTimeTop = function (t) {\n                    var e, n, r = this.slatEls.length,\n                        i = this.dateProfile,\n                        o = (t - i.minTime) / this.slotDuration;\n                    return o = Math.max(0, o), o = Math.min(r, o), e = Math.floor(o), e = Math.min(e, r - 1), n = o - e, this.slatCoordCache.getTopPosition(e) + this.slatCoordCache.getHeight(e) * n\n                }, e.prototype.updateSegVerticals = function (t) {\n                    this.computeSegVerticals(t), this.assignSegVerticals(t)\n                }, e.prototype.computeSegVerticals = function (t) {\n                    var e, n, r, i = this.opt(\"agendaEventMinHeight\");\n                    for (e = 0; e < t.length; e++) n = t[e], r = this.dayDates[n.dayIndex], n.top = this.computeDateTop(n.startMs, r), n.bottom = Math.max(n.top + i, this.computeDateTop(n.endMs, r))\n                }, e.prototype.assignSegVerticals = function (t) {\n                    var e, n;\n                    for (e = 0; e < t.length; e++) n = t[e], n.el.css(this.generateSegVerticalCss(n))\n                }, e.prototype.generateSegVerticalCss = function (t) {\n                    return {\n                        top: t.top,\n                        bottom: -t.bottom\n                    }\n                }, e.prototype.prepareHits = function () {\n                    this.colCoordCache.build(), this.slatCoordCache.build()\n                }, e.prototype.releaseHits = function () {\n                    this.colCoordCache.clear()\n                }, e.prototype.queryHit = function (t, e) {\n                    var n = this.snapsPerSlot,\n                        r = this.colCoordCache,\n                        i = this.slatCoordCache;\n                    if (r.isLeftInBounds(t) && i.isTopInBounds(e)) {\n                        var o = r.getHorizontalIndex(t),\n                            s = i.getVerticalIndex(e);\n                        if (null != o && null != s) {\n                            var a = i.getTopOffset(s),\n                                l = i.getHeight(s),\n                                u = (e - a) / l,\n                                d = Math.floor(u * n),\n                                c = s * n + d,\n                                p = a + d / n * l,\n                                h = a + (d + 1) / n * l;\n                            return {\n                                col: o,\n                                snap: c,\n                                component: this,\n                                left: r.getLeftOffset(o),\n                                right: r.getRightOffset(o),\n                                top: p,\n                                bottom: h\n                            }\n                        }\n                    }\n                }, e.prototype.getHitFootprint = function (t) {\n                    var e, n = this.getCellDate(0, t.col),\n                        r = this.computeSnapTime(t.snap);\n                    return n.time(r), e = n.clone().add(this.snapDuration), new h.default(new p.default(n, e), !1)\n                }, e.prototype.computeSnapTime = function (t) {\n                    return o.duration(this.dateProfile.minTime + this.snapDuration * t)\n                }, e.prototype.getHitEl = function (t) {\n                    return this.colEls.eq(t.col)\n                }, e.prototype.renderDrag = function (t, e, n) {\n                    var r;\n                    if (e) {\n                        if (t.length) return this.helperRenderer.renderEventDraggingFootprints(t, e, n), !0\n                    } else\n                        for (r = 0; r < t.length; r++) this.renderHighlight(t[r].componentFootprint)\n                }, e.prototype.unrenderDrag = function () {\n                    this.unrenderHighlight(), this.helperRenderer.unrender()\n                }, e.prototype.renderEventResize = function (t, e, n) {\n                    this.helperRenderer.renderEventResizingFootprints(t, e, n)\n                }, e.prototype.unrenderEventResize = function () {\n                    this.helperRenderer.unrender()\n                }, e.prototype.renderSelectionFootprint = function (t) {\n                    this.opt(\"selectHelper\") ? this.helperRenderer.renderComponentFootprint(t) : this.renderHighlight(t)\n                }, e.prototype.unrenderSelection = function () {\n                    this.helperRenderer.unrender(), this.unrenderHighlight()\n                }, e\n            }(a.default);\n        e.default = m, m.prototype.eventRendererClass = f.default, m.prototype.businessHourRendererClass = l.default, m.prototype.helperRendererClass = g.default, m.prototype.fillRendererClass = v.default, u.default.mixInto(m), d.default.mixInto(m)\n    }, function (t, e, n) {\n        function r(t) {\n            var e, n, r, i = [];\n            for (e = 0; e < t.length; e++) {\n                for (n = t[e], r = 0; r < i.length && s(n, i[r]).length; r++);\n                n.level = r, (i[r] || (i[r] = [])).push(n)\n            }\n            return i\n        }\n\n        function i(t) {\n            var e, n, r, i, o;\n            for (e = 0; e < t.length; e++)\n                for (n = t[e], r = 0; r < n.length; r++)\n                    for (i = n[r], i.forwardSegs = [], o = e + 1; o < t.length; o++) s(i, t[o], i.forwardSegs)\n        }\n\n        function o(t) {\n            var e, n, r = t.forwardSegs,\n                i = 0;\n            if (void 0 === t.forwardPressure) {\n                for (e = 0; e < r.length; e++) n = r[e], o(n), i = Math.max(i, 1 + n.forwardPressure);\n                t.forwardPressure = i\n            }\n        }\n\n        function s(t, e, n) {\n            void 0 === n && (n = []);\n            for (var r = 0; r < e.length; r++) a(t, e[r]) && n.push(e[r]);\n            return n\n        }\n\n        function a(t, e) {\n            return t.bottom > e.top && t.top < e.bottom\n        }\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var l = n(2),\n            u = n(4),\n            d = n(44),\n            c = function (t) {\n                function e(e, n) {\n                    var r = t.call(this, e, n) || this;\n                    return r.timeGrid = e, r\n                }\n                return l.__extends(e, t), e.prototype.renderFgSegs = function (t) {\n                    this.renderFgSegsIntoContainers(t, this.timeGrid.fgContainerEls)\n                }, e.prototype.renderFgSegsIntoContainers = function (t, e) {\n                    var n, r;\n                    for (n = this.timeGrid.groupSegsByCol(t), r = 0; r < this.timeGrid.colCnt; r++) this.updateFgSegCoords(n[r]);\n                    this.timeGrid.attachSegsByCol(n, e)\n                }, e.prototype.unrenderFgSegs = function () {\n                    this.fgSegs && this.fgSegs.forEach(function (t) {\n                        t.el.remove()\n                    })\n                }, e.prototype.computeEventTimeFormat = function () {\n                    return this.opt(\"noMeridiemTimeFormat\")\n                }, e.prototype.computeDisplayEventEnd = function () {\n                    return !0\n                }, e.prototype.fgSegHtml = function (t, e) {\n                    var n, r, i, o = this.view,\n                        s = o.calendar,\n                        a = t.footprint.componentFootprint,\n                        l = a.isAllDay,\n                        d = t.footprint.eventDef,\n                        c = o.isEventDefDraggable(d),\n                        p = !e && t.isStart && o.isEventDefResizableFromStart(d),\n                        h = !e && t.isEnd && o.isEventDefResizableFromEnd(d),\n                        f = this.getSegClasses(t, c, p || h),\n                        g = u.cssToStr(this.getSkinCss(d));\n                    if (f.unshift(\"fc-time-grid-event\", \"fc-v-event\"), o.isMultiDayRange(a.unzonedRange)) {\n                        if (t.isStart || t.isEnd) {\n                            var v = s.msToMoment(t.startMs),\n                                y = s.msToMoment(t.endMs);\n                            n = this._getTimeText(v, y, l), r = this._getTimeText(v, y, l, \"LT\"), i = this._getTimeText(v, y, l, null, !1)\n                        }\n                    } else n = this.getTimeText(t.footprint), r = this.getTimeText(t.footprint, \"LT\"), i = this.getTimeText(t.footprint, null, !1);\n                    return '<a class=\"' + f.join(\" \") + '\"' + (d.url ? ' href=\"' + u.htmlEscape(d.url) + '\"' : \"\") + (g ? ' style=\"' + g + '\"' : \"\") + '><div class=\"fc-content\">' + (n ? '<div class=\"fc-time\" data-start=\"' + u.htmlEscape(i) + '\" data-full=\"' + u.htmlEscape(r) + '\"><span>' + u.htmlEscape(n) + \"</span></div>\" : \"\") + (d.title ? '<div class=\"fc-title\">' + u.htmlEscape(d.title) + \"</div>\" : \"\") + '</div><div class=\"fc-bg\"/>' + (h ? '<div class=\"fc-resizer fc-end-resizer\" />' : \"\") + \"</a>\"\n                }, e.prototype.updateFgSegCoords = function (t) {\n                    this.timeGrid.computeSegVerticals(t), this.computeFgSegHorizontals(t), this.timeGrid.assignSegVerticals(t), this.assignFgSegHorizontals(t)\n                }, e.prototype.computeFgSegHorizontals = function (t) {\n                    var e, n, s;\n                    if (this.sortEventSegs(t), e = r(t), i(e), n = e[0]) {\n                        for (s = 0; s < n.length; s++) o(n[s]);\n                        for (s = 0; s < n.length; s++) this.computeFgSegForwardBack(n[s], 0, 0)\n                    }\n                }, e.prototype.computeFgSegForwardBack = function (t, e, n) {\n                    var r, i = t.forwardSegs;\n                    if (void 0 === t.forwardCoord)\n                        for (i.length ? (this.sortForwardSegs(i), this.computeFgSegForwardBack(i[0], e + 1, n), t.forwardCoord = i[0].backwardCoord) : t.forwardCoord = 1, t.backwardCoord = t.forwardCoord - (t.forwardCoord - n) / (e + 1), r = 0; r < i.length; r++) this.computeFgSegForwardBack(i[r], 0, t.forwardCoord)\n                }, e.prototype.sortForwardSegs = function (t) {\n                    t.sort(u.proxy(this, \"compareForwardSegs\"))\n                }, e.prototype.compareForwardSegs = function (t, e) {\n                    return e.forwardPressure - t.forwardPressure || (t.backwardCoord || 0) - (e.backwardCoord || 0) || this.compareEventSegs(t, e)\n                }, e.prototype.assignFgSegHorizontals = function (t) {\n                    var e, n;\n                    for (e = 0; e < t.length; e++) n = t[e], n.el.css(this.generateFgSegHorizontalCss(n)), n.footprint.eventDef.title && n.bottom - n.top < 30 && n.el.addClass(\"fc-short\")\n                }, e.prototype.generateFgSegHorizontalCss = function (t) {\n                    var e, n, r = this.opt(\"slotEventOverlap\"),\n                        i = t.backwardCoord,\n                        o = t.forwardCoord,\n                        s = this.timeGrid.generateSegVerticalCss(t),\n                        a = this.timeGrid.isRTL;\n                    return r && (o = Math.min(1, i + 2 * (o - i))), a ? (e = 1 - o, n = i) : (e = i, n = 1 - o), s.zIndex = t.level + 1, s.left = 100 * e + \"%\", s.right = 100 * n + \"%\", r && t.forwardPressure && (s[a ? \"marginLeft\" : \"marginRight\"] = 20), s\n                }, e\n            }(d.default);\n        e.default = c\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(2),\n            i = n(3),\n            o = n(63),\n            s = function (t) {\n                function e() {\n                    return null !== t && t.apply(this, arguments) || this\n                }\n                return r.__extends(e, t), e.prototype.renderSegs = function (t, e) {\n                    var n, r, o, s = [];\n                    for (this.eventRenderer.renderFgSegsIntoContainers(t, this.component.helperContainerEls), n = 0; n < t.length; n++) r = t[n], e && e.col === r.col && (o = e.el, r.el.css({\n                        left: o.css(\"left\"),\n                        right: o.css(\"right\"),\n                        \"margin-left\": o.css(\"margin-left\"),\n                        \"margin-right\": o.css(\"margin-right\")\n                    })), s.push(r.el[0]);\n                    return i(s)\n                }, e\n            }(o.default);\n        e.default = s\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(2),\n            i = n(62),\n            o = function (t) {\n                function e() {\n                    return null !== t && t.apply(this, arguments) || this\n                }\n                return r.__extends(e, t), e.prototype.attachSegEls = function (t, e) {\n                    var n, r = this.component;\n                    return \"bgEvent\" === t ? n = r.bgContainerEls : \"businessHours\" === t ? n = r.businessContainerEls : \"highlight\" === t && (n = r.highlightContainerEls), r.updateSegVerticals(e), r.attachSegsByCol(r.groupSegsByCol(e), n), e.map(function (t) {\n                        return t.el[0]\n                    })\n                }, e\n            }(i.default);\n        e.default = o\n    }, function (t, e, n) {\n        function r(t, e) {\n            var n, r;\n            for (n = 0; n < e.length; n++)\n                if (r = e[n], r.leftCol <= t.rightCol && r.rightCol >= t.leftCol) return !0;\n            return !1\n        }\n\n        function i(t, e) {\n            return t.leftCol - e.leftCol\n        }\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var o = n(2),\n            s = n(3),\n            a = n(4),\n            l = n(44),\n            u = function (t) {\n                function e(e, n) {\n                    var r = t.call(this, e, n) || this;\n                    return r.dayGrid = e, r\n                }\n                return o.__extends(e, t), e.prototype.renderBgRanges = function (e) {\n                    e = s.grep(e, function (t) {\n                        return t.eventDef.isAllDay()\n                    }), t.prototype.renderBgRanges.call(this, e)\n                }, e.prototype.renderFgSegs = function (t) {\n                    var e = this.rowStructs = this.renderSegRows(t);\n                    this.dayGrid.rowEls.each(function (t, n) {\n                        s(n).find(\".fc-content-skeleton > table\").append(e[t].tbodyEl)\n                    })\n                }, e.prototype.unrenderFgSegs = function () {\n                    for (var t, e = this.rowStructs || []; t = e.pop();) t.tbodyEl.remove();\n                    this.rowStructs = null\n                }, e.prototype.renderSegRows = function (t) {\n                    var e, n, r = [];\n                    for (e = this.groupSegRows(t), n = 0; n < e.length; n++) r.push(this.renderSegRow(n, e[n]));\n                    return r\n                }, e.prototype.renderSegRow = function (t, e) {\n                    function n(t) {\n                        for (; o < t;) d = (y[r - 1] || [])[o], d ? d.attr(\"rowspan\", parseInt(d.attr(\"rowspan\") || 1, 10) + 1) : (d = s(\"<td/>\"), a.append(d)), v[r][o] = d, y[r][o] = d, o++\n                    }\n                    var r, i, o, a, l, u, d, c = this.dayGrid.colCnt,\n                        p = this.buildSegLevels(e),\n                        h = Math.max(1, p.length),\n                        f = s(\"<tbody/>\"),\n                        g = [],\n                        v = [],\n                        y = [];\n                    for (r = 0; r < h; r++) {\n                        if (i = p[r], o = 0, a = s(\"<tr/>\"), g.push([]), v.push([]), y.push([]), i)\n                            for (l = 0; l < i.length; l++) {\n                                for (u = i[l], n(u.leftCol), d = s('<td class=\"fc-event-container\"/>').append(u.el), u.leftCol !== u.rightCol ? d.attr(\"colspan\", u.rightCol - u.leftCol + 1) : y[r][o] = d; o <= u.rightCol;) v[r][o] = d, g[r][o] = u, o++;\n                                a.append(d)\n                            }\n                        n(c), this.dayGrid.bookendCells(a), f.append(a)\n                    }\n                    return {\n                        row: t,\n                        tbodyEl: f,\n                        cellMatrix: v,\n                        segMatrix: g,\n                        segLevels: p,\n                        segs: e\n                    }\n                }, e.prototype.buildSegLevels = function (t) {\n                    var e, n, o, s = [];\n                    for (this.sortEventSegs(t), e = 0; e < t.length; e++) {\n                        for (n = t[e], o = 0; o < s.length && r(n, s[o]); o++);\n                        n.level = o, (s[o] || (s[o] = [])).push(n)\n                    }\n                    for (o = 0; o < s.length; o++) s[o].sort(i);\n                    return s\n                }, e.prototype.groupSegRows = function (t) {\n                    var e, n = [];\n                    for (e = 0; e < this.dayGrid.rowCnt; e++) n.push([]);\n                    for (e = 0; e < t.length; e++) n[t[e].row].push(t[e]);\n                    return n\n                }, e.prototype.computeEventTimeFormat = function () {\n                    return this.opt(\"extraSmallTimeFormat\")\n                }, e.prototype.computeDisplayEventEnd = function () {\n                    return 1 === this.dayGrid.colCnt\n                }, e.prototype.fgSegHtml = function (t, e) {\n                    var n, r, i = this.view,\n                        o = t.footprint.eventDef,\n                        s = t.footprint.componentFootprint.isAllDay,\n                        l = i.isEventDefDraggable(o),\n                        u = !e && s && t.isStart && i.isEventDefResizableFromStart(o),\n                        d = !e && s && t.isEnd && i.isEventDefResizableFromEnd(o),\n                        c = this.getSegClasses(t, l, u || d),\n                        p = a.cssToStr(this.getSkinCss(o)),\n                        h = \"\";\n                    return c.unshift(\"fc-day-grid-event\", \"fc-h-event\"), t.isStart && (n = this.getTimeText(t.footprint)) && (h = '<span class=\"fc-time\">' + a.htmlEscape(n) + \"</span>\"), r = '<span class=\"fc-title\">' + (a.htmlEscape(o.title || \"\") || \"&nbsp;\") + \"</span>\", '<a class=\"' + c.join(\" \") + '\"' + (o.url ? ' href=\"' + a.htmlEscape(o.url) + '\"' : \"\") + (p ? ' style=\"' + p + '\"' : \"\") + '><div class=\"fc-content\">' + (this.dayGrid.isRTL ? r + \" \" + h : h + \" \" + r) + \"</div>\" + (u ? '<div class=\"fc-resizer fc-start-resizer\" />' : \"\") + (d ? '<div class=\"fc-resizer fc-end-resizer\" />' : \"\") + \"</a>\"\n                }, e\n            }(l.default);\n        e.default = u\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(2),\n            i = n(3),\n            o = n(63),\n            s = function (t) {\n                function e() {\n                    return null !== t && t.apply(this, arguments) || this\n                }\n                return r.__extends(e, t), e.prototype.renderSegs = function (t, e) {\n                    var n, r = [];\n                    return n = this.eventRenderer.renderSegRows(t), this.component.rowEls.each(function (t, o) {\n                        var s, a, l = i(o),\n                            u = i('<div class=\"fc-helper-skeleton\"><table/></div>');\n                        e && e.row === t ? a = e.el.position().top : (s = l.find(\".fc-content-skeleton tbody\"), s.length || (s = l.find(\".fc-content-skeleton table\")), a = s.position().top), u.css(\"top\", a).find(\"table\").append(n[t].tbodyEl), l.append(u), r.push(u[0])\n                    }), i(r)\n                }, e\n            }(o.default);\n        e.default = s\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(2),\n            i = n(3),\n            o = n(62),\n            s = function (t) {\n                function e() {\n                    var e = null !== t && t.apply(this, arguments) || this;\n                    return e.fillSegTag = \"td\", e\n                }\n                return r.__extends(e, t), e.prototype.attachSegEls = function (t, e) {\n                    var n, r, i, o = [];\n                    for (n = 0; n < e.length; n++) r = e[n], i = this.renderFillRow(t, r), this.component.rowEls.eq(r.row).append(i), o.push(i[0]);\n                    return o\n                }, e.prototype.renderFillRow = function (t, e) {\n                    var n, r, o, s = this.component.colCnt,\n                        a = e.leftCol,\n                        l = e.rightCol + 1;\n                    return n = \"businessHours\" === t ? \"bgevent\" : t.toLowerCase(), r = i('<div class=\"fc-' + n + '-skeleton\"><table><tr/></table></div>'), o = r.find(\"tr\"), a > 0 && o.append(new Array(a + 1).join(\"<td/>\")), o.append(e.el.attr(\"colspan\", l - a)), l < s && o.append(new Array(s - l + 1).join(\"<td/>\")), this.component.bookendCells(o), r\n                }, e\n            }(o.default);\n        e.default = s\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(2),\n            i = n(0),\n            o = n(4),\n            s = n(67),\n            a = n(247),\n            l = function (t) {\n                function e() {\n                    return null !== t && t.apply(this, arguments) || this\n                }\n                return r.__extends(e, t), e.prototype.setGridHeight = function (t, e) {\n                    e && (t *= this.dayGrid.rowCnt / 6), o.distributeHeight(this.dayGrid.rowEls, t, !e)\n                }, e.prototype.isDateInOtherMonth = function (t, e) {\n                    return t.month() !== i.utc(e.currentUnzonedRange.startMs).month()\n                }, e\n            }(s.default);\n        e.default = l, l.prototype.dateProfileGeneratorClass = a.default\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(2),\n            i = n(68),\n            o = n(5),\n            s = function (t) {\n                function e() {\n                    return null !== t && t.apply(this, arguments) || this\n                }\n                return r.__extends(e, t), e.prototype.buildRenderRange = function (e, n, r) {\n                    var i, s = t.prototype.buildRenderRange.call(this, e, n, r),\n                        a = this.msToUtcMoment(s.startMs, r),\n                        l = this.msToUtcMoment(s.endMs, r);\n                    return this.opt(\"fixedWeekCount\") && (i = Math.ceil(l.diff(a, \"weeks\", !0)), l.add(6 - i, \"weeks\")), new o.default(a, l)\n                }, e\n            }(i.default);\n        e.default = s\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(2),\n            i = n(3),\n            o = n(4),\n            s = n(5),\n            a = n(43),\n            l = n(41),\n            u = n(249),\n            d = n(250),\n            c = function (t) {\n                function e(e, n) {\n                    var r = t.call(this, e, n) || this;\n                    return r.segSelector = \".fc-list-item\", r.scroller = new l.default({\n                        overflowX: \"hidden\",\n                        overflowY: \"auto\"\n                    }), r\n                }\n                return r.__extends(e, t), e.prototype.renderSkeleton = function () {\n                    this.el.addClass(\"fc-list-view \" + this.calendar.theme.getClass(\"listView\")), this.scroller.render(), this.scroller.el.appendTo(this.el), this.contentEl = this.scroller.scrollEl\n                }, e.prototype.unrenderSkeleton = function () {\n                    this.scroller.destroy()\n                }, e.prototype.updateSize = function (e, n, r) {\n                    t.prototype.updateSize.call(this, e, n, r), this.scroller.clear(), n || this.scroller.setHeight(this.computeScrollerHeight(e))\n                }, e.prototype.computeScrollerHeight = function (t) {\n                    return t - o.subtractInnerElHeight(this.el, this.scroller.el)\n                }, e.prototype.renderDates = function (t) {\n                    for (var e = this.calendar, n = e.msToUtcMoment(t.renderUnzonedRange.startMs, !0), r = e.msToUtcMoment(t.renderUnzonedRange.endMs, !0), i = [], o = []; n < r;) i.push(n.clone()), o.push(new s.default(n, n.clone().add(1, \"day\"))), n.add(1, \"day\");\n                    this.dayDates = i, this.dayRanges = o\n                }, e.prototype.componentFootprintToSegs = function (t) {\n                    var e, n, r, i = this.dayRanges,\n                        o = [];\n                    for (e = 0; e < i.length; e++)\n                        if ((n = t.unzonedRange.intersect(i[e])) && (r = {\n                            startMs: n.startMs,\n                            endMs: n.endMs,\n                            isStart: n.isStart,\n                            isEnd: n.isEnd,\n                            dayIndex: e\n                        }, o.push(r), !r.isEnd && !t.isAllDay && e + 1 < i.length && t.unzonedRange.endMs < i[e + 1].startMs + this.nextDayThreshold)) {\n                            r.endMs = t.unzonedRange.endMs, r.isEnd = !0;\n                            break\n                        } return o\n                }, e.prototype.renderEmptyMessage = function () {\n                    this.contentEl.html('<div class=\"fc-list-empty-wrap2\"><div class=\"fc-list-empty-wrap1\"><div class=\"fc-list-empty\">' + o.htmlEscape(this.opt(\"noEventsMessage\")) + \"</div></div></div>\")\n                }, e.prototype.renderSegList = function (t) {\n                    var e, n, r, o = this.groupSegsByDay(t),\n                        s = i('<table class=\"fc-list-table ' + this.calendar.theme.getClass(\"tableList\") + '\"><tbody/></table>'),\n                        a = s.find(\"tbody\");\n                    for (e = 0; e < o.length; e++)\n                        if (n = o[e])\n                            for (a.append(this.dayHeaderHtml(this.dayDates[e])), this.eventRenderer.sortEventSegs(n), r = 0; r < n.length; r++) a.append(n[r].el);\n                    this.contentEl.empty().append(s)\n                }, e.prototype.groupSegsByDay = function (t) {\n                    var e, n, r = [];\n                    for (e = 0; e < t.length; e++) n = t[e], (r[n.dayIndex] || (r[n.dayIndex] = [])).push(n);\n                    return r\n                }, e.prototype.dayHeaderHtml = function (t) {\n                    var e = this.opt(\"listDayFormat\"),\n                        n = this.opt(\"listDayAltFormat\");\n                    return '<tr class=\"fc-list-heading\" data-date=\"' + t.format(\"YYYY-MM-DD\") + '\"><td class=\"' + (this.calendar.theme.getClass(\"tableListHeading\") || this.calendar.theme.getClass(\"widgetHeader\")) + '\" colspan=\"3\">' + (e ? this.buildGotoAnchorHtml(t, {\n                        class: \"fc-list-heading-main\"\n                    }, o.htmlEscape(t.format(e))) : \"\") + (n ? this.buildGotoAnchorHtml(t, {\n                        class: \"fc-list-heading-alt\"\n                    }, o.htmlEscape(t.format(n))) : \"\") + \"</td></tr>\"\n                }, e\n            }(a.default);\n        e.default = c, c.prototype.eventRendererClass = u.default, c.prototype.eventPointingClass = d.default\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(2),\n            i = n(4),\n            o = n(44),\n            s = function (t) {\n                function e() {\n                    return null !== t && t.apply(this, arguments) || this\n                }\n                return r.__extends(e, t), e.prototype.renderFgSegs = function (t) {\n                    t.length ? this.component.renderSegList(t) : this.component.renderEmptyMessage()\n                }, e.prototype.fgSegHtml = function (t) {\n                    var e, n = this.view,\n                        r = n.calendar,\n                        o = r.theme,\n                        s = t.footprint,\n                        a = s.eventDef,\n                        l = s.componentFootprint,\n                        u = a.url,\n                        d = [\"fc-list-item\"].concat(this.getClasses(a)),\n                        c = this.getBgColor(a);\n                    return e = l.isAllDay ? n.getAllDayHtml() : n.isMultiDayRange(l.unzonedRange) ? t.isStart || t.isEnd ? i.htmlEscape(this._getTimeText(r.msToMoment(t.startMs), r.msToMoment(t.endMs), l.isAllDay)) : n.getAllDayHtml() : i.htmlEscape(this.getTimeText(s)), u && d.push(\"fc-has-url\"), '<tr class=\"' + d.join(\" \") + '\">' + (this.displayEventTime ? '<td class=\"fc-list-item-time ' + o.getClass(\"widgetContent\") + '\">' + (e || \"\") + \"</td>\" : \"\") + '<td class=\"fc-list-item-marker ' + o.getClass(\"widgetContent\") + '\"><span class=\"fc-event-dot\"' + (c ? ' style=\"background-color:' + c + '\"' : \"\") + '></span></td><td class=\"fc-list-item-title ' + o.getClass(\"widgetContent\") + '\"><a' + (u ? ' href=\"' + i.htmlEscape(u) + '\"' : \"\") + \">\" + i.htmlEscape(a.title || \"\") + \"</a></td></tr>\"\n                }, e.prototype.computeEventTimeFormat = function () {\n                    return this.opt(\"mediumTimeFormat\")\n                }, e\n            }(o.default);\n        e.default = s\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(2),\n            i = n(3),\n            o = n(64),\n            s = function (t) {\n                function e() {\n                    return null !== t && t.apply(this, arguments) || this\n                }\n                return r.__extends(e, t), e.prototype.handleClick = function (e, n) {\n                    var r;\n                    t.prototype.handleClick.call(this, e, n), i(n.target).closest(\"a[href]\").length || (r = e.footprint.eventDef.url) && !n.isDefaultPrevented() && (window.location.href = r)\n                }, e\n            }(o.default);\n        e.default = s\n    }, , , , , , function (t, e, n) {\n        var r = n(3),\n            i = n(18),\n            o = n(4),\n            s = n(232);\n        n(11), n(49), n(260), n(261), n(264), n(265), n(266), n(267), r.fullCalendar = i, r.fn.fullCalendar = function (t) {\n            var e = Array.prototype.slice.call(arguments, 1),\n                n = this;\n            return this.each(function (i, a) {\n                var l, u = r(a),\n                    d = u.data(\"fullCalendar\");\n                \"string\" == typeof t ? \"getCalendar\" === t ? i || (n = d) : \"destroy\" === t ? d && (d.destroy(), u.removeData(\"fullCalendar\")) : d ? r.isFunction(d[t]) ? (l = d[t].apply(d, e), i || (n = l), \"destroy\" === t && u.removeData(\"fullCalendar\")) : o.warn(\"'\" + t + \"' is an unknown FullCalendar method.\") : o.warn(\"Attempting to call a FullCalendar method on an element with no calendar.\") : d || (d = new s.default(u, t), u.data(\"fullCalendar\", d), d.render())\n            }), n\n        }, t.exports = i\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(3),\n            i = n(4),\n            o = function () {\n                function t(t, e) {\n                    this.el = null, this.viewsWithButtons = [], this.calendar = t, this.toolbarOptions = e\n                }\n                return t.prototype.setToolbarOptions = function (t) {\n                    this.toolbarOptions = t\n                }, t.prototype.render = function () {\n                    var t = this.toolbarOptions.layout,\n                        e = this.el;\n                    t ? (e ? e.empty() : e = this.el = r(\"<div class='fc-toolbar \" + this.toolbarOptions.extraClasses + \"'/>\"), e.append(this.renderSection(\"left\")).append(this.renderSection(\"right\")).append(this.renderSection(\"center\")).append('<div class=\"fc-clear\"/>')) : this.removeElement()\n                }, t.prototype.removeElement = function () {\n                    this.el && (this.el.remove(), this.el = null)\n                }, t.prototype.renderSection = function (t) {\n                    var e = this,\n                        n = this.calendar,\n                        o = n.theme,\n                        s = n.optionsManager,\n                        a = n.viewSpecManager,\n                        l = r('<div class=\"fc-' + t + '\"/>'),\n                        u = this.toolbarOptions.layout[t],\n                        d = s.get(\"customButtons\") || {},\n                        c = s.overrides.buttonText || {},\n                        p = s.get(\"buttonText\") || {};\n                    return u && r.each(u.split(\" \"), function (t, s) {\n                        var u, h = r(),\n                            f = !0;\n                        r.each(s.split(\",\"), function (t, s) {\n                            var l, u, g, v, y, m, b, w, D;\n                            \"title\" === s ? (h = h.add(r(\"<h2>&nbsp;</h2>\")), f = !1) : ((l = d[s]) ? (g = function (t) {\n                                l.click && l.click.call(w[0], t)\n                            }, (v = o.getCustomButtonIconClass(l)) || (v = o.getIconClass(s)) || (y = l.text)) : (u = a.getViewSpec(s)) ? (e.viewsWithButtons.push(s), g = function () {\n                                n.changeView(s)\n                            }, (y = u.buttonTextOverride) || (v = o.getIconClass(s)) || (y = u.buttonTextDefault)) : n[s] && (g = function () {\n                                n[s]()\n                            }, (y = c[s]) || (v = o.getIconClass(s)) || (y = p[s])), g && (b = [\"fc-\" + s + \"-button\", o.getClass(\"button\"), o.getClass(\"stateDefault\")], y ? (m = i.htmlEscape(y), D = \"\") : v && (m = \"<span class='\" + v + \"'></span>\", D = ' aria-label=\"' + s + '\"'), w = r('<button type=\"button\" class=\"' + b.join(\" \") + '\"' + D + \">\" + m + \"</button>\").click(function (t) {\n                                w.hasClass(o.getClass(\"stateDisabled\")) || (g(t), (w.hasClass(o.getClass(\"stateActive\")) || w.hasClass(o.getClass(\"stateDisabled\"))) && w.removeClass(o.getClass(\"stateHover\")))\n                            }).mousedown(function () {\n                                w.not(\".\" + o.getClass(\"stateActive\")).not(\".\" + o.getClass(\"stateDisabled\")).addClass(o.getClass(\"stateDown\"))\n                            }).mouseup(function () {\n                                w.removeClass(o.getClass(\"stateDown\"))\n                            }).hover(function () {\n                                w.not(\".\" + o.getClass(\"stateActive\")).not(\".\" + o.getClass(\"stateDisabled\")).addClass(o.getClass(\"stateHover\"))\n                            }, function () {\n                                w.removeClass(o.getClass(\"stateHover\")).removeClass(o.getClass(\"stateDown\"))\n                            }), h = h.add(w)))\n                        }), f && h.first().addClass(o.getClass(\"cornerLeft\")).end().last().addClass(o.getClass(\"cornerRight\")).end(), h.length > 1 ? (u = r(\"<div/>\"), f && u.addClass(o.getClass(\"buttonGroup\")), u.append(h), l.append(u)) : l.append(h)\n                    }), l\n                }, t.prototype.updateTitle = function (t) {\n                    this.el && this.el.find(\"h2\").text(t)\n                }, t.prototype.activateButton = function (t) {\n                    this.el && this.el.find(\".fc-\" + t + \"-button\").addClass(this.calendar.theme.getClass(\"stateActive\"))\n                }, t.prototype.deactivateButton = function (t) {\n                    this.el && this.el.find(\".fc-\" + t + \"-button\").removeClass(this.calendar.theme.getClass(\"stateActive\"))\n                }, t.prototype.disableButton = function (t) {\n                    this.el && this.el.find(\".fc-\" + t + \"-button\").prop(\"disabled\", !0).addClass(this.calendar.theme.getClass(\"stateDisabled\"))\n                }, t.prototype.enableButton = function (t) {\n                    this.el && this.el.find(\".fc-\" + t + \"-button\").prop(\"disabled\", !1).removeClass(this.calendar.theme.getClass(\"stateDisabled\"))\n                }, t.prototype.getViewsWithButtons = function () {\n                    return this.viewsWithButtons\n                }, t\n            }();\n        e.default = o\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(2),\n            i = n(3),\n            o = n(4),\n            s = n(33),\n            a = n(32),\n            l = n(51),\n            u = function (t) {\n                function e(e, n) {\n                    var r = t.call(this) || this;\n                    return r._calendar = e, r.overrides = i.extend({}, n), r.dynamicOverrides = {}, r.compute(), r\n                }\n                return r.__extends(e, t), e.prototype.add = function (t) {\n                    var e, n = 0;\n                    this.recordOverrides(t);\n                    for (e in t) n++;\n                    if (1 === n) {\n                        if (\"height\" === e || \"contentHeight\" === e || \"aspectRatio\" === e) return void this._calendar.updateViewSize(!0);\n                        if (\"defaultDate\" === e) return;\n                        if (\"businessHours\" === e) return;\n                        if (/^(event|select)(Overlap|Constraint|Allow)$/.test(e)) return;\n                        if (\"timezone\" === e) return void this._calendar.view.flash(\"initialEvents\")\n                    }\n                    this._calendar.renderHeader(), this._calendar.renderFooter(), this._calendar.viewsByType = {}, this._calendar.reinitView()\n                }, e.prototype.compute = function () {\n                    var t, e, n, r, i;\n                    t = o.firstDefined(this.dynamicOverrides.locale, this.overrides.locale), e = a.localeOptionHash[t], e || (t = s.globalDefaults.locale, e = a.localeOptionHash[t] || {}), n = o.firstDefined(this.dynamicOverrides.isRTL, this.overrides.isRTL, e.isRTL, s.globalDefaults.isRTL), r = n ? s.rtlDefaults : {}, this.dirDefaults = r, this.localeDefaults = e, i = s.mergeOptions([s.globalDefaults, r, e, this.overrides, this.dynamicOverrides]), a.populateInstanceComputableOptions(i), this.reset(i)\n                }, e.prototype.recordOverrides = function (t) {\n                    var e;\n                    for (e in t) this.dynamicOverrides[e] = t[e];\n                    this._calendar.viewSpecManager.clearCache(), this.compute()\n                }, e\n            }(l.default);\n        e.default = u\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(0),\n            i = n(3),\n            o = n(24),\n            s = n(4),\n            a = n(33),\n            l = n(32),\n            u = function () {\n                function t(t, e) {\n                    this.optionsManager = t, this._calendar = e, this.clearCache()\n                }\n                return t.prototype.clearCache = function () {\n                    this.viewSpecCache = {}\n                }, t.prototype.getViewSpec = function (t) {\n                    var e = this.viewSpecCache;\n                    return e[t] || (e[t] = this.buildViewSpec(t))\n                }, t.prototype.getUnitViewSpec = function (t) {\n                    var e, n, r;\n                    if (-1 !== i.inArray(t, s.unitsDesc))\n                        for (e = this._calendar.header.getViewsWithButtons(), i.each(o.viewHash, function (t) {\n                            e.push(t)\n                        }), n = 0; n < e.length; n++)\n                            if ((r = this.getViewSpec(e[n])) && r.singleUnit === t) return r\n                }, t.prototype.buildViewSpec = function (t) {\n                    for (var e, n, i, l, u, d = this.optionsManager.overrides.views || {}, c = [], p = [], h = [], f = t; f;) e = o.viewHash[f], n = d[f], f = null, \"function\" == typeof e && (e = {\n                        class: e\n                    }), e && (c.unshift(e), p.unshift(e.defaults || {}), i = i || e.duration, f = f || e.type), n && (h.unshift(n), i = i || n.duration, f = f || n.type);\n                    return e = s.mergeProps(c), e.type = t, !!e.class && (i = i || this.optionsManager.dynamicOverrides.duration || this.optionsManager.overrides.duration, i && (l = r.duration(i), l.valueOf() && (u = s.computeDurationGreatestUnit(l, i), e.duration = l, e.durationUnit = u, 1 === l.as(u) && (e.singleUnit = u, h.unshift(d[u] || {})))), e.defaults = a.mergeOptions(p), e.overrides = a.mergeOptions(h), this.buildViewSpecOptions(e), this.buildViewSpecButtonText(e, t), e)\n                }, t.prototype.buildViewSpecOptions = function (t) {\n                    var e = this.optionsManager;\n                    t.options = a.mergeOptions([a.globalDefaults, t.defaults, e.dirDefaults, e.localeDefaults, e.overrides, t.overrides, e.dynamicOverrides]), l.populateInstanceComputableOptions(t.options)\n                }, t.prototype.buildViewSpecButtonText = function (t, e) {\n                    function n(n) {\n                        var r = n.buttonText || {};\n                        return r[e] || (t.buttonTextKey ? r[t.buttonTextKey] : null) || (t.singleUnit ? r[t.singleUnit] : null)\n                    }\n                    var r = this.optionsManager;\n                    t.buttonTextOverride = n(r.dynamicOverrides) || n(r.overrides) || t.overrides.buttonText, t.buttonTextDefault = n(r.localeDefaults) || n(r.dirDefaults) || t.defaults.buttonText || n(a.globalDefaults) || (t.duration ? this._calendar.humanizeDuration(t.duration) : null) || e\n                }, t\n            }();\n        e.default = u\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(38),\n            i = n(56),\n            o = n(223),\n            s = n(224);\n        r.default.registerClass(i.default), r.default.registerClass(o.default), r.default.registerClass(s.default)\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(57),\n            i = n(221),\n            o = n(222),\n            s = n(262),\n            a = n(263);\n        r.defineThemeSystem(\"standard\", i.default), r.defineThemeSystem(\"jquery-ui\", o.default), r.defineThemeSystem(\"bootstrap3\", s.default), r.defineThemeSystem(\"bootstrap4\", a.default)\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(2),\n            i = n(22),\n            o = function (t) {\n                function e() {\n                    return null !== t && t.apply(this, arguments) || this\n                }\n                return r.__extends(e, t), e\n            }(i.default);\n        e.default = o, o.prototype.classes = {\n            widget: \"fc-bootstrap3\",\n            tableGrid: \"table-bordered\",\n            tableList: \"table\",\n            tableListHeading: \"active\",\n            buttonGroup: \"btn-group\",\n            button: \"btn btn-default\",\n            stateActive: \"active\",\n            stateDisabled: \"disabled\",\n            today: \"alert alert-info\",\n            popover: \"panel panel-default\",\n            popoverHeader: \"panel-heading\",\n            popoverContent: \"panel-body\",\n            headerRow: \"panel-default\",\n            dayRow: \"panel-default\",\n            listView: \"panel panel-default\"\n        }, o.prototype.baseIconClass = \"glyphicon\", o.prototype.iconClasses = {\n            close: \"glyphicon-remove\",\n            prev: \"glyphicon-chevron-left\",\n            next: \"glyphicon-chevron-right\",\n            prevYear: \"glyphicon-backward\",\n            nextYear: \"glyphicon-forward\"\n        }, o.prototype.iconOverrideOption = \"bootstrapGlyphicons\", o.prototype.iconOverrideCustomButtonOption = \"bootstrapGlyphicon\", o.prototype.iconOverridePrefix = \"glyphicon-\"\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(2),\n            i = n(22),\n            o = function (t) {\n                function e() {\n                    return null !== t && t.apply(this, arguments) || this\n                }\n                return r.__extends(e, t), e\n            }(i.default);\n        e.default = o, o.prototype.classes = {\n            widget: \"fc-bootstrap4\",\n            tableGrid: \"table-bordered\",\n            tableList: \"table\",\n            tableListHeading: \"table-active\",\n            buttonGroup: \"btn-group\",\n            button: \"btn btn-primary\",\n            stateActive: \"active\",\n            stateDisabled: \"disabled\",\n            today: \"alert alert-info\",\n            popover: \"card card-primary\",\n            popoverHeader: \"card-header\",\n            popoverContent: \"card-body\",\n            headerRow: \"table-bordered\",\n            dayRow: \"table-bordered\",\n            listView: \"card card-primary\"\n        }, o.prototype.baseIconClass = \"fa\", o.prototype.iconClasses = {\n            close: \"fa-times\",\n            prev: \"fa-chevron-left\",\n            next: \"fa-chevron-right\",\n            prevYear: \"fa-angle-double-left\",\n            nextYear: \"fa-angle-double-right\"\n        }, o.prototype.iconOverrideOption = \"bootstrapFontAwesome\", o.prototype.iconOverrideCustomButtonOption = \"bootstrapFontAwesome\", o.prototype.iconOverridePrefix = \"fa-\"\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(24),\n            i = n(67),\n            o = n(246);\n        r.defineView(\"basic\", {\n            class: i.default\n        }), r.defineView(\"basicDay\", {\n            type: \"basic\",\n            duration: {\n                days: 1\n            }\n        }), r.defineView(\"basicWeek\", {\n            type: \"basic\",\n            duration: {\n                weeks: 1\n            }\n        }), r.defineView(\"month\", {\n            class: o.default,\n            duration: {\n                months: 1\n            },\n            defaults: {\n                fixedWeekCount: !0\n            }\n        })\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(24),\n            i = n(238);\n        r.defineView(\"agenda\", {\n            class: i.default,\n            defaults: {\n                allDaySlot: !0,\n                slotDuration: \"00:30:00\",\n                slotEventOverlap: !0\n            }\n        }), r.defineView(\"agendaDay\", {\n            type: \"agenda\",\n            duration: {\n                days: 1\n            }\n        }), r.defineView(\"agendaWeek\", {\n            type: \"agenda\",\n            duration: {\n                weeks: 1\n            }\n        })\n    }, function (t, e, n) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        });\n        var r = n(24),\n            i = n(248);\n        r.defineView(\"list\", {\n            class: i.default,\n            buttonTextKey: \"list\",\n            defaults: {\n                buttonText: \"list\",\n                listDayFormat: \"LL\",\n                noEventsMessage: \"No events to display\"\n            }\n        }), r.defineView(\"listDay\", {\n            type: \"list\",\n            duration: {\n                days: 1\n            },\n            defaults: {\n                listDayFormat: \"dddd\"\n            }\n        }), r.defineView(\"listWeek\", {\n            type: \"list\",\n            duration: {\n                weeks: 1\n            },\n            defaults: {\n                listDayFormat: \"dddd\",\n                listDayAltFormat: \"LL\"\n            }\n        }), r.defineView(\"listMonth\", {\n            type: \"list\",\n            duration: {\n                month: 1\n            },\n            defaults: {\n                listDayAltFormat: \"dddd\"\n            }\n        }), r.defineView(\"listYear\", {\n            type: \"list\",\n            duration: {\n                year: 1\n            },\n            defaults: {\n                listDayAltFormat: \"dddd\"\n            }\n        })\n    }, function (t, e) {\n        Object.defineProperty(e, \"__esModule\", {\n            value: !0\n        })\n    }])\n});", "! function(e, t) {\n    if (\"object\" == typeof exports && \"object\" == typeof module) module.exports = t(require(\"fullcalendar\"), require(\"jquery\"), require(\"moment\"));\n    else if (\"function\" == typeof define && define.amd) define([\"fullcalendar\", \"jquery\", \"moment\"], t);\n    else {\n        var r = \"object\" == typeof exports ? t(require(\"fullcalendar\"), require(\"jquery\"), require(\"moment\")) : t(e.FullCalendar, e.jQuery, e.moment);\n        for (var o in r)(\"object\" == typeof exports ? exports : e)[o] = r[o]\n    }\n}(\"undefined\" != typeof self ? self : this, function(e, t, r) {\n    return function(e) {\n        function t(o) {\n            if (r[o]) return r[o].exports;\n            var n = r[o] = {\n                i: o,\n                l: !1,\n                exports: {}\n            };\n            return e[o].call(n.exports, n, n.exports, t), n.l = !0, n.exports\n        }\n        var r = {};\n        return t.m = e, t.c = r, t.d = function(e, r, o) {\n            t.o(e, r) || Object.defineProperty(e, r, {\n                configurable: !1,\n                enumerable: !0,\n                get: o\n            })\n        }, t.n = function(e) {\n            var r = e && e.__esModule ? function() {\n                return e[\"default\"]\n            } : function() {\n                return e\n            };\n            return t.d(r, \"a\", r), r\n        }, t.o = function(e, t) {\n            return Object.prototype.hasOwnProperty.call(e, t)\n        }, t.p = \"\", t(t.s = 36)\n    }([function(t, r) {\n        t.exports = e\n    }, function(e, t) {\n        var r = Object.setPrototypeOf || {\n            __proto__: []\n        }\n        instanceof Array && function(e, t) {\n            e.__proto__ = t\n        } || function(e, t) {\n            for (var r in t) t.hasOwnProperty(r) && (e[r] = t[r])\n        };\n        t.__extends = function(e, t) {\n            function o() {\n                this.constructor = e\n            }\n            r(e, t), e.prototype = null === t ? Object.create(t) : (o.prototype = t.prototype, new o)\n        }\n    }, function(e, r) {\n        e.exports = t\n    }, , , , function(e, t, r) {\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        });\n        var o = r(1),\n            n = r(0),\n            i = function(e) {\n                function t(t, r, o) {\n                    var n = e.call(this, t, r) || this;\n                    return n.resourceId = o, n\n                }\n                return o.__extends(t, e), t.prototype.toLegacy = function(t) {\n                    var r = e.prototype.toLegacy.call(this, t);\n                    return r.resourceId = this.resourceId, r\n                }, t\n            }(n.ComponentFootprint);\n        t[\"default\"] = i\n    }, , , function(e, t, r) {\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        });\n        var o = r(1),\n            n = r(2),\n            i = r(0),\n            s = function(e) {\n                function t() {\n                    return null !== e && e.apply(this, arguments) || this\n                }\n                return o.__extends(t, e), t.mixInto = function(e) {\n                    var t = this;\n                    i.Mixin.mixInto.call(this, e), [\"bindBaseRenderHandlers\", \"queryScroll\", \"applyScroll\", \"triggerDayClick\", \"triggerSelect\", \"triggerExternalDrop\", \"handleResourceAdd\", \"handleResourceRemove\"].forEach(function(r) {\n                        e.prototype[r] = t.prototype[r]\n                    })\n                }, t.prototype.initResourceView = function() {\n                    var e = this,\n                        t = [\"hasResources\"];\n                    this.canHandleSpecificResources || t.push(\"displayingDates\"), this.watch(\"displayingResources\", t, function() {\n                        e.requestResourcesRender(e.get(\"currentResources\"))\n                    }, function() {\n                        e.requestResourcesUnrender()\n                    }), this.watch(\"displayingBusinessHours\", [\"businessHourGenerator\", \"displayingResources\", \"displayingDates\"], function(t) {\n                        e.requestBusinessHoursRender(t.businessHourGenerator)\n                    }, function() {\n                        e.requestBusinessHoursUnrender()\n                    }), this.watch(\"displayingEvents\", [\"displayingResources\", \"hasEvents\"], function() {\n                        e.requestEventsRender(e.get(\"currentEvents\"))\n                    }, function() {\n                        e.requestEventsUnrender()\n                    })\n                }, t.prototype.bindBaseRenderHandlers = function() {\n                    var e = !1,\n                        t = !1;\n                    this.on(\"resourcesRendered\", function() {\n                        e || (e = !0, t && this.whenSizeUpdated(this.triggerViewRender))\n                    }), this.on(\"datesRendered\", function() {\n                        t || (t = !0, e && this.whenSizeUpdated(this.triggerViewRender))\n                    }), this.on(\"before:resourcesUnrendered\", function() {\n                        e && (e = !1)\n                    }), this.on(\"before:datesUnrendered\", function() {\n                        t && (t = !1, this.triggerViewDestroy())\n                    })\n                }, t.prototype.queryScroll = function() {\n                    var e = i.View.prototype.queryScroll.apply(this, arguments);\n                    return this.isResourcesRendered && n.extend(e, this.queryResourceScroll()), e\n                }, t.prototype.applyScroll = function(e) {\n                    i.View.prototype.applyScroll.apply(this, arguments), this.isResourcesRendered && this.applyResourceScroll(e)\n                }, t.prototype.queryResourceScroll = function() {\n                    return {}\n                }, t.prototype.applyResourceScroll = function() {}, t.prototype.getResourceText = function(e) {\n                    return this.getResourceTextFunc()(e)\n                }, t.prototype.getResourceTextFunc = function() {\n                    if (this.resourceTextFunc) return this.resourceTextFunc;\n                    var e = this.opt(\"resourceText\");\n                    return \"function\" != typeof e && (e = function(e) {\n                        return e.title || e.id\n                    }), this.resourceTextFunc = e, e\n                }, t.prototype.handleResourceAdd = function(e) {\n                    this.requestResourceRender(e)\n                }, t.prototype.handleResourceRemove = function(e) {\n                    this.requestResourceUnrender(e)\n                }, t.prototype.requestResourcesRender = function(e) {\n                    var t = this;\n                    this.requestRender(function() {\n                        t.executeResourcesRender(e)\n                    }, \"resource\", \"init\")\n                }, t.prototype.requestResourcesUnrender = function() {\n                    var e = this;\n                    this.requestRender(function() {\n                        e.executeResourcesUnrender()\n                    }, \"resource\", \"destroy\")\n                }, t.prototype.requestResourceRender = function(e) {\n                    var t = this;\n                    this.requestRender(function() {\n                        t.executeResourceRender(e)\n                    }, \"resource\", \"add\")\n                }, t.prototype.requestResourceUnrender = function(e) {\n                    var t = this;\n                    this.requestRender(function() {\n                        t.executeResourceUnrender(e)\n                    }, \"resource\", \"remove\")\n                }, t.prototype.executeResourcesRender = function(e) {\n                    this.renderResources(e), this.isResourcesRendered = !0, this.trigger(\"resourcesRendered\")\n                }, t.prototype.executeResourcesUnrender = function() {\n                    this.trigger(\"before:resourcesUnrendered\"), this.unrenderResources(), this.isResourcesRendered = !1\n                }, t.prototype.executeResourceRender = function(e) {\n                    this.renderResource(e)\n                }, t.prototype.executeResourceUnrender = function(e) {\n                    this.unrenderResource(e)\n                }, t.prototype.triggerDayClick = function(e, t, r) {\n                    var o = this.calendar.footprintToDateProfile(e);\n                    this.publiclyTrigger(\"dayClick\", {\n                        context: t,\n                        args: [o.start, r, this, e.resourceId ? this.calendar.resourceManager.getResourceById(e.resourceId) : null]\n                    })\n                }, t.prototype.triggerSelect = function(e, t) {\n                    var r = this.calendar.footprintToDateProfile(e);\n                    this.publiclyTrigger(\"select\", {\n                        context: this,\n                        args: [r.start, r.end, t, this, e.resourceId ? this.calendar.resourceManager.getResourceById(e.resourceId) : null]\n                    })\n                }, t.prototype.triggerExternalDrop = function(e, t, r, o, n) {\n                    this.publiclyTrigger(\"drop\", {\n                        context: r[0],\n                        args: [e.dateProfile.start.clone(), o, n, e.getResourceIds()[0], this]\n                    }), t && this.publiclyTrigger(\"eventReceive\", {\n                        context: this,\n                        args: [e.buildInstance().toLegacy(), this]\n                    })\n                }, t\n            }(i.Mixin);\n        t[\"default\"] = s, s.prototype.isResourcesRendered = !1\n    }, , , , function(e, t, r) {\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        });\n        var o = r(1),\n            n = r(2),\n            i = r(0),\n            s = r(21),\n            a = r(6),\n            l = function(e) {\n                function t(t) {\n                    var r = e.call(this, t) || this;\n                    return r.isResourceFootprintsEnabled = !0, r\n                }\n                return o.__extends(t, e), t.prototype.renderDates = function(e) {\n                    this.dateProfile = e\n                }, t.prototype.renderResources = function(e) {\n                    this.registerResources(e), this.renderGrid(), this.headContainerEl && this.processHeadResourceEls(this.headContainerEl)\n                }, t.prototype.getHitFootprint = function(t) {\n                    var r = e.prototype.getHitFootprint.call(this, t);\n                    return new a[\"default\"](r.unzonedRange, r.isAllDay, this.getColResource(t.col).id)\n                }, t.prototype.componentFootprintToSegs = function(e) {\n                    for (var t = this.resourceCnt, r = this.datesAboveResources ? this.sliceRangeByDay(e.unzonedRange) : this.sliceRangeByRow(e.unzonedRange), o = [], i = 0, s = r; i < s.length; i++)\n                        for (var l = s[i], c = 0; c < t; c++) {\n                            var u = this.flattenedResources[c];\n                            if (!(e instanceof a[\"default\"]) || e.resourceId === u.id) {\n                                var d = n.extend({}, l);\n                                d.resource = u, this.isRTL ? (d.leftCol = this.indicesToCol(c, l.lastRowDayIndex), d.rightCol = this.indicesToCol(c, l.firstRowDayIndex)) : (d.leftCol = this.indicesToCol(c, l.firstRowDayIndex), d.rightCol = this.indicesToCol(c, l.lastRowDayIndex)), o.push(d)\n                            }\n                        }\n                    return o\n                }, t\n            }(i.DayGrid);\n        t[\"default\"] = l, s[\"default\"].mixInto(l)\n    }, function(e, t, r) {\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        });\n        var o = r(1),\n            n = r(2),\n            i = r(15),\n            s = r(0),\n            a = r(24),\n            l = r(25),\n            c = r(16),\n            u = r(26),\n            d = r(17),\n            h = r(28),\n            p = r(29),\n            f = r(40),\n            v = r(41),\n            g = r(42),\n            y = function(e) {\n                function t(t, r) {\n                    var o = e.call(this, t, r) || this;\n                    return o.emphasizeWeeks = !1, o.isTimeBodyScrolled = !1, o.slotWidth = o.opt(\"slotWidth\"), o\n                }\n                return o.__extends(t, e), t.prototype.normalizeComponentFootprint = function(e) {\n                    var t, r, o = e.unzonedRange;\n                    if (this.isTimeScale) r = this.normalizeGridDate(o.getStart()), t = this.normalizeGridDate(o.getEnd());\n                    else {\n                        var n = this.computeDayRange(o);\n                        this.largeUnit ? (r = n.start.clone().startOf(this.largeUnit), t = n.end.clone().startOf(this.largeUnit), t.isSame(n.end) && t.isAfter(r) || t.add(this.slotDuration)) : (r = n.start, t = n.end)\n                    }\n                    return new s.ComponentFootprint(new s.UnzonedRange(r, t), (!this.isTimeScale))\n                }, t.prototype.componentFootprintToSegs = function(e) {\n                    var t = e.unzonedRange.getStart(),\n                        r = e.unzonedRange.getEnd(),\n                        o = this.normalizeComponentFootprint(e),\n                        n = [];\n                    if (this.computeDateSnapCoverage(t) < this.computeDateSnapCoverage(r)) {\n                        var i = o.unzonedRange.intersect(this.normalizedUnzonedRange);\n                        if (i) {\n                            var s = i.getStart(),\n                                a = i.getEnd();\n                            n.push({\n                                start: s,\n                                end: a,\n                                isStart: i.isStart && this.isValidDate(s),\n                                isEnd: i.isEnd && this.isValidDate(a.clone().subtract(1))\n                            })\n                        }\n                    }\n                    return n\n                }, t.prototype.normalizeGridDate = function(e) {\n                    var t = e.clone();\n                    return this.calendar.localizeMoment(t), this.isTimeScale ? t.hasTime() || t.time(0) : (t = t.clone().stripTime(), this.largeUnit && t.startOf(this.largeUnit)), t\n                }, t.prototype.isValidDate = function(e) {\n                    if (this.isHiddenDay(e)) return !1;\n                    if (this.isTimeScale) {\n                        var t = e.time() - this.dateProfile.minTime;\n                        return t = (t % 864e5 + 864e5) % 864e5, t < this.timeWindowMs\n                    }\n                    return !0\n                }, t.prototype.updateGridDates = function() {\n                    for (var e = -1, t = 0, r = [], o = [], n = this.normalizedUnzonedStart.clone(); n < this.normalizedUnzonedEnd;) this.isValidDate(n) ? (e++, r.push(e), o.push(t)) : r.push(e + .5), n.add(this.snapDuration), t++;\n                    this.snapDiffToIndex = r, this.snapIndexToDiff = o, this.snapCnt = e + 1, this.slotCnt = this.snapCnt / this.snapsPerSlot\n                }, t.prototype.renderSkeleton = function() {\n                    this.el.addClass(\"fc-timeline\"), this.opt(\"eventOverlap\") === !1 && this.el.addClass(\"fc-no-overlap\"), this.el.html(this.renderSkeletonHtml()), this.timeHeadEl = this.el.find(\"thead .fc-time-area\"), this.timeBodyEl = this.el.find(\"tbody .fc-time-area\"), this.timeHeadScroller = new a[\"default\"]({\n                        overflowX: \"clipped-scroll\",\n                        overflowY: \"hidden\"\n                    }), this.timeHeadScroller.canvas = new l[\"default\"], this.timeHeadScroller.render(), this.timeHeadScroller.el.appendTo(this.timeHeadEl), this.timeBodyScroller = new a[\"default\"], this.timeBodyScroller.canvas = new l[\"default\"], this.timeBodyScroller.render(), this.timeBodyScroller.el.appendTo(this.timeBodyEl), this.isTimeBodyScrolled = !1, this.timeBodyScroller.on(\"scroll\", s.proxy(this, \"handleTimeBodyScrolled\")), this.slatContainerEl = n('<div class=\"fc-slats\"/>').appendTo(this.timeBodyScroller.canvas.bgEl), this.segContainerEl = n('<div class=\"fc-event-container\"/>').appendTo(this.timeBodyScroller.canvas.contentEl), this.bgSegContainerEl = this.timeBodyScroller.canvas.bgEl, this.timeBodyBoundCache = new s.CoordCache({\n                        els: this.timeBodyScroller.canvas.el,\n                        isHorizontal: !0,\n                        isVertical: !0\n                    }), this.timeScrollJoiner = new c[\"default\"](\"horizontal\", [this.timeHeadScroller, this.timeBodyScroller]), this.headDateFollower = new u[\"default\"](this.timeHeadScroller, (!0)), this.eventTitleFollower = new u[\"default\"](this.timeBodyScroller), this.eventTitleFollower.minTravel = 50, this.isRTL ? this.eventTitleFollower.containOnNaturalRight = !0 : this.eventTitleFollower.containOnNaturalLeft = !0, e.prototype.renderSkeleton.call(this)\n                }, t.prototype.renderSkeletonHtml = function() {\n                    var e = this.calendar.theme;\n                    return '<table class=\"' + e.getClass(\"tableGrid\") + '\"> <thead class=\"fc-head\"> <tr> <td class=\"fc-time-area ' + e.getClass(\"widgetHeader\") + '\"></td> </tr> </thead> <tbody class=\"fc-body\"> <tr> <td class=\"fc-time-area ' + e.getClass(\"widgetContent\") + '\"></td> </tr> </tbody> </table>'\n                }, t.prototype.unrenderSkeleton = function() {\n                    this.handleTimeBodyScrolled(0), e.prototype.unrenderSkeleton.call(this)\n                }, t.prototype.renderDates = function(e) {\n                    g.initScaleProps(this), this.timeWindowMs = e.maxTime - e.minTime, this.normalizedUnzonedStart = this.normalizeGridDate(e.renderUnzonedRange.getStart()), this.normalizedUnzonedEnd = this.normalizeGridDate(e.renderUnzonedRange.getEnd()), this.isTimeScale && (this.normalizedUnzonedStart.add(e.minTime), this.normalizedUnzonedEnd.subtract(1, \"day\").add(e.maxTime)), this.normalizedUnzonedRange = new s.UnzonedRange(this.normalizedUnzonedStart, this.normalizedUnzonedEnd);\n                    var t = [],\n                        r = this.normalizedUnzonedStart.clone();\n                    for (this.calendar.localizeMoment(r); r < this.normalizedUnzonedEnd;) this.isValidDate(r) && t.push(r.clone()), r.add(this.slotDuration);\n                    this.slotDates = t, this.updateGridDates();\n                    var o = this.renderSlatHtml();\n                    this.timeHeadScroller.canvas.contentEl.html(o.headHtml), this.timeHeadColEls = this.timeHeadScroller.canvas.contentEl.find(\"col\"), this.slatContainerEl.html(o.bodyHtml), this.slatColEls = this.slatContainerEl.find(\"col\"), this.slatEls = this.slatContainerEl.find(\"td\"), this.slatCoordCache = new s.CoordCache({\n                        els: this.slatEls,\n                        isHorizontal: !0\n                    }), this.slatInnerCoordCache = new s.CoordCache({\n                        els: this.slatEls.find(\"> div\"),\n                        isHorizontal: !0,\n                        offsetParent: this.timeBodyScroller.canvas.el\n                    });\n                    for (var n = 0; n < this.slotDates.length; n++) r = this.slotDates[n], this.publiclyTrigger(\"dayRender\", {\n                        context: this,\n                        args: [r, this.slatEls.eq(n), this]\n                    });\n                    this.headDateFollower && this.headDateFollower.setSpriteEls(this.timeHeadEl.find(\"tr:not(:last-child) .fc-cell-text\"))\n                }, t.prototype.unrenderDates = function() {\n                    this.headDateFollower && this.headDateFollower.clearSprites(), this.timeHeadScroller.canvas.contentEl.empty(), this.slatContainerEl.empty(), this.timeHeadScroller.canvas.clearWidth(), this.timeBodyScroller.canvas.clearWidth()\n                }, t.prototype.renderSlatHtml = function() {\n                    for (var e, t, r, o, n = this.calendar.theme, i = this.labelInterval, a = this.headerFormats, l = a.map(function(e) {\n                            return []\n                        }), c = null, u = null, d = this.slotDates, h = [], p = a.map(function(e) {\n                            return s.queryMostGranularFormatUnit(e)\n                        }), f = 0, v = d; f < v.length; f++) {\n                        t = v[f];\n                        for (var g = t.week(), y = this.emphasizeWeeks && null !== u && u !== g, m = 0; m < a.length; m++) {\n                            o = a[m], r = l[m], c = r[r.length - 1];\n                            var R = a.length > 1 && m < a.length - 1,\n                                w = null;\n                            if (R) {\n                                var b = t.format(o);\n                                c && c.text === b ? c.colspan += 1 : w = this.buildCellObject(t, b, p[m])\n                            } else if (!c || s.isInt(s.divideRangeByDuration(this.normalizedUnzonedStart, t, i))) {\n                                var b = t.format(o);\n                                w = this.buildCellObject(t, b, p[m])\n                            } else c.colspan += 1;\n                            w && (w.weekStart = y, r.push(w))\n                        }\n                        h.push({\n                            weekStart: y\n                        }), u = g\n                    }\n                    var S = i > this.slotDuration,\n                        E = 1 === this.slotDuration.as(\"days\"),\n                        C = '<table class=\"' + n.getClass(\"tableGrid\") + '\">';\n                    C += \"<colgroup>\";\n                    for (var H = 0, I = d; H < I.length; H++) t = I[H], C += \"<col/>\";\n                    C += \"</colgroup>\", C += \"<tbody>\";\n                    for (var T = 0; T < l.length; T++) {\n                        r = l[T];\n                        var D = T === l.length - 1;\n                        C += \"<tr\" + (S && D ? ' class=\"fc-chrono\"' : \"\") + \">\";\n                        for (var x = 0, M = r; x < M.length; x++) {\n                            e = M[x];\n                            var z = [n.getClass(\"widgetHeader\")];\n                            e.weekStart && z.push(\"fc-em-cell\"), E && (z = z.concat(this.getDayClasses(e.date, !0))), C += '<th class=\"' + z.join(\" \") + '\" data-date=\"' + e.date.format() + '\"' + (e.colspan > 1 ? ' colspan=\"' + e.colspan + '\"' : \"\") + '><div class=\"fc-cell-content\">' + e.spanHtml + \"</div></th>\"\n                        }\n                        C += \"</tr>\"\n                    }\n                    C += \"</tbody></table>\";\n                    var F = '<table class=\"' + n.getClass(\"tableGrid\") + '\">';\n                    F += \"<colgroup>\";\n                    for (var _ = 0, B = h; _ < B.length; _++) e = B[_], F += \"<col/>\";\n                    F += \"</colgroup>\", F += \"<tbody><tr>\";\n                    for (var T = 0; T < h.length; T++) e = h[T], t = d[T], F += this.slatCellHtml(t, e.weekStart);\n                    return F += \"</tr></tbody></table>\", {\n                        headHtml: C,\n                        bodyHtml: F\n                    }\n                }, t.prototype.buildCellObject = function(e, t, r) {\n                    e = e.clone();\n                    var o = this.buildGotoAnchorHtml({\n                        date: e,\n                        type: r,\n                        forceOff: !r\n                    }, {\n                        \"class\": \"fc-cell-text\"\n                    }, s.htmlEscape(t));\n                    return {\n                        text: t,\n                        spanHtml: o,\n                        date: e,\n                        colspan: 1\n                    }\n                }, t.prototype.slatCellHtml = function(e, t) {\n                    var r, o = this.calendar.theme;\n                    return this.isTimeScale ? (r = [], r.push(s.isInt(s.divideRangeByDuration(this.normalizedUnzonedStart, e, this.labelInterval)) ? \"fc-major\" : \"fc-minor\")) : (r = this.getDayClasses(e), r.push(\"fc-day\")), r.unshift(o.getClass(\"widgetContent\")), t && r.push(\"fc-em-cell\"), '<td class=\"' + r.join(\" \") + '\" data-date=\"' + e.format() + '\"><div /></td>'\n                }, t.prototype.renderBusinessHours = function(t) {\n                    if (!this.largeUnit) return e.prototype.renderBusinessHours.call(this, t)\n                }, t.prototype.getNowIndicatorUnit = function() {\n                    if (this.isTimeScale) return s.computeGreatestUnit(this.slotDuration)\n                }, t.prototype.renderNowIndicator = function(e) {\n                    var t = [];\n                    if (e = this.normalizeGridDate(e), this.normalizedUnzonedRange.containsDate(e)) {\n                        var r = this.dateToCoord(e),\n                            o = this.isRTL ? {\n                                right: -r\n                            } : {\n                                left: r\n                            };\n                        t.push(n(\"<div class='fc-now-indicator fc-now-indicator-arrow'></div>\").css(o).appendTo(this.timeHeadScroller.canvas.el)[0]), t.push(n(\"<div class='fc-now-indicator fc-now-indicator-line'></div>\").css(o).appendTo(this.timeBodyScroller.canvas.el)[0])\n                    }\n                    this.nowIndicatorEls = n(t)\n                }, t.prototype.unrenderNowIndicator = function() {\n                    this.nowIndicatorEls && (this.nowIndicatorEls.remove(), this.nowIndicatorEls = null)\n                }, t.prototype.updateSize = function(e, t, r) {\n                    var o, n, i, s;\n                    o = t ? \"auto\" : e - this.headHeight() - this.queryMiscHeight(), this.timeBodyScroller.setHeight(o);\n                    var a = this.timeHeadColEls;\n                    if (a) {\n                        var l = Math.round(this.slotWidth || (this.slotWidth = this.computeSlotWidth()));\n                        i = l * this.slotDates.length, n = \"\", s = l;\n                        var c = this.timeBodyScroller.getClientWidth();\n                        c > i && (n = c, i = \"\", s = Math.floor(c / this.slotDates.length))\n                    } else i = \"\", n = \"\";\n                    this.timeHeadScroller.canvas.setWidth(i), this.timeHeadScroller.canvas.setMinWidth(n), this.timeBodyScroller.canvas.setWidth(i), this.timeBodyScroller.canvas.setMinWidth(n), a && this.timeHeadColEls.slice(0, -1).add(this.slatColEls.slice(0, -1)).css(\"width\", s), this.timeHeadScroller.updateSize(), this.timeBodyScroller.updateSize(), this.timeScrollJoiner.update(), a && (this.buildCoords(), this.updateSegPositions(), this.updateNowIndicator()), this.headDateFollower && this.headDateFollower.update(), this.eventTitleFollower && this.eventTitleFollower.update()\n                }, t.prototype.queryMiscHeight = function() {\n                    return this.el.outerHeight() - this.timeHeadScroller.el.outerHeight() - this.timeBodyScroller.el.outerHeight()\n                }, t.prototype.computeSlotWidth = function() {\n                    var e = 0,\n                        t = this.timeHeadEl.find(\"tr:last-child th .fc-cell-text\");\n                    t.each(function(t, r) {\n                        var o = n(r).outerWidth();\n                        return e = Math.max(e, o)\n                    });\n                    var r = e + 1,\n                        o = s.divideDurationByDuration(this.labelInterval, this.slotDuration),\n                        i = Math.ceil(r / o),\n                        a = this.timeHeadColEls.eq(0).css(\"min-width\");\n                    return a && (a = parseInt(a, 10), a && (i = Math.max(i, a))), i\n                }, t.prototype.buildCoords = function() {\n                    this.timeBodyBoundCache.build(), this.slatCoordCache.build(), this.slatInnerCoordCache.build()\n                }, t.prototype.computeDateSnapCoverage = function(e) {\n                    var t = s.divideRangeByDuration(this.normalizedUnzonedStart, e, this.snapDuration);\n                    if (t < 0) return 0;\n                    if (t >= this.snapDiffToIndex.length) return this.snapCnt;\n                    var r = Math.floor(t),\n                        o = this.snapDiffToIndex[r];\n                    return s.isInt(o) ? o += t - r : o = Math.ceil(o), o\n                }, t.prototype.dateToCoord = function(e) {\n                    var t = this.computeDateSnapCoverage(e),\n                        r = t / this.snapsPerSlot,\n                        o = Math.floor(r);\n                    o = Math.min(o, this.slotCnt - 1);\n                    var n = r - o,\n                        i = this.slatInnerCoordCache;\n                    return this.isRTL ? i.getRightPosition(o) - i.getWidth(o) * n - this.timeBodyBoundCache.getWidth(0) : i.getLeftPosition(o) + i.getWidth(o) * n\n                }, t.prototype.rangeToCoords = function(e) {\n                    return this.isRTL ? {\n                        right: this.dateToCoord(e.start),\n                        left: this.dateToCoord(e.end)\n                    } : {\n                        left: this.dateToCoord(e.start),\n                        right: this.dateToCoord(e.end)\n                    }\n                }, t.prototype.headHeight = function() {\n                    for (var e = [], t = 0; t < arguments.length; t++) e[t] = arguments[t];\n                    var r = this.timeHeadScroller.canvas.contentEl.find(\"table\");\n                    return r.height.apply(r, e)\n                }, t.prototype.updateSegPositions = function() {\n                    for (var e = [].concat(this.getEventSegs(), this.getBusinessHourSegs()), t = 0, r = e; t < r.length; t++) {\n                        var o = r[t],\n                            n = this.rangeToCoords(o);\n                        o.el.css({\n                            left: o.left = n.left,\n                            right: -(o.right = n.right)\n                        })\n                    }\n                }, t.prototype.handleTimeBodyScrolled = function(e) {\n                    e ? this.isTimeBodyScrolled || (this.isTimeBodyScrolled = !0, this.el.addClass(\"fc-scrolled\")) : this.isTimeBodyScrolled && (this.isTimeBodyScrolled = !1, this.el.removeClass(\"fc-scrolled\"))\n                }, t.prototype.computeInitialDateScroll = function() {\n                    var e = this.get(\"dateProfile\").activeUnzonedRange,\n                        t = 0;\n                    if (this.isTimeScale) {\n                        var r = this.opt(\"scrollTime\");\n                        r && (r = i.duration(r), t = this.dateToCoord(e.getStart().time(r)))\n                    }\n                    return {\n                        left: t\n                    }\n                }, t.prototype.queryDateScroll = function() {\n                    return {\n                        left: this.timeBodyScroller.getScrollLeft()\n                    }\n                }, t.prototype.applyDateScroll = function(e) {\n                    null != e.left && (this.timeHeadScroller.setScrollLeft(e.left), this.timeBodyScroller.setScrollLeft(e.left))\n                }, t.prototype.prepareHits = function() {\n                    this.buildCoords()\n                }, t.prototype.queryHit = function(e, t) {\n                    var r = this.snapsPerSlot,\n                        o = this.slatCoordCache,\n                        n = this.timeBodyBoundCache;\n                    if (n.isPointInBounds(e, t)) {\n                        var i = o.getHorizontalIndex(e);\n                        if (null != i) {\n                            var s = void 0,\n                                a = void 0,\n                                l = void 0,\n                                c = void 0,\n                                u = void 0,\n                                d = o.getWidth(i);\n                            if (this.isRTL) {\n                                var h = o.getRightOffset(i);\n                                a = (h - e) / d, s = Math.floor(a * r), l = i * r + s, u = h - s / r * d, c = u - (s + 1) / r * d\n                            } else {\n                                var p = o.getLeftOffset(i);\n                                a = (e - p) / d, s = Math.floor(a * r), l = i * r + s, c = p + s / r * d, u = p + (s + 1) / r * d\n                            }\n                            return {\n                                snap: l,\n                                component: this,\n                                left: c,\n                                right: u,\n                                top: n.getTopOffset(0),\n                                bottom: n.getBottomOffset(0)\n                            }\n                        }\n                    }\n                }, t.prototype.getHitFootprint = function(e) {\n                    return new s.ComponentFootprint(this.getSnapUnzonedRange(e.snap), (!this.isTimeScale))\n                }, t.prototype.getHitEl = function(e) {\n                    return this.getSnapEl(e.snap)\n                }, t.prototype.getSnapUnzonedRange = function(e) {\n                    var t = this.normalizedUnzonedStart.clone();\n                    t.add(s.multiplyDuration(this.snapDuration, this.snapIndexToDiff[e]));\n                    var r = t.clone().add(this.snapDuration);\n                    return new s.UnzonedRange(t, r)\n                }, t.prototype.getSnapEl = function(e) {\n                    return this.slatEls.eq(Math.floor(e / this.snapsPerSlot))\n                }, t.prototype.renderEventResize = function(e, t, r) {\n                    for (var o = 0, n = e; o < n.length; o++) {\n                        var i = n[o];\n                        this.renderHighlight(i.componentFootprint)\n                    }\n                    return this.helperRenderer.renderEventResizingFootprints(e, t, r)\n                }, t.prototype.unrenderEventResize = function() {\n                    return this.unrenderHighlight(), this.helperRenderer.unrender()\n                }, t.prototype.renderDrag = function(e, t, r) {\n                    if (t) return this.helperRenderer.renderEventDraggingFootprints(e, t, r), !0;\n                    for (var o = 0, n = e; o < n.length; o++) {\n                        var i = n[o];\n                        this.renderHighlight(i.componentFootprint)\n                    }\n                    return !1\n                }, t.prototype.unrenderDrag = function() {\n                    return this.helperRenderer.unrender(), this.unrenderHighlight()\n                }, t\n            }(s.View);\n        t[\"default\"] = y, y.prototype.usesMinMaxTime = !0, y.prototype.eventRendererClass = d[\"default\"], y.prototype.fillRendererClass = h[\"default\"], y.prototype.businessHourRendererClass = s.BusinessHourRenderer, y.prototype.helperRendererClass = p[\"default\"], y.prototype.eventDraggingClass = f[\"default\"], y.prototype.eventResizingClass = v[\"default\"], s.StandardInteractionsMixin.mixInto(y)\n    }, function(e, t) {\n        e.exports = r\n    }, function(e, t) {\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        });\n        var r = function() {\n            function e(e, t) {\n                this.axis = e, this.scrollers = t;\n                for (var r = 0, o = this.scrollers; r < o.length; r++) {\n                    var n = o[r];\n                    this.initScroller(n)\n                }\n            }\n            return e.prototype.initScroller = function(e) {\n                var t = this;\n                e.scrollEl.on(\"wheel mousewheel DomMouseScroll MozMousePixelScroll\", function() {\n                    t.assignMasterScroller(e)\n                }), e.on(\"scrollStart\", function() {\n                    t.masterScroller || t.assignMasterScroller(e)\n                }).on(\"scroll\", function() {\n                    if (e === t.masterScroller)\n                        for (var r = 0, o = t.scrollers; r < o.length; r++) {\n                            var n = o[r];\n                            if (n !== e) switch (t.axis) {\n                                case \"horizontal\":\n                                    n.setNativeScrollLeft(e.getNativeScrollLeft());\n                                    break;\n                                case \"vertical\":\n                                    n.setScrollTop(e.getScrollTop())\n                            }\n                        }\n                }).on(\"scrollEnd\", function() {\n                    e === t.masterScroller && t.unassignMasterScroller()\n                })\n            }, e.prototype.assignMasterScroller = function(e) {\n                this.unassignMasterScroller(), this.masterScroller = e;\n                for (var t = 0, r = this.scrollers; t < r.length; t++) {\n                    var o = r[t];\n                    o !== e && o.disableTouchScroll()\n                }\n            }, e.prototype.unassignMasterScroller = function() {\n                if (this.masterScroller) {\n                    for (var e = 0, t = this.scrollers; e < t.length; e++) {\n                        var r = t[e];\n                        r.enableTouchScroll()\n                    }\n                    this.masterScroller = null\n                }\n            }, e.prototype.update = function() {\n                for (var e, t, r, o = this.scrollers.map(function(e) {\n                        return e.getScrollbarWidths()\n                    }), n = 0, i = 0, s = 0, a = 0, l = 0, c = o; l < c.length; l++) t = c[l], n = Math.max(n, t.left), i = Math.max(i, t.right), s = Math.max(s, t.top), a = Math.max(a, t.bottom);\n                for (r = 0; r < this.scrollers.length; r++) e = this.scrollers[r], t = o[r], e.canvas.setGutters(\"horizontal\" === this.axis ? {\n                    left: n - t.left,\n                    right: i - t.right\n                } : {\n                    top: s - t.top,\n                    bottom: a - t.bottom\n                })\n            }, e\n        }();\n        t[\"default\"] = r\n    }, function(e, t, r) {\n        function o(e) {\n            for (var t = 0, r = 0, o = e; r < o.length; r++) {\n                var i = o[r];\n                t = Math.max(t, n(i))\n            }\n            return t\n        }\n\n        function n(e) {\n            return null == e.top && (e.top = o(e.above)), e.top + e.height\n        }\n\n        function i(e, t) {\n            return e.left < t.right && e.right > t.left\n        }\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        });\n        var s = r(1),\n            a = r(0),\n            l = r(27),\n            c = function(e) {\n                function t() {\n                    return null !== e && e.apply(this, arguments) || this\n                }\n                return s.__extends(t, e), t.prototype.computeDisplayEventTime = function() {\n                    return !this.view.isTimeScale\n                }, t.prototype.computeDisplayEventEnd = function() {\n                    return !1\n                }, t.prototype.computeEventTimeFormat = function() {\n                    return this.view.opt(\"extraSmallTimeFormat\")\n                }, t.prototype.renderFgSegs = function(e) {\n                    for (var t = this.view.eventTitleFollower, r = 0, n = e; r < n.length; r++) {\n                        var i = n[r],\n                            s = this.component.rangeToCoords(i);\n                        i.el.css({\n                            left: i.left = s.left,\n                            right: -(i.right = s.right)\n                        })\n                    }\n                    for (var a = 0, c = e; a < c.length; a++) {\n                        var i = c[a];\n                        i.el.appendTo(this.component.segContainerEl)\n                    }\n                    for (var u = 0, d = e; u < d.length; u++) {\n                        var i = d[u];\n                        i.height = i.el.outerHeight(!0)\n                    }\n                    this.buildSegLevels(e), this.component.segContainerHeight = o(e);\n                    for (var h = 0, p = e; h < p.length; h++) {\n                        var i = p[h];\n                        i.el.css(\"top\", i.top)\n                    }\n                    this.component.segContainerEl.height(this.component.segContainerHeight);\n                    for (var f = 0, v = e; f < v.length; f++) {\n                        var i = v[f],\n                            g = i.el.find(\".fc-title\");\n                        g.length && (i.scrollFollowerSprite = new l[\"default\"](g), t.addSprite(i.scrollFollowerSprite))\n                    }\n                }, t.prototype.buildSegLevels = function(e) {\n                    var t = [];\n                    this.sortEventSegs(e);\n                    for (var r = 0, o = e; r < o.length; r++) {\n                        var n = o[r];\n                        n.above = [];\n                        for (var s = 0; s < t.length;) {\n                            for (var a = !1, l = 0, c = t[s]; l < c.length; l++) {\n                                var u = c[l];\n                                i(n, u) && (n.above.push(u), a = !0)\n                            }\n                            if (!a) break;\n                            s += 1\n                        }\n                        for ((t[s] || (t[s] = [])).push(n), s += 1; s < t.length;) {\n                            for (var d = 0, h = t[s]; d < h.length; d++) {\n                                var p = h[d];\n                                i(n, p) && p.above.push(n)\n                            }\n                            s += 1\n                        }\n                    }\n                    return t\n                }, t.prototype.unrenderFgSegs = function(e) {\n                    if (this.component.segContainerEl) {\n                        for (var t = this.view.eventTitleFollower, r = 0, o = e; r < o.length; r++) {\n                            var n = o[r];\n                            n.scrollFollowerSprite && t.removeSprite(n.scrollFollowerSprite)\n                        }\n                        this.component.segContainerEl.empty(), this.component.segContainerEl.height(\"\"), this.component.segContainerHeight = null\n                    }\n                }, t.prototype.fgSegHtml = function(e, t) {\n                    var r = e.footprint.eventDef,\n                        o = this.view.isEventDefDraggable(r),\n                        n = e.isStart && this.view.isEventDefResizableFromStart(r),\n                        i = e.isEnd && this.view.isEventDefResizableFromEnd(r),\n                        s = this.getSegClasses(e, o, n || i);\n                    s.unshift(\"fc-timeline-event\", \"fc-h-event\");\n                    var l = this.getTimeText(e.footprint);\n                    return '<a class=\"' + s.join(\" \") + '\" style=\"' + a.cssToStr(this.getSkinCss(e.footprint.eventDef)) + '\"' + (r.url ? ' href=\"' + a.htmlEscape(r.url) + '\"' : \"\") + '><div class=\"fc-content\">' + (l ? '<span class=\"fc-time\">' + a.htmlEscape(l) + \"</span>\" : \"\") + '<span class=\"fc-title\">' + (r.title ? a.htmlEscape(r.title) : \"&nbsp;\") + '</span></div><div class=\"fc-bg\" />' + (n ? '<div class=\"fc-resizer fc-start-resizer\"></div>' : \"\") + (i ? '<div class=\"fc-resizer fc-end-resizer\"></div>' : \"\") + \"</a>\"\n                }, t\n            }(a.EventRenderer);\n        t[\"default\"] = c\n    }, function(e, t, r) {\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        });\n        var o = r(1),\n            n = r(2),\n            i = r(0),\n            s = r(44),\n            a = function(e) {\n                function t(t) {\n                    var r = e.call(this, t) || this;\n                    return r.children = [], r.depth = 0, r.trHash = {}, r.trs = n(), r.isExpanded = r.view.opt(\"resourcesInitiallyExpanded\"), r\n                }\n                return o.__extends(t, e), t.prototype.addChildRowNode = function(e, t) {\n                    e.removeFromParentAndDom();\n                    var r = this.children;\n                    null != t ? r.splice(t, 0, e) : (t = r.length, r.push(e)), e.prevSibling = t > 0 ? r[t - 1] : null, t < r.length - 1 && (r[t + 1].prevSibling = e), e.parent = this, e.depth = this.depth + (this.hasOwnRow ? 1 : 0), this.descendantAdded(e)\n                }, t.prototype.removeChild = function(e) {\n                    var t, r = this.children,\n                        o = !1;\n                    for (t = 0; t < r.length; t++) {\n                        var n = r[t];\n                        if (n === e) {\n                            o = !0;\n                            break\n                        }\n                    }\n                    return !!o && (t < r.length - 1 && (r[t + 1].prevSibling = e.prevSibling), r.splice(t, 1), e.parent = null, e.prevSibling = null, this.descendantRemoved(e), e)\n                }, t.prototype.removeChildren = function() {\n                    for (var e = 0, t = this.children; e < t.length; e++) {\n                        var r = t[e];\n                        this.descendantRemoved(r)\n                    }\n                    this.children = []\n                }, t.prototype.removeFromParentAndDom = function() {\n                    this.parent && this.parent.removeChild(this), this.get(\"isInDom\") && this.removeElement()\n                }, t.prototype.getLastChild = function() {\n                    var e = this.children;\n                    return e[e.length - 1]\n                }, t.prototype.getPrevRowInDom = function() {\n                    for (var e = this; e;) {\n                        if (e.prevSibling) {\n                            var t = void 0;\n                            for (e = e.prevSibling; t = e.getLastChild();) e = t\n                        } else e = e.parent;\n                        if (e && e.get(\"isInDom\") && e.hasOwnRow) return e\n                    }\n                    return null\n                }, t.prototype.getLeadingRow = function() {\n                    return this.hasOwnRow ? this : this.isExpanded && this.children.length ? this.children[0].getLeadingRow() : void 0\n                }, t.prototype.getRows = function(e) {\n                    void 0 === e && (e = []), this.hasOwnRow && e.push(this);\n                    for (var t = 0, r = this.children; t < r.length; t++) {\n                        var o = r[t];\n                        o.getRows(e)\n                    }\n                    return e\n                }, t.prototype.getNodes = function(e) {\n                    void 0 === e && (e = []), e.push(this);\n                    for (var t = 0, r = this.children; t < r.length; t++) {\n                        var o = r[t];\n                        o.getNodes(e)\n                    }\n                    return e\n                }, t.prototype.getDescendants = function() {\n                    for (var e = [], t = 0, r = this.children; t < r.length; t++) {\n                        var o = r[t];\n                        o.getNodes(e)\n                    }\n                    return e\n                }, t.prototype.show = function() {\n                    this.get(\"isInDom\") || this.renderSkeleton()\n                }, t.prototype.hide = function() {\n                    this.get(\"isInDom\") && this.removeElement()\n                }, t.prototype.renderSkeleton = function() {\n                    this.trHash = {};\n                    var e = [];\n                    if (this.hasOwnRow) {\n                        var t = this.getPrevRowInDom();\n                        for (var r in this.view.tbodyHash) {\n                            var o = this.view.tbodyHash[r],\n                                s = n(\"<tr/>\");\n                            this.trHash[r] = s, e.push(s[0]);\n                            var a = \"render\" + i.capitaliseFirstLetter(r) + \"Skeleton\";\n                            this[a] && this[a](s), t ? t.trHash[r].after(s) : o.prepend(s)\n                        }\n                        this.trs = n(e).on(\"click\", \".fc-expander\", i.proxy(this, \"toggleExpanded\")), this.thisRowShown()\n                    }\n                    if (this.set(\"isInDom\", !0), this.isExpanded)\n                        for (var l = 0, c = this.children; l < c.length; l++) {\n                            var u = c[l];\n                            u.renderSkeleton()\n                        }\n                }, t.prototype.removeElement = function() {\n                    for (var e in this.trHash) {\n                        var t = this.trHash[e],\n                            r = \"unrender\" + i.capitaliseFirstLetter(e) + \"Skeleton\";\n                        this[r] && this[r](t)\n                    }\n                    this.unset(\"isInDom\"), this.thisRowHidden(), this.trHash = {}, this.trs.remove(), this.trs = n();\n                    for (var o = 0, s = this.children; o < s.length; o++) {\n                        var a = s[o];\n                        a.get(\"isInDom\") && a.removeElement()\n                    }\n                }, t.prototype.getTr = function(e) {\n                    return this.trHash[e]\n                }, t.prototype.expand = function() {\n                    if (!this.isExpanded) {\n                        this.isExpanded = !0, this.indicateExpanded();\n                        for (var e = 0, t = this.children; e < t.length; e++) {\n                            var r = t[e];\n                            r.show()\n                        }\n                        this.view.calendar.updateViewSize(), this.animateExpand()\n                    }\n                }, t.prototype.collapse = function() {\n                    if (this.isExpanded) {\n                        this.isExpanded = !1, this.indicateCollapsed();\n                        for (var e = 0, t = this.children; e < t.length; e++) {\n                            var r = t[e];\n                            r.hide()\n                        }\n                        this.view.calendar.updateViewSize()\n                    }\n                }, t.prototype.toggleExpanded = function() {\n                    this.isExpanded ? this.collapse() : this.expand()\n                }, t.prototype.indicateExpanded = function() {\n                    this.trs.find(\".fc-expander .fc-icon\").removeClass(this.getCollapsedIcon()).addClass(this.getExpandedIcon())\n                }, t.prototype.indicateCollapsed = function() {\n                    this.trs.find(\".fc-expander .fc-icon\").removeClass(this.getExpandedIcon()).addClass(this.getCollapsedIcon())\n                }, t.prototype.indicateExpandingEnabled = function() {\n                    this.trs.find(\".fc-expander-space\").addClass(\"fc-expander\"), this.isExpanded ? this.indicateExpanded() : this.indicateCollapsed()\n                }, t.prototype.indicateExpandingDisabled = function() {\n                    this.trs.find(\".fc-expander-space\").removeClass(\"fc-expander\").find(\".fc-icon\").removeClass(this.getExpandedIcon()).removeClass(this.getCollapsedIcon())\n                }, t.prototype.updateExpandingEnabled = function() {\n                    this.hasOwnRow && this.children.length ? this.indicateExpandingEnabled() : this.indicateExpandingDisabled()\n                }, t.prototype.getExpandedIcon = function() {\n                    return \"fc-icon-down-triangle\"\n                }, t.prototype.getCollapsedIcon = function() {\n                    var e = this.view.isRTL ? \"left\" : \"right\";\n                    return \"fc-icon-\" + e + \"-triangle\"\n                }, t.prototype.animateExpand = function() {\n                    var e = this.children[0],\n                        t = e && e.getLeadingRow(),\n                        r = t && t.trs;\n                    r && (r.addClass(\"fc-collapsed\"), setTimeout(function() {\n                        r.addClass(\"fc-transitioning\"), r.removeClass(\"fc-collapsed\")\n                    }), r.one(\"webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend\", function() {\n                        r.removeClass(\"fc-transitioning\")\n                    }))\n                }, t.prototype.getMaxTrInnerHeight = function() {\n                    var e = 0;\n                    return n.each(this.trHash, function(t, r) {\n                        var o = s.getOwnCells(r).find(\"> div:not(.fc-cell-content):first\");\n                        e = Math.max(o.height(), e)\n                    }), e\n                }, t.prototype.setTrInnerHeight = function(e) {\n                    n.each(this.trHash, function(t, r) {\n                        s.getOwnCells(r).find(\"> div:not(.fc-cell-content):first\").height(e)\n                    })\n                }, t.prototype.descendantAdded = function(e) {\n                    this.get(\"isInDom\") && this.hasOwnRow && 1 === this.children.length && this.indicateExpandingEnabled(), (this.parent || this.view).descendantAdded(e)\n                }, t.prototype.descendantRemoved = function(e) {\n                    this.get(\"isInDom\") && this.hasOwnRow && 0 === this.children.length && this.indicateExpandingDisabled(), (this.parent || this.view).descendantRemoved(e)\n                }, t.prototype.thisRowShown = function() {\n                    (this.parent || this.view).descendantShown(this)\n                }, t.prototype.thisRowHidden = function() {\n                    (this.parent || this.view).descendantHidden(this)\n                }, t.prototype.descendantShown = function(e) {\n                    (this.parent || this.view).descendantShown(e)\n                }, t.prototype.descendantHidden = function(e) {\n                    (this.parent || this.view).descendantHidden(e)\n                }, t\n            }(i.DateComponent);\n        t[\"default\"] = a, a.prototype.hasOwnRow = !1\n    }, function(e, t) {\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        });\n        var r = function() {\n            function e() {}\n            return e.extractIds = function(t, r) {\n                var o = r.opt(\"eventResourceField\") || \"resourceId\",\n                    n = [];\n                if (t.resourceIds)\n                    for (var i = 0, s = t.resourceIds; i < s.length; i++) {\n                        var a = s[i];\n                        n.push(e.normalizeId(a))\n                    }\n                return null != t[o] && n.push(e.normalizeId(t[o])), n\n            }, e.normalizeId = function(e) {\n                return String(e)\n            }, e\n        }();\n        t[\"default\"] = r\n    }, function(e, t, r) {\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        });\n        var o = r(1),\n            n = r(0),\n            i = r(9),\n            s = r(13),\n            a = r(38),\n            l = function(e) {\n                function t(t, r) {\n                    var o = e.call(this, t, r) || this;\n                    return o.initResourceView(), o\n                }\n                return o.__extends(t, e), t\n            }(n.AgendaView);\n        t[\"default\"] = l, l.prototype.timeGridClass = a[\"default\"], l.prototype.dayGridClass = s[\"default\"], i[\"default\"].mixInto(l)\n    }, function(e, t, r) {\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        });\n        var o = r(1),\n            n = r(2),\n            i = r(0),\n            s = r(6),\n            a = function(e) {\n                function t() {\n                    return null !== e && e.apply(this, arguments) || this\n                }\n                return o.__extends(t, e), t.mixInto = function(e) {\n                    var t = this;\n                    i.Mixin.mixInto.call(this, e), [\"updateDayTableCols\", \"computeColCnt\", \"getColDayIndex\", \"renderHeadTrHtml\", \"renderBgCellsHtml\", \"renderBusinessHours\", \"allowCrossResource\"].forEach(function(r) {\n                        e.prototype[r] = t.prototype[r]\n                    })\n                }, t.prototype.registerResources = function(e) {\n                    this.flattenedResources = this.flattenResources(e), this.resourceCnt = this.flattenedResources.length, this.updateDayTable()\n                }, t.prototype.flattenResources = function(e) {\n                    var t, r = this.opt(\"resourceOrder\");\n                    if (r) {\n                        var o = i.parseFieldSpecs(r);\n                        t = function(e, t) {\n                            return i.compareByFieldSpecs(e, t, o)\n                        }\n                    } else t = null;\n                    var n = [];\n                    return this.accumulateResources(e, t, n), n\n                }, t.prototype.accumulateResources = function(e, t, r) {\n                    var o;\n                    t ? (o = e.slice(0), o.sort(t)) : o = e;\n                    for (var n = 0, i = o; n < i.length; n++) {\n                        var s = i[n];\n                        r.push(s), this.accumulateResources(s.children, t, r)\n                    }\n                }, t.prototype.updateDayTableCols = function() {\n                    this.datesAboveResources = this.opt(\"groupByDateAndResource\"), i.DayTableMixin.prototype.updateDayTableCols.call(this)\n                }, t.prototype.computeColCnt = function() {\n                    return this.resourceCnt * this.daysPerRow\n                }, t.prototype.getColDayIndex = function(e) {\n                    return this.isRTL && (e = this.colCnt - 1 - e), this.datesAboveResources ? Math.floor(e / (this.resourceCnt || 1)) : e % this.daysPerRow\n                }, t.prototype.getColResource = function(e) {\n                    return this.flattenedResources[this.getColResourceIndex(e)]\n                }, t.prototype.getColResourceIndex = function(e) {\n                    return this.isRTL && (e = this.colCnt - 1 - e), this.datesAboveResources ? e % (this.resourceCnt || 1) : Math.floor(e / this.daysPerRow)\n                }, t.prototype.indicesToCol = function(e, t) {\n                    var r = this.datesAboveResources ? t * (this.resourceCnt || 1) + e : e * this.daysPerRow + t;\n                    return this.isRTL && (r = this.colCnt - 1 - r), r\n                }, t.prototype.renderHeadTrHtml = function() {\n                    return this.daysPerRow > 1 ? this.datesAboveResources ? this.renderHeadDateAndResourceHtml() : this.renderHeadResourceAndDateHtml() : this.renderHeadResourceHtml()\n                }, t.prototype.renderHeadResourceHtml = function() {\n                    var e = this,\n                        t = this.flattenedResources.map(function(t) {\n                            return e.renderHeadResourceCellHtml(t)\n                        });\n                    return t.length || t.push(\"<td>&nbsp;</td>\"), this.wrapTr(t, \"renderHeadIntroHtml\")\n                }, t.prototype.renderHeadResourceAndDateHtml = function() {\n                    for (var e = [], t = [], r = this.daysPerRow, o = 0, n = this.flattenedResources; o < n.length; o++) {\n                        var i = n[o];\n                        e.push(this.renderHeadResourceCellHtml(i, null, this.daysPerRow));\n                        for (var s = 0; s < r; s++) {\n                            var a = this.dayDates[s].clone();\n                            t.push(this.renderHeadResourceDateCellHtml(a, i))\n                        }\n                    }\n                    return e.length || e.push(\"<td>&nbsp;</td>\"), t.length || t.push(\"<td>&nbsp;</td>\"), this.wrapTr(e, \"renderHeadIntroHtml\") + this.wrapTr(t, \"renderHeadIntroHtml\")\n                }, t.prototype.renderHeadDateAndResourceHtml = function() {\n                    for (var e = [], t = [], r = this.daysPerRow, o = 0; o < r; o++) {\n                        var n = this.dayDates[o].clone();\n                        e.push(this.renderHeadDateCellHtml(n, this.resourceCnt));\n                        for (var i = 0, s = this.flattenedResources; i < s.length; i++) {\n                            var a = s[i];\n                            t.push(this.renderHeadResourceCellHtml(a, n))\n                        }\n                    }\n                    return e.length || e.push(\"<td>&nbsp;</td>\"), t.length || t.push(\"<td>&nbsp;</td>\"), this.wrapTr(e, \"renderHeadIntroHtml\") + this.wrapTr(t, \"renderHeadIntroHtml\")\n                }, t.prototype.renderHeadResourceCellHtml = function(e, t, r) {\n                    return void 0 === r && (r = 1), '<th class=\"fc-resource-cell\" data-resource-id=\"' + e.id + '\"' + (t ? ' data-date=\"' + t.format(\"YYYY-MM-DD\") + '\"' : \"\") + (r > 1 ? ' colspan=\"' + r + '\"' : \"\") + \">\" + i.htmlEscape(this.view.getResourceText(e)) + \"</th>\"\n                }, t.prototype.renderHeadResourceDateCellHtml = function(e, t, r) {\n                    return void 0 === r && (r = 1), this.renderHeadDateCellHtml(e, r, 'data-resource-id=\"' + t.id + '\"')\n                }, t.prototype.processHeadResourceEls = function(e) {\n                    var t = this;\n                    e.find(\".fc-resource-cell\").each(function(e, r) {\n                        var o;\n                        o = t.datesAboveResources ? t.getColResource(e) : t.flattenedResources[t.isRTL ? t.flattenedResources.length - 1 - e : e], t.publiclyTrigger(\"resourceRender\", {\n                            context: o,\n                            args: [o, n(r), n(), t.view]\n                        })\n                    })\n                }, t.prototype.renderBgCellsHtml = function(e) {\n                    for (var t = [], r = this.colCnt, o = 0; o < r; o++) {\n                        var n = this.getCellDate(e, o),\n                            i = this.getColResource(o);\n                        t.push(this.renderResourceBgCellHtml(n, i))\n                    }\n                    return t.length || t.push(\"<td>&nbsp;</td>\"), t.join(\"\")\n                }, t.prototype.renderResourceBgCellHtml = function(e, t) {\n                    return this.renderBgCellHtml(e, 'data-resource-id=\"' + t.id + '\"')\n                }, t.prototype.wrapTr = function(e, t) {\n                    return this.isRTL ? (e.reverse(), \"<tr>\" + e.join(\"\") + this[t]() + \"</tr>\") : \"<tr>\" + this[t]() + e.join(\"\") + \"</tr>\"\n                }, t.prototype.renderBusinessHours = function(e) {\n                    for (var t = this.hasAllDayBusinessHours, r = this.dateProfile.activeUnzonedRange, o = [], n = 0, a = this.flattenedResources; n < a.length; n++) {\n                        var l = a[n],\n                            c = (l.businessHourGenerator || e).buildEventInstanceGroup(t, r);\n                        if (c)\n                            for (var u = 0, d = c.sliceRenderRanges(r); u < d.length; u++) {\n                                var h = d[u];\n                                o.push(new i.EventFootprint(new s[\"default\"](h.unzonedRange, t, l.id), h.eventDef, h.eventInstance))\n                            }\n                    }\n                    return this.businessHourRenderer.renderEventFootprints(o)\n                }, t\n            }(i.Mixin);\n        t[\"default\"] = a, a.prototype.resourceCnt = 0, a.prototype.datesAboveResources = !1, a.prototype.allowCrossResource = !1\n    }, function(e, t, r) {\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        });\n        var o = r(1),\n            n = r(0),\n            i = r(9),\n            s = r(13),\n            a = function(e) {\n                function t(t, r) {\n                    var o = e.call(this, t, r) || this;\n                    return o.initResourceView(), o\n                }\n                return o.__extends(t, e), t\n            }(n.BasicView);\n        t[\"default\"] = a, a.prototype.dayGridClass = s[\"default\"], i[\"default\"].mixInto(a)\n    }, function(e, t, r) {\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        });\n        var o = r(1),\n            n = r(0),\n            i = r(9),\n            s = r(13),\n            a = function(e) {\n                function t(t, r) {\n                    var o = e.call(this, t, r) || this;\n                    return o.initResourceView(), o\n                }\n                return o.__extends(t, e), t\n            }(n.MonthView);\n        t[\"default\"] = a, a.prototype.dayGridClass = s[\"default\"], i[\"default\"].mixInto(a)\n    }, function(e, t, r) {\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        });\n        var o = r(1),\n            n = r(2),\n            i = r(0),\n            s = r(39),\n            a = function(e) {\n                function t(t) {\n                    var r = e.call(this, t) || this;\n                    return r.isHScrollbarsClipped = !1, r.isVScrollbarsClipped = !1, \"clipped-scroll\" === r.overflowX && (r.overflowX = \"scroll\", r.isHScrollbarsClipped = !0), \"clipped-scroll\" === r.overflowY && (r.overflowY = \"scroll\", r.isVScrollbarsClipped = !0), r\n                }\n                return o.__extends(t, e), t.prototype.renderEl = function() {\n                    var t = e.prototype.renderEl.call(this);\n                    return n('<div class=\"fc-scroller-clip\" />').append(t)\n                }, t.prototype.updateSize = function() {\n                    var e = this.scrollEl,\n                        t = i.getScrollbarWidths(e),\n                        r = {\n                            marginLeft: 0,\n                            marginRight: 0,\n                            marginTop: 0,\n                            marginBottom: 0\n                        };\n                    return this.isHScrollbarsClipped && (r.marginTop = -t.top, r.marginBottom = -t.bottom), this.isVScrollbarsClipped && (r.marginLeft = -t.left, r.marginRight = -t.right), e.css(r), e.toggleClass(\"fc-no-scrollbars\", (this.isHScrollbarsClipped || \"hidden\" === this.overflowX) && (this.isVScrollbarsClipped || \"hidden\" === this.overflowY) && !(t.top || t.bottom || t.left || t.right))\n                }, t.prototype.getScrollbarWidths = function() {\n                    var e = i.getScrollbarWidths(this.scrollEl);\n                    return this.isHScrollbarsClipped && (e.top = 0, e.bottom = 0), this.isVScrollbarsClipped && (e.left = 0, e.right = 0), e\n                }, t\n            }(s[\"default\"]);\n        t[\"default\"] = a\n    }, function(e, t, r) {\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        });\n        var o = r(2),\n            n = function() {\n                function e() {\n                    this.gutters = {}\n                }\n                return e.prototype.render = function() {\n                    this.el = o('<div class=\"fc-scroller-canvas\"> <div class=\"fc-content\"></div> <div class=\"fc-bg\"></div> </div>'), this.contentEl = this.el.find(\".fc-content\"), this.bgEl = this.el.find(\".fc-bg\")\n                }, e.prototype.setGutters = function(e) {\n                    e ? o.extend(this.gutters, e) : this.gutters = {}, this.updateSize()\n                }, e.prototype.setWidth = function(e) {\n                    this.width = e, this.updateSize()\n                }, e.prototype.setMinWidth = function(e) {\n                    this.minWidth = e, this.updateSize()\n                }, e.prototype.clearWidth = function() {\n                    this.width = null, this.minWidth = null, this.updateSize()\n                }, e.prototype.updateSize = function() {\n                    var e = this.gutters;\n                    this.el.toggleClass(\"fc-gutter-left\", Boolean(e.left)).toggleClass(\"fc-gutter-right\", Boolean(e.right)).toggleClass(\"fc-gutter-top\", Boolean(e.top)).toggleClass(\"fc-gutter-bottom\", Boolean(e.bottom)).css({\n                        paddingLeft: e.left || \"\",\n                        paddingRight: e.right || \"\",\n                        paddingTop: e.top || \"\",\n                        paddingBottom: e.bottom || \"\",\n                        width: null != this.width ? this.width + (e.left || 0) + (e.right || 0) : \"\",\n                        minWidth: null != this.minWidth ? this.minWidth + (e.left || 0) + (e.right || 0) : \"\"\n                    }), this.bgEl.css({\n                        left: e.left || \"\",\n                        right: e.right || \"\",\n                        top: e.top || \"\",\n                        bottom: e.bottom || \"\"\n                    })\n                }, e\n            }();\n        t[\"default\"] = n\n    }, function(e, t, r) {\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        });\n        var o = r(2),\n            n = r(0),\n            i = r(27),\n            s = function() {\n                function e(e, t) {\n                    void 0 === t && (t = !1);\n                    var r = this;\n                    this.isHFollowing = !0, this.isVFollowing = !1, this.allowPointerEvents = !1, this.containOnNaturalLeft = !1, this.containOnNaturalRight = !1, this.minTravel = 0, this.allowPointerEvents = t, this.scroller = e, this.spritesById = {}, e.on(\"scroll\", function() {\n                        e.isTouchedEver ? (r.isTouch = !0, r.isForcedRelative = !0) : (r.isTouch = !1, r.handleScroll())\n                    }), e.on(\"scrollEnd\", function() {\n                        r.handleScroll()\n                    })\n                }\n                return e.prototype.setSpriteEls = function(e) {\n                    var t = this;\n                    this.clearSprites(), e.each(function(e, r) {\n                        t.addSprite(new i[\"default\"](o(r)))\n                    })\n                }, e.prototype.clearSprites = function() {\n                    this.iterSprites(function(e) {\n                        return e.clear()\n                    }), this.spritesById = {}\n                }, e.prototype.addSprite = function(e) {\n                    e.follower = this, this.spritesById[e.id] = e\n                }, e.prototype.removeSprite = function(e) {\n                    e.clear(), delete this.spritesById[e.id]\n                }, e.prototype.handleScroll = function() {\n                    this.updateViewport(), this.updatePositions()\n                }, e.prototype.cacheDimensions = function() {\n                    this.updateViewport(), this.scrollbarWidths = this.scroller.getScrollbarWidths(), this.contentOffset = this.scroller.canvas.el.offset(), this.iterSprites(function(e) {\n                        return e.cacheDimensions()\n                    })\n                }, e.prototype.updateViewport = function() {\n                    var e = this.scroller,\n                        t = e.getScrollFromLeft(),\n                        r = e.getScrollTop();\n                    return this.viewportRect = {\n                        left: t,\n                        right: t + e.getClientWidth(),\n                        top: r,\n                        bottom: r + e.getClientHeight()\n                    }\n                }, e.prototype.forceRelative = function() {\n                    this.isForcedRelative || (this.isForcedRelative = !0, this.iterSprites(function(e) {\n                        if (e.doAbsolute) return e.assignPosition()\n                    }))\n                }, e.prototype.clearForce = function() {\n                    this.isForcedRelative && !this.isTouch && (this.isForcedRelative = !1, this.iterSprites(function(e) {\n                        return e.assignPosition()\n                    }))\n                }, e.prototype.update = function() {\n                    this.cacheDimensions(), this.updatePositions()\n                }, e.prototype.updatePositions = function() {\n                    this.iterSprites(function(e) {\n                        return e.updatePosition()\n                    })\n                }, e.prototype.getContentRect = function(e) {\n                    return n.getContentRect(e, this.contentOffset)\n                }, e.prototype.getBoundingRect = function(e) {\n                    return n.getOuterRect(e, this.contentOffset)\n                }, e.prototype.iterSprites = function(e) {\n                    for (var t in this.spritesById) {\n                        var r = this.spritesById[t];\n                        e(r, t)\n                    }\n                }, e\n            }();\n        t[\"default\"] = s\n    }, function(e, t, r) {\n        function o(e) {\n            return {\n                left: e.left,\n                right: e.right,\n                top: e.top,\n                bottom: e.bottom\n            }\n        }\n\n        function n(e) {\n            return e.right - e.left\n        }\n\n        function i(e) {\n            return e.bottom - e.top\n        }\n\n        function s(e, t) {\n            return a(e, t) && l(e, t)\n        }\n\n        function a(e, t) {\n            return t.left >= e.left && t.right <= e.right\n        }\n\n        function l(e, t) {\n            return t.top >= e.top && t.bottom <= e.bottom\n        }\n\n        function c(e, t) {\n            return e.left < t.left ? (e.right = t.left + n(e), e.left = t.left, !0) : e.right > t.right && (e.left = t.right - n(e), e.right = t.right, !0)\n        }\n\n        function u(e, t) {\n            return e.top < t.top ? (e.bottom = t.top + i(e), e.top = t.top, !0) : e.bottom > t.bottom && (e.top = t.bottom - i(e), e.bottom = t.bottom, !0)\n        }\n\n        function d(e, t) {\n            return {\n                left: Math.min(e.left, t.left),\n                right: Math.max(e.right, t.right),\n                top: Math.min(e.top, t.top),\n                bottom: Math.max(e.bottom, t.bottom)\n            }\n        }\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        });\n        var h = r(0),\n            p = function() {\n                function e(t) {\n                    this.isEnabled = !0, this.isHFollowing = !1, this.isVFollowing = !1, this.doAbsolute = !1, this.isAbsolute = !1, this.isCentered = !1, this.isBlock = !1, this.el = t, this.id = String(e.uid++), this.isBlock = \"block\" === this.el.css(\"display\"), \"relative\" !== this.el.css(\"position\") && this.el.css(\"position\", \"relative\")\n                }\n                return e.prototype.disable = function() {\n                    this.isEnabled && (this.isEnabled = !1, this.resetPosition(), this.unabsolutize())\n                }, e.prototype.enable = function() {\n                    this.isEnabled || (this.isEnabled = !0, this.assignPosition())\n                }, e.prototype.clear = function() {\n                    this.disable(), this.follower = null, this.absoluteEl = null\n                }, e.prototype.cacheDimensions = function() {\n                    var e = !1,\n                        t = !1,\n                        r = !1;\n                    this.naturalWidth = this.el.width(), this.resetPosition();\n                    var o = this.follower,\n                        s = this.naturalRect = o.getBoundingRect(this.el),\n                        a = this.el.parent();\n                    this.parentRect = o.getBoundingRect(a);\n                    var l = this.containerRect = d(o.getContentRect(a), s),\n                        c = o.minTravel;\n                    o.containOnNaturalLeft && (l.left = s.left), o.containOnNaturalRight && (l.right = s.right), o.isHFollowing && n(l) - n(s) >= c && (r = \"center\" === this.el.css(\"text-align\"), e = !0), o.isVFollowing && i(l) - i(s) >= c && (t = !0), this.isHFollowing = e, this.isVFollowing = t, this.isCentered = r\n                }, e.prototype.updatePosition = function() {\n                    this.computePosition(), this.assignPosition()\n                }, e.prototype.resetPosition = function() {\n                    this.el.css({\n                        top: \"\",\n                        left: \"\"\n                    })\n                }, e.prototype.computePosition = function() {\n                    var e = this.follower.viewportRect,\n                        t = this.parentRect,\n                        r = this.containerRect,\n                        i = h.intersectRects(e, t),\n                        a = null,\n                        l = !1;\n                    if (i) {\n                        a = o(this.naturalRect);\n                        var d = h.intersectRects(a, t);\n                        if (this.isCentered && !s(e, t) || d && !s(e, d)) {\n                            if (l = !0, this.isHFollowing) {\n                                if (this.isCentered) {\n                                    var p = n(a);\n                                    a.left = (i.left + i.right) / 2 - p / 2, a.right = a.left + p\n                                } else c(a, e) || (l = !1);\n                                c(a, r) && (l = !1)\n                            }\n                            this.isVFollowing && (u(a, e) || (l = !1), u(a, r) && (l = !1)), s(e, a) || (l = !1)\n                        }\n                    }\n                    this.rect = a, this.doAbsolute = l\n                }, e.prototype.assignPosition = function() {\n                    if (this.isEnabled)\n                        if (this.rect)\n                            if (this.doAbsolute && !this.follower.isForcedRelative) this.absolutize(), this.absoluteEl.css({\n                                top: this.rect.top - this.follower.viewportRect.top + this.follower.scrollbarWidths.top,\n                                left: this.rect.left - this.follower.viewportRect.left + this.follower.scrollbarWidths.left,\n                                width: this.isBlock ? this.naturalWidth : \"\"\n                            });\n                            else {\n                                var e = this.rect.top - this.naturalRect.top,\n                                    t = this.rect.left - this.naturalRect.left;\n                                this.unabsolutize(), this.el.toggleClass(\"fc-following\", Boolean(e || t)).css({\n                                    top: e,\n                                    left: t\n                                })\n                            }\n                    else this.unabsolutize()\n                }, e.prototype.absolutize = function() {\n                    this.isAbsolute || (this.absoluteEl || (this.absoluteEl = this.buildAbsoluteEl()), this.absoluteEl.appendTo(this.follower.scroller.el), this.el.css(\"visibility\", \"hidden\"), this.isAbsolute = !0)\n                }, e.prototype.unabsolutize = function() {\n                    this.isAbsolute && (this.absoluteEl.detach(), this.el.css(\"visibility\", \"\"), this.isAbsolute = !1)\n                }, e.prototype.buildAbsoluteEl = function() {\n                    var e = this.el.clone().addClass(\"fc-following\");\n                    return e.css({\n                        position: \"absolute\",\n                        \"z-index\": 1e3,\n                        \"font-weight\": this.el.css(\"font-weight\"),\n                        \"font-size\": this.el.css(\"font-size\"),\n                        \"font-family\": this.el.css(\"font-family\"),\n                        \"text-decoration\": this.el.css(\"text-decoration\"),\n                        color: this.el.css(\"color\"),\n                        \"padding-top\": this.el.css(\"padding-top\"),\n                        \"padding-bottom\": this.el.css(\"padding-bottom\"),\n                        \"padding-left\": this.el.css(\"padding-left\"),\n                        \"padding-right\": this.el.css(\"padding-right\")\n                    }), this.follower.allowPointerEvents || e.css(\"pointer-events\", \"none\"), e\n                }, e.uid = 0, e\n            }();\n        t[\"default\"] = p\n    }, function(e, t, r) {\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        });\n        var o = r(1),\n            n = r(2),\n            i = r(0),\n            s = function(e) {\n                function t() {\n                    return null !== e && e.apply(this, arguments) || this\n                }\n                return o.__extends(t, e), t.prototype.attachSegEls = function(e, t) {\n                    if (t.length) {\n                        var r = void 0;\n                        r = \"businessHours\" === e ? \"bgevent\" : e.toLowerCase();\n                        for (var o = n('<div class=\"fc-' + r + '-container\" />').appendTo(this.component.bgSegContainerEl), i = 0, s = t; i < s.length; i++) {\n                            var a = s[i],\n                                l = this.component.rangeToCoords(a);\n                            a.el.css({\n                                left: a.left = l.left,\n                                right: -(a.right = l.right)\n                            }), a.el.appendTo(o)\n                        }\n                        return o\n                    }\n                }, t\n            }(i.FillRenderer);\n        t[\"default\"] = s\n    }, function(e, t, r) {\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        });\n        var o = r(1),\n            n = r(2),\n            i = r(0),\n            s = function(e) {\n                function t() {\n                    return null !== e && e.apply(this, arguments) || this\n                }\n                return o.__extends(t, e), t.prototype.renderSegs = function(e, t) {\n                    for (var r = [], o = 0, i = e; o < i.length; o++) {\n                        var s = i[o],\n                            a = this.component.rangeToCoords(s);\n                        s.el.css({\n                            left: s.left = a.left,\n                            right: -(s.right = a.right)\n                        }), t && t.resourceId === (null != this.component.resource ? this.component.resource.id : void 0) ? s.el.css(\"top\", t.el.css(\"top\")) : s.el.css(\"top\", 0)\n                    }\n                    var l = n('<div class=\"fc-event-container fc-helper-container\"/>').appendTo(this.component.innerEl);\n                    r.push(l[0]);\n                    for (var c = 0, u = e; c < u.length; c++) {\n                        var s = u[c];\n                        l.append(s.el)\n                    }\n                    return n(r)\n                }, t\n            }(i.HelperRenderer);\n        t[\"default\"] = s\n    }, function(e, t, r) {\n        function o(e) {\n            for (var t = {}, r = 0, o = e; r < o.length; r++) {\n                var n = o[r];\n                (t[n.componentFootprint.resourceId] || (t[n.componentFootprint.resourceId] = [])).push(n)\n            }\n            return t\n        }\n\n        function n(e) {\n            for (; e;) {\n                if (!e.isExpanded) return !1;\n                e = e.parent\n            }\n            return !0\n        }\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        });\n        var i = r(1),\n            s = r(2),\n            a = r(0),\n            l = r(16),\n            c = r(6),\n            u = r(9),\n            d = r(14),\n            h = r(43),\n            p = r(45),\n            f = r(18),\n            v = r(46),\n            g = r(47),\n            y = r(31),\n            m = r(33),\n            R = function(e) {\n                function t(t, r) {\n                    var o = e.call(this, t, r) || this;\n                    return o.canHandleSpecificResources = !0, o.isResourceFootprintsEnabled = !0, o.nestingCnt = 0, o.indiBizCnt = 0, o.isIndiBizRendered = !1, o.isGenericBizRendered = !1, o.initResourceView(), o.processResourceOptions(), o.spreadsheet = new h[\"default\"](o), o.rowHierarchy = new f[\"default\"](o), o.rowHierarchy.isExpanded = !0, o.resourceRowHash = {}, o\n                }\n                return i.__extends(t, e), t.prototype.processResourceOptions = function() {\n                    var e = this.opt(\"resourceColumns\") || [],\n                        t = this.opt(\"resourceLabelText\"),\n                        r = \"Resources\",\n                        o = null;\n                    e.length ? o = t : e.push({\n                        labelText: t || r,\n                        text: this.getResourceTextFunc()\n                    });\n                    for (var n = [], i = [], s = [], l = !1, c = !1, u = 0, d = e; u < d.length; u++) {\n                        var h = d[u];\n                        h.group ? i.push(h) : n.push(h)\n                    }\n                    if (n[0].isMain = !0, i.length) s = i, l = !0;\n                    else {\n                        var p = this.opt(\"resourceGroupField\");\n                        p && (c = !0, s.push({\n                            field: p,\n                            text: this.opt(\"resourceGroupText\"),\n                            render: this.opt(\"resourceGroupRender\")\n                        }))\n                    }\n                    for (var f = a.parseFieldSpecs(this.opt(\"resourceOrder\")), v = [], g = 0, y = f; g < y.length; g++) {\n                        for (var m = y[g], R = !1, w = 0, b = s; w < b.length; w++) {\n                            var S = b[w];\n                            if (S.field === m.field) {\n                                S.order = m.order, R = !0;\n                                break\n                            }\n                        }\n                        R || v.push(m)\n                    }\n                    this.superHeaderText = o, this.isVGrouping = l, this.isHGrouping = c, this.groupSpecs = s, this.colSpecs = i.concat(n), this.orderSpecs = v\n                }, t.prototype.renderSkeleton = function() {\n                    e.prototype.renderSkeleton.call(this);\n                    var t = this.calendar.theme;\n                    this.spreadsheet.el = this.el.find(\"tbody .fc-resource-area\"), this.spreadsheet.headEl = this.el.find(\"thead .fc-resource-area\"), this.spreadsheet.renderSkeleton(), this.segContainerEl.remove(), this.segContainerEl = null;\n                    var r = s('<div class=\"fc-rows\"> <table class=\"' + t.getClass(\"tableGrid\") + '\"> <tbody/> </table> </div>').appendTo(this.timeBodyScroller.canvas.contentEl);\n                    this.timeBodyTbodyEl = r.find(\"tbody\"), this.tbodyHash = {\n                        spreadsheet: this.spreadsheet.tbodyEl,\n                        event: this.timeBodyTbodyEl\n                    }, this.resourceScrollJoiner = new l[\"default\"](\"vertical\", [this.spreadsheet.bodyScroller, this.timeBodyScroller]), this.initDividerMoving()\n                }, t.prototype.renderSkeletonHtml = function() {\n                    var e = this.calendar.theme;\n                    return '<table class=\"' + e.getClass(\"tableGrid\") + '\"> <thead class=\"fc-head\"> <tr> <td class=\"fc-resource-area ' + e.getClass(\"widgetHeader\") + '\"></td> <td class=\"fc-divider fc-col-resizer ' + e.getClass(\"widgetHeader\") + '\"></td> <td class=\"fc-time-area ' + e.getClass(\"widgetHeader\") + '\"></td> </tr> </thead> <tbody class=\"fc-body\"> <tr> <td class=\"fc-resource-area ' + e.getClass(\"widgetContent\") + '\"></td> <td class=\"fc-divider fc-col-resizer ' + e.getClass(\"widgetHeader\") + '\"></td> <td class=\"fc-time-area ' + e.getClass(\"widgetContent\") + '\"></td> </tr> </tbody> </table>'\n                }, t.prototype.initDividerMoving = function() {\n                    var e = this,\n                        t = this.opt(\"resourceAreaWidth\");\n                    this.dividerEls = this.el.find(\".fc-divider\"), this.dividerWidth = null != t ? t : this.spreadsheet.tableWidth, null != this.dividerWidth && this.positionDivider(this.dividerWidth), this.dividerEls.on(\"mousedown\", function(t) {\n                        e.dividerMousedown(t)\n                    })\n                }, t.prototype.dividerMousedown = function(e) {\n                    var t = this,\n                        r = this.opt(\"isRTL\"),\n                        o = 30,\n                        n = this.el.width() - 30,\n                        i = this.getNaturalDividerWidth(),\n                        s = new a.DragListener({\n                            dragStart: function() {\n                                t.dividerEls.addClass(\"fc-active\")\n                            },\n                            drag: function(e, s) {\n                                var a;\n                                a = r ? i - e : i + e, a = Math.max(a, o), a = Math.min(a, n), t.dividerWidth = a, t.positionDivider(a), t.calendar.updateViewSize()\n                            },\n                            dragEnd: function() {\n                                t.dividerEls.removeClass(\"fc-active\")\n                            }\n                        });\n                    s.startInteraction(e)\n                }, t.prototype.getNaturalDividerWidth = function() {\n                    return this.el.find(\".fc-resource-area\").width()\n                }, t.prototype.positionDivider = function(e) {\n                    this.el.find(\".fc-resource-area\").css(\"width\", e)\n                }, t.prototype.updateSize = function(t, r, o) {\n                    var n;\n                    this.rowsNeedingHeightSync ? (this.syncRowHeights(this.rowsNeedingHeightSync), this.rowsNeedingHeightSync = null) : this.syncRowHeights();\n                    var i = this.syncHeadHeights();\n                    n = r ? \"auto\" : t - i - this.queryMiscHeight(), this.timeBodyScroller.setHeight(n), this.spreadsheet.bodyScroller.setHeight(n), this.spreadsheet.updateSize(), e.prototype.updateSize.call(this, t, r, o), this.resourceScrollJoiner.update()\n                }, t.prototype.queryMiscHeight = function() {\n                    return this.el.outerHeight() - Math.max(this.spreadsheet.headScroller.el.outerHeight(), this.timeHeadScroller.el.outerHeight()) - Math.max(this.spreadsheet.bodyScroller.el.outerHeight(), this.timeBodyScroller.el.outerHeight())\n                }, t.prototype.syncHeadHeights = function() {\n                    this.spreadsheet.headHeight(\"auto\"), this.headHeight(\"auto\");\n                    var e = Math.max(this.spreadsheet.headHeight(), this.headHeight());\n                    return this.spreadsheet.headHeight(e), this.headHeight(e), e\n                }, t.prototype.queryResourceScroll = function() {\n                    for (var e = {}, t = this.timeBodyScroller.scrollEl.offset().top, r = 0, o = this.getVisibleRows(); r < o.length; r++) {\n                        var n = o[r];\n                        if (n.resource) {\n                            var i = n.getTr(\"event\"),\n                                s = i.offset().top + i.outerHeight();\n                            if (s > t) {\n                                e.resourceId = n.resource.id, e.bottom = s - t;\n                                break\n                            }\n                        }\n                    }\n                    return e\n                }, t.prototype.applyResourceScroll = function(e) {\n                    if (e.resourceId) {\n                        var t = this.getResourceRow(e.resourceId);\n                        if (t) {\n                            var r = t.getTr(\"event\");\n                            if (r) {\n                                var o = this.timeBodyScroller.canvas.el.offset().top,\n                                    n = r.offset().top + r.outerHeight(),\n                                    i = n - e.bottom - o;\n                                this.timeBodyScroller.setScrollTop(i), this.spreadsheet.bodyScroller.setScrollTop(i)\n                            }\n                        }\n                    }\n                }, t.prototype.scrollToResource = function(e) {\n                    var t = this.getResourceRow(e.id);\n                    if (t) {\n                        var r = t.getTr(\"event\");\n                        if (r) {\n                            var o = this.timeBodyScroller.canvas.el.offset().top,\n                                n = r.offset().top - o;\n                            this.timeBodyScroller.setScrollTop(n), this.spreadsheet.bodyScroller.setScrollTop(n)\n                        }\n                    }\n                }, t.prototype.prepareHits = function() {\n                    var t = [];\n                    e.prototype.prepareHits.call(this), this.eventRows = this.getEventRows(), this.eventRows.forEach(function(e) {\n                        e.get(\"isInDom\") && t.push(e)\n                    });\n                    var r = t.map(function(e) {\n                        return e.getTr(\"event\")[0]\n                    });\n                    this.shownEventRows = t, this.rowCoordCache = new a.CoordCache({\n                        els: r,\n                        isVertical: !0\n                    }), this.rowCoordCache.build()\n                }, t.prototype.releaseHits = function() {\n                    e.prototype.releaseHits.call(this), this.eventRows = null, this.shownEventRows = null, this.rowCoordCache.clear()\n                }, t.prototype.queryHit = function(t, r) {\n                    var o = e.prototype.queryHit.call(this, t, r);\n                    if (o) {\n                        var n = this.rowCoordCache.getVerticalIndex(r);\n                        if (null != n) return {\n                            resourceId: this.shownEventRows[n].resource.id,\n                            snap: o.snap,\n                            component: this,\n                            left: o.left,\n                            right: o.right,\n                            top: this.rowCoordCache.getTopOffset(n),\n                            bottom: this.rowCoordCache.getBottomOffset(n)\n                        }\n                    }\n                }, t.prototype.getHitFootprint = function(t) {\n                    var r = e.prototype.getHitFootprint.call(this, t);\n                    return new c[\"default\"](r.unzonedRange, r.isAllDay, t.resourceId)\n                }, t.prototype.getHitEl = function(e) {\n                    return this.getSnapEl(e.snap)\n                }, t.prototype.renderResources = function(e) {\n                    for (var t = 0, r = e; t < r.length; t++) {\n                        var o = r[t];\n                        this.renderResource(o)\n                    }\n                }, t.prototype.unrenderResources = function() {\n                    this.rowHierarchy.removeElement(), this.rowHierarchy.removeChildren();\n                    for (var e in this.resourceRowHash) this.removeChild(this.resourceRowHash[e]);\n                    this.resourceRowHash = {}\n                }, t.prototype.renderResource = function(e) {\n                    this.insertResource(e)\n                }, t.prototype.unrenderResource = function(e) {\n                    this.removeResource(e)\n                }, t.prototype.executeEventRender = function(e) {\n                    var t, r = {},\n                        o = {};\n                    for (var n in e) {\n                        var i = e[n],\n                            s = i.getEventDef(),\n                            a = s.getResourceIds();\n                        if (a.length)\n                            for (var l = 0, c = a; l < c.length; l++) {\n                                t = c[l];\n                                var u = r[t] || (r[t] = {});\n                                u[n] = i\n                            } else s.hasBgRendering() && (o[n] = i)\n                    }\n                    this.eventRenderer.render(o);\n                    for (t in r) {\n                        var d = r[t],\n                            h = this.getResourceRow(t);\n                        h && h.executeEventRender(d)\n                    }\n                }, t.prototype.renderBusinessHours = function(e) {\n                    if (this.genericBiz = e, this.isIndiBizRendered = !1, this.isGenericBizRendered = !1, this.indiBizCnt) {\n                        this.isIndiBizRendered = !0;\n                        for (var t = 0, r = this.getEventRows(); t < r.length; t++) {\n                            var o = r[t];\n                            o.renderBusinessHours(o.resource.businessHourGenerator || e)\n                        }\n                    } else this.isGenericBizRendered = !0, this.businessHourRenderer.render(e)\n                }, t.prototype.updateIndiBiz = function() {\n                    (this.indiBizCnt && this.isGenericBizRendered || !this.indiBizCnt && this.isIndiBizRendered) && (this.unrenderBusinessHours(), this.renderBusinessHours(this.genericBiz))\n                }, t.prototype.insertResource = function(e, t) {\n                    var r = !t,\n                        o = new v[\"default\"](this, e);\n                    t || (e.parent ? t = this.getResourceRow(e.parent.id) : e.parentId && (t = this.getResourceRow(e.parentId))), t ? this.insertRowAsChild(o, t) : this.insertRow(o), this.addChild(o), this.resourceRowHash[e.id] = o, e.businessHourGenerator && (this.indiBizCnt++, this.isIndiBizRendered && (o.businessHourGenerator = e.businessHourGenerator), this.updateIndiBiz());\n                    for (var i = 0, s = e.children; i < s.length; i++) {\n                        var a = s[i];\n                        this.insertResource(a, o)\n                    }\n                    return r && n(o.parent) && o.renderSkeleton(), o\n                }, t.prototype.removeResource = function(e) {\n                    var t = this.resourceRowHash[e.id];\n                    return t && (delete this.resourceRowHash[e.id], this.removeChild(t), t.removeFromParentAndDom(), e.businessHourGenerator && (this.indiBizCnt--, this.updateIndiBiz())), t\n                }, t.prototype.insertRow = function(e, t, r) {\n                    if (void 0 === t && (t = this.rowHierarchy), void 0 === r && (r = this.groupSpecs), r.length) {\n                        var o = this.ensureResourceGroup(e, t, r[0]);\n                        o instanceof g[\"default\"] ? this.insertRowAsChild(e, o) : this.insertRow(e, o, r.slice(1))\n                    } else this.insertRowAsChild(e, t)\n                }, t.prototype.insertRowAsChild = function(e, t) {\n                    return t.addChildRowNode(e, this.computeChildRowPosition(e, t))\n                }, t.prototype.computeChildRowPosition = function(e, t) {\n                    if (this.orderSpecs.length)\n                        for (var r = 0; r < t.children.length; r++) {\n                            var o = t.children[r],\n                                n = this.compareResources(o.resource || {}, e.resource || {});\n                            if (n > 0) return r\n                        }\n                    return null\n                }, t.prototype.compareResources = function(e, t) {\n                    return a.compareByFieldSpecs(e, t, this.orderSpecs)\n                }, t.prototype.ensureResourceGroup = function(e, t, r) {\n                    var o, n, i = (e.resource || {})[r.field],\n                        s = null;\n                    if (r.order)\n                        for (o = 0; o < t.children.length; o++) {\n                            n = t.children[o];\n                            var l = a.flexibleCompare(n.groupValue, i) * r.order;\n                            if (0 === l) {\n                                s = n;\n                                break\n                            }\n                            if (l > 0) break\n                        } else\n                            for (o = 0; o < t.children.length; o++)\n                                if (n = t.children[o], n.groupValue === i) {\n                                    s = n;\n                                    break\n                                } return s || (s = this.isVGrouping ? new y[\"default\"](this, r, i) : new g[\"default\"](this, r, i), t.addChildRowNode(s, o), s.renderSkeleton()), s\n                }, t.prototype.descendantAdded = function(e) {\n                    var t = this.isNesting,\n                        r = Boolean(this.nestingCnt += e.depth ? 1 : 0);\n                    t !== r && (this.el.toggleClass(\"fc-nested\", r).toggleClass(\"fc-flat\", !r), this.isNesting = r)\n                }, t.prototype.descendantRemoved = function(e) {\n                    var t = this.isNesting,\n                        r = Boolean(this.nestingCnt -= e.depth ? 1 : 0);\n                    t !== r && (this.el.toggleClass(\"fc-nested\", r).toggleClass(\"fc-flat\", !r), this.isNesting = r)\n                }, t.prototype.descendantShown = function(e) {\n                    (this.rowsNeedingHeightSync || (this.rowsNeedingHeightSync = [])).push(e)\n                }, t.prototype.descendantHidden = function(e) {\n                    this.rowsNeedingHeightSync || (this.rowsNeedingHeightSync = [])\n                }, t.prototype.syncRowHeights = function(e, t) {\n                    void 0 === e && (e = this.getVisibleRows()), void 0 === t && (t = !1);\n                    for (var r = 0, o = e; r < o.length; r++) {\n                        var n = o[r];\n                        n.setTrInnerHeight(\"\")\n                    }\n                    for (var i = e.map(function(e) {\n                            var r = e.getMaxTrInnerHeight();\n                            return t && (r += r % 2), r\n                        }), s = 0; s < e.length; s++) {\n                        var n = e[s];\n                        n.setTrInnerHeight(i[s])\n                    }\n                    if (!t) {\n                        var a = this.spreadsheet.tbodyEl.height(),\n                            l = this.timeBodyTbodyEl.height();\n                        Math.abs(a - l) > 1 && this.syncRowHeights(e, !0)\n                    }\n                }, t.prototype.getVisibleRows = function() {\n                    for (var e = [], t = 0, r = this.rowHierarchy.getRows(); t < r.length; t++) {\n                        var o = r[t];\n                        o.get(\"isInDom\") && e.push(o)\n                    }\n                    return e\n                }, t.prototype.getEventRows = function() {\n                    return this.rowHierarchy.getRows().filter(function(e) {\n                        return e instanceof m[\"default\"]\n                    })\n                }, t.prototype.getResourceRow = function(e) {\n                    return this.resourceRowHash[e]\n                }, t.prototype.renderSelectionFootprint = function(t) {\n                    if (!t.resourceId) return e.prototype.renderSelectionFootprint.call(this, t);\n                    var r = this.getResourceRow(t.resourceId);\n                    return r ? r.renderSelectionFootprint(t) : void 0\n                }, t.prototype.renderEventResize = function(e, t, r) {\n                    var n = o(e);\n                    for (var i in n) {\n                        var s = n[i],\n                            a = this.getResourceRow(i);\n                        a.helperRenderer.renderEventDraggingFootprints(s, t, r);\n                        for (var l = 0, c = s; l < c.length; l++) {\n                            var u = c[l];\n                            a.renderHighlight(u.componentFootprint)\n                        }\n                    }\n                }, t.prototype.unrenderEventResize = function() {\n                    for (var e = 0, t = this.getEventRows(); e < t.length; e++) {\n                        var r = t[e];\n                        r.helperRenderer.unrender(), r.unrenderHighlight()\n                    }\n                }, t.prototype.renderDrag = function(e, t, r) {\n                    var n, i, s, a = o(e);\n                    if (t) {\n                        for (i in a) n = a[i], s = this.getResourceRow(i), s.helperRenderer.renderEventDraggingFootprints(n, t, r);\n                        return !0\n                    }\n                    for (i in a) {\n                        n = a[i];\n                        for (var l = 0, c = n; l < c.length; l++) {\n                            var u = c[l];\n                            s = this.getResourceRow(i), s.renderHighlight(u.componentFootprint)\n                        }\n                    }\n                    return !1\n                }, t.prototype.unrenderDrag = function() {\n                    for (var e = 0, t = this.getEventRows(); e < t.length; e++) {\n                        var r = t[e];\n                        r.helperRenderer.unrender(), r.unrenderHighlight()\n                    }\n                }, t\n            }(d[\"default\"]);\n        t[\"default\"] = R, R.prototype.eventRendererClass = p[\"default\"], u[\"default\"].mixInto(R)\n    }, function(e, t, r) {\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        });\n        var o = r(1),\n            n = r(2),\n            i = r(32),\n            s = function(e) {\n                function t(t, r, o) {\n                    var n = e.call(this, t, r, o) || this;\n                    return n.rowspan = 0, n\n                }\n                return o.__extends(t, e), t.prototype.renderRowspan = function() {\n                    var e, t = this.view.calendar.theme;\n                    this.rowspan ? (this.groupTd || (this.groupTd = n('<td class=\"' + t.getClass(\"widgetContent\") + '\"/>').append(this.renderGroupContentEl())), this.groupTd.attr(\"rowspan\", this.rowspan), e = this.getLeadingRow().getTr(\"spreadsheet\"), e !== this.leadingTr && (e && e.prepend(this.groupTd), this.leadingTr = e)) : (this.groupTd && (this.groupTd.remove(), this.groupTd = null), this.leadingTr = null)\n                }, t.prototype.descendantShown = function(t) {\n                    this.rowspan += 1, this.renderRowspan(), e.prototype.descendantShown.call(this, t)\n                }, t.prototype.descendantHidden = function(t) {\n                    this.rowspan -= 1, this.renderRowspan(), e.prototype.descendantHidden.call(this, t)\n                }, t\n            }(i[\"default\"]);\n        t[\"default\"] = s\n    }, function(e, t, r) {\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        });\n        var o = r(1),\n            n = r(2),\n            i = r(18),\n            s = function(e) {\n                function t(t, r, o) {\n                    var n = e.call(this, t) || this;\n                    return n.groupSpec = r, n.groupValue = o, n\n                }\n                return o.__extends(t, e), t.prototype.descendantRemoved = function(t) {\n                    e.prototype.descendantRemoved.call(this, t), this.children.length || this.removeFromParentAndDom()\n                }, t.prototype.renderGroupContentEl = function() {\n                    var e = n('<div class=\"fc-cell-content\" />').append(this.renderGroupTextEl()),\n                        t = this.groupSpec.render;\n                    return \"function\" == typeof t && (e = t(e, this.groupValue) || e), e\n                }, t.prototype.renderGroupTextEl = function() {\n                    var e = this.groupValue || \"\",\n                        t = this.groupSpec.text;\n                    return \"function\" == typeof t && (e = t(e) || e), n('<span class=\"fc-cell-text\" />').text(e)\n                }, t\n            }(i[\"default\"]);\n        t[\"default\"] = s\n    }, function(e, t, r) {\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        });\n        var o = r(1),\n            n = r(0),\n            i = r(18),\n            s = r(28),\n            a = r(17),\n            l = r(29),\n            c = function(e) {\n                function t() {\n                    return null !== e && e.apply(this, arguments) || this\n                }\n                return o.__extends(t, e), t.prototype.renderEventSkeleton = function(e) {\n                    var t = this.view.calendar.theme;\n                    e.html('<td class=\"' + t.getClass(\"widgetContent\") + '\"> <div> <div class=\"fc-event-container\" /> </div> </td>'), this.segContainerEl = e.find(\".fc-event-container\"), this.innerEl = this.bgSegContainerEl = e.find(\"td > div\")\n                }, t.prototype.rangeToCoords = function(e) {\n                    return this.view.rangeToCoords(e)\n                }, t.prototype.componentFootprintToSegs = function(e) {\n                    return this.view.componentFootprintToSegs(e)\n                }, t\n            }(i[\"default\"]);\n        t[\"default\"] = c, c.prototype.fillRendererClass = s[\"default\"], c.prototype.eventRendererClass = a[\"default\"], c.prototype.helperRendererClass = l[\"default\"], c.prototype.businessHourRendererClass = n.BusinessHourRenderer, c.prototype.hasOwnRow = !0\n    }, , , function(e, t, r) {\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        });\n        var o = r(0);\n        r(37), r(48), r(50), r(51), r(53), r(54), r(55), r(56), r(57), r(58), r(59), r(60), r(61), r(62), r(63), r(64), r(65), r(66), r(67), r(68);\n        var n = \"1.9.4\";\n        if (o.schedulerVersion = n, 12 !== o.internalApiVersion) throw new Error(\"v\" + n + \" of FullCalendar Scheduler is incompatible with v\" + o.version + \"\")\n    }, function(e, t, r) {\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        });\n        var o = r(0),\n            n = r(20),\n            i = r(22),\n            s = r(23),\n            a = r(14),\n            l = r(30);\n        o.ResourceAgendaView = n[\"default\"], o.ResourceBasicView = i[\"default\"], o.ResourceMonthView = s[\"default\"], o.TimelineView = a[\"default\"], o.ResourceTimelineView = l[\"default\"]\n    }, function(e, t, r) {\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        });\n        var o = r(1),\n            n = r(2),\n            i = r(0),\n            s = r(21),\n            a = r(6),\n            l = function(e) {\n                function t(t) {\n                    var r = e.call(this, t) || this;\n                    return r.isResourceFootprintsEnabled = !0, r\n                }\n                return o.__extends(t, e), t.prototype.renderDates = function(e) {\n                    this.dateProfile = e, this.renderSlats()\n                }, t.prototype.renderResources = function(e) {\n                    this.registerResources(e), this.renderColumns(), this.headContainerEl && this.processHeadResourceEls(this.headContainerEl)\n                }, t.prototype.getHitFootprint = function(t) {\n                    var r = e.prototype.getHitFootprint.call(this, t);\n                    return new a[\"default\"](r.unzonedRange, r.isAllDay, this.getColResource(t.col).id)\n                }, t.prototype.componentFootprintToSegs = function(e) {\n                    for (var t = this.resourceCnt, r = this.sliceRangeByTimes(e.unzonedRange), o = [], i = 0, s = r; i < s.length; i++)\n                        for (var l = s[i], c = 0; c < t; c++) {\n                            var u = this.flattenedResources[c];\n                            if (!(e instanceof a[\"default\"]) || e.resourceId === u.id) {\n                                var d = n.extend({}, l);\n                                d.resource = u, d.col = this.indicesToCol(c, l.dayIndex), o.push(d)\n                            }\n                        }\n                    return o\n                }, t\n            }(i.TimeGrid);\n        t[\"default\"] = l, s[\"default\"].mixInto(l)\n    }, function(e, t, r) {\n        function o() {\n            var e = i('<div style=\" position: absolute; top: -1000px; width: 1px; height: 1px; overflow: scroll; direction: rtl; font-size: 100px; \">A</div>').appendTo(\"body\"),\n                t = e[0],\n                r = function() {\n                    return t.scrollLeft > 0 ? \"positive\" : (t.scrollLeft = 1, t.scrollLeft > 0 ? \"reverse\" : \"negative\")\n                }();\n            return e.remove(), r\n        }\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        });\n        var n = r(1),\n            i = r(2),\n            s = r(0),\n            a = null,\n            l = function(e) {\n                function t(t) {\n                    var r = e.call(this, t) || this;\n                    return r.isScrolling = !1, r.isTouching = !1, r.isTouchedEver = !1, r.isMoving = !1, r.isTouchScrollEnabled = !0, r.requestMovingEnd = s.debounce(r.reportMovingEnd, 500), r\n                }\n                return n.__extends(t, e), t.prototype.render = function() {\n                    e.prototype.render.call(this), this.canvas && (this.canvas.render(), this.canvas.el.appendTo(this.scrollEl)), this.bindHandlers()\n                }, t.prototype.destroy = function() {\n                    e.prototype.destroy.call(this), this.unbindHandlers()\n                }, t.prototype.disableTouchScroll = function() {\n                    this.isTouchScrollEnabled = !1, this.bindPreventTouchScroll()\n                }, t.prototype.enableTouchScroll = function() {\n                    this.isTouchScrollEnabled = !0, this.isTouching || this.unbindPreventTouchScroll()\n                }, t.prototype.bindPreventTouchScroll = function() {\n                    this.preventTouchScrollHandler || this.scrollEl.on(\"touchmove\", this.preventTouchScrollHandler = s.preventDefault)\n                }, t.prototype.unbindPreventTouchScroll = function() {\n                    this.preventTouchScrollHandler && (this.scrollEl.off(\"touchmove\", this.preventTouchScrollHandler), this.preventTouchScrollHandler = null)\n                }, t.prototype.bindHandlers = function() {\n                    return this.listenTo(this.scrollEl, {\n                        scroll: this.reportScroll,\n                        touchstart: this.reportTouchStart,\n                        touchend: this.reportTouchEnd\n                    })\n                }, t.prototype.unbindHandlers = function() {\n                    return this.stopListeningTo(this.scrollEl)\n                }, t.prototype.reportScroll = function() {\n                    this.isScrolling || this.reportScrollStart(), this.trigger(\"scroll\"), this.isMoving = !0, this.requestMovingEnd()\n                }, t.prototype.reportScrollStart = function() {\n                    this.isScrolling || (this.isScrolling = !0, this.trigger(\"scrollStart\", this.isTouching))\n                }, t.prototype.reportMovingEnd = function() {\n                    this.isMoving = !1, this.isTouching || this.reportScrollEnd()\n                }, t.prototype.reportScrollEnd = function() {\n                    this.isScrolling && (this.trigger(\"scrollEnd\"), this.isScrolling = !1)\n                }, t.prototype.reportTouchStart = function() {\n                    this.isTouching = !0, this.isTouchedEver = !0\n                }, t.prototype.reportTouchEnd = function() {\n                    this.isTouching && (this.isTouching = !1, this.isTouchScrollEnabled && this.unbindPreventTouchScroll(), this.isMoving || this.reportScrollEnd())\n                }, t.prototype.getScrollLeft = function() {\n                    var e = this.scrollEl.css(\"direction\"),\n                        t = this.scrollEl[0],\n                        r = t.scrollLeft;\n                    if (\"rtl\" === e) switch (a) {\n                        case \"positive\":\n                            r = r + t.clientWidth - t.scrollWidth;\n                            break;\n                        case \"reverse\":\n                            r = -r\n                    }\n                    return r\n                }, t.prototype.setScrollLeft = function(e) {\n                    var t = this.scrollEl.css(\"direction\"),\n                        r = this.scrollEl[0];\n                    if (\"rtl\" === t) switch (a) {\n                        case \"positive\":\n                            e = e - r.clientWidth + r.scrollWidth;\n                            break;\n                        case \"reverse\":\n                            e = -e\n                    }\n                    r.scrollLeft = e\n                }, t.prototype.getScrollFromLeft = function() {\n                    var e = this.scrollEl.css(\"direction\"),\n                        t = this.scrollEl[0],\n                        r = t.scrollLeft;\n                    if (\"rtl\" === e) switch (a) {\n                        case \"negative\":\n                            r = r - t.clientWidth + t.scrollWidth;\n                            break;\n                        case \"reverse\":\n                            r = -r - t.clientWidth + t.scrollWidth\n                    }\n                    return r\n                }, t.prototype.getNativeScrollLeft = function() {\n                    return this.scrollEl[0].scrollLeft\n                }, t.prototype.setNativeScrollLeft = function(e) {\n                    this.scrollEl[0].scrollLeft = e\n                }, t\n            }(s.Scroller);\n        t[\"default\"] = l, s.EmitterMixin.mixInto(l), s.ListenerMixin.mixInto(l), i(function() {\n            a = o()\n        })\n    }, function(e, t, r) {\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        });\n        var o = r(1),\n            n = r(0),\n            i = function(e) {\n                function t() {\n                    return null !== e && e.apply(this, arguments) || this\n                }\n                return o.__extends(t, e), t.prototype.segDragStart = function(t, r) {\n                    e.prototype.segDragStart.call(this, t, r), this.component.eventTitleFollower && this.component.eventTitleFollower.forceRelative()\n                }, t.prototype.segDragStop = function(t, r) {\n                    e.prototype.segDragStop.call(this, t, r), this.component.eventTitleFollower && this.component.eventTitleFollower.clearForce()\n                }, t\n            }(n.EventDragging);\n        t[\"default\"] = i\n    }, function(e, t, r) {\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        });\n        var o = r(1),\n            n = r(0),\n            i = function(e) {\n                function t() {\n                    return null !== e && e.apply(this, arguments) || this\n                }\n                return o.__extends(t, e), t.prototype.segResizeStart = function(t, r) {\n                    if (e.prototype.segResizeStart.call(this, t, r), this.component.eventTitleFollower) return this.component.eventTitleFollower.forceRelative()\n                }, t.prototype.segResizeStop = function(t, r) {\n                    if (e.prototype.segResizeStop.call(this, t, r), this.component.eventTitleFollower) return this.component.eventTitleFollower.clearForce()\n                }, t\n            }(n.EventResizing);\n        t[\"default\"] = i\n    }, function(e, t, r) {\n        function o(e) {\n            e.labelInterval = n(e, \"slotLabelInterval\"), e.slotDuration = n(e, \"slotDuration\"), i(e), s(e), a(e);\n            var t = e.opt(\"slotLabelFormat\"),\n                r = c.type(t);\n            e.headerFormats = \"array\" === r ? t : \"string\" === r ? [t] : l(e), e.isTimeScale = d.durationHasTime(e.slotDuration);\n            var o = null;\n            if (!e.isTimeScale) {\n                var h = d.computeGreatestUnit(e.slotDuration);\n                /year|month|week/.test(h) && (o = h)\n            }\n            e.largeUnit = o, e.emphasizeWeeks = 1 === e.slotDuration.as(\"days\") && e.currentRangeAs(\"weeks\") >= 2 && !e.opt(\"businessHours\");\n            var p = e.opt(\"snapDuration\");\n            e.snapDuration = p ? u.duration(p) : e.slotDuration, e.snapsPerSlot = d.divideDurationByDuration(e.slotDuration, e.snapDuration)\n        }\n\n        function n(e, t) {\n            var r = e.opt(t);\n            if (null != r) {\n                var o = u.duration(r);\n                if (+o) return o\n            }\n        }\n\n        function i(e) {\n            var t = e.dateProfile.currentUnzonedRange;\n            if (e.labelInterval) {\n                var r = d.divideRangeByDuration(t.getStart(), t.getEnd(), e.labelInterval);\n                r > d.MAX_TIMELINE_SLOTS && (d.warn(\"slotLabelInterval results in too many cells\"), e.labelInterval = null)\n            }\n            if (e.slotDuration) {\n                var o = d.divideRangeByDuration(t.getStart(), t.getEnd(), e.slotDuration);\n                o > d.MAX_TIMELINE_SLOTS && (d.warn(\"slotDuration results in too many cells\"), e.slotDuration = null)\n            }\n            if (e.labelInterval && e.slotDuration) {\n                var n = d.divideDurationByDuration(e.labelInterval, e.slotDuration);\n                if (!d.isInt(n) || n < 1) return d.warn(\"slotLabelInterval must be a multiple of slotDuration\"), e.slotDuration = null\n            }\n        }\n\n        function s(e) {\n            var t = e.dateProfile.currentUnzonedRange,\n                r = e.labelInterval;\n            if (!r) {\n                var o = void 0;\n                if (e.slotDuration) {\n                    for (var n = 0, i = v; n < i.length; n++) {\n                        o = i[n];\n                        var s = u.duration(o),\n                            a = d.divideDurationByDuration(s, e.slotDuration);\n                        if (d.isInt(a) && a <= p) {\n                            r = s;\n                            break\n                        }\n                    }\n                    r || (r = e.slotDuration)\n                } else\n                    for (var l = 0, c = v; l < c.length; l++) {\n                        o = c[l], r = u.duration(o);\n                        var f = d.divideRangeByDuration(t.getStart(), t.getEnd(), r);\n                        if (f >= h) break\n                    }\n                e.labelInterval = r\n            }\n            return r\n        }\n\n        function a(e) {\n            var t = e.dateProfile.currentUnzonedRange,\n                r = e.slotDuration;\n            if (!r) {\n                for (var o = s(e), n = 0, i = v; n < i.length; n++) {\n                    var a = i[n],\n                        l = u.duration(a),\n                        c = d.divideDurationByDuration(o, l);\n                    if (d.isInt(c) && c > 1 && c <= p) {\n                        r = l;\n                        break\n                    }\n                }\n                if (r) {\n                    var h = d.divideRangeByDuration(t.getStart(), t.getEnd(), r);\n                    h > f && (r = null)\n                }\n                r || (r = o), e.slotDuration = r\n            }\n            return r\n        }\n\n        function l(e) {\n            var t, r, o = e.labelInterval,\n                n = d.computeGreatestUnit(o),\n                i = e.opt(\"weekNumbers\"),\n                s = t = r = null;\n            switch (\"week\" !== n || i || (n = \"day\"), n) {\n                case \"year\":\n                    s = \"YYYY\";\n                    break;\n                case \"month\":\n                    e.currentRangeAs(\"years\") > 1 && (s = \"YYYY\"), t = \"MMM\";\n                    break;\n                case \"week\":\n                    e.currentRangeAs(\"years\") > 1 && (s = \"YYYY\"), t = e.opt(\"shortWeekFormat\");\n                    break;\n                case \"day\":\n                    e.currentRangeAs(\"years\") > 1 ? s = e.opt(\"monthYearFormat\") : e.currentRangeAs(\"months\") > 1 && (s = \"MMMM\"), i && (t = e.opt(\"weekFormat\")), r = \"dd D\";\n                    break;\n                case \"hour\":\n                    i && (s = e.opt(\"weekFormat\")), e.currentRangeAs(\"days\") > 1 && (t = e.opt(\"dayOfMonthFormat\")), r = e.opt(\"smallTimeFormat\");\n                    break;\n                case \"minute\":\n                    o.asMinutes() / 60 >= p ? (s = e.opt(\"hourFormat\"), t = \"[:]mm\") : s = e.opt(\"mediumTimeFormat\");\n                    break;\n                case \"second\":\n                    o.asSeconds() / 60 >= p ? (s = \"LT\", t = \"[:]ss\") : s = \"LTS\";\n                    break;\n                case \"millisecond\":\n                    s = \"LTS\", t = \"[.]SSS\"\n            }\n            return [].concat(s || [], t || [], r || [])\n        }\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        });\n        var c = r(2),\n            u = r(15),\n            d = r(0),\n            h = 18,\n            p = 6,\n            f = 200;\n        d.MAX_TIMELINE_SLOTS = 1e3;\n        var v = [{\n            years: 1\n        }, {\n            months: 1\n        }, {\n            days: 1\n        }, {\n            hours: 1\n        }, {\n            minutes: 30\n        }, {\n            minutes: 15\n        }, {\n            minutes: 10\n        }, {\n            minutes: 5\n        }, {\n            minutes: 1\n        }, {\n            seconds: 30\n        }, {\n            seconds: 15\n        }, {\n            seconds: 10\n        }, {\n            seconds: 5\n        }, {\n            seconds: 1\n        }, {\n            milliseconds: 500\n        }, {\n            milliseconds: 100\n        }, {\n            milliseconds: 10\n        }, {\n            milliseconds: 1\n        }];\n        t.initScaleProps = o\n    }, function(e, t, r) {\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        });\n        var o = r(2),\n            n = r(0),\n            i = r(24),\n            s = r(25),\n            a = r(16),\n            l = r(26),\n            c = r(31),\n            u = 30,\n            d = function() {\n                function e(e) {\n                    this.colGroupHtml = \"\", this.view = e, this.isRTL = this.view.opt(\"isRTL\"), this.givenColWidths = this.colWidths = this.view.colSpecs.map(function(e) {\n                        return e.width\n                    })\n                }\n                return e.prototype.renderSkeleton = function() {\n                    var e = this.view.calendar.theme;\n                    this.headScroller = new i[\"default\"]({\n                        overflowX: \"clipped-scroll\",\n                        overflowY: \"hidden\"\n                    }), this.headScroller.canvas = new s[\"default\"], this.headScroller.render(), this.headScroller.canvas.contentEl.html(this.renderHeadHtml()), this.headEl.append(this.headScroller.el), this.bodyScroller = new i[\"default\"]({\n                        overflowY: \"clipped-scroll\"\n                    }), this.bodyScroller.canvas = new s[\"default\"], this.bodyScroller.render(), this.bodyScroller.canvas.contentEl.html('<div class=\"fc-rows\"> <table class=\"' + e.getClass(\"tableGrid\") + '\">' + this.colGroupHtml + \"<tbody/> </table> </div>\"), this.tbodyEl = this.bodyScroller.canvas.contentEl.find(\"tbody\"), this.el.append(this.bodyScroller.el), this.scrollJoiner = new a[\"default\"](\"horizontal\", [this.headScroller, this.bodyScroller]), this.headTable = this.headEl.find(\"table\"), this.headColEls = this.headEl.find(\"col\"), this.headCellEls = this.headScroller.canvas.contentEl.find(\"tr:last-child th\"), this.bodyColEls = this.el.find(\"col\"), this.bodyTable = this.el.find(\"table\"), this.colMinWidths = this.computeColMinWidths(), this.applyColWidths(), this.initColResizing()\n                }, e.prototype.renderHeadHtml = function() {\n                    for (var e = this.view.calendar.theme, t = this.view.colSpecs, r = '<table class=\"' + e.getClass(\"tableGrid\") + '\">', o = \"<colgroup>\", i = 0, s = t; i < s.length; i++) {\n                        var a = s[i];\n                        o += a.isMain ? '<col class=\"fc-main-col\"/>' : \"<col/>\"\n                    }\n                    o += \"</colgroup>\", this.colGroupHtml = o, r += o, r += \"<tbody>\", this.view.superHeaderText && (r += '<tr class=\"fc-super\"><th class=\"' + e.getClass(\"widgetHeader\") + '\" colspan=\"' + t.length + '\"><div class=\"fc-cell-content\"><span class=\"fc-cell-text\">' + n.htmlEscape(this.view.superHeaderText) + \"</span></div></th></tr>\"), r += \"<tr>\";\n                    for (var l = 0; l < t.length; l++) {\n                        var a = t[l],\n                            c = l === t.length - 1;\n                        r += '<th class=\"' + e.getClass(\"widgetHeader\") + '\"><div><div class=\"fc-cell-content\">' + (a.isMain ? '<span class=\"fc-expander-space\"><span class=\"fc-icon\"></span></span>' : \"\") + '<span class=\"fc-cell-text\">' + n.htmlEscape(a.labelText || \"\") + \"</span></div>\" + (c ? \"\" : '<div class=\"fc-col-resizer\"></div>') + \"</div></th>\"\n                    }\n                    return r += \"</tr>\", r += \"</tbody></table>\"\n                }, e.prototype.initColResizing = function() {\n                    var e = this;\n                    this.headEl.find(\"th .fc-col-resizer\").each(function(t, r) {\n                        r = o(r), r.on(\"mousedown\", function(o) {\n                            e.colResizeMousedown(t, o, r)\n                        })\n                    })\n                }, e.prototype.colResizeMousedown = function(e, t, r) {\n                    var o = this,\n                        i = this.colWidths = this.queryColWidths();\n                    i.pop(), i.push(null);\n                    var s = i[e],\n                        a = Math.min(this.colMinWidths[e], u),\n                        l = new n.DragListener({\n                            dragStart: function() {\n                                r.addClass(\"fc-active\")\n                            },\n                            drag: function(t, r) {\n                                var n = s + (o.isRTL ? -t : t);\n                                n = Math.max(n, a), i[e] = n, o.applyColWidths()\n                            },\n                            dragEnd: function() {\n                                r.removeClass(\"fc-active\")\n                            }\n                        });\n                    l.startInteraction(t)\n                }, e.prototype.applyColWidths = function() {\n                    for (var e, t, r, o = this.colMinWidths, n = this.colWidths, i = !0, s = !1, a = 0, l = 0, c = n; l < c.length; l++) r = c[l], \"number\" == typeof r ? a += r : (i = !1, r && (s = !0));\n                    var u = s && !this.view.isHGrouping ? \"auto\" : \"\",\n                        d = n.map(function(e) {\n                            return null != e ? e : u\n                        }),\n                        h = 0;\n                    for (t = 0; t < d.length; t++) e = d[t], h += \"number\" == typeof e ? e : o[t];\n                    for (t = 0; t < d.length; t++) e = d[t], this.headColEls.eq(t).css(\"width\", e), this.bodyColEls.eq(t).css(\"width\", e);\n                    this.headScroller.canvas.setMinWidth(h), this.bodyScroller.canvas.setMinWidth(h), this.tableMinWidth = h, this.tableWidth = i ? a : void 0\n                }, e.prototype.computeColMinWidths = function() {\n                    var e = this;\n                    return this.givenColWidths.map(function(t, r) {\n                        return \"number\" == typeof t ? t : parseInt(e.headColEls.eq(r).css(\"min-width\"), 10) || u\n                    })\n                }, e.prototype.queryColWidths = function() {\n                    return this.headCellEls.map(function(e, t) {\n                        return o(t).outerWidth()\n                    }).get()\n                }, e.prototype.updateSize = function() {\n                    this.headScroller.updateSize(), this.bodyScroller.updateSize(), this.scrollJoiner.update(), this.updateCellFollower()\n                }, e.prototype.headHeight = function() {\n                    var e = this.headScroller.canvas.contentEl.find(\"table\");\n                    return e.height.apply(e, arguments)\n                }, e.prototype.updateCellFollower = function() {\n                    this.cellFollower && this.cellFollower.clearSprites(), this.cellFollower = new l[\"default\"](this.bodyScroller, (!0)), this.cellFollower.isHFollowing = !1, this.cellFollower.isVFollowing = !0;\n                    for (var e = [], t = 0, r = this.view.rowHierarchy.getNodes(); t < r.length; t++) {\n                        var n = r[t];\n                        if (n instanceof c[\"default\"] && n.groupTd) {\n                            var i = n.groupTd.find(\".fc-cell-content\");\n                            i.length && e.push(i[0])\n                        }\n                    }\n                    this.cellFollower.setSpriteEls(o(e)), this.cellFollower.update()\n                }, e\n            }();\n        t[\"default\"] = d\n    }, function(e, t) {\n        function r(e) {\n            return e.find(\"> td\").filter(function(e, t) {\n                return t.rowSpan <= 1\n            })\n        }\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        }), t.getOwnCells = r\n    }, function(e, t, r) {\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        });\n        var o = r(1),\n            n = r(17),\n            i = function(e) {\n                function t() {\n                    return null !== e && e.apply(this, arguments) || this\n                }\n                return o.__extends(t, e), t.prototype.renderFgRanges = function(e) {}, t.prototype.unrenderFgRanges = function() {}, t\n            }(n[\"default\"]);\n        t[\"default\"] = i\n    }, function(e, t, r) {\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        });\n        var o = r(1),\n            n = r(2),\n            i = r(0),\n            s = r(33),\n            a = function(e) {\n                function t(t, r) {\n                    var o = e.call(this, t) || this;\n                    return o.resource = r, o.eventRenderer.designatedResource = o.resource, o\n                }\n                return o.__extends(t, e), t.prototype.renderSkeleton = function() {\n                    e.prototype.renderSkeleton.call(this), this.updateExpandingEnabled(), this.eventsPayload && s[\"default\"].prototype.executeEventRender.call(this, this.eventsPayload), this.businessHourGenerator && this.view.dateProfile && s[\"default\"].prototype.renderBusinessHours.call(this, this.businessHourGenerator), this.view.publiclyTrigger(\"resourceRender\", {\n                        context: this.resource,\n                        args: [this.resource, this.getTr(\"spreadsheet\").find(\"> td\"), this.getTr(\"event\").find(\"> td\"), this.view]\n                    })\n                }, t.prototype.removeElement = function() {\n                    e.prototype.removeElement.call(this), this.eventsPayload && s[\"default\"].prototype.executeEventUnrender.call(this, this.eventsPayload), this.businessHourGenerator && s[\"default\"].prototype.unrenderBusinessHours.call(this, this.businessHourGenerator)\n                }, t.prototype.renderEventSkeleton = function(t) {\n                    e.prototype.renderEventSkeleton.call(this, t), t.attr(\"data-resource-id\", this.resource.id)\n                }, t.prototype.executeEventRender = function(t) {\n                    this.eventsPayload = t, this.get(\"isInDom\") && e.prototype.executeEventRender.call(this, this.eventsPayload)\n                }, t.prototype.executeEventUnrender = function() {\n                    e.prototype.executeEventUnrender.call(this), this.eventsPayload = null\n                }, t.prototype.renderBusinessHours = function(t) {\n                    this.businessHourGenerator = t, this.get(\"isInDom\") && e.prototype.renderBusinessHours.call(this, this.businessHourGenerator)\n                }, t.prototype.unrenderBusinessHours = function() {\n                    e.prototype.unrenderBusinessHours.call(this), this.businessHourGenerator = null\n                }, t.prototype.renderSpreadsheetSkeleton = function(e) {\n                    for (var t = this.view.calendar.theme, r = this.resource, o = 0, s = this.view.colSpecs; o < s.length; o++) {\n                        var a = s[o];\n                        if (!a.group) {\n                            var l = a.field ? r[a.field] || null : r,\n                                c = \"function\" == typeof a.text ? a.text(r, l) : l,\n                                u = n('<div class=\"fc-cell-content\">' + (a.isMain ? this.renderGutterHtml() : \"\") + '<span class=\"fc-cell-text\">' + (c ? i.htmlEscape(c) : \"&nbsp;\") + \"</span></div>\");\n                            \"function\" == typeof a.render && (u = a.render(r, u, l) || u);\n                            var d = n('<td class=\"' + t.getClass(\"widgetContent\") + '\"/>').append(u);\n                            a.isMain && d.wrapInner(\"<div/>\"), e.append(d)\n                        }\n                    }\n                    e.attr(\"data-resource-id\", r.id)\n                }, t.prototype.renderGutterHtml = function() {\n                    for (var e = \"\", t = this.depth, r = 0; r < t; r++) e += '<span class=\"fc-icon\"/>';\n                    return e += '<span class=\"fc-expander-space\"><span class=\"fc-icon\"></span></span>'\n                }, t\n            }(s[\"default\"]);\n        t[\"default\"] = a\n    }, function(e, t, r) {\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        });\n        var o = r(1),\n            n = r(2),\n            i = r(32),\n            s = function(e) {\n                function t() {\n                    return null !== e && e.apply(this, arguments) || this\n                }\n                return o.__extends(t, e), t.prototype.renderSkeleton = function() {\n                    e.prototype.renderSkeleton.call(this), this.updateExpandingEnabled()\n                }, t.prototype.renderSpreadsheetSkeleton = function(e) {\n                    var t = this.renderGroupContentEl();\n                    return t.prepend('<span class=\"fc-expander\"><span class=\"fc-icon\"></span></span>'), n('<td class=\"fc-divider\" />').attr(\"colspan\", this.view.colSpecs.length).append(n(\"<div/>\").append(t)).appendTo(e)\n                }, t.prototype.renderEventSkeleton = function(e) {\n                    return e.append('<td class=\"fc-divider\"> <div/> </td>')\n                }, t\n            }(i[\"default\"]);\n        t[\"default\"] = s, s.prototype.hasOwnRow = !0\n    }, function(e, t, r) {\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        });\n        var o = r(2),\n            n = r(0),\n            i = r(19),\n            s = r(49),\n            a = r(6),\n            l = {\n                constructed: n.Calendar.prototype.constructed,\n                buildSelectFootprint: n.Calendar.prototype.buildSelectFootprint\n            };\n        n.Calendar.defaults.refetchResourcesOnNavigate = !1, n.Calendar.defaults.filterResourcesWithEvents = !1, n.Calendar.prototype.resourceManager = null, n.Calendar.prototype.constructed = function() {\n            l.constructed.apply(this, arguments), this.resourceManager = new s[\"default\"](this)\n        }, n.Calendar.prototype.instantiateView = function(e) {\n            var t = this.viewSpecManager.getViewSpec(e),\n                r = t[\"class\"];\n            return this.opt(\"resources\") && t.options.resources !== !1 && (t.queryResourceClass ? r = t.queryResourceClass(t) || r : t.resourceClass && (r = t.resourceClass)), new r(this, t)\n        }, n.Calendar.prototype.getResources = function() {\n            return Array.prototype.slice.call(this.resourceManager.topLevelResources)\n        }, n.Calendar.prototype.addResource = function(e, t) {\n            var r = this;\n            void 0 === t && (t = !1), this.resourceManager.addResource(e).then(function(e) {\n                if (t && r.view.scrollToResource) return r.view.scrollToResource(e)\n            })\n        }, n.Calendar.prototype.removeResource = function(e) {\n            return this.resourceManager.removeResource(e)\n        }, n.Calendar.prototype.refetchResources = function() {\n            this.resourceManager.clear(), this.view.flash(\"initialResources\")\n        }, n.Calendar.prototype.rerenderResources = function() {\n            this.resourceManager.resetCurrentResources()\n        }, n.Calendar.prototype.buildSelectFootprint = function(e, t, r) {\n            var o = l.buildSelectFootprint.apply(this, arguments);\n            return r ? new a[\"default\"](o.unzonedRange, o.isAllDay, r) : o\n        }, n.Calendar.prototype.getResourceById = function(e) {\n            return this.resourceManager.getResourceById(e)\n        }, n.Calendar.prototype.getEventResourceId = function(e) {\n            return this.getEventResourceIds(e)[0]\n        }, n.Calendar.prototype.getEventResourceIds = function(e) {\n            var t = this.eventManager.getEventDefByUid(e._id);\n            return t ? t.getResourceIds() : []\n        }, n.Calendar.prototype.setEventResourceId = function(e, t) {\n            this.setEventResourceIds(e, t ? [t] : [])\n        }, n.Calendar.prototype.setEventResourceIds = function(e, t) {\n            var r = this.eventManager.getEventDefByUid(e._id);\n            r && (r.resourceIds = t.map(function(e) {\n                return i[\"default\"].normalizeId(e)\n            }))\n        }, n.Calendar.prototype.getResourceEvents = function(e) {\n            var t = this,\n                r = \"object\" == typeof e ? e : this.getResourceById(e);\n            return r ? this.clientEvents(function(e) {\n                return o.inArray(r.id, t.getEventResourceIds(e)) !== -1\n            }) : []\n        }, n.Calendar.prototype.getEventResource = function(e) {\n            return this.getEventResources(e)[0]\n        }, n.Calendar.prototype.getEventResources = function(e) {\n            var t = \"object\" == typeof e ? e : this.clientEvents(e)[0],\n                r = [];\n            if (t)\n                for (var o = 0, n = this.getEventResourceIds(t); o < n.length; o++) {\n                    var i = n[o],\n                        s = this.getResourceById(i);\n                    s && r.push(s)\n                }\n            return r\n        }\n    }, function(e, t, r) {\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        });\n        var o = r(1),\n            n = r(2),\n            i = r(0),\n            s = function(e) {\n                function t(t) {\n                    var r = e.call(this) || this;\n                    return r.fetchId = 0, r.calendar = t, r.initializeCache(), r\n                }\n                return o.__extends(t, e), t.prototype.getResources = function(e, t) {\n                    var r = !e && !this.currentStart || e && this.currentStart && e.isSame(this.currentStart) && t.isSame(this.currentEnd);\n                    return this.fetching && r ? this.fetching : this.fetchResources(e, t)\n                }, t.prototype.fetchResources = function(e, t) {\n                    var r = this,\n                        o = this.fetchId += 1;\n                    return this.fetching = i.Promise.construct(function(n, i) {\n                        r.fetchResourceInputs(function(e) {\n                            return o === r.fetchId ? (r.setResources(e), n(r.topLevelResources)) : i()\n                        }, e, t)\n                    })\n                }, t.prototype.fetchResourceInputs = function(e, r, o) {\n                    var i = this,\n                        s = this.calendar,\n                        a = s.opt(\"resources\"),\n                        l = s.opt(\"timezone\");\n                    switch (\"string\" === n.type(a) && (a = {\n                        url: a\n                    }), n.type(a)) {\n                        case \"function\":\n                            this.calendar.pushLoading(), a(function(t) {\n                                i.calendar.popLoading(), e(t)\n                            }, r, o, s.opt(\"timezone\"));\n                            break;\n                        case \"object\":\n                            s.pushLoading();\n                            var c = {};\n                            r && o && (c[s.opt(\"startParam\")] = r.format(), c[s.opt(\"endParam\")] = o.format(), l && \"local\" !== l && (c[s.opt(\"timezoneParam\")] = l)), n.ajax(n.extend({\n                                data: c\n                            }, t.ajaxDefaults, a)).then(function(t) {\n                                s.popLoading(), e(t)\n                            });\n                            break;\n                        case \"array\":\n                            e(a);\n                            break;\n                        default:\n                            e([])\n                    }\n                }, t.prototype.getResourceById = function(e) {\n                    return this.resourcesById[e]\n                }, t.prototype.getFlatResources = function() {\n                    var e = [];\n                    for (var t in this.resourcesById) e.push(this.resourcesById[t]);\n                    return e\n                }, t.prototype.initializeCache = function() {\n                    this.topLevelResources = [], this.resourcesById = {}\n                }, t.prototype.setResources = function(e) {\n                    var t, r = this,\n                        o = Boolean(this.topLevelResources);\n                    this.initializeCache();\n                    for (var n = e.map(function(e) {\n                            return r.buildResource(e)\n                        }), i = [], s = 0, a = n; s < a.length; s++) t = a[s], this.addResourceToIndex(t) && i.push(t);\n                    for (var l = 0, c = i; l < c.length; l++) t = c[l], this.addResourceToTree(t);\n                    o ? this.trigger(\"reset\", this.topLevelResources) : this.trigger(\"set\", this.topLevelResources), this.calendar.publiclyTrigger(\"resourcesSet\", [this.topLevelResources])\n                }, t.prototype.resetCurrentResources = function() {\n                    this.topLevelResources && this.trigger(\"reset\", this.topLevelResources)\n                }, t.prototype.clear = function() {\n                    this.topLevelResources = null, this.fetching = null\n                }, t.prototype.addResource = function(e) {\n                    var t = this;\n                    return this.fetching ? this.fetching.then(function() {\n                        var r = t.buildResource(e);\n                        return !!t.addResourceToIndex(r) && (t.addResourceToTree(r), t.trigger(\"add\", r, t.topLevelResources), r)\n                    }) : i.Promise.reject()\n                }, t.prototype.addResourceToIndex = function(e) {\n                    if (this.resourcesById[e.id]) return !1;\n                    this.resourcesById[e.id] = e;\n                    for (var t = 0, r = e.children; t < r.length; t++) {\n                        var o = r[t];\n                        this.addResourceToIndex(o)\n                    }\n                    return !0\n                }, t.prototype.addResourceToTree = function(e) {\n                    if (!e.parent) {\n                        var t = void 0,\n                            r = String(null != e.parentId ? e.parentId : \"\");\n                        if (r) {\n                            var o = this.resourcesById[r];\n                            if (!o) return !1;\n                            e.parent = o, t = o.children\n                        } else t = this.topLevelResources;\n                        t.push(e)\n                    }\n                    return !0\n                }, t.prototype.removeResource = function(e) {\n                    var t = this,\n                        r = \"object\" == typeof e ? e.id : e;\n                    return this.fetching ? this.fetching.then(function() {\n                        var e = t.removeResourceFromIndex(r);\n                        return e && (t.removeResourceFromTree(e), t.trigger(\"remove\", e, t.topLevelResources)), e\n                    }) : i.Promise.reject()\n                }, t.prototype.removeResourceFromIndex = function(e) {\n                    var t = this.resourcesById[e];\n                    if (t) {\n                        delete this.resourcesById[e];\n                        for (var r = 0, o = t.children; r < o.length; r++) {\n                            var n = o[r];\n                            this.removeResourceFromIndex(n.id)\n                        }\n                        return t\n                    }\n                    return !1\n                }, t.prototype.removeResourceFromTree = function(e, t) {\n                    void 0 === t && (t = this.topLevelResources);\n                    for (var r = 0; r < t.length; r++) {\n                        var o = t[r];\n                        if (o === e) return e.parent = null, t.splice(r, 1), !0;\n                        if (this.removeResourceFromTree(e, o.children)) return !0\n                    }\n                    return !1\n                }, t.prototype.buildResource = function(e) {\n                    var r = this,\n                        o = n.extend({}, e),\n                        s = e.eventClassName;\n                    return o.id = String(null != e.id ? e.id : \"_fc\" + t.resourceGuid++), o.eventClassName = function() {\n                        switch (n.type(s)) {\n                            case \"string\":\n                                return s.split(/\\s+/);\n                            case \"array\":\n                                return s;\n                            default:\n                                return []\n                        }\n                    }(), e.businessHours && (o.businessHourGenerator = new i.BusinessHourGenerator(e.businessHours, this.calendar)), o.children = (e.children || []).map(function(e) {\n                        var t = r.buildResource(e);\n                        return t.parent = o, t\n                    }), o\n                }, t.resourceGuid = 1, t.ajaxDefaults = {\n                    dataType: \"json\",\n                    cache: !1\n                }, t\n            }(i.Class);\n        t[\"default\"] = s, i.EmitterMixin.mixInto(s)\n    }, function(e, t, r) {\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        });\n        var o = r(2),\n            n = r(0),\n            i = r(19),\n            s = r(6),\n            a = {\n                getPeerEventInstances: n.Constraints.prototype.getPeerEventInstances,\n                isFootprintAllowed: n.Constraints.prototype.isFootprintAllowed,\n                buildCurrentBusinessFootprints: n.Constraints.prototype.buildCurrentBusinessFootprints,\n                footprintContainsFootprint: n.Constraints.prototype.footprintContainsFootprint,\n                footprintsIntersect: n.Constraints.prototype.footprintsIntersect,\n                eventRangeToEventFootprints: n.Constraints.prototype.eventRangeToEventFootprints,\n                parseFootprints: n.Constraints.prototype.parseFootprints\n            };\n        n.Constraints.prototype.getPeerEventInstances = function(e) {\n            var t = e.getResourceIds(),\n                r = a.getPeerEventInstances.apply(this, arguments);\n            return t.length ? r.filter(function(e) {\n                if (!e.def.resourceIds.length) return !0;\n                for (var r = 0, o = t; r < o.length; r++) {\n                    var n = o[r];\n                    if (e.def.hasResourceId(n)) return !0\n                }\n                return !1\n            }) : r\n        }, n.Constraints.prototype.isFootprintAllowed = function(e, t, r, n, l) {\n            if (\"object\" == typeof r) {\n                var c = i[\"default\"].extractIds(r, this);\n                if (c.length && (!(e instanceof s[\"default\"]) || o.inArray(e.resourceId, c) === -1)) return !1\n            }\n            return a.isFootprintAllowed.apply(this, arguments)\n        }, n.Constraints.prototype.buildCurrentBusinessFootprints = function(e) {\n            for (var t = this._calendar.resourceManager.getFlatResources(), r = !1, o = 0, n = t; o < n.length; o++) {\n                var i = n[o];\n                i.businessHourGenerator && (r = !0)\n            }\n            if (r) {\n                for (var l = this._calendar.view, c = l.get(\"businessHourGenerator\"), u = l.dateProfile.activeUnzonedRange, d = [], h = 0, p = t; h < p.length; h++) {\n                    var i = p[h],\n                        f = i.businessHourGenerator || c,\n                        v = f.buildEventInstanceGroup(e, u);\n                    if (v)\n                        for (var g = 0, y = v.getAllEventRanges(); g < y.length; g++) {\n                            var m = y[g];\n                            d.push(new s[\"default\"](m.unzonedRange, e, i.id))\n                        }\n                }\n                return d\n            }\n            return a.buildCurrentBusinessFootprints.apply(this, arguments)\n        }, n.Constraints.prototype.footprintContainsFootprint = function(e, t) {\n            return (!(e instanceof s[\"default\"]) || t instanceof s[\"default\"] && t.resourceId === e.resourceId) && a.footprintContainsFootprint.apply(this, arguments)\n        }, n.Constraints.prototype.footprintsIntersect = function(e, t) {\n            return !(e instanceof s[\"default\"] && t instanceof s[\"default\"] && e.resourceId !== t.resourceId) && a.footprintsIntersect.apply(this, arguments)\n        }, n.Constraints.prototype.eventRangeToEventFootprints = function(e) {\n            var t = e.eventDef,\n                r = t.getResourceIds();\n            return r.length ? r.map(function(r) {\n                return new n.EventFootprint(new s[\"default\"](e.unzonedRange, t.isAllDay(), r), t, e.eventInstance)\n            }) : a.eventRangeToEventFootprints.apply(this, arguments)\n        }, n.Constraints.prototype.parseFootprints = function(e) {\n            var t = a.parseFootprints.apply(this, arguments),\n                r = e.resourceIds || [];\n            if (e.resourceId && (r = [e.resourceId].concat(r)), r.length) {\n                for (var o = [], n = 0, i = r; n < i.length; n++)\n                    for (var l = i[n], c = 0, u = t; c < u.length; c++) {\n                        var d = u[c];\n                        o.push(new s[\"default\"](d.unzonedRange, d.isAllDay, l))\n                    }\n                return o\n            }\n            return t\n        }\n    }, function(e, t, r) {\n        function o(e, t) {\n            for (var r = [], n = 0, i = e; n < i.length; n++) {\n                var s = i[n];\n                if (s.children.length) {\n                    var a = o(s.children, t);\n                    if (a.length || t[s.id]) {\n                        var l = Object.create(s);\n                        l.children = a, r.push(l)\n                    }\n                } else t[s.id] && r.push(s)\n            }\n            return r\n        }\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        });\n        var n = r(0),\n            i = r(52),\n            s = {\n                setElement: n.View.prototype.setElement,\n                removeElement: n.View.prototype.removeElement,\n                triggerViewRender: n.View.prototype.triggerViewRender\n            };\n        n.View.prototype.canHandleSpecificResources = !1, n.View.prototype.setElement = function() {\n            s.setElement.apply(this, arguments), this.watchResources()\n        }, n.View.prototype.removeElement = function() {\n            this.unwatchResources(), s.removeElement.apply(this, arguments)\n        }, n.View.prototype.triggerViewRender = function() {\n            i.processLicenseKey(this.opt(\"schedulerLicenseKey\"), this.el), s.triggerViewRender.apply(this, arguments)\n        }, n.View.prototype.watchResources = function() {\n            var e = this,\n                t = [],\n                r = [\"initialResources\"];\n            this.opt(\"refetchResourcesOnNavigate\") && t.push(\"dateProfile\"), this.opt(\"filterResourcesWithEvents\") && r.push(\"currentEvents\"), this.watch(\"initialResources\", t, function(t) {\n                return e.getInitialResources(t.dateProfile)\n            }), this.watch(\"bindingResources\", r, function(t) {\n                e.bindResourceChanges(t.currentEvents), e.setResources(t.initialResources, t.currentEvents)\n            }, function() {\n                e.unbindResourceChanges(), e.unsetResources()\n            })\n        }, n.View.prototype.unwatchResources = function() {\n            this.unwatch(\"initialResources\"), this.unwatch(\"bindingResources\")\n        }, n.View.prototype.getInitialResources = function(e) {\n            var t = this.calendar;\n            return e ? t.resourceManager.getResources(t.msToMoment(e.activeUnzonedRange.startMs, e.isRangeAllDay), t.msToMoment(e.activeUnzonedRange.endMs, e.isRangeAllDay)) : t.resourceManager.getResources()\n        }, n.View.prototype.bindResourceChanges = function(e) {\n            var t = this;\n            this.listenTo(this.calendar.resourceManager, {\n                set: function(r) {\n                    t.setResources(r, e)\n                },\n                unset: function() {\n                    t.unsetResources()\n                },\n                reset: function(r) {\n                    t.resetResources(r, e)\n                },\n                add: function(r, o) {\n                    t.addResource(r, o, e)\n                },\n                remove: function(r, o) {\n                    t.removeResource(r, o, e)\n                }\n            })\n        }, n.View.prototype.unbindResourceChanges = function() {\n            this.stopListeningTo(this.calendar.resourceManager)\n        }, n.View.watch(\"displayingEvents\", [\"displayingDates\", \"hasEvents\", \"currentResources\"], function(e) {\n            this.requestEventsRender(this.get(\"currentEvents\"))\n        }, function() {\n            this.requestEventsUnrender()\n        }), n.View.prototype.setResources = function(e, t) {\n            t && (e = this.filterResourcesWithEvents(e, t)), this.set(\"currentResources\", e), this.set(\"hasResources\", !0)\n        }, n.View.prototype.unsetResources = function() {\n            this.unset(\"currentResources\"), this.unset(\"hasResources\")\n        }, n.View.prototype.resetResources = function(e, t) {\n            this.startBatchRender(), this.unsetResources(), this.setResources(e, t), this.stopBatchRender()\n        }, n.View.prototype.addResource = function(e, t, r) {\n            if (!this.canHandleSpecificResources) return void this.resetResources(t, r);\n            if (r) {\n                var o = this.filterResourcesWithEvents([e], r);\n                o.length || (e = null)\n            }\n            e && (this.set(\"currentResources\", t), this.handleResourceAdd(e))\n        }, n.View.prototype.removeResource = function(e, t, r) {\n            return this.canHandleSpecificResources ? (this.set(\"currentResources\", t), void this.handleResourceRemove(e)) : void this.resetResources(t, r)\n        }, n.View.prototype.handleResourceAdd = function(e) {}, n.View.prototype.handleResourceRemove = function(e) {}, n.View.prototype.filterResourcesWithEvents = function(e, t) {\n            for (var r = this.eventsPayloadToRanges(t), n = {}, i = 0, s = r; i < s.length; i++)\n                for (var a = s[i], l = 0, c = a.eventDef.getResourceIds(); l < c.length; l++) {\n                    var u = c[l];\n                    n[u] = !0\n                }\n            return o(e, n)\n        }, n.View.prototype.eventsPayloadToRanges = function(e) {\n            var t = this._getDateProfile(),\n                r = [];\n            for (var o in e) {\n                var n = e[o],\n                    i = n.sliceRenderRanges(t.activeUnzonedRange);\n                r.push.apply(r, i || [])\n            }\n            return r\n        }\n    }, function(e, t, r) {\n        function o(e, t) {\n            if (!i(window.location.href) && !n(e) && !a(t)) return s('', t)\n        }\n\n        function n(e) {\n            if (l.inArray(e, f) !== -1) return !0;\n            var t = (e || \"\").match(/^(\\d+)\\-fcs\\-(\\d+)$/);\n            if (t && 10 === t[1].length) {\n                var r = c.utc(1e3 * parseInt(t[2], 10)),\n                    o = c.utc(u.mockSchedulerReleaseDate || d);\n                if (o.isValid()) {\n                    var n = o.clone().subtract(h);\n                    if (r.isAfter(n)) return !0\n                }\n            }\n            return !1\n        }\n\n        function i(e) {\n            return /\\w+\\:\\/\\/fullcalendar\\.io\\/|\\/demos\\/[\\w-]+\\.html$/.test(e)\n        }\n\n        function s(e, t) {\n            return t.append(l('<div class=\"fc-license-message\" />').html(e))\n        }\n\n        function a(e) {\n            return e.find(\".fc-license-message\").length >= 1\n        }\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        });\n        var l = r(2),\n            c = r(15),\n            u = r(0),\n            d = \"2018-03-27\",\n            h = {\n                years: 1,\n                weeks: 1\n            },\n            p = \"\",\n            f = [\"GPL-My-Project-Is-Open-Source\", \"CC-Attribution-NonCommercial-NoDerivatives\"];\n        t.processLicenseKey = o, t.isValidKey = n, t.isImmuneUrl = i, t.renderingWarningInContainer = s, t.detectWarningInContainer = a\n    }, function(e, t, r) {\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        });\n        var o = r(0),\n            n = r(6),\n            i = {\n                eventRangeToEventFootprints: o.DateComponent.prototype.eventRangeToEventFootprints\n            };\n        o.DateComponent.prototype.isResourceFootprintsEnabled = !1, o.DateComponent.prototype.eventRangeToEventFootprints = function(e) {\n            if (this.isResourceFootprintsEnabled) {\n                var t = e.eventDef,\n                    r = t.getResourceIds();\n                return r.length ? r.map(function(r) {\n                    return new o.EventFootprint(new n[\"default\"](e.unzonedRange, t.isAllDay(), r), t, e.eventInstance)\n                }) : t.hasBgRendering() ? i.eventRangeToEventFootprints.apply(this, arguments) : []\n            }\n            return i.eventRangeToEventFootprints.apply(this, arguments)\n        }, o.DateComponent.prototype.renderResources = function(e) {\n            this.callChildren(\"renderResources\", arguments)\n        }, o.DateComponent.prototype.unrenderResources = function() {\n            this.callChildren(\"unrenderResources\", arguments)\n        }, o.DateComponent.prototype.renderResource = function(e) {\n            this.callChildren(\"renderResource\", arguments)\n        }, o.DateComponent.prototype.unrenderResource = function(e) {\n            this.callChildren(\"unrenderResource\", arguments)\n        }\n    }, function(e, t, r) {\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        });\n        var o = r(0),\n            n = {\n                isEventDefDraggable: o.InteractiveDateComponent.prototype.isEventDefDraggable\n            };\n        o.InteractiveDateComponent.prototype.allowCrossResource = !0, o.InteractiveDateComponent.prototype.isEventDefDraggable = function(e) {\n            return this.isEventDefResourceEditable(e) || n.isEventDefDraggable.call(this, e)\n        }, o.InteractiveDateComponent.prototype.isEventDefResourceEditable = function(e) {\n            var t = e.resourceEditable;\n            return null == t && (t = (e.source || {}).resourceEditable, null == t && (t = this.opt(\"eventResourceEditable\"), null == t && (t = this.isEventDefGenerallyEditable(e)))), t\n        }\n    }, function(e, t, r) {\n        function o(e, t) {\n            return e.view.calendar.resourceManager.getResourceById(t)\n        }\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        });\n        var n = r(0),\n            i = {\n                getFallbackStylingObjs: n.EventRenderer.prototype.getFallbackStylingObjs\n            };\n        n.EventRenderer.prototype.designatedResource = null, n.EventRenderer.prototype.currentResource = null, n.EventRenderer.prototype.beforeFgSegHtml = function(e) {\n            var t = e.footprint.componentFootprint.resourceId;\n            this.designatedResource ? this.currentResource = this.designatedResource : t ? this.currentResource = o(this, t) : this.currentResource = null\n        }, n.EventRenderer.prototype.getFallbackStylingObjs = function(e) {\n            var t = i.getFallbackStylingObjs.apply(this, arguments);\n            if (this.currentResource) t.unshift(this.currentResource);\n            else {\n                for (var r = [], n = 0, s = e.getResourceIds(); n < s.length; n++) {\n                    var a = s[n],\n                        l = o(this, a);\n                    l && r.push(l)\n                }\n                t = r.concat(t)\n            }\n            return t\n        }\n    }, function(e, t, r) {\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        });\n        var o = r(0),\n            n = r(6),\n            i = {\n                computeSelectionFootprint: o.DateSelecting.prototype.computeSelectionFootprint\n            };\n        o.DateSelecting.prototype.computeSelectionFootprint = function(e, t) {\n            if (e.resourceId && t.resourceId && e.resourceId !== t.resourceId && !this.component.allowCrossResource) return null;\n            var r = i.computeSelectionFootprint.apply(this, arguments);\n            return e.resourceId && (r = new n[\"default\"](r.unzonedRange, r.isAllDay, e.resourceId)), r\n        }\n    }, function(e, t, r) {\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        });\n        var o = r(0),\n            n = {\n                computeEventDropMutation: o.EventDragging.prototype.computeEventDropMutation\n            };\n        o.EventDragging.prototype.computeEventDropMutation = function(e, t, r) {\n            var i = this.component.isEventDefStartEditable(r);\n            if (e.resourceId && t.resourceId && e.resourceId !== t.resourceId && this.component.isEventDefResourceEditable(r)) {\n                var s = new o.EventDefMutation;\n                return s.oldResourceId = e.resourceId, s.newResourceId = t.resourceId, i && s.setDateMutation(this.computeEventDateMutation(e, t)), s\n            }\n            if (i) return n.computeEventDropMutation.apply(this, arguments)\n        }\n    }, function(e, t, r) {\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        });\n        var o = r(0),\n            n = {\n                computeEventStartResizeMutation: o.EventResizing.prototype.computeEventStartResizeMutation,\n                computeEventEndResizeMutation: o.EventResizing.prototype.computeEventEndResizeMutation\n            };\n        o.EventResizing.prototype.computeEventStartResizeMutation = function(e, t, r) {\n            return e.resourceId && t.resourceId && e.resourceId !== t.resourceId && !this.component.allowCrossResource ? null : n.computeEventStartResizeMutation.apply(this, arguments)\n        }, o.EventResizing.prototype.computeEventEndResizeMutation = function(e, t, r) {\n            return e.resourceId && t.resourceId && e.resourceId !== t.resourceId && !this.component.allowCrossResource ? null : n.computeEventEndResizeMutation.apply(this, arguments)\n        }\n    }, function(e, t, r) {\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        });\n        var o = r(0),\n            n = {\n                computeExternalDrop: o.ExternalDropping.prototype.computeExternalDrop\n            };\n        o.ExternalDropping.prototype.computeExternalDrop = function(e, t) {\n            var r = n.computeExternalDrop.apply(this, arguments);\n            return e.resourceId && r.addResourceId(e.resourceId), r\n        }\n    }, function(e, t, r) {\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        });\n        var o = r(0);\n        o.EventSource.prototype.standardPropMap.resourceEditable = !0\n    }, function(e, t, r) {\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        });\n        var o = r(2),\n            n = r(0),\n            i = r(19),\n            s = {\n                applyMiscProps: n.EventDef.prototype.applyMiscProps,\n                clone: n.EventDef.prototype.clone,\n                toLegacy: n.EventDef.prototype.toLegacy\n            };\n        n.EventDef.defineStandardProps({\n            resourceEditable: !0\n        }), n.EventDef.prototype.resourceIds = null, n.EventDef.prototype.resourceEditable = null, n.EventDef.prototype.applyMiscProps = function(e) {\n            e = o.extend({}, e), this.resourceIds = i[\"default\"].extractIds(e, this.source.calendar), delete e.resourceId, delete e.resourceIds, s.applyMiscProps.apply(this, arguments)\n        }, n.EventDef.prototype.hasResourceId = function(e) {\n            return o.inArray(e, this.resourceIds) !== -1\n        }, n.EventDef.prototype.removeResourceId = function(e) {\n            n.removeExact(this.resourceIds, e)\n        }, n.EventDef.prototype.addResourceId = function(e) {\n            this.hasResourceId(e) || this.resourceIds.push(e)\n        }, n.EventDef.prototype.getResourceIds = function() {\n            return this.resourceIds ? this.resourceIds.slice() : []\n        }, n.EventDef.prototype.clone = function() {\n            var e = s.clone.apply(this, arguments);\n            return e.resourceIds = this.getResourceIds(), e\n        }, n.EventDef.prototype.toLegacy = function() {\n            var e = s.toLegacy.apply(this, arguments),\n                t = this.getResourceIds();\n            return e.resourceId = 1 === t.length ? t[0] : null, e.resourceIds = t.length > 1 ? t : null, null != this.resourceEditable && (e.resourceEditable = this.resourceEditable), e\n        }\n    }, function(e, t, r) {\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        });\n        var o = r(0),\n            n = o.EventDefMutation.prototype.mutateSingle;\n        o.EventDefMutation.prototype.oldResourceId = null, o.EventDefMutation.prototype.newResourceId = null, o.EventDefMutation.prototype.mutateSingle = function(e) {\n            var t = n.apply(this, arguments),\n                r = null;\n            return this.oldResourceId && e.hasResourceId(this.oldResourceId) && (r = e.getResourceIds(), e.removeResourceId(this.oldResourceId), e.addResourceId(this.newResourceId)),\n                function() {\n                    t(), r && (e.resourceIds = r)\n                }\n        }\n    }, function(e, t, r) {\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        });\n        var o = r(0),\n            n = r(14);\n        o.defineView(\"timeline\", {\n            \"class\": n[\"default\"],\n            defaults: {\n                eventResizableFromStart: !0\n            }\n        }), o.defineView(\"timelineDay\", {\n            type: \"timeline\",\n            duration: {\n                days: 1\n            }\n        }), o.defineView(\"timelineWeek\", {\n            type: \"timeline\",\n            duration: {\n                weeks: 1\n            }\n        }), o.defineView(\"timelineMonth\", {\n            type: \"timeline\",\n            duration: {\n                months: 1\n            }\n        }), o.defineView(\"timelineYear\", {\n            type: \"timeline\",\n            duration: {\n                years: 1\n            }\n        })\n    }, function(e, t, r) {\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        });\n        var o = r(0),\n            n = r(30);\n        o.getViewConfig(\"timeline\").resourceClass = n[\"default\"], o.Calendar.defaults.resourcesInitiallyExpanded = !0\n    }, function(e, t, r) {\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        });\n        var o = r(0),\n            n = r(22),\n            i = r(23);\n        o.getViewConfig(\"basic\").queryResourceClass = function(e) {\n            var t = e.options.groupByResource || e.options.groupByDateAndResource,\n                r = !1;\n            if (null != t ? r = t : e.duration && (r = 1 === e.duration.as(\"days\")), r) return n[\"default\"]\n        }, o.getViewConfig(\"month\").queryResourceClass = function(e) {\n            if (e.options.groupByResource || e.options.groupByDateAndResource) return i[\"default\"]\n        }\n    }, function(e, t, r) {\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        });\n        var o = r(0),\n            n = r(20);\n        o.getViewConfig(\"agenda\").queryResourceClass = function(e) {\n            var t = e.options.groupByResource || e.options.groupByDateAndResource,\n                r = !1;\n            if (null != t ? r = t : e.duration && (r = 1 === e.duration.as(\"days\")), r) return n[\"default\"]\n        }\n    }, function(e, t) {\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        })\n    }, function(e, t) {\n        Object.defineProperty(t, \"__esModule\", {\n            value: !0\n        })\n    }])\n});;", "/** @odoo-module **/\n\nimport {\n    registerClassPatchModel,\n    registerInstancePatchModel,\n    registerFieldPatchModel\n} from'@mail/model/model_core';\nimport { attr } from '@mail/model/model_field';\n\nregisterFieldPatchModel('mail.activity', 'calendar/static/src/models/activity/activity.js', {\n    calendar_event_id: attr({ default: false }),\n});\n\nregisterClassPatchModel('mail.activity', 'calendar/static/src/models/activity/activity.js', {\n    /**\n     * @override\n     */\n    convertData(data) {\n        const res = this._super(data);\n        if ('calendar_event_id' in data) {\n            res.calendar_event_id = data.calendar_event_id[0];\n        }\n        return res;\n    },\n});\n\nregisterInstancePatchModel('mail.activity', 'calendar/static/src/models/activity/activity.js', {\n    /**\n     * @override\n     */\n    async deleteServerRecord() {\n        if (!this.calendar_event_id){\n            await this._super();\n        } else {\n            await this.async(() => this.env.services.rpc({\n                model: 'mail.activity',\n                method: 'unlink_w_meeting',\n                args: [[this.id]],\n            }));\n            this.delete();\n        }\n    },\n\n    /**\n     * In case the activity is linked to a meeting, we want to open the calendar view instead.\n     *\n     * @override\n     */\n    async edit() {\n        if (!this.calendar_event_id){\n            await this._super();\n        } else {\n            const action = await this.async(() => this.env.services.rpc({\n                model: 'mail.activity',\n                method: 'action_create_calendar_event',\n                args: [[this.id]],\n            }));\n            this.env.bus.trigger('do-action', {\n                action\n            });\n        }\n    }\n});\n", "/** @odoo-module */\n\nimport { Activity } from '@mail/components/activity/activity';\nimport { patch } from 'web.utils';\nimport Dialog from 'web.Dialog';\nimport core from 'web.core';\nconst _t = core._t;\n\npatch(Activity.prototype, 'calendar/static/src/components/activity/activity.js', {\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Small override that asks for confirmation in case there is a meeting linked to this activity.\n     *\n     * @override\n     */\n    _onClickCancel(ev) {\n        const superMethod = this._super;\n        if (!this.activity.calendar_event_id){\n            this._super(ev);\n        } else {\n            Dialog.confirm(\n                this,\n                _t(\"The activity is linked to a meeting. Deleting it will remove the meeting as well. Do you want to proceed ?\"), {\n                    confirm_callback: function () {\n                        superMethod(ev);\n                    },\n                }\n            );\n        }\n    }\n\n});\n", "/** @odoo-module **/\n\nimport BasicModel from 'web.BasicModel';\nimport fieldRegistry from 'web.field_registry';\nimport relationalFields from 'web.relational_fields';\n\nconst FieldMany2ManyTagsAvatar = relationalFields.FieldMany2ManyTagsAvatar;\n\nBasicModel.include({\n    /**\n     * @private\n     * @param {Object} record\n     * @param {string} fieldName\n     * @returns {Promise}\n     */\n    _fetchSpecialAttendeeStatus: function (record, fieldName) {\n        var context = record.getContext({fieldName: fieldName});\n        var attendeeIDs = record.data[fieldName] ? this.localData[record.data[fieldName]].res_ids : [];\n        var meetingID = _.isNumber(record.res_id) ? record.res_id : false;\n        return this._rpc({\n            model: 'res.partner',\n            method: 'get_attendee_detail',\n            args: [attendeeIDs, [meetingID]],\n            context: context,\n        }).then(function (result) {\n            return result;\n        });\n    },\n});\n\nconst Many2ManyAttendee = FieldMany2ManyTagsAvatar.extend({\n    // as this widget is model dependant (rpc on res.partner), use it in another\n    // context probably won't work\n    // supportedFieldTypes: ['many2many'],\n    specialData: \"_fetchSpecialAttendeeStatus\",\n    className: 'o_field_many2manytags avatar',\n\n    init: function () {\n        this._super.apply(this, arguments);\n        this.className += this.nodeOptions.block ? ' d-block' : '';\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     * @private\n     */\n    _renderTags: function () {\n        this._super.apply(this, arguments);\n        const avatars = this.el.querySelectorAll('.o_m2m_avatar');\n        for (const avatar of avatars) {\n            const partner_id = parseInt(avatar.dataset[\"id\"]);\n            const partner_data = this.record.specialData.partner_ids.find(partner => partner.id === partner_id);\n            if (partner_data) {\n                avatar.classList.add('o_attendee_border', \"o_attendee_border_\" + partner_data.status);\n            }\n        }\n    },\n    /**\n     * @override\n     * @private\n     */\n    _getRenderTagsContext: function () {\n        let result = this._super.apply(this, arguments);\n        result.attendeesData = this.record.specialData.partner_ids;\n        // Sort attendees to have the organizer on top.\n        // partner_ids are sorted by default according to their id/display_name in the \"elements\" FieldMany2ManyTag\n        // This method sort them to put the organizer on top\n        const organizer = result.attendeesData.find(item => item.is_organizer);\n        if (organizer) {\n            const org_id = organizer.id\n            // sort elements according to the partner id\n            result.elements.sort((a, b) => {\n                const a_org = a.id === org_id;\n                return a_org ? -1 : 1;\n             });\n        }\n        return result;\n    },\n});\n\nfieldRegistry.add('many2manyattendee', Many2ManyAttendee);\n", "/** @odoo-module alias=calendar.CalendarRenderer **/\n\nimport CalendarRenderer from 'web.CalendarRenderer';\nimport CalendarPopover from 'web.CalendarPopover';\nimport session from 'web.session';\n\nconst AttendeeCalendarPopover = CalendarPopover.extend({\n    template: 'Calendar.attendee.status.popover',\n    events: _.extend({}, CalendarPopover.prototype.events, {\n        'click .o-calendar-attendee-status .dropdown-item': '_onClickAttendeeStatus'\n    }),\n    /**\n     * @constructor\n     */\n    init: function () {\n        var self = this;\n        this._super.apply(this, arguments);\n        // Show status dropdown if user is in attendees list\n        if (this.isCurrentPartnerAttendee()) {\n            this.statusColors = {accepted: 'text-success', declined: 'text-danger', tentative: 'text-muted', needsAction: 'text-dark'};\n            this.statusInfo = {};\n            _.each(this.fields.attendee_status.selection, function (selection) {\n                self.statusInfo[selection[0]] = {text: selection[1], color: self.statusColors[selection[0]]};\n            });\n            this.selectedStatusInfo = this.statusInfo[this.event.extendedProps.record.attendee_status];\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @return {boolean}\n     */\n    isCurrentPartnerOrganizer() {\n        return this.event.extendedProps.record.partner_id[0] === session.partner_id;\n    },\n    /**\n     * @return {boolean}\n     */\n    isCurrentPartnerAttendee() {\n        return this.event.extendedProps.record.partner_ids.includes(session.partner_id);\n    },\n    /**\n     * @override\n     * @return {boolean}\n     */\n    isEventDeletable() {\n        return this._super() && this.isCurrentPartnerAttendee();\n    },\n    /**\n     * @override\n     * @return {boolean}\n     */\n    isEventDetailsVisible() {\n        return this._isEventPrivate() ? this.isCurrentPartnerAttendee() : this._super();\n    },\n    /**\n     * @override\n     * @return {boolean}\n     */\n    isEventEditable() {\n        return this._isEventPrivate() ? this.isCurrentPartnerAttendee() : this._super();\n    },\n    /**\n     * Check if we are a partner and if we are the only attendee.\n     * This avoid to display attendee answer dropdown for single user attendees\n     * @return {boolean}\n     */\n    displayAttendeeAnswerChoice() {\n        const isCurrentpartner = (currentValue) => currentValue === session.partner_id;\n        const onlyAttendee =  this.event.extendedProps.record.partner_ids.every(isCurrentpartner);\n        return this.isCurrentPartnerAttendee() && this.event.extendedProps.record.is_current_partner && !onlyAttendee;\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @return {boolean}\n     */\n    _isEventPrivate() {\n        return this.event.extendedProps.record.privacy === 'private';\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickAttendeeStatus: function (ev) {\n        ev.preventDefault();\n        const selectedStatus = $(ev.currentTarget).attr('data-action');\n        this.trigger_up('AttendeeStatus', {id: parseInt(this.event.id), record: this.event.extendedProps.record,\n        selectedStatus: selectedStatus});\n    },\n});\n\n\nconst AttendeeCalendarRenderer = CalendarRenderer.extend({\n    template: 'calendar.CalendarView',\n\n\tconfig: _.extend({}, CalendarRenderer.prototype.config, {\n        CalendarPopover: AttendeeCalendarPopover,\n        eventTemplate: 'Calendar.calendar-box',\n    }),\n    /**\n     * Add the attendee-id attribute in order to distinct the events when there are\n     * several attendees in the event.\n     * @override\n     */\n    _addEventAttributes: function (element, event) {\n        this._super(...arguments);\n        element.attr('data-attendee-id', event.extendedProps.attendee_id);\n    },\n    /**\n     * If an attendee_id has been set on the event, we check also the attendee-id attribute\n     * to select the good event on which the CSS class will be applied.\n     * @override\n     */\n    _computeEventSelector: function (info) {\n        let selector = this._super(...arguments);\n        if (info.event.extendedProps.attendee_id) {\n            selector += `[data-attendee-id=${info.event.extendedProps.attendee_id}]`;\n        }\n        return selector;\n    },\n});\n\nexport default {\n    AttendeeCalendarRenderer: AttendeeCalendarRenderer,\n    AttendeeCalendarPopover: AttendeeCalendarPopover,\n};\n", "/** @odoo-module alias=calendar.CalendarController **/\n\n    import Controller from 'web.CalendarController';\n    import Dialog from 'web.Dialog';\n    import { qweb as QWeb, _t } from 'web.core';\n\n    const CalendarController = Controller.extend({\n\n    renderButtons: function ($node) {\n        this._super.apply(this, arguments);\n        const $addButton =  $(QWeb.render('Calendar.calendar_add_buttons'));\n        this.$buttons.prepend($addButton)\n        const self = this;\n        // When clicking on \"Add\", create a new record in form view\n        this.$buttons.on('click', 'button.o-calendar-button-new', () => {\n            // TODO: switch to ir.action.act_window in master\n            return self.do_action('calendar.action_calendar_event_notify', {\n                additional_context: self.context,\n            });\n        });\n    },\n\n        _askRecurrenceUpdatePolicy() {\n            return new Promise((resolve, reject) => {\n                new Dialog(this, {\n                    title: _t('Edit Recurrent event'),\n                    size: 'small',\n                    $content: $(QWeb.render('calendar.RecurrentEventUpdate')),\n                    buttons: [{\n                        text: _t('Confirm'),\n                        classes: 'btn-primary',\n                        close: true,\n                        click: function () {\n                            resolve(this.$('input:checked').val());\n                        },\n                    }],\n                }).open();\n            });\n        },\n\n        /**\n         * If the event comes from the organizer we delete the event, else we the event is decline for the attendee\n         * @override \n         */\n        _onDeleteRecord: function (ev) {\n            const event = _.find(this.model.data.data, e => e.id === ev.data.id && e.attendee_id === ev.data.event.attendee_id);\n            if (this.getSession().partner_id === event.attendee_id && this.getSession().partner_id === event.record.partner_id[0]) {\n                this._super(...arguments);\n            } else {\n                var self = this;\n                this.model.declineEvent(event).then(function () {\n                    self.reload();\n                });\n            }\n        },\n\n        /**\n         * @override\n         * @private\n         * @param {OdooEvent} event\n         */\n        async _onDropRecord(event) {\n            const _super = this._super; // reference to this._super is lost after async call\n            await this._dropdUpdateRecord(event);\n            _super.apply(this, arguments);\n        },\n\n        /**\n         * @override\n         * @private\n         * @param {OdooEvent} event\n         */\n        async _onUpdateRecord(event) {\n            const _super = this._super;  // reference to this._super is lost after async call\n            await this._dropdUpdateRecord(event);\n            _super.apply(this, arguments);\n        },\n\n        async _dropdUpdateRecord(event) {\n            if (event.data.record.recurrency) {\n                const recurrenceUpdate = await this._askRecurrenceUpdatePolicy();\n                event.data = _.extend({}, event.data, {\n                    'recurrenceUpdate': recurrenceUpdate,\n                });\n            }\n        }\n\n    });\n\n    export default CalendarController;\n", "/** @odoo-module alias=calendar.CalendarModel **/\n\n    import Model from 'web.CalendarModel';\n\n    const CalendarModel = Model.extend({\n\n        /**\n         * @override\n         * Transform fullcalendar event object to odoo Data object\n         */\n        calendarEventToRecord(event) {\n            const data = this._super(event);\n            return _.extend({}, data, {\n                'recurrence_update': event.recurrenceUpdate,\n            });\n        },\n        async _getCalendarEventData(events) {\n            const calendarEventData = await this._super(...arguments);\n            const calendarEventByAttendeeData = await this._calendarEventByAttendee(calendarEventData);\n            return calendarEventByAttendeeData;\n        },\n        /**\n         * Split the events to display an event for each attendee with the correct status.\n         * If the all filter is activated, we don't display an event for each attendee and keep\n         * the previous behavior to display a single event.\n         * \n         */\n        async _calendarEventByAttendee(eventsData) {\n            const self = this;\n            let eventsDataByAttendee = [];\n            const attendeeFilters = self.loadParams.filters.partner_ids;\n            const everyoneFilter = attendeeFilters && (attendeeFilters.filters.find(f => f.value === \"all\") || {}).active || false;\n            const attendeeIDs = attendeeFilters && _.filter(attendeeFilters.filters.map(partner => partner.value !== 'all' ? partner.value : false), id => id !== false);\n            const eventIDs = eventsData.map(event => event.id);\n            // Fetch the attendees' info from the partners selected in the filter to display the events\n            this.attendees = await self._rpc({\n                model: 'res.partner',\n                method: 'get_attendee_detail',\n                args: [attendeeIDs, eventIDs],\n            });\n            if (!everyoneFilter) {\n                const currentPartnerId = this.getSession().partner_id;\n                eventsData.forEach(event => {\n                    const attendees = event.record.partner_ids && event.record.partner_ids.length ? event.record.partner_ids : [event.record.partner_id[0]];\n                    // Get the list of partner_id corresponding to active filters present in the current event\n                    const attendees_filtered = attendeeFilters.filters.reduce((acc, filter) => {\n                        if (filter.active && attendees.includes(filter.value)) {\n                            acc.push(filter.value);\n                        }\n                        return acc;\n                    }, []);\n\n                    // Create Event data for each attendee found\n                    attendees_filtered.forEach(attendee => {\n                        let e = $.extend(true, {}, event);\n                        e.attendee_id = attendee;\n                        const attendee_info = self.attendees.find(a => a.id === attendee && a.event_id === e.record.id);\n                        if (attendee_info) {\n                            e.record.attendee_status = attendee_info.status;\n                            e.record.is_alone = attendee_info.is_alone;\n                            // check if this event data corresponds to the current partner\n                            e.record.is_current_partner = currentPartnerId === attendee_info.id;\n                        }\n                        eventsDataByAttendee.push(e);\n                    });\n                });\n            } else {\n                eventsData.forEach(event => {\n                    event.attendee_id = event.record.partner_id && event.record.partner_id[0];\n                    const attendee_info = self.attendees.find(a => a.id === self.getSession().partner_id && a.event_id === event.record.id);\n                    if (attendee_info) {\n                        event.record.is_alone = attendee_info.is_alone;\n                    }\n                });\n            }\n            return eventsDataByAttendee.length ? eventsDataByAttendee : eventsData;\n        },\n\n        /**\n         * Decline an event for the actual attendee\n         * @param {Integer} eventId\n         */\n        declineEvent: function (event) {\n            return this._rpc({\n                model: 'calendar.attendee',\n                method: 'do_decline',\n                args: [this.attendees.find(attendee => attendee.event_id === event.id && attendee.id === this.getSession().partner_id).attendee_id],\n            });\n        },\n\n    /**\n     * Set the event color according to the filters values.\n     * When Everybodies'events are displayed, the color are set according to the first attendee_id to decrease confusion.\n     * Else, the event color are defined according to the existing filters colors.\n     * @private\n     * @param {any} element\n     * @param {any} events\n     * @returns {Promise}\n     */\n    _loadColors: function (element, events) {\n        if (this.fieldColor) {\n            const fieldName = this.fieldColor;\n            for (const event of events) {\n                // list of partners in case of calendar event\n                const value = event.record[fieldName];\n                const colorRecord = value[0];\n                const filter = this.loadParams.filters[fieldName];\n                const colorFilter = filter && filter.filters.map(f => f.value) || [colorRecord];\n                const everyoneFilter = filter && (filter.filters.find(f => f.value === \"all\") || {}).active || false;\n                let colorValue;\n                if (!everyoneFilter) {\n                    colorValue = event.attendee_id;\n                } else {\n                    const partner_id = this.getSession().partner_id\n                    colorValue = value.includes(partner_id) ? partner_id : colorRecord;\n                }\n                event.color_index = this._getColorIndex(colorFilter, colorValue);\n            }\n            this.model_color = this.fields[fieldName].relation || element.model;\n\n        }\n        return Promise.resolve();\n    },\n\n    });\n\n    export default CalendarModel;\n", "/** @odoo-module alias=calendar.CalendarView **/\n\nimport CalendarController from '@calendar/js/calendar_controller';\nimport CalendarModel from '@calendar/js/calendar_model';\nimport AttendeeCalendarRenderer from '@calendar/js/calendar_renderer';\nimport CalendarView from 'web.CalendarView';\nimport viewRegistry from 'web.view_registry';\n\nconst CalendarRenderer = AttendeeCalendarRenderer.AttendeeCalendarRenderer;\n\nvar AttendeeCalendarView = CalendarView.extend({\n    config: _.extend({}, CalendarView.prototype.config, {\n        Renderer: CalendarRenderer,\n        Controller: CalendarController,\n        Model: CalendarModel,\n    }),\n});\n\nviewRegistry.add('attendee_calendar', AttendeeCalendarView);\n\nexport default AttendeeCalendarView;\n", "/** @odoo-module **/\n\nimport ActivityMenu from '@mail/js/systray/systray_activity_menu';\nimport fieldUtils from 'web.field_utils';\n\nActivityMenu.include({\n\n    //-----------------------------------------\n    // Private\n    //-----------------------------------------\n\n    /**\n     * parse date to server value\n     *\n     * @private\n     * @override\n     */\n    _getActivityData: function () {\n        var self = this;\n        return this._super.apply(this, arguments).then(function () {\n            var meeting = _.find(self._activities, {type: 'meeting'});\n            if (meeting && meeting.meetings)  {\n                _.each(meeting.meetings, function (res) {\n                    res.start = fieldUtils.parse.datetime(res.start, false, {isUTC: true});\n                });\n            }\n        });\n    },\n\n    //-----------------------------------------\n    // Handlers\n    //-----------------------------------------\n\n    /**\n     * @private\n     * @override\n     */\n    _onActivityFilterClick: function (ev) {\n        var $el = $(ev.currentTarget);\n        var data = _.extend({}, $el.data());\n        if (data.res_model === \"calendar.event\" && data.filter === \"my\") {\n            this.do_action('calendar.action_calendar_event', {\n                additional_context: {\n                    default_mode: 'day',\n                    search_default_mymeetings: 1,\n                },\n               clear_breadcrumbs: true,\n            });\n        } else {\n            this._super.apply(this, arguments);\n        }\n    },\n});\n", "/** @odoo-module **/\n\nimport { browser } from \"@web/core/browser/browser\";\nimport { ConnectionLostError } from \"@web/core/network/rpc_service\";\nimport { registry } from \"@web/core/registry\";\n\nexport const calendarNotificationService = {\n    dependencies: [\"action\", \"notification\", \"rpc\"],\n\n    start(env, { action, notification, rpc }) {\n        let calendarNotifTimeouts = {};\n        let nextCalendarNotifTimeout = null;\n        const displayedNotifications = new Set();\n\n        env.bus.on(\"WEB_CLIENT_READY\", null, async () => {\n            const legacyEnv = owl.Component.env;\n            legacyEnv.services.bus_service.onNotification(this, (notifications) => {\n                for (const { payload, type } of notifications) {\n                    if (type === \"calendar.alarm\") {\n                        displayCalendarNotification(payload);\n                    }\n                }\n            });\n            legacyEnv.services.bus_service.startPolling();\n        });\n\n        /**\n         * Displays the Calendar notification on user's screen\n         */\n        function displayCalendarNotification(notifications) {\n            let lastNotifTimer = 0;\n\n            // Clear previously set timeouts and destroy currently displayed calendar notifications\n            browser.clearTimeout(nextCalendarNotifTimeout);\n            Object.values(calendarNotifTimeouts).forEach((notif) => browser.clearTimeout(notif));\n            calendarNotifTimeouts = {};\n\n            // For each notification, set a timeout to display it\n            notifications.forEach(function (notif) {\n                const key = notif.event_id + \",\" + notif.alarm_id;\n                if (displayedNotifications.has(key)) {\n                    return;\n                }\n                calendarNotifTimeouts[key] = browser.setTimeout(function () {\n                    const notificationRemove = notification.add(notif.message, {\n                        title: notif.title,\n                        type: \"warning\",\n                        sticky: true,\n                        onClose: () => {\n                            displayedNotifications.delete(key);\n                        },\n                        buttons: [\n                            {\n                                name: env._t(\"OK\"),\n                                primary: true,\n                                onClick: async () => {\n                                    await rpc(\"/calendar/notify_ack\");\n                                    notificationRemove();\n                                },\n                            },\n                            {\n                                name: env._t(\"Details\"),\n                                onClick: async () => {\n                                    await action.doAction({\n                                        type: 'ir.actions.act_window',\n                                        res_model: 'calendar.event',\n                                        res_id: notif.event_id,\n                                        views: [[false, 'form']],\n                                    }\n                                    );\n                                    notificationRemove();\n                                },\n                            },\n                            {\n                                name: env._t(\"Snooze\"),\n                                onClick: () => {\n                                    notificationRemove();\n                                },\n                            },\n                        ],\n                    });\n                    displayedNotifications.add(key);\n                }, notif.timer * 1000);\n                lastNotifTimer = Math.max(lastNotifTimer, notif.timer);\n            });\n\n            // Set a timeout to get the next notifications when the last one has been displayed\n            if (lastNotifTimer > 0) {\n                nextCalendarNotifTimeout = browser.setTimeout(\n                    getNextCalendarNotif,\n                    lastNotifTimer * 1000\n                );\n            }\n        }\n\n        async function getNextCalendarNotif() {\n            try {\n                const result = await rpc(\"/calendar/notify\", {}, { silent: true });\n                displayCalendarNotification(result);\n            } catch (error) {\n                if (!(error instanceof ConnectionLostError)) {\n                    throw error;\n                }\n            }\n        }\n    },\n};\n\nregistry.category(\"services\").add(\"calendarNotification\", calendarNotificationService);\n", "odoo.define('web_kanban_gauge.widget', function (require) {\n\"use strict\";\n\nvar AbstractField = require('web.AbstractField');\nvar core = require('web.core');\nvar field_registry = require('web.field_registry');\nvar utils = require('web.utils');\n\nvar _t = core._t;\n\n/**\n * options\n *\n * - max_value: maximum value of the gauge [default: 100]\n * - max_field: get the max_value from the field that must be present in the\n *   view; takes over max_value\n * - gauge_value_field: if set, the value displayed below the gauge is taken\n *   from this field instead of the base field used for\n *   the gauge. This allows to display a number different\n *   from the gauge.\n * - label: lable of the gauge, displayed below the gauge value\n * - label_field: get the label from the field that must be present in the\n *   view; takes over label\n * - title: title of the gauge, displayed on top of the gauge\n * - style: custom style\n */\n\nvar GaugeWidget = AbstractField.extend({\n    className: \"oe_gauge\",\n    jsLibs: [\n        '/web/static/lib/Chart/Chart.js',\n    ],\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     * @private\n     */\n    _render: function () {\n        // current value\n        var val = this.value;\n        if (_.isArray(JSON.parse(val))) {\n            val = JSON.parse(val);\n        }\n        var gauge_value = _.isArray(val) && val.length ? val[val.length-1].value : val;\n        if (this.nodeOptions.gauge_value_field) {\n            gauge_value = this.recordData[this.nodeOptions.gauge_value_field];\n        }\n\n        // max_value\n        var max_value = this.nodeOptions.max_value || 100;\n        if (this.nodeOptions.max_field) {\n            max_value = this.recordData[this.nodeOptions.max_field];\n        }\n        max_value = Math.max(gauge_value, max_value);\n\n        // label\n        var label = this.nodeOptions.label || \"\";\n        if (this.nodeOptions.label_field) {\n            label = this.recordData[this.nodeOptions.label_field];\n        }\n\n        // title\n        var title = this.nodeOptions.title || this.field.string;\n\n        var maxLabel = max_value;\n        if (gauge_value === 0 && max_value === 0) {\n            max_value = 1;\n            maxLabel = 0;\n        }\n\t\tvar config = {\n\t\t\ttype: 'doughnut',\n\t\t\tdata: {\n\t\t\t\tdatasets: [{\n\t\t\t\t\tdata: [\n                        gauge_value,\n                        max_value - gauge_value\n\t\t\t\t\t],\n\t\t\t\t\tbackgroundColor: [\n                        \"#1f77b4\", \"#dddddd\"\n\t\t\t\t\t],\n\t\t\t\t\tlabel: title\n\t\t\t\t}],\n\t\t\t},\n\t\t\toptions: {\n\t\t\t\tcircumference: Math.PI,\n\t\t\t\trotation: -Math.PI,\n\t\t\t\tresponsive: true,\n                tooltips: {\n                    displayColors: false,\n                    callbacks: {\n                        label: function(tooltipItems) {\n                            if (tooltipItems.index === 0) {\n                                return _t('Value: ') + gauge_value;\n                            }\n                            return _t('Max: ') + maxLabel;\n                        },\n                    },\n                },\n\t\t\t\ttitle: {\n\t\t\t\t\tdisplay: true,\n\t\t\t\t\ttext: title,\n                    padding: 4,\n\t\t\t\t},\n                layout: {\n                    padding: {\n                        bottom: 5\n                    }\n                },\n                maintainAspectRatio: false,\n                cutoutPercentage: 70,\n            }\n\t\t};\n        this.$canvas = $('<canvas/>');\n        this.$el.empty();\n        this.$el.append(this.$canvas);\n        this.$el.attr('style', this.nodeOptions.style);\n        this.$el.css({position: 'relative'});\n        var context = this.$canvas[0].getContext('2d');\n        this.chart = new Chart(context, config);\n\n        var humanValue = utils.human_number(gauge_value, 1);\n        var $value = $('<span class=\"o_gauge_value\">').text(humanValue);\n        $value.css({'text-align': 'center', position: 'absolute', left: 0, right: 0, bottom: '6px', 'font-weight': 'bold'});\n        this.$el.append($value);\n    },\n});\n\nfield_registry.add(\"gauge\", GaugeWidget);\n\nreturn GaugeWidget;\n\n});\n", "/** @odoo-module **/\n\n    /**\n     * This From Controller makes sure we display a rainbowman message\n     * when the stage is won, even when we click on the statusbar.\n     * When the stage of a lead is changed and data are saved, we check\n     * if the lead is won and if a message should be displayed to the user\n     * with a rainbowman like when the user click on the button \"Mark Won\".\n     */\n\n    import FormController from 'web.FormController';\n    import FormView from 'web.FormView';\n    import viewRegistry from 'web.view_registry';\n\n    var CrmFormController = FormController.extend({\n        /**\n         * Main method used when saving the record hitting the \"Save\" button.\n         * We check if the stage_id field was altered and if we need to display a rainbowman\n         * message.\n         *\n         * This method will also simulate a real \"force_save\" on the email and phone\n         * when needed. The \"force_save\" attribute only works on readonly field. For our\n         * use case, we need to write the email and the phone even if the user didn't\n         * change them, to synchronize those values with the partner (so the email / phone\n         * inverse method can be called).\n         *\n         * We base this synchronization on the value of \"partner_phone_update\"\n         * and \"partner_phone_update\", which are computed fields that hold a value\n         * whenever we need to synch.\n         *\n         * @override\n         */\n        saveRecord: function (recordID, options) {\n            recordID = recordID || this.handle;\n            const localData = this.model.localData[recordID];\n            const changes = localData._changes || {};\n\n            const needsSynchronizationEmail = changes.partner_email_update === undefined\n                ? localData.data.partner_email_update // original value\n                : changes.partner_email_update; // new value\n\n            const needsSynchronizationPhone = changes.partner_phone_update === undefined\n                ? localData.data.partner_phone_update // original value\n                : changes.partner_phone_update; // new value\n\n            if (needsSynchronizationEmail && changes.email_from === undefined && localData.data.email_from) {\n                changes.email_from = localData.data.email_from;\n            }\n            if (needsSynchronizationPhone && changes.phone === undefined && localData.data.phone) {\n                changes.phone = localData.data.phone;\n            }\n            if (!localData._changes && Object.keys(changes).length) {\n                localData._changes = changes;\n            }\n\n            return this._super(...arguments).then((modifiedFields) => {\n                if (modifiedFields.indexOf('stage_id') !== -1) {\n                    this._checkRainbowmanMessage(this.renderer.state.res_id)\n                }\n            });\n        },\n\n        //--------------------------------------------------------------------------\n        // Private\n        //--------------------------------------------------------------------------\n\n        /**\n         * Apply change may be called with 'event.data.force_save' set to True.\n         * This typically happens when directly clicking in the statusbar widget on a new stage.\n         * If it's the case, we check for a modified stage_id field and if we need to display a\n         * rainbowman message.\n         *\n         * @param {string} dataPointID\n         * @param {Object} changes\n         * @param {OdooEvent} event\n         * @override\n         * @private\n         */\n        _applyChanges: function (dataPointID, changes, event) {\n            return this._super(...arguments).then(() => {\n                if (event.data.force_save && 'stage_id' in changes) {\n                    this._checkRainbowmanMessage(parseInt(event.target.res_id));\n                }\n            });\n        },\n\n        /**\n         * When updating a crm.lead, through direct use of the status bar or when saving the\n         * record, we check for a rainbowman message to display.\n         *\n         * (see Widget docstring for more information).\n         *\n         * @param {integer} recordId\n         */\n        _checkRainbowmanMessage: async function(recordId) {\n            const message = await this._rpc({\n                model: 'crm.lead',\n                method : 'get_rainbowman_message',\n                args: [[recordId]],\n            });\n            if (message) {\n                this.trigger_up('show_effect', {\n                    message: message,\n                    type: 'rainbow_man',\n                });\n            }\n        }\n    });\n\n    var CrmFormView = FormView.extend({\n        config: _.extend({}, FormView.prototype.config, {\n            Controller: CrmFormController,\n        }),\n    });\n\n    viewRegistry.add('crm_form', CrmFormView);\n\n    export default {\n        CrmFormController: CrmFormController,\n        CrmFormView: CrmFormView,\n    };\n", "/** @odoo-module **/\n\n    /**\n     * This Kanban Model make sure we display a rainbowman\n     * message when a lead is won after we moved it in the\n     * correct column and when it's grouped by stage_id (default).\n     */\n\n    import KanbanModel from 'web.KanbanModel';\n    import KanbanView from 'web.KanbanView';\n    import viewRegistry from 'web.view_registry';\n\n    var CrmKanbanModel = KanbanModel.extend({\n        /**\n         * Check if the kanban view is grouped by \"stage_id\" before checking if the lead is won\n         * and displaying a possible rainbowman message.\n         * @override\n         */\n        moveRecord: async function (recordID, groupID, parentID) {\n            var result = await this._super(...arguments);\n            if (this.localData[parentID].groupedBy[0] === this.defaultGroupedBy[0]) {\n                const message = await this._rpc({\n                    model: 'crm.lead',\n                    method : 'get_rainbowman_message',\n                    args: [[parseInt(this.localData[recordID].res_id)]],\n                });\n                if (message) {\n                    this.trigger_up('show_effect', {\n                        message: message,\n                        type: 'rainbow_man',\n                    });\n                }\n            }\n            return result;\n        },\n    });\n\n    var CrmKanbanView = KanbanView.extend({\n        config: _.extend({}, KanbanView.prototype.config, {\n            Model: CrmKanbanModel,\n        }),\n    });\n\n    viewRegistry.add('crm_kanban', CrmKanbanView);\n\n    export default {\n        CrmKanbanModel: CrmKanbanModel,\n        CrmKanbanView: CrmKanbanView,\n    };\n", "/** @odoo-module */\nimport AbstractService from 'web.AbstractService';\nimport core from 'web.core';\n\n/**\n * Configuration depending on the granularity:\n * @param {function} startOf function to get the start moment of the period from a moment\n * @param {int} cycle amount of 'granularity' periods constituting a cycle. The cycle duration\n *                    is arbitrary for each granularity:\n * cycle    ---    granularity\n * ___________________________\n * 1 day           hour\n * 1 week          day\n * 1 week          week    # there is no greater time period that takes an integer amount of weeks\n * 1 year          month\n * 1 year          quarter\n * 1 year          year    # we are not using a greater time period in Odoo (yet)\n * @param {int} cyclePos function to get the position (index) in the cycle from a moment.\n *                       {1} is the first index. {+1} is used for functions which have an index\n *                       starting from 0, to standardize between granularities.\n */\nconst GRANULARITY_TABLE = {\n    hour: {\n        startOf: x => x.startOf('hour'),\n        cycle: 24,\n        cyclePos: x => x.hour() + 1,\n    },\n    day: {\n        startOf: x => x.startOf('day'),\n        cycle: 7,\n        cyclePos: x => x.isoWeekday(),\n    },\n    week: {\n        startOf: x => x.startOf('isoWeek'),\n        cycle: 1,\n        cyclePos: x => 1,\n    },\n    month: {\n        startOf: x => x.startOf('month'),\n        cycle: 12,\n        cyclePos: x => x.month() + 1,\n    },\n    quarter: {\n        startOf: x => x.startOf('quarter'),\n        cycle: 4,\n        cyclePos: x => x.quarter(),\n    },\n    year: {\n        startOf: x => x.startOf('year'),\n        cycle: 1,\n        cyclePos: x => 1,\n    },\n};\n\n/**\n * configuration depending on the time type:\n * @param {string} format moment format to display this type as a string\n * @param {string} minGranularity granularity of the smallest time interval used in Odoo for this\n *                                type\n */\nconst FIELD_TYPE_TABLE = {\n    date: {\n        format: \"YYYY-MM-DD\",\n        minGranularity: \"day\",\n    },\n    datetime: {\n        format: \"YYYY-MM-DD HH:mm:ss\",\n        minGranularity: \"second\",\n    }\n};\n\n/**\n * fill_temporal period:\n *   Represents a specific date/time range for a specific model, field and granularity.\n *\n * It is used to add new domain and context constraints related to a specific date/time\n * field, in order to configure the _read_group_fill_temporal (see core models.py)\n * method. It will be used when we want to get continuous groups in chronological\n * order in a specific date/time range.\n */\nclass FillTemporalPeriod {\n    /**\n     * This constructor is meant to be used only by the FillTemporalService (see below)\n     *\n     * @param {string} modelName directly taken from model.loadParams.modelName.\n     *                           this is the `res_model` from the action (i.e. `crm.lead`)\n     * @param {Object} field a dictionary with keys \"name\" and \"type\".\n    *                        name: Name of the field on which the fill_temporal should apply\n    *                              (i.e. 'date_deadline')\n    *                        type: 'date' or 'datetime'\n     * @param {string} granularity can either be : hour, day, week, month, quarter, year\n     * @param {integer} minGroups minimum amount of groups to display, regardless of other\n     *                            constraints\n     */\n    constructor(modelName, field, granularity, minGroups) {\n        this.modelName = modelName;\n        this.field = field;\n        this.granularity = granularity || \"month\";\n        this.setMinGroups(minGroups);\n\n        this._computeStart();\n        this._computeEnd();\n    }\n    /**\n     * Compute the moment for the start of the period containing \"now\"\n     *\n     * @private\n     */\n    _computeStart() {\n        this.start = GRANULARITY_TABLE[this.granularity].startOf(moment());\n    }\n    /**\n     * Compute the moment for the end of the fill_temporal period. This bound is exclusive.\n     * The fill_temporal period is the number of [granularity] from [start] to the end of the\n     * [cycle] reached after adding [minGroups]\n     * i.e. we are in october 2020 :\n     *      [start] = 2020-10-01\n     *      [granularity] = 'month',\n     *      [cycle] = 12\n     *      [minGroups] = 4,\n     *      => fillTemporalPeriod = 15 months (until end of december 2021)\n     *\n     * @private\n     */\n    _computeEnd() {\n        const cycle = GRANULARITY_TABLE[this.granularity].cycle;\n        const cyclePos = GRANULARITY_TABLE[this.granularity].cyclePos(this.start);\n        /**\n         * fillTemporalPeriod formula explanation :\n         * We want to know how many steps need to be taken from the current position until the end\n         * of the cycle reached after guaranteeing minGroups positions. Let's call this cycle (C).\n         *\n         * (1) compute the steps needed to reach the last position of the current cycle, from the\n         *     current position:\n         *     {cycle - cyclePos}\n         *\n         * (2) ignore {minGroups - 1} steps from the position reached in (1). Now, the current\n         *     position is somewhere in (C). One step from minGroups is reserved to reach the first\n         *     position after (C), hence {-1}\n         *\n         * (3) compute the additional steps needed to reach the last position of (C), from the\n         *     position reached in (2):\n         *     {cycle - (minGroups - 1) % cycle}\n         *\n         * (4) combine (1) and (3), the sum should not be greater than a full cycle (-> truncate):\n         *     {(2 * cycle - (minGroups - 1) % cycle - cyclePos) % cycle}\n         *\n         * (5) add minGroups!\n         */\n        const fillTemporalPeriod = (2 * cycle - (this.minGroups - 1) % cycle - cyclePos) % cycle + this.minGroups;\n        this.end = moment(this.start).add(fillTemporalPeriod, `${this.granularity}s`);\n        this.computedEnd = true;\n    }\n    /**\n     * The server needs a date/time in UTC, but we don't want a day shift in case\n     * of dates, even if the date is not in UTC\n     *\n     * @param {moment} bound the moment to be formatted (this.start or this.end)\n     */\n    _getFormattedServerDate(bound) {\n        if (bound.isUTC() || this.field.type === \"date\") {\n            return bound.format(FIELD_TYPE_TABLE[this.field.type].format);\n        } else {\n            return moment.utc(bound).format(FIELD_TYPE_TABLE[this.field.type].format);\n        }\n    }\n    /**\n     * @param {Object} configuration\n     * @param {Array[]} [domain]\n     * @param {boolean} [forceStartBound=true] whether this.start moment must be used as a domain\n     *                                         constraint to limit read_group results or not\n     * @param {boolean} [forceEndBound=true] whether this.end moment must be used as a domain\n     *                                       constraint to limit read_group results or not\n     * @returns {Array[]} new domain\n     */\n    getDomain({domain, forceStartBound=true, forceEndBound=true}) {\n        if (!forceEndBound && !forceStartBound) {\n            return domain;\n        }\n        const originalDomain = domain.length ? ['&', ...domain] : [];\n        const defaultDomain = ['|', [this.field.name, '=', false]];\n        const linkDomain = forceStartBound && forceEndBound ? ['&'] : [];\n        const startDomain = !forceStartBound ? [] : [\n            [this.field.name, '>=', this._getFormattedServerDate(this.start)]];\n        const endDomain = !forceEndBound ? [] : [\n            [this.field.name, '<', this._getFormattedServerDate(this.end)]];\n        return [...originalDomain, ...defaultDomain, ...linkDomain, ...startDomain, ...endDomain];\n    }\n    /**\n     * The default value of forceFillingTo is false when this.end is the\n     * computed one, and true when it is manually set. This is because the default value of\n     * this.end is computed without any knowledge of the existing data, and as such, we only\n     * want to get continuous groups until the last group with data (no need to force until\n     * this.end). On the contrary, when we set this.end, this means that we want groups until\n     * that date.\n     *\n     * @param {Object} configuration\n     * @param {Object} [context]\n     * @param {boolean} [forceFillingFrom=true] fill_temporal must apply from:\n     *                                          true: this.start\n     *                                          false: the first group with at least one record\n     * @param {boolean} [forceFillingTo=!this.computedEnd] fill_temporal must apply until:\n     *                                          true: this.end\n     *                                          false: the last group with at least one record\n     * @returns {Object} new context\n     */\n    getContext({context, forceFillingFrom=true, forceFillingTo=!this.computedEnd}) {\n        const fillTemporal = {\n            min_groups: this.minGroups,\n        };\n        if (forceFillingFrom) {\n            fillTemporal.fill_from = this._getFormattedServerDate(this.start);\n        }\n        if (forceFillingTo) {\n            fillTemporal.fill_to = this._getFormattedServerDate(\n                moment(this.end).subtract(1, FIELD_TYPE_TABLE[this.field.type].minGranularity)\n            );\n        }\n        context = {...context, fill_temporal: fillTemporal};\n        return context;\n    }\n    /**\n     * @param {integer} minGroups minimum amount of groups to display, regardless of other\n     *                            constraints\n     */\n    setMinGroups(minGroups) {\n        this.minGroups = minGroups || 1;\n    }\n    /**\n     * sets the end of the period to the desired moment. It must be greater\n     * than start. Changes the default behavior of getContext forceFillingTo\n     * (becomes true instead of false)\n     *\n     * @param {moment} end\n     */\n    setEnd(end) {\n        this.end = moment.max(this.start, end);\n        this.computedEnd = false;\n    }\n    /**\n     * sets the start of the period to the desired moment. It must be smaller than end\n     *\n     * @param {moment} start\n     */\n    setStart(start) {\n        this.start = moment.min(this.end, start);\n    }\n    /**\n     * Adds one \"granularity\" period to [this.end], to expand the current fill_temporal period\n     */\n    expand() {\n        this.setEnd(this.end.add(1, `${this.granularity}s`));\n    }\n}\n\n/**\n * fill_temporal Service\n *\n * This service will be used to generate or retrieve fill_temporal periods\n *\n * A specific fill_temporal period configuration will always refer to the same instance\n * unless forceRecompute is true\n */\n const FillTemporalService = AbstractService.extend({\n    /**\n     * @override\n     */\n    start() {\n        this._super.apply(...arguments);\n        this._fillTemporalPeriods = {};\n    },\n    /**\n     * Get a fill_temporal period according to the configuration.\n     * The default initial fill_temporal period is the number of [granularity] from [start]\n     * to the end of the [cycle] reached after adding [minGroups]\n     * i.e. we are in october 2020 :\n     *      [start] = 2020-10-01\n     *      [granularity] = 'month',\n     *      [cycle] = 12 (one year)\n     *      [minGroups] = 4,\n     *      => fillTemporalPeriod = 15 months (until the end of december 2021)\n     * Once created, a fill_temporal period for a specific configuration will be stored\n     * until requested again. This allows to manipulate the period and store the changes\n     * to it. This also allows to keep the configuration when switching to another view\n     *\n     * @param {Object} configuration\n     * @param {string} [modelName] directly taken from model.loadParams.modelName.\n     *                             this is the `res_model` from the action (i.e. `crm.lead`)\n     * @param {Object} [field] a dictionary with keys \"name\" and \"type\".\n     * @param {string} [field.name] name of the field on which the fill_temporal should apply\n     *                              (i.e. 'date_deadline')\n     * @param {string} [field.type] date field type: 'date' or 'datetime'\n     * @param {string} [granularity] can either be : hour, day, week, month, quarter, year\n     * @param {integer} [minGroups=4] optional minimal amount of desired groups\n     * @param {boolean} [forceRecompute=false] optional whether the fill_temporal period should be\n     *                                         reinstancied\n     * @returns {FillTemporalPeriod}\n     */\n    getFillTemporalPeriod({modelName, field, granularity, minGroups=4, forceRecompute=false}) {\n        if (!(modelName in this._fillTemporalPeriods)) {\n            this._fillTemporalPeriods[modelName] = {};\n        }\n        if (!(field.name in this._fillTemporalPeriods[modelName])) {\n            this._fillTemporalPeriods[modelName][field.name] = {};\n        }\n        if (!(granularity in this._fillTemporalPeriods[modelName][field.name]) || forceRecompute) {\n            this._fillTemporalPeriods[modelName][field.name][granularity] =\n                new FillTemporalPeriod(modelName, field, granularity, minGroups);\n        } else if (this._fillTemporalPeriods[modelName][field.name][granularity].minGroups != minGroups) {\n            this._fillTemporalPeriods[modelName][field.name][granularity].setMinGroups(minGroups);\n        }\n        return this._fillTemporalPeriods[modelName][field.name][granularity];\n    }\n});\n\ncore.serviceRegistry.add('fillTemporalService', FillTemporalService);\n\nexport default FillTemporalService;\n", "/** @odoo-module */\nimport KanbanController from 'web.KanbanController';\n\nconst ForecastKanbanController = KanbanController.extend({\n    custom_events: _.extend({}, KanbanController.prototype.custom_events, {\n        forecast_kanban_add_column: '_onAddColumnForecast',\n    }),\n\n    /**\n     * Expand the fill_temporal period after the ForecastColumnQuickCreate has been used, then\n     * reload the view to refetch updated data\n     *\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onAddColumnForecast(ev) {\n        ev.stopPropagation();\n        this.call('fillTemporalService', 'getFillTemporalPeriod', {\n            modelName: this.model.loadParams.modelName,\n            field: {\n                name: this.model.forecast_field,\n                type: this.model.loadParams.fields[this.model.forecast_field].type,\n            },\n            granularity: this.model.granularity,\n        }).expand();\n        this.mutex.exec(() => this.update(\n            { groupBy: [`${this.model.forecast_field}:${this.model.granularity}`] },\n            { reload: true }\n        ));\n    },\n});\n\nexport {\n    ForecastKanbanController,\n};\n", "/** @odoo-module */\nimport Widget from 'web.Widget';\nimport { _t } from 'web.core';\n\n/**\n * Widget to handle events related to the Add button in\n * ForecastKanban views. The view is supposed to automatically add\n * the next column (chronological order), and use the\n * FillTemporalService which will handle the covered fill_temporal period\n * to know which column to add.\n */\nconst ForecastColumnQuickCreate = Widget.extend({\n    template: 'KanbanView.ForecastColumnQuickCreate',\n    events: {\n        'click .o_quick_create_folded': '_onAddColumnClicked',\n    },\n\n    /**\n     * @override\n     * @param {Object} options\n     * @param {string} [options.addColumnLabel] displayed label\n     *        (should be the granularity of a date/datetime groupBy)\n     */\n    init: function (parent, options) {\n        this._super.apply(this, arguments);\n        this.addColumnLabel = _.str.sprintf(_t('Add next %s'), options.addColumnLabel);\n    },\n\n    /**\n     * Notify the environment to add a column\n     *\n     * @private\n     */\n    _addColumn: function () {\n        this.trigger_up('forecast_kanban_add_column', {});\n    },\n\n    /**\n     * @private\n     * @param {MouseEvent} event\n     */\n    _onAddColumnClicked: function (event) {\n        event.stopPropagation();\n        this._addColumn();\n    },\n});\n\nexport default ForecastColumnQuickCreate;\n", "/** @odoo-module */\nimport ActionModel from 'web.ActionModel';\n\n/**\n * This file contains the logic behind a special \"Forecast\" filter.\n * Any such filter should set the context key {forecast_filter: 1}\n * Another context key must also be set for the view using this model extension:\n * {forecast_field: \"date_field_name\"}, which represents the date/time field on which\n * the forecast should be applied\n *\n * The main purpose is to be able to modify the domain depending on the groupby granularity\n * when the field is a `date/time` field and is the `forecast_field`. The domain should filter\n * records from the period (granularity) containing \"now\", or those where the forecast_field\n * is not set.\n * example:\n *  today:          2021-04-21\n *  granularity:    month\n *  field name:     date_field\n *  -> the domain would be: ['&', ['date_field', '=', false], ['date_field', '>=', '2021-04-01']]\n */\nconst DATE_FORMAT = {\n    datetime: \"YYYY-MM-DD HH:mm:ss\",\n    date: \"YYYY-MM-DD\",\n};\nclass ForecastModelExtension extends ActionModel.Extension {\n    /**\n     * @override\n     */\n    dispatch() {\n        this.state.forecastStart = null;\n    }\n\n    /**\n     * @override\n     */\n    get(property) {\n        switch (property) {\n            case \"domain\": return this.getDomain();\n            default: return super.get(...arguments);\n        }\n    }\n\n    /**\n     * Adds a domain constraint to only get records from the start of the period containing \"now\",\n     * only if a \"Forecast\" filter is active\n     *\n     * @returns {Array[]}\n     */\n    getDomain() {\n        const forecastField = this.config.context.forecast_field;\n        if (!forecastField) {\n            return null;\n        }\n        const filters = this.config.get(\"filters\").flat();\n        const forecastFilter = filters.some((f) => {\n            return f.isActive && f.context && f.context.forecast_filter;\n        });\n        if (!forecastFilter) {\n            return null;\n        }\n        const forecastStart = this._getForecastStart(forecastField);\n        return [\"|\", [forecastField, \"=\", false], [forecastField, \">=\", forecastStart]];\n    }\n\n    /**\n     * @override\n     */\n    prepareState() {\n        super.prepareState(...arguments);\n        Object.assign(this.state, {\n            forecastStart: null,\n        });\n    }\n\n    /**\n     * Returns a date (datetime) starting from a forecast field of type date (resp. datetime).\n     * The value returned depends on the active groubys.\n     * @private\n     * @param {string} forecastField name of the date/time field related to the forecast\n     * @returns {string}\n     */\n    _getForecastStart(forecastField) {\n        if (!this.state.forecastStart) {\n            const type = this.config.fields[forecastField].type;\n            const groupBy = this.config.get(\"groupBy\").flat();\n            const firstForecastGroupBy = groupBy.find((gb) => gb.includes(forecastField));\n            let granularity = \"month\";\n            if (firstForecastGroupBy) {\n                granularity = firstForecastGroupBy.split(\":\")[1] || \"month\";\n            } else if (groupBy.length) {\n                // there is a groupBy, but it is not the forecast_field\n                granularity = \"day\";\n            }\n            let startMoment = moment().startOf(granularity);\n            // The server needs a date/time in UTC, but to avoid a day shift in case\n            // of date, we only need to consider it for datetime fields\n            if (type === \"datetime\") {\n                startMoment = moment.utc(startMoment);\n            }\n            const format = DATE_FORMAT[type];\n            this.state.forecastStart = startMoment.format(format);\n        }\n        return this.state.forecastStart;\n    }\n}\n\nActionModel.registry.add(\"forecast\", ForecastModelExtension, 20);\n\nexport default ForecastModelExtension;\n", "/** @odoo-module */\nimport KanbanModel from 'web.KanbanModel';\n\nconst ForecastKanbanModel = KanbanModel.extend({\n    /**\n     * Checks whether to apply the forecast logic to a load or a reload, depending on the groupby\n     * and the forecast_field. Sets the current granularity if the forecast applies\n     *\n     * @private\n     * @param {Object} element what to load (params) / reload (localData from id)\n     * @param {Object} params optional reload params\n     * @returns {boolean}\n     */\n    _isForecast(element, params={}) {\n        let groupby, granularity;\n        if (!element) {\n            return false;\n        }\n        if (\"groupBy\" in params) {\n            [groupby, granularity] = params.groupBy[0].split(':');\n        } else if (element.groupedBy.length != 0) {\n            [groupby, granularity] = element.groupedBy[0].split(':');\n        } else if (element.groupBy.length != 0) {\n            [groupby, granularity] = element.groupBy[0].split(':');\n        }\n        granularity = granularity || \"month\";\n        if (!this.forecast_field || groupby != this.forecast_field) {\n            return false;\n        }\n        this.granularity = granularity;\n        return true;\n    },\n\n    /**\n     * At every __load/__reload, we have to check the range of the last group received from the\n     * read_group, and update the fillTemporalPeriod from the FillTemporalService accordingly\n     *\n     * @private\n     */\n    _updateFillTemporalPeriodEnd(fillTemporalPeriod) {\n        let lastGroup = this.get(this.handle).data.filter(group => group.value).slice(-1)[0];\n        if (lastGroup) {\n            lastGroup = this.localData[lastGroup.id];\n            fillTemporalPeriod.setEnd(moment.utc(lastGroup.range[this.forecast_field].to));\n        }\n    },\n\n    /**\n     * Applies the forecast logic to the domain and context if needed before the read_group.\n     * After the read_group, checks the end date of the last displayed group in order to be able to\n     * add the next group with the ForecastColumnQuickCreate widget\n     *\n     * @private\n     * @override\n     */\n    async __load(params) {\n        this.loadDomain = params.domain;\n        this.loadContext = params.context;\n        this.forecast_field = params.context.forecast_field;\n        if (!this._isForecast(params)) {\n            return this._super(...arguments);\n        }\n        this.minGroups =\n            params.context.fill_temporal && params.context.fill_temporal.min_groups || undefined;\n        const fillTemporalPeriod = this.call('fillTemporalService', 'getFillTemporalPeriod', {\n            modelName: params.modelName,\n            field: {\n                name: this.forecast_field,\n                type: params.fields[this.forecast_field].type,\n            },\n            granularity: this.granularity,\n            minGroups: this.minGroups,\n            forceRecompute: true,\n        });\n        params.domain = fillTemporalPeriod.getDomain({\n            domain: this.loadDomain,\n            forceStartBound: false\n        });\n        params.context = fillTemporalPeriod.getContext({ context: this.loadContext });\n        this.handle = await this._super(...arguments);\n        this._updateFillTemporalPeriodEnd(fillTemporalPeriod);\n        return this.handle;\n    },\n\n    /**\n     * In order to display the sample data, the context and domain need to be the same as before a\n     * reload. If the user switches to another view (list, pivot, ...) and comes back without\n     * adding any record or modifying the search bar, we still want to display the sample data, but\n     * the actual domain and context won't be the same because load and reload are modifying them.\n     *\n     * As such, we will only compare the original domain and context (without the use of the\n     * FillTemporalService) to determine whether the sample data should be enabled or not.\n     *\n     * The behavior for timeRanges and groupBy is unchanged from the original\n     *\n     * @private\n     * @override\n     * @param {Object} [params={}]\n     * @param {Object} [params.context]\n     * @param {Array[]} [params.domain]\n     * @param {Object} [params.timeRanges]\n     * @param {string[]} [params.groupBy]\n     * @returns {boolean}\n     */\n    _haveParamsChanged(params = {}) {\n        const originalParams = [this.loadContext, this.loadDomain];\n        const currentParams = [this.reloadContext, this.reloadDomain];\n        if (JSON.stringify(originalParams) !== JSON.stringify(currentParams)) {\n            return true;\n        }\n        if ('timeRanges' in params) {\n            const diff = JSON.stringify(params.timeRanges) !== JSON.stringify(this.loadParams.timeRanges);\n            if (diff) {\n                return true;\n            }\n        }\n        if (this.useSampleModel && 'groupBy' in params) {\n            return JSON.stringify(params.groupBy) !== JSON.stringify(this.loadParams.groupedBy);\n        }\n    },\n\n    /**\n     * Applies the forecast logic to the domain and context if needed before the read_group.\n     * After the read_group, checks the end date of the last displayed group in order to be able to\n     * add the next group with the ForecastColumnQuickCreate widget\n     *\n     * @private\n     * @override\n     */\n    async __reload(id, params) {\n        if (this.handle !== id || this.isSampleModel) {\n            // the forecast logic should only apply when the whole view is reloading on real data\n            return this._super(...arguments);\n        }\n        if (\"domain\" in params) {\n            this.reloadDomain = params.domain;\n        }\n        if (\"context\" in params) {\n            this.reloadContext = params.context;\n            this.forecast_field = params.context.forecast_field;\n            this.minGroups =\n                params.context.fill_temporal && params.context.fill_temporal.min_groups || this.minGroups;\n        }\n        const element = this.localData[id];\n        if (!this._isForecast(element, params)) {\n            return this._super(...arguments);\n        }\n        const fillTemporalPeriod = this.call('fillTemporalService', 'getFillTemporalPeriod', {\n            modelName: this.loadParams.modelName,\n            field: {\n                name: this.forecast_field,\n                type: this.loadParams.fields[this.forecast_field].type,\n            },\n            granularity: this.granularity,\n            minGroups: this.minGroups,\n        });\n        params.domain = fillTemporalPeriod.getDomain({\n            domain: this.reloadDomain || this.loadDomain,\n            forceStartBound: false\n        });\n        params.context = fillTemporalPeriod.getContext({ context: this.reloadContext || this.loadContext });\n        const reload = await this._super(...arguments);\n        this._updateFillTemporalPeriodEnd(fillTemporalPeriod);\n        return reload;\n    },\n});\n\nexport {\n    ForecastKanbanModel,\n};\n", "/** @odoo-module */\nimport ForecastColumnQuickCreate from './forecast_kanban_column_quick_create';\nimport KanbanRenderer from 'web.KanbanRenderer';\n\nconst ForecastKanbanRenderer = KanbanRenderer.extend({\n    /**\n     * Adds the widget ForecastColumnQuickCreate if there is a forecast_field and the current\n     * groupby targets it. It will be used to automatically add the next group for a date/datetime\n     * field\n     *\n     * @private\n     * @override\n     * @param {DocumentFragment} fragment\n     */\n    _renderGrouped(fragment) {\n        this._super(...arguments);\n        let [groupby, granularity] = this.state.groupedBy[0].split(\":\");\n        const forecast_field = this.state.context.forecast_field;\n        if (forecast_field && groupby === forecast_field) {\n            granularity = granularity || \"month\";\n            this.forecastColumnQuickCreate = new ForecastColumnQuickCreate(this, {\n                addColumnLabel: granularity,\n            });\n            this.defs.push(this.forecastColumnQuickCreate.appendTo(fragment));\n        }\n    },\n});\n\nexport {\n    ForecastKanbanRenderer,\n};\n", "/** @odoo-module */\n\nimport { Domain } from \"@web/core/domain\";\nimport { makeContext } from \"@web/core/context\";\nimport { SearchModel } from \"@web/search/search_model\";\n\n/**\n * This is the conversion of ForecastModelExtension. See there for more\n * explanations of what is done here.\n */\nconst DATE_FORMAT = {\n    datetime: \"YYYY-MM-DD HH:mm:ss\",\n    date: \"YYYY-MM-DD\",\n};\n\nexport class ForecastSearchModel extends SearchModel {\n    /**\n     * @override\n     */\n    exportState() {\n        const state = super.exportState();\n        state.forecast = {\n            forecastStart: this.forecastStart,\n        };\n        return state;\n    }\n\n    /**\n     * @override\n     */\n    _getDomain(params = {}) {\n        const domain = super._getDomain(...arguments);\n        const forecastField = this.globalContext.forecast_field;\n        if (!forecastField) {\n            return domain;\n        }\n        let forecastFilter = false;\n        for (const queryElem of this.query) {\n            const searchItem = this.searchItems[queryElem.searchItemId];\n            if (searchItem.type === \"filter\") {\n                const context = makeContext([searchItem.context || {}]);\n                if (context.forecast_filter) {\n                    forecastFilter = true;\n                    break;\n                }\n            }\n        }\n        if (!forecastFilter) {\n            return domain;\n        }\n        const forecastStart = this._getForecastStart(forecastField);\n        const forecastDomain = [\n            \"|\",\n            [forecastField, \"=\", false],\n            [forecastField, \">=\", forecastStart],\n        ];\n        const fullDomain = Domain.and([domain, forecastDomain]);\n\n        return params.raw ? fullDomain : fullDomain.toList();\n    }\n\n    /**\n     * @protected\n     * @param {string} forecastField\n     * @returns {string}\n     */\n    _getForecastStart(forecastField) {\n        if (!this.forecastStart) {\n            /** @todo stop using moment */\n            const { type } = this.searchViewFields[forecastField];\n            let startMoment;\n            const groupBy = this.groupBy;\n            const firstForecastGroupBy = groupBy.find((gb) => gb.includes(forecastField));\n            let granularity = \"month\";\n            if (firstForecastGroupBy) {\n                granularity = firstForecastGroupBy.split(\":\")[1] || \"month\";\n            } else if (groupBy.length) {\n                granularity = \"day\";\n            }\n            startMoment = moment().startOf(granularity);\n            if (type === \"datetime\") {\n                startMoment = moment.utc(startMoment);\n            }\n            const format = DATE_FORMAT[type];\n            this.forecastStart = startMoment.format(format);\n        }\n        return this.forecastStart;\n    }\n\n    /**\n     * @override\n     */\n    _importState(state) {\n        super._importState(...arguments);\n        if (state.forecast) {\n            this.forecastStart = state.forecast.forecastStart;\n        }\n    }\n\n    /**\n     * @override\n     */\n    _reset() {\n        super._reset();\n        this.forecastStart = null;\n    }\n}\n", "/** @odoo-module */\nimport { ForecastKanbanController } from './forecast_controllers';\nimport { ForecastKanbanModel } from './forecast_models';\nimport { ForecastKanbanRenderer } from './forecast_renderers';\nimport { ForecastSearchModel } from \"./forecast_search_model\";\nimport { GraphView } from \"@web/views/graph/graph_view\";\nimport KanbanView from 'web.KanbanView';\nimport ListView from 'web.ListView';\nimport { PivotView } from \"@web/views/pivot/pivot_view\";\nimport { registry } from \"@web/core/registry\";\nimport viewRegistry from 'web.view_registry';\n\n/**\n * Graph view to be used for a Forecast @see ForecastSearchModel\n * requires:\n * - context key `forecast_field` on a date/datetime field\n * - special filter \"Forecast\" (which must set the `forecast_filter:1` context key)\n */\nclass ForecastGraphView extends GraphView {}\nForecastGraphView.SearchModel = ForecastSearchModel;\n\nregistry.category(\"views\").add(\"forecast_graph\", ForecastGraphView);\n\n/**\n * Kanban view to be used for a Forecast\n * @see ForecastModelExtension\n * @see FillTemporalService\n * @see ForecastKanbanColumnQuickCreate\n * requires:\n * - context key `forecast_field` on a date/datetime field\n * - special filter \"Forecast\" (which must set the `forecast_filter:1` context key)\n */\nconst ForecastKanbanView = KanbanView.extend({\n    config: _.extend({}, KanbanView.prototype.config, {\n        Renderer: ForecastKanbanRenderer,\n        Model: ForecastKanbanModel,\n        Controller: ForecastKanbanController,\n    }),\n    /**\n     * @private\n     * @override\n     */\n    _createSearchModel(params, extraExtensions={}) {\n        Object.assign(extraExtensions, { forecast: {} });\n        return this._super(params, extraExtensions);\n    },\n});\nviewRegistry.add('forecast_kanban', ForecastKanbanView);\n\n/**\n * List view to be used for a Forecast @see ForecastModelExtension\n * requires:\n * - context key `forecast_field` on a date/datetime field\n * - special filter \"Forecast\" (which must set the `forecast_filter:1` context key)\n */\nconst ForecastListView = ListView.extend({\n    /**\n     * @private\n     * @override\n     */\n    _createSearchModel(params, extraExtensions = {}) {\n        Object.assign(extraExtensions, { forecast: {} });\n        return this._super(params, extraExtensions);\n    },\n});\nviewRegistry.add('forecast_list', ForecastListView);\n\n/**\n * Pivot view to be used for a Forecast @see ForecastSearchModel\n * requires:\n * - context key `forecast_field` on a date/datetime field\n * - special filter \"Forecast\" (which must set the `forecast_filter:1` context key)\n */\nclass ForecastPivotView extends PivotView {}\nForecastPivotView.SearchModel = ForecastSearchModel;\n\nregistry.category(\"views\").add(\"forecast_pivot\", ForecastPivotView);\n\nexport {\n    ForecastGraphView,\n    ForecastKanbanView,\n    ForecastListView,\n    ForecastPivotView,\n};\n", "/** @odoo-module **/\n\nimport ActivityMenu from '@mail/js/systray/systray_activity_menu';\n\nActivityMenu.include({\n\n    //--------------------------------------------------\n    // Private\n    //--------------------------------------------------\n\n    /**\n     * @override\n     */\n    _getViewsList(model) {\n        if (model === \"crm.lead\") {\n                return [[false, 'list'], [false, 'kanban'],\n                        [false, 'form'], [false, 'calendar'],\n                        [false, 'pivot'], [false, 'graph'],\n                        [false, 'activity']\n                    ];\n        }\n        return this._super(...arguments);\n    },\n\n    //-----------------------------------------\n    // Handlers\n    //-----------------------------------------\n\n    /**\n     * @private\n     * @override\n     */\n    _onActivityFilterClick: function (event) {\n        // fetch the data from the button otherwise fetch the ones from the parent (.o_mail_preview).\n        var data = _.extend({}, $(event.currentTarget).data(), $(event.target).data());\n        var context = {};\n        if (data.res_model === \"crm.lead\") {\n            if (data.filter === 'my') {\n                context['search_default_activities_overdue'] = 1;\n                context['search_default_activities_today'] = 1;\n            } else {\n                context['search_default_activities_' + data.filter] = 1;\n            }\n            // Necessary because activity_ids of mail.activity.mixin has auto_join\n            // So, duplicates are faking the count and \"Load more\" doesn't show up\n            context['force_search_count'] = 1;\n            this.do_action('crm.crm_lead_action_my_activities', {\n                additional_context: context,\n                clear_breadcrumbs: true,\n            });\n        } else {\n            this._super.apply(this, arguments);\n        }\n    },\n});\n", "/** @odoo-module **/\n\nimport { _t } from 'web.core';\nimport { Markup } from 'web.utils';\nimport tour from 'web_tour.tour';\n\ntour.register('crm_tour', {\n    url: \"/web\",\n    rainbowManMessage: _t(\"Congrats, best of luck catching such big fish! :)\"),\n    sequence: 10,\n}, [tour.stepUtils.showAppsMenuItem(), {\n    trigger: '.o_app[data-menu-xmlid=\"crm.crm_menu_root\"]',\n    content: Markup(_t('Ready to boost your sales? Let\\'s have a look at your <b>Pipeline</b>.')),\n    position: 'bottom',\n    edition: 'community',\n}, {\n    trigger: '.o_app[data-menu-xmlid=\"crm.crm_menu_root\"]',\n    content: Markup(_t('Ready to boost your sales? Let\\'s have a look at your <b>Pipeline</b>.')),\n    position: 'bottom',\n    edition: 'enterprise',\n}, {\n    trigger: '.o-kanban-button-new',\n    extra_trigger: '.o_opportunity_kanban',\n    content: Markup(_t(\"<b>Create your first opportunity.</b>\")),\n    position: 'bottom',\n}, {\n    trigger: \".o_kanban_quick_create .o_field_widget[name='partner_id']\",\n    content: Markup(_t('<b>Write a few letters</b> to look for a company, or create a new one.')),\n    position: \"top\",\n    run: function (actions) {\n        actions.text(\"Brandon Freeman\", this.$anchor.find(\"input\"));\n    },\n}, {\n    trigger: \".ui-menu-item > a\",\n    auto: true,\n    in_modal: false,\n}, {\n    trigger: \".o_kanban_quick_create .o_kanban_add\",\n    content: Markup(_t(\"Now, <b>add your Opportunity</b> to your Pipeline.\")),\n    position: \"bottom\",\n}, {\n    trigger: \".o_opportunity_kanban .o_kanban_group:first-child .o_kanban_record:last-child .oe_kanban_content\",\n    extra_trigger: \".o_opportunity_kanban\",\n    content: Markup(_t(\"<b>Drag &amp; drop opportunities</b> between columns as you progress in your sales cycle.\")),\n    position: \"right\",\n    run: \"drag_and_drop .o_opportunity_kanban .o_kanban_group:eq(2) \",\n}, {\n    trigger: \".o_kanban_record:not(.o_updating) .o_activity_color_default\",\n    extra_trigger: \".o_opportunity_kanban\",\n    content: Markup(_t(\"Looks like nothing is planned. :(<br><br><i>Tip : Schedule activities to keep track of everything you have to do!</i>\")),\n    position: \"bottom\",\n}, {\n    trigger: \".o_schedule_activity\",\n    extra_trigger: \".o_opportunity_kanban\",\n    content: Markup(_t(\"Let's <b>Schedule an Activity.</b>\")),\n    position: \"bottom\",\n    width: 200,\n}, {\n    trigger: '.modal-footer button[name=\"action_close_dialog\"]',\n    content: Markup(_t(\"All set. Let\u2019s <b>Schedule</b> it.\")),\n    position: \"top\",  // dot NOT move to bottom, it would cause a resize flicker, see task-2476595\n    run: function (actions) {\n        actions.auto('.modal-footer button[special=cancel]');\n    },\n}, {\n    id: \"drag_opportunity_to_won_step\",\n    trigger: \".o_opportunity_kanban .o_kanban_record:last-child\",\n    content: Markup(_t(\"Drag your opportunity to <b>Won</b> when you get the deal. Congrats !\")),\n    position: \"bottom\",\n    run: \"drag_and_drop .o_opportunity_kanban .o_kanban_group:eq(3) \",\n},  {\n    trigger: \".o_kanban_record\",\n    extra_trigger: \".o_opportunity_kanban\",\n    content: _t(\"Let\u2019s have a look at an Opportunity.\"),\n    position: \"right\",\n    run: function (actions) {\n        actions.auto(\".o_kanban_record\");\n    },\n}, {\n    trigger: \".o_lead_opportunity_form .o_statusbar_status\",\n    content: _t(\"This bar also allows you to switch stage.\"),\n    position: \"bottom\"\n}, {\n    trigger: \".breadcrumb-item:not(.active):first\",\n    content: _t(\"Click on the breadcrumb to go back to the Pipeline.\"),\n    position: \"bottom\",\n    run: function (actions) {\n        actions.auto(\".breadcrumb-item:not(.active):last\");\n    }\n}]);\n", "odoo.define('website.backend.button', function (require) {\n'use strict';\n\nvar AbstractField = require('web.AbstractField');\nvar core = require('web.core');\nvar field_registry = require('web.field_registry');\n\nvar _t = core._t;\n\nvar WebsitePublishButton = AbstractField.extend({\n    className: 'o_stat_info',\n    supportedFieldTypes: ['boolean'],\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * A boolean field is always set since false is a valid value.\n     *\n     * @override\n     */\n    isSet: function () {\n        return true;\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * This widget is supposed to be used inside a stat button and, as such, is\n     * rendered the same way in edit and readonly mode.\n     *\n     * @override\n     * @private\n     */\n    _render: function () {\n        this.$el.empty();\n        var text = this.value ? _t(\"Published\") : _t(\"Unpublished\");\n        var hover = this.value ? _t(\"Unpublish\") : _t(\"Publish\");\n        var valColor = this.value ? 'text-success' : 'text-danger';\n        var hoverColor = this.value ? 'text-danger' : 'text-success';\n        var $val = $('<span>').addClass('o_stat_text o_not_hover ' + valColor).text(text);\n        var $hover = $('<span>').addClass('o_stat_text o_hover ' + hoverColor).text(hover);\n        this.$el.append($val).append($hover);\n    },\n});\n\nvar WidgetWebsiteButtonIcon = AbstractField.extend({\n    template: 'WidgetWebsiteButtonIcon',\n    events: {\n        'click': '_onClick',\n    },\n\n    /**\n    * @override\n    */\n    start: function () {\n        this.$icon = this.$('.o_button_icon');\n        return this._super.apply(this, arguments);\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     */\n    isSet: function () {\n        return true;\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     */\n    _render: function () {\n        this._super.apply(this, arguments);\n\n        var published = this.value;\n        var info = published ? _t(\"Published\") : _t(\"Unpublished\");\n        this.$el.attr('aria-label', info)\n                .prop('title', info);\n        this.$icon.toggleClass('text-danger', !published)\n                .toggleClass('text-success', published);\n    },\n\n    //--------------------------------------------------------------------------\n    // Handler\n    //--------------------------------------------------------------------------\n\n    /**\n     * Redirects to the website page of the record.\n     *\n     * @private\n     */\n    _onClick: function () {\n        this.trigger_up('button_clicked', {\n            attrs: {\n                type: 'object',\n                name: 'open_website_url',\n            },\n            record: this.record,\n        });\n    },\n});\n\nfield_registry\n    .add('website_redirect_button', WidgetWebsiteButtonIcon)\n    .add('website_publish_button', WebsitePublishButton);\n});\n", "/* global google, gapi */\nodoo.define('website.backend.dashboard', function (require) {\n'use strict';\n\nvar AbstractAction = require('web.AbstractAction');\nvar ajax = require('web.ajax');\nvar core = require('web.core');\nvar Dialog = require('web.Dialog');\nvar field_utils = require('web.field_utils');\nvar pyUtils = require('web.py_utils');\nvar session = require('web.session');\nvar time = require('web.time');\nvar web_client = require('web.web_client');\n\nvar _t = core._t;\nvar QWeb = core.qweb;\n\nvar COLORS = [\"#1f77b4\", \"#aec7e8\"];\nvar FORMAT_OPTIONS = {\n    // allow to decide if utils.human_number should be used\n    humanReadable: function (value) {\n        return Math.abs(value) >= 1000;\n    },\n    // with the choices below, 1236 is represented by 1.24k\n    minDigits: 1,\n    decimals: 2,\n    // avoid comma separators for thousands in numbers when human_number is used\n    formatterCallback: function (str) {\n        return str;\n    },\n};\n\nvar Dashboard = AbstractAction.extend({\n    hasControlPanel: true,\n    contentTemplate: 'website.WebsiteDashboardMain',\n    jsLibs: [\n        '/web/static/lib/Chart/Chart.js',\n    ],\n    events: {\n        'click .js_link_analytics_settings': 'on_link_analytics_settings',\n        'click .o_dashboard_action': 'on_dashboard_action',\n        'click .o_dashboard_action_form': 'on_dashboard_action_form',\n    },\n\n    init: function(parent, context) {\n        this._super(parent, context);\n\n        this.DATE_FORMAT = time.getLangDateFormat();\n        this.date_range = 'week';  // possible values : 'week', 'month', year'\n        this.date_from = moment.utc().subtract(1, 'week');\n        this.date_to = moment.utc();\n\n        this.dashboards_templates = ['website.dashboard_header', 'website.dashboard_content'];\n        this.graphs = [];\n        this.chartIds = {};\n    },\n\n    willStart: function() {\n        var self = this;\n        return Promise.all([ajax.loadLibs(this), this._super()]).then(function() {\n            return self.fetch_data();\n        }).then(function(){\n            var website = _.findWhere(self.websites, {selected: true});\n            self.website_id = website ? website.id : false;\n        });\n    },\n\n    start: function() {\n        var self = this;\n        this._computeControlPanelProps();\n        return this._super().then(function() {\n            self.render_graphs();\n        });\n    },\n\n    on_attach_callback: function () {\n        this._isInDom = true;\n        this.render_graphs();\n        this._super.apply(this, arguments);\n    },\n    on_detach_callback: function () {\n        this._isInDom = false;\n        this._super.apply(this, arguments);\n    },\n    /**\n     * Fetches dashboard data\n     */\n    fetch_data: function() {\n        var self = this;\n        var prom = this._rpc({\n            route: '/website/fetch_dashboard_data',\n            params: {\n                website_id: this.website_id || false,\n                date_from: this.date_from.year()+'-'+(this.date_from.month()+1)+'-'+this.date_from.date(),\n                date_to: this.date_to.year()+'-'+(this.date_to.month()+1)+'-'+this.date_to.date(),\n            },\n        });\n        prom.then(function (result) {\n            self.data = result;\n            self.dashboards_data = result.dashboards;\n            self.currency_id = result.currency_id;\n            self.groups = result.groups;\n            self.websites = result.websites;\n        });\n        return prom;\n    },\n\n    on_link_analytics_settings: function(ev) {\n        ev.preventDefault();\n\n        var self = this;\n        var dialog = new Dialog(this, {\n            size: 'medium',\n            title: _t('Connect Google Analytics'),\n            $content: QWeb.render('website.ga_dialog_content', {\n                ga_key: this.dashboards_data.visits.ga_client_id,\n                ga_analytics_key: this.dashboards_data.visits.ga_analytics_key,\n            }),\n            buttons: [\n                {\n                    text: _t(\"Save\"),\n                    classes: 'btn-primary',\n                    close: true,\n                    click: function() {\n                        var ga_client_id = dialog.$el.find('input[name=\"ga_client_id\"]').val();\n                        var ga_analytics_key = dialog.$el.find('input[name=\"ga_analytics_key\"]').val();\n                        self.on_save_ga_client_id(ga_client_id, ga_analytics_key);\n                    },\n                },\n                {\n                    text: _t(\"Cancel\"),\n                    close: true,\n                },\n            ],\n        }).open();\n    },\n\n    on_go_to_website: function (ev) {\n        ev.preventDefault();\n        var website = _.findWhere(this.websites, {selected: true});\n        window.location.href = `/website/force/${encodeURIComponent(website.id)}`;\n    },\n\n    on_save_ga_client_id: function(ga_client_id, ga_analytics_key) {\n        var self = this;\n        return this._rpc({\n            route: '/website/dashboard/set_ga_data',\n            params: {\n                'website_id': self.website_id,\n                'ga_client_id': ga_client_id,\n                'ga_analytics_key': ga_analytics_key,\n            },\n        }).then(function (result) {\n            if (result.error) {\n                self.displayNotification({ title: result.error.title, message: result.error.message, type: 'danger' });\n                return;\n            }\n            self.on_date_range_button('week');\n        });\n    },\n\n    render_dashboards: function() {\n        var self = this;\n        _.each(this.dashboards_templates, function(template) {\n            self.$('.o_website_dashboard').append(QWeb.render(template, {widget: self}));\n        });\n    },\n\n    render_graph: function(div_to_display, chart_values, chart_id) {\n        var self = this;\n\n        this.$(div_to_display).empty();\n        var $canvasContainer = $('<div/>', {class: 'o_graph_canvas_container'});\n        this.$canvas = $('<canvas/>').attr('id', chart_id);\n        $canvasContainer.append(this.$canvas);\n        this.$(div_to_display).append($canvasContainer);\n\n        var labels = chart_values[0].values.map(function (date) {\n            return moment(date[0], \"YYYY-MM-DD\", 'en');\n        });\n\n        var datasets = chart_values.map(function (group, index) {\n            return {\n                label: group.key,\n                data: group.values.map(function (value) {\n                    return value[1];\n                }),\n                dates: group.values.map(function (value) {\n                    return value[0];\n                }),\n                fill: false,\n                borderColor: COLORS[index],\n            };\n        });\n\n        var ctx = this.$canvas[0];\n        this.chart = new Chart(ctx, {\n            type: 'line',\n            data: {\n                labels: labels,\n                datasets: datasets,\n            },\n            options: {\n                legend: {\n                    display: false,\n                },\n                maintainAspectRatio: false,\n                scales: {\n                    yAxes: [{\n                        type: 'linear',\n                        ticks: {\n                            beginAtZero: true,\n                            callback: this.formatValue.bind(this),\n                        },\n                    }],\n                    xAxes: [{\n                        ticks: {\n                            callback: function (moment) {\n                                return moment.format(self.DATE_FORMAT);\n                            },\n                        }\n                    }],\n                },\n                tooltips: {\n                    mode: 'index',\n                    intersect: false,\n                    bodyFontColor: 'rgba(0,0,0,1)',\n                    titleFontSize: 13,\n                    titleFontColor: 'rgba(0,0,0,1)',\n                    backgroundColor: 'rgba(255,255,255,0.6)',\n                    borderColor: 'rgba(0,0,0,0.2)',\n                    borderWidth: 2,\n                    callbacks: {\n                        title: function (tooltipItems, data) {\n                            return data.datasets[0].label;\n                        },\n                        label: function (tooltipItem, data) {\n                            var moment = data.labels[tooltipItem.index];\n                            var date = tooltipItem.datasetIndex === 0 ?\n                                        moment :\n                                        moment.subtract(1, self.date_range);\n                            return date.format(self.DATE_FORMAT) + ': ' + self.formatValue(tooltipItem.yLabel);\n                        },\n                        labelColor: function (tooltipItem, chart) {\n                            var dataset = chart.data.datasets[tooltipItem.datasetIndex];\n                            return {\n                                borderColor: dataset.borderColor,\n                                backgroundColor: dataset.borderColor,\n                            };\n                        },\n                    }\n                }\n            }\n        });\n    },\n\n    render_graphs: function() {\n        var self = this;\n        if (this._isInDom) {\n            _.each(this.graphs, function(e) {\n                var renderGraph = self.groups[e.group] &&\n                                    self.dashboards_data[e.name].summary.order_count;\n                if (!self.chartIds[e.name]) {\n                    self.chartIds[e.name] = _.uniqueId('chart_' + e.name);\n                }\n                var chart_id = self.chartIds[e.name];\n                if (renderGraph) {\n                    self.render_graph('.o_graph_' + e.name, self.dashboards_data[e.name].graph, chart_id);\n                }\n            });\n            this.render_graph_analytics(this.dashboards_data.visits.ga_client_id);\n        }\n    },\n\n    render_graph_analytics: function(client_id) {\n        if (!this.dashboards_data.visits || !this.dashboards_data.visits.ga_client_id) {\n          return;\n        }\n\n        this.load_analytics_api();\n\n        var $analytics_components = this.$('.js_analytics_components');\n        this.addLoader($analytics_components);\n\n        var self = this;\n        gapi.analytics.ready(function() {\n\n            $analytics_components.empty();\n            // 1. Authorize component\n            var $analytics_auth = $('<div>').addClass('col-lg-12');\n            window.onOriginError = function () {\n                $analytics_components.find('.js_unauthorized_message').remove();\n                self.display_unauthorized_message($analytics_components, 'not_initialized');\n            };\n            gapi.analytics.auth.authorize({\n                container: $analytics_auth[0],\n                clientid: client_id\n            });\n\n            $analytics_auth.appendTo($analytics_components);\n\n            self.handle_analytics_auth($analytics_components);\n            gapi.analytics.auth.on('signIn', function() {\n                delete window.onOriginError;\n                self.handle_analytics_auth($analytics_components);\n            });\n\n        });\n    },\n\n    on_date_range_button: function(date_range) {\n        if (date_range === 'week') {\n            this.date_range = 'week';\n            this.date_from = moment.utc().subtract(1, 'weeks');\n        } else if (date_range === 'month') {\n            this.date_range = 'month';\n            this.date_from = moment.utc().subtract(1, 'months');\n        } else if (date_range === 'year') {\n            this.date_range = 'year';\n            this.date_from = moment.utc().subtract(1, 'years');\n        } else {\n            console.log('Unknown date range. Choose between [week, month, year]');\n            return;\n        }\n\n        var self = this;\n        Promise.resolve(this.fetch_data()).then(function () {\n            self.$('.o_website_dashboard').empty();\n            self.render_dashboards();\n            self.render_graphs();\n        });\n\n    },\n\n    on_website_button: function(website_id) {\n        var self = this;\n        this.website_id = website_id;\n        Promise.resolve(this.fetch_data()).then(function () {\n            self.$('.o_website_dashboard').empty();\n            self.render_dashboards();\n            self.render_graphs();\n        });\n    },\n\n    on_reverse_breadcrumb: function() {\n        var self = this;\n        web_client.do_push_state({});\n        this.fetch_data().then(function() {\n            self.$('.o_website_dashboard').empty();\n            self.render_dashboards();\n            self.render_graphs();\n        });\n    },\n\n    on_dashboard_action: function (ev) {\n        ev.preventDefault();\n        var self = this\n        var $action = $(ev.currentTarget);\n        var additional_context = {};\n        if (this.date_range === 'week') {\n            additional_context = {search_default_week: true};\n        } else if (this.date_range === 'month') {\n            additional_context = {search_default_month: true};\n        } else if (this.date_range === 'year') {\n            additional_context = {search_default_year: true};\n        }\n        this._rpc({\n            route: '/web/action/load',\n            params: {\n                'action_id': $action.attr('name'),\n            },\n        })\n        .then(function (action) {\n            action.domain = pyUtils.assembleDomains([action.domain, `[('website_id', '=', ${self.website_id})]`]);\n            return self.do_action(action, {\n                'additional_context': additional_context,\n                'on_reverse_breadcrumb': self.on_reverse_breadcrumb\n            });\n        });\n    },\n\n    on_dashboard_action_form: function (ev) {\n        ev.preventDefault();\n        var $action = $(ev.currentTarget);\n        this.do_action({\n            name: $action.attr('name'),\n            res_model: $action.data('res_model'),\n            res_id: $action.data('res_id'),\n            views: [[false, 'form']],\n            type: 'ir.actions.act_window',\n        }, {\n            on_reverse_breadcrumb: this.on_reverse_breadcrumb\n        });\n    },\n\n    /**\n     * @private\n     */\n    _computeControlPanelProps() {\n        const $searchview = $(QWeb.render(\"website.DateRangeButtons\", {\n            widget: this,\n        }));\n        $searchview.find('button.js_date_range').click((ev) => {\n            $searchview.find('button.js_date_range.active').removeClass('active');\n            $(ev.target).addClass('active');\n            this.on_date_range_button($(ev.target).data('date'));\n        });\n        $searchview.find('button.js_website').click((ev) => {\n            $searchview.find('button.js_website.active').removeClass('active');\n            $(ev.target).addClass('active');\n            this.on_website_button($(ev.target).data('website-id'));\n        });\n\n        const $buttons = $(QWeb.render(\"website.GoToButtons\"));\n        $buttons.on('click', this.on_go_to_website.bind(this));\n\n        this.controlPanelProps.cp_content = { $searchview, $buttons };\n    },\n\n    // Loads Analytics API\n    load_analytics_api: function() {\n        var self = this;\n        if (!(\"gapi\" in window)) {\n            (function(w,d,s,g,js,fjs){\n                g=w.gapi||(w.gapi={});g.analytics={q:[],ready:function(cb){this.q.push(cb);}};\n                js=d.createElement(s);fjs=d.getElementsByTagName(s)[0];\n                js.src='https://apis.google.com/js/platform.js';\n                fjs.parentNode.insertBefore(js,fjs);js.onload=function(){g.load('analytics');};\n            }(window,document,'script'));\n            gapi.analytics.ready(function() {\n                self.analytics_create_components();\n            });\n        }\n    },\n\n    handle_analytics_auth: function($analytics_components) {\n        $analytics_components.find('.js_unauthorized_message').remove();\n\n        // Check if the user is authenticated and has the right to make API calls\n        if (!gapi.analytics.auth.getAuthResponse()) {\n            this.display_unauthorized_message($analytics_components, 'not_connected');\n        } else if (gapi.analytics.auth.getAuthResponse() && gapi.analytics.auth.getAuthResponse().scope.indexOf('https://www.googleapis.com/auth/analytics') === -1) {\n            this.display_unauthorized_message($analytics_components, 'no_right');\n        } else {\n            this.make_analytics_calls($analytics_components);\n        }\n    },\n\n    display_unauthorized_message: function($analytics_components, reason) {\n        $analytics_components.prepend($(QWeb.render('website.unauthorized_analytics', {reason: reason})));\n    },\n\n    make_analytics_calls: function($analytics_components) {\n        // 2. ActiveUsers component\n        var $analytics_users = $('<div>');\n        var activeUsers = new gapi.analytics.ext.ActiveUsers({\n            container: $analytics_users[0],\n            pollingInterval: 10,\n        });\n        $analytics_users.appendTo($analytics_components);\n\n        // 3. View Selector\n        var $analytics_view_selector = $('<div>').addClass('col-lg-12 o_properties_selection');\n        var viewSelector = new gapi.analytics.ViewSelector({\n            container: $analytics_view_selector[0],\n        });\n        viewSelector.execute();\n        $analytics_view_selector.appendTo($analytics_components);\n\n        // 4. Chart graph\n        var start_date = '7daysAgo';\n        if (this.date_range === 'month') {\n            start_date = '30daysAgo';\n        } else if (this.date_range === 'year') {\n            start_date = '365daysAgo';\n        }\n        var $analytics_chart_2 = $('<div>').addClass('col-lg-6 col-12');\n        var breakdownChart = new gapi.analytics.googleCharts.DataChart({\n            query: {\n                'dimensions': 'ga:date',\n                'metrics': 'ga:sessions',\n                'start-date': start_date,\n                'end-date': 'yesterday'\n            },\n            chart: {\n                type: 'LINE',\n                container: $analytics_chart_2[0],\n                options: {\n                    title: 'All',\n                    width: '100%',\n                    tooltip: {isHtml: true},\n                }\n            }\n        });\n        $analytics_chart_2.appendTo($analytics_components);\n\n        // 5. Chart table\n        var $analytics_chart_1 = $('<div>').addClass('col-lg-6 col-12');\n        var mainChart = new gapi.analytics.googleCharts.DataChart({\n            query: {\n                'dimensions': 'ga:medium',\n                'metrics': 'ga:sessions',\n                'sort': '-ga:sessions',\n                'max-results': '6'\n            },\n            chart: {\n                type: 'TABLE',\n                container: $analytics_chart_1[0],\n                options: {\n                    width: '100%'\n                }\n            }\n        });\n        $analytics_chart_1.appendTo($analytics_components);\n\n        // Events handling & animations\n\n        var table_row_listener;\n\n        viewSelector.on('change', function(ids) {\n            var options = {query: {ids: ids}};\n            activeUsers.set({ids: ids}).execute();\n            mainChart.set(options).execute();\n            breakdownChart.set(options).execute();\n\n            if (table_row_listener) { google.visualization.events.removeListener(table_row_listener); }\n        });\n\n        mainChart.on('success', function(response) {\n            var chart = response.chart;\n            var dataTable = response.dataTable;\n\n            table_row_listener = google.visualization.events.addListener(chart, 'select', function() {\n                var options;\n                if (chart.getSelection().length) {\n                    var row =  chart.getSelection()[0].row;\n                    var medium =  dataTable.getValue(row, 0);\n                    options = {\n                        query: {\n                            filters: 'ga:medium==' + medium,\n                        },\n                        chart: {\n                            options: {\n                                title: medium,\n                            }\n                        }\n                    };\n                } else {\n                    options = {\n                        chart: {\n                            options: {\n                                title: 'All',\n                            }\n                        }\n                    };\n                    delete breakdownChart.get().query.filters;\n                }\n                breakdownChart.set(options).execute();\n            });\n        });\n\n        // Add CSS animation to visually show the when users come and go.\n        activeUsers.once('success', function() {\n            var element = this.container.firstChild;\n            var timeout;\n\n            this.on('change', function(data) {\n                element = this.container.firstChild;\n                var animationClass = data.delta > 0 ? 'is-increasing' : 'is-decreasing';\n                element.className += (' ' + animationClass);\n\n                clearTimeout(timeout);\n                timeout = setTimeout(function() {\n                    element.className = element.className.replace(/ is-(increasing|decreasing)/g, '');\n                }, 3000);\n            });\n        });\n    },\n\n    /*\n     * Credits to https://github.com/googleanalytics/ga-dev-tools\n     * This is the Active Users component that polls\n     * the number of active users on Analytics each 5 secs\n     */\n    analytics_create_components: function() {\n\n        gapi.analytics.createComponent('ActiveUsers', {\n\n            initialize: function() {\n                this.activeUsers = 0;\n                gapi.analytics.auth.once('signOut', this.handleSignOut_.bind(this));\n            },\n\n            execute: function() {\n                // Stop any polling currently going on.\n                if (this.polling_) {\n                    this.stop();\n                }\n\n                this.render_();\n\n                // Wait until the user is authorized.\n                if (gapi.analytics.auth.isAuthorized()) {\n                    this.pollActiveUsers_();\n                } else {\n                    gapi.analytics.auth.once('signIn', this.pollActiveUsers_.bind(this));\n                }\n            },\n\n            stop: function() {\n                clearTimeout(this.timeout_);\n                this.polling_ = false;\n                this.emit('stop', {activeUsers: this.activeUsers});\n            },\n\n            render_: function() {\n                var opts = this.get();\n\n                // Render the component inside the container.\n                this.container = typeof opts.container === 'string' ?\n                    document.getElementById(opts.container) : opts.container;\n\n                this.container.innerHTML = opts.template || this.template;\n                this.container.querySelector('b').innerHTML = this.activeUsers;\n            },\n\n            pollActiveUsers_: function() {\n                var options = this.get();\n                var pollingInterval = (options.pollingInterval || 5) * 1000;\n\n                if (isNaN(pollingInterval) || pollingInterval < 5000) {\n                    throw new Error('Frequency must be 5 seconds or more.');\n                }\n\n                this.polling_ = true;\n                gapi.client.analytics.data.realtime\n                    .get({ids:options.ids, metrics:'rt:activeUsers'})\n                    .then(function(response) {\n                        var result = response.result;\n                        var newValue = result.totalResults ? +result.rows[0][0] : 0;\n                        var oldValue = this.activeUsers;\n\n                        this.emit('success', {activeUsers: this.activeUsers});\n\n                        if (newValue !== oldValue) {\n                            this.activeUsers = newValue;\n                            this.onChange_(newValue - oldValue);\n                        }\n\n                        if (this.polling_) {\n                            this.timeout_ = setTimeout(this.pollActiveUsers_.bind(this), pollingInterval);\n                        }\n                    }.bind(this));\n            },\n\n            onChange_: function(delta) {\n                var valueContainer = this.container.querySelector('b');\n                if (valueContainer) { valueContainer.innerHTML = this.activeUsers; }\n\n                this.emit('change', {activeUsers: this.activeUsers, delta: delta});\n                if (delta > 0) {\n                    this.emit('increase', {activeUsers: this.activeUsers, delta: delta});\n                } else {\n                    this.emit('decrease', {activeUsers: this.activeUsers, delta: delta});\n                }\n            },\n\n            handleSignOut_: function() {\n                this.stop();\n                gapi.analytics.auth.once('signIn', this.handleSignIn_.bind(this));\n            },\n\n            handleSignIn_: function() {\n                this.pollActiveUsers_();\n                gapi.analytics.auth.once('signOut', this.handleSignOut_.bind(this));\n            },\n\n            template:\n                '<div class=\"ActiveUsers\">' +\n                    'Active Users: <b class=\"ActiveUsers-value\"></b>' +\n                '</div>'\n\n        });\n    },\n\n    // Utility functions\n    addLoader: function(selector) {\n        var loader = '<span class=\"fa fa-3x fa-spin fa-circle-o-notch fa-spin\"/>';\n        selector.html(\"<div class='o_loader'>\" + loader + \"</div>\");\n    },\n    getValue: function(d) { return d[1]; },\n    format_number: function(value, type, digits, symbol) {\n        if (type === 'currency') {\n            return this.render_monetary_field(value, this.currency_id);\n        } else {\n            return field_utils.format[type](value || 0, {digits: digits}) + ' ' + symbol;\n        }\n    },\n    formatValue: function (value) {\n        var formatter = field_utils.format.float;\n        var formatedValue = formatter(value, undefined, FORMAT_OPTIONS);\n        return formatedValue;\n    },\n    render_monetary_field: function(value, currency_id) {\n        var currency = session.get_currency(currency_id);\n        var formatted_value = field_utils.format.float(value || 0, {digits: currency && currency.digits});\n        if (currency) {\n            if (currency.position === \"after\") {\n                formatted_value += currency.symbol;\n            } else {\n                formatted_value = currency.symbol + formatted_value;\n            }\n        }\n        return formatted_value;\n    },\n\n});\n\ncore.action_registry.add('backend_dashboard', Dashboard);\n\nreturn Dashboard;\n});\n", "odoo.define('website.settings', function (require) {\n\nconst BaseSettingController = require('base.settings').Controller;\nconst core = require('web.core');\nconst Dialog = require('web.Dialog');\nconst FieldBoolean = require('web.basic_fields').FieldBoolean;\nconst fieldRegistry = require('web.field_registry');\nconst FormController = require('web.FormController');\n\nconst QWeb = core.qweb;\nconst _t = core._t;\n\nBaseSettingController.include({\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Bypasses the discard confirmation dialog when going to a website because\n     * the target website will be the one selected and when selecting a theme\n     * because the theme will be installed on the selected website.\n     *\n     * Without this override, it is impossible to go to a website other than the\n     * first because discarding will revert it back to the default value.\n     *\n     * Without this override, it is impossible to edit robots.txt website other than the\n     * first because discarding will revert it back to the default value.\n     *\n     * Without this override, it is impossible to submit sitemap to google other than for the\n     * first website because discarding will revert it back to the default value.\n     *\n     * Without this override, it is impossible to install a theme on a website\n     * other than the first because discarding will revert it back to the\n     * default value.\n     *\n     * @override\n     */\n    _onButtonClicked: function (ev) {\n        if (ev.data.attrs.name === 'website_go_to'\n                || ev.data.attrs.name === 'action_open_robots'\n                || ev.data.attrs.name === 'action_ping_sitemap'\n                || ev.data.attrs.name === 'install_theme_on_current_website') {\n            FormController.prototype._onButtonClicked.apply(this, arguments);\n        } else {\n            this._super.apply(this, arguments);\n        }\n    },\n});\n\nconst WebsiteCookiesbarField = FieldBoolean.extend({\n    xmlDependencies: ['/website/static/src/xml/website.res_config_settings.xml'],\n\n    _onChange: function () {\n        const checked = this.$input[0].checked;\n        if (!checked) {\n            return this._setValue(checked);\n        }\n\n        const cancelCallback = () => this.$input[0].checked = !checked;\n        Dialog.confirm(this, null, {\n            title: _t(\"Please confirm\"),\n            $content: QWeb.render('website.res_config_settings.cookies_modal_main'),\n            buttons: [{\n                text: _t('Do not activate'),\n                classes: 'btn-primary',\n                close: true,\n                click: cancelCallback,\n            },\n            {\n                text: _t('Activate anyway'),\n                close: true,\n                click: () => this._setValue(checked),\n            }],\n            cancel_callback: cancelCallback,\n        });\n    },\n});\n\nfieldRegistry.add('website_cookiesbar_field', WebsiteCookiesbarField);\n});\n", "odoo.define('website.view_hierarchy', function (require) {\n\"use strict\";\n\nconst core = require('web.core');\nconst qweb = require('web.qweb');\nconst viewRegistry = require('web.view_registry');\n\nconst _t = core._t;\n\nconst Renderer = qweb.Renderer.extend({\n    events: _.extend({}, qweb.Renderer.prototype.events, {\n        'click .js_fold': '_onCollapseClick',\n        'click .o_website_filter a': '_onWebsiteFilterClick',\n        'click .o_search button': '_onSearchButtonClick',\n        'click .o_show_diff': '_onShowDiffClick',\n        'click .o_load_hierarchy': '_onLoadHierarchyClick',\n        'keydown .o_search input': '_onSearchInputKeyDown',\n        'input .o_search input': '_onSearchInputKeyInput',\n        'change #o_show_inactive': '_onShowActiveClick',\n    }),\n    /**\n     * @override\n     */\n    init: function () {\n        this._super(...arguments);\n\n        // Search\n        this.cptFound = 0;\n        this.prevSearch = '';\n    },\n    /**\n     * @override\n     */\n    on_attach_callback: function () {\n        this._super(...arguments);\n\n        const self = this;\n        this._handleLastVisibleChild();\n        // Fixed Navbar\n        this.$('.o_tree_container').css({\n            'padding-top': this.$('.o_tree_nav').outerHeight() + 10,\n        });\n        // Website Filters\n        this.$wNodes = this.$(\"li[data-website_name]\");\n        this.$notwNodes = this.$(\"li:not([data-website_name])\");\n        const websiteNames = _.uniq($.map(self.$wNodes, el => el.getAttribute('data-website_name')));\n        for (const websiteName of websiteNames) {\n            this.$('.o_website_filter').append($('<a/>', {\n                'class': 'dropdown-item',\n                'data-website_name': websiteName,\n                'text': websiteName,\n            }));\n        }\n        this.$(`.o_website_filter a[data-website_name=\"${websiteNames[0] || '*'}\"]`).click();\n        // Highlight requested view as google does\n        const reqViewId = this.$('.o_tree_container').data('requested-view-id');\n        const $reqView = $(`[data-id=\"${reqViewId}\"] span.js_fold`).first();\n        $reqView.css({'background-color': 'yellow'});\n        $('.o_content').scrollTo($reqView[0], 300, {offset: -200});\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {Event} ev\n     */\n    _onCollapseClick: function (ev) {\n        const $parent = $(ev.currentTarget).parent();\n        const folded = $parent.find('.o_fold_icon').hasClass('fa-plus-square-o');\n        let $ul, $oFoldIcon;\n        if (folded) { // Unfold only self\n            $ul = $parent.siblings('ul');\n            $oFoldIcon = $parent.find('.o_fold_icon');\n        } else { // Fold all\n            $ul = $parent.parent().find('ul');\n            $oFoldIcon = $parent.parent().find('.o_fold_icon');\n        }\n        $ul.toggleClass('d-none', !folded);\n        $oFoldIcon.toggleClass('fa-minus-square-o', folded).toggleClass('fa-plus-square-o', !folded);\n        this._handleLastVisibleChild();\n    },\n    /**\n     * @private\n     * @param {Event} ev\n     */\n    _onShowActiveClick: function (ev) {\n        this.$('.o_is_inactive').toggleClass('d-none', !ev.currentTarget.checked);\n        this._handleLastVisibleChild();\n    },\n    /**\n     * @private\n     * @param {Event} ev\n     */\n    _onWebsiteFilterClick: function (ev) {\n        ev.preventDefault();\n        // Update Dropdown Filter\n        const $el = $(ev.currentTarget);\n        $el.addClass('active').siblings().removeClass('active');\n        $el.parent().siblings('.dropdown-toggle').text($el.text());\n        // Show all views\n        const websiteName = $el.data('website_name');\n        this.$wNodes.add(this.$notwNodes).removeClass('d-none');\n        if (websiteName !== '*') {\n            // Hide all website views\n            this.$wNodes.addClass('d-none');\n            // Show selected website views\n            const $selectedWebsiteNodes = this.$(`li[data-website_name=\"${websiteName}\"]`);\n            $selectedWebsiteNodes.removeClass('d-none');\n            // Hide generic siblings\n            $selectedWebsiteNodes.each(function () {\n                $(this).siblings(`li[data-key=\"${$(this).data('key')}\"]:not([data-website_name])`).addClass('d-none');\n            });\n        }\n        // Preserve current inactive toggle state\n        this.$('.o_is_inactive').toggleClass('d-none', !$('#o_show_inactive').prop('checked'));\n        this._handleLastVisibleChild();\n    },\n    /**\n     * @private\n     * @param {Event} ev\n     */\n    _onSearchInputKeyDown: function (ev) {\n        // <Tab> or <Enter>\n        if (ev.which === 13 || ev.which === 9) {\n            this._searchScrollTo($(ev.currentTarget).val(), !ev.shiftKey);\n            ev.preventDefault();\n        }\n    },\n    /**\n     * @private\n     * @param {Event} ev\n     */\n    _onSearchInputKeyInput: function (ev) {\n        // Useful for input empty either with ms-clear or by typing\n        if (ev.currentTarget.value === \"\") {\n            this._searchScrollTo(\"\");\n        }\n    },\n    /**\n     * @private\n     * @param {Event} ev\n     */\n    _onSearchButtonClick: function (ev) {\n        this._searchScrollTo(this.$('.o_search input').val());\n    },\n    /**\n     * @private\n     * @param {Event} ev\n     */\n    _onShowDiffClick: function (ev) {\n        ev.preventDefault();\n        this.do_action('base.reset_view_arch_wizard_action', {\n            additional_context: {\n                'active_model': 'ir.ui.view',\n                'active_ids': [parseInt(ev.currentTarget.dataset['view_id'])],\n            }\n        });\n    },\n    /**\n     * @private\n     * @param {Event} ev\n     */\n    _onLoadHierarchyClick: function (ev) {\n        ev.preventDefault();\n        this.do_action('website.action_show_viewhierarchy', {\n            additional_context: {\n                'active_model': 'ir.ui.view',\n                'active_id': parseInt(ev.currentTarget.dataset['view_id']),\n            }\n        });\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Adds a class to the last visible element of every lists.\n     * This is purely cosmetic to add a right angle dashed `:before` style in\n     * css. This can't be done in css as there is no way to target a last\n     * element by class.\n     *\n     * @private\n     */\n    _handleLastVisibleChild: function () {\n        this.$('.o_last_visible_child').removeClass('o_last_visible_child');\n        const lastElements = _.filter(_.map(\n            this.$('ul'), el => $(el).find('> li:visible').last()[0]\n        ));\n        $(lastElements).addClass('o_last_visible_child');\n\n        const selector = $('#o_show_inactive').prop('checked') ? '> li' : '> li:not(.o_is_inactive)';\n        this.$('.o_fold_icon').map(function () {\n            let $ico = $(this);\n            let childs = $ico.parent().parent().first().find('ul').find(selector);\n            $ico.toggleClass('d-none', !childs.length);\n        });\n    },\n    /**\n     * Searches and scrolls to view entries matching the given text. Exact\n     * matches will be returned first. Search is done on `key`, `id` and `name`\n     * for exact matches, and `key`, `name` for simple matches.\n     *\n     * @private\n     * @param {string} search text to search and scroll to\n     * @param {boolean} [forward] set to false to go to previous find\n     */\n    _searchScrollTo: function (search, forward = true) {\n        const foundClasses = 'o_search_found border border-info rounded px-2';\n        this.$('.o_search_found').removeClass(foundClasses);\n        this.$('.o_not_found').removeClass('o_not_found');\n        this.$('.o_tab_hint').remove();\n        if (search !== this.prevSearch) {\n            this.prevSearch = search;\n            this.cptFound = -1;\n        }\n\n        if (search) {\n            // Exact match first\n            const exactMatches = $(`[data-key=\"${search}\" i], [data-id=\"${search}\" i], [data-name=\"${search}\" i]`).not(':hidden').get();\n            let matches = $(`[data-key*=\"${search}\" i], [data-name*=\"${search}\" i]`).not(':hidden').not(exactMatches).get();\n            matches = exactMatches.concat(matches);\n            if (!matches.length) {\n                this.$('.o_search input').addClass('o_not_found');\n            } else {\n                if (forward) {\n                    this.cptFound++;\n                    if (this.cptFound > matches.length - 1) {\n                        this.cptFound = 0;\n                    }\n                } else {\n                    this.cptFound--;\n                    if (this.cptFound < 0) {\n                        this.cptFound = matches.length - 1;\n                    }\n                }\n                const el = matches[this.cptFound];\n                $(el).children('p').addClass(foundClasses).append($('<span/>', {\n                    class: 'o_tab_hint text-info ml-auto small font-italic pr-2',\n                    text: _.str.sprintf(_t(\"Press %s for next %s\"), \"<Tab>\", `[${this.cptFound + 1}/${matches.length}]`),\n                }));\n                $('.o_content').scrollTo(el, 0, {offset: -200});\n\n                this.prevSearch = search;\n                this.$('.o_search input').focus();\n            }\n        }\n    },\n});\n\nconst ViewHierarchy = qweb.View.extend({\n    withSearchBar: false,\n    config: _.extend({}, qweb.View.prototype.config, {\n        Renderer: Renderer,\n    }),\n});\n\nviewRegistry.add('view_hierarchy', ViewHierarchy);\n});\n", "odoo.define('website.iframe_widget', function (require) {\n\"use strict\";\n\n\nvar AbstractField = require('web.AbstractField');\nvar core = require('web.core');\nvar fieldRegistry = require('web.field_registry');\n\nvar QWeb = core.qweb;\n\n/**\n * Display iframe\n */\nvar FieldIframePreview = AbstractField.extend({\n    className: 'd-block o_field_iframe_preview m-0 h-100',\n\n    _render: function () {\n        this.$el.html(QWeb.render('website.iframeWidget', {\n            url: this.value,\n        }));\n    },\n});\n\nfieldRegistry.add('iframe', FieldIframePreview);\n\nreturn FieldIframePreview;\n\n});\n", "odoo.define('website.theme_preview_kanban', function (require) {\n\"use strict\";\n\nvar KanbanController = require('web.KanbanController');\nvar KanbanView = require('web.KanbanView');\nvar ViewRegistry = require('web.view_registry');\nconst ThemePreviewControllerCommon = require('website.theme_preview_form').ThemePreviewControllerCommon;\nvar core = require('web.core');\nvar _lt = core._lt;\n\nvar ThemePreviewKanbanController = KanbanController.extend(ThemePreviewControllerCommon, {\n    /**\n     * @override\n     */\n    start: async function () {\n        await this._super(...arguments);\n\n        // hide pager\n        this.el.classList.add('o_view_kanban_theme_preview_controller');\n\n        // update breacrumb\n        const websiteLink = Object.assign(document.createElement('a'), {\n            className: 'btn btn-secondary ml-3 text-black-75',\n            href: '/',\n            innerHTML: '<i class=\"fa fa-close\"></i>',\n        });\n        if (!this.initialState.context.module) { // not coming from res.config.settings\n            const smallBreadcumb = Object.assign(document.createElement('small'), {\n                className: 'mx-2 text-muted',\n                innerHTML: _lt(\"Don't worry, you can switch later.\"),\n            });\n            this._controlPanelWrapper.el.querySelector('.o_cp_top li').appendChild(smallBreadcumb);\n            this._controlPanelWrapper.el.querySelector('.o_cp_top').appendChild(websiteLink);\n        }\n        this._controlPanelWrapper.el.querySelector('.o_cp_top .breadcrumb li.active').classList.add('text-black-75');\n    },\n    /**\n     * Called when user click on any button in kanban view.\n     * Targeted buttons are selected using name attribute value.\n     *\n     * @override\n     */\n    _onButtonClicked: function (ev) {\n        const attrName = ev.data.attrs.name;\n        if (attrName === 'button_choose_theme' || attrName === 'button_refresh_theme') {\n            this._handleThemeAction(ev.data.record.res_id, attrName);\n        } else {\n            this._super(...arguments);\n        }\n    },\n});\n\nvar ThemePreviewKanbanView = KanbanView.extend({\n    withSearchBar: false,  // hide searchBar\n\n    config: _.extend({}, KanbanView.prototype.config, {\n        Controller: ThemePreviewKanbanController,\n    }),\n});\n\nViewRegistry.add('theme_preview_kanban', ThemePreviewKanbanView);\n\n});\n", "odoo.define('website.theme_preview_form', function (require) {\n\"use strict\";\n\nvar FormController = require('web.FormController');\nvar FormView = require('web.FormView');\nvar viewRegistry = require('web.view_registry');\nvar core = require('web.core');\nvar qweb = core.qweb;\n\n/*\n* Common code for theme installation/update handler.\n*/\nconst ThemePreviewControllerCommon = {\n    /**\n     * Called to add loading effect and install/pdate the selected theme depending on action.\n     *\n     * @private\n     * @param {number} res_id\n     * @param {String} action\n     */\n    _handleThemeAction(res_id, action) {\n        this.$loader = $(qweb.render('website.ThemePreview.Loader', {\n            'showTips': action !== 'button_refresh_theme',\n        }));\n        let actionCallback = undefined;\n        this._addLoader();\n        switch (action) {\n            case 'button_choose_theme':\n                actionCallback = result => this.do_action(result);\n                break;\n            case 'button_refresh_theme':\n                actionCallback = () => this._removeLoader();\n                break;\n        }\n        const rpcData = {\n            model: 'ir.module.module',\n            method: action,\n            args: [res_id],\n            context: this.initialState.context,\n        };\n        const rpcOptions = {\n            shadow: true,\n        };\n        this._rpc(rpcData, rpcOptions)\n            .then(actionCallback)\n            .guardedCatch(() => this._removeLoader());\n    },\n    /**\n     * Called to add loader element in DOM.\n     *\n     * @private\n     */\n    _addLoader() {\n        $('body').append(this.$loader);\n    },\n    /**\n     * @private\n     */\n    _removeLoader() {\n        this.$loader.remove();\n    }\n};\n\nvar ThemePreviewController = FormController.extend(ThemePreviewControllerCommon, {\n    events: Object.assign({}, FormController.prototype.events, {\n        'click .o_use_theme': '_onStartNowClick',\n        'click .o_switch_theme': '_onSwitchThemeClick',\n        'change input[name=\"viewer\"]': '_onSwitchButtonChange',\n    }),\n    /**\n     * @override\n     */\n    start: function () {\n        this.$el.addClass('o_view_form_theme_preview_controller');\n        return this._super.apply(this, arguments);\n    },\n\n    // -------------------------------------------------------------------------\n    // Public\n    // -------------------------------------------------------------------------\n\n    /**\n     * @override\n     */\n    renderButtons: function ($node) {\n        this.$buttons = $(qweb.render('website.ThemePreview.Buttons'));\n        if ($node) {\n            $node.html(this.$buttons);\n        }\n    },\n    /**\n     * Overriden to prevent the controller from hiding the buttons\n     * @see FormController\n     *\n     * @override\n     */\n    updateButtons: function () { },\n\n    // -------------------------------------------------------------------------\n    // Private\n    // -------------------------------------------------------------------------\n    /**\n     * Add Switcher View Mobile / Desktop near pager\n     *\n     * @private\n     */\n    _updateControlPanelProps: async function () {\n        const props = this._super(...arguments);\n        const $switchModeButton = $(qweb.render('website.ThemePreview.SwitchModeButton'));\n        this.controlPanelProps.cp_content.$pager = $switchModeButton;\n        return props;\n    },\n\n    // -------------------------------------------------------------------------\n    // Handlers\n    // -------------------------------------------------------------------------\n    /**\n     * Handler called when user click on 'Desktop/Mobile' switcher button.\n     *\n     * @private\n     */\n    _onSwitchButtonChange: function () {\n        this.$('.o_preview_frame').toggleClass('is_mobile');\n    },\n    /**\n     * Handler called when user click on 'Choose another theme' button.\n     *\n     * @private\n     */\n    _onSwitchThemeClick: function () {\n        this.trigger_up('history_back');\n    },\n    /**\n     * Handler called when user click on 'START NOW' button in form view.\n     *\n     * @private\n     */\n    _onStartNowClick: function () {\n        this._handleThemeAction(this.getSelectedIds()[0], 'button_choose_theme');\n    },\n});\n\nvar ThemePreviewFormView = FormView.extend({\n    config: _.extend({}, FormView.prototype.config, {\n        Controller: ThemePreviewController\n    }),\n});\n\nviewRegistry.add('theme_preview_form', ThemePreviewFormView);\n\nreturn {\n    ThemePreviewControllerCommon: ThemePreviewControllerCommon\n}\n});\n", "/** @odoo-module **/\n\nimport { ControlPanel } from \"@web/search/control_panel/control_panel\";\nimport { patch } from \"@web/core/utils/patch\";\n\nconst { useExternalListener, useState } = owl.hooks;\nconst { Portal } = owl.misc;\nconst STICKY_CLASS = \"o_mobile_sticky\";\n\npatch(ControlPanel.prototype, \"web_enterprise.ControlPanel\", {\n    setup() {\n        this._super();\n\n        this.state = useState({\n            showSearchBar: false,\n            showMobileSearch: false,\n            showViewSwitcher: false,\n        });\n\n        useExternalListener(window, \"click\", this.onWindowClick);\n        const display = this.display;\n        if (!(\"adaptToScroll\" in display) || display.adaptToScroll) {\n            useExternalListener(document, \"scroll\", this.onScrollThrottled);\n        }\n    },\n    mounted() {\n        this.oldScrollTop = 0;\n        this.initialScrollTop = document.documentElement.scrollTop;\n        this.el.style.top = \"0px\";\n\n        this._super();\n    },\n\n    /**\n     * Reset mobile search state\n     */\n    resetSearchState() {\n        Object.assign(this.state, {\n            showSearchBar: false,\n            showMobileSearch: false,\n            showViewSwitcher: false,\n        });\n    },\n\n    //---------------------------------------------------------------------\n    // Handlers\n    //---------------------------------------------------------------------\n\n    /**\n     * Show or hide the control panel on the top screen.\n     * The function is throttled to avoid refreshing the scroll position more\n     * often than necessary.\n     */\n    onScrollThrottled() {\n        if (this.isScrolling) {\n            return;\n        }\n        this.isScrolling = true;\n        requestAnimationFrame(() => (this.isScrolling = false));\n\n        const scrollTop = document.documentElement.scrollTop;\n        const delta = Math.round(scrollTop - this.oldScrollTop);\n\n        if (scrollTop > this.initialScrollTop) {\n            // Beneath initial position => sticky display\n            const elRect = this.el.getBoundingClientRect();\n            this.el.classList.add(STICKY_CLASS);\n            this.el.style.top =\n                delta < 0\n                    ? // Going up\n                      `${Math.min(0, elRect.top - delta)}px`\n                    : // Going down | not moving\n                      `${Math.max(-elRect.height, elRect.top - delta)}px`;\n        } else {\n            // Above intial position => standard display\n            this.el.classList.remove(STICKY_CLASS);\n        }\n\n        this.oldScrollTop = scrollTop;\n    },\n    /**\n     * Reset mobile search state on switch view.\n     */\n    onViewClicked() {\n        this.resetSearchState();\n        this._super(...arguments);\n    },\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    onWindowClick(ev) {\n        if (this.state.showViewSwitcher && !ev.target.closest(\".o_cp_switch_buttons\")) {\n            this.state.showViewSwitcher = false;\n        }\n    },\n});\n\npatch(ControlPanel, \"web_enterprise.ControlPanel\", {\n    template: \"web_enterprise.ControlPanel\",\n    components: {\n        ...ControlPanel.components,\n        Portal,\n    },\n});\n", "/** @odoo-module **/\n\nimport { SearchPanel } from \"@web/search/search_panel/search_panel\";\nimport { patch } from \"@web/core/utils/patch\";\n\nconst { Portal } = owl.misc;\n\n//-------------------------------------------------------------------------\n// Helpers\n//-------------------------------------------------------------------------\n\nconst isFilter = (s) => s.type === \"filter\";\nconst isActiveCategory = (s) => s.type === \"category\" && s.activeValueId;\n\n/**\n * @param {Map<string | false, Object>} values\n * @returns {Object[]}\n */\nconst nameOfCheckedValues = (values) => {\n    const names = [];\n    for (const [, value] of values) {\n        if (value.checked) {\n            names.push(value.display_name);\n        }\n    }\n    return names;\n};\n\npatch(SearchPanel.prototype, \"web_enterprise.SearchPanel\", {\n    setup() {\n        this._super(...arguments);\n        this.state.showMobileSearch = false;\n    },\n\n    //-----------------------------------------------------------------\n    // Protected\n    //-----------------------------------------------------------------\n\n    /**\n     * Returns a formatted version of the active categories to populate\n     * the selection banner of the control panel summary.\n     * @returns {Object[]}\n     */\n    getCategorySelection() {\n        const activeCategories = this.env.searchModel.getSections(isActiveCategory);\n        const selection = [];\n        for (const category of activeCategories) {\n            const parentIds = this.getAncestorValueIds(category, category.activeValueId);\n            const orderedCategoryNames = [...parentIds, category.activeValueId].map(\n                (valueId) => category.values.get(valueId).display_name\n            );\n            selection.push({\n                values: orderedCategoryNames,\n                icon: category.icon,\n                color: category.color,\n            });\n        }\n        return selection;\n    },\n\n    /**\n     * Returns a formatted version of the active filters to populate\n     * the selection banner of the control panel summary.\n     * @returns {Object[]}\n     */\n    getFilterSelection() {\n        const filters = this.env.searchModel.getSections(isFilter);\n        const selection = [];\n        for (const { groups, values, icon, color } of filters) {\n            let filterValues;\n            if (groups) {\n                filterValues = Object.keys(groups)\n                    .map((groupId) => nameOfCheckedValues(groups[groupId].values))\n                    .flat();\n            } else if (values) {\n                filterValues = nameOfCheckedValues(values);\n            }\n            if (filterValues.length) {\n                selection.push({ values: filterValues, icon, color });\n            }\n        }\n        return selection;\n    },\n});\n\npatch(SearchPanel, \"web_enterprise.SearchPanel\", {\n    template: \"web_enterprise.SearchPanel\",\n    components: {\n        ...SearchPanel.components,\n        Portal,\n    },\n});\n", "/** @odoo-module **/\n/* global BarcodeDetector */\n\nimport Dialog from \"web.OwlDialog\";\nimport { delay } from \"web.concurrency\";\nimport { loadAssets } from \"@web/core/assets\";\n\nconst { core, Component, hooks, mount } = owl;\nimport { _t } from 'web.core';\nconst { useRef } = hooks;\nconst bus = new core.EventBus();\nconst busOk = \"BarcodeDialog-Ok\";\nconst busError = \"BarcodeDialog-Error\";\n\n/**\n * Check for HTMLVideoElement readiness.\n *\n * See https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/readyState\n */\nconst HAVE_NOTHING = 0;\nconst HAVE_METADATA = 1;\nfunction isVideoElementReady(video) {\n    return ![HAVE_NOTHING, HAVE_METADATA].includes(video.readyState);\n}\n\n/**\n * Builder for BarcodeDetector-like polyfill class using ZXing library.\n *\n * @param {ZXing} ZXing Zxing library\n * @returns {class} ZxingBarcodeDetector class\n */\nfunction buildZXingBarcodeDetector(ZXing) {\n    const ZXingFormats = new Map([\n        [\"aztec\", ZXing.BarcodeFormat.AZTEC],\n        [\"code_39\", ZXing.BarcodeFormat.CODE_39],\n        [\"code_128\", ZXing.BarcodeFormat.CODE_128],\n        [\"data_matrix\", ZXing.BarcodeFormat.DATA_MATRIX],\n        [\"ean_8\", ZXing.BarcodeFormat.EAN_8],\n        [\"ean_13\", ZXing.BarcodeFormat.EAN_13],\n        [\"itf\", ZXing.BarcodeFormat.ITF],\n        [\"pdf417\", ZXing.BarcodeFormat.PDF_417],\n        [\"qr_code\", ZXing.BarcodeFormat.QR_CODE],\n        [\"upc_a\", ZXing.BarcodeFormat.UPC_A],\n        [\"upc_e\", ZXing.BarcodeFormat.UPC_E],\n    ]);\n\n    const allSupportedFormats = Array.from(ZXingFormats.keys());\n\n    /**\n     * ZXingBarcodeDetector class\n     *\n     * BarcodeDetector-like polyfill class using ZXing library.\n     * API follows the Shape Detection Web API (specifically Barcode Detection).\n     */\n    class ZXingBarcodeDetector {\n        /**\n         * @param {object} opts\n         * @param {Array} opts.formats list of codes' formats to detect\n         */\n        constructor(opts = {}) {\n            const formats = opts.formats || allSupportedFormats;\n            const hints = new Map([\n                [ZXing.DecodeHintType.POSSIBLE_FORMATS, formats.map((format) => ZXingFormats.get(format))],\n                // Enable Scanning at 90 degrees rotation\n                // https://github.com/zxing-js/library/issues/291\n                [ZXing.DecodeHintType.TRY_HARDER, true],\n            ]);\n            this.reader = new ZXing.MultiFormatReader();\n            this.reader.setHints(hints);\n        }\n\n        /**\n         * Detect codes in image.\n         *\n         * @param {HTMLVideoElement} video source video element\n         * @returns {Promise<Array>} array of detected codes\n         */\n        async detect(video) {\n            if (!(video instanceof HTMLVideoElement)) {\n                throw new DOMException(\"imageDataFrom() requires an HTMLVideoElement\", \"InvalidArgumentError\");\n            }\n            if (!isVideoElementReady(video)) {\n                throw new DOMException(\"HTMLVideoElement is not ready\", \"InvalidStateError\");\n            }\n            const canvas = document.createElement(\"canvas\");\n            const ctx = canvas.getContext(\"2d\");\n\n            canvas.width = video.videoWidth;\n            canvas.height = video.videoHeight;\n\n            ctx.drawImage(video, 0, 0, video.videoWidth, video.videoHeight);\n\n            const luminanceSource = new ZXing.HTMLCanvasElementLuminanceSource(canvas);\n            const binaryBitmap = new ZXing.BinaryBitmap(new ZXing.HybridBinarizer(luminanceSource));\n            try {\n                const result = this.reader.decode(binaryBitmap);\n                const format = Array.from(ZXingFormats).find(([k, val]) => val === result.getBarcodeFormat());\n                const rawValue = result.getText();\n                return [\n                    {\n                        format,\n                        rawValue,\n                    },\n                ];\n            } catch (err) {\n                if (err.name === \"NotFoundException\") {\n                    return [];\n                }\n                throw err;\n            }\n        }\n    }\n\n    /**\n     * Supported codes formats\n     *\n     * @static\n     * @returns {Array}\n     */\n    ZXingBarcodeDetector.getSupportedFormats = async () => allSupportedFormats;\n\n    return ZXingBarcodeDetector;\n}\nclass BarcodeDialog extends Component {\n    /**\n     * @override\n     */\n    constructor() {\n        super(...arguments);\n        this.videoPreviewRef = useRef(\"videoPreview\");\n        this.interval = null;\n        this.stream = null;\n        this.detector = null;\n    }\n\n    async willStart() {\n        let DetectorClass;\n        // Use Barcode Detection API if available.\n        // As support is still bleeding edge (mainly Chrome on Android),\n        // also provides a fallback using ZXing library.\n        if (\"BarcodeDetector\" in window) {\n            DetectorClass = BarcodeDetector;\n        } else {\n            await loadAssets({\n                jsLibs: [\"/web_enterprise/static/lib/zxing-library/zxing-library.js\"],\n            });\n            DetectorClass = buildZXingBarcodeDetector(window.ZXing);\n        }\n        const formats = await DetectorClass.getSupportedFormats();\n        this.detector = new DetectorClass({ formats });\n    }\n\n    async mounted() {\n        const constraints = {\n            video: { facingMode: \"environment\" },\n            audio: false,\n        };\n\n        try {\n            this.stream = await navigator.mediaDevices.getUserMedia(constraints);\n        } catch (err) {\n            const errors = {\n                NotFoundError: _t('No device can be found.'),\n                NotAllowedError: _t('Odoo needs your authorization first.'),\n            };\n            const errorMessage = _t('Could not start scanning. ') + (errors[err.name] || err.message);\n            this.onError(new Error(errorMessage));\n            return;\n        }\n        this.videoPreviewRef.el.srcObject = this.stream;\n        await this.isVideoReady();\n        this.interval = setInterval(this.detectCode.bind(this), 100);\n    }\n\n    willUnmount() {\n        clearInterval(this.interval);\n        this.interval = null;\n        if (this.stream) {\n            this.stream.getTracks().forEach((track) => track.stop());\n            this.stream = null;\n        }\n    }\n\n    /**\n     * Check for camera preview element readiness\n     *\n     * @returns {Promise} resolves when the video element is ready\n     */\n    async isVideoReady() {\n        // FIXME: even if it shouldn't happend, a timeout could be useful here.\n        return new Promise(async (resolve) => {\n            while (!isVideoElementReady(this.videoPreviewRef.el)) {\n                await delay(10);\n            }\n            resolve();\n        });\n    }\n\n    /**\n     * Detection success handler\n     *\n     * @param {string} result found code\n     */\n    onResult(result) {\n        this.closeDialog();\n        bus.trigger(busOk, result);\n    }\n\n    /**\n     * Detection error handler\n     *\n     * @param {Error} error\n     */\n    onError(error) {\n        this.closeDialog();\n        bus.trigger(busError, { error });\n    }\n\n    /**\n     * Close the dialog.\n     */\n    closeDialog() {\n        this.destroy();\n    }\n\n    /**\n     * Attempt to detect codes in the current camera preview's frame\n     */\n    async detectCode() {\n        try {\n            const codes = await this.detector.detect(this.videoPreviewRef.el);\n            if (codes.length === 0) {\n                return;\n            }\n            this.onResult(codes[0].rawValue);\n        } catch (err) {\n            this.onError(err);\n        }\n    }\n}\n\nObject.assign(BarcodeDialog, {\n    components: {\n        Dialog,\n    },\n    template: \"web_enterprise.BarcodeDialog\",\n});\n\n/**\n * Check for BarcodeScanner support\n * @returns {boolean}\n */\nexport function isBarcodeScannerSupported() {\n    return navigator.mediaDevices && navigator.mediaDevices.getUserMedia;\n}\n\n/**\n * Opens the BarcodeScanning dialog and begins code detection using the device's camera.\n *\n * @returns {Promise<string>} resolves when a {qr,bar}code has been detected\n */\nexport async function scanBarcode() {\n    const promise = new Promise((resolve, reject) => {\n        bus.on(busOk, null, resolve);\n        bus.on(busError, null, reject);\n    });\n    await mount(BarcodeDialog, { target: document.body });\n    return promise;\n}\n", "/** @odoo-module **/\n\nimport { useService } from \"@web/core/utils/hooks\";\nimport { registry } from \"@web/core/registry\";\nimport { BurgerUserMenu } from \"./user_menu/user_menu\";\nimport { MobileSwitchCompanyMenu } from \"./mobile_switch_company_menu/mobile_switch_company_menu\";\nimport { MenuItem } from \"@web/webclient/navbar/navbar\";\n\n/**\n * This file includes the widget Menu in mobile to render the BurgerMenu which\n * opens fullscreen and displays the user menu and the current app submenus.\n */\n\nconst SWIPE_ACTIVATION_THRESHOLD = 100;\n\nexport class BurgerMenu extends owl.Component {\n    setup() {\n        this.company = useService(\"company\");\n        this.user = useService(\"user\");\n        this.menuRepo = useService(\"menu\");\n        this.hm = useService(\"home_menu\");\n        this.state = owl.hooks.useState({\n            isUserMenuOpened: false,\n            isBurgerOpened: false,\n        });\n        this.swipeStartX = null;\n        owl.hooks.onMounted(() => {\n            this.env.bus.on(\"HOME-MENU:TOGGLED\", this, () => {\n                this._closeBurger();\n            });\n            this.env.bus.on(\"ACTION_MANAGER:UPDATE\", this, (req) => {\n                if (req.id) {\n                    this._closeBurger();\n                }\n            });\n        });\n    }\n    get currentApp() {\n        return !this.hm.hasHomeMenu && this.menuRepo.getCurrentApp();\n    }\n    get currentAppSections() {\n        return (\n            (this.currentApp && this.menuRepo.getMenuAsTree(this.currentApp.id).childrenTree) || []\n        );\n    }\n    get isUserMenuUnfolded() {\n        return !this.isUserMenuTogglable || this.state.isUserMenuOpened;\n    }\n    get isUserMenuTogglable() {\n        return this.currentApp && this.currentAppSections.length > 0;\n    }\n    _closeBurger() {\n        this.state.isUserMenuOpened = false;\n        this.state.isBurgerOpened = false;\n    }\n    _openBurger() {\n        this.state.isBurgerOpened = true;\n    }\n    _toggleUserMenu() {\n        this.state.isUserMenuOpened = !this.state.isUserMenuOpened;\n    }\n    _onMenuClicked(menu) {\n        this.menuRepo.selectMenu(menu);\n    }\n    _onSwipeStart(ev) {\n        this.swipeStartX = ev.changedTouches[0].clientX;\n    }\n    _onSwipeEnd(ev) {\n        if (!this.swipeStartX) {\n            return;\n        }\n        const deltaX = ev.changedTouches[0].clientX - this.swipeStartX;\n        if (deltaX < SWIPE_ACTIVATION_THRESHOLD) {\n            return;\n        }\n        this._closeBurger();\n        this.swipeStartX = null;\n    }\n}\nBurgerMenu.template = \"web_enterprise.BurgerMenu\";\nBurgerMenu.components = {\n    Portal: owl.misc.Portal,\n    MenuItem,\n    BurgerUserMenu,\n    MobileSwitchCompanyMenu,\n};\n\nconst systrayItem = {\n    Component: BurgerMenu,\n    isDisplayed: (env) => env.isSmall,\n};\n\nregistry.category(\"systray\").add(\"burger_menu\", systrayItem, { sequence: 0 });\n", "/** @odoo-module **/\nimport { SwitchCompanyMenu } from \"@web/webclient/switch_company_menu/switch_company_menu\";\n\nexport class MobileSwitchCompanyMenu extends SwitchCompanyMenu {}\nMobileSwitchCompanyMenu.template = \"web_enterprise.MobileSwitchCompanyMenu\";\n", "/** @odoo-module **/\n\nimport { UserMenu } from \"@web/webclient/user_menu/user_menu\";\n\nexport class BurgerUserMenu extends UserMenu {\n    _onItemClicked(callback) {\n        callback();\n    }\n}\nBurgerUserMenu.template = \"web_enterprise.BurgerUserMenu\";\n", "/** @odoo-module **/\n\nimport { registry } from \"@web/core/registry\";\nimport { session } from \"@web/session\";\n\nexport const enterpriseService = {\n    name: \"enterprise\",\n    dependencies: [],\n    start() {\n        return {\n            expirationDate: session.expiration_date,\n            expirationReason: session.expiration_reason,\n            // Hack: we need to know if there is at least an app installed (except from App and\n            // Settings). We use mail to do that, as it is a dependency of almost every addon. To\n            // determine whether mail is installed or not, we check for the presence of the key\n            // \"notification_type\" in session_info, as it is added in mail for internal users.\n            isMailInstalled: \"notification_type\" in session,\n            warning: session.warning,\n        };\n    },\n};\n\nregistry.category(\"services\").add(\"enterprise\", enterpriseService);\n", "/** @odoo-module **/\nimport { browser } from \"@web/core/browser/browser\";\nimport { formatDate, deserializeDateTime, serializeDate } from \"@web/core/l10n/dates\";\nimport { useService } from \"@web/core/utils/hooks\";\n\nconst { Component, hooks } = owl;\nconst { useState, useRef } = hooks;\nconst { DateTime } = luxon;\n\n/**\n * Expiration panel\n *\n * Component representing the banner located on top of the home menu. Its purpose\n * is to display the expiration state of the current database and to help the\n * user to buy/renew its subscription.\n * @extends Component\n */\nexport class ExpirationPanel extends Component {\n    constructor() {\n        super(...arguments);\n        this.enterprise = useService(\"enterprise\");\n\n        if (!this.enterprise.warning) {\n            this.state = { display: false };\n            return;\n        }\n\n        this.cookie = useService(\"cookie\");\n        this.ui = useService(\"ui\");\n        this.rpc = useService(\"rpc\");\n        this.orm = useService(\"orm\");\n\n        let expirationDate;\n        if (this.enterprise.expirationDate) {\n            expirationDate = deserializeDateTime(this.enterprise.expirationDate);\n        } else {\n            // If no date found, assume 1 month and hope for the best\n            expirationDate = DateTime.utc().plus({ days: 30 });\n        }\n        const diffDays = this._computeDiffDays(expirationDate);\n\n        const hideCookie = this.cookie.current.oe_instance_hide_panel;\n\n        let alertType = \"info\";\n        if (diffDays <= 6) {\n            alertType = \"danger\";\n        } else if (diffDays <= 16) {\n            alertType = \"warning\";\n        }\n\n        this.state = useState({\n            display: (diffDays <= 30 && !hideCookie) || diffDays <= 0,\n            alertType,\n            buttonText: \"Register\",\n            diffDays,\n            message: \"register\",\n            expirationDate,\n        });\n\n        this.inputRef = useRef(\"input\");\n\n        // Expiration reason e.g. 'trial','renewal','upsell',...\n        this.expirationReason = this.enterprise.expirationReason;\n        this.notYetRegistered = [\"trial\", \"demo\", false].includes(this.expirationReason);\n\n        this.isMailInstalled = this.enterprise.isMailInstalled;\n\n        // Type of logged-in accounts addressed by message\n        this.warning = this.enterprise.warning;\n    }\n\n    mounted() {\n        if (this.state.diffDays <= 0) {\n            this.isUIBlocked = true;\n            this.ui.block({\n                message: this.el,\n                css: { cursor: \"auto\" },\n                overlayCSS: { cursor: \"auto\" },\n            });\n        }\n    }\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @param {DateTime} date\n     * @returns {string}\n     */\n    formatDate(date) {\n        return formatDate(date, { format: \"DDD\", timezone: true });\n    }\n\n    /**\n     * Used to ensure global state consistency.\n     * @private\n     */\n    _clearState() {\n        for (const key in this.state) {\n            if (key !== \"display\") {\n                delete this.state[key];\n            }\n        }\n    }\n    /**\n     * @private\n     * @param {number} date\n     */\n    _computeDiffDays(date) {\n        const today = DateTime.utc();\n        const duration = date.diff(today, \"days\");\n        return Math.round(duration.values.days);\n    }\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     */\n    _onHide() {\n        this.cookie.setCookie(\"oe_instance_hide_panel\", true, 24 * 60 * 60);\n        this.state.display = false;\n    }\n\n    /**\n     * @private\n     */\n    _onClickRegister() {\n        this.state.displayRegisterForm = !this.state.displayRegisterForm;\n    }\n\n    /**\n     * @private\n     */\n    async _onBuy() {\n        const limitDate = serializeDate(DateTime.utc().minus({ days: 15 }));\n        const args = [\n            [\n                [\"share\", \"=\", false],\n                [\"login_date\", \">=\", limitDate],\n            ],\n        ];\n        const nbUsers = await this.orm.call(\"res.users\", \"search_count\", args);\n        browser.location = `https://www.odoo.com/odoo-enterprise/upgrade?num_users=${nbUsers}`;\n    }\n\n    /**\n     * Save the registration code then triggers a ping to submit it.\n     * @private\n     */\n    async _onCodeSubmit() {\n        const input = this.inputRef.el;\n        const enterpriseCode = input.value;\n        if (!enterpriseCode) {\n            const inputTitle = input.getAttribute(\"title\");\n            input.setAttribute(\"placeholder\", inputTitle);\n            return;\n        }\n        const [oldDate, , linkedSubscriptionUrl, emailLinked] = await Promise.all([\n            this.orm.call(\"ir.config_parameter\", \"get_param\", [\"database.expiration_date\"]),\n            this.orm.call(\"ir.config_parameter\", \"set_param\", [\n                \"database.enterprise_code\",\n                enterpriseCode,\n            ]),\n            this.orm.call(\"ir.config_parameter\", \"get_param\", [\n                \"database.already_linked_subscription_url\",\n            ]),\n            this.orm.call(\"ir.config_parameter\", \"get_param\", [\"database.already_linked_email\"]),\n        ]);\n\n        this.cookie.setCookie(\"oe_instance_hide_panel\", \"\", -1);\n\n        await this.orm.call(\"publisher_warranty.contract\", \"update_notification\", [[]]);\n\n        const expirationDate = await this.orm.call(\"ir.config_parameter\", \"get_param\", [\n            \"database.expiration_date\",\n        ]);\n\n        if (this.isUIBlocked) {\n            this.ui.unblock();\n        }\n\n        this._clearState();\n        if (expirationDate !== oldDate && !linkedSubscriptionUrl) {\n            this.state.message = \"success\";\n            this.state.displayRegisterForm = false;\n            this.state.alertType = \"success\";\n            this.state.expirationDate = deserializeDateTime(expirationDate);\n        } else {\n            this.state.alertType = \"danger\";\n            this.state.buttonText = \"Retry\";\n            this.state.displayRegisterForm = true;\n            if (linkedSubscriptionUrl) {\n                this.state.message = \"link\";\n                this.state.linkedSubscriptionUrl = linkedSubscriptionUrl;\n                this.state.emailDelivery = null;\n                this.state.emailLinked = emailLinked;\n            } else {\n                this.state.message = \"error\";\n            }\n        }\n    }\n\n    /**\n     * @private\n     */\n    async _onCheckStatus() {\n        const oldDateStr = await this.orm.call(\"ir.config_parameter\", \"get_param\", [\n            \"database.expiration_date\",\n        ]);\n\n        const oldDate = deserializeDateTime(oldDateStr);\n        if (this._computeDiffDays(oldDate) >= 30) {\n            return;\n        }\n\n        await this.orm.call(\"publisher_warranty.contract\", \"update_notification\", [[]]);\n\n        const expirationDateStr = await this.orm.call(\"ir.config_parameter\", \"get_param\", [\n            \"database.expiration_date\",\n        ]);\n        const expirationDate = deserializeDateTime(expirationDateStr);\n\n        if (expirationDateStr !== oldDateStr && expirationDate > DateTime.utc()) {\n            if (this.isUIBlocked) {\n                this.ui.unblock();\n            }\n            this._clearState();\n            this.state.message = \"update\";\n            this.state.alertType = \"success\";\n            this.state.expirationDate = expirationDate;\n            this.state.diffDays = this._computeDiffDays(expirationDate);\n        } else {\n            browser.location.reload();\n        }\n    }\n\n    /**\n     * @private\n     */\n    async _onSendUnlinkEmail() {\n        const args = [\"database.already_linked_send_mail_url\"];\n        const unlink_mail_send_url = await this.orm.call(\"ir.config_parameter\", \"get_param\", args);\n        this.state.emailDelivery = \"ongoing\";\n        const { result, reason } = await this.rpc(unlink_mail_send_url, {});\n        if (result) {\n            this.emailDelivery = \"success\";\n        } else {\n            this.state.emailDelivery = \"fail\";\n            this.state.failReason = reason;\n        }\n    }\n\n    /**\n     * @private\n     */\n    async _onRenew() {\n        const oldDate = await this.orm.call(\"ir.config_parameter\", \"get_param\", [\n            \"database.expiration_date\",\n        ]);\n\n        this.cookie.setCookie(\"oe_instance_hide_panel\", \"\", -1);\n\n        await this.orm.call(\"publisher_warranty.contract\", \"update_notification\", [[]]);\n\n        const [expirationDateStr, enterpriseCode] = await Promise.all([\n            this.orm.call(\"ir.config_parameter\", \"get_param\", [\"database.expiration_date\"]),\n            this.orm.call(\"ir.config_parameter\", \"get_param\", [\"database.enterprise_code\"]),\n        ]);\n\n        const expirationDate = deserializeDateTime(expirationDateStr);\n\n        if (expirationDateStr !== oldDate && expirationDate > DateTime.utc()) {\n            if (this.isUIBlocked) {\n                this.ui.unblock();\n            }\n            this._clearState();\n            this.state.message = \"success\";\n            this.state.alertType = \"success\";\n            this.state.expirationDate = expirationDate;\n            // Same remark as above (we just want to show clear button)\n            this.state.diffDays = this._computeDiffDays(expirationDate);\n        } else {\n            const url = \"https://www.odoo.com/odoo-enterprise/renew\";\n            const contractQueryString = enterpriseCode ? `?contract=${enterpriseCode}` : \"\";\n            browser.location = `${url}${contractQueryString}`;\n        }\n    }\n\n    /**\n     * @private\n     */\n    async _onUpsell() {\n        const limitDate = serializeDate(DateTime.utc().minus({ days: 15 }));\n        const [enterpriseCode, nbUsers] = await Promise.all([\n            this.orm.call(\"ir.config_parameter\", \"get_param\", [\"database.enterprise_code\"]),\n            this.orm.call(\"res.users\", \"search_count\", [\n                [\n                    [\"share\", \"=\", false],\n                    [\"login_date\", \">=\", limitDate],\n                ],\n            ]),\n        ]);\n        const url = \"https://www.odoo.com/odoo-enterprise/upsell\";\n        const contractQueryString = enterpriseCode ? `&contract=${enterpriseCode}` : \"\";\n        browser.location = `${url}?num_users=${nbUsers}${contractQueryString}`;\n    }\n}\n\nExpirationPanel.template = \"DatabaseExpirationPanel\";\n", "/** @odoo-module **/\n\nimport { ExpirationPanel } from \"./expiration_panel\";\nimport { useService } from \"@web/core/utils/hooks\";\nimport { isIosApp } from \"@web/core/browser/feature_detection\";\nimport { fuzzyLookup } from \"@web/core/utils/search\";\n\nconst { Component, hooks } = owl;\nconst { useExternalListener, useState, useRef } = hooks;\n\n/**\n * Home menu\n *\n * This component handles the display and navigation between the different\n * available applications and menus.\n * @extends Component\n */\nexport class HomeMenu extends Component {\n    /**\n     * @param {Object} props\n     * @param {Object[]} props.apps application icons\n     * @param {number} props.apps[].actionID\n     * @param {number} props.apps[].id\n     * @param {string} props.apps[].label\n     * @param {string} props.apps[].parents\n     * @param {(boolean|string|Object)} props.apps[].webIcon either:\n     *      - boolean: false (no webIcon)\n     *      - string: path to Odoo icon file\n     *      - Object: customized icon (background, class and color)\n     * @param {string} [props.apps[].webIconData]\n     * @param {string} props.apps[].xmlid\n     * @param {Object[]} props.menuItems menu paths\n     * @param {number} props.menuItems[].actionID\n     * @param {number} props.menuItems[].id\n     * @param {string} props.menuItems[].label\n     * @param {number} props.menuItems[].menu_id\n     * @param {string} props.menuItems[].parents\n     * @param {string} props.menuItems[].webIcon\n     * @param {string} props.menuItems[].xmlid\n     */\n    setup() {\n        super.setup();\n        this.menus = useService(\"menu\");\n\n        this.homeMenuService = useService(\"home_menu\");\n        this.ui = useService(\"ui\");\n\n        this.availableApps = this.props.apps;\n        this.displayedMenuItems = [];\n        this.inputRef = useRef(\"input\");\n        this.mainContentRef = useRef(\"mainContent\");\n        this.state = useState({\n            focusedIndex: null,\n            isSearching: false,\n            query: \"\",\n            isIosApp: isIosApp(),\n        });\n\n        if (!this.env.isSmall) {\n            useExternalListener(window, \"keydown\", this._onKeydown);\n        }\n    }\n\n    async willUpdateProps() {\n        // State is reset on each remount\n        this.state.focusedIndex = null;\n        this.state.isSearching = false;\n        this.state.query = \"\";\n        this.inputRef.el.value = \"\";\n\n        this.availableApps = this.props.apps;\n        this.displayedMenuItems = [];\n    }\n\n    mounted() {\n        this._updateScrollBarWidth();\n    }\n\n    patched() {\n        if (this.state.focusedIndex !== null && !this.env.isSmall) {\n            const selectedItem = document.querySelector(\".o_home_menu .o_menuitem.o_focused\");\n            // When TAB is managed externally the class o_focused disappears.\n            if (selectedItem) {\n                // Center window on the focused item\n                selectedItem.scrollIntoView({ block: \"center\" });\n                selectedItem.focus();\n            }\n        }\n        this._updateScrollBarWidth();\n    }\n\n    //--------------------------------------------------------------------------\n    // Getters\n    //--------------------------------------------------------------------------\n\n    /**\n     * @returns {(number|null)}\n     */\n    get appIndex() {\n        const appLength = this.displayedApps.length;\n        const focusedIndex = this.state.focusedIndex;\n        return focusedIndex < appLength ? focusedIndex : null;\n    }\n\n    /**\n     * @returns {Object[]}\n     */\n    get displayedApps() {\n        return this.availableApps;\n    }\n\n    /**\n     * @returns {number}\n     */\n    get maxIconNumber() {\n        const w = window.innerWidth;\n        if (w < 576) {\n            return 3;\n        } else if (w < 768) {\n            return 4;\n        } else {\n            return 6;\n        }\n    }\n\n    /**\n     * @returns {(number|null)}\n     */\n    get menuIndex() {\n        const appLength = this.displayedApps.length;\n        const focusedIndex = this.state.focusedIndex;\n        return focusedIndex >= appLength ? focusedIndex - appLength : null;\n    }\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {Object[]} array\n     * @returns {Object[]}\n     */\n    _filter(array) {\n        return fuzzyLookup(this.state.query, array, (el) =>\n            (el.parents + \" / \" + el.label).split(\"/\").reverse().join(\"/\")\n        );\n    }\n\n    /**\n     * @private\n     * @param {Object} menu\n     * @returns {Promise}\n     */\n    _openMenu(menu) {\n        return this.menus.selectMenu(menu);\n    }\n\n    /**\n     * Update this.state.focusedIndex if not null.\n     * @private\n     * @param {string} cmd\n     */\n    _updateFocusedIndex(cmd) {\n        const nbrApps = this.displayedApps.length;\n        const nbrMenuItems = this.displayedMenuItems.length;\n        const lastIndex = nbrApps + nbrMenuItems - 1;\n        let oldIndex = this.state.focusedIndex;\n        if (lastIndex < 0) {\n            return;\n        }\n        if (!this.state.isSearching) {\n            if (document.activeElement.classList.contains(\"o_menuitem\")) {\n                oldIndex = [...this.el.getElementsByClassName(\"o_menuitem\")].indexOf(\n                    document.activeElement\n                );\n            } else {\n                this.el.getElementsByClassName(\"o_menuitem\")[0].focus();\n                return;\n            }\n        }\n        const appIndex = this.state.isSearching ? this.appIndex : oldIndex;\n        const lastAppIndex = nbrApps - 1;\n        const appFocused = appIndex !== null;\n        const lineNumber = Math.ceil(nbrApps / this.maxIconNumber);\n        const currentLine = appFocused ? Math.ceil((appIndex + 1) / this.maxIconNumber) : null;\n        let newIndex;\n        switch (cmd) {\n            case \"previousElem\":\n                newIndex = oldIndex - 1;\n                break;\n            case \"nextElem\":\n                newIndex = oldIndex + 1;\n                break;\n            case \"previousColumn\":\n                if (!appFocused) {\n                    newIndex = oldIndex;\n                } else if (oldIndex % this.maxIconNumber) {\n                    // app is not the first one on its line\n                    newIndex = oldIndex - 1;\n                } else {\n                    newIndex = oldIndex + Math.min(lastAppIndex - oldIndex, this.maxIconNumber - 1);\n                }\n                break;\n            case \"nextColumn\":\n                if (!appFocused) {\n                    newIndex = oldIndex;\n                } else if (oldIndex === lastAppIndex || (oldIndex + 1) % this.maxIconNumber === 0) {\n                    // app is the last one on its line\n                    newIndex = (currentLine - 1) * this.maxIconNumber;\n                } else {\n                    newIndex = oldIndex + 1;\n                }\n                break;\n            case \"previousLine\":\n                if (!appFocused) {\n                    if (oldIndex > lastAppIndex + 1) {\n                        // there is a menu item 'above' -> select it\n                        newIndex = oldIndex - 1;\n                    } else {\n                        // select first app of last line\n                        newIndex = (lineNumber - 1) * this.maxIconNumber;\n                    }\n                } else if (currentLine === 1) {\n                    // app is in first line\n                    if (nbrMenuItems > 0) {\n                        // there is at least a menu item -> select the last one\n                        newIndex = lastIndex;\n                    } else {\n                        // no menu item -> select the app in the closest column on last line\n                        newIndex = oldIndex + (lineNumber - 1) * this.maxIconNumber;\n                        if (newIndex > lastAppIndex) {\n                            newIndex = lastAppIndex;\n                        }\n                    }\n                } else {\n                    // we go to the previous line on same column\n                    newIndex = oldIndex - this.maxIconNumber;\n                }\n                break;\n            case \"nextLine\":\n                if (!appFocused) {\n                    newIndex = oldIndex + 1;\n                } else if (currentLine === lineNumber) {\n                    // app is in last line\n                    if (nbrMenuItems > 0) {\n                        // there is at least a menu item -> select the first one\n                        newIndex = lastAppIndex + 1;\n                    } else {\n                        // no menu item -> select the app in the same column on first line\n                        newIndex = oldIndex % this.maxIconNumber;\n                    }\n                } else {\n                    // we go to the next line on the closest column\n                    newIndex = oldIndex + Math.min(this.maxIconNumber, lastAppIndex - oldIndex);\n                }\n                break;\n        }\n        // if newIndex is out of bounds -> normalize it\n        if (newIndex < 0) {\n            newIndex = lastIndex;\n        } else if (newIndex > lastIndex) {\n            newIndex = 0;\n        }\n        if (this.state.isSearching) {\n            this.state.focusedIndex = newIndex;\n        } else {\n            const item = this.el.getElementsByClassName(\"o_menuitem\")[newIndex];\n            item.focus();\n        }\n    }\n\n    /**\n     * Update query and recompute 'global' state (this.state and displayed elements).\n     * @private\n     * @param {string} query\n     */\n    _updateQuery(query) {\n        // Update input and search state\n        this.state.query = query;\n        this.inputRef.el.value = this.state.query;\n        this.state.isSearching = true;\n\n        // Keep elements matching search query\n        if (query === \"\") {\n            this.availableApps = this.props.apps;\n            this.displayedMenuItems = [];\n        } else {\n            this.availableApps = this._filter(this.props.apps);\n            this.displayedMenuItems = this._filter(this.props.menuItems);\n        }\n        const total = this.displayedApps.length + this.displayedMenuItems.length;\n        this.state.focusedIndex = total ? 0 : null;\n    }\n\n    /**\n     * Compensates the width of the scrollbar to avoid flickering when\n     * elongating the content of the home menu.\n     * @private\n     */\n    _updateScrollBarWidth() {\n        const { clientWidth, offsetWidth, style } = this.mainContentRef.el;\n        style.paddingLeft = `${offsetWidth - clientWidth}px`;\n    }\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {Object} app\n     */\n    _onAppClick(app) {\n        this._openMenu(app);\n    }\n\n    /**\n     * @private\n     * @param {InputEvent} ev\n     */\n    _onInputSearch(ev) {\n        this._updateQuery(ev.target.value);\n    }\n\n    /**\n     * @private\n     * @param {KeyboardEvent} ev\n     */\n    _onKeydown(ev) {\n        const isEditable =\n            ev.target.tagName === \"INPUT\" ||\n            ev.target.tagName === \"TEXTAREA\" ||\n            ev.target.isContentEditable;\n\n        const input = this.inputRef.el;\n        if (isEditable && ev.target !== input) {\n            return;\n        }\n        if (this.ui.activeElement !== document) {\n            return;\n        }\n\n        switch (ev.key) {\n            case \"ArrowDown\":\n                this._updateFocusedIndex(\"nextLine\");\n                ev.preventDefault();\n                break;\n            case \"ArrowRight\":\n                if (\n                    input === document.activeElement &&\n                    input.selectionEnd < this.state.query.length\n                ) {\n                    return;\n                }\n                this._updateFocusedIndex(\"nextColumn\");\n                ev.preventDefault();\n                break;\n            case \"ArrowUp\":\n                this._updateFocusedIndex(\"previousLine\");\n                ev.preventDefault();\n                break;\n            case \"ArrowLeft\":\n                if (input === document.activeElement && input.selectionStart > 0) {\n                    return;\n                }\n                this._updateFocusedIndex(\"previousColumn\");\n                ev.preventDefault();\n                break;\n            case \"Tab\":\n                if (!this.state.isSearching) {\n                    return;\n                }\n                ev.preventDefault();\n                this._updateFocusedIndex(ev.shiftKey ? \"previousElem\" : \"nextElem\");\n                break;\n            case \"Enter\":\n                if (this.state.focusedIndex !== null) {\n                    const isApp = this.appIndex !== null;\n                    const menu = isApp\n                        ? this.displayedApps[this.appIndex]\n                        : this.displayedMenuItems[this.menuIndex];\n                    this._openMenu(menu);\n                    ev.preventDefault();\n                }\n                return;\n            case \"Alt\":\n            case \"AltGraph\":\n            case \"Control\":\n            case \"Meta\":\n            case \"PageDown\":\n            case \"PageUp\":\n            case \"Shift\":\n                break;\n            case \"Escape\": {\n                // Clear search query and hide search bar if there was no content\n                // before ESC\n                // Hide home menu if there is an inner action\n                const currentQuery = this.state.query;\n                if (currentQuery) {\n                    this._updateQuery(\"\");\n                } else {\n                    this.homeMenuService.toggle(false);\n                }\n                break;\n            }\n            case \"c\":\n            case \"x\":\n                // keep focus and selection on keyboard copy and cut\n                if (ev.ctrlKey || ev.metaKey) {\n                    break;\n                }\n            default:\n                // If any other key:\n                // Input is focused and the key is automatically processed by it\n                // just as if it were directly typed in it.\n                if (document.activeElement !== input) {\n                    input.focus();\n                }\n        }\n    }\n\n    /**\n     * @private\n     * @param {Object} menu\n     */\n    _onMenuitemClick(menu) {\n        this._openMenu(menu);\n    }\n}\nHomeMenu.components = { ExpirationPanel };\nHomeMenu.props = {\n    apps: {\n        type: Array,\n        element: {\n            type: Object,\n            shape: {\n                actionID: Number,\n                appID: Number,\n                id: Number,\n                label: String,\n                parents: String,\n                webIcon: [\n                    Boolean,\n                    String,\n                    {\n                        type: Object,\n                        optional: 1,\n                        shape: {\n                            iconClass: String,\n                            color: String,\n                            backgroundColor: String,\n                        },\n                    },\n                ],\n                webIconData: { type: String, optional: 1 },\n                xmlid: String,\n            },\n        },\n    },\n    menuItems: {\n        type: Array,\n        element: {\n            type: Object,\n            shape: {\n                actionID: Number,\n                appID: Number,\n                id: Number,\n                label: String,\n                menuID: Number,\n                parents: String,\n                xmlid: String,\n            },\n        },\n    },\n};\nHomeMenu.template = \"web_enterprise.HomeMenu\";\n", "/** @odoo-module **/\n\nimport { registry } from \"@web/core/registry\";\nimport { Mutex } from \"@web/core/utils/concurrency\";\nimport { useService } from \"@web/core/utils/hooks\";\nimport { computeAppsAndMenuItems } from \"@web/webclient/menus/menu_helpers\";\nimport { ControllerNotFoundError } from \"@web/webclient/actions/action_service\";\nimport { HomeMenu } from \"./home_menu\";\n\nconst { Component, tags } = owl;\n\nexport const homeMenuService = {\n    dependencies: [\"action\", \"router\"],\n    start(env) {\n        let hasHomeMenu = false; // true iff the HomeMenu is currently displayed\n        let hasBackgroundAction = false; // true iff there is an action behind the HomeMenu\n        const mutex = new Mutex(); // used to protect against concurrent toggling requests\n\n        class HomeMenuAction extends Component {\n            setup() {\n                this.router = useService(\"router\");\n                this.menus = useService(\"menu\");\n                this.homeMenuProps = computeAppsAndMenuItems(this.menus.getMenuAsTree(\"root\"));\n            }\n            async mounted() {\n                const { breadcrumbs = [] } = this.env.config;\n                hasHomeMenu = true;\n                hasBackgroundAction = breadcrumbs.length > 0;\n                this.router.pushState({ menu_id: undefined }, { lock: false, replace: true });\n                this.env.bus.trigger(\"HOME-MENU:TOGGLED\");\n            }\n            willUnmount() {\n                hasHomeMenu = false;\n                hasBackgroundAction = false;\n                const currentMenuId = this.menus.getCurrentApp();\n                if (currentMenuId) {\n                    this.router.pushState({ menu_id: currentMenuId.id }, { lock: true });\n                }\n                this.env.bus.trigger(\"HOME-MENU:TOGGLED\");\n            }\n        }\n        HomeMenuAction.components = { HomeMenu };\n        HomeMenuAction.target = \"current\";\n        HomeMenuAction.template = tags.xml`<HomeMenu t-props=\"homeMenuProps\"/>`;\n\n        registry.category(\"actions\").add(\"menu\", HomeMenuAction);\n\n        return {\n            get hasHomeMenu() {\n                return hasHomeMenu;\n            },\n            get hasBackgroundAction() {\n                return hasBackgroundAction;\n            },\n            async toggle(show) {\n                return mutex.exec(async () => {\n                    show = show === undefined ? !hasHomeMenu : Boolean(show);\n                    if (show !== hasHomeMenu) {\n                        if (show) {\n                            await env.services.action.doAction(\"menu\");\n                        } else {\n                            try {\n                                await env.services.action.restore();\n                            } catch (err) {\n                                if (!(err instanceof ControllerNotFoundError)) {\n                                    throw err;\n                                }\n                            }\n                        }\n                    }\n                    // hack: wait for a tick to ensure that the url has been updated before\n                    // switching again\n                    return new Promise((r) => setTimeout(r));\n                });\n            },\n        };\n    },\n};\n\nregistry.category(\"services\").add(\"home_menu\", homeMenuService);\n", "/** @odoo-module **/\n\nimport { NavBar } from \"@web/webclient/navbar/navbar\";\nimport { useService } from \"@web/core/utils/hooks\";\n\nconst { hooks } = owl;\nconst { useRef } = hooks;\n\nexport class EnterpriseNavBar extends NavBar {\n    setup() {\n        super.setup();\n        this.hm = useService(\"home_menu\");\n        this.menuAppsRef = useRef(\"menuApps\");\n        this.menuBrand = useRef(\"menuBrand\");\n        hooks.onMounted(() => {\n            this.env.bus.on(\"HOME-MENU:TOGGLED\", this, () => this._updateMenuAppsIcon());\n            this._updateMenuAppsIcon();\n        });\n        hooks.onPatched(() => {\n            this._updateMenuAppsIcon();\n        });\n    }\n    get hasBackgroundAction() {\n        return this.hm.hasBackgroundAction;\n    }\n    get isInApp() {\n        return !this.hm.hasHomeMenu;\n    }\n    _updateMenuAppsIcon() {\n        const menuAppsEl = this.menuAppsRef.el;\n        menuAppsEl.classList.toggle(\"o_hidden\", !this.isInApp && !this.hasBackgroundAction);\n        menuAppsEl.classList.toggle(\"fa-th\", this.isInApp);\n        menuAppsEl.classList.toggle(\"fa-chevron-left\", !this.isInApp && this.hasBackgroundAction);\n        const title = !this.isInApp && this.hasBackgroundAction ? \"Previous view\" : \"Home menu\";\n        menuAppsEl.title = title;\n        menuAppsEl.ariaLabel = title;\n\n        const menuBrand = this.menuBrand.el;\n        if (menuBrand) {\n            menuBrand.classList.toggle(\"o_hidden\", !this.isInApp);\n        }\n\n        const appSubMenus = this.appSubMenus.el;\n        if (appSubMenus) {\n            appSubMenus.classList.toggle(\"o_hidden\", !this.isInApp);\n        }\n    }\n}\nEnterpriseNavBar.template = \"web_enterprise.EnterpriseNavBar\";\n", "/** @odoo-module **/\n\nimport { patch } from \"@web/core/utils/patch\";\nimport { systrayItem } from \"@web/webclient/switch_company_menu/switch_company_menu\";\n\n/**\n * The company menu in enterprise should be removed if the screen is small\n * It is handled by the burger menu.\n */\n\npatch(systrayItem, \"web_enterprise.CompanyMenuItem\", {\n    isDisplayed(env) {\n        return this._super(...arguments) && !env.isSmall;\n    },\n});\n", "/** @odoo-module */\n\nimport { patch } from \"@web/core/utils/patch\";\nimport { systrayItem } from \"@web/webclient/user_menu/user_menu\";\n\n/**\n * The user menu in enterprise should be removed if the screen is small\n * It is handled by the burger menu.\n */\n\npatch(systrayItem, \"web_enterprise.UserMenuItem\", {\n    isDisplayed: (env) => !env.isSmall,\n});\n", "/** @odoo-module **/\n\nimport { WebClient } from \"@web/webclient/webclient\";\nimport { useService } from \"@web/core/utils/hooks\";\nimport { EnterpriseNavBar } from \"./navbar/navbar\";\nimport { hasTouch } from \"@web/core/browser/feature_detection\";\n\nconst { hooks } = owl;\n\nexport class WebClientEnterprise extends WebClient {\n    setup() {\n        super.setup();\n        this.hm = useService(\"home_menu\");\n        useService(\"enterprise_legacy_service_provider\");\n        hooks.onMounted(() => {\n            this.env.bus.on(\"HOME-MENU:TOGGLED\", this, () => {\n                if (!this.el) {\n                    return;\n                }\n                this._updateClassList();\n            });\n            this._updateClassList();\n            this.el.classList.toggle(\"o_touch_device\", hasTouch());\n        });\n    }\n    _updateClassList() {\n        this.el.classList.toggle(\"o_home_menu_background\", this.hm.hasHomeMenu);\n        this.el.classList.toggle(\"o_has_home_menu\", this.hm.hasHomeMenu);\n    }\n    _loadDefaultApp() {\n        return this.hm.toggle(true);\n    }\n}\nWebClientEnterprise.components = { ...WebClient.components, NavBar: EnterpriseNavBar };\n", "/** @odoo-module */\n\nimport { patch } from \"@web/core/utils/patch\";\nimport { PivotRenderer } from \"@web/views/pivot/pivot_renderer\";\nimport { useEffect } from \"@web/core/utils/hooks\";\n\npatch(PivotRenderer.prototype, \"web_enterprise.PivotRendererMobile\", {\n    setup() {\n        this._super();\n        if (this.env.isSmall) {\n            useEffect(() => {\n                const tooltipElems = this.el.querySelectorAll(\"*[data-tooltip]\");\n                for (const el of tooltipElems) {\n                    el.removeAttribute(\"data-tooltip\");\n                    el.removeAttribute(\"data-tooltip-position\");\n                }\n            });\n        }\n    },\n\n    getPadding(cell) {\n        if (this.env.isSmall) {\n            return 5 + cell.indent * 5;\n        }\n        return this._super(...arguments);\n    },\n});\n", "odoo.define('web_enterprise.ControlPanel', function (require) {\n    \"use strict\";\n\n    const ControlPanel = require('web.ControlPanel');\n    const { device } = require('web.config');\n    const { patch } = require('web.utils');\n\n    const { Portal } = owl.misc;\n    const { useState } = owl.hooks;\n    const STICKY_CLASS = 'o_mobile_sticky';\n\n    if (!device.isMobile) {\n        return;\n    }\n\n    /**\n     * Control panel: mobile layout\n     *\n     * This patch handles the scrolling behaviour of the control panel in a mobile\n     * environment: the panel sticks to the top of the window when scrolling into\n     * the view. It is revealed when scrolling up and hiding when scrolling down.\n     * The panel's position is reset to default when at the top of the view.\n     */\n    patch(ControlPanel.prototype, 'web_enterprise.ControlPanel', {\n        setup() {\n            this._super(...arguments);\n            this.state = useState({\n                showSearchBar: false,\n                showMobileSearch: false,\n                showViewSwitcher: false,\n            });\n        },\n\n        mounted() {\n            // Bind additional events\n            this.onWindowClick = this._onWindowClick.bind(this);\n            this.onWindowScroll = this._onScrollThrottled.bind(this);\n            window.addEventListener('click', this.onWindowClick);\n            document.addEventListener('scroll', this.onWindowScroll);\n\n            this.oldScrollTop = 0;\n            this.initialScrollTop = document.documentElement.scrollTop;\n            this.el.style.top = '0px';\n\n            this._super(...arguments);\n        },\n\n        willUnmount() {\n            window.removeEventListener('click', this.onWindowClick);\n            document.removeEventListener('scroll', this.onWindowScroll);\n        },\n\n        //---------------------------------------------------------------------\n        // Private\n        //---------------------------------------------------------------------\n\n        /**\n         * Get today's date (number).\n         * @private\n         * @returns {number}\n         */\n        _getToday() {\n            return new Date().getDate();\n        },\n\n        /**\n         * Reset mobile search state\n         * @private\n         */\n        _resetSearchState() {\n            Object.assign(this.state, {\n                showSearchBar: false,\n                showMobileSearch: false,\n                showViewSwitcher: false,\n            });\n        },\n\n        //---------------------------------------------------------------------\n        // Handlers\n        //---------------------------------------------------------------------\n\n        /**\n         * Show or hide the control panel on the top screen.\n         * The function is throttled to avoid refreshing the scroll position more\n         * often than necessary.\n         * @private\n         */\n        _onScrollThrottled() {\n            if (this.isScrolling) {\n                return;\n            }\n            this.isScrolling = true;\n            requestAnimationFrame(() => this.isScrolling = false);\n\n            const scrollTop = document.documentElement.scrollTop;\n            const delta = Math.round(scrollTop - this.oldScrollTop);\n\n            if (scrollTop > this.initialScrollTop) {\n                // Beneath initial position => sticky display\n                const elRect = this.el.getBoundingClientRect();\n                this.el.classList.add(STICKY_CLASS);\n                this.el.style.top = delta < 0 ?\n                    // Going up\n                    `${Math.min(0, elRect.top - delta)}px` :\n                    // Going down | not moving\n                    `${Math.max(-elRect.height, elRect.top - delta)}px`;\n            } else {\n                // Above intial position => standard display\n                this.el.classList.remove(STICKY_CLASS);\n            }\n\n            this.oldScrollTop = scrollTop;\n        },\n\n        /**\n         * Reset mobile search state on switch view.\n         * @private\n         */\n        _onSwitchView() {\n            this._resetSearchState();\n        },\n\n        /**\n         * @private\n         * @param {MouseEvent} ev\n         */\n        _onWindowClick(ev) {\n            if (\n                this.state.showViewSwitcher &&\n                !ev.target.closest('.o_cp_switch_buttons')\n            ) {\n                this.state.showViewSwitcher = false;\n            }\n        },\n    });\n\n    patch(ControlPanel, 'web_enterprise.ControlPanel', {\n        template: 'web_enterprise._ControlPanel',\n        components: {\n            ...ControlPanel.components,\n            Portal,\n        },\n    });\n});\n", "odoo.define(\"web_enterprise.Dialog\", function(require) {\n    \"use strict\";\n\n    const config = require(\"web.config\");\n    if (!config.device.isMobile) {\n        return;\n    }\n\n    const Dialog = require(\"web.Dialog\");\n\n    Dialog.include({\n        /**\n         * @override\n         *\n         * @param {Widget} parent\n         * @param {Array} options.headerButtons\n         */\n        init(parent, { headerButtons }) {\n            this._super.apply(this, arguments);\n            this.headerButtons = headerButtons || [];\n        },\n\n        /**\n         * Renders the header as a \"Top App Bar\" layout :\n         * - navigation icon: right arrow that closes the dialog;\n         * - title: same as on desktop;\n         * - action buttons: optional actions related to the current screen.\n         * Only applied for fullscreen dialog.\n         *\n         * Also, get the current scroll position for mobile devices in order to\n         * maintain offset while dialog is closed.\n         *\n         * @override\n         */\n        async willStart() {\n            const prom = await this._super.apply(this, arguments);\n            if (this.renderHeader && this.fullscreen) {\n                const $modalHeader = this.$modal.find(\".modal-header\");\n                $modalHeader.find(\"button.close\").remove();\n                const $navigationBtn = $(\"<button>\", {\n                    class: \"btn fa fa-arrow-left\",\n                    \"data-dismiss\": \"modal\",\n                    \"aria-label\": \"close\",\n                });\n                $modalHeader.prepend($navigationBtn);\n                const $btnContainer = $(\"<div>\");\n                this._setButtonsTo($btnContainer, this.headerButtons);\n                $modalHeader.append($btnContainer);\n            }\n            // need to get scrollPosition prior opening the dialog else body will scroll to\n            // top due to fixed position applied on it with help of 'modal-open' class.\n            this.scrollPosition = {\n                top: window.scrollY || document.documentElement.scrollTop,\n                left: window.scrollX || document.documentElement.scrollLeft,\n            };\n            return prom;\n        },\n\n        /**\n         * Scroll to original position while closing modal in mobile devices\n         *\n         * @override\n         */\n        destroy() {\n            if (this.$modal && $('.modal[role=\"dialog\"]').filter(\":visible\").length <= 1) {\n                // in case of multiple open dialogs, only reset scroll while closing the last one\n                // (it can be done only if there's no fixed position on body and thus by removing\n                // 'modal-open' class responsible for fixed position)\n                this.$modal.closest(\"body\").removeClass(\"modal-open\");\n                window.scrollTo(this.scrollPosition);\n            }\n            this._super(...arguments);\n        },\n    });\n});\n", "odoo.define('base.settingsMobile', function (require) {\n\"use strict\";\n\nvar config = require('web.config');\nif (!config.device.isMobile) {\n    return;\n}\n\nvar core = require('web.core');\nvar BaseSetting = require('base.settings');\nvar KanbanTabsMobileMixin = require('web.KanbanTabsMobileMixin');\n\nBaseSetting.Renderer.include(Object.assign({}, KanbanTabsMobileMixin, {\n    start: function () {\n        var prom = this._super.apply(this, arguments);\n        core.bus.on(\"DOM_updated\", this, function () {\n            this._moveToTab(this.currentIndex || this._currentAppIndex());\n        });\n        return prom;\n    },\n    on_attach_callback: function () {\n        this._super.apply(this, arguments);\n        this._computeTabPosition(this.modules, this.currentIndex, this.$('.settings_tab'));\n    },\n    /**\n     * In mobile view behaviour is like swipe content left / right and apps tab will be shown on the top.\n     * This method will set the required properties (styling and css).\n     *\n     * @private\n     * @param {int} currentTab\n     */\n    _activateSettingMobileTab: function (currentTab) {\n        var self = this;\n        var moveTo = currentTab;\n        var next = moveTo + 1;\n        var previous = moveTo - 1;\n\n        this.$(\".settings .app_settings_block\").removeClass(\"previous next current before after\");\n        this.$(\".settings_tab .tab\").removeClass(\"previous next current before after\");\n        _.each(this.modules, function (module, index) {\n            var tab = self.$(\".tab[data-key='\" + module.key + \"']\");\n            var view = module.settingView;\n\n            if (index === previous) {\n                tab.addClass(\"previous\");\n                view.addClass(\"previous\");\n            } else if (index === next) {\n                tab.addClass(\"next\");\n                view.addClass(\"next\");\n            } else if (index < moveTo) {\n                tab.addClass(\"before\");\n                view.addClass(\"before\");\n            } else if (index === moveTo) {\n                tab.addClass(\"current\");\n                view.addClass(\"current\");\n            } else if (index > moveTo) {\n                tab.addClass(\"after\");\n                view.addClass(\"after\");\n            }\n        });\n        this._computeTabPosition(this.modules, moveTo, this.$('.settings_tab'));\n    },\n    /**\n     * Enables swipe navigation between settings pages\n     *\n     * @private\n     */\n    _enableSwipe: function () {\n        var self = this;\n        this.$('.settings').swipe({\n            swipeLeft: function () {\n                self._moveToTab(self.currentIndex + 1);\n            },\n            swipeRight: function () {\n                self._moveToTab(self.currentIndex - 1);\n            }\n        });\n    },\n    /**\n     * @override\n     */\n    _getTabWidth: function (column) {\n        return this.$(\".tab[data-key='\" + column.key + \"']\").outerWidth();\n    },\n    /**\n     * @override\n     */\n    _moveToTab: function (index) {\n        this._super.apply(this, arguments);\n        if (this.currentIndex !== -1) {\n            this.activeTab.removeClass(\"selected\");\n            this._activateSettingMobileTab(this.currentIndex);\n        }\n    },\n    _onKeyUpSearch: function (event) {\n        this.$('.settings_tab').addClass('o_hidden');\n        this.$('.settings').addClass('d-block');\n        this._super.apply(this, arguments);\n    },\n    _resetSearch: function () {\n        this._super.apply(this, arguments);\n        this.$('.settings_tab').removeClass('o_hidden');\n        this.$('.settings').removeClass('d-block');\n    },\n    _render: function () {\n        var self = this;\n        return this._super.apply(this, arguments).then(function() {\n            self._enableSwipe();\n        });\n    }\n}));\n\nvar view_registry = require('web.view_registry');\nvar BaseSettingsView = view_registry.get('base_settings');\nBaseSettingsView.include({\n    /**\n     * Overrides to lazy-load touchSwipe library in mobile.\n     *\n     * @override\n     */\n    init: function () {\n        this.jsLibs.push('/web/static/lib/jquery.touchSwipe/jquery.touchSwipe.js');\n        this._super.apply(this, arguments);\n    },\n});\n});\n", "odoo.define(\"web.SearchPanelMobile\", function (require) {\n    \"use strict\";\n\n    const SearchPanel = require(\"web.searchPanel\");\n    const { device } = require(\"web.config\");\n    const { patch } = require('web.utils');\n\n    if (!device.isMobile) {\n        return;\n    }\n\n    const { Portal } = owl.misc;\n\n    //-------------------------------------------------------------------------\n    // Helpers\n    //-------------------------------------------------------------------------\n\n    const isFilter = (s) => s.type === \"filter\";\n\n    /**\n     * @param {Map} values\n     * @returns {Object[]}\n     */\n    function nameOfCheckedValues(values) {\n        const names = [];\n        for (const [_, value] of values) {\n            if (value.checked) {\n                names.push(value.display_name);\n            }\n        }\n        return names;\n    }\n\n    patch(SearchPanel.prototype, \"web_enterprise.SearchPanel.Mobile\", {\n        setup() {\n            this._super(...arguments);\n            this.state.showMobileSearch = false;\n        },\n\n        //-----------------------------------------------------------------\n        // Private\n        //-----------------------------------------------------------------\n\n        /**\n         * Returns a formatted version of the active categories to populate\n         * the selection banner of the control panel summary.\n         * @private\n         * @returns {Object[]}\n         */\n        _getCategorySelection() {\n            const activeCategories = this.model.get(\"sections\",\n                (s) => s.type === \"category\" && s.activeValueId\n            );\n            const selection = [];\n            for (const category of activeCategories) {\n                const parentIds = this._getAncestorValueIds(\n                    category,\n                    category.activeValueId\n                );\n                const orderedCategoryNames = [\n                    ...parentIds,\n                    category.activeValueId,\n                ].map(\n                    (valueId) => category.values.get(valueId).display_name\n                );\n                selection.push({\n                    values: orderedCategoryNames,\n                    icon: category.icon,\n                    color: category.color,\n                });\n            }\n            return selection;\n        },\n\n        /**\n         * Returns a formatted version of the active filters to populate\n         * the selection banner of the control panel summary.\n         * @private\n         * @returns {Object[]}\n         */\n        _getFilterSelection() {\n            const filters = this.model.get(\"sections\", isFilter);\n            const selection = [];\n            for (const { groups, values, icon, color } of filters) {\n                let filterValues;\n                if (groups) {\n                    filterValues = Object.keys(groups)\n                        .map((groupId) =>\n                            nameOfCheckedValues(groups[groupId].values)\n                        )\n                        .flat();\n                } else if (values) {\n                    filterValues = nameOfCheckedValues(values);\n                }\n                if (filterValues.length) {\n                    selection.push({ values: filterValues, icon, color });\n                }\n            }\n            return selection;\n        },\n    });\n\n    patch(SearchPanel, \"web_enterprise.SearchPanel.Mobile\", {\n        template: \"web_enterprise.Legacy.SearchPanel.Mobile\",\n        components: {\n            ...SearchPanel.components,\n            Portal,\n        },\n    });\n});\n", "odoo.define('web_mobile.barcode_fields', function (require) {\n\"use strict\";\n\nvar field_registry = require('web.field_registry');\nrequire('web._field_registry');\nvar relational_fields = require('web.relational_fields');\n\nconst { _t } = require('web.core');\nconst BarcodeScanner = require('@web_enterprise/webclient/barcode/barcode_scanner');\n\n/**\n * Override the Many2One to open a dialog in mobile.\n */\nvar FieldMany2OneBarcode = relational_fields.FieldMany2One.extend({\n    template: \"FieldMany2OneBarcode\",\n    events: _.extend({}, relational_fields.FieldMany2One.prototype.events, {\n        'click .o_barcode_mobile': '_onBarcodeButtonClick',\n    }),\n\n    /**\n     * @override\n     */\n    start: function () {\n        var result = this._super.apply(this, arguments);\n        this._startBarcode();\n        return result;\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * External button is visible\n     *\n     * @return {boolean}\n     * @private\n     */\n    _isExternalButtonVisible: function () {\n        return this.$external_button.is(':visible');\n    },\n    /**\n     * Hide the search more option\n     *\n     * @param {Array} values\n     */\n    _manageSearchMore(values) {\n        return values;\n    },\n    /**\n     * @override\n     * @private\n     */\n    _renderEdit: function () {\n        this._super.apply(this, arguments);\n        // Hide button if a record is set or external button is visible\n        if (this.$barcode_button) {\n            this.$barcode_button.toggle(!this._isExternalButtonVisible());\n        }\n    },\n    /**\n     * Initialisation of barcode button\n     *\n     * @private\n     */\n    _startBarcode: function () {\n        this.$barcode_button = this.$('.o_barcode_mobile');\n        // Hide button if a record is set\n        this.$barcode_button.toggle(!this.isSet());\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * On click on button\n     *\n     * @private\n     */\n    async _onBarcodeButtonClick() {\n        const barcode = await BarcodeScanner.scanBarcode();\n        if (barcode) {\n            this._onBarcodeScanned(barcode);\n            if ('vibrate' in window.navigator) {\n                window.navigator.vibrate(100);\n            }\n        } else {\n            this.displayNotification({\n                type: 'warning',\n                message: 'Please, scan again !',\n            });\n        }\n    },\n    /**\n     * When barcode is scanned\n     *\n     * @param barcode\n     * @private\n     */\n    async _onBarcodeScanned(barcode) {\n        const results = await this._search(barcode);\n        const records = results.filter(r => !!r.id);\n        if (records.length === 1) {\n            this._setValue({ id: records[0].id });\n        } else {\n            const dynamicFilters = [{\n                description: _.str.sprintf(_t('Quick search: %s'), barcode),\n                domain: [['id', 'in', records.map(r => r.id)]],\n            }];\n            this._searchCreatePopup(\"search\", false, {}, dynamicFilters);\n        }\n    },\n});\n\nif (BarcodeScanner.isBarcodeScannerSupported()) {\n    field_registry.add('many2one_barcode', FieldMany2OneBarcode);\n}\n\nreturn FieldMany2OneBarcode;\n});\n", "odoo.define('web_enterprise.BasicRenderer', function (require) {\n\"use strict\";\n\nconst config = require('web.config');\nif (!config.device.isMobile) {\n    return;\n}\n\n/**\n * This file defines the MobileBasicRenderer, an extension of the BasicRenderer\n * implementing some tweaks to improve the UX in mobile.\n */\n\nconst BasicRenderer = require('web.BasicRenderer');\n\nBasicRenderer.include({\n    SHOW_AFTER_DELAY: 250,\n\n    /**\n     * @override\n     */\n    init() {\n        this._super(...arguments);\n        this.showTimer = undefined;\n        this.tooltipNodes = [];\n        this._onTouchStartTooltipBind = this._onTouchStartTooltip.bind(this);\n        this._onTouchEndTooltipBind = this._onTouchEndTooltip.bind(this);\n    },\n    /**\n     * @override\n     */\n    on_attach_callback() {\n        this._super(...arguments);\n        this._addListener();\n    },\n    /**\n     * @override\n     */\n    on_detach_callback() {\n        this._removeListeners();\n        this._super(...arguments);\n    },\n\n    _addListener: function () {\n        this.tooltipNodes.forEach((nodeElement) => {\n            nodeElement.addEventListener('touchstart', this._onTouchStartTooltipBind);\n            nodeElement.addEventListener('touchend', this._onTouchEndTooltipBind);\n            nodeElement.classList.add('o_user_select_none');\n        });\n    },\n    /**\n     * Allow to change when the tooltip appears\n     *\n     * @override\n     */\n    _addFieldTooltip: function (widget, $node) {\n        this._super(...arguments);\n        $node = $node.length ? $node : widget.$el;\n        const nodeElement = $node[0];\n        if (!this.tooltipNodes.some(node => node === nodeElement)) {\n            this.tooltipNodes.push(nodeElement);\n        }\n    },\n    /**\n     * @override\n     */\n    _getTooltipOptions: function () {\n        return Object.assign({}, this._super(...arguments), {\n            trigger: 'manual',\n        });\n    },\n    /**\n     * @override\n     */\n    _render: function () {\n        return this._super(...arguments).then(() => {\n            this._addListener();\n        });\n    },\n    _removeListeners: function () {\n        while (this.tooltipNodes.length) {\n            const node = this.tooltipNodes.shift();\n            node.removeEventListener('touchstart', this._onTouchStartTooltipBind);\n            node.removeEventListener('touchend', this._onTouchEndTooltipBind);\n            node.classList.remove('o_user_select_none');\n        }\n    },\n    /**\n     * @private\n     * @param {TouchEvent} event\n     */\n    _onTouchEndTooltip: function (event) {\n        clearTimeout(this.showTimer);\n        const $node = $(event.target);\n        $node.tooltip('hide');\n    },\n    /**\n     * @private\n     * @param {TouchEvent} event\n     */\n    _onTouchStartTooltip: function (event) {\n        // Exclude children element from this handler\n        if (!event.target.classList.contains('o_user_select_none')) {\n            return;\n        }\n        const $node = $(event.target);\n        clearTimeout(this.showTimer);\n        this.showTimer = setTimeout(() => {\n            $node.tooltip('show');\n        }, this.SHOW_AFTER_DELAY);\n    },\n});\n\n});\n", "odoo.define('web_enterprise.CalendarController', function (require) {\n\"use strict\";\n\nconst config = require('web.config');\nif (!config.device.isMobile) {\n    return;\n}\n\n/**\n * This file implements some tweaks to improve the UX in mobile.\n */\n\nconst CalendarController = require('web.CalendarController');\n\nCalendarController.include({\n    custom_events: _.extend({}, CalendarController.prototype.custom_events, {\n        today_button_click: '_onTodayButtonClicked',\n    }),\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * In mobile, we display a special 'Today' button on the bottom right corner\n     * of the control panel. Its click events are handled here.\n     */\n    _onTodayButtonClicked: function () {\n        this._move('today');\n    },\n\n    _renderButtonsParameters: function () {\n        return _.extend({}, this._super.apply(this, arguments), {\n            isMobile: config.device.isMobile,\n        });\n    },\n\n});\n\n});\n", "odoo.define('web_enterprise.CalendarRenderer', function (require) {\n\"use strict\";\n\nconst config = require('web.config');\nif (!config.device.isMobile) {\n    return;\n}\n\n/**\n * This file implements some tweaks to improve the UX in mobile.\n */\n\nconst {qweb} = require('web.core');\n\nconst CalendarRenderer = require('web.CalendarRenderer');\n\n// FIXME: in the future we should use modal instead of popover (on Event Click)\nCalendarRenderer.include({\n\n    events: _.extend({}, CalendarRenderer.events, {\n        'click .o_other_calendar_panel': '_toggleSidePanel',\n    }),\n\n    /**\n     * @constructor\n     * @param {Widget} parent\n     * @param {Object} state\n     * @param {Object} params\n     */\n    init: function (parent, state, params) {\n        this._super.apply(this, arguments);\n        this.isSwipeEnabled = true;\n        this.isSidePanelVisible = false;\n        this.filtersMobile = [];\n    },\n    on_attach_callback: function () {\n        this.$el.height($(window).height() - this.$el.offset().top);\n        this._super(...arguments);\n    },\n    /**\n     * @override\n     * @returns {Promise}\n     */\n    start: function () {\n        const promise = this._super();\n        this._bindSwipe();\n        return promise;\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Bind handlers to enable swipe navigation\n     *\n     * @private\n     */\n    _bindSwipe: function () {\n        const self = this;\n        let touchStartX;\n        let touchEndX;\n        this.calendarElement.addEventListener('touchstart', function (event) {\n            self.isSwipeEnabled = true;\n            touchStartX = event.touches[0].pageX;\n        });\n        this.calendarElement.addEventListener('touchend', function (event) {\n            if (!self.isSwipeEnabled) {\n                return;\n            }\n            touchEndX = event.changedTouches[0].pageX;\n            if (touchStartX - touchEndX > 100) {\n                self.trigger_up('next');\n            } else if (touchStartX - touchEndX < -100) {\n                self.trigger_up('prev');\n            }\n        });\n    },\n    /**\n     * Concat all filter available in side panel and filter the inactive\n     *\n     * @private\n     * @return {[]}\n     */\n    _getFilters: function () {\n        const filters = this.state.filters;\n        return Object.keys(filters)\n            .filter(key => filters[key].filters)\n            .map(key => ({\n                label: filters[key].title,\n                values: this._prepareDataFilterForQWeb(filters[key].filters),\n                countItems: filters[key].filters.length,\n            }))\n            ;\n    },\n    /**\n     * In mobile we change the column header to avoid to much text\n     *\n     * @override\n     * @private\n     */\n    _getFullCalendarOptions: function () {\n        const oldOptions = this._super(...arguments);\n        // Parameters\n        oldOptions.views.dayGridMonth.columnHeaderFormat = 'ddd';\n        oldOptions.weekNumbersWithinDays = false;\n        oldOptions.views.dayGridMonth.weekLabel = '';\n        // Event Listeners\n        const oldEventDragStart = oldOptions.eventDragStart;\n        const oldEventPositioned = oldOptions.eventPositioned;\n        const oldEventRender = oldOptions.eventRender;\n        const oldEventResize = oldOptions.eventResize;\n        const oldEventResizeStart = oldOptions.eventResizeStart;\n        const oldSelectAllow = oldOptions.selectAllow;\n        const oldSelect = oldOptions.select;\n\n        oldOptions.eventDragStart = (info) => {\n            this.isSwipeEnabled = false;\n            if (oldEventDragStart) {\n                oldEventDragStart.call(this.calendar, info);\n            }\n        };\n        oldOptions.eventPositioned = (info) => {\n            this.isSwipeEnabled = false;\n            if (oldEventPositioned) {\n                oldEventPositioned.call(this.calendar, info);\n            }\n        };\n        oldOptions.eventRender = (info) => {\n            this.isSwipeEnabled = false;\n            if (oldEventRender) {\n                oldEventRender.call(this.calendar, info);\n            }\n        };\n        oldOptions.eventResize = (eventResizeInfo) => {\n            this.isSwipeEnabled = false;\n            if (oldEventResize) {\n                oldEventResize.call(this.calendar, eventResizeInfo);\n            }\n        };\n        oldOptions.eventResizeStart = (mouseResizeInfo) => {\n            this.isSwipeEnabled = false;\n            if (oldEventResizeStart) {\n                oldEventResizeStart.call(this.calendar, mouseResizeInfo);\n            }\n        };\n        oldOptions.selectAllow = (selectInfo) => {\n            this.isSwipeEnabled = false;\n            if (oldSelectAllow) {\n                return oldSelectAllow.call(this.calendar, selectInfo);\n            }\n            return true;\n        };\n        oldOptions.select = (selectionInfo) => {\n            // Needed to avoid to trigger select and dateClick on long tap\n            selectionInfo.jsEvent.isSelectiong = true;\n            if (oldSelect) {\n                return oldSelect.call(this.calendar, selectionInfo);\n            }\n        };\n        // /!\\ Override if dateClick is set in web module\n        oldOptions.dateClick = (dateClickInfo) => {\n            if (dateClickInfo.jsEvent.isSelectiong) {\n                return;\n            }\n            if (dateClickInfo.view.type === this.scalesInfo.month) {\n                this.trigger_up('changeDate', {\n                    date: moment(dateClickInfo.date),\n                    scale: 'day',\n                });\n                return;\n            }\n            const data = {start: dateClickInfo.date, allDay: dateClickInfo.allDay};\n            this._preOpenCreate(data);\n        };\n        // TODO refactor year view to have consistency API (use dateClick instead of yearDateClick)\n        oldOptions.yearDateClick = (yearDateClickInfo) => {\n            this.trigger_up('changeDate', {\n                date: moment(yearDateClickInfo.date),\n                scale: 'day',\n            });\n        };\n\n        return oldOptions;\n    },\n    /**\n     * Prepare the parameters for the popover.\n     * Setting the popover is append to the body\n     * and so no need the use of z-index\n     *\n     * @private\n     * @override method from CalendarRenderer\n     * @param {Object} eventData\n     */\n    _getPopoverParams: function (eventData) {\n        const popoverParameters = this._super.apply(this, arguments);\n        popoverParameters.container = 'body';\n        return popoverParameters;\n    },\n    /**\n     * Finalise the popover\n     * We adding some inline css to put the popover in a \"fullscreen\" mode\n     *\n     * @private\n     * @override method from CalendarRenderer\n     * @param {jQueryElement} $popoverElement\n     * @param {web.CalendarPopover} calendarPopover\n     */\n    _onPopoverShown: function ($popoverElement, calendarPopover) {\n        this._super.apply(this, arguments);\n        const $popover = $($popoverElement.data('bs.popover').tip);\n        // Need to be executed after Bootstrap popover\n        // Bootstrap set style inline and so override the scss style\n        setTimeout(() => {\n            $popover.toggleClass([\n                'bs-popover-left',\n                'bs-popover-right',\n            ], false);\n            $popover.find('.arrow').remove();\n            $popover.css({\n                display: 'flex',\n                bottom: 0,\n                right: 0,\n                borderWidth: 0,\n                maxWidth: '100%',\n                transform: 'translate3d(0px, 0px, 0px)',\n            });\n            $popover.find('.o_cw_body').css({\n                display: 'flex',\n                flex: '1 0 auto',\n                flexDirection: 'column',\n            });\n            // We grow the \"popover_fields_secondary\" to have the buttons in the bottom of screen\n            $popover.find('.o_cw_popover_fields_secondary')\n                .toggleClass('o_cw_popover_fields_secondary', false)\n                .css({\n                        flexGrow: 1,\n                    }\n                );\n            // We prevent the use of \"scroll\" events to avoid bootstrap listener\n            // to resize the popover\n            $popover.on('touchmove', (event) => {\n                event.preventDefault();\n            });\n            // Firefox\n            $popover.on('mousewheel', (event) => {\n                event.preventDefault();\n            });\n            // Chrome\n            $popover.on('wheel', (event) => {\n                event.preventDefault();\n            });\n            // When the user click on a link the popover must be removed\n            $popover\n                .find('a.o_field_widget[href]')\n                .on('click', (event) => {\n                    $('.o_cw_popover').popover('dispose');\n                });\n        }, 0);\n    },\n    /**\n     * Filter the inactive element and set the color\n     *\n     * @private\n     * @param {[]} array\n     * @return {[]}\n     */\n    _prepareDataFilterForQWeb: function (array) {\n        const self = this;\n        return array\n            .filter(element => element.active)\n            .map(function (element) {\n                return Object.assign({}, element, {\n                    color: self.getColor(element.color_index),\n                });\n            });\n    },\n    /**\n     * Add a element to be able to manage other calendar in mobile\n     *\n     * @override\n     */\n    async _renderView() {\n        return this._super(...arguments).then(() => {\n            this.$('.o_calendar_mini').toggleClass('d-none', true);\n            this._renderOtherCalendar();\n        });\n    },\n    /**\n     * Recalculate the filters for mobile view\n     *\n     * @private\n     */\n    _renderFilters: function () {\n        return this._super(...arguments).then(() => {\n            this.filtersMobile = this._getFilters();\n            const reduce = !!this.filtersMobile.reduce((visible, filter) => visible | (filter.countItems > 0), false);\n            this.$('.o_calendar_sidebar .o_view_nocontent').toggleClass('d-none', reduce);\n        });\n    },\n    /**\n     * Render the specific view for OtherCalendarPanel\n     *\n     * @private\n     */\n    _renderOtherCalendar: function () {\n        this.$('.o_other_calendar_panel').remove();\n        this.otherCalendarMobile = $(qweb.render('CalendarView.OtherCalendarMobile', {\n            filters: this.filtersMobile,\n            isSidePanelVisible: this.isSidePanelVisible,\n        }));\n        this.$el.prepend(this.otherCalendarMobile);\n    },\n    /**\n     * Toggle the d-none class of calendar and side panel to switch between the two elements\n     *\n     * @private\n     */\n    _toggleSidePanel: async function () {\n        this.isSidePanelVisible = !this.isSidePanelVisible;\n        this.$('.o_calendar_view').toggleClass('d-none', this.isSidePanelVisible);\n        this.$('.o_calendar_sidebar_container').toggleClass('d-none', !this.isSidePanelVisible);\n        this._renderOtherCalendar();\n    },\n    /**\n     * Remove highlight classes and dispose of popovers\n     *\n     * @private\n     */\n    _unselectEvent: function () {\n        this._super.apply(this, arguments);\n        $('.o_cw_popover').popover('dispose');\n    },\n});\n\n});\n", "odoo.define('web_enterprise.MobileFormRenderer', function (require) {\n\"use strict\";\n\nconst config = require('web.config');\nif (!config.device.isMobile) {\n    return;\n}\n\n/**\n * This file defines the MobileFormRenderer, an extension of the FormRenderer\n * implementing some tweaks to improve the UX in mobile.\n */\n\nconst core = require('web.core');\nconst FormRenderer = require('web.FormRenderer');\n\nconst qweb = core.qweb;\n\nFormRenderer.include({\n\n    /**\n     * Reset the 'state' of the drop down\n     * @override\n     */\n    updateState: function () {\n        this.isStatusbarButtonsDropdownOpen = undefined;\n        return this._super(...arguments);\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Show action drop-down if there are multiple visible buttons/widgets.\n     *\n     * @private\n     * @override\n     */\n    _renderStatusbarButtons: function (buttons) {\n        // Removes 'o_invisible_modifier' buttons in addition to those that match this selector:\n        // .o_form_view.o_form_editable .oe_read_only {\n        //     display: none !important;\n        // }\n        const $visibleButtons = buttons.filter(button => {\n            return !($(button).hasClass('o_invisible_modifier') || (this.mode === 'edit' && $(button).hasClass('oe_read_only')));\n        });\n\n        if ($visibleButtons.length > 1) {\n            const $statusbarButtonsDropdown = $(qweb.render('StatusbarButtonsDropdown', {\n                open: this.isStatusbarButtonsDropdownOpen,\n            }));\n            $statusbarButtonsDropdown.find('.btn-group').on('show.bs.dropdown', () => {\n                this.isStatusbarButtonsDropdownOpen = true;\n            });\n            $statusbarButtonsDropdown.find('.btn-group').on('hide.bs.dropdown', () => {\n                this.isStatusbarButtonsDropdownOpen = false;\n            });\n            const $dropdownMenu = $statusbarButtonsDropdown.find('.dropdown-menu');\n            buttons.forEach(button => {\n                const dropdownButton = $(button).addClass('dropdown-item');\n                return $dropdownMenu.append(dropdownButton);\n            });\n            return $statusbarButtonsDropdown;\n        }\n        buttons.forEach(button => $(button).removeClass('dropdown-item'));\n        return this._super.apply(this, arguments);\n    },\n    /**\n     * Update the UI statusbar button after all modifiers are updated.\n     *\n     * @override\n     * @private\n     */\n    _updateAllModifiers: function () {\n        return this._super.apply(this, arguments).then(() => {\n            const $statusbarButtonsContainer = this.$('.o_statusbar_buttons');\n            const $statusbarButtons = $statusbarButtonsContainer.find('button.btn').toArray();\n            $statusbarButtonsContainer.replaceWith(this._renderStatusbarButtons($statusbarButtons));\n        });\n    },\n});\n\n});\n", "odoo.define('web_mobile.FormView', function (require) {\n\"use strict\";\n\nvar config = require('web.config');\nvar FormView = require('web.FormView');\nvar QuickCreateFormView = require('web.QuickCreateFormView');\n\n/**\n * We don't want to see the keyboard after the opening of a form view.\n * The keyboard takes a lot of space and the user doesn't have a global view\n * on the form.\n * Plus, some relational fields are overrided (Many2One for example) and the\n * user have to click on it to set a value. On this kind of field, the autofocus\n * doesn't make sense because you can't directly type on it.\n * So, we have to disable the autofocus in mobile.\n */\nFormView.include({\n    /**\n     * @override\n     */\n    init: function () {\n        this._super.apply(this, arguments);\n\n        if (config.device.isMobile) {\n            this.controllerParams.disableAutofocus = true;\n        }\n    },\n});\n\nQuickCreateFormView.include({\n    /**\n     * @override\n     */\n    init: function () {\n        this._super.apply(this, arguments);\n        this.controllerParams.disableAutofocus = false;\n    },\n});\n\n});\n", "odoo.define('web.KanbanColumnMobile', function (require) {\n\"use strict\";\n\nconst config = require('web.config');\nif (!config.device.isMobile) {\n    return;\n}\n\nconst KanbanColumn = require('web.KanbanColumn');\n\nKanbanColumn.include({\n    init() {\n        this._super(...arguments);\n\n        this.recordsDraggable = false;\n        // deactivate sortable in mobile mode.  It does not work anyway,\n        // and it breaks horizontal scrolling in kanban views.  Someday, we\n        // should find a way to use the touch events to make sortable work.\n        this.canBeFolded = false;\n    },\n});\n});\n", "odoo.define('web_enterprise.kanban_column_quick_create', function (require) {\n\"use strict\";\n\nconst config = require('web.config');\nif (!config.device.isMobile) {\n    return;\n}\n\nconst KanbanRenderer = require('web.kanban_column_quick_create');\n\nKanbanRenderer.include({\n    init() {\n        this._super(...arguments);\n        this.isMobile = true;\n    },\n    _cancel() {\n        if (!this.folded) {\n            this.$input.val('');\n        }\n    },\n});\n});\n", "odoo.define('web.KanbanRendererMobile', function (require) {\n\"use strict\";\n\n/**\n * The purpose of this file is to improve the UX of grouped kanban views in\n * mobile. It includes the KanbanRenderer (in mobile only) to only display one\n * column full width, and enables the swipe to browse to the other columns.\n */\n\nvar config = require('web.config');\nif (!config.device.isMobile) {\n    return;\n}\nvar core = require('web.core');\nvar KanbanRenderer = require('web.KanbanRenderer');\nvar KanbanTabsMobileMixin = require('web.KanbanTabsMobileMixin');\n\nvar _t = core._t;\nvar qweb = core.qweb;\n\nKanbanRenderer.include(Object.assign({}, KanbanTabsMobileMixin, {\n    custom_events: _.extend({}, KanbanRenderer.prototype.custom_events || {}, {\n        quick_create_column_created: '_onColumnAdded',\n    }),\n    events: _.extend({}, KanbanRenderer.prototype.events, {\n        'click .o_kanban_mobile_tab': '_onMobileTabClicked',\n        'click .o_kanban_mobile_add_column': '_onMobileQuickCreateClicked',\n    }),\n    ANIMATE: true, // allows to disable animations for the tests\n    /**\n     * @override\n     */\n    init: function () {\n        this._super.apply(this, arguments);\n        this.activeColumnIndex = 0; // index of the currently displayed column\n        this._lastGroupedByField = null;\n        this._scrollPosition = null;\n    },\n    /**\n     * As this renderer defines its own scrolling area (the column in grouped\n     * mode), we override this hook to restore the scroll position like it was\n     * when the renderer has been last detached.\n     *\n     * @override\n     */\n    on_attach_callback: function () {\n        if (this._scrollPosition && this.state.groupedBy.length && this.widgets.length) {\n            var $column = this.widgets[this.activeColumnIndex].$el;\n            $column.scrollLeft(this._scrollPosition.left);\n            $column.scrollTop(this._scrollPosition.top);\n        }\n        this._computeTabPosition(this.widgets, this.activeColumnIndex, this.$('.o_kanban_mobile_tabs'));\n        this._super.apply(this, arguments);\n    },\n    /**\n     * As this renderer defines its own scrolling area (the column in grouped\n     * mode), we override this hook to store the scroll position, so that we can\n     * restore it if the renderer is re-attached to the DOM later. Also, we use\n     * this hook to restore groupedBy column swipe position if groupedBy field\n     * is not changed.\n     *\n     * @override\n     */\n    on_detach_callback: function () {\n        if (this.state.groupedBy.length && this.widgets.length) {\n            var $column = this.widgets[this.activeColumnIndex].$el;\n            this._scrollPosition = {\n                left: $column.scrollLeft(),\n                top: $column.scrollTop(),\n            };\n        } else {\n            this._scrollPosition = null;\n        }\n        this._super.apply(this, arguments);\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Displays the quick create record in the active column\n     * override to open quick create record in current active column\n     *\n     * @override\n     * @returns {Promise}\n     */\n    addQuickCreate: function () {\n        if(this._canCreateColumn() && !this.quickCreate.folded) {\n            this._onMobileQuickCreateClicked();\n        }\n        return this.widgets[this.activeColumnIndex].addQuickCreate();\n    },\n\n    /**\n     * Overrides to restore the left property and the scrollTop on the updated\n     * column, and to enable the swipe handlers\n     *\n     * @override\n     */\n    updateColumn: function (localID) {\n        var index = _.findIndex(this.widgets, {db_id: localID});\n        var $column = this.widgets[index].$el;\n        var scrollTop = $column.scrollTop();\n        return this._super.apply(this, arguments)\n            .then(() => this._layoutUpdate(false))\n            // required when clicking on 'Load More'\n            .then(() => $column.scrollTop(scrollTop));\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Check if we use the quick create on mobile\n     * @returns {boolean}\n     * @private\n     */\n    _canCreateColumn: function() {\n        return this.quickCreateEnabled && this.quickCreate && this.widgets.length;\n    },\n\n    /**\n     * Update the columns positions\n     *\n     * @private\n     * @param {boolean} [animate=false] set to true to animate\n     */\n    _computeColumnPosition: function (animate) {\n        if (this.widgets.length) {\n            // check rtl to compute correct css value\n            const rtl = _t.database.parameters.direction === 'rtl';\n\n            // display all o_kanban_group\n            this.$('.o_kanban_group').show();\n\n            const $columnAfter = this._toNode(this.widgets.filter((widget, index) => index > this.activeColumnIndex));\n            const promiseAfter = this._updateColumnCss($columnAfter, rtl ? {right: '100%'} : {left: '100%'}, animate);\n\n            const $columnBefore = this._toNode(this.widgets.filter((widget, index) => index < this.activeColumnIndex));\n            const promiseBefore = this._updateColumnCss($columnBefore, rtl ? {right: '-100%'} : {left: '-100%'}, animate);\n\n            const $columnCurrent = this._toNode(this.widgets.filter((widget, index) => index === this.activeColumnIndex));\n            const promiseCurrent = this._updateColumnCss($columnCurrent, rtl ? {right: '0%'} : {left: '0%'}, animate);\n\n            promiseAfter\n                .then(promiseBefore)\n                .then(promiseCurrent)\n                .then(() => {\n                    $columnAfter.hide();\n                    $columnBefore.hide();\n                });\n        }\n    },\n\n    /**\n     * Define the o_current class to the current selected kanban (column & tab)\n     *\n     * @private\n     */\n    _computeCurrentColumn: function () {\n        if (this.widgets.length) {\n            var column = this.widgets[this.activeColumnIndex];\n            if (!column) {\n                return;\n            }\n            var columnID = column.id || column.db_id;\n            this.$('.o_kanban_mobile_tab.o_current, .o_kanban_group.o_current')\n                .removeClass('o_current');\n            this.$('.o_kanban_group[data-id=\"' + columnID + '\"], ' +\n                   '.o_kanban_mobile_tab[data-id=\"' + columnID + '\"]')\n                .addClass('o_current');\n        }\n    },\n\n    /**\n     * Enables swipe event on the current column\n     *\n     * @private\n     */\n    _enableSwipe: function () {\n        var self = this;\n        var step = _t.database.parameters.direction === 'rtl' ? -1 : 1;\n        this.$el.swipe({\n            excludedElements: \".o_kanban_mobile_tabs\",\n            swipeLeft: function () {\n                var moveToIndex = self.activeColumnIndex + step;\n                if (moveToIndex < self.widgets.length) {\n                    self._moveToGroup(moveToIndex, self.ANIMATE);\n                }\n            },\n            swipeRight: function () {\n                var moveToIndex = self.activeColumnIndex - step;\n                if (moveToIndex > -1) {\n                    self._moveToGroup(moveToIndex, self.ANIMATE);\n                }\n            }\n        });\n    },\n\n    /**\n     * @override\n     */\n    _getTabWidth : function (column) {\n        var columnID = column.id || column.db_id;\n        return this.$('.o_kanban_mobile_tab[data-id=\"' + columnID + '\"]').outerWidth();\n    },\n\n    /**\n     * Update the kanban layout\n     *\n     * @private\n     * @param {boolean} [animate=false] set to true to animate\n     */\n    _layoutUpdate : function (animate) {\n        this._computeCurrentColumn();\n        this._computeTabPosition(this.widgets, this.activeColumnIndex, this.$('.o_kanban_mobile_tabs'));\n        this._computeColumnPosition(animate);\n    },\n\n    /**\n     * Moves to the given kanban column\n     *\n     * @private\n     * @param {integer} moveToIndex index of the column to move to\n     * @param {boolean} [animate=false] set to true to animate\n     * @returns {Promise} resolved when the new current group has been loaded\n     *   and displayed\n     */\n    _moveToGroup: function (moveToIndex, animate) {\n        if (moveToIndex < 0 || moveToIndex >= this.widgets.length) {\n            this._layoutUpdate(animate);\n            return Promise.resolve();\n        }\n        this.activeColumnIndex = moveToIndex;\n        this._lastGroupedByField = this.columnOptions.groupedBy;\n        var column = this.widgets[this.activeColumnIndex];\n        if (column.data.isOpen) {\n            this._layoutUpdate(animate);\n        } else {\n            // Unfold column and fetch records\n            this.trigger_up('column_toggle_fold', {\n                db_id: column.db_id,\n                onSuccess: () => this._layoutUpdate(animate)\n            });\n        }\n        this._enableSwipe();\n        return Promise.resolve();\n    },\n    /**\n     * override to avoid display of example background\n     */\n    _renderExampleBackground: function () {},\n    /**\n     * @override\n     * @private\n     */\n    _renderGrouped: function (fragment) {\n        var self = this;\n        var newFragment = document.createDocumentFragment();\n        this._super.apply(this, [newFragment]);\n        this.defs.push(Promise.all(this.defs).then(function () {\n            var data = [];\n            _.each(self.state.data, function (group) {\n                if (!group.value) {\n                    group = _.extend({}, group, {value: _t('Undefined')});\n                    data.unshift(group);\n                } else {\n                    data.push(group);\n                }\n            });\n\n            var kanbanColumnContainer = document.createElement('div');\n            kanbanColumnContainer.classList.add('o_kanban_columns_content');\n            kanbanColumnContainer.appendChild(newFragment);\n            fragment.appendChild(kanbanColumnContainer);\n            if (data.length) {\n                $(qweb.render('KanbanView.MobileTabs', {\n                    data: data,\n                    quickCreateEnabled: self._canCreateColumn()\n                })).prependTo(fragment);\n            }\n        }));\n    },\n\n    /**\n     * @override\n     * @private\n     */\n    _renderView: function () {\n        var self = this;\n        return this._super.apply(this, arguments).then(function () {\n            if (self.state.groupedBy.length) {\n                // if the groupedBy is changed, force first column for kanban view\n                if (self._lastGroupedByField !== self.columnOptions.groupedBy) {\n                    self.activeColumnIndex = 0;\n                }\n                return self._moveToGroup(self.activeColumnIndex);\n            } else {\n                if(self._canCreateColumn()) {\n                    self._onMobileQuickCreateClicked();\n                }\n                return Promise.resolve();\n            }\n        });\n    },\n\n    /**\n     * Retrieve the Jquery node (.o_kanban_group) for a list of a given widgets\n     *\n     * @private\n     * @param widgets\n     * @returns {jQuery} the matching .o_kanban_group widgets\n     */\n    _toNode: function (widgets) {\n        const selectorCss = widgets\n            .map(widget => '.o_kanban_group[data-id=\"' + (widget.id || widget.db_id) + '\"]')\n            .join(', ');\n        return this.$(selectorCss);\n    },\n\n    /**\n     * Update the given column to the updated positions\n     *\n     * @private\n     * @param $column The jquery column\n     * @param cssProperties Use to update column\n     * @param {boolean} [animate=false] set to true to animate\n     * @return {Promise}\n     */\n    _updateColumnCss: function ($column, cssProperties, animate) {\n        if (animate) {\n            return new Promise(resolve => $column.animate(cssProperties, 'fast', resolve));\n        } else {\n            $column.css(cssProperties);\n            return Promise.resolve();\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     */\n    _onColumnAdded: function () {\n        this._computeTabPosition(this.widgets, this.activeColumnIndex, this.$('.o_kanban_mobile_tabs'));\n        if(this._canCreateColumn() && !this.quickCreate.folded) {\n            this.quickCreate.toggleFold();\n        }\n    },\n\n    /**\n     * @private\n     */\n    _onMobileQuickCreateClicked: function() {\n        this.$('.o_kanban_group').toggle();\n        this.quickCreate.toggleFold();\n    },\n    /**\n     * @private\n     * @param {MouseEvent} event\n     */\n    _onMobileTabClicked: function (event) {\n        if(this._canCreateColumn() && !this.quickCreate.folded) {\n            this.quickCreate.toggleFold();\n        }\n        this._moveToGroup($(event.currentTarget).index(), true);\n    },\n}));\n\n});\n", "odoo.define('web.KanbanTabsMobileMixin', function () {\n\"use strict\";\n\nconst KanbanTabsMobileMixin = {\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n    /**\n     * Update the tabs positions\n     *\n     * @param tabs - All existing tabs in the kanban\n     * @param moveToIndex - The current Active tab in the index\n     * @param $tabsContainer - the jquery container of the tabs\n     * @private\n     */\n    _computeTabPosition(tabs, moveToIndex, $tabsContainer) {\n        this._computeTabJustification(tabs, $tabsContainer);\n        this._computeTabScrollPosition(tabs, moveToIndex, $tabsContainer);\n    },\n    /**\n     * Update the tabs positions\n     *\n     * @param tabs - All existing tabs in the kanban\n     * @param moveToIndex - The current Active tab in the index\n     * @param $tabsContainer - the jquery container of the tabs\n     * @private\n     */\n    _computeTabScrollPosition(tabs, moveToIndex, $tabsContainer) {\n        if (tabs.length) {\n            const lastItemIndex = tabs.length - 1;\n            let scrollToLeft = 0;\n            for (let i = 0; i < moveToIndex; i++) {\n                const columnWidth = this._getTabWidth(tabs[i]);\n                // apply\n                if (moveToIndex !== lastItemIndex && i === moveToIndex - 1) {\n                    const partialWidth = 0.75;\n                    scrollToLeft += columnWidth * partialWidth;\n                } else {\n                    scrollToLeft += columnWidth;\n                }\n            }\n            // Apply the scroll x on the tabs\n            // XXX in case of RTL, should we use scrollRight?\n            $tabsContainer.scrollLeft(scrollToLeft);\n        }\n    },\n\n    /**\n     * Compute the justify content of the kanban tab headers\n     * @param tabs - All existing tabs in the kanban\n     * @param $tabsContainer - the jquery container of the tabs\n     * @private\n     */\n    _computeTabJustification(tabs, $tabsContainer) {\n        if (tabs.length) {\n            // Use to compute the sum of the width of all tab\n            const widthChilds = tabs.reduce((total, column) => total + this._getTabWidth(column), 0);\n            // Apply a space around between child if the parent length is higher then the sum of the child width\n            $tabsContainer.toggleClass('justify-content-between', $tabsContainer.outerWidth() >= widthChilds);\n        }\n    },\n    /**\n     * Retrieve the outerWidth of a given tab\n     *\n     * @param tab\n     * @returns {integer} outerWidth of the found column\n     * @abstract\n     */\n    _getTabWidth(tab) {\n    }\n};\nreturn KanbanTabsMobileMixin;\n});\n", "odoo.define('web.KanbanViewMobile', function (require) {\n\"use strict\";\n\nconst config = require('web.config');\nif (!config.device.isMobile) {\n    return;\n}\n\nconst KanbanView = require('web.KanbanView');\n\nKanbanView.include({\n    init() {\n        this._super(...arguments);\n        this.jsLibs.push('/web/static/lib/jquery.touchSwipe/jquery.touchSwipe.js');\n    },\n});\n});\n", "odoo.define('web_enterprise.ListControllerMobile', function (require) {\n    \"use strict\";\n\n    const config = require('web.config');\n    if (!config.device.isMobile) {\n        return;\n    }\n\n    const ListController = require('web.ListController');\n\n    ListController.include({\n\n        events: Object.assign({}, ListController.prototype.events, {\n            'click .o_discard_selection': '_onDiscardSelection'\n        }),\n\n        //--------------------------------------------------------------------------\n        // Public\n        //--------------------------------------------------------------------------\n\n        /**\n         * In mobile, we hide the \"export\" button.\n         *\n         * @override\n         */\n        renderButtons() {\n            this._super(...arguments);\n            this.$buttons.find('.o_list_export_xlsx').hide();\n        },\n        /**\n         * In mobile, we hide the \"export\" button.\n         *\n         * @override\n         */\n        updateButtons() {\n            this._super(...arguments);\n            this.$buttons.find('.o_list_export_xlsx').hide();\n        },\n\n        /**\n         * In mobile, we let the selection banner be added to the ControlPanel to enable the ActionMenus.\n         *\n         * @override\n         */\n        async updateControlPanel() {\n            const value = await this._super(...arguments);\n            const displayBanner = Boolean(this.$selectionBox);\n            if (displayBanner) {\n                this._controlPanelWrapper.el.querySelector('.o_cp_bottom').prepend(this.$selectionBox[0]);\n            }\n            return value;\n        },\n\n        //--------------------------------------------------------------------------\n        // Handlers\n        //--------------------------------------------------------------------------\n\n        /**\n         * Discard the current selection by unselecting any selected records.\n         *\n         * @private\n         */\n        _onDiscardSelection() {\n            this.renderer.$('tbody .o_list_record_selector input:not(\":disabled\")').prop('checked', false);\n            this.renderer._updateSelection();\n        }\n    });\n});\n", "odoo.define('web_enterprise.ListRenderer', function (require) {\n    \"use strict\";\n\n    const config = require('web.config');\n    if (config.device.isMobile) {\n        return;\n    }\n    const { qweb } = require('web.core');\n    const ListRenderer = require('web.ListRenderer');\n    const ListView = require('web.ListView');\n    const session = require('web.session');\n    const { patch } = require('web.utils');\n    const PromoteStudioDialog = require('web_enterprise.PromoteStudioDialog');\n\n    patch(ListView.prototype, 'web_enterprise.ListView', {\n        init: function (viewInfo, params) {\n            this._super(viewInfo, params);\n            this.rendererParams.isStudioEditable = params.action && !!params.action.xml_id;\n        },\n    });\n\n    patch(ListRenderer.prototype, 'web_enterprise.ListRenderer', {\n        init: function (parent, state, params) {\n            this._super(...arguments);\n            this.isStudioEditable = params.isStudioEditable;\n        },\n        //--------------------------------------------------------------------------\n        // Private\n        //--------------------------------------------------------------------------\n\n        /**\n         * This function adds a button at the bottom of the optional\n         * columns dropdown menu. This button opens studio if installed and\n         * promote studio if not installed.\n         *\n         * @override\n         */\n        _renderOptionalColumnsDropdown: function () {\n            const $optionalColumnsDropdown = this._super(...arguments);\n            if (session.is_system && this.isStudioEditable) {\n                const $dropdownMenu = $optionalColumnsDropdown.find('.dropdown-menu');\n                if (this.optionalColumns.length) {\n                    $dropdownMenu.append($(\"<hr />\"));\n                }\n                const $addCustomField = $(qweb.render('web_enterprise.open_studio_button'));\n                $dropdownMenu.append($addCustomField);\n                $addCustomField.click(this._onAddCustomFieldClick.bind(this));\n            }\n            return $optionalColumnsDropdown;\n        },\n\n        /**\n         * This function returns if the optional columns dropdown menu should be rendered.\n         * This function returns true iff there are optional columns or the user is system\n         * admin.\n         *\n         * @override\n         */\n        _shouldRenderOptionalColumnsDropdown: function () {\n            return this._super(...arguments) || session.is_system;\n        },\n\n        //--------------------------------------------------------------------------\n        // Handlers\n        //--------------------------------------------------------------------------\n        /**\n         * This function opens studio dialog\n         *\n         * @param {Event} event\n         * @private\n         */\n        _onAddCustomFieldClick: function (event) {\n            event.stopPropagation();\n            new PromoteStudioDialog(this).open();\n        },\n    });\n});\n", "odoo.define('web_enterprise.MobileListRenderer', function (require) {\n\"use strict\";\n\nconst config = require('web.config');\n\nif (!config.device.isMobile) {\n    return;\n}\n\nconst ListRenderer = require('web.ListRenderer');\n\nListRenderer.include({\n\n    events: Object.assign({}, ListRenderer.prototype.events, {\n        'touchstart .o_data_row': '_onTouchStartSelectionMode',\n        'touchmove .o_data_row': '_onTouchMoveSelectionMode',\n        'touchend .o_data_row': '_onTouchEndSelectionMode',\n    }),\n\n    init() {\n        this._super(...arguments);\n        this.longTouchTimer = null;\n        this.LONG_TOUCH_THRESHOLD = 400;\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * In mobile, disable the read-only editable list.\n     *\n     * @override\n     */\n    isEditable() {\n        return this.editable;\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Returns the jQuery node used to update the selection ; visiblity insensitive.\n     *\n     * @override\n     */\n    _getSelectableRecordCheckboxes() {\n        return this.$('tbody .o_list_record_selector input:not(:disabled)');\n    },\n\n    /**\n     * In mobile, disable the read-only editable list.\n     *\n     * @override\n     */\n    _isRecordEditable() {\n        return this.editable;\n    },\n\n    /**\n     * Reset the current long-touch timer.\n     *\n     * @private\n     */\n    _resetLongTouchTimer() {\n        if (this.longTouchTimer) {\n            clearTimeout(this.longTouchTimer);\n            this.longTouchTimer = null;\n        }\n    },\n\n    /**\n     * @override\n     */\n    _updateSelection() {\n        this._super(...arguments);\n        this._getSelectableRecordCheckboxes()\n            .each((index, input) => {\n                $(input).closest('.o_data_row').toggleClass('o_data_row_selected', input.checked);\n            });\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Prevent from opening the record on click when in selection mode.\n     *\n     * @override\n     */\n    _onRowClicked(ev) {\n        if (this.selection.length) {\n            ev.preventDefault();\n            return;\n        }\n        this._super(...arguments);\n    },\n\n    /**\n     * Following @see _onTouchStartSelectionMode, we cancel the long-touch if it was shorter\n     * than @see LONG_TOUCH_THRESHOLD.\n     *\n     * @private\n     */\n    _onTouchEndSelectionMode() {\n        const elapsedTime = Date.now() - this.touchStartMs;\n        if (elapsedTime < this.LONG_TOUCH_THRESHOLD) {\n            this._resetLongTouchTimer();\n        }\n    },\n\n    /**\n     * Following @see _onTouchStartSelectionMode, we cancel the long-touch.\n     *\n     * @private\n     */\n    _onTouchMoveSelectionMode() {\n        this._resetLongTouchTimer();\n    },\n\n    /**\n     * We simulate a long-touch on a row by delaying (@see LONG_TOUCH_THRESHOLD)\n     * the actual handler and potentially cancelling it if the user moves or end\n     * its 'touch' before the timer's end.\n     *\n     * @private\n     * @param ev\n     */\n    _onTouchStartSelectionMode(ev) {\n        if (this.selection.length) {\n            // in selection mode, only selection is allowed.\n            ev.preventDefault();\n            $(ev.currentTarget).find('.o_list_record_selector').click();\n            return;\n        }\n        this.touchStartMs = Date.now();\n        if (this.longTouchTimer === null) {\n            this.longTouchTimer = setTimeout(() => {\n                $(ev.currentTarget).find('.o_list_record_selector').click();\n                this._resetLongTouchTimer();\n            }, this.LONG_TOUCH_THRESHOLD);\n        }\n    },\n\n});\n});\n", "odoo.define('web_enterprise.relational_fields', function (require) {\n\"use strict\";\n\nvar config = require('web.config');\nif (!config.device.isMobile) {\n    return;\n}\n\n/**\n * In this file, we override some relational fields to improve the UX in mobile.\n */\n\nvar core = require('web.core');\nvar relational_fields = require('web.relational_fields');\n\nvar FieldStatus = relational_fields.FieldStatus;\nvar FieldMany2One = relational_fields.FieldMany2One;\nvar FieldX2Many = relational_fields.FieldX2Many;\n\nvar qweb = core.qweb;\n\nFieldStatus.include({\n    /**\n     * Override the custom behavior of FieldStatus to hide it if it is not set,\n     * in mobile (which is the default behavior for fields).\n     *\n     * @returns {boolean}\n     */\n    isEmpty: function () {\n        return !this.isSet();\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     * @private\n     */\n    _render: function () {\n        this.$el.html(qweb.render(\"FieldStatus.content.mobile\", {\n            selection: this.status_information,\n            status: _.findWhere(this.status_information, {selected: true}),\n            clickable: this.isClickable,\n        }));\n    },\n});\n\n/**\n * Override the Many2One to prevent autocomplete and open kanban view in mobile for search.\n */\n\nFieldMany2One.include({\n\n    start: function () {\n        var superRes = this._super.apply(this, arguments);\n        this.$input.prop('readonly', true);\n        return superRes;\n    },\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Don't bind autocomplete in the mobile as it uses a different mechanism\n     * On clicking Many2One will directly open popup with kanban view\n     *\n     * @private\n     * @override\n     */\n    _bindAutoComplete: function () {},\n\n    /**\n     * override to add selectionMode option to search create popup option\n     *\n     * @private\n     * @override\n     */\n    _getSearchCreatePopupOptions: function () {\n        var self = this;\n        var searchCreatePopupOptions = this._super.apply(this, arguments);\n        _.extend(searchCreatePopupOptions, {\n            selectionMode: true,\n            on_clear: function () {\n                self.reinitialize(false);\n            },\n        });\n        return searchCreatePopupOptions;\n    },\n\n    /**\n     * We always open Many2One search dialog for select/update field value\n     * instead of autocomplete\n     *\n     * @private\n     * @override\n     */\n    _toggleAutoComplete: function () {\n        this._searchCreatePopup(\"search\");\n    },\n});\n\nFieldX2Many.include({\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     * @private\n     */\n    _renderButtons: function () {\n        var result = this._super.apply(this, arguments);\n        if (this.$buttons) {\n            this.$buttons\n                .find('.btn-secondary')\n                .removeClass('btn-secondary')\n                .addClass('btn-primary btn-add-record');\n        }\n        return result;\n    }\n});\n\n});\n", "odoo.define('web_enterprise.upgrade_widgets', function (require) {\n\"use strict\";\n\n/**\n * This module adds two field widgets in the view registry: 'upgrade_boolean'\n * and 'upgrade_radio'. In community, those widgets implement a specific\n * behavior to upgrade to enterprise. This behavior is overriden in enterprise\n * by the default FieldBoolean and FieldRadio behaviors.\n */\n\nvar basic_fields = require('web.basic_fields');\nvar field_registry = require('web.field_registry');\nvar relational_fields = require('web.relational_fields');\n\nvar UpgradeBoolean = basic_fields.FieldBoolean.extend({\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Compatibility with community, where a function 'renderWithLabel' is\n     * defined to correctly position the 'Enterprise' label indicating that the\n     * feature is enterprise only. Without this, it crashes when opening\n     * Settings views in enterprise.\n     */\n    renderWithLabel: function () {},\n});\n\nvar UpgradeRadio = relational_fields.FieldRadio.extend({\n    // We don't require this widget to be displayed in studio sidebar in\n    // non-debug mode hence just extended it from its original widget, so that\n    // description comes from parent and hasOwnProperty based condition fails\n});\n\nfield_registry\n    .add('upgrade_boolean', UpgradeBoolean)\n    .add('upgrade_radio', UpgradeRadio);\n\n});\n", "odoo.define('web_enterprise.view_dialogs', function (require) {\n\"use strict\";\n\nvar config = require('web.config');\nif (!config.device.isMobile) {\n    return;\n}\n\nvar core = require('web.core');\nvar view_dialogs = require('web.view_dialogs');\n\nvar _t = core._t;\n\nview_dialogs.FormViewDialog.include({\n    /**\n     * @override\n     */\n    init(parent, options) {\n        options.headerButtons = options.headerButtons || [];\n        this._super.apply(this, arguments);\n    },\n    /**\n     * Set the \"Remove\" button to the dialog's header buttons set\n     *\n     * @override\n     */\n    _setRemoveButtonOption(options, btnClasses) {\n        options.headerButtons.push({\n            text: _t(\"Remove\"),\n            classes: `btn-secondary ${btnClasses}`,\n            click: async () => {\n                await this._remove();\n                this.close();\n            },\n        });\n    },\n});\n\nview_dialogs.SelectCreateDialog.include({\n    init: function () {\n        this._super.apply(this,arguments);\n        this.on_clear = this.options.on_clear || (function () {});\n        this.viewType = 'kanban';\n    },\n    /**\n     * @override\n     */\n    _prepareButtons: function () {\n        this._super.apply(this, arguments);\n        if (this.options.disable_multiple_selection) {\n            if (this.options.selectionMode) {\n                this.headerButtons.push({\n                    text: _t(\"Clear\"),\n                    classes: 'btn-secondary o_clear_button',\n                    close: true,\n                    click: function () {\n                        this.on_clear();\n                    },\n                });\n            }\n        } else {\n            this.__buttons = this.__buttons.filter(button => !button.classes.split(' ').includes('o_select_button'));\n        }\n    },\n});\n\n});\n", "odoo.define('web_enterprise.PromoteStudioDialog', function (require) {\n    \"use strict\";\n\n    const core = require('web.core');\n    const Dialog = require('web.Dialog');\n    const framework = require('web.framework');\n    const localStorage = require('web.local_storage');\n    const qweb = core.qweb;\n\n    const PromoteStudioDialog = Dialog.extend({\n        events: _.extend({}, Dialog.prototype.events, {\n            'click button.o_install_studio': '_onInstallStudio',\n        }),\n        /**\n         * This init function adds a click listener on window to handle\n         * modal closing.\n         * @override\n         */\n        init: function (parent, options) {\n            options = _.defaults(options || {}, {\n                $content: $(qweb.render('web_enterprise.install_web_studio')),\n                renderHeader: false,\n                renderFooter: false,\n                size: 'large',\n            });\n            this._super(parent, options);\n        },\n        /**\n         * This function adds an handler for window clicks at the end of start.\n         *\n         * @override\n         */\n        start: async function () {\n            await this._super.apply(this, arguments);\n            core.bus.on('click', this, this._onWindowClick);\n        },\n        //--------------------------------------------------------------------------\n        // Private\n        //--------------------------------------------------------------------------\n        /**\n         * This function both installs studio and reload the current view in studio mode.\n         *\n         * @param {Event} ev\n         */\n        _onInstallStudio: async function (event) {\n            event.stopPropagation();\n            this.disableClick = true;\n            framework.blockUI();\n            const modules = await this._rpc({\n                model: 'ir.module.module',\n                method: 'search_read',\n                fields: ['id'],\n                domain: [['name', '=', 'web_studio']],\n            });\n            await this._rpc({\n                model: 'ir.module.module',\n                method: 'button_immediate_install',\n                args: [[modules[0].id]],\n            });\n            // on rpc call return, the framework unblocks the page\n            // make sure to keep the page blocked until the reload ends.\n            framework.blockUI();\n            localStorage.setItem('openStudioOnReload', 'main');\n            this._reloadPage();\n        },\n        /**\n         * Close modal when the user clicks outside the modal WITHOUT propagating\n         * the event.\n         * We must use this function to keep dropdown menu open when the user clicks in the modal, too.\n         * This behaviour cannot be handled by using the modal backdrop.\n         *\n         * @param {Event} event\n         */\n        _onWindowClick: function (event) {\n            const $modal = $(event.target).closest('.modal-studio');\n            if (!$modal.length && !this.disableClick) {\n                this._onCloseDialog(event);\n            }\n            event.stopPropagation();\n        },\n        //--------------------------------------------------------------------------\n        // Utils\n        //--------------------------------------------------------------------------\n        /**\n         * This function isolate location reload in order to easily mock it (in tests for example)\n         *\n         * @private\n         */\n        _reloadPage: function () {\n            window.location.reload();\n        },\n    });\n\n    return PromoteStudioDialog;\n\n});\n", "/** @odoo-module **/\n\nimport { browser } from \"@web/core/browser/browser\";\nimport { registry } from \"@web/core/registry\";\n\nexport const legacyServiceProvider = {\n    dependencies: [\"home_menu\"],\n    start({ services }) {\n        browser.addEventListener(\"show-home-menu\", () => {\n            services.home_menu.toggle(true);\n        });\n    },\n};\n\nregistry.category(\"services\").add(\"enterprise_legacy_service_provider\", legacyServiceProvider);\n", "odoo.define(\"web_mobile.Dialog\", function (require) {\n    \"use strict\";\n\n    var Dialog = require(\"web.Dialog\");\n    var mobileMixins = require(\"web_mobile.mixins\");\n\n    Dialog.include(\n        _.extend({}, mobileMixins.BackButtonEventMixin, {\n            //--------------------------------------------------------------------------\n            // Handlers\n            //--------------------------------------------------------------------------\n\n            /**\n             * Close the current dialog on 'backbutton' event.\n             *\n             * @private\n             * @override\n             * @param {Event} ev\n             */\n            _onBackButton: function () {\n                this.close();\n            },\n        })\n    );\n});\n\nodoo.define(\"web_mobile.OwlDialog\", function (require) {\n    \"use strict\";\n\n    const OwlDialog = require(\"web.OwlDialog\");\n    const { useBackButton } = require(\"web_mobile.hooks\");\n    const { patch } = require(\"web.utils\");\n\n    patch(OwlDialog.prototype, \"web_mobile\", {\n        setup() {\n            this._super(...arguments);\n            useBackButton(this._onBackButton.bind(this));\n        },\n\n        //---------------------------------------------------------------------\n        // Handlers\n        //---------------------------------------------------------------------\n\n        /**\n         * Close dialog on back-button\n         * @private\n         */\n        _onBackButton() {\n            this._close();\n        },\n    });\n});\n\nodoo.define(\"web_mobile.Popover\", function (require) {\n    \"use strict\";\n\n    const Popover = require(\"web.Popover\");\n    const { useBackButton } = require(\"web_mobile.hooks\");\n    const { patch } = require(\"web.utils\");\n\n    patch(Popover.prototype, \"web_mobile\", {\n        setup() {\n            this._super(...arguments);\n            useBackButton(this._onBackButton.bind(this), () => this.state.displayed);\n        },\n\n        //---------------------------------------------------------------------\n        // Handlers\n        //---------------------------------------------------------------------\n\n        /**\n         * Close popover on back-button\n         * @private\n         */\n        _onBackButton() {\n            this._close();\n        },\n    });\n});\n\nodoo.define(\"web_mobile.ControlPanel\", function (require) {\n    \"use strict\";\n\n    const { device } = require(\"web.config\");\n\n    if (!device.isMobile) {\n        return;\n    }\n\n    const ControlPanel = require(\"web.ControlPanel\");\n    const { useBackButton } = require(\"web_mobile.hooks\");\n    const { patch } = require(\"web.utils\");\n\n    patch(ControlPanel.prototype, \"web_mobile\", {\n        setup() {\n            this._super(...arguments);\n            useBackButton(this._onBackButton.bind(this), () => this.state.showMobileSearch);\n        },\n\n        //---------------------------------------------------------------------\n        // Handlers\n        //---------------------------------------------------------------------\n\n        /**\n         * close mobile search on back-button\n         * @private\n         */\n        _onBackButton() {\n            this._resetSearchState();\n        },\n    });\n});\n", "odoo.define('web_mobile.mixins', function (require) {\n\"use strict\";\n\nconst session = require('web.session');\nconst mobile = require('web_mobile.core');\n\n/**\n * Mixin to setup lifecycle methods and allow to use 'backbutton' events sent\n * from the native application.\n *\n * @mixin\n * @name BackButtonEventMixin\n *\n */\nvar BackButtonEventMixin = {\n    /**\n     * Register event listener for 'backbutton' event when attached to the DOM\n     */\n    on_attach_callback: function () {\n        mobile.backButtonManager.addListener(this, this._onBackButton);\n    },\n    /**\n     * Unregister event listener for 'backbutton' event when detached from the DOM\n     */\n    on_detach_callback: function () {\n        mobile.backButtonManager.removeListener(this, this._onBackButton);\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {Event} ev 'backbutton' type event\n     */\n    _onBackButton: function () {},\n};\n\n/**\n * Mixin to hook into the controller record's saving method and\n * trigger the update of the user's account details on the mobile app.\n *\n * @mixin\n * @name UpdateDeviceAccountControllerMixin\n *\n */\nconst UpdateDeviceAccountControllerMixin = {\n    /**\n     * @override\n     */\n    async saveRecord() {\n        const changedFields = await this._super(...arguments);\n        this.savingDef = this.savingDef.then(() => session.updateAccountOnMobileDevice());\n        return changedFields;\n    },\n};\n\n/**\n * Trigger the update of the user's account details on the mobile app as soon as\n * the session is correctly initialized.\n */\nsession.is_bound.then(() => session.updateAccountOnMobileDevice());\n\nreturn {\n    BackButtonEventMixin: BackButtonEventMixin,\n    UpdateDeviceAccountControllerMixin,\n};\n\n});\n\nodoo.define('web_mobile.hooks', function (require) {\n\"use strict\";\n\nconst { backButtonManager } = require('web_mobile.core');\n\nconst { Component, hooks } = owl;\nconst { onWillUnmount, onMounted, onPatched } = hooks;\n\n/**\n * This hook provides support for executing code when the back button is pressed\n * on the mobile application of Odoo. This actually replaces the default back\n * button behavior so this feature should only be enabled when it is actually\n * useful.\n *\n * The feature is either enabled on mount or, using the `shouldEnable` function\n * argument as condition, when the component is patched. In both cases,\n * the feature is automatically disabled on unmount.\n *\n * @param {function} func the function to execute when the back button is\n *  pressed. The function is called with the custom event as param.\n * @param {function} [shouldEnable] the function to execute when the DOM is \n *  patched to check if the backbutton should be enabled or disabled ; \n *  if undefined will be enabled on mount and disabled on unmount.\n */\nfunction useBackButton(func, shouldEnable) {\n    const component = Component.current;\n    let isEnabled = false;\n\n    /**\n     * Enables the func listener, overriding default back button behavior.\n     */\n    function enable() {\n        backButtonManager.addListener(component, func);\n        isEnabled = true;\n    }\n\n    /**\n     * Disables the func listener, restoring the default back button behavior if\n     * no other listeners are present.\n     */\n    function disable() {\n        backButtonManager.removeListener(component);\n        isEnabled = false;\n    }\n\n    onMounted(() => {\n        if (shouldEnable && !shouldEnable()) {\n            return;\n        }\n        enable();\n    });\n\n    onPatched(() => {\n        if (!shouldEnable) {\n            return;\n        }\n        const shouldBeEnabled = shouldEnable();\n        if (shouldBeEnabled && !isEnabled) {\n            enable();\n        } else if (!shouldBeEnabled && isEnabled) {\n            disable();\n        }\n    });\n\n    onWillUnmount(() => {\n        if (isEnabled) {\n            disable();\n        }\n    });\n}\n\nreturn {\n    useBackButton,\n};\n});\n", "/** @odoo-module **/\n\nimport mobile from \"web_mobile.core\";\nimport { download } from \"@web/core/network/download\";\n\nconst _download = download._download;\n\ndownload._download = async function (options) {\n    if (mobile.methods.downloadFile) {\n        if (odoo.csrf_token) {\n            options.csrf_token = odoo.csrf_token;\n        }\n        mobile.methods.downloadFile(options);\n        return Promise.resolve();\n    } else {\n        return _download.apply(this, arguments);\n    }\n};\n", "odoo.define('web_mobile.Session', function (require) {\n\"use strict\";\n\nconst core = require('web.core');\nconst Session = require('web.Session');\nconst utils = require('web.utils');\n\nconst mobile = require('web_mobile.core');\n\n/*\n    Android webview not supporting post download and odoo is using post method to download\n    so here override get_file of session and passed all data to native mobile downloader\n    ISSUE: https://code.google.com/p/android/issues/detail?id=1780\n*/\n\nSession.include({\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     */\n    get_file: function (options) {\n        if (mobile.methods.downloadFile) {\n            if (core.csrf_token) {\n                options.csrf_token = core.csrf_token;\n            }\n            mobile.methods.downloadFile(options);\n            // There is no need to wait downloadFile because we delegate this to\n            // Download Manager Service where error handling will be handled correclty.\n            // On our side, we do not want to block the UI and consider the request\n            // as success.\n            if (options.success) { options.success(); }\n            if (options.complete) { options.complete(); }\n            return true;\n        } else {\n            return this._super.apply(this, arguments);\n        }\n    },\n\n    /**\n     * Update the user's account details on the mobile app\n     *\n     * @returns {Promise}\n     */\n    async updateAccountOnMobileDevice() {\n        if (!mobile.methods.updateAccount) {\n            return;\n        }\n        const avatar = await this.fetchAvatar();\n        const base64Avatar = await utils.getDataURLFromFile(avatar);\n        return mobile.methods.updateAccount({\n            avatar: base64Avatar.substring(base64Avatar.indexOf(',') + 1),\n            name: this.name,\n            username: this.username,\n        });\n    },\n\n    /**\n     * Fetch current user's avatar\n     *\n     * @returns {Promise<Blob>}\n     */\n    async fetchAvatar() {\n        const url = this.url('/web/image', {\n            model: 'res.users',\n            field: 'image_medium',\n            id: this.uid,\n        });\n        const response = await fetch(url);\n        return response.blob();\n    },\n});\n\n});\n", "/** @odoo-module */\n\nimport { registry } from \"@web/core/registry\";\nimport mobile from \"web_mobile.core\";\n\nfunction mobileErrorHandler(env, error, originalError) {\n    if (mobile.methods.crashManager) {\n        error.originalError = originalError;\n        mobile.methods.crashManager(error);\n    }\n}\nregistry\n    .category(\"error_handlers\")\n    .add(\"web_mobile.errorHandler\", mobileErrorHandler, { sequence: 3 });\n", "odoo.define(\"web_mobile.datepicker\", function (require) {\n    \"use strict\";\n\n    const config = require(\"web.config\");\n    const mobile = require(\"web_mobile.core\");\n    const web_datepicker = require(\"web.datepicker\");\n    const Widget = require(\"web.Widget\");\n\n    /**\n     * Override odoo date-picker (bootstrap date-picker) to display mobile native\n     * date picker. Because of it is better to show native mobile date-picker to\n     * improve usability of Application (Due to Mobile users are used to native\n     * date picker).\n     */\n    web_datepicker.DateWidget.include({\n        /**\n         * @override\n         */\n        start() {\n            if (!mobile.methods.requestDateTimePicker || (this.type_of_date === 'datetime' && config.device.isIOS)) {\n                return this._super(...arguments);\n            }\n            this.$input = this.$(\"input.o_datepicker_input\");\n            // forcefully removes the library's classname to \"disable\" library's event listeners\n            this.$input.removeClass('datetimepicker-input')\n            this._setupMobilePicker();\n        },\n\n        /**\n         * Bootstrap date-picker already destroyed at initialization\n         *\n         * @override\n         */\n        destroy() {\n            if (!mobile.methods.requestDateTimePicker || (this.type_of_date === 'datetime' && config.device.isIOS)) {\n                return this._super(...arguments);\n            }\n            Widget.prototype.destroy.apply(this, arguments);\n        },\n\n        /**\n         * @override\n         */\n        maxDate() {\n            if (!mobile.methods.requestDateTimePicker || (this.type_of_date === 'datetime' && config.device.isIOS)) {\n                return this._super(...arguments);\n            }\n            console.warn(\"Unsupported in the mobile applications\");\n        },\n\n        /**\n         * @override\n         */\n        minDate() {\n            if (!mobile.methods.requestDateTimePicker || (this.type_of_date === 'datetime' && config.device.isIOS)) {\n                return this._super(...arguments);\n            }\n            console.warn(\"Unsupported in the mobile applications\");\n        },\n\n        //--------------------------------------------------------------------------\n        // Private\n        //--------------------------------------------------------------------------\n\n        /**\n         * @override\n         * @private\n         */\n        _setLibInputValue() {\n            if (!mobile.methods.requestDateTimePicker || (this.type_of_date === 'datetime' && config.device.isIOS)) {\n                return this._super(...arguments);\n            }\n        },\n\n        /**\n         * @private\n         */\n        _setupMobilePicker() {\n            this.$el.on(\"click\", async () => {\n                const { data } = await mobile.methods.requestDateTimePicker({\n                    value: this.getValue() ? this.getValue().format(\"YYYY-MM-DD HH:mm:ss\") : false,\n                    type: this.type_of_date,\n                    ignore_timezone: true,\n                });\n                this.$input.val(data);\n                this.changeDatetime();\n            });\n        },\n\n        //--------------------------------------------------------------------------\n        // Handlers\n        //--------------------------------------------------------------------------\n\n        /**\n         * @override\n         */\n        _onInputClicked: function () {\n            if (!mobile.methods.requestDateTimePicker || (this.type_of_date === 'datetime' && config.device.isIOS)) {\n                return this._super(...arguments);\n            }\n        },\n    });\n});\n", "/** @odoo-module **/\n\nimport { registry } from \"@web/core/registry\";\n\nimport mobile from \"web_mobile.core\";\nimport { shortcutItem, switchAccountItem } from \"./user_menu_items\";\n\nconst serviceRegistry = registry.category(\"services\");\nconst userMenuRegistry = registry.category(\"user_menuitems\");\n\nconst mobileService = {\n    start() {\n        if (mobile.methods.addHomeShortcut) {\n            userMenuRegistry.add(\"web_mobile.shortcut\", shortcutItem);\n        }\n\n        if (mobile.methods.switchAccount) {\n            // remove \"Log Out\" and \"My Odoo.com Account\"\n            userMenuRegistry.remove('log_out');\n            userMenuRegistry.remove('odoo_account');\n\n            userMenuRegistry.add(\"web_mobile.switch\", switchAccountItem);\n        }\n    },\n};\nserviceRegistry.add(\"mobile\", mobileService);\n", "/* global OdooDeviceUtility */\nodoo.define('web_mobile.core', function () {\n\"use strict\";\n\nvar available = typeof OdooDeviceUtility !== 'undefined';\nvar DeviceUtility;\nvar deferreds = {};\nvar methods = {};\n\nif (available){\n    DeviceUtility = OdooDeviceUtility;\n    delete window.OdooDeviceUtility;\n}\n\n/**\n * Responsible for invoking native methods which called from JavaScript\n *\n * @param {String} name name of action want to perform in mobile\n * @param {Object} args extra arguments for mobile\n *\n * @returns Promise Object\n */\nfunction native_invoke(name, args) {\n    if(_.isUndefined(args)){\n        args = {};\n    }\n    var id = _.uniqueId();\n    args = JSON.stringify(args);\n    DeviceUtility.execute(name, args, id);\n    return new Promise(function (resolve, reject) {\n        deferreds[id] = {\n            successCallback: resolve,\n            errorCallback: reject\n        };\n    });\n}\n\n/**\n * Manages deferred callback from initiate from native mobile\n *\n * @param {String} id callback id\n * @param {Object} result\n */\nwindow.odoo.native_notify = function (id, result) {\n    if (deferreds.hasOwnProperty(id)) {\n        if (result.success) {\n            deferreds[id].successCallback(result);\n        } else {\n            deferreds[id].errorCallback(result);\n        }\n    }\n};\n\nvar plugins = available ? JSON.parse(DeviceUtility.list_plugins()) : [];\n_.each(plugins, function (plugin) {\n    methods[plugin.name] = function (args) {\n        return native_invoke(plugin.action, args);\n    };\n});\n\n/**\n * Use to notify an uri hash change on native devices (ios / android)\n */\nif (methods.hashChange) {\n    var currentHash;\n    $(window).bind('hashchange', function (event) {\n        var hash = event.getState();\n        if (!_.isEqual(currentHash, hash)) {\n            methods.hashChange(hash);\n        }\n        currentHash = hash;\n    });\n}\n\n/**\n * Error related to the registration of a listener to the backbutton event\n */\nclass BackButtonListenerError extends Error {}\n\n/**\n * By using the back button feature the default back button behavior from the\n * app is actually overridden so it is important to keep count to restore the\n * default when no custom listener are remaining.\n */\nclass BackButtonManager {\n\n    constructor() {\n        this._listeners = new Map();\n        this._onGlobalBackButton = this._onGlobalBackButton.bind(this);\n    }\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Enables the func listener, overriding default back button behavior.\n     *\n     * @param {Widget|Component} listener\n     * @param {function} func\n     * @throws {BackButtonListenerError} if the listener has already been registered\n     */\n    addListener(listener, func) {\n        if (!methods.overrideBackButton) {\n            return;\n        }\n        if (this._listeners.has(listener)) {\n            throw new BackButtonListenerError(\"This listener was already registered.\");\n        }\n        this._listeners.set(listener, func);\n        if (this._listeners.size === 1) {\n            document.addEventListener('backbutton', this._onGlobalBackButton);\n            methods.overrideBackButton({ enabled: true });\n        }\n    }\n    /**\n     * Disables the func listener, restoring the default back button behavior if\n     * no other listeners are present.\n     *\n     * @param {Widget|Component} listener\n     * @throws {BackButtonListenerError} if the listener has already been unregistered\n     */\n    removeListener(listener) {\n        if (!methods.overrideBackButton) {\n            return;\n        }\n        if (!this._listeners.has(listener)) {\n            throw new BackButtonListenerError(\"This listener has already been unregistered.\");\n        }\n        this._listeners.delete(listener);\n        if (this._listeners.size === 0) {\n            document.removeEventListener('backbutton', this._onGlobalBackButton);\n            methods.overrideBackButton({ enabled: false });\n        }\n    }\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    _onGlobalBackButton() {\n        const [listener, func] = [...this._listeners].pop();\n        if (listener) {\n            func.apply(listener, arguments);\n        }\n    }\n}\n\nconst backButtonManager = new BackButtonManager();\n\nreturn {\n    BackButtonManager,\n    BackButtonListenerError,\n    backButtonManager,\n    methods,\n};\n\n});\n", "/** @odoo-module **/\n\nimport mobile from \"web_mobile.core\";\n\nexport function shortcutItem(env) {\n    return {\n        type: \"item\",\n        id: \"web_mobile.shortcut\",\n        description: env._t(\"Add to Home Screen\"),\n        callback: () => {\n            const { hash } = env.services.router.current;\n            if (hash.menu_id) {\n                const menu = env.services.menu.getMenu(hash.menu_id);\n                mobile.methods.addHomeShortcut({\n                    title: document.title,\n                    shortcut_url: document.URL,\n                    web_icon: menu && menu.webIconData,\n                });\n            } else {\n                env.services.notification.notify({\n                    message: env._t(\"No shortcut for Home Menu\"),\n                });\n            }\n        },\n        sequence: 100,\n    };\n}\n\nexport function switchAccountItem(env) {\n    return {\n        type: \"item\",\n        id: \"web_mobile.switch\",\n        description: env._t(\"Switch/Add Account\"),\n        callback: () => {\n            mobile.methods.switchAccount();\n        },\n        sequence: 100,\n    };\n}\n", "odoo.define('web_mobile.UserPreferencesFormView', function (require) {\n    'use strict';\n\n    const FormView = require('web.FormView');\n    const viewRegistry = require('web.view_registry');\n    const { UpdateDeviceAccountControllerMixin } = require('web_mobile.mixins');\n\n    const UserPreferencesFormView = FormView.extend({\n        config: Object.assign({}, FormView.prototype.config, {\n            Controller: FormView.prototype.config.Controller.extend(\n                UpdateDeviceAccountControllerMixin\n            ),\n        }),\n    });\n\n    viewRegistry.add('res_users_preferences_form', UserPreferencesFormView);\n\n    return UserPreferencesFormView;\n});\n", "/** @odoo-module **/\n\nimport { ChatWindow } from '@mail/components/chat_window/chat_window';\n\nimport { useBackButton } from 'web_mobile.hooks';\nimport { patch } from 'web.utils';\n\npatch(ChatWindow.prototype, 'mail_enterprise/static/src/components/chat_window/chat_window.js', {\n    /**\n     * @override\n     */\n    _constructor() {\n        this._super(...arguments);\n        this._onBackButtonGlobal = this._onBackButtonGlobal.bind(this);\n        useBackButton(this._onBackButtonGlobal);\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Handles the `backbutton` custom event. This event is triggered by the\n     * mobile app when the back button of the device is pressed.\n     *\n     * @private\n     * @param {CustomEvent} ev\n     */\n    _onBackButtonGlobal(ev) {\n        if (!this.chatWindow) {\n            return;\n        }\n        this.chatWindow.close();\n    },\n});\n", "/** @odoo-module **/\n\nimport { ChatterContainer } from '@mail/components/chatter_container/chatter_container';\n\nObject.assign(ChatterContainer, {\n    defaultProps: Object.assign(ChatterContainer.defaultProps || {}, {\n        isInFormSheetBg: false,\n    }),\n    props: Object.assign(ChatterContainer.props, {\n        isInFormSheetBg: {\n            type: Boolean,\n        },\n    })\n});\n", "/** @odoo-module **/\n\nimport { Dialog } from '@mail/components/dialog/dialog';\nimport { useBackButton } from 'web_mobile.hooks';\nimport { patch } from 'web.utils';\n\npatch(Dialog.prototype, 'mail_enterprise/static/src/components/dialog/dialog.js', {\n    /**\n     * @override\n     */\n    _constructor() {\n        this._super(...arguments);\n        this._onBackButtonGlobal = this._onBackButtonGlobal.bind(this);\n        this._backButtonHandler = useBackButton(this._onBackButtonGlobal);\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Handles the `backbutton` custom event. This event is triggered by the\n     * mobile app when the back button of the device is pressed.\n     *\n     * @private\n     * @param {CustomEvent} ev\n     */\n    _onBackButtonGlobal(ev) {\n        if (!this.dialog) {\n            return;\n        }\n        this.dialog.delete();\n    },\n});\n", "/** @odoo-module **/\n\nimport { MessagingMenu } from '@mail/components/messaging_menu/messaging_menu';\n\nimport { useBackButton } from 'web_mobile.hooks';\nimport { patch } from 'web.utils';\n\npatch(MessagingMenu.prototype, 'mail_enterprise/static/src/components/chat_window/chat_window.js', {\n    /**\n     * @override\n     */\n    _constructor() {\n        this._super(...arguments);\n        this._onBackButtonGlobal = this._onBackButtonGlobal.bind(this);\n        useBackButton(this._onBackButtonGlobal, () => this.messagingMenu && this.messagingMenu.isOpen);\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Handles the `backbutton` custom event. This event is triggered by the\n     * mobile app when the back button of the device is pressed.\n     *\n     * @private\n     * @param {CustomEvent} ev\n     */\n    _onBackButtonGlobal(ev) {\n        if (!this.messagingMenu) {\n            return;\n        }\n        this.messagingMenu.close();\n    },\n});\n", "/** @odoo-module **/\n\nimport { attr } from '@mail/model/model_field';\nimport { registerFieldPatchModel } from '@mail/model/model_core';\n\n/**\n * This should be moved inside the mail_enterprise\n * mail_enterprise/static/src/models/chatter/chatter.js\n */\nregisterFieldPatchModel('mail.chatter', 'mail/static/src/models/chatter/chatter.js', {\n    /**\n     * The chatter is inside .form_sheet_bg class\n     */\n    isInFormSheetBg: attr({\n        default: false,\n    }),\n});\n", "/** @odoo-module **/\n\nimport core from 'web.core';\nimport Widget from 'web.Widget';\nimport { hidePDFJSButtons } from '@web/legacy/js/libs/pdfjs';\n\nvar QWeb = core.qweb;\n\nvar AttachmentViewer = Widget.extend({\n    className: 'o_attachment_preview_container',\n    events: {\n        'click .arrow.o_move_next': '_onClickNext',\n        'click .arrow.o_move_previous': '_onClickPrevious',\n    },\n    /**\n     * The AttachmentViewer takes an array of objects describing attachments in\n     * argument and first attachment of the array is display first.\n     *\n     * @constructor\n     * @override\n     * @param {Widget} parent\n     * @param {Array<Object>} attachments list of attachments\n     */\n    init: function (parent, attachments) {\n        this._super.apply(this, arguments);\n        this.attachments = attachments;\n        this._setActive();\n    },\n    /**\n     * Render attachment.\n     *\n     * @override\n     */\n    start: function () {\n        this._renderAttachment();\n        return this._super.apply(this, arguments);\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Update attachments list and activeAttachment.\n     *\n     * @param {Array<Object>} attachments list of attachments\n     * @param {string} order\n     */\n    updateContents: function (attachments, order) {\n        this.attachments = attachments;\n        this._setActive();\n        this._renderAttachment();\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Render template\n     *\n     * @private\n     */\n    _renderAttachment: function () {\n        this.$el.empty();\n        this.$el.append(QWeb.render('mail_enterprise.AttachmentPreview', {widget: this}));\n        if (this.activeAttachment.type === 'pdf') {\n            hidePDFJSButtons(this.el);\n        }\n    },\n\n    /**\n     * @private\n     */\n    _setActive: function () {\n        this.activeAttachment = _.find(this.attachments, function (attachment) {\n            return attachment.is_main;\n        });\n        if (!this.activeAttachment && this.attachments.length) {\n            this.activeAttachment = this.attachments[0];\n            this._rpc({\n                model: 'ir.attachment',\n                method: 'register_as_main_attachment',\n                args: [[this.activeAttachment.id], this.activeAttachment.is_main === false],\n            });\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n    /**\n    * Sets the attachment at position index as the new main attachment of\n    * the related model, and display it.\n    **/\n    _switch_main_attachment: function (index) {\n        var self = this;\n        this.activeAttachment = this.attachments[index];\n        this._rpc({\n            model: 'ir.attachment',\n            method: 'register_as_main_attachment',\n            args: [[this.activeAttachment['id']]],\n        }).then(\n            function() {\n                self._renderAttachment();\n            }\n        );\n    },\n\n    /**\n     * On click move to next attachment.\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickNext: function (ev) {\n        ev.preventDefault();\n        var index = _.findIndex(this.attachments, this.activeAttachment);\n        index = index === this.attachments.length -1 ? 0 : index + 1;\n        this._switch_main_attachment(index);\n    },\n    /**\n     * On click move to previous attachment.\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClickPrevious: function (ev) {\n        ev.preventDefault();\n        var index = _.findIndex(this.attachments, this.activeAttachment);\n        index = index === 0 ? this.attachments.length - 1 : index - 1;\n        this._switch_main_attachment(index);\n    },\n});\n\nexport default AttachmentViewer;\n", "/** @odoo-module **/\n\nimport config from 'web.config';\nimport dom from 'web.dom';\nimport pyUtils from 'web.py_utils';\nimport FormRenderer from 'web.FormRenderer';\nimport AttachmentViewer from '@mail_enterprise/js/attachment_viewer';\n\n// ensure `.include()` on `mail` is applied before `mail_enterprise`\nimport '@mail/widgets/form_renderer/form_renderer';\n\n/**\n * Display attachment preview on side of form view for large screen devices.\n *\n * To use this simply add div with class o_attachment_preview in format\n *     <div class=\"o_attachment_preview\"/>\n *\n * Some options can be passed to change its behavior:\n *     types: ['image', 'pdf']\n *     order: 'asc' or 'desc'\n *\n * For example, if you want to display only pdf type attachment and the latest\n * one then use:\n *     <div class=\"o_attachment_preview\" options=\"{'types': ['pdf'], 'order': 'desc'}\"/>\n**/\n\nFormRenderer.include({\n    /**\n     * @override\n     */\n    init: function () {\n        this._super.apply(this, arguments);\n\n        this.$attachmentPreview = undefined;\n        this.attachmentPreviewResID = undefined;\n        this.attachmentViewer = undefined;\n        /**\n         * Tracked thread of rendered attachments by attachment viewer.\n         *\n         * Useful for updating attachment viewer in case the thread linked to\n         * the attachments has been changed.\n         *\n         * Note that attachment viewer only requires attachments, but attachment\n         * viewer is not that well designed to update its content solely based\n         * on provided list attachments (until rewritten using OWL).\n         *\n         * In the meantime, it updates its content on change of thread and on\n         * change of amount of attachments. This doesn't cover some corner cases\n         * (like new list with same length and same thread), but it's good enough\n         * for the time being.\n         */\n        this._attachmentViewerThread = undefined;\n        this._isChatterInFormSheetBg = false;\n        this._onResizeWindow = _.debounce(this._onResizeWindow.bind(this), 200);\n    },\n    /**\n     * @override\n     */\n    destroy() {\n        window.removeEventListener('resize', this._onResizeWindow);\n        this._super();\n    },\n    /**\n     * @override\n     */\n    start() {\n        window.addEventListener('resize',  this._onResizeWindow);\n        return this._super(...arguments);\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @returns {boolean}\n     */\n    _isChatterAside() {\n        const parent = this._chatterContainerTarget && this._chatterContainerTarget.parentNode;\n        return (\n            config.device.size_class >= config.device.SIZES.XXL &&\n            !this.attachmentViewer &&\n            // We also test the existance of parent.classList. At start of the\n            // form_renderer, parent is a DocumentFragment and not the parent of\n            // the chatter. DocumentFragment doesn't have a classList property.\n            !(parent && parent.classList && parent.classList.contains('o_form_sheet'))\n        );\n    },\n    /**\n     * Interchange the position of the chatter and the attachment preview.\n     *\n     * @private\n     * @param {boolean} enablePreview\n     */\n     _interchangeChatter(enablePreview) {\n        if (config.device.size_class < config.device.SIZES.XXL) {\n            return;\n        }\n        if (!this.$attachmentPreview) {\n            return;\n        }\n        const $sheet = this.$('.o_form_sheet_bg');\n\n        this._updateChatterContainerTarget();\n        if (enablePreview) {\n            this.$attachmentPreview.insertAfter($sheet);\n            dom.append($sheet, $(this._chatterContainerTarget), {\n                callbacks: [{ widget: this.chatter }],\n                in_DOM: this._isInDom,\n            });\n            this._chatterContainerTarget.classList.add('o-isInFormSheetBg');\n            this._isChatterInFormSheetBg = true;\n        } else {\n            $(this._chatterContainerTarget).insertAfter($sheet);\n            dom.append($sheet, this.$attachmentPreview, {\n                callbacks: [],\n                in_DOM: this._isInDom,\n            });\n            this._chatterContainerTarget.classList.remove('o-isInFormSheetBg');\n            this._isChatterInFormSheetBg = false;\n        }\n        this._updateChatterContainerComponent();\n    },\n    /**\n     * @override\n     */\n    _makeChatterContainerProps() {\n        const props = this._super(...arguments);\n        const isChatterAside = this._isChatterAside();\n        return Object.assign(props, {\n            hasExternalBorder: !isChatterAside,\n            hasMessageListScrollAdjust: isChatterAside,\n            isInFormSheetBg: this._isChatterInFormSheetBg,\n        });\n    },\n    /**\n     * Add a class to allow styling of chatter depending on the fact is is\n     * printed aside or underneath the form sheet.\n     *\n     * @override\n     */\n    _makeChatterContainerTarget() {\n        const $el = this._super(...arguments);\n        this._updateChatterContainerTarget();\n        return $el;\n    },\n    /**\n     * Overrides the function that renders the nodes to return the preview's $el\n     * for the `o_attachment_preview` div node.\n     *\n     * @override\n     */\n    _renderNode: function (node) {\n        if (node.tag === 'div' && node.attrs.class === 'o_attachment_preview') {\n            if (this.attachmentViewer) {\n                if (this.attachmentPreviewResID !== this.state.res_id) {\n                    this.attachmentViewer.destroy();\n                    this.attachmentViewer = undefined;\n                }\n            } else {\n                this.$attachmentPreview = $('<div>', {class: 'o_attachment_preview'});\n            }\n            this._handleAttributes(this.$attachmentPreview, node);\n            this._registerModifiers(node, this.state, this.$attachmentPreview);\n            if (node.attrs.options) {\n                this.$attachmentPreview.data(pyUtils.py_eval(node.attrs.options));\n            }\n            if (this.attachmentPreviewWidth) {\n                this.$attachmentPreview.css('width', this.attachmentPreviewWidth);\n            }\n            return this.$attachmentPreview;\n        } else {\n            return this._super.apply(this, arguments);\n        }\n    },\n    /**\n     * Overrides the function to interchange the chatter and the preview once\n     * the chatter is in the dom.\n     *\n     * @override\n     */\n    async _renderView() {\n        await this._super(...arguments);\n        if (!this._hasChatter()) {\n            return;\n        }\n        this._updateChatterContainerTarget();\n\n        // for cached messages, `preview_attachment` will be triggered\n        // before the view rendering where the chatter is replaced ; in this\n        // case, we need to interchange its position if needed\n        const enablePreview = this.attachmentPreviewResID &&\n            this.attachmentPreviewResID === this.state.res_id &&\n            this.$attachmentPreview &&\n            !this.$attachmentPreview.hasClass('o_invisible_modifier');\n        this._interchangeChatter(enablePreview);\n    },\n    /**\n     * @private\n     */\n    _updateChatterContainerTarget() {\n        if (this._isChatterAside()) {\n            $(this._chatterContainerTarget).addClass('o-aside');\n        } else {\n            $(this._chatterContainerTarget).removeClass('o-aside');\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Triggered from the mail chatter, send attachments data for preview\n     *\n     * @override\n     * @private\n     * @param {OdooEvent} ev\n     * @param {Object} ev.data\n     * @param {mail.attachment[]} ev.data.attachments\n     * @param {mail.thread} ev.data.thread\n     */\n    _onChatterRendered(ev) {\n        if (config.device.size_class < config.device.SIZES.XXL) {\n            return;\n        }\n        if (!this.$attachmentPreview || this.$attachmentPreview.hasClass('o_invisible_modifier')) {\n            return;\n        }\n        var self = this;\n        var options = _.defaults(this.$attachmentPreview.data(), {\n            types: ['pdf', 'image'],\n            order: 'asc'\n        });\n        var attachments = $.extend(true, {}, ev.data.attachments);  // clone array\n        attachments = _.filter(attachments, function (attachment) {\n            var match = attachment.mimetype.match(options.types.join('|'));\n            attachment.update({ type: match ? match[0] : false });\n            return match && !attachment.isUploading;\n        });\n        const thread = ev.data.thread;\n        // most recent attachment is first in attachment list, so default order is 'desc'\n        if (options.order === 'asc') {\n            attachments.reverse();\n        }\n        if (attachments.length || this.attachmentViewer) {\n            if (this.attachmentViewer) {\n                // FIXME should be improved : what if somehow an attachment is replaced in a thread ?\n                if (\n                    this._attachmentViewerThread !== thread ||\n                    this.attachmentViewer.attachments.length !== attachments.length\n                ) {\n                    if (!attachments.length) {\n                        this.attachmentViewer.destroy();\n                        this.attachmentViewer = undefined;\n                        this.attachmentPreviewResID = undefined;\n                        this._interchangeChatter(false);\n                    }\n                    else {\n                        this.attachmentViewer.updateContents(attachments, options.order);\n                    }\n                }\n                this.trigger_up('preview_attachment_validation');\n                this._updateChatterContainerTarget();\n            } else {\n                this.attachmentPreviewResID = this.state.res_id;\n                this.attachmentViewer = new AttachmentViewer(this, attachments);\n                this.attachmentViewer.appendTo(this.$attachmentPreview).then(function() {\n                    self.trigger_up('preview_attachment_validation');\n                    self.$attachmentPreview.resizable({\n                        handles: 'w',\n                        minWidth: 400,\n                        maxWidth: 900,\n                        resize: function (event, ui) {\n                            self.attachmentPreviewWidth = ui.size.width;\n                        },\n                    });\n                    self._interchangeChatter(true);\n                });\n            }\n        }\n        this._attachmentViewerThread = thread;\n    },\n    /**\n     * Reflects the move of chatter (from aside to underneath of form sheet or\n     * the other way around) into classes and component props to allow theming\n     * to be adapted\n     *\n     * @private\n     * @param {Event} ev\n     */\n    _onResizeWindow(ev) {\n        if (this._chatterContainerComponent) {\n            this._updateChatterContainerComponent();\n            this._updateChatterContainerTarget();\n        }\n        this._applyFormSizeClass();\n    }\n\n});\n", "odoo.define('account_accountant.MoveLineListView', function (require) {\n\"use strict\";\n\n    var AttachmentViewer = require('@mail_enterprise/js/attachment_viewer')[Symbol.for(\"default\")];\n    var config = require('web.config');\n    var core = require('web.core');\n    var ListController = require('web.ListController');\n    var ListModel = require('web.ListModel');\n    var ListRenderer = require('web.ListRenderer');\n    var ListView = require('web.ListView');\n    var viewRegistry = require('web.view_registry');\n\n    var _t = core._t;\n\n    var AccountMoveListModel = ListModel.extend({\n        /**\n         * Overridden to fetch extra fields even if `move_attachment_ids` is\n         * invisible in the view.\n         *\n         * @override\n         * @private\n         */\n        _fetchRelatedData: function (list, toFetch, fieldName) {\n            if (fieldName === 'move_attachment_ids' && config.device.size_class >= config.device.SIZES.XXL) {\n                var fieldsInfo = list.fieldsInfo[list.viewType][fieldName];\n                // force to fetch extra fields\n                fieldsInfo.__no_fetch = false;\n                fieldsInfo.relatedFields = {\n                    mimetype: {type: 'char'},\n                };\n            }\n            return this._super.apply(this, arguments);\n        },\n    });\n\n    var AccountMoveListController = ListController.extend({\n        events: _.extend({}, ListController.prototype.events, {\n            'click .o_attachment_control': '_onToggleAttachment',\n        }),\n        custom_events: _.extend({}, ListController.prototype.custom_events, {\n            row_selected: '_onRowSelected',\n        }),\n\n        /**\n         * @override\n         */\n        init: function () {\n            this._super.apply(this, arguments);\n\n            this.currentAttachments = [];\n            this.hide_attachment = !!this.initialState.context.hide_attachment;\n            this.last_selected = false;\n\n        },\n\n        //--------------------------------------------------------------------------\n        // Private\n        //--------------------------------------------------------------------------\n\n        /**\n         * Overridden to add an attachment preview container.\n         *\n         * @override\n         * @private\n         */\n        _update: function () {\n            var self = this;\n            return this._super.apply(this, arguments).then(function () {\n                self.$('.o_content').addClass('o_move_line_list_view');\n                self.currentAttachments = [];\n                if (!self.$attachmentPreview && config.device.size_class >= config.device.SIZES.XXL) {\n                    self.$attachmentPreview = $('<div>', {\n                        class: 'o_attachment_preview',\n                    }).append($('<p>', {\n                        class: 'o_move_line_empty',\n                        text: _t(\"Choose a line to preview its attachments.\"),\n                    })).append($('<div>', {\n                        class: 'o_attachment_control',\n                    }));\n                    self.$attachmentPreview.appendTo(self.$('.o_content'));\n                    self.$attachmentPreview.toggleClass('hidden', self.hide_attachment);\n                }\n            }).then(self._renderAttachmentPreview());\n        },\n        /**\n         * Renders a preview of a record attachments.\n         *\n         * @param {string} recordId\n         * @private\n         */\n        _renderAttachmentPreview: function (recordId) {\n            var self = this;\n            if (_.filter(this.model.localData, function(value, key, object) {return value.groupData == self.last_selected}).length) {\n                recordId = _.filter(this.model.localData, function(value, key, object) {return value.groupData == self.last_selected})[0].data[0]\n            }\n            if (!recordId) {\n                return Promise.resolve()\n            }\n            var record = this.model.get(recordId || this.last_selected);\n            var types = ['pdf', 'image'];\n            // record type will be list when multi groupby while expanding group row\n            if (record.type === 'list') {\n                return;\n            }\n            let attachments = record.data.move_attachment_ids.data.map(function (attachment) {\n                return {\n                    id: attachment.res_id,\n                    filename: attachment.data.filename,\n                    mimetype: attachment.data.mimetype,\n                    url: '/web/content/' + attachment.res_id + '?download=true',\n                };\n            });\n            attachments = _.filter(attachments, function (attachment) {\n                var match = attachment.mimetype.match(types.join('|'));\n                attachment.type = match ? match[0] : false;\n                return match;\n            });\n            var prom;\n            if (!_.isEqual(_.pluck(this.currentAttachments, 'id'), _.pluck(attachments, 'id'))) {\n                if (this.attachmentViewer) {\n                    this.attachmentViewer.updateContents(attachments);\n                } else {\n                    this.attachmentViewer = new AttachmentViewer(this, attachments);\n                }\n                prom = this.attachmentViewer.appendTo(this.$attachmentPreview.empty()).then(function () {\n                    self.$attachmentPreview.resizable({\n                        handles: 'w',\n                        minWidth: 400,\n                        maxWidth: 900,\n                    });\n                });\n            }\n            return Promise.resolve(prom).then(function () {\n                self.currentAttachments = attachments;\n                if (!attachments.length) {\n                    var $empty = $('<p>', {\n                        class: 'o_move_line_without_attachment',\n                        text: _t(\"No attachments linked.\"),\n                    });\n                    self.$attachmentPreview.empty().append($empty);\n                }\n                $('<div>', {class: 'o_attachment_control'}).appendTo(self.$attachmentPreview);\n            });\n        },\n\n        _onToggleAttachment: function() {\n            this.hide_attachment = !this.hide_attachment;\n            this.$attachmentPreview.toggleClass('hidden');\n        },\n\n        //--------------------------------------------------------------------------\n        // Handlers\n        //--------------------------------------------------------------------------\n\n        /**\n         * @private\n         * @param {OdooEvent} ev\n         * @param {string} ev.data.recordId\n         */\n        _onRowSelected: function (ev) {\n            if (config.device.size_class >= config.device.SIZES.XXL) {\n                this.last_selected = ev.data.recordId;\n                if (this.last_selected.includes('line')) { // if it comes from _onToggleGroup, this._update is triggered but not if it comes from _selectRow\n                    this._renderAttachmentPreview(ev.data.recordId);\n                }\n            }\n        },\n    });\n    var AccountMoveListRenderer = ListRenderer.extend({\n        events: Object.assign({}, ListRenderer.prototype.events, {\n            'mouseover .o_list_table_grouped tbody tr': '_onToggleGroupButton',\n            'mouseout .o_list_table_grouped tbody tr': '_onToggleGroupButton',\n        }),\n\n        //--------------------------------------------------------------------------\n        // Private\n        //--------------------------------------------------------------------------\n\n        /**\n         *\n         * @param {integer} rowIndex\n         * @private\n         * @override\n         */\n        _selectRow: function (rowIndex) {\n            var self = this;\n            var recordId = this._getRecordID(rowIndex);\n            var currentRow = this.currentRow; // currentRow is updated in _super\n            return this._super.apply(this, arguments).then(function () {\n                if (rowIndex !== currentRow) {\n                    self.trigger_up('row_selected', {\n                        recordId: recordId,\n                    });\n                }\n            });\n        },\n\n        /*\n         * Show pdf when using mouse\n         */\n        _onRowClicked: function (ev) {\n            ev.stopPropagation();\n            var id = $(ev.currentTarget).data('id');\n            if (id) {\n                this.trigger_up('row_selected', {\n                    recordId: id,\n                });\n            }\n            return this._super.apply(this, arguments);\n        },\n\n        /*\n         * Show pdf when using keys\n         */\n        _findConnectedCell: function ($cell, direction, colIndex) {\n            var res = this._super.apply(this, arguments);\n            var id = res && res.closest('tr').data('id');\n            if (id) {\n                this.trigger_up('row_selected', {\n                    recordId: id,\n                });\n            }\n            return res;\n        },\n\n        _renderGroupRow: function (group, groupLevel) {\n            var ret = this._super.apply(this, arguments);\n            // Handle the markup of the name_get on account.move if name_groupby is in the context\n            if (this.state.context.name_groupby) {\n                var $th = ret.find('th.o_group_name');\n                $th.addClass('o_group_name_custom');\n                var text_node = $th.contents().filter(function () {\n                    return this.nodeType == 3;\n                })[0]; // we filter on text nodes (type 3) to get only the text and not the title tooltips we would have had with $.text()\n                text_node.nodeValue = _.escape(text_node.nodeValue).replace(/(\\*\\*)(.*)\\1/g, '<strong>$2</strong>').replace(/\\s+\\([0-9]+\\)/, ''); // we only change the value of the text and not eh html to keep the listeners on the buttons\n                $(text_node).replaceWith($('<span>' + text_node.nodeValue + '</span>')); // we need to create a new node (span) to replace, just inserting with the new html would mean that we replace by multiple nodes, which is impossible\n            }\n            return ret;\n        },\n\n        _onToggleGroup: function (ev) {\n            var group = $(ev.currentTarget).closest('tr').data('group');\n            if (group.model === 'account.move.line' && group.groupData && group.groupData.model === 'account.move') {\n                this.trigger_up('row_selected', {\n                    recordId: group.groupData.id,\n                });\n            }\n            this._super.apply(this, arguments);\n        },\n        /**\n         * Toggle group buttons on mouseover and mouseout on group header or\n         * its content.\n         *\n         * @private\n         * @param {MouseEvent} ev\n         */\n        _onToggleGroupButton: function (ev) {\n            let tr = ev.currentTarget;\n            let groupHeader;\n            if (tr.classList.contains('o_group_header') && tr.querySelector(\".o_group_buttons\")) {\n                // we are hovering the group header itself\n                groupHeader = tr;\n            } else {\n                let tbody = ev.currentTarget.closest('tbody');\n                while (tbody && !tbody.querySelector(\".o_group_buttons\")) {\n                    tbody = tbody.previousElementSibling;\n                }\n                if (tbody) {\n                    groupHeader = tbody.querySelector(\".o_group_header.o_group_open\");\n                }\n            }\n            if (groupHeader) {\n                groupHeader.classList.toggle(\"show_group_buttons\");\n            }\n        },\n    });\n\n    var AccountMoveListView = ListView.extend({\n        config: _.extend({}, ListView.prototype.config, {\n            Controller: AccountMoveListController,\n            Model: AccountMoveListModel,\n            Renderer: AccountMoveListRenderer,\n        }),\n    });\n\n    viewRegistry.add('account_move_line_list', AccountMoveListView);\n\n    return {\n        AccountMoveListView: AccountMoveListView,\n        AccountMoveListController: AccountMoveListController,\n        AccountMoveListModel: AccountMoveListModel,\n        AccountMoveListRenderer: AccountMoveListRenderer\n    }\n});\n", "odoo.define('account_accountant.tour', function (require) {\n    \"use strict\";\n\n    const core = require('web.core');\n    const {Markup} = require('web.utils');\n    const tour = require('web_tour.tour');\n\n    const _t = core._t;\n\n    // Update the invoicing tour as the menu items have changed, but we want the test to still work\n    tour.tours.account_tour.steps.splice(0, 3,\n        ..._.map(tour.stepUtils.goToAppSteps('account_accountant.menu_accounting', _t('Go to invoicing')), step => _.extend(step, {auto: true})),\n        {\n            trigger: 'button[data-menu-xmlid=\"account.menu_finance_receivables\"]',\n            content: _t('Go to invoicing'),\n            auto: true,\n        }, {\n            trigger: '.dropdown-item[data-menu-xmlid=\"account.menu_action_move_out_invoice_type\"]',\n            content: _t('Go to invoicing'),\n            auto: true,\n        }\n    )\n\n    tour.register('account_accountant_tour', {\n            rainbowManMessage: function() {\n                var message = _t('<strong><b>Good job!</b> You went through all steps of this tour.</strong>');\n                if (!tour._isTourConsumed('account_tour')) {\n                    message += _t('<br>See how to manage your customer invoices in the <b>Customers/Invoices</b> menu');\n                }\n                return message;\n            },\n            url: \"/web\",\n            sequence: 50,\n        },\n        [\n            ...tour.stepUtils.goToAppSteps('account_accountant.menu_accounting', _t('Let\u2019s automate your bills, bank transactions and accounting processes.')),\n            // The tour will stop here if there is at least 1 vendor bill in the database.\n            // While not ideal, it is ok, since that means the user obviously knows how to create a vendor bill...\n            {\n                trigger: 'button.btn-primary[data-name=\"action_create_vendor_bill\"]',\n                content: Markup(_t('Create your first vendor bill.<br/><br/><i>Tip: If you don\u2019t have one on hand, use our sample bill.</i>')),\n                position: 'bottom',\n            }, {\n                trigger: 'button[name=\"apply\"]',\n                content: _t('Great! Let\u2019s continue.'),\n                position: 'top',\n            }, {\n                trigger: '.o_data_cell',\n                extra_trigger: 'tr:not(.o_sample_data_disabled)>td:has(span[name=\"payment_state\"])',\n                content: _t('Let\u2019s see how a bill looks like in form view.'),\n                position: 'bottom',\n            }, {\n                trigger: 'button.btn-primary[name=\"action_post\"]',\n                extra_trigger: 'body:has(div[name=\"waiting_extraction\"].o_invisible_modifier)',\n                content: _t('Check & validate the bill. If no vendor has been found, add one before validating.'),\n                position: 'bottom',\n            }, {\n                trigger: '.dropdown-item[data-menu-xmlid=\"account.menu_board_journal_1\"]',\n                extra_trigger: 'button[data-value=\"posted\"].btn-primary',\n                content: _t('Let\u2019s go back to the dashboard.'),\n                position: 'bottom',\n            }, {\n                trigger: 'a[data-method=\"setting_init_bank_account_action\"].o_onboarding_step_action',\n                content: _t('Connect your bank and get your latest transactions.'),\n                position: 'bottom',\n                run: function () {\n                    // Close the modal\n                    // We can't test bank sync in the tour\n                    tour.tours.account_accountant_tour.current_step += 3\n                    $('.js_cancel').click();\n                }\n            }, {\n                trigger: 'button[data-name=\"action_open_reconcile\"]',\n                content: _t('Let\u2019s reconcile the fetched bank transactions.'),\n            }, {\n                trigger: '.o_reconciliation_lines .accounting_view button:visible',\n                content: _t('Process this transaction.')\n            }, {\n                trigger: '.breadcrumb-item:not(.active):first',\n                content: _t('Get back to the dashboard using your previous path\u2026'),\n                position: 'bottom',\n            }\n        ]\n    );\n\n    tour.register('account_accountant_tour_upload_ocr_step', {\n            rainbowMan: false,\n            sequence: 70,\n        },\n        [\n            {\n                trigger: 'button.btn-primary[name=\"check_status\"]',\n                content: Markup(_t('Let\u2019s use AI to fill in the form<br/><br/><i>Tip: If the OCR is not done yet, wait a few more seconds and try again.</i>')),\n                position: 'bottom',\n            }\n        ]\n    )\n});\n", "odoo.define('account.ReconciliationClientAction', function (require) {\n\"use strict\";\n\nvar AbstractAction = require('web.AbstractAction');\nvar ReconciliationModel = require('account.ReconciliationModel');\nvar ReconciliationRenderer = require('account.ReconciliationRenderer');\nvar core = require('web.core');\nvar QWeb = core.qweb;\n\n\n/**\n * Widget used as action for 'account.bank.statement' reconciliation\n */\nvar StatementAction = AbstractAction.extend({\n    hasControlPanel: true,\n    withSearchBar: true,\n    loadControlPanel: true,\n    title: core._t('Bank Reconciliation'),\n    contentTemplate: 'reconciliation',\n    custom_events: {\n        change_mode: '_onAction',\n        change_filter: '_onAction',\n        load_more: '_onAction',\n        change_partner: '_onAction',\n        add_proposition: '_onAction',\n        remove_proposition: '_onAction',\n        update_proposition: '_onAction',\n        create_proposition: '_onAction',\n        getPartialAmount: '_onActionPartialAmount',\n        quick_create_proposition: '_onAction',\n        partial_reconcile: '_onAction',\n        validate: '_onValidate',\n        close_statement: '_onCloseStatement',\n        reload: 'reload',\n        navigation_move:'_onNavigationMove',\n    },\n    config: _.extend({}, AbstractAction.prototype.config, {\n        // used to instantiate the model\n        Model: ReconciliationModel.StatementModel,\n        // used to instantiate the action interface\n        ActionRenderer: ReconciliationRenderer.StatementRenderer,\n        // used to instantiate each widget line\n        LineRenderer: ReconciliationRenderer.LineRenderer,\n        // used context params\n        params: ['statement_line_ids'],\n        // number of moves lines displayed in 'match' mode\n        limitMoveLines: 15,\n    }),\n\n    _onNavigationMove: function (ev) {\n        var non_reconciled_keys = _.keys(_.pick(this.model.lines, function(value, key, object) {return !value.reconciled}));\n        var currentIndex = _.indexOf(non_reconciled_keys, ev.data.handle);\n        var widget = false;\n        switch (ev.data.direction) {\n            case 'up':\n                ev.stopPropagation();\n                widget = this._getWidget(non_reconciled_keys[currentIndex-1]);\n                break;\n            case 'down':\n                ev.stopPropagation();\n                widget = this._getWidget(non_reconciled_keys[currentIndex+1]);\n                break;\n            case 'validate':\n                ev.stopPropagation();\n                widget = this._getWidget(non_reconciled_keys[currentIndex]);\n                widget.$('caption .o_buttons button:visible').click();\n                break;\n        }\n        if (widget) widget.$el.focus();\n    },\n\n    /**\n     * @override\n     * @param {Object} params\n     * @param {Object} params.context\n     *\n     */\n    init: function (parent, params) {\n        this._super.apply(this, arguments);\n        this.action_manager = parent;\n        this.params = params;\n        this.searchModelConfig.modelName = 'account.bank.statement.line';\n        this.controlPanelProps.cp_content = {};\n        this.model = new this.config.Model(this, {\n            modelName: \"account.reconciliation.widget\",\n            limitMoveLines: params.params && params.params.limitMoveLines || this.config.limitMoveLines,\n        });\n        this.widgets = [];\n        // Adding values from the context is necessary to put this information in the url via the action manager so that\n        // you can retrieve it if the person shares his url or presses f5\n        _.each(params.params, function (value, name) {\n            params.context[name] = name.indexOf('_ids') !== -1 ? _.map((value+'').split(','), parseFloat) : value;\n        });\n        params.params = {};\n        _.each(this.config.params, function (name) {\n            if (params.context[name]) {\n                params.params[name] = params.context[name];\n            }\n        });\n    },\n\n    /**\n     * instantiate the action renderer\n     *\n     * @override\n     */\n    willStart: function () {\n        var self = this;\n        var def = this.model.load(this.params.context).then(this._super.bind(this));\n        return def.then(function () {\n                if (!self.model.context || !self.model.context.active_id) {\n                    self.model.context = {'active_id': self.params.context.active_id, 'active_model': self.params.context.active_model};\n                }\n                if (self.params.context.journal_id) {\n                    self.model.context.active_id = self.params.context.journal_id;\n                    self.model.context.active_model = 'account.journal';\n                }\n                if (self.model.context.active_id && self.model.context.active_model === 'account.journal') {\n                    var promise = self._rpc({\n                            model: 'account.journal',\n                            method: 'read',\n                            args: [self.model.context.active_id, ['display_name']],\n                        });\n                } else {\n                    var promise = Promise.resolve();\n                }\n                return promise.then(function (result) {\n                        var title = result && result[0] ? result[0]['display_name'] : self.params.display_name || ''\n                        self.controlPanelProps.title = title;\n                        self.renderer = new self.config.ActionRenderer(self, self.model, {\n                            'bank_statement_id': self.model.bank_statement_id,\n                            'valuenow': self.model.valuenow,\n                            'valuemax': self.model.valuemax,\n                            'title': title,\n                        });\n                    });\n            });\n    },\n\n    reload: async function() {\n        // On reload destroy all rendered line widget, reload data and then rerender widget\n        var self = this;\n\n        self.$('.o_reconciliation_lines').addClass('d-none'); // prevent the browser from recomputing css after each destroy for HUGE perf improvement on a lot of lines\n        _.each(this.widgets, function(widget) {\n            widget.destroy();\n        });\n        this.widgets = [];\n        self.$('.o_reconciliation_lines').removeClass('d-none');\n        await this.model.reload();\n        await this._renderLinesOrRainbow();\n        this.updateControlPanel();\n    },\n\n    _renderLinesOrRainbow: function() {\n        var self = this;\n        return self._renderLines().then(function() {\n            var initialState = self.renderer._initialState;\n            var valuenow = self.model.statement ? self.model.statement.value_min : initialState.valuenow;\n            var valuemax = self.model.statement ? self.model.statement.value_max : initialState.valuemax;\n            // No more lines to reconcile, trigger the rainbowman.\n            if(valuenow === valuemax){\n                initialState.valuenow = valuenow;\n                initialState.context = self.model.getContext();\n                self.renderer.showRainbowMan(initialState);\n                self.controlPanelProps.cp_content = {\n                    $buttons: $(),\n                    $pager: $(),\n                };\n            }\n            // Create a notification if some lines have been reconciled automatically.\n            if(initialState.valuenow > 0) {\n                self.renderer._renderNotifications(self.model.statement.notifications);\n            }\n            self._openFirstLine();\n            self.renderer.$('[data-toggle=\"tooltip\"]').tooltip();\n            self.do_show();\n            }\n        );\n    },\n\n    /**\n     * append the renderer and instantiate the line renderers\n     *\n     * @override\n     */\n    start: function () {\n        var self = this;\n        var args = arguments;\n        var sup = this._super;\n\n        return this.renderer.prependTo(self.$('.o_form_sheet')).then(function() {\n            return self._renderLinesOrRainbow().then(function() {\n                self.do_show();\n                return sup.apply(self, args);\n            });\n        });\n    },\n\n    /**\n     * update the control panel and breadcrumbs\n     *\n     * @override\n     */\n    do_show: function () {\n        this._super.apply(this, arguments);\n        if (this.action_manager) {\n            this.$pager = $(QWeb.render('reconciliation.control.pager', {widget: this.renderer}));\n\n            this.controlPanelProps.cp_content = {\n                $buttons: $(),\n                $pager: this.$pager,\n            };\n            this.renderer.$progress = this.$pager;\n            $(this.renderer.$progress).parent().css('width', '100%').css('padding-left', '0');\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {string} handle\n     * @returns {Widget} widget line\n     */\n    _getWidget: function (handle) {\n        return _.find(this.widgets, function (widget) {return widget.handle===handle;});\n    },\n    /**\n     * sitch to 'match' the first available line\n     *\n     * @private\n     */\n    _openFirstLine: function (previous_handle) {\n        var self = this;\n        previous_handle = previous_handle || 'rline0';\n        var handle = _.compact(_.map(this.model.lines,  function (line, handle) {\n                return (line.reconciled || (parseInt(handle.substr(5)) < parseInt(previous_handle.substr(5)))) ? null : handle;\n            }))[0];\n        if (handle) {\n            var line = this.model.getLine(handle);\n            this.model.changeMode(handle, 'default').then(function () {\n                self._getWidget(handle).update(line);\n            }).guardedCatch(function(){\n                self._getWidget(handle).update(line);\n            }).then(function() {\n                self._getWidget(handle).$el.focus();\n            }\n            );\n        }\n        return handle;\n    },\n\n    _forceUpdate: function() {\n        var self = this;\n        _.each(this.model.lines, function(handle) {\n            var widget = self._getWidget(handle['handle']);\n            if (widget && handle.need_update) {\n                widget.update(handle);\n                widget.need_update = false;\n            }\n        })\n    },\n    /**\n     * render line widget and append to view\n     *\n     * @private\n     */\n    _renderLines: function () {\n        var self = this;\n        var linesToDisplay = this.model.getStatementLines();\n        var linePromises = [];\n        _.each(linesToDisplay, function (line, handle) {\n            var widget = new self.config.LineRenderer(self, self.model, line);\n            widget.handle = handle;\n            self.widgets.push(widget);\n            linePromises.push(widget.appendTo(self.$('.o_reconciliation_lines')));\n        });\n        return Promise.all(linePromises);\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * dispatch on the camelcased event name to model method then update the\n     * line renderer with the new state. If the mode was switched from 'inactive'\n     * to 'create' or 'match_rp' or 'match_other', the other lines switch to\n     * 'inactive' mode\n     *\n     * @private\n     * @param {OdooEvent} event\n     */\n    _onAction: function (event) {\n        var self = this;\n        var handle = event.target.handle;\n        var current_line = this.model.getLine(handle);\n        this.model[_.str.camelize(event.name)](handle, event.data.data).then(function () {\n            var widget = self._getWidget(handle);\n            if (widget) {\n                widget.update(current_line);\n            }\n            if (current_line.mode !== 'inactive') {\n                _.each(self.model.lines, function (line, _handle) {\n                    if (line.mode !== 'inactive' && _handle !== handle) {\n                        self.model.changeMode(_handle, 'inactive');\n                        var widget = self._getWidget(_handle);\n                        if (widget) {\n                            widget.update(line);\n                        }\n                    }\n                });\n            }\n        });\n    },\n\n    /**\n     * @private\n     * @param {Object} searchQuery\n     */\n    _onSearch: function (searchQuery) {\n        var self = this;\n        this.model.domain = searchQuery.domain;\n        this.model.display_context = 'search';\n        self.reload().then(function() {\n            self.renderer._updateProgressBar({\n                'valuenow': self.model.valuenow,\n                'valuemax': self.model.valuemax,\n            });\n        });\n    },\n\n    _onActionPartialAmount: function(event) {\n        var self = this;\n        var handle = event.target.handle;\n        var line = this.model.getLine(handle);\n        var amount = this.model.getPartialReconcileAmount(handle, event.data);\n        self._getWidget(handle).updatePartialAmount(event.data.data, amount);\n    },\n\n    /**\n     * call 'closeStatement' model method\n     *\n     * @private\n     * @param {OdooEvent} event\n     */\n    _onCloseStatement: function (event) {\n        var self = this;\n        return this.model.closeStatement().then(function () {\n            self.do_action({\n                name: 'Bank Statements',\n                res_model: 'account.bank.statement',\n                res_id: self.model.bank_statement_id.id,\n                views: [[false, 'form']],\n                type: 'ir.actions.act_window',\n                view_mode: 'form',\n            });\n            $('.o_reward').remove();\n        });\n    },\n    /**\n     * call 'validate' model method then destroy the\n     * validated lines and update the action renderer with the new status bar\n     * values and notifications then open the first available line\n     *\n     * @private\n     * @param {OdooEvent} event\n     */\n    _onValidate: function (event) {\n        var self = this;\n        var handle = event.target.handle;\n        this.model.validate(handle).then(function (result) {\n            self.renderer.update({\n                'valuenow': self.model.valuenow,\n                'valuemax': self.model.valuemax,\n                'bank_statement_id': self.model.bank_statement_id,\n                'title': self.title,\n                'time': Date.now()-self.time,\n                'notifications': result.notifications,\n                'context': self.model.getContext(),\n            });\n            self._forceUpdate();\n            _.each(result.handles, function (handle) {\n                var widget = self._getWidget(handle);\n                if (widget) {\n                    widget.destroy();\n                    var index = _.findIndex(self.widgets, function (widget) {return widget.handle===handle;});\n                    self.widgets.splice(index, 1);\n                }\n            });\n            self._openFirstLine(handle);\n        });\n    },\n});\n\n\n/**\n * Widget used as action for 'account.move.line' and 'res.partner' for the\n * manual reconciliation and mark data as reconciliate\n */\nvar ManualAction = StatementAction.extend({\n    title: core._t('Journal Items to Reconcile'),\n    withSearchBar: false,\n    config: _.extend({}, StatementAction.prototype.config, {\n        Model: ReconciliationModel.ManualModel,\n        ActionRenderer: ReconciliationRenderer.ManualRenderer,\n        LineRenderer: ReconciliationRenderer.ManualLineRenderer,\n        params: ['company_ids', 'mode', 'partner_ids', 'account_ids'],\n        limitMoveLines: 15,\n    }),\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * call 'validate' model method then destroy the\n     * reconcilied lines, update the not reconcilied and update the action\n     * renderer with the new status bar  values and notifications then open the\n     * first available line\n     *\n     * @private\n     * @param {OdooEvent} event\n     */\n    _onValidate: function (event) {\n        var self = this;\n        var handle = event.target.handle;\n        var method = 'validate';\n        this.model[method](handle).then(function (result) {\n            _.each(result.reconciled, function (handle) {\n                self._getWidget(handle).destroy();\n            });\n            _.each(result.updated, function (handle) {\n                self._getWidget(handle).update(self.model.getLine(handle));\n            });\n            self.renderer.update({\n                valuenow: _.compact(_.invoke(self.widgets, 'isDestroyed')).length,\n                valuemax: self.widgets.length,\n                title: self.title,\n                time: Date.now()-self.time,\n            });\n            if(!_.any(result.updated, function (handle) {\n                return self.model.getLine(handle).mode !== 'inactive';\n            })) {\n                self._openFirstLine(handle);\n            }\n        });\n    },\n});\n\ncore.action_registry.add('bank_statement_reconciliation_view', StatementAction);\ncore.action_registry.add('manual_reconciliation_view', ManualAction);\n\nreturn {\n    StatementAction: StatementAction,\n    ManualAction: ManualAction,\n};\n});\n", "odoo.define('account.ReconciliationModel', function (require) {\n\"use strict\";\n\nvar BasicModel = require('web.BasicModel');\nvar field_utils = require('web.field_utils');\nvar utils = require('web.utils');\nvar session = require('web.session');\nvar core = require('web.core');\nvar _t = core._t;\n\n\n/**\n * Model use to fetch, format and update 'account.reconciliation.widget',\n * datas allowing reconciliation\n *\n * The statement internal structure::\n *\n *  {\n *      valuenow: integer\n *      valuenow: valuemax\n *      [bank_statement_id]: {\n *          id: integer\n *          display_name: string\n *      }\n *      reconcileModels: [object]\n *      accounts: {id: code}\n *  }\n *\n * The internal structure of each line is::\n *\n *   {\n *      balance: {\n *          type: number - show/hide action button\n *          amount: number - real amount\n *          amount_str: string - formated amount\n *          account_code: string\n *      },\n *      st_line: {\n *          partner_id: integer\n *          partner_name: string\n *      }\n *      mode: string ('inactive', 'match_rp', 'match_other', 'create')\n *      reconciliation_proposition: {\n *          id: number|string\n *          partial_amount: number\n *          invalid: boolean - through the invalid line (without account, name...)\n *          account_code: string\n *          date: string\n *          date_maturity: string\n *          name: string\n *          amount: number - real amount\n *          amount_str: string - formated amount\n *          [is_liquidity_line]: boolean\n *          [partner_id]: integer\n *          [partner_name]: string\n *          [account_code]: string\n *          [journal_id]: {\n *              id: integer\n *              display_name: string\n *          }\n *          [ref]: string\n *          [is_partially_reconciled]: boolean\n *          [to_check]: boolean\n *          [amount_currency_str]: string|false (amount in record currency)\n *      }\n *      mv_lines_match_rp: object - idem than reconciliation_proposition\n *      mv_lines_match_other: object - idem than reconciliation_proposition\n *      limitMoveLines: integer\n *      filter: string\n *      [createForm]: {\n *          account_id: {\n *              id: integer\n *              display_name: string\n *          }\n *          tax_ids: {\n *              id: integer\n *              display_name: string\n *          }\n *          analytic_account_id: {\n *              id: integer\n *              display_name: string\n *          }\n *          analytic_tag_ids: {\n *          }\n *          name: string\n *          amount: number,\n *          [journal_id]: {\n *              id: integer\n *              display_name: string\n *          }\n *      }\n *   }\n */\nvar StatementModel = BasicModel.extend({\n    avoidCreate: false,\n    quickCreateFields: ['account_id', 'amount', 'analytic_account_id', 'name', 'tax_ids', 'force_tax_included', 'analytic_tag_ids', 'to_check'],\n\n    // overridden in ManualModel\n    modes: ['create', 'match_rp', 'match_other'],\n\n    /**\n     * @override\n     *\n     * @param {Widget} parent\n     * @param {object} options\n     */\n    init: function (parent, options) {\n        this._super.apply(this, arguments);\n        this.reconcileModels = [];\n        this.lines = {};\n        this.valuenow = 0;\n        this.valuemax = 0;\n        this.alreadyDisplayed = [];\n        this.domain = [];\n        this.limitMoveLines = options && options.limitMoveLines || 15;\n        this.display_context = 'init';\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * add a reconciliation proposition from the matched lines\n     * We also display a warning if the user tries to add 2 line with different\n     * account type\n     *\n     * @param {string} handle\n     * @param {number} mv_line_id\n     * @returns {Promise}\n     */\n    addProposition: function (handle, mv_line_id) {\n        var self = this;\n        var line = this.getLine(handle);\n        var prop = _.clone(_.find(line['mv_lines_'+line.mode], {'id': mv_line_id}));\n\n        if (!prop.is_liquidity_line) {\n            /*\n            Suggest a partial amount automatically if the proposition exceeds the current balance.\n            E.g. Adding a line of 1000.0 (credit) to a statement line of 100.0 (debit) should suggest 100.0 (credit) as\n            a partial amount instead of an open-balance of 900.0 (debit).\n            */\n            var balance = line.balance.amount\n            var prop_amount = prop.partial_amount || prop.amount;\n            var format_options = {currency_id: line.st_line.currency_id};\n            if (balance > 0.0 && this._amountCompare(prop_amount, balance, line.st_line.currency_id) > 0) {\n                // Adding a line to the credit (right side).\n                prop.partial_amount = balance\n                prop.partial_amount_str = field_utils.format.monetary(prop.partial_amount, {}, format_options);\n            } else if (balance < 0.0 && this._amountCompare(prop_amount, balance, line.st_line.currency_id) < 0) {\n                // Adding a line to the debit (left side).\n                prop.partial_amount = balance\n                prop.partial_amount_str = field_utils.format.monetary(-prop.partial_amount, {}, format_options);\n            }\n        }\n\n        this._addProposition(line, prop);\n\n        // remove all non valid lines\n        line.reconciliation_proposition = _.filter(line.reconciliation_proposition, function (prop) {return prop && !prop.invalid;});\n\n        // Onchange the partner if not already set on the statement line.\n        if(!line.st_line.partner_id && line.reconciliation_proposition\n            && line.reconciliation_proposition.length == 1 && prop.partner_id && line.type === undefined){\n            return this.changePartner(handle, {'id': prop.partner_id, 'display_name': prop.partner_name}, true)\n        }\n\n        return Promise.all([\n            this._computeLine(line),\n            this._performMoveLine(handle, line.mode, 1)\n        ]);\n    },\n    /**\n     * change the filter for the target line and fetch the new matched lines\n     *\n     * @param {string} handle\n     * @param {string} filter\n     * @returns {Promise}\n     */\n    changeFilter: function (handle, filter) {\n        var line = this.getLine(handle);\n        line['filter_'+line.mode] = filter;\n        line['mv_lines_'+line.mode] = [];\n        return this._performMoveLine(handle, line.mode);\n    },\n    /**\n     * change the mode line ('inactive', 'match_rp', 'match_other', 'create'),\n     * and fetch the new matched lines or prepare to create a new line\n     *\n     * ``match_rp``\n     *   display the matched lines from receivable/payable accounts, the user\n     *   can select the lines to apply there as proposition\n     * ``match_other``\n     *   display the other matched lines, the user can select the lines to apply\n     *   there as proposition\n     * ``create``\n     *   display fields and quick create button to create a new proposition\n     *   for the reconciliation\n     *\n     * @param {string} handle\n     * @param {'inactive' | 'match_rp' | 'create'} mode\n     * @returns {Promise}\n     */\n    changeMode: function (handle, mode) {\n        var self = this;\n        var line = this.getLine(handle);\n        if (mode === 'default') {\n            var match_requests = self.modes.filter(x => x.startsWith('match')).map(x => this._performMoveLine(handle, x))\n            return Promise.all(match_requests).then(function() {\n                return self.changeMode(handle, self._getDefaultMode(handle));\n            });\n        }\n        if (mode === 'next') {\n            var available_modes = self._getAvailableModes(handle)\n            mode = available_modes[(available_modes.indexOf(line.mode) + 1) % available_modes.length];\n        }\n        line.mode = mode;\n        if (['match_rp', 'match_other'].includes(line.mode)) {\n            if (!(line['mv_lines_' + line.mode] && line['mv_lines_' + line.mode].length)) {\n                return this._performMoveLine(handle, line.mode);\n            } else {\n                return this._formatMoveLine(handle, line.mode, []);\n            }\n        }\n        if (line.mode === 'create') {\n            return this.createProposition(handle);\n        }\n        return Promise.resolve();\n    },\n    /**\n     * fetch more matched lines\n     *\n     * @param {string} handle\n     * @returns {Promise}\n     */\n    loadMore: function (handle) {\n        var line = this.getLine(handle);\n        return this._performMoveLine(handle, line.mode);\n    },\n    /**\n     * change the partner on the line and fetch the new matched lines\n     *\n     * @param {string} handle\n     * @param {bool} preserveMode\n     * @param {Object} partner\n     * @param {string} partner.display_name\n     * @param {number} partner.id\n     * @returns {Promise}\n     */\n    changePartner: function (handle, partner, preserveMode) {\n        var self = this;\n        var line = this.getLine(handle);\n        line.st_line.partner_id = partner && partner.id;\n        line.st_line.partner_name = partner && partner.display_name || '';\n        self.modes.filter(x => x.startsWith('match')).forEach(function (mode) {\n            line[\"mv_lines_\"+mode] = [];\n        });\n        return Promise.resolve(partner && this._changePartner(handle, partner.id))\n                .then(function() {\n                    if(line.st_line.partner_id){\n                        _.each(line.reconciliation_proposition, function(prop){\n                            if(prop.partner_id != line.st_line.partner_id){\n                                line.reconciliation_proposition = [];\n                                return false;\n                            }\n                        });\n                    }\n                    return self._computeLine(line);\n                })\n                .then(function () {\n                    return self.changeMode(handle, preserveMode ? line.mode : 'default', true);\n                })\n\n    },\n    /**\n     * close the statement\n     * @returns {Promise<number>} resolves to the res_id of the closed statements\n     */\n    closeStatement: function () {\n        var self = this;\n        return this._rpc({\n                model: 'account.bank.statement',\n                method: 'button_validate',\n                args: [self.bank_statement_id.id],\n            });\n    },\n    /**\n     *\n     * then open the first available line\n     *\n     * @param {string} handle\n     * @returns {Promise}\n     */\n    createProposition: function (handle) {\n        var line = this.getLine(handle);\n        var prop = _.filter(line.reconciliation_proposition, '__focus');\n        prop = this._formatQuickCreate(line);\n        line.reconciliation_proposition.push(prop);\n        line.createForm = _.pick(prop, this.quickCreateFields);\n        return this._computeLine(line);\n    },\n    /**\n     * Return context information and journal_id\n     * @returns {Object} context\n     */\n    getContext: function () {\n        return this.context;\n    },\n    /**\n     * Return the lines that needs to be displayed by the widget\n     *\n     * @returns {Object} lines that are loaded and not yet displayed\n     */\n    getStatementLines: function () {\n        var self = this;\n        var linesToDisplay = _.pick(this.lines, function(value, key, object) {\n            if (value.visible === true && self.alreadyDisplayed.indexOf(key) === -1) {\n                self.alreadyDisplayed.push(key);\n                return object;\n            }\n        });\n        return linesToDisplay;\n    },\n    /**\n     * get the line data for this handle\n     *\n     * @param {Object} handle\n     * @returns {Object}\n     */\n    getLine: function (handle) {\n        return this.lines[handle];\n    },\n    /**\n     * load data from\n     *\n     * - 'account.bank.statement' fetch the line id and bank_statement_id info\n     * - 'account.reconcile.model'  fetch all reconcile model (for quick add)\n     * - 'account.account' fetch all account code\n     * - 'account.reconciliation.widget' fetch each line data\n     *\n     * overridden in ManualModel\n     * @param {Object} context\n     * @param {number[]} context.statement_line_ids\n     * @returns {Promise}\n     */\n    __load: function (context) {\n        var self = this;\n        this.context = context;\n        this.statement_line_ids = context.statement_line_ids;\n        if (this.statement_line_ids === undefined) {\n            // This could be undefined if the user pressed F5, take everything as fallback instead of rainbowman\n            return self._rpc({\n                model: 'account.bank.statement.line',\n                method: 'search_read',\n                fields: ['id'],\n                domain: [['journal_id', '=?', context.active_id]],\n            }).then(function (result) {\n                self.statement_line_ids = result.map(r => r.id);\n                return self.reload()\n            })\n        } else {\n            return self.reload();\n        }\n\n    },\n    /**\n     * RPC method to load informations on lines\n     * overridden in ManualModel\n     *\n     * @param {Array} ids ids of bank statement line passed to rpc call\n     * @param {Array} excluded_ids list of move_line ids that needs to be excluded from search\n     * @returns {Promise}\n     */\n    loadData: function(ids) {\n        var self = this;\n        var excluded_ids = this._getExcludedIds();\n        return self._rpc({\n            model: 'account.reconciliation.widget',\n            method: 'get_bank_statement_line_data',\n            args: [ids, excluded_ids],\n            context: self.context,\n        })\n        .then(function(res){\n            return self._formatLine(res['lines']);\n        })\n    },\n    /**\n     * Reload all data\n     */\n    __reload: function() {\n        var self = this;\n        self.alreadyDisplayed = [];\n        self.lines = {};\n        var def_statement = this._rpc({\n                model: 'account.reconciliation.widget',\n                method: 'get_bank_statement_data',\n                kwargs: {\"bank_statement_line_ids\":self.statement_line_ids, \"srch_domain\":self.domain},\n                context: self.context,\n            })\n            .then(function (statement) {\n                self.statement = statement;\n                self.bank_statement_id = statement.statement_id ? {id: statement.statement_id, display_name: statement.statement_name} : false;\n                self.valuenow = self.valuenow || statement.value_min;\n                self.valuemax = self.valuemax || statement.value_max;\n                self.context.journal_id = statement.journal_id;\n                _.each(statement.lines, function (res) {\n                    var handle = _.uniqueId('rline');\n                    self.lines[handle] = {\n                        id: res.st_line.id,\n                        partner_id: res.st_line.partner_id,\n                        handle: handle,\n                        reconciled: false,\n                        mode: 'inactive',\n                        mv_lines_match_rp: [],\n                        mv_lines_match_other: [],\n                        filter_match_rp: \"\",\n                        filter_match_other: \"\",\n                        reconciliation_proposition: [],\n                        reconcileModels: [],\n                    };\n                });\n            });\n        var domainReconcile = [];\n        if (self.context && self.context.company_ids) {\n            domainReconcile.push(['company_id', 'in', self.context.company_ids]);\n        }\n        if (self.context && self.context.active_model === 'account.journal' && self.context.active_ids) {\n            domainReconcile.push('|');\n            domainReconcile.push(['match_journal_ids', '=', false]);\n            domainReconcile.push(['match_journal_ids', 'in', self.context.active_ids]);\n        }\n        var def_reconcileModel = this._loadReconciliationModel({domainReconcile: domainReconcile});\n        var def_account = this._rpc({\n                model: 'account.account',\n                method: 'search_read',\n                fields: ['code'],\n            })\n            .then(function (accounts) {\n                self.accounts = _.object(_.pluck(accounts, 'id'), _.pluck(accounts, 'code'));\n            });\n        var def_taxes = self._loadTaxes();\n        return Promise.all([def_statement, def_reconcileModel, def_account, def_taxes]).then(function () {\n            _.each(self.lines, function (line) {\n                line.reconcileModels = self.reconcileModels;\n            });\n            return self._formatLine(self.statement.lines);\n        });\n    },\n    _readAnalyticTags: function (params) {\n        var self = this;\n        this.analyticTags = {};\n        if (!params || !params.res_ids || !params.res_ids.length) {\n            return $.when();\n        }\n        var fields = (params && params.fields || []).concat(['id', 'display_name']);\n        return this._rpc({\n                model: 'account.analytic.tag',\n                method: 'read',\n                args: [\n                    params.res_ids,\n                    fields,\n                ],\n            }).then(function (tags) {\n                for (var i=0; i<tags.length; i++) {\n                    var tag = tags[i];\n                    self.analyticTags[tag.id] = tag;\n                }\n            });\n    },\n    _loadReconciliationModel: function (params) {\n        var self = this;\n        return this._rpc({\n                model: 'account.reconcile.model',\n                method: 'search_read',\n                domain: params.domainReconcile || [],\n            })\n            .then(function (reconcileModels) {\n               var analyticTagIds = [];\n                for (var i=0; i<reconcileModels.length; i++) {\n                    var modelTags = reconcileModels[i].analytic_tag_ids || [];\n                    for (var j=0; j<modelTags.length; j++) {\n                        if (analyticTagIds.indexOf(modelTags[j]) === -1) {\n                            analyticTagIds.push(modelTags[j]);\n                        }\n                    }\n                }\n                return self._readAnalyticTags({res_ids: analyticTagIds}).then(function () {\n                    for (var i=0; i<reconcileModels.length; i++) {\n                        var recModel = reconcileModels[i];\n                        var analyticTagData = [];\n                        var modelTags = reconcileModels[i].analytic_tag_ids || [];\n                        for (var j=0; j<modelTags.length; j++) {\n                            var tagId = modelTags[j];\n                            analyticTagData.push([tagId, self.analyticTags[tagId].display_name])\n                        }\n                        recModel.analytic_tag_ids = analyticTagData;\n                    }\n                    self.reconcileModels = reconcileModels;\n                });\n            });\n    },\n    _loadTaxes: function(){\n        var self = this;\n        self.taxes = {};\n        return this._rpc({\n                model: 'account.tax',\n                method: 'search_read',\n                fields: ['price_include', 'name'],\n            }).then(function (taxes) {\n                _.each(taxes, function(tax){\n                    self.taxes[tax.id] = {\n                        price_include: tax.price_include,\n                        display_name: tax.name,\n                    };\n                });\n                return taxes;\n            });\n    },\n    /**\n     * Add lines into the propositions from the reconcile model\n     * Can add multiple lines, and each with its taxes. The last line becomes\n     * editable in the create mode.\n     *\n     * @see 'updateProposition' method for more informations about the\n     * 'amount_type'\n     *\n     * @param {string} handle\n     * @param {integer} reconcile_model_id\n     * @returns {Promise}\n     */\n    quickCreateProposition: function (handle, reconcile_model_id) {\n        var self = this;\n        var line = this.getLine(handle);\n        return this._rpc({\n            model: 'account.reconciliation.widget',\n            method: 'get_reconciliation_dict_from_model',\n            args: [reconcile_model_id, line.st_line.id, -line.balance.amount, line.st_line.partner_id],\n        }).then(function(result) {\n            return self.prepare_propositions_from_server(line, result);\n        })\n    },\n    /**\n    * Prepares a the reconciliation propositions for a line from the data\n    * returned by the server (get_reconciliation_dict_from_model).\n    */\n    prepare_propositions_from_server: function (widget_line, server_lines) {\n        var lastBaseLineId = null;\n        _.each(server_lines, function(r) {\n            r.id = _.uniqueId('createLine');\n            r.display = true;\n            r.invalid = false;\n            r.__tax_to_recompute = false;\n            r.amount = -r.balance;\n            r.base_amount = r.amount;\n            if (!r.tax_repartition_line_id) {\n                lastBaseLineId = r.id;\n                r.__focus = true;\n            } else {\n                r.is_tax = true;\n                r.link = lastBaseLineId;\n            }\n        })\n        widget_line.reconciliation_proposition.push(...server_lines);\n        if (server_lines.length > 0) {\n            widget_line.reconcile_model_id = server_lines[0].reconcile_model_id;\n        }\n        var prop = _.last(_.filter(widget_line.reconciliation_proposition, '__focus'))\n        widget_line.createForm = _.pick(prop, this.quickCreateFields);\n        return this._computeLine(widget_line);\n    },\n    /**\n     * Remove a proposition and switch to an active mode ('create' or 'match_rp' or 'match_other')\n     * overridden in ManualModel\n     *\n     * @param {string} handle\n     * @param {number} id (move line id)\n     * @returns {Promise}\n     */\n    removeProposition: function (handle, id) {\n        var self = this;\n        var line = this.getLine(handle);\n        var defs = [];\n\n        // If the line was an aml proposition\n        var prop = _.find(line.reconciliation_proposition, {'id' : id});\n        if (prop) {\n            line.reconciliation_proposition = _.filter(line.reconciliation_proposition, function (p) {\n                return p.id !== prop.id && p.id !== prop.link && p.link !== prop.id && (!p.link || p.link !== prop.link);\n            });\n            if (!isNaN(id)) {\n                if (['receivable', 'payable', 'liquidity'].includes(prop.account_type)) {\n                    line.mv_lines_match_rp.unshift(prop);\n                } else {\n                    line.mv_lines_match_other.unshift(prop);\n                }\n            }\n\n            // No proposition left and then, reset the st_line partner.\n            if(line.reconciliation_proposition.length == 0 && line.st_line.has_no_partner)\n                defs.push(self.changePartner(line.handle));\n        }\n\n        // If the line was a write-off proposition\n        var write_off =  _.find(line.write_off_vals, {'id' : id});\n        if (write_off) {\n            line.write_off_vals = _.filter(line.write_off_vals, function (w) {\n                return w.id !== write_off.id;\n            });\n        }\n\n        line.mode = (id || line.mode !== \"create\") && isNaN(id) ? 'create' : 'match_rp';\n        defs.push(this._computeLine(line));\n        self._refresh_partial_rec_preview(line);\n        return Promise.all(defs).then(function() {\n            return self.changeMode(handle, line.mode, true);\n        })\n    },\n    getPartialReconcileAmount: function(handle, data) {\n        var line = this.getLine(handle);\n        var formatOptions = {\n            currency_id: line.st_line.currency_id,\n            noSymbol: true,\n        };\n        var prop = _.find(line.reconciliation_proposition, {'id': data.data});\n        if (prop) {\n            var amount = prop.partial_amount || prop.amount;\n            // Check if we can get a partial amount that would directly set balance to zero\n            var partial = Math.abs(line.balance.amount + amount);\n            if (Math.abs(line.balance.amount) < Math.abs(amount) &&\n                partial <= Math.abs(prop.amount) && partial >= 0) {\n                amount = partial;\n            }\n            return field_utils.format.monetary(Math.abs(amount), {}, formatOptions);\n        }\n    },\n    /**\n     * Force the partial reconciliation to display the reconciliate button.\n     *\n     * @param {string} handle\n     * @returns {Promise}\n     */\n    partialReconcile: function(handle, data) {\n        var line = this.getLine(handle);\n        var prop = _.find(line.reconciliation_proposition, {'id' : data.mvLineId});\n        if (prop) {\n            var amount = data.amount;\n            try {\n                amount = field_utils.parse.float(data.amount);\n            }\n            catch (err) {\n                amount = NaN;\n            }\n            // Amount can't be greater than line.amount and can not be negative and must be a number\n            // the amount we receive will be a string, so take sign of previous line amount in consideration in order to put\n            // the amount in the correct left or right column\n            if (amount <= 0 || isNaN(amount) || this._amountCompare(amount, Math.abs(prop.amount), line.st_line.currency_id) >= 0) {\n                delete prop.partial_amount_str;\n                delete prop.partial_amount;\n                if (isNaN(amount) || amount < 0) {\n                    this.displayNotification({ title: _.str.sprintf(\n                        _t('The amount %s is not a valid partial amount'),\n                        data.amount\n                    ), type: 'danger' });\n                }\n                return this._computeLine(line);\n            }\n            else {\n                var format_options = { currency_id: line.st_line.currency_id };\n                prop.partial_amount = (prop.amount > 0 ? 1 : -1)*amount;\n                prop.partial_amount_str = field_utils.format.monetary(Math.abs(prop.partial_amount), {}, format_options);\n            }\n        }\n        return this._computeLine(line);\n    },\n    /**\n     * Change the value of the editable proposition line or create a new one.\n     *\n     * @param {string} handle\n     * @param {*} values\n     * @returns {Promise}\n     */\n    updateProposition: function (handle, values) {\n        var self = this;\n        var line = this.getLine(handle);\n        var prop = _.last(_.filter(line.reconciliation_proposition, '__focus'));\n        if ('to_check' in values && values.to_check === false) {\n            // check if we have another line with to_check and if yes don't change value of this proposition\n            prop.to_check = line.reconciliation_proposition.some(function(rec_prop, index) {\n                return rec_prop.id !== prop.id && rec_prop.to_check;\n            });\n        }\n        if (!prop) {\n            prop = this._formatQuickCreate(line);\n            line.reconciliation_proposition.push(prop);\n        }\n        _.each(values, function (value, fieldName) {\n            if (fieldName === 'analytic_tag_ids') {\n                switch (value.operation) {\n                    case \"ADD_M2M\":\n                        // handle analytic_tag selection via drop down (single dict) and\n                        // full widget (array of dict)\n                        var vids = _.isArray(value.ids) ? value.ids : [value.ids];\n                        _.each(vids, function (val) {\n                            if (!_.findWhere(prop.analytic_tag_ids, {id: val.id})) {\n                                prop.analytic_tag_ids.push(val);\n                            }\n                        });\n                        break;\n                    case \"FORGET\":\n                        var id = self.localData[value.ids[0]].ref;\n                        prop.analytic_tag_ids = _.filter(prop.analytic_tag_ids, function (val) {\n                            return val.id !== id;\n                        });\n                        break;\n                }\n            }\n            else if (fieldName === 'tax_ids') {\n                switch(value.operation) {\n                    case \"ADD_M2M\":\n                        prop.__tax_to_recompute = true;\n                        var vids = _.isArray(value.ids) ? value.ids : [value.ids];\n                        _.each(vids, function(val){\n                            if (!_.findWhere(prop.tax_ids, {id: val.id})) {\n                                value.ids.price_include = self.taxes[val.id] ? self.taxes[val.id].price_include : false;\n                                prop.tax_ids.push(val);\n                            }\n                        });\n                        break;\n                    case \"FORGET\":\n                        prop.__tax_to_recompute = true;\n                        var id = self.localData[value.ids[0]].ref;\n                        prop.tax_ids = _.filter(prop.tax_ids, function (val) {\n                            return val.id !== id;\n                        });\n                        break;\n                }\n            }\n            else {\n                prop[fieldName] = values[fieldName];\n            }\n        });\n        if ('account_id' in values) {\n            prop.account_code = prop.account_id ? this.accounts[prop.account_id.id] : '';\n        }\n        if ('amount' in values) {\n            prop.base_amount = values.amount;\n        }\n        if ('name' in values || 'force_tax_included' in values || 'amount' in values || 'account_id' in values) {\n            prop.__tax_to_recompute = true;\n        }\n        line.createForm = _.pick(prop, this.quickCreateFields);\n        // If you check/uncheck the force_tax_included box, reset the createForm amount.\n        if(prop.base_amount)\n            line.createForm.amount = prop.base_amount;\n        if (!prop.tax_ids || prop.tax_ids.length !== 1 ) {\n            // When we have 0 or more than 1 taxes, reset the base_amount and force_tax_included, otherwise weird behavior can happen\n            prop.amount = prop.base_amount;\n            line.createForm.force_tax_included = false;\n        }\n        return this._computeLine(line);\n    },\n    /**\n     * Format the value and send it to 'account.reconciliation.widget' model\n     * Update the number of validated lines\n     * overridden in ManualModel\n     *\n     * @param {(string|string[])} handle\n     * @returns {Promise<Object>} resolved with an object who contains\n     *   'handles' key\n     */\n    validate: function (handle) {\n        var self = this;\n        this.display_context = 'validate';\n        var handles = [];\n        if (handle) {\n            handles = [handle];\n        } else {\n            _.each(this.lines, function (line, handle) {\n                if (!line.reconciled && line.balance && !line.balance.amount && line.reconciliation_proposition.length) {\n                    handles.push(handle);\n                }\n            });\n        }\n        var ids = [];\n        var values = [];\n        var handlesPromises = [];\n        _.each(handles, function (handle) {\n            var line = self.getLine(handle);\n            var props = _.filter(line.reconciliation_proposition, function (prop) {return prop && !prop.invalid;});\n            var computeLinePromise;\n            if (props.length === 0) {\n                // Usability: if user has not chosen any lines and click validate, it has the same behavior\n                // as creating a write-off of the same amount.\n                props.push(self._formatQuickCreate(line, {\n                    account_id: [line.st_line.open_balance_account_id, self.accounts[line.st_line.open_balance_account_id]],\n                }));\n                // update balance of line otherwise it won't be to zero and another line will be added\n                line.reconciliation_proposition.push(props[0]);\n                computeLinePromise = self._computeLine(line);\n            }\n            ids.push(line.id);\n            handlesPromises.push(Promise.resolve(computeLinePromise).then(function() {\n                var move_line_values = _.map(_.filter(props, function (prop) {\n                    return !isNaN(prop.id) && !prop.is_liquidity_line;\n                }), self._formatToProcessReconciliation.bind(self, line));\n                move_line_values.push(..._.map(_.filter(props, function (prop) {\n                    return !isNaN(prop.id) && prop.is_liquidity_line;\n                }), self._formatToProcessReconciliation.bind(self, line)))\n                move_line_values.push(..._.map(_.filter(props, function (prop) {\n                    return isNaN(prop.id) && prop.display;\n                }), self._formatToProcessReconciliation.bind(self, line)))\n                values.push({\n                    partner_id: line.st_line.partner_id,\n                    lines_vals_list: move_line_values,\n                    to_check: line.to_check,\n                });\n                line.reconciled = true;\n                self.valuenow++;\n            }));\n\n            _.each(self.lines, function(other_line) {\n                if (other_line != line) {\n                    var filtered_prop = other_line.reconciliation_proposition.filter(p => !line.reconciliation_proposition.map(l => l.id).includes(p.id));\n                    if (filtered_prop.length != other_line.reconciliation_proposition.length) {\n                        other_line.need_update = true;\n                        other_line.reconciliation_proposition = filtered_prop;\n                    }\n                    self._computeLine(line);\n                }\n            })\n        });\n\n        return Promise.all(handlesPromises).then(function() {\n            return self._rpc({\n                    model: 'account.reconciliation.widget',\n                    method: 'process_bank_statement_line',\n                    args: [ids, values],\n                    context: self.context,\n                })\n                .then(self._validatePostProcess.bind(self))\n                .then(function () {\n                    return {handles: handles};\n                });\n        });\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * add a line proposition after checking receivable and payable accounts constraint\n     *\n     * @private\n     * @param {Object} line\n     * @param {Object} prop\n     */\n    _addProposition: function (line, prop) {\n        _.each(this.modes.filter(x => x.startsWith('match')), mode => {\n            line['mv_lines_' + mode] = line['mv_lines_' + mode].filter(p => p.id != prop.id)\n        })\n        line.reconciliation_proposition.push(prop);\n    },\n    /**\n     * stop the editable proposition line and remove it if it's invalid then\n     * compute the line\n     *\n     * See :func:`_computeLine`\n     *\n     * @private\n     * @param {string} handle\n     * @returns {Promise}\n     */\n    _blurProposition: function (handle) {\n        var line = this.getLine(handle);\n        line.reconciliation_proposition = _.filter(line.reconciliation_proposition, function (l) {\n            l.__focus = false;\n            return !l.invalid;\n        });\n    },\n    /**\n     * When changing partner, read property_account_receivable and payable\n     * of that partner because the counterpart account might cahnge depending\n     * on the partner\n     *\n     * @private\n     * @param {string} handle\n     * @param {integer} partner_id\n     * @returns {Promise}\n     */\n    _changePartner: function (handle, partner_id) {\n        var self = this;\n        return this._rpc({\n                model: 'res.partner',\n                method: 'read',\n                args: [partner_id, [\"property_account_receivable_id\", \"property_account_payable_id\"]],\n            }).then(function (result) {\n                if (result.length > 0) {\n                    var line = self.getLine(handle);\n                    self.lines[handle].st_line.open_balance_account_id = line.balance.amount < 0 ? result[0]['property_account_payable_id'][0] : result[0]['property_account_receivable_id'][0];\n                }\n            });\n    },\n    /**\n     * Calculates the balance; format each proposition amount_str and mark as\n     * invalid the line with empty account_id, amount or name\n     * Check the taxes server side for each updated propositions with tax_ids\n     * extended by ManualModel\n     *\n     * @private\n     * @param {Object} line\n     * @returns {Promise}\n     */\n    _computeLine: function (line) {\n        //balance_type\n        var self = this;\n\n        // compute taxes\n        var tax_defs = [];\n        var reconciliation_proposition = [];\n        var formatOptions = {\n            currency_id: line.st_line.currency_id,\n        };\n        line.to_check = false;\n        _.each(line.reconciliation_proposition, function (prop) {\n            if (prop.to_check) {\n                // If one of the proposition is to_check, set the global to_check flag to true\n                line.to_check = true;\n            }\n            if (prop.tax_repartition_line_id) {\n                if (!_.find(line.reconciliation_proposition, {'id': prop.link}).__tax_to_recompute) {\n                    reconciliation_proposition.push(prop);\n                }\n                prop.amount_str = field_utils.format.monetary(Math.abs(prop.amount), {}, formatOptions);\n                return;\n            }\n            if (!prop.is_liquidity_line && parseInt(prop.id)) {\n                prop.is_move_line = true;\n            }\n            reconciliation_proposition.push(prop);\n\n            if (prop.tax_ids && prop.tax_ids.length && prop.__tax_to_recompute && prop.base_amount) {\n                var args = [prop.tax_ids.map(function(el){return el.id;}), prop.base_amount, formatOptions.currency_id];\n                var add_context = {'round': true};\n                if(prop.tax_ids.length === 1 && line.createForm.force_tax_included)\n                    add_context.force_price_include = true;\n                tax_defs.push(self._rpc({\n                        model: 'account.tax',\n                        method: 'json_friendly_compute_all',\n                        args: args,\n                        context: $.extend({}, self.context || {}, add_context),\n                    })\n                    .then(function (result) {\n                        _.each(result.taxes, function(tax){\n                            var tax_prop = self._formatQuickCreate(line, {\n                                'link': prop.id,\n                                'tax_ids': tax.tax_ids,\n                                'tax_repartition_line_id': tax.tax_repartition_line_id,\n                                'tax_tag_ids': tax.tag_ids,\n                                'tax_base_amount': tax.base,\n                                'amount': tax.amount,\n                                'name': prop.name ? prop.name + \" \" + tax.name : tax.name,\n                                'date': prop.date,\n                                'account_id': tax.account_id ? [tax.account_id, null] : prop.account_id,\n                                'analytic': tax.analytic,\n                                '__focus': false\n                            });\n\n                            prop.amount = tax.base;\n                            prop.amount_str = field_utils.format.monetary(Math.abs(prop.amount), {}, formatOptions);\n                            prop.invalid = !self._isValid(prop);\n\n                            tax_prop.amount_str = field_utils.format.monetary(Math.abs(tax_prop.amount), {}, formatOptions);\n                            tax_prop.invalid = prop.invalid;\n\n                            reconciliation_proposition.push(tax_prop);\n                        });\n\n                        prop.tax_tag_ids = self._formatMany2ManyTagsTax(result.base_tags || []);\n                    }));\n            } else {\n                prop.amount_str = field_utils.format.monetary(Math.abs(prop.amount), {}, formatOptions);\n                prop.display = self._isDisplayedProposition(prop);\n                prop.invalid = !self._isValid(prop);\n            }\n        });\n\n        return Promise.all(tax_defs).then(function () {\n            _.each(reconciliation_proposition, function (prop) {\n                prop.__tax_to_recompute = false;\n            });\n            line.reconciliation_proposition = reconciliation_proposition;\n\n            var amount_currency = 0;\n            var total = line.st_line.amount || 0;\n            var isOtherCurrencyId = _.uniq(_.pluck(_.reject(reconciliation_proposition, 'invalid'), 'currency_id'));\n            isOtherCurrencyId = isOtherCurrencyId.length === 1 && !total && isOtherCurrencyId[0] !== formatOptions.currency_id ? isOtherCurrencyId[0] : false;\n\n            _.each(reconciliation_proposition, function (prop) {\n                if (!prop.invalid) {\n                    total -= prop.partial_amount || prop.amount;\n                    if (isOtherCurrencyId) {\n                        amount_currency -= (prop.amount < 0 ? -1 : 1) * Math.abs(prop.amount_currency);\n                    }\n                }\n            });\n            var company_currency = session.get_currency(line.st_line.currency_id);\n            var company_precision = company_currency && company_currency.digits[1] || 2;\n            total = utils.round_decimals(total, company_precision) || 0;\n            if(isOtherCurrencyId){\n                var other_currency = session.get_currency(isOtherCurrencyId);\n                var other_precision = other_currency && other_currency.digits[1] || 2;\n                amount_currency = utils.round_decimals(amount_currency, other_precision);\n            }\n            line.balance = {\n                amount: total,\n                amount_str: field_utils.format.monetary(Math.abs(total), {}, formatOptions),\n                currency_id: isOtherCurrencyId,\n                amount_currency: isOtherCurrencyId ? amount_currency : total,\n                amount_currency_str: isOtherCurrencyId ? field_utils.format.monetary(Math.abs(amount_currency), {}, {\n                    currency_id: isOtherCurrencyId\n                }) : false,\n                account_code: self.accounts[line.st_line.open_balance_account_id],\n            };\n            line.balance.show_balance = line.balance.amount_currency != 0;\n            line.balance.type = line.balance.amount_currency ? (line.st_line.partner_id ? 0 : -1) : 1;\n        });\n    },\n    /**\n     * format a name_get into an object {id, display_name}, idempotent\n     *\n     * @private\n     * @param {Object|Array} [value] data or name_get\n     */\n    _formatNameGet: function (value) {\n        return value ? (value.id ? value : {'id': value[0], 'display_name': value[1]}) : false;\n    },\n    _formatMany2ManyTags: function (value) {\n        var res = [];\n        for (var i=0, len=value.length; i<len; i++) {\n            res[i] = {'id': value[i][0], 'display_name': value[i][1]};\n        }\n        return res;\n    },\n    _formatMany2ManyTagsTax: function(value) {\n        var res = [];\n        for (var i=0; i<value.length; i++) {\n            res.push({id: value[i], display_name: this.taxes[value[i]] ? this.taxes[value[i]].display_name : ''});\n        }\n        return res;\n    },\n    /**\n     * Format each propositions (amount, name, account_id)\n     * extended in ManualModel\n     *\n     * @private\n     * @param {Object} line\n     * @param {Object[]} props\n     */\n    _formatLineProposition: function (line, props) {\n        var self = this;\n        if (props.length) {\n            _.each(props, function (prop) {\n                prop.amount = prop.debit || -prop.credit;\n                prop.account_id = self._formatNameGet(prop.account_id || line.account_id);\n                prop.is_partially_reconciled = prop.amount_str !== prop.total_amount_str;\n                prop.to_check = !!prop.to_check;\n            });\n        }\n    },\n    /**\n     * Format each server lines and propositions and compute all lines\n     * overridden in ManualModel\n     *\n     * @see '_computeLine'\n     *\n     * @private\n     * @param {Object[]} lines\n     * @returns {Promise}\n     */\n    _formatLine: function (lines) {\n        var self = this;\n        var defs = [];\n        _.each(lines, function (data) {\n            var line = _.find(self.lines, function (l) {\n                return l.id === data.st_line.id;\n            });\n            line.visible = true;\n            line.limitMoveLines = self.limitMoveLines;\n            _.extend(line, data);\n\n            // Now that extend() has filled in the reconciliation propositions, we need to handle their reconciliation\n            self._refresh_partial_rec_preview(line);\n\n            self._formatLineProposition(line, line.reconciliation_proposition);\n            if (!line.reconciliation_proposition.length) {\n                delete line.reconciliation_proposition;\n            }\n\n            // No partner set on st_line and all matching amls have the same one: set it on the st_line.\n            defs.push(\n                self._computeLine(line)\n                .then(function(){\n                    if(!line.st_line.partner_id && line.reconciliation_proposition.length > 0){\n                        var hasDifferentPartners = function(prop){\n                            return !prop.partner_id || prop.partner_id != line.reconciliation_proposition[0].partner_id;\n                        };\n\n                        if(!_.any(line.reconciliation_proposition, hasDifferentPartners)){\n                            return self.changePartner(line.handle, {\n                                'id': line.reconciliation_proposition[0].partner_id,\n                                'display_name': line.reconciliation_proposition[0].partner_name,\n                            }, true);\n                        }\n                    }else if(!line.st_line.partner_id && line.partner_id && line.partner_name){\n                        return self.changePartner(line.handle, {\n                            'id': line.partner_id,\n                            'display_name': line.partner_name,\n                        }, true);\n                    }\n                    return true;\n                })\n                .then(function(){\n                    if (data.write_off_vals) {\n                        return self.prepare_propositions_from_server(line, data.write_off_vals)\n                    }\n                    return true;\n                })\n                .then(function() {\n                    // If still no partner set, take the one from context, if it exists\n                    if (!line.st_line.partner_id && self.context.partner_id && self.context.partner_name) {\n                        return self.changePartner(line.handle, {\n                            'id': self.context.partner_id,\n                            'display_name': self.context.partner_name,\n                        }, true);\n                    }\n                    return true;\n                })\n            );\n        });\n        return Promise.all(defs);\n    },\n    /**\n    * Refresh partial reconciliation data for the reconciliation propositions of\n    * the provided reconciliation widget line.\n    **/\n    _refresh_partial_rec_preview: function (line) {\n        var st_line_balance_left = line.st_line.amount;\n        _.each(line.reconciliation_proposition, proposition => {\n            var prop_amount = st_line_balance_left < 0 ? proposition.credit : proposition.debit;\n\n            // Invoice matching reconciliation models may have defined some write off rules as well\n            var write_off_balances = (line.write_off_vals || []).map(function(elem) { return elem['balance']; })\n            var write_off_amount = write_off_balances.reduce(function(prev, cur){ return prev + cur; }, 0);\n\n            var prop_impact = Math.min(Math.abs(st_line_balance_left + write_off_amount), prop_amount);\n            var signed_impact = prop_impact * (proposition.credit > 0 ? -1 : 1);\n\n            st_line_balance_left -= signed_impact;\n\n            if (prop_impact > 0 && this._amountCompare(prop_impact, prop_amount, line.st_line.currency_id) !== 0) {\n                // Then it'll be a partial reconciliation\n                proposition.partial_amount = signed_impact;\n                proposition.partial_amount_str = field_utils.format.monetary(Math.abs(proposition.partial_amount), {}, {currency_id: line.st_line.currency_id});\n            }\n            else {\n                delete proposition.partial_amount;\n                delete proposition.partial_amount_str;\n            }\n        });\n\n    },\n    /**\n     * Format the server value then compute the line\n     * overridden in ManualModel\n     *\n     * @see '_computeLine'\n     *\n     * @private\n     * @param {string} handle\n     * @param {Object[]} mv_lines\n     * @returns {Promise}\n     */\n    _formatMoveLine: function (handle, mode, mv_lines) {\n        var self = this;\n        var line = this.getLine(handle);\n        line['mv_lines_'+mode] = _.uniq([].concat(line['mv_lines_'+mode] || [], mv_lines), l => l.id);\n        if (mv_lines[0]){\n            line['remaining_'+mode] = mv_lines[0].recs_count - mv_lines.length;\n        } else if (line['mv_lines_'+mode].length == 0) {\n            line['remaining_'+mode] = 0;\n        }\n\n        this._formatLineProposition(line, mv_lines);\n\n        if (line.mode !== 'create') {\n            line.mode = self._getDefaultMode(handle);\n            if (line.mode !== 'match_rp' && line.mode !== 'match_other' && line.mode !== 'inactive') {\n                return this._computeLine(line).then(function () {\n                    return self.createProposition(handle);\n                });\n            }\n        }\n        return this._computeLine(line);\n    },\n    /**\n     * Compare two amounts.\n     *\n     * Some amounts may be represented differently and are therefore compared\n     * to an epsilon deviation (depending on currency). The values to be\n     * compared have already been rounded according to the currency.\n     * (eg: 956.06 digit is rounded and represented as 956.0600000000001 float\n     * with the python method `odoo.tools.float_round`)\n     *\n     * @param float value1: first value to compare\n     * @param float value2: second value to compare\n     * @param int currency_id: currency ID used for the comparison\n     *    (associated digit used to compute the epsilon)\n     * @return -1, 0 or 1: if ``value1`` is (resp.) lower than,\n     *    equal to, or greater than ``value2``, at the given currency.\n     */\n    _amountCompare: function (value1, value2, currency_id) {\n        const currency = session.get_currency(currency_id);\n        const epsilon = Math.pow(10, -currency.digits[1]);\n        const delta = value1 - value2;\n        if (Math.abs(delta) < epsilon) {\n            return 0;\n        }\n        return delta < 0 ? -1 : 1;\n    },\n    /**\n     * overridden in ManualModel\n     */\n    _getDefaultMode: function(handle) {\n        var line = this.getLine(handle);\n        if (line.balance.amount === 0\n            && (!line.st_line.mv_lines_match_rp || line.st_line.mv_lines_match_rp.length === 0)\n            && (!line.st_line.mv_lines_match_other || line.st_line.mv_lines_match_other.length === 0)) {\n            return 'inactive';\n        }\n        if (line['mv_lines_'+line.mode] && (line['mv_lines_'+line.mode].length || line['filter_'+line.mode].length)) {\n            return line.mode;\n        }\n        if (line.mv_lines_match_rp && line.mv_lines_match_rp.length) {\n            return 'match_rp';\n        }\n        if (line.mv_lines_match_other && line.mv_lines_match_other.length) {\n            return 'match_other';\n        }\n        return 'create';\n    },\n    _getAvailableModes: function(handle) {\n        var line = this.getLine(handle);\n        var modes = []\n        if (line.mv_lines_match_rp && line.mv_lines_match_rp.length) {\n            modes.push('match_rp')\n        }\n        if (line.mv_lines_match_other && line.mv_lines_match_other.length) {\n            modes.push('match_other')\n        }\n        modes.push('create')\n        return modes\n    },\n    /**\n     * Apply default values for the proposition, format datas and format the\n     * base_amount with the decimal number from the currency\n     * extended in ManualModel\n     *\n     * @private\n     * @param {Object} line\n     * @param {Object} values\n     * @returns {Object}\n     */\n    _formatQuickCreate: function (line, values) {\n        values = values || {};\n        var today = new moment().utc().format();\n        var account = this._formatNameGet(values.account_id);\n        var formatOptions = {\n            currency_id: line.st_line.currency_id,\n        };\n        var amount = values.amount !== undefined ? values.amount : line.balance.amount;\n\n        var prop = {\n            'id': _.uniqueId('createLine'),\n            'name': values.name || line.st_line.name,\n            'account_id': account,\n            'account_code': account ? this.accounts[account.id] : '',\n            'analytic_account_id': this._formatNameGet(values.analytic_account_id),\n            'analytic_tag_ids': this._formatMany2ManyTags(values.analytic_tag_ids || []),\n            'journal_id': this._formatNameGet(values.journal_id),\n            'tax_ids': this._formatMany2ManyTagsTax(values.tax_ids || []),\n            'tax_tag_ids': this._formatMany2ManyTagsTax(values.tax_tag_ids || []),\n            'tax_repartition_line_id': values.tax_repartition_line_id,\n            'tax_base_amount': values.tax_base_amount,\n            'debit': 0,\n            'credit': 0,\n            'date': values.date ? values.date : field_utils.parse.date(today, {}, {isUTC: true}),\n            'force_tax_included': values.force_tax_included || false,\n            'base_amount': amount,\n            'link': values.link,\n            'display': true,\n            'invalid': true,\n            'to_check': !!values.to_check,\n            '__tax_to_recompute': true,\n            '__focus': '__focus' in values ? values.__focus : true,\n        };\n        if (prop.base_amount) {\n            // Call to format and parse needed to round the value to the currency precision\n            var sign = prop.base_amount < 0 ? -1 : 1;\n            var amount = _.unescape(field_utils.format.monetary(Math.abs(prop.base_amount), {}, formatOptions));\n            prop.base_amount = sign * field_utils.parse.monetary(amount, {}, formatOptions);\n        }\n\n        prop.amount = prop.base_amount;\n        return prop;\n    },\n    /**\n     * Return list of account_move_line that has been selected and needs to be removed\n     * from other calls.\n     *\n     * @private\n     * @returns {Array} list of excluded ids\n     */\n    _getExcludedIds: function () {\n        var excludedIds = [];\n        _.each(this.lines, function(line) {\n            if (line.reconciliation_proposition) {\n                _.each(line.reconciliation_proposition, function(prop) {\n                    if (parseInt(prop['id'])) {\n                        excludedIds.push(prop['id']);\n                    }\n                });\n            }\n        });\n        return excludedIds;\n    },\n    /**\n     * Defined whether the line is to be displayed or not. Here, we only display\n     * the line if it comes from the server or if an account is defined when it\n     * is created\n     * extended in ManualModel\n     *\n     * @private\n     * @param {object} prop\n     * @returns {Boolean}\n     */\n    _isDisplayedProposition: function (prop) {\n        return !isNaN(prop.id) || !!prop.account_id;\n    },\n    /**\n     * extended in ManualModel\n     * @private\n     * @param {object} prop\n     * @returns {Boolean}\n     */\n    _isValid: function (prop) {\n        return !isNaN(prop.id) || prop.account_id && prop.amount && prop.name && !!prop.name.length;\n    },\n    /**\n     * Fetch 'account.reconciliation.widget' propositions.\n     * overridden in ManualModel\n     *\n     * @see '_formatMoveLine'\n     *\n     * @private\n     * @param {string} handle\n     * @returns {Promise}\n     */\n    _performMoveLine: function (handle, mode, limit) {\n        limit = limit || this.limitMoveLines;\n        var line = this.getLine(handle);\n        var excluded_ids = _.map(_.union(line.reconciliation_proposition, line.mv_lines_match_rp, line.mv_lines_match_other), function (prop) {\n            return _.isNumber(prop.id) ? prop.id : null;\n        }).filter(id => id != null);\n        var filter = line['filter_'+mode] || \"\";\n        return this._rpc({\n                model: 'account.reconciliation.widget',\n                method: 'get_move_lines_for_bank_statement_line',\n                kwargs: {\n                    st_line_id: line.id,\n                    partner_id: line.st_line.partner_id,\n                    excluded_ids: excluded_ids,\n                    search_str: filter,\n                    limit: limit,\n                    mode: mode === 'match_rp' ? 'rp' : 'other',\n                },\n                context: this.context,\n            })\n            .then(this._formatMoveLine.bind(this, handle, mode));\n    },\n    /**\n     * format the proposition to send information server side\n     * extended in ManualModel\n     *\n     * @private\n     * @param {object} line\n     * @param {object} prop\n     * @returns {object}\n     */\n    _formatToProcessReconciliation: function (line, prop) {\n        var amount = -prop.amount;\n        if (prop.partial_amount) {\n            amount = -prop.partial_amount;\n        }\n\n        var result = {\n            name : prop.name,\n            balance : amount,\n            analytic_tag_ids: [[6, null, _.pluck(prop.analytic_tag_ids, 'id')]]\n        };\n        if (!isNaN(prop.id)) {\n            result.id = prop.id;\n        } else {\n            result.account_id = prop.account_id.id;\n            if (prop.journal_id) {\n                result.journal_id = prop.journal_id.id;\n            }\n        }\n        if (prop.analytic_account_id) result.analytic_account_id = prop.analytic_account_id.id;\n        if (prop.tax_ids && prop.tax_ids.length) result.tax_ids = [[6, null, _.pluck(prop.tax_ids, 'id')]];\n        if (prop.tax_tag_ids && prop.tax_tag_ids.length) result.tax_tag_ids = [[6, null, _.pluck(prop.tax_tag_ids, 'id')]];\n        if (prop.tax_repartition_line_id) result.tax_repartition_line_id = prop.tax_repartition_line_id;\n        if (prop.tax_base_amount) result.tax_base_amount = prop.tax_base_amount;\n        if (prop.reconcile_model_id) result.reconcile_model_id = prop.reconcile_model_id\n        if (prop.currency_id) result.currency_id = prop.currency_id;\n        return result;\n    },\n    /**\n     * Hook to handle return values of the validate's line process.\n     *\n     * @private\n     * @param {Object} data\n     * @param {Object[]} data.moves list of processed account.move\n     * @returns {Deferred}\n     */\n    _validatePostProcess: function (data) {\n        var self = this;\n        return Promise.resolve();\n    },\n});\n\n\n/**\n * Model use to fetch, format and update 'account.move.line' and 'res.partner'\n * datas allowing manual reconciliation\n */\nvar ManualModel = StatementModel.extend({\n    quickCreateFields: ['account_id', 'journal_id', 'amount', 'analytic_account_id', 'name', 'tax_ids', 'force_tax_included', 'analytic_tag_ids', 'date', 'to_check'],\n\n    modes: ['create', 'match'],\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * load data from\n     * - 'account.reconciliation.widget' fetch the lines to reconciliate\n     * - 'account.account' fetch all account code\n     *\n     * @param {Object} context\n     * @param {string} [context.mode] 'customers', 'suppliers' or 'accounts'\n     * @param {integer[]} [context.company_ids]\n     * @param {integer[]} [context.partner_ids] used for 'customers' and\n     *   'suppliers' mode\n     * @returns {Promise}\n     */\n    __load: function (context) {\n        var self = this;\n        this.context = context;\n\n        var domain_account_id = [];\n        if (context && context.company_ids) {\n            domain_account_id.push(['company_id', 'in', context.company_ids]);\n        }\n\n        var def_account = this._rpc({\n                model: 'account.account',\n                method: 'search_read',\n                domain: domain_account_id,\n                fields: ['code'],\n            })\n            .then(function (accounts) {\n                self.account_ids = _.pluck(accounts, 'id');\n                self.accounts = _.object(self.account_ids, _.pluck(accounts, 'code'));\n            });\n\n        var domainReconcile = [];\n        var session_allowed_company_ids = session.user_context.allowed_company_ids || []\n        var company_ids = context && context.company_ids || session_allowed_company_ids.slice(0, 1);\n        if (company_ids) {\n            domainReconcile.push(['company_id', 'in', company_ids]);\n        }\n        var def_reconcileModel = this._loadReconciliationModel({domainReconcile: domainReconcile});\n        var def_taxes = this._loadTaxes();\n\n        return Promise.all([def_reconcileModel, def_account, def_taxes]).then(function () {\n            switch(context.mode) {\n                case 'customers':\n                case 'suppliers':\n                    var mode = context.mode === 'customers' ? 'receivable' : 'payable';\n                    var args = ['partner', context.partner_ids || null, mode];\n                    return self._rpc({\n                            model: 'account.reconciliation.widget',\n                            method: 'get_data_for_manual_reconciliation',\n                            args: args,\n                            context: context,\n                        })\n                        .then(function (result) {\n                            self.manualLines = result;\n                            self.valuenow = 0;\n                            self.valuemax = Object.keys(self.manualLines).length;\n                            return self.loadData(self.manualLines);\n                        });\n                case 'accounts':\n                    return self._rpc({\n                            model: 'account.reconciliation.widget',\n                            method: 'get_data_for_manual_reconciliation',\n                            args: ['account', context.account_ids || self.account_ids],\n                            context: context,\n                        })\n                        .then(function (result) {\n                            self.manualLines = result;\n                            self.valuenow = 0;\n                            self.valuemax = Object.keys(self.manualLines).length;\n                            return self.loadData(self.manualLines);\n                        });\n                default:\n                    var partner_ids = context.partner_ids || null;\n                    var account_ids = context.account_ids || self.account_ids || null;\n                    return self._rpc({\n                            model: 'account.reconciliation.widget',\n                            method: 'get_all_data_for_manual_reconciliation',\n                            args: [partner_ids, account_ids],\n                            context: context,\n                        })\n                        .then(function (result) {\n                            // Flatten the result\n                            self.manualLines = [].concat(result.accounts, result.customers, result.suppliers);\n                            self.valuenow = 0;\n                            self.valuemax = Object.keys(self.manualLines).length;\n                            return self.loadData(self.manualLines);\n                        });\n            }\n        });\n    },\n\n    /**\n     * Reload data by calling load\n     * It overrides super.reload() because\n     * it is not adapted for this model.\n     *\n     * Use case: coming back to manual reconcilation\n     *           in breadcrumb\n     */\n    __reload: function () {\n        this.lines = {};\n        return this.load(this.context);\n    },\n\n    /**\n     * Method to load informations on lines\n     *\n     * @param {Array} lines manualLines to load\n     * @returns {Promise}\n     */\n    loadData: function(lines) {\n        var self = this;\n        var defs = [];\n        _.each(lines, function (l) {\n            defs.push(self._formatLine(l.mode, l));\n        });\n        return Promise.all(defs);\n\n    },\n    /**\n     * Mark the account or the partner as reconciled\n     *\n     * @param {(string|string[])} handle\n     * @returns {Promise<Array>} resolved with the handle array\n     */\n    validate: function (handle) {\n        var self = this;\n        var handles = [];\n        if (handle) {\n            handles = [handle];\n        } else {\n            _.each(this.lines, function (line, handle) {\n                if (!line.reconciled && !line.balance.amount && line.reconciliation_proposition.length) {\n                    handles.push(handle);\n                }\n            });\n        }\n\n        var def = Promise.resolve();\n        var process_reconciliations = [];\n        var reconciled = [];\n        _.each(handles, function (handle) {\n            var line = self.getLine(handle);\n            if(line.reconciled) {\n                return;\n            }\n            var props = line.reconciliation_proposition;\n            if (!props.length) {\n                self.valuenow++;\n                reconciled.push(handle);\n                line.reconciled = true;\n                process_reconciliations.push({\n                    id: line.type === 'accounts' ? line.account_id : line.partner_id,\n                    type: line.type,\n                    mv_line_ids: [],\n                    new_mv_line_dicts: [],\n                });\n            } else {\n                var mv_line_ids = _.pluck(_.filter(props, function (prop) {return !isNaN(prop.id);}), 'id');\n                var new_mv_line_dicts = _.map(_.filter(props, function (prop) {return isNaN(prop.id) && prop.display;}), self._formatToProcessReconciliation.bind(self, line));\n                process_reconciliations.push({\n                    id: null,\n                    type: null,\n                    mv_line_ids: mv_line_ids,\n                    new_mv_line_dicts: new_mv_line_dicts\n                });\n            }\n            line.reconciliation_proposition = [];\n        });\n        if (process_reconciliations.length) {\n            def = self._rpc({\n                    model: 'account.reconciliation.widget',\n                    method: 'process_move_lines',\n                    args: [process_reconciliations],\n                });\n        }\n\n        return def.then(function() {\n            var defs = [];\n            var account_ids = [];\n            var partner_ids = [];\n            _.each(handles, function (handle) {\n                var line = self.getLine(handle);\n                if (line.reconciled) {\n                    return;\n                }\n                line.filter_match = \"\";\n                defs.push(self._performMoveLine(handle, 'match').then(function () {\n                    if(!line.mv_lines_match.length) {\n                        self.valuenow++;\n                        reconciled.push(handle);\n                        line.reconciled = true;\n                        if (line.type === 'accounts') {\n                            account_ids.push(line.account_id.id);\n                        } else {\n                            partner_ids.push(line.partner_id.id);\n                        }\n                    }\n                }));\n            });\n            return Promise.all(defs).then(function () {\n                if (partner_ids.length) {\n                    self._rpc({\n                            model: 'res.partner',\n                            method: 'mark_as_reconciled',\n                            args: [partner_ids],\n                        });\n                }\n                return {reconciled: reconciled, updated: _.difference(handles, reconciled)};\n            });\n        });\n    },\n    removeProposition: function (handle, id) {\n        var self = this;\n        var line = this.getLine(handle);\n        var defs = [];\n        var prop = _.find(line.reconciliation_proposition, {'id' : id});\n        if (prop) {\n            line.reconciliation_proposition = _.filter(line.reconciliation_proposition, function (p) {\n                return p.id !== prop.id && p.id !== prop.link && p.link !== prop.id && (!p.link || p.link !== prop.link);\n            });\n            line.mv_lines_match = line.mv_lines_match || [];\n            line.mv_lines_match.unshift(prop);\n\n            // No proposition left and then, reset the st_line partner.\n            if(line.reconciliation_proposition.length == 0 && line.st_line.has_no_partner)\n                defs.push(self.changePartner(line.handle));\n        }\n        line.mode = (id || line.mode !== \"create\") && isNaN(id) ? 'create' : 'match';\n        defs.push(this._computeLine(line));\n        self._refresh_partial_rec_preview(line);\n        return Promise.all(defs).then(function() {\n            return self.changeMode(handle, line.mode, true);\n        })\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * override change the balance type to display or not the reconcile button\n     *\n     * @override\n     * @private\n     * @param {Object} line\n     * @returns {Promise}\n     */\n    _computeLine: function (line) {\n        return this._super(line).then(function () {\n            var props = _.reject(line.reconciliation_proposition, 'invalid');\n            _.each(line.reconciliation_proposition, function(p) {\n                delete p.is_move_line;\n            });\n            line.balance.type = -1;\n            if (!line.balance.amount_currency && props.length) {\n                line.balance.type = 1;\n            } else if(_.any(props, function (prop) {return prop.amount > 0;}) &&\n                     _.any(props, function (prop) {return prop.amount < 0;})) {\n                line.balance.type = 0;\n            }\n        });\n    },\n    /**\n     * Format each server lines and propositions and compute all lines\n     *\n     * @see '_computeLine'\n     *\n     * @private\n     * @param {'customers' | 'suppliers' | 'accounts'} type\n     * @param {Object} data\n     * @returns {Promise}\n     */\n    _formatLine: function (type, data) {\n        var line = this.lines[_.uniqueId('rline')] = _.extend(data, {\n            type: type,\n            reconciled: false,\n            mode: 'inactive',\n            limitMoveLines: this.limitMoveLines,\n            filter_match: \"\",\n            reconcileModels: this.reconcileModels,\n            account_id: this._formatNameGet([data.account_id, data.account_name]),\n            st_line: data,\n            visible: true\n        });\n        this._formatLineProposition(line, line.reconciliation_proposition);\n        if (!line.reconciliation_proposition.length) {\n            delete line.reconciliation_proposition;\n        }\n        return this._computeLine(line);\n    },\n    /**\n     * override to add journal_id\n     *\n     * @override\n     * @private\n     * @param {Object} line\n     * @param {Object} props\n     */\n    _formatLineProposition: function (line, props) {\n        var self = this;\n        this._super(line, props);\n        if (props.length) {\n            _.each(props, function (prop) {\n                var tmp_value = prop.debit || prop.credit;\n                prop.credit = prop.credit !== 0 ? 0 : tmp_value;\n                prop.debit = prop.debit !== 0 ? 0 : tmp_value;\n                prop.amount = -prop.amount;\n                prop.journal_id = self._formatNameGet(prop.journal_id || line.journal_id);\n                prop.to_check = !!prop.to_check;\n            });\n        }\n    },\n    /**\n     * override to add journal_id on tax_created_line\n     *\n     * @private\n     * @param {Object} line\n     * @param {Object} values\n     * @returns {Object}\n     */\n    _formatQuickCreate: function (line, values) {\n        // Add journal to created line\n        if (values && values.journal_id === undefined && line && line.createForm && line.createForm.journal_id) {\n            values.journal_id = line.createForm.journal_id;\n        }\n        return this._super(line, values);\n    },\n    /**\n     * @override\n     * @param {object} prop\n     * @returns {Boolean}\n     */\n    _isDisplayedProposition: function (prop) {\n        return !!prop.journal_id && this._super(prop);\n    },\n    /**\n     * @override\n     * @param {object} prop\n     * @returns {Boolean}\n     */\n    _isValid: function (prop) {\n        return prop.journal_id && this._super(prop);\n    },\n    /**\n     * Fetch 'account.move.line' propositions.\n     *\n     * @see '_formatMoveLine'\n     *\n     * @override\n     * @private\n     * @param {string} handle\n     * @returns {Promise}\n     */\n    _performMoveLine: function (handle, mode, limit) {\n        limit = limit || this.limitMoveLines;\n        var line = this.getLine(handle);\n        var excluded_ids = _.map(_.union(line.reconciliation_proposition, line['mv_lines_'+mode]), function (prop) {\n            return _.isNumber(prop.id) ? prop.id : null;\n        }).filter(id => id != null);\n        var filter = line.filter_match || \"\";\n        return this._rpc({\n                model: 'account.reconciliation.widget',\n                method: 'get_move_lines_for_manual_reconciliation',\n                kwargs: {\n                    account_id: line.account_id.id,\n                    partner_id: line.partner_id,\n                    excluded_ids: excluded_ids,\n                    search_str: filter,\n                    limit: limit,\n                },\n                context: this.context,\n            })\n            .then(this._formatMoveLine.bind(this, handle, ''));\n    },\n\n    _formatToProcessReconciliation: function (line, prop) {\n        var result = this._super(line, prop);\n        result['date'] = prop.date;\n        return result;\n    },\n    _getDefaultMode: function(handle) {\n        var line = this.getLine(handle);\n        if (line.balance.amount === 0 && (!line.st_line.mv_lines_match || line.st_line.mv_lines_match.length === 0)) {\n            return 'inactive';\n        }\n        return line.mv_lines_match.length > 0 ? 'match' : 'create';\n    },\n    _formatMoveLine: function (handle, mode, mv_lines) {\n        var self = this;\n        var line = this.getLine(handle);\n        line.mv_lines_match = _.uniq([].concat(line.mv_lines_match || [], mv_lines), l => l.id);\n        if (mv_lines[0]){\n            line.remaining_match = mv_lines[0].recs_count - mv_lines.length;\n        } else if (line.mv_lines_match.length == 0) {\n            line.remaining_match = 0;\n        }\n        this._formatLineProposition(line, mv_lines);\n\n        if (line.mode !== 'create' && !line.mv_lines_match.length && !line.filter_match.length) {\n            line.mode = this.avoidCreate || !line.balance.amount ? 'inactive' : 'create';\n            if (line.mode === 'create') {\n                return this._computeLine(line).then(function () {\n                    return self.createProposition(handle);\n                });\n            }\n        } else {\n            return this._computeLine(line);\n        }\n    },\n});\n\nreturn {\n    StatementModel: StatementModel,\n    ManualModel: ManualModel,\n};\n});\n", "odoo.define('account.ReconciliationRenderer', function (require) {\n\"use strict\";\n\nvar Widget = require('web.Widget');\nvar FieldManagerMixin = require('web.FieldManagerMixin');\nvar relational_fields = require('web.relational_fields');\nvar basic_fields = require('web.basic_fields');\nvar core = require('web.core');\nvar time = require('web.time');\nvar session = require('web.session');\nvar qweb = core.qweb;\nvar _t = core._t;\n\nconst { sprintf } = require(\"@web/core/utils/strings\")\nconst { ReconciliationRainbowManComponent } = require(\"@account_accountant/js/reconciliation/reconciliation_rainbowman_component\")\n\n/**\n * rendering of the bank statement action contains progress bar, title and\n * auto reconciliation button\n */\nvar StatementRenderer = Widget.extend(FieldManagerMixin, {\n    template: 'reconciliation.statement',\n    events: {\n        'click *[rel=\"do_action\"]': '_onDoAction',\n    },\n    /**\n     * @override\n     */\n    init: function (parent, model, state) {\n        this._super(parent);\n        this.model = model;\n        this._initialState = state;\n    },\n    /**\n     * display iniial state and create the name statement field\n     *\n     * @override\n     */\n    start: function () {\n        var self = this;\n        var defs = [this._super.apply(this, arguments)];\n        this.time = Date.now();\n        this.$progress = $('');\n\n        return Promise.all(defs);\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n    showRainbowMan: function (state) {\n        if (this.model.display_context !== 'validate') {\n            return\n        }\n\n        const dt = Date.now()-this.time;\n        const duration = moment(dt).utc().format(time.getLangTimeFormat());\n        const number = state.valuenow;\n        const timePerTransaction = Math.round(dt / 1000 / state.valuemax);\n\n        this.trigger_up('show_effect', {\n            type: 'rainbow_man',\n            fadeout: 'no',\n            props: {\n                Component: ReconciliationRainbowManComponent,\n                props: {\n                    duration: duration,\n                    number: number,\n                    timePerTransaction: timePerTransaction,\n                    context: state.context,\n                    bank_statement_id: state.bank_statement_id,\n                    onButtonBackToStatementClicked: (journalId) => this._onGoToBankStatement(journalId),\n                    onButtonCloseStatementClicked: () => this._onCloseBankStatement(),\n                }\n            },\n            message: sprintf(\n                _t(`Congrats, you're all done! You reconciled %s transactions in %s. That's on average %s seconds per transaction.`),\n                number,\n                duration,\n                timePerTransaction\n            )\n        });\n    },\n    /**\n     * update the statement rendering\n     *\n     * @param {object} state - statement data\n     * @param {integer} state.valuenow - for the progress bar\n     * @param {integer} state.valuemax - for the progress bar\n     * @param {string} state.title - for the progress bar\n     * @param {[object]} [state.notifications]\n     */\n    update: function (state) {\n        var self = this;\n        this._updateProgressBar(state);\n\n        if (state.valuenow === state.valuemax && !this.$('.done_message').length) {\n            this.showRainbowMan(state);\n        }\n\n        if (state.notifications) {\n            this._renderNotifications(state.notifications);\n        }\n    },\n    _updateProgressBar: function(state) {\n        this.$progress.find('.valuenow').text(state.valuenow);\n        this.$progress.find('.valuemax').text(state.valuemax);\n        this.$progress.find('.progress-bar')\n            .attr('aria-valuenow', state.valuenow)\n            .attr('aria-valuemax', state.valuemax)\n            .css('width', (state.valuenow/state.valuemax*100) + '%');\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n    /**\n     * render the notifications\n     *\n     * @param {[object]} notifications\n     */\n    _renderNotifications: function(notifications) {\n        this.$(\".notification_area\").empty();\n        for (var i=0; i<notifications.length; i++) {\n            var $notification = $(qweb.render(\"reconciliation.notification\", notifications[i])).hide();\n            $notification.appendTo(this.$(\".notification_area\")).slideDown(300);\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * Click on close bank statement button, this will\n     * close and then open form view of bank statement\n     * @param {MouseEvent} event\n     */\n    _onCloseBankStatement: function (e) {\n        this.trigger_up('close_statement');\n    },\n    /**\n     * @private\n     * @param {MouseEvent} event\n     */\n    _onDoAction: function(e) {\n        e.preventDefault();\n        var name = e.currentTarget.dataset.action_name;\n        var model = e.currentTarget.dataset.model;\n        if (e.currentTarget.dataset.ids) {\n            var ids = e.currentTarget.dataset.ids.split(\",\").map(Number);\n            var domain = [['id', 'in', ids]];\n        } else {\n            var domain = e.currentTarget.dataset.domain;\n        }\n        var context = e.currentTarget.dataset.context;\n        var tag = e.currentTarget.dataset.tag;\n        if (tag) {\n            this.do_action({\n                type: 'ir.actions.client',\n                tag: tag,\n                context: context,\n            })\n        } else {\n            this.do_action({\n                name: name,\n                res_model: model,\n                domain: domain,\n                context: context,\n                views: [[false, 'list'], [false, 'form']],\n                type: 'ir.actions.act_window',\n                view_mode: \"list\"\n            });\n        }\n    },\n    /**\n     * Open the list view for account.bank.statement model\n     * @private\n     * @param {MouseEvent} event\n     */\n    _onGoToBankStatement: function (journalId) {\n        this.do_action({\n            name: 'Bank Statements',\n            res_model: 'account.bank.statement',\n            views: [[false, 'list'], [false, 'form']],\n            type: 'ir.actions.act_window',\n            context: {search_default_journal_id: journalId, 'journal_type':'bank'},\n            view_mode: 'form',\n        });\n    },\n});\n\n\n/**\n * rendering of the bank statement line, contains line data, proposition and\n * view for 'match' and 'create' mode\n */\nvar LineRenderer = Widget.extend(FieldManagerMixin, {\n    template: \"reconciliation.line\",\n    events: {\n        'click .accounting_view caption .o_buttons button': '_onValidate',\n        'click .accounting_view tfoot': '_onChangeTab',\n        'click': '_onTogglePanel',\n        'click .o_field_widget': '_onStopPropagation',\n        'keydown .o_input, .edit_amount_input': '_onStopPropagation',\n        'click .o_notebook li a': '_onChangeTab',\n        'click .cell': '_onEditAmount',\n        'change input.filter': '_onFilterChange',\n        'click .match .load-more a': '_onLoadMore',\n        'click .match .mv_line td': '_onSelectMoveLine',\n        'click .accounting_view tbody .mv_line td': '_onSelectProposition',\n        'click .o_reconcile_models button': '_onQuickCreateProposition',\n        'click .create .add_line': '_onCreateProposition',\n        'click .reconcile_model_create': '_onCreateReconcileModel',\n        'click .reconcile_model_edit': '_onEditReconcileModel',\n        'keyup input': '_onInputKeyup',\n        'blur input': '_onInputKeyup',\n        'keydown': '_onKeydown',\n    },\n    custom_events: _.extend({}, FieldManagerMixin.custom_events, {\n        'field_changed': '_onFieldChanged',\n    }),\n    _avoidFieldUpdate: {},\n    MV_LINE_DEBOUNCE: 200,\n\n    _onKeydown: function (ev) {\n        switch (ev.which) {\n            case $.ui.keyCode.ENTER:\n                this.trigger_up('navigation_move', {direction: 'validate', handle: this.handle});\n                break;\n            case $.ui.keyCode.UP:\n                ev.stopPropagation();\n                ev.preventDefault();\n                this.trigger_up('navigation_move', {direction: 'up', handle: this.handle});\n                break;\n            case $.ui.keyCode.DOWN:\n                ev.stopPropagation();\n                ev.preventDefault();\n                this.trigger_up('navigation_move', {direction: 'down', handle: this.handle});\n                break;\n        }\n    },\n\n    /**\n     * create partner_id field in editable mode\n     *\n     * @override\n     */\n    init: function (parent, model, state) {\n        this._super(parent);\n        FieldManagerMixin.init.call(this);\n\n        this.model = model;\n        this._initialState = state;\n        if (this.MV_LINE_DEBOUNCE) {\n            this._onSelectMoveLine = _.debounce(this._onSelectMoveLine, this.MV_LINE_DEBOUNCE, true);\n        } else {\n            this._onSelectMoveLine = this._onSelectMoveLine;\n        }\n    },\n    /**\n     * @override\n     */\n    start: function () {\n        var self = this;\n        var def1 = this._makePartnerRecord(this._initialState.st_line.partner_id, this._initialState.st_line.partner_name).then(function (recordID) {\n            self.fields = {\n                partner_id : new relational_fields.FieldMany2One(self,\n                    'partner_id',\n                    self.model.get(recordID), {\n                        mode: 'edit',\n                        attrs: {\n                            placeholder: self._initialState.st_line.communication_partner_name || _t('Select Partner'),\n                        }\n                    }\n                )\n            };\n            self.fields.partner_id.insertAfter(self.$('.accounting_view caption .o_buttons'));\n        });\n        $('<span class=\"line_info_button fa fa-info-circle\"/>')\n            .appendTo(this.$('thead .cell_info_popover'))\n            .attr(\"data-content\", qweb.render('reconciliation.line.statement_line.details', {'state': this._initialState}));\n        this.$el.popover({\n            'selector': '.line_info_button',\n            'placement': 'left',\n            'container': this.$el,\n            'html': true,\n            // disable bootstrap sanitizer because we use a table that has been\n            // rendered using qweb.render so it is safe and also because sanitizer escape table by default.\n            'sanitize': false,\n            'trigger': 'hover',\n            'animation': false,\n            'toggle': 'popover'\n        });\n        var def2 = this._super.apply(this, arguments);\n        var def3 = session.user_has_group('analytic.group_analytic_tags').then(function(has_group) {\n                self.group_tags = has_group;\n            });\n        var def4 = session.user_has_group('analytic.group_analytic_accounting').then(function(has_group) {\n                self.group_acc = has_group;\n            });\n        return Promise.all([def1, def2, def3, def4]);\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * update the statement line rendering\n     *\n     * @param {object} state - statement line\n     */\n    update: function (state) {\n        var self = this;\n        // isValid\n        var to_check_checked = !!(state.to_check);\n        this.$('caption .o_buttons button.o_validate').toggleClass('d-none', !!state.balance.type && !to_check_checked);\n        this.$('caption .o_buttons button.o_reconcile').toggleClass('d-none', state.balance.type <= 0 || to_check_checked);\n        this.$('caption .o_buttons .o_no_valid').toggleClass('d-none', state.balance.type >= 0);\n        self.$('caption .o_buttons button.o_validate').toggleClass('text-warning', to_check_checked);\n\n        // partner_id\n        this._makePartnerRecord(state.st_line.partner_id, state.st_line.partner_name).then(function (recordID) {\n            self.fields.partner_id.reset(self.model.get(recordID));\n            self.$el.attr('data-partner', state.st_line.partner_id);\n        });\n\n        // mode\n        this.$el.data('mode', state.mode).attr('data-mode', state.mode);\n        this.$('.o_notebook li a').attr('aria-selected', false);\n        this.$('.o_notebook li a').removeClass('active');\n        this.$('.o_notebook .tab-content .tab-pane').removeClass('active');\n        this.$('.o_notebook li a[href*=\"notebook_page_' + state.mode + '\"]').attr('aria-selected', true);\n        this.$('.o_notebook li a[href*=\"notebook_page_' + state.mode + '\"]').addClass('active');\n        this.$('.o_notebook .tab-content .tab-pane[id*=\"notebook_page_' + state.mode + '\"]').addClass('active');\n        this.$('.create, .match').each(function () {\n            $(this).removeAttr('style');\n        });\n\n        // reconciliation_proposition\n        var $props = this.$('.accounting_view tbody').empty();\n\n        // Search propositions that could be a partial credit/debit.\n        var props = [];\n        var balance = state.balance.amount_currency;\n        _.each(state.reconciliation_proposition, function (prop) {\n            if (prop.display) {\n                props.push(prop);\n            }\n        });\n\n        _.each(props, function (line) {\n            var $line = $(qweb.render(\"reconciliation.line.mv_line\", {'line': line, 'state': state, 'proposition': true}));\n            if (!isNaN(line.id)) {\n                $('<span class=\"line_info_button fa fa-info-circle\"/>')\n                    .appendTo($line.find('.cell_info_popover'))\n                    .attr(\"data-content\", qweb.render('reconciliation.line.mv_line.details', {'line': line}));\n            }\n            $props.append($line);\n        });\n\n        // mv_lines\n        var matching_modes = self.model.modes.filter(x => x.startsWith('match'));\n        for (let i = 0; i < matching_modes.length; i++) {\n            var stateMvLines = state['mv_lines_'+matching_modes[i]] || [];\n            var remaining = state['remaining_' + matching_modes[i]];\n            var $mv_lines = this.$('div[id*=\"notebook_page_' + matching_modes[i] + '\"] .match table tbody').empty();\n            this.$('.o_notebook li a[href*=\"notebook_page_' + matching_modes[i] + '\"]').parent().toggleClass('d-none', stateMvLines.length === 0 && !state['filter_'+matching_modes[i]]);\n\n            _.each(stateMvLines, function (line) {\n                var $line = $(qweb.render(\"reconciliation.line.mv_line\", {'line': line, 'state': state}));\n                if (!isNaN(line.id)) {\n                    $('<span class=\"line_info_button fa fa-info-circle\"/>')\n                    .appendTo($line.find('.cell_info_popover'))\n                    .attr(\"data-content\", qweb.render('reconciliation.line.mv_line.details', {'line': line}));\n                }\n                $mv_lines.append($line);\n            });\n            this.$('div[id*=\"notebook_page_' + matching_modes[i] + '\"] .match div.load-more').toggle(remaining > 0);\n            this.$('div[id*=\"notebook_page_' + matching_modes[i] + '\"] .match div.load-more span').text(remaining);\n        }\n\n        // balance\n        this.$('.popover').remove();\n        this.$('table tfoot').html(qweb.render(\"reconciliation.line.balance\", {'state': state}));\n\n        // create form\n        if (state.createForm) {\n            var createPromise;\n            if (!this.fields.account_id) {\n                createPromise = this._renderCreate(state);\n            }\n            Promise.resolve(createPromise).then(function(){\n                var data = self.model.get(self.handleCreateRecord).data;\n                return self.model.notifyChanges(self.handleCreateRecord, state.createForm)\n                    .then(function () {\n                    // FIXME can't it directly written REPLACE_WITH ids=state.createForm.analytic_tag_ids\n                        return self.model.notifyChanges(self.handleCreateRecord, {analytic_tag_ids: {operation: 'REPLACE_WITH', ids: []}})\n                    })\n                    .then(function (){\n                        var defs = [];\n                        _.each(state.createForm.analytic_tag_ids, function (tag) {\n                            defs.push(self.model.notifyChanges(self.handleCreateRecord, {analytic_tag_ids: {operation: 'ADD_M2M', ids: tag}}));\n                        });\n                        return Promise.all(defs);\n                    })\n                    .then(function () {\n                        return self.model.notifyChanges(self.handleCreateRecord, {tax_ids: {operation: 'REPLACE_WITH', ids: []}})\n                    })\n                    .then(function (){\n                        var defs = [];\n                        _.each(state.createForm.tax_ids, function (tag) {\n                            defs.push(self.model.notifyChanges(self.handleCreateRecord, {tax_ids: {operation: 'ADD_M2M', ids: tag}}));\n                        });\n                        return Promise.all(defs);\n                    })\n                    .then(function () {\n                        var record = self.model.get(self.handleCreateRecord);\n                        _.each(self.fields, function (field, fieldName) {\n                            if (self._avoidFieldUpdate[fieldName]) return;\n                            if (fieldName === \"partner_id\") return;\n                            if ((data[fieldName] || state.createForm[fieldName]) && !_.isEqual(state.createForm[fieldName], data[fieldName])) {\n                                field.reset(record);\n                            }\n                            if (fieldName === 'tax_ids') {\n                                if (!state.createForm[fieldName] || !state.createForm[fieldName].length || state.createForm[fieldName].length > 1) {\n                                    $('.create_force_tax_included').addClass('d-none');\n                                }\n                                else {\n                                    $('.create_force_tax_included').removeClass('d-none');\n                                    var price_include = state.createForm[fieldName][0].price_include;\n                                    var force_tax_included = state.createForm[fieldName][0].force_tax_included;\n                                    self.$('.create_force_tax_included input').prop('checked', force_tax_included);\n                                    self.$('.create_force_tax_included input').prop('disabled', price_include);\n                                }\n                            }\n                        });\n                        if (state.to_check) {\n                            // Set the to_check field to true if global to_check is set\n                            self.$('.create_to_check input').prop('checked', state.to_check).change();\n                        }\n                        return true;\n                    });\n            });\n        }\n        this.$('.create .add_line').toggle(!!state.balance.amount_currency);\n    },\n\n    updatePartialAmount: function(line_id, amount) {\n        var $line = this.$('.mv_line[data-line-id='+line_id+']');\n        $line.find('.edit_amount').addClass('d-none');\n        $line.find('.edit_amount_input').removeClass('d-none');\n        $line.find('.edit_amount_input').focus();\n        $line.find('.edit_amount_input').val(amount);\n        $line.find('.line_amount').addClass('d-none');\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {jQueryElement} $el\n     */\n    _destroyPopover: function ($el) {\n        var popover = $el.data('bs.popover');\n        if (popover) {\n            popover.dispose();\n        }\n    },\n    /**\n     * @private\n     * @param {integer} partnerID\n     * @param {string} partnerName\n     * @returns {string} local id of the dataPoint\n     */\n    _makePartnerRecord: function (partnerID, partnerName) {\n        var field = {\n            relation: 'res.partner',\n            type: 'many2one',\n            name: 'partner_id',\n        };\n        if (partnerID) {\n            field.value = [partnerID, partnerName];\n        }\n        return this.model.makeRecord('account.bank.statement.line', [field], {\n            partner_id: {\n                domain: [\"|\", [\"is_company\", \"=\", true], [\"parent_id\", \"=\", false]],\n                options: {\n                    no_open: true\n                }\n            }\n        });\n    },\n\n    /**\n     * create account_id, tax_ids, analytic_account_id, analytic_tag_ids, name and amount fields\n     *\n     * @private\n     * @param {object} state - statement line\n     * @returns {Promise}\n     */\n    _renderCreate: function (state) {\n        var self = this;\n        return this.model.makeRecord('account.bank.statement.line', [{\n            relation: 'account.account',\n            type: 'many2one',\n            name: 'account_id',\n            domain: [['company_id', '=', state.st_line.company_id], ['deprecated', '=', false]],\n        }, {\n            relation: 'account.journal',\n            type: 'many2one',\n            name: 'journal_id',\n            domain: [['company_id', '=', state.st_line.company_id], ['type', '=', 'general']],\n        }, {\n            relation: 'account.tax',\n            type: 'many2many',\n            name: 'tax_ids',\n            domain: [['company_id', '=', state.st_line.company_id]],\n        }, {\n            relation: 'account.analytic.account',\n            type: 'many2one',\n            name: 'analytic_account_id',\n            domain: [\"|\", ['company_id', '=', state.st_line.company_id], ['company_id', '=', false]],\n        }, {\n            relation: 'account.analytic.tag',\n            type: 'many2many',\n            name: 'analytic_tag_ids',\n            domain: [\"|\", ['company_id', '=', state.st_line.company_id], ['company_id', '=', false]],\n        }, {\n            type: 'boolean',\n            name: 'force_tax_included',\n        }, {\n            type: 'char',\n            name: 'name',\n        }, {\n            type: 'float',\n            name: 'amount',\n        }, {\n            type: 'char', //TODO is it a bug or a feature when type date exists ?\n            name: 'date',\n        }, {\n            type: 'boolean',\n            name: 'to_check',\n        }], {\n            account_id: {\n                string: _t(\"Account\"),\n            },\n            name: {string: _t(\"Label\")},\n            amount: {string: _t(\"Account\")},\n        }).then(function (recordID) {\n            self.handleCreateRecord = recordID;\n            var record = self.model.get(self.handleCreateRecord);\n\n            self.fields.account_id = new relational_fields.FieldMany2One(self,\n                'account_id', record, {mode: 'edit', attrs: {can_create:false}});\n\n            self.fields.journal_id = new relational_fields.FieldMany2One(self,\n                'journal_id', record, {mode: 'edit'});\n\n            self.fields.tax_ids = new relational_fields.FieldMany2ManyTags(self,\n                'tax_ids', record, {mode: 'edit', additionalContext: {append_type_to_tax_name: true}});\n\n            self.fields.analytic_account_id = new relational_fields.FieldMany2One(self,\n                'analytic_account_id', record, {mode: 'edit'});\n\n            self.fields.analytic_tag_ids = new relational_fields.FieldMany2ManyTags(self,\n                'analytic_tag_ids', record, {mode: 'edit'});\n\n            self.fields.force_tax_included = new basic_fields.FieldBoolean(self,\n                'force_tax_included', record, {mode: 'edit'});\n\n            self.fields.name = new basic_fields.FieldChar(self,\n                'name', record, {mode: 'edit'});\n\n            self.fields.amount = new basic_fields.FieldFloat(self,\n                'amount', record, {mode: 'edit'});\n\n            self.fields.date = new basic_fields.FieldDate(self,\n                'date', record, {mode: 'edit'});\n\n            self.fields.to_check = new basic_fields.FieldBoolean(self,\n                'to_check', record, {mode: 'edit'});\n\n            var $create = $(qweb.render(\"reconciliation.line.create\", {'state': state, 'group_tags': self.group_tags, 'group_acc': self.group_acc}));\n            self.fields.account_id.appendTo($create.find('.create_account_id .o_td_field'))\n                .then(addRequiredStyle.bind(self, self.fields.account_id));\n            self.fields.journal_id.appendTo($create.find('.create_journal_id .o_td_field'));\n            self.fields.tax_ids.appendTo($create.find('.create_tax_id .o_td_field'));\n            self.fields.analytic_account_id.appendTo($create.find('.create_analytic_account_id .o_td_field'));\n            self.fields.analytic_tag_ids.appendTo($create.find('.create_analytic_tag_ids .o_td_field'));\n            self.fields.force_tax_included.appendTo($create.find('.create_force_tax_included .o_td_field'));\n            self.fields.name.appendTo($create.find('.create_label .o_td_field'))\n                .then(addRequiredStyle.bind(self, self.fields.name));\n            self.fields.amount.appendTo($create.find('.create_amount .o_td_field'))\n                .then(addRequiredStyle.bind(self, self.fields.amount));\n            self.fields.date.appendTo($create.find('.create_date .o_td_field'));\n            self.fields.to_check.appendTo($create.find('.create_to_check .o_td_field'));\n            self.$('.create').append($create);\n\n            function addRequiredStyle(widget) {\n                widget.$el.addClass('o_required_modifier');\n            }\n        });\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n    /**\n     * The event on the partner m2o widget was propagated to the bank statement\n     * line widget, causing it to expand and the others to collapse. This caused\n     * the dropdown to be poorly placed and an unwanted update of this widget.\n     *\n     * @private\n     */\n    _onStopPropagation: function(ev) {\n        ev.stopPropagation();\n    },\n\n    /**\n     * @private\n     * @param {MouseEvent} event\n     */\n    _onCreateReconcileModel: function (event) {\n        event.preventDefault();\n        var self = this;\n\n        var propositions_for_model = [];\n        var base_lines_balance = 0; // For manual reconciliation widget, to count the total balance on which to apply the write off\n        for (var i = 0 ; i < this._initialState.reconciliation_proposition.length; i++) {\n            var rec_proposition = this._initialState.reconciliation_proposition[i];\n\n            if (Number.isInteger(rec_proposition.id)) {\n                base_lines_balance += rec_proposition.amount;\n            }\n            else if (!rec_proposition.tax_repartition_line_id && rec_proposition.account_id) {\n                propositions_for_model.push({\n                    label: rec_proposition.name,\n                    amount: rec_proposition.amount,\n                    account_id: rec_proposition.account_id.id,\n                    tax_ids: rec_proposition.tax_ids && rec_proposition.tax_ids.map(x=> x.id) || [],\n                    label: rec_proposition.name,\n                })\n            }\n        }\n\n        /*\n        Depending we are on the manual reconciliation widget or the bank\n        reconciliation widget, the computation of the base amount for the\n        write off isn't the same.\n        */\n        var st_line_vals = this._initialState.st_line;\n        var proposition_base_amount = st_line_vals.amount != undefined ? st_line_vals.amount : base_lines_balance;\n\n        return this._rpc({\n            model: 'account.reconciliation.widget',\n            method: 'open_rec_model_creation_widget',\n            args: [propositions_for_model, Math.abs(proposition_base_amount), this._initialState.to_check],\n        }).then(function(rslt) {\n            self.do_action(rslt, {\n                'on_close': function() {self.trigger_up('reload');}\n            })\n        })\n    },\n    _editAmount: function (event) {\n        event.stopPropagation();\n        var $line = $(event.target);\n        var moveLineId = $line.closest('.mv_line').data('line-id');\n        this.trigger_up('partial_reconcile', {'data': {mvLineId: moveLineId, 'amount': $line.val()}});\n    },\n    _onEditAmount: function (event) {\n        event.preventDefault();\n        event.stopPropagation();\n        // Don't call when clicking inside the input field\n        if (! $(event.target).hasClass('edit_amount_input')){\n            var $line = $(event.target);\n            this.trigger_up('getPartialAmount', {'data': $line.closest('.mv_line').data('line-id')});\n        }\n    },\n    /**\n     * @private\n     * @param {MouseEvent} event\n     */\n    _onEditReconcileModel: function (event) {\n        event.preventDefault();\n        var self = this;\n        this.do_action({\n            type: 'ir.actions.act_window',\n            res_model: 'account.reconcile.model',\n            views: [[false, 'list'], [false, 'form']],\n            view_mode: \"list\",\n            target: 'current'\n        },\n        {\n            on_reverse_breadcrumb: function() {self.trigger_up('reload');},\n        });\n    },\n    /**\n     * @private\n     * @param {OdooEvent} event\n     */\n    _onFieldChanged: function (event) {\n        event.stopPropagation();\n        var fieldName = event.target.name;\n        if (fieldName === 'partner_id') {\n            var partner_id = event.data.changes.partner_id;\n            this.trigger_up('change_partner', {'data': partner_id});\n        } else {\n            if (event.data.changes.amount && isNaN(event.data.changes.amount)) {\n                return;\n            }\n            this.trigger_up('update_proposition', {'data': event.data.changes});\n        }\n    },\n    /**\n     * @private\n     */\n    _onTogglePanel: function () {\n        if (this.$el[0].getAttribute('data-mode') == 'inactive')\n            this.trigger_up('change_mode', {'data': 'default'});\n    },\n    /**\n     * @private\n     */\n    _onChangeTab: function(event) {\n        if (event.currentTarget.nodeName === 'TFOOT') {\n            this.trigger_up('change_mode', {'data': 'next'});\n        } else {\n            var modes = this.model.modes;\n            var selected_mode = modes.find(function(e) {return event.target.getAttribute('href').includes(e)});\n            if (selected_mode) {\n                this.trigger_up('change_mode', {'data': selected_mode});\n            }\n        }\n    },\n    /**\n     * @private\n     * @param {input event} event\n     */\n    _onFilterChange: function (event) {\n        this.trigger_up('change_filter', {'data': _.str.strip($(event.target).val())});\n    },\n    /**\n     * @private\n     * @param {keyup event} event\n     */\n    _onInputKeyup: function (event) {\n        var target_partner_id = $(event.target).parents('[name=\"partner_id\"]');\n        if (target_partner_id.length === 1) {\n            return;\n        }\n        if(event.keyCode === 13) {\n            if ($(event.target).hasClass('edit_amount_input')) {\n                $(event.target).blur();\n                return;\n            }\n            var created_lines = _.findWhere(this.model.lines, {mode: 'create'});\n            if (created_lines && created_lines.balance.amount) {\n                this._onCreateProposition();\n            }\n            return;\n        }\n        if ($(event.target).hasClass('edit_amount_input')) {\n            if (event.type === 'keyup') {\n                return;\n            }\n            else {\n                return this._editAmount(event);\n            }\n        }\n\n        var self = this;\n        for (var fieldName in this.fields) {\n            var field = this.fields[fieldName];\n            if (!field.$el.is(event.target)) {\n                continue;\n            }\n            this._avoidFieldUpdate[field.name] = event.type !== 'focusout';\n            field.value = false;\n            field._setValue($(event.target).val()).then(function () {\n                self._avoidFieldUpdate[field.name] = false;\n            });\n            break;\n        }\n    },\n    /**\n     * @private\n     */\n    _onLoadMore: function (ev) {\n        ev.preventDefault();\n        this.trigger_up('load_more');\n    },\n    /**\n     * @private\n     * @param {MouseEvent} event\n     */\n    _onSelectMoveLine: function (event) {\n        var $el = $(event.target);\n        $el.prop('disabled', true);\n        this._destroyPopover($el);\n        var moveLineId = $el.closest('.mv_line').data('line-id');\n        this.trigger_up('add_proposition', {'data': moveLineId});\n    },\n    /**\n     * @private\n     * @param {MouseEvent} event\n     */\n    _onSelectProposition: function (event) {\n        var $el = $(event.target);\n        this._destroyPopover($el);\n        var moveLineId = $el.closest('.mv_line').data('line-id');\n        this.trigger_up('remove_proposition', {'data': moveLineId});\n    },\n    /**\n     * @private\n     * @param {MouseEvent} event\n     */\n    _onQuickCreateProposition: function (event) {\n        document.activeElement && document.activeElement.blur();\n        this.trigger_up('quick_create_proposition', {'data': $(event.target).closest('button').data('reconcile-model-id')});\n    },\n    /**\n     * @private\n     */\n    _onCreateProposition: function () {\n        document.activeElement && document.activeElement.blur();\n        var invalid = [];\n        _.each(this.fields, function (field) {\n            if (!field.isValid()) {\n                invalid.push(field.string);\n            }\n        });\n        if (invalid.length) {\n            this.displayNotification({ title: _t(\"Some fields are undefined\"), message: invalid.join(', '), type: 'danger' });\n            return;\n        }\n        this.trigger_up('create_proposition');\n    },\n    /**\n     * @private\n     */\n    _onValidate: function () {\n        this.trigger_up('validate');\n    }\n});\n\n\n/**\n * rendering of the manual reconciliation action contains progress bar, title\n * and auto reconciliation button\n */\nvar ManualRenderer = StatementRenderer.extend({\n    template: \"reconciliation.manual.statement\",\n\n});\n\n\n/**\n * rendering of the manual reconciliation, contains line data, proposition and\n * view for 'match' mode\n */\nvar ManualLineRenderer = LineRenderer.extend({\n    template: \"reconciliation.manual.line\",\n     /**\n     * @override\n     * @param {string} handle\n     * @param {number} proposition id (move line id)\n     * @returns {Promise}\n     */\n    removeProposition: function (handle, id) {\n        if (!id) {\n            return Promise.resolve();\n        }\n        return this._super(handle, id);\n    },\n    /**\n     * move the partner field\n     *\n     * @override\n     */\n    start: function () {\n        var self = this;\n        return this._super.apply(this, arguments).then(function () {\n            return self.model.makeRecord('account.move.line', [{\n                relation: 'account.account',\n                type: 'many2one',\n                name: 'account_id',\n                value: [self._initialState.account_id.id, self._initialState.account_id.display_name],\n            }]).then(function (recordID) {\n                self.fields.title_account_id = new relational_fields.FieldMany2One(self,\n                    'account_id',\n                    self.model.get(recordID),\n                    {mode: 'readonly'}\n                );\n            }).then(function () {\n                return self.fields.title_account_id.appendTo(self.$('.accounting_view thead td:eq(0) span:first'));\n            });\n        });\n    },\n    /**\n     * @override\n     */\n    update: function (state) {\n        this._super(state);\n        var props = _.filter(state.reconciliation_proposition, {'display': true});\n        if (!props.length) {\n            var $line = $(qweb.render(\"reconciliation.line.mv_line\", {'line': {}, 'state': state}));\n            this.$('.accounting_view tbody').append($line);\n        }\n    },\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n    /**\n     * display journal_id field\n     *\n     * @override\n     */\n    _renderCreate: function (state) {\n        var self = this;\n        var parentPromise = this._super(state).then(function() {\n            self.$('.create .create_journal_id').show();\n            self.$('.create .create_date').removeClass('d-none');\n            self.$('.create .create_journal_id .o_input').addClass('o_required_modifier');\n        });\n        return parentPromise;\n    },\n\n});\n\n\nreturn {\n    StatementRenderer: StatementRenderer,\n    ManualRenderer: ManualRenderer,\n    LineRenderer: LineRenderer,\n    ManualLineRenderer: ManualLineRenderer,\n};\n});\n", "/** @odoo-module */\n\nconst {\u00a0Component } = owl;\n\nexport class ReconciliationRainbowManComponent extends Component {}\n\nReconciliationRainbowManComponent.template = \"reconciliation.done\";\n", "odoo.define('purchase.dashboard', function (require) {\n\"use strict\";\n\n/**\n * This file defines the Purchase Dashboard view (alongside its renderer, model\n * and controller). This Dashboard is added to the top of list and kanban Purchase\n * views, it extends both views with essentially the same code except for\n * _onDashboardActionClicked function so we can apply filters without changing our\n * current view.\n */\n\nvar core = require('web.core');\nvar ListController = require('web.ListController');\nvar ListModel = require('web.ListModel');\nvar ListRenderer = require('web.ListRenderer');\nvar ListView = require('web.ListView');\nvar KanbanController = require('web.KanbanController');\nvar KanbanModel = require('web.KanbanModel');\nvar KanbanRenderer = require('web.KanbanRenderer');\nvar KanbanView = require('web.KanbanView');\nvar SampleServer = require('web.SampleServer');\nvar view_registry = require('web.view_registry');\nconst session = require('web.session');\n\nvar QWeb = core.qweb;\n\n// Add mock of method 'retrieve_dashboard' in SampleServer, so that we can have\n// the sample data in empty purchase kanban and list view\nlet dashboardValues;\nSampleServer.mockRegistry.add('purchase.order/retrieve_dashboard', () => {\n    return Object.assign({}, dashboardValues);\n});\n\n\n//--------------------------------------------------------------------------\n// List View\n//--------------------------------------------------------------------------\n\nvar PurchaseListDashboardRenderer = ListRenderer.extend({\n    events:_.extend({}, ListRenderer.prototype.events, {\n        'click .o_dashboard_action': '_onDashboardActionClicked',\n    }),\n    /**\n     * @override\n     * @private\n     * @returns {Promise}\n     */\n    _renderView: function () {\n        var self = this;\n        return this._super.apply(this, arguments).then(function () {\n            var values = self.state.dashboardValues;\n            var purchase_dashboard = QWeb.render('purchase.PurchaseDashboard', {\n                values: values,\n            });\n            self.$el.prepend(purchase_dashboard);\n        });\n    },\n\n    /**\n     * @private\n     * @param {MouseEvent}\n     */\n    _onDashboardActionClicked: function (e) {\n        e.preventDefault();\n        var $action = $(e.currentTarget);\n        this.trigger_up('dashboard_open_action', {\n            action_name: \"purchase.purchase_action_dashboard_list\",\n            action_context: $action.attr('context'),\n        });\n    },\n});\n\nvar PurchaseListDashboardModel = ListModel.extend({\n    /**\n     * @override\n     */\n    init: function () {\n        this.dashboardValues = {};\n        this._super.apply(this, arguments);\n    },\n\n    /**\n     * @override\n     */\n    __get: function (localID) {\n        var result = this._super.apply(this, arguments);\n        if (_.isObject(result)) {\n            result.dashboardValues = this.dashboardValues[localID];\n        }\n        return result;\n    },\n    /**\n     * @override\n     * @returns {Promise}\n     */\n    __load: function () {\n        return this._loadDashboard(this._super.apply(this, arguments));\n    },\n    /**\n     * @override\n     * @returns {Promise}\n     */\n    __reload: function () {\n        return this._loadDashboard(this._super.apply(this, arguments));\n    },\n\n    /**\n     * @private\n     * @param {Promise} super_def a promise that resolves with a dataPoint id\n     * @returns {Promise -> string} resolves to the dataPoint id\n     */\n    _loadDashboard: function (super_def) {\n        var self = this;\n        var dashboard_def = this._rpc({\n            model: 'purchase.order',\n            method: 'retrieve_dashboard',\n            context: session.user_context,\n        });\n        return Promise.all([super_def, dashboard_def]).then(function(results) {\n            var id = results[0];\n            dashboardValues = results[1];\n            self.dashboardValues[id] = dashboardValues;\n            return id;\n        });\n    },\n});\n\nvar PurchaseListDashboardController = ListController.extend({\n    custom_events: _.extend({}, ListController.prototype.custom_events, {\n        dashboard_open_action: '_onDashboardOpenAction',\n    }),\n\n    /**\n     * @private\n     * @param {OdooEvent} e\n     */\n    _onDashboardOpenAction: function (e) {\n        return this.do_action(e.data.action_name,\n            {additional_context: JSON.parse(e.data.action_context)});\n    },\n});\n\nvar PurchaseListDashboardView = ListView.extend({\n    config: _.extend({}, ListView.prototype.config, {\n        Model: PurchaseListDashboardModel,\n        Renderer: PurchaseListDashboardRenderer,\n        Controller: PurchaseListDashboardController,\n    }),\n});\n\n//--------------------------------------------------------------------------\n// Kanban View\n//--------------------------------------------------------------------------\n\nvar PurchaseKanbanDashboardRenderer = KanbanRenderer.extend({\n    events:_.extend({}, KanbanRenderer.prototype.events, {\n        'click .o_dashboard_action': '_onDashboardActionClicked',\n    }),\n    /**\n     * @override\n     * @private\n     * @returns {Promise}\n     */\n    _render: function () {\n        var self = this;\n        return this._super.apply(this, arguments).then(function () {\n            var values = self.state.dashboardValues;\n            var purchase_dashboard = QWeb.render('purchase.PurchaseDashboard', {\n                values: values,\n            });\n            self.$el.parent().find(\".o_purchase_dashboard\").remove();\n            self.$el.before(purchase_dashboard);\n        });\n    },\n\n    /**\n     * @private\n     * @param {MouseEvent}\n     */\n    _onDashboardActionClicked: function (e) {\n        e.preventDefault();\n        var $action = $(e.currentTarget);\n        this.trigger_up('dashboard_open_action', {\n            action_name: \"purchase.purchase_action_dashboard_kanban\",\n            action_context: $action.attr('context'),\n        });\n    },\n});\n\nvar PurchaseKanbanDashboardModel = KanbanModel.extend({\n    /**\n     * @override\n     */\n    init: function () {\n        this.dashboardValues = {};\n        this._super.apply(this, arguments);\n    },\n\n    /**\n     * @override\n     */\n    __get: function (localID) {\n        var result = this._super.apply(this, arguments);\n        if (_.isObject(result)) {\n            result.dashboardValues = this.dashboardValues[localID];\n        }\n        return result;\n    },\n    /**\n     * @override\n     * @returns {Promise}\n     */\n    __load: function () {\n        return this._loadDashboard(this._super.apply(this, arguments));\n    },\n    /**\n     * @override\n     * @returns {Promise}\n     */\n    __reload: function () {\n        return this._loadDashboard(this._super.apply(this, arguments));\n    },\n\n    /**\n     * @private\n     * @param {Promise} super_def a promise that resolves with a dataPoint id\n     * @returns {Promise -> string} resolves to the dataPoint id\n     */\n    _loadDashboard: function (super_def) {\n        var self = this;\n        var dashboard_def = this._rpc({\n            model: 'purchase.order',\n            method: 'retrieve_dashboard',\n            context: session.user_context,\n        });\n        return Promise.all([super_def, dashboard_def]).then(function(results) {\n            var id = results[0];\n            dashboardValues = results[1];\n            self.dashboardValues[id] = dashboardValues;\n            return id;\n        });\n    },\n});\n\nvar PurchaseKanbanDashboardController = KanbanController.extend({\n    custom_events: _.extend({}, KanbanController.prototype.custom_events, {\n        dashboard_open_action: '_onDashboardOpenAction',\n    }),\n\n    /**\n     * @private\n     * @param {OdooEvent} e\n     */\n    _onDashboardOpenAction: function (e) {\n        return this.do_action(e.data.action_name,\n            {additional_context: JSON.parse(e.data.action_context)});\n    },\n});\n\nvar PurchaseKanbanDashboardView = KanbanView.extend({\n    config: _.extend({}, KanbanView.prototype.config, {\n        Model: PurchaseKanbanDashboardModel,\n        Renderer: PurchaseKanbanDashboardRenderer,\n        Controller: PurchaseKanbanDashboardController,\n    }),\n});\n\nview_registry.add('purchase_list_dashboard', PurchaseListDashboardView);\nview_registry.add('purchase_kanban_dashboard', PurchaseKanbanDashboardView);\n\nreturn {\n    PurchaseListDashboardModel: PurchaseListDashboardModel,\n    PurchaseListDashboardRenderer: PurchaseListDashboardRenderer,\n    PurchaseListDashboardController: PurchaseListDashboardController,\n    PurchaseKanbanDashboardModel: PurchaseKanbanDashboardModel,\n    PurchaseKanbanDashboardRenderer: PurchaseKanbanDashboardRenderer,\n    PurchaseKanbanDashboardController: PurchaseKanbanDashboardController\n};\n\n});\n", "odoo.define('purchase.ToasterButton', function (require) {\n    'use strict';\n\n    const widgetRegistry = require('web.widget_registry');\n    const Widget = require('web.Widget');\n\n\n    const ToasterButton = Widget.extend({\n        template: 'purchase.ToasterButton',\n        xmlDependencies: ['/purchase/static/src/xml/purchase_toaster_button.xml'],\n        events: Object.assign({}, Widget.prototype.events, {\n            'click .fa-info-circle': '_onClickButton',\n        }),\n\n        init: function (parent, data, node) {\n            this._super(...arguments);\n            this.button_name = node.attrs.button_name;\n            this.title = node.attrs.title;\n            this.id = data.res_id;\n            this.model = data.model;\n        },\n\n        //--------------------------------------------------------------------------\n        // Handlers\n        //--------------------------------------------------------------------------\n        _onClickButton: function (ev) {\n            this._rpc({\n                method: this.button_name,\n                model: this.model,\n                args: [[this.id]],\n            }).then(res => {\n                if (res) {\n                    this.displayNotification({ message: res.toast_message });\n                }\n            })\n        },\n    });\n\n    widgetRegistry.add('toaster_button', ToasterButton);\n\n    return ToasterButton;\n});\n", "odoo.define('purchase.purchase_steps', function (require) {\n\"use strict\";\n\nvar core = require('web.core');\n\nvar PurchaseAdditionalTourSteps = core.Class.extend({\n\n    _get_purchase_stock_steps: function () {\n        return [\n            {\n                auto: true, // Useless final step to trigger congratulation message\n                trigger: \".o_purchase_order\",\n            },\n        ];\n    },\n\n});\n\nreturn PurchaseAdditionalTourSteps;\n\n});\n\nodoo.define('purchase.tour', function(require) {\n\"use strict\";\n\nvar core = require('web.core');\nvar tour = require('web_tour.tour');\n\nvar _t = core._t;\nvar PurchaseAdditionalTourSteps = require('purchase.purchase_steps');\n\ntour.register('purchase_tour' , {\n    url: \"/web\",\n    sequence: 40,\n}, [tour.stepUtils.showAppsMenuItem(), {\n    trigger: '.o_app[data-menu-xmlid=\"purchase.menu_purchase_root\"]',\n    content: _t(\"Let's try the Purchase app to manage the flow from purchase to reception and invoice control.\"),\n    position: 'right',\n    edition: 'community'\n}, {\n    trigger: '.o_app[data-menu-xmlid=\"purchase.menu_purchase_root\"]',\n    content: _t(\"Let's try the Purchase app to manage the flow from purchase to reception and invoice control.\"),\n    position: 'bottom',\n    edition: 'enterprise'\n}, {\n    trigger: \".o_list_button_add\",\n    extra_trigger: \".o_purchase_order\",\n    content: _t(\"Let's create your first request for quotation.\"),\n    position: \"bottom\",\n}, {\n    trigger: \".o_form_editable .o_field_many2one[name='partner_id']\",\n    extra_trigger: \".o_purchase_order\",\n    content: _t(\"Search a vendor name, or create one on the fly.\"),\n    position: \"bottom\",\n    run: function (actions) {\n        actions.text(\"Agrolait\", this.$anchor.find(\"input\"));\n    },\n}, {\n    trigger: \".ui-menu-item > a\",\n    auto: true,\n    in_modal: false,\n}, {\n    trigger: \".o_field_x2many_list_row_add > a\",\n    extra_trigger: \".o_field_many2one[name='partner_id'] .o_external_button\",\n    content: _t(\"Add some products or services to your quotation.\"),\n    position: \"bottom\",\n}, {\n    trigger: \".o_field_widget[name=product_id], .o_field_widget[name=product_template_id]\",\n    extra_trigger: \".o_purchase_order\",\n    content: _t(\"Select a product, or create a new one on the fly.\"),\n    position: \"right\",\n    run: function (actions) {\n        var $input = this.$anchor.find('input');\n        actions.text(\"DESK0001\", $input.length === 0 ? this.$anchor : $input);\n        // fake keydown to trigger search\n        var keyDownEvent = jQuery.Event(\"keydown\");\n        keyDownEvent.which = 42;\n        this.$anchor.trigger(keyDownEvent);\n        var $descriptionElement = $('.o_form_editable textarea[name=\"name\"]');\n        // when description changes, we know the product has been created\n        $descriptionElement.change(function () {\n            $descriptionElement.addClass('product_creation_success');\n        });\n    },\n}, {\n    trigger: '.ui-menu.ui-widget .ui-menu-item a:contains(\"DESK0001\")',\n    auto: true,\n}, {\n    trigger: '.o_form_editable textarea[name=\"name\"].product_creation_success',\n    auto: true,\n    run: function () {} // wait for product creation\n}, {\n    trigger: \".o_form_editable input[name='product_qty'] \",\n    extra_trigger: \".o_purchase_order\",\n    content: _t(\"Indicate the product quantity you want to order.\"),\n    position: \"right\",\n    run: 'text 12.0'\n},\n...tour.stepUtils.statusbarButtonsSteps('Send by Email', _t(\"Send the request for quotation to your vendor.\"), \".o_statusbar_buttons button[name='action_rfq_send']\"),\n{\n    trigger: \".modal-content\",\n    auto: true,\n    run: function(actions){\n        // Check in case user must add email to vendor\n        var $input = $(\".modal-content input[name='email']\");\n        if ($input.length) {\n            actions.text(\"agrolait@example.com\", $input);\n            actions.click($(\".modal-footer button\"));\n        }\n    }\n}, {\n    trigger: \".modal-footer button[name='action_send_mail']\",\n    extra_trigger: \".modal-footer button[name='action_send_mail']\",\n    content: _t(\"Send the request for quotation to your vendor.\"),\n    position: \"left\",\n    run: 'click',\n}, {\n    trigger: \".o_field_widget [name=price_unit]\",\n    extra_trigger: \".o_purchase_order\",\n    content: _t(\"Once you get the price from the vendor, you can complete the purchase order with the right price.\"),\n    position: \"right\",\n    run: 'text 200.00'\n}, {\n    auto: true,\n    trigger: \".o_purchase_order\",\n    run: 'click',\n}, ...tour.stepUtils.statusbarButtonsSteps('Confirm Order', _t(\"Confirm your purchase.\")),\n...new PurchaseAdditionalTourSteps()._get_purchase_stock_steps(),\n]);\n\n});\n", "odoo.define('point_of_sale.tour', function(require) {\n\"use strict\";\n\nconst {_t} = require('web.core');\nconst {Markup} = require('web.utils');\nvar tour = require('web_tour.tour');\n\ntour.register('point_of_sale_tour', {\n    url: \"/web\",\n    rainbowMan: false,\n    sequence: 45,\n}, [tour.stepUtils.showAppsMenuItem(), {\n    trigger: '.o_app[data-menu-xmlid=\"point_of_sale.menu_point_root\"]',\n    content: Markup(_t(\"Ready to launch your <b>point of sale</b>?\")),\n    width: 215,\n    position: 'right',\n    edition: 'community'\n}, {\n    trigger: '.o_app[data-menu-xmlid=\"point_of_sale.menu_point_root\"]',\n    content: Markup(_t(\"Ready to launch your <b>point of sale</b>?\")),\n    width: 215,\n    position: 'bottom',\n    edition: 'enterprise'\n}, {\n    trigger: \".o_pos_kanban button.oe_kanban_action_button\",\n    content: Markup(_t(\"<p>Ready to have a look at the <b>POS Interface</b>? Let's start our first session.</p>\")),\n    position: \"bottom\"\n}]);\n\n});\n", "/** @odoo-module */\n\nimport { registry } from \"@web/core/registry\";\n\nfunction runPoSJSTests({ env }) {\n    return {\n        type: \"item\",\n        description: env._t(\"Run Point of Sale JS Tests\"),\n        callback: () => {\n            env.services.action.doAction({\n                name: env._t(\"JS Tests\"),\n                target: \"new\",\n                type: \"ir.actions.act_url\",\n                url: \"/pos/ui/tests?mod=*\",\n            });\n        },\n        sequence: 35,\n    };\n}\n\nregistry.category(\"debug\").category(\"default\").add(\"point_of_sale.runPoSJSTests\", runPoSJSTests);\n", "odoo.define('point_of_sale.pos_config_form', function (require) {\n    'use strict';\n\n    var FormController = require('web.FormController');\n    var FormView = require('web.FormView');\n    var viewRegistry = require('web.view_registry');\n\n    var PosConfigFormController = FormController.extend({\n        _enableButtons: function (changedFields) {\n            let shouldReload = false;\n            if (Array.isArray(changedFields)) {\n                for (let field of (changedFields)) {\n                    if (\n                        field.startsWith('module_') ||\n                        field.startsWith('group_') ||\n                        field === 'is_posbox'\n                    ) {\n                        shouldReload = true;\n                        break;\n                    }\n                }\n            }\n            if (shouldReload) {\n                window.location.reload();\n            } else {\n                this._super.apply(this, arguments);\n            }\n        },\n    });\n\n    var PosConfigFormView = FormView.extend({\n        config: _.extend({}, FormView.prototype.config, {\n            Controller: PosConfigFormController,\n        }),\n    });\n\n    viewRegistry.add('pos_config_form', PosConfigFormView);\n    return FormView;\n});\n", "/** @odoo-module **/\n\nimport { hexToRGBA } from \"@web/views/graph/colors\";\nimport { GraphRenderer } from \"@web/views/graph/graph_renderer\";\n\nexport class BurndownChartRenderer extends GraphRenderer {\n    /**\n     * @override\n     */\n    getLineChartData() {\n        const data = super.getLineChartData();\n        const { stacked } = this.model.metaData;\n        if (stacked) {\n            for (const dataset of data.datasets) {\n                dataset.backgroundColor = hexToRGBA(dataset.borderColor, 0.4);\n            }\n        }\n        return data;\n    }\n\n    /**\n     * @override\n     */\n    getElementOptions() {\n        const elementOptions = super.getElementOptions();\n        const { mode, stacked } = this.model.metaData;\n        if (mode === \"line\") {\n            elementOptions.line.fill = stacked;\n        }\n        return elementOptions;\n    }\n\n    /**\n     * @override\n     */\n    getScaleOptions() {\n        const { xAxes, yAxes } = super.getScaleOptions();\n        const { mode, stacked } = this.model.metaData;\n        if (mode === \"line\") {\n            for (const y of yAxes) {\n                y.stacked = stacked;\n            }\n        }\n        return { xAxes, yAxes };\n    }\n}\n", "/** @odoo-module **/\n\nimport { BurndownChartRenderer } from \"./burndown_chart_renderer\";\nimport { GraphView } from \"@web/views/graph/graph_view\";\nimport { registry } from \"@web/core/registry\";\n\nconst viewRegistry = registry.category(\"views\");\n\nclass BurndownChartView extends GraphView {}\nBurndownChartView.components = { ...GraphView.components, Renderer: BurndownChartRenderer };\nBurndownChartView.buttonTemplate = \"project.BurndownChartView.Buttons\";\n\nviewRegistry.add(\"burndown_chart\", BurndownChartView);\n", "/** @odoo-module **/\n\nimport { ControlPanel } from \"@web/search/control_panel/control_panel\";\nimport { useService } from \"@web/core/utils/hooks\";\n\nexport class ProjectControlPanel extends ControlPanel {\n    constructor() {\n        super(...arguments);\n        this.orm = useService(\"orm\");\n        this.user = useService(\"user\");\n        const { active_id, show_project_update } = this.env.searchModel.globalContext;\n        this.showProjectUpdate = this.env.config.viewType === \"form\" || show_project_update;\n        this.projectId = this.showProjectUpdate ? active_id : false;\n    }\n\n    async willStart() {\n        const proms = [super.willStart(...arguments)];\n        if (this.showProjectUpdate) {\n            proms.push(this.loadData());\n        }\n        await Promise.all(proms);\n    }\n\n    async willUpdateProps() {\n        const proms = [super.willUpdateProps(...arguments)];\n        if (this.showProjectUpdate) {\n            proms.push(this.loadData());\n        }\n        await Promise.all(proms);\n    }\n\n    async loadData() {\n        const [data, isProjectUser] = await Promise.all([\n            this.orm.call(\"project.project\", \"get_last_update_or_default\", [this.projectId]),\n            this.user.hasGroup(\"project.group_project_user\"),\n        ]);\n        this.data = data;\n        this.isProjectUser = isProjectUser;\n    }\n\n    async onStatusClick(ev) {\n        ev.preventDefault();\n        this.actionService.doAction(\"project.project_update_all_action\", {\n            additionalContext: {\n                default_project_id: this.projectId,\n                active_id: this.projectId,\n            },\n        });\n    }\n}\n\nProjectControlPanel.template = \"project.ProjectControlPanel\";\n", "/** @odoo-module **/\n\nimport ActivityView from '@mail/js/views/activity/activity_view';\nimport { ProjectControlPanel } from '@project/js/project_control_panel';\nimport viewRegistry from 'web.view_registry';\n\nconst ProjectActivityView = ActivityView.extend({\n    config: Object.assign({}, ActivityView.prototype.config, {\n        ControlPanel: ProjectControlPanel,\n    }),\n});\n\nviewRegistry.add('project_activity', ProjectActivityView);\n", "/** @odoo-module **/\n\nimport ControlPanel from 'web.ControlPanel';\nimport session from 'web.session';\n\nexport class ProjectControlPanel extends ControlPanel {\n\n    constructor() {\n        super(...arguments);\n        this.show_project_update = this.env.view.type === \"form\" || this.props.action.context.show_project_update;\n        this.project_id = this.show_project_update ? this.props.action.context.active_id : false;\n    }\n\n    async willStart() {\n        const promises = [];\n        promises.push(super.willStart(...arguments));\n        promises.push(this._loadWidgetData());\n        return Promise.all(promises);\n    }\n\n    async willUpdateProps() {\n        const promises = [];\n        promises.push(super.willUpdateProps(...arguments));\n        promises.push(this._loadWidgetData());\n        return Promise.all(promises);\n    }\n\n    async _loadWidgetData() {\n        if (this.show_project_update) {\n            this.data = await this.rpc({\n                model: 'project.project',\n                method: 'get_last_update_or_default',\n                args: [this.project_id],\n            });\n            this.is_project_user = await session.user_has_group('project.group_project_user');\n        }\n    }\n\n    async onStatusClick(ev) {\n        ev.preventDefault();\n        await this.trigger('do-action', {\n            action: \"project.project_update_all_action\",\n            options: {\n                additional_context: {\n                    default_project_id: this.project_id,\n                    active_id: this.project_id\n                }\n            }\n        });\n    }\n}\n", "/** @odoo-module **/\n\nimport Dialog from 'web.Dialog';\nimport FormView from 'web.FormView';\nimport FormController from 'web.FormController';\nimport { bus, _t } from 'web.core';\nimport { device } from 'web.config';\nimport viewRegistry from 'web.view_registry';\n\nconst ProjectFormController = FormController.extend({\n    on_attach_callback() {\n        this._super(...arguments);\n        if (!device.isMobile) {\n            bus.on(\"DOM_updated\", this, this._onDomUpdated);\n        }\n    },\n    _onDomUpdated() {\n        const $editable = this.$el.find('[name=\"description\"] .note-editable');\n        if ($editable.length) {\n            const minHeight = window.innerHeight - $editable.offset().top - 42;\n            $editable.css('min-height', minHeight + 'px');\n        }\n    },\n    on_detach_callback() {\n        this._super(...arguments);\n        bus.off('DOM_updated', this._onDomUpdated);\n    },\n    _getActionMenuItems(state) {\n        if (!this.archiveEnabled || !state.data['recurrence_id']) {\n            return this._super(...arguments);\n        }\n\n        this.archiveEnabled = false;\n        let actions = this._super(...arguments);\n        this.archiveEnabled = true;\n\n        if (actions) {\n            const activeField = this.model.getActiveField(state);\n            actions.items.other.unshift({\n                description: state.data[activeField] ? _t('Archive') : _t('Unarchive'),\n                callback: () => this._stopRecurrence(state.data['id'], state.data[activeField] ? 'archive' : 'unarchive'),\n            });\n        }\n\n        return actions;\n    },\n\n    _onDeleteRecord() {\n        const record = this.model.get(this.handle);\n\n        if (!record.data.recurrence_id) {\n            return this._super(...arguments);\n        }\n        this._stopRecurrence(record.res_id, 'delete');\n    },\n\n    _countTasks(recurrence_id) {\n        return this._rpc({\n            model: 'project.task',\n            method: 'search_count',\n            args: [[[\"recurrence_id\", \"=\", recurrence_id.res_id]]],\n        });\n    },\n\n    async _stopRecurrence(resId, mode) {\n        const record = this.model.get(this.handle);\n        const recurrence_id = record.data.recurrence_id;\n        const count = await this._countTasks(recurrence_id);\n        const allowContinue = count != 1;\n\n        const alert = allowContinue\n            ? _t('It seems that this task is part of a recurrence.')\n            : _t('It seems that this task is part of a recurrence. You must keep it as a model to create the next occurences.');\n        const dialog = new Dialog(this, {\n            buttons: [\n                {\n                    classes: 'btn-primary',\n                    click: () => {\n                        this._rpc({\n                            model: 'project.task',\n                            method: 'action_stop_recurrence',\n                            args: [resId],\n                        }).then(() => {\n                            if (mode === 'archive') {\n                                this._toggleArchiveState(true);\n                            } else if (mode === 'unarchive') {\n                                this._toggleArchiveState(false);\n                            } else if (mode === 'delete') {\n                                this._deleteRecords([this.handle]);\n                            }\n                        });\n                    },\n                    close: true,\n                    text: _t('Stop Recurrence'),\n                },\n                {\n                    close: true,\n                    text: _t('Discard'),\n                }\n            ],\n            size: 'medium',\n            title: _t('Confirmation'),\n            $content: $('<main/>', {\n                role: 'alert',\n                text: alert,\n            }),\n        });\n\n        if (allowContinue) {\n            dialog.buttons.splice(1, 0,\n                {\n                    click: () => {\n                        this._rpc({\n                            model: 'project.task',\n                            method: 'action_continue_recurrence',\n                            args: [resId],\n                        }).then(() => {\n                            if (mode === 'archive') {\n                                this._toggleArchiveState(true);\n                            } else if (mode === 'unarchive') {\n                                this._toggleArchiveState(false);\n                            } else if (mode === 'delete') {\n                                this._deleteRecords([this.handle]);\n                            }\n                        });\n                    },\n                    close: true,\n                    text: _t('Continue Recurrence'),\n                })\n        };\n\n        dialog.open();\n    }\n});\n\nexport const ProjectFormView = FormView.extend({\n    config: Object.assign({}, FormView.prototype.config, {\n        Controller: ProjectFormController,\n    }),\n});\n\nviewRegistry.add('project_form', ProjectFormView);\n", "/** @odoo-module **/\n\nimport { ProjectControlPanel } from \"@project/project_control_panel/project_control_panel\";\nimport { registry } from \"@web/core/registry\";\nimport { GraphView } from \"@web/views/graph/graph_view\";\n\nconst viewRegistry = registry.category(\"views\");\n\nexport class ProjectGraphView extends GraphView {}\nProjectGraphView.ControlPanel = ProjectControlPanel;\n\nviewRegistry.add(\"project_graph\", ProjectGraphView);\n", "/** @odoo-module **/\n\nimport KanbanController from 'web.KanbanController';\nimport KanbanRenderer from 'web.KanbanRenderer';\nimport KanbanView from 'web.KanbanView';\nimport KanbanColumn from 'web.KanbanColumn';\nimport KanbanRecord from 'web.KanbanRecord';\nimport KanbanModel from 'web.KanbanModel';\nimport viewRegistry from 'web.view_registry';\nimport { ProjectControlPanel } from '@project/js/project_control_panel';\nimport viewUtils from 'web.viewUtils';\nimport { Domain } from '@web/core/domain';\nimport view_dialogs from 'web.view_dialogs';\nimport core from 'web.core';\n\nconst _t = core._t;\n\n// PROJECTS\n\nconst ProjectProjectKanbanRecord = KanbanRecord.extend({\n    /**\n     * @override\n     * @private\n     */\n    _openRecord: function () {\n        const kanbanBoxesElement = this.el.querySelectorAll('.o_project_kanban_boxes a');\n        if (this.selectionMode !== true && kanbanBoxesElement.length) {\n            kanbanBoxesElement[0].click();\n        } else {\n            this._super.apply(this, arguments);\n        }\n    },\n    /**\n     * @override\n     * @private\n     */\n    _onManageTogglerClicked: function (event) {\n        this._super.apply(this, arguments);\n        const thisSettingToggle = this.el.querySelector('.o_kanban_manage_toggle_button');\n        this.el.parentNode.querySelectorAll('.o_kanban_manage_toggle_button.show').forEach(el => {\n            if (el !== thisSettingToggle) {\n                el.classList.remove('show');\n            }\n        });\n        thisSettingToggle.classList.toggle('show');\n    },\n});\n\nconst ProjectProjectKanbanRenderer = KanbanRenderer.extend({\n    config: _.extend({}, KanbanRenderer.prototype.config, {\n        KanbanRecord: ProjectProjectKanbanRecord,\n    }),\n});\n\nconst ProjectProjectKanbanView = KanbanView.extend({\n    config: Object.assign({}, KanbanView.prototype.config, {\n        Renderer: ProjectProjectKanbanRenderer,\n    })\n});\n\nviewRegistry.add('project_project_kanban', ProjectProjectKanbanView);\n\n// TASKS\n\nconst ProjectTaskKanbanColumn = KanbanColumn.extend({\n    /**\n     * @override\n     * @private\n     */\n    _onDeleteColumn: function (event) {\n        if (this.groupedBy === 'stage_id') {\n            event.preventDefault();\n            this.trigger_up('kanban_column_delete_wizard');\n        } else {\n            this._super(...arguments);\n        }\n    },\n\n    /**\n     * Open alternative view when editing personal stages.\n     *\n     * @private\n     * @override\n     */\n    _onEditColumn: function (event) {\n        if (this.groupedBy !== 'personal_stage_type_ids') {\n            this._super(...arguments);\n            return;\n        }\n        event.preventDefault();\n        const context = Object.assign({}, this.getSession().user_context, {\n            form_view_ref: 'project.personal_task_type_edit',\n        });\n        new view_dialogs.FormViewDialog(this, {\n            res_model: this.relation,\n            res_id: this.id,\n            context: context,\n            title: _t(\"Edit Personal Stage\"),\n            on_saved: this.trigger_up.bind(this, 'reload'),\n        }).open();\n    },\n});\n\nconst ProjectTaskKanbanRenderer = KanbanRenderer.extend({\n    config: Object.assign({}, KanbanRenderer.prototype.config, {\n        KanbanColumn: ProjectTaskKanbanColumn,\n    }),\n\n    init: function () {\n        this._super.apply(this, arguments);\n        this.isProjectManager = false;\n    },\n\n    willStart: function () {\n        const superPromise = this._super.apply(this, arguments);\n\n        const isProjectManager = this.getSession().user_has_group('project.group_project_manager').then((hasGroup) => {\n            this.isProjectManager = hasGroup;\n            this._setState();\n            return Promise.resolve();\n        });\n\n        return Promise.all([superPromise, isProjectManager]);\n    },\n\n    /**\n     * Allows record drag when grouping by `personal_stage_type_ids`\n     *\n     * @override\n     */\n    _setState() {\n        this._super(...arguments);\n        const groupedBy = this.state.groupedBy[0];\n        const groupByFieldName = viewUtils.getGroupByField(groupedBy);\n        const field = this.state.fields[groupByFieldName] || {};\n        const fieldInfo = this.state.fieldsInfo.kanban[groupByFieldName] || {};\n\n        const grouped_by_date = [\"date\", \"datetime\"].includes(field.type);\n        const grouped_by_m2m = field.type === \"many2many\";\n        const readonly = !!field.readonly || !!fieldInfo.readonly;\n        const groupedByPersonalStage = (groupByFieldName === 'personal_stage_type_ids');\n\n        const draggable = !readonly && (!grouped_by_m2m || groupedByPersonalStage) &&\n            (!grouped_by_date || fieldInfo.allowGroupRangeValue);\n\n        // When grouping by personal stage we allow any project user to create\n        let editable = this.columnOptions.editable;\n        let deletable = this.columnOptions.deletable;\n        if (['stage_id', 'personal_stage_type_ids'].includes(groupByFieldName)) {\n            this.groupedByM2O = groupedByPersonalStage || this.groupedByM2O;\n            const allow_crud = this.isProjectManager || groupedByPersonalStage;\n            this.createColumnEnabled = editable = deletable = allow_crud;\n        }\n\n        Object.assign(this.columnOptions, {\n            draggable,\n            grouped_by_m2o: this.groupedByM2O,\n            editable: editable,\n            deletable: deletable,\n        });\n    }\n});\n\nexport const ProjectKanbanController = KanbanController.extend({\n    custom_events: Object.assign({}, KanbanController.prototype.custom_events, {\n        'kanban_column_delete_wizard': '_onDeleteColumnWizard',\n    }),\n\n    _onDeleteColumnWizard: function (ev) {\n        ev.stopPropagation();\n        const self = this;\n        const columnId = ev.target.id;\n        const state = this.model.get(this.handle, {raw: true});\n        this._rpc({\n            model: 'project.task.type',\n            method: 'unlink_wizard',\n            args: [columnId],\n            context: state.getContext(),\n        }).then(function (res) {\n            self.do_action(res);\n        });\n    },\n\n    /**\n     * @override\n     */\n    _onDeleteColumn: function (ev) {\n        const state = this.model.get(this.handle, {raw: true});\n        const groupedByFieldname = state.groupedBy[0];\n        if (groupedByFieldname !== 'personal_stage_type_ids') {\n            this._super(...arguments);\n            return;\n        }\n        const column = ev.target;\n        this._rpc({\n            model: 'project.task.type',\n            method: 'remove_personal_stage',\n            args: [[column.id]],\n        }).then(this.update.bind(this, {}, {}));\n    },\n});\n\nconst ProjectTaskKanbanModel = KanbanModel.extend({\n\n    /**\n     * Upon updating `personal_stage_type_ids` we actually want to update the `personal_stage_type_id` field.\n     *\n     * @override\n     * @private\n     */\n    moveRecord: function (recordID, groupID, parentID) {\n        const self = this;\n        const parent = this.localData[parentID];\n        const new_group = this.localData[groupID];\n        const changes = {};\n        const groupedFieldName = viewUtils.getGroupByField(parent.groupedBy[0]);\n        const groupedField = parent.fields[groupedFieldName];\n        // for a date/datetime field, we take the last moment of the group as the group value\n        if (['date', 'datetime'].includes(groupedField.type)) {\n            changes[groupedFieldName] = viewUtils.getGroupValue(new_group, groupedFieldName);\n        } else if (groupedField.type === 'many2one') {\n            changes[groupedFieldName] = {\n                id: new_group.res_id,\n                display_name: new_group.value,\n            };\n        } else if (groupedField.type === 'selection') {\n            const value = _.findWhere(groupedField.selection, {1: new_group.value});\n            changes[groupedFieldName] = value && value[0] || false;\n        } else if (groupedField.type == 'many2many' && groupedFieldName == 'personal_stage_type_ids') {\n            changes['personal_stage_type_id'] = {\n                id: new_group.res_id,\n                display_name: new_group.value,\n            }\n        } else {\n            changes[groupedFieldName] = new_group.value;\n        }\n\n        // Manually updates groups data. Note: this is done before the actual\n        // save as it might need to perform a read group in some cases so those\n        // updated data might be overridden again.\n        const record = self.localData[recordID];\n        const resID = record.res_id;\n        // Remove record from its current group\n        let old_group;\n        for (let i = 0; i < parent.data.length; i++) {\n            old_group = self.localData[parent.data[i]];\n            const index = _.indexOf(old_group.data, recordID);\n            if (index >= 0) {\n                old_group.data.splice(index, 1);\n                old_group.count--;\n                if (!old_group.activeFilter || old_group.activeFilter.value === record.data[parent.progressBar.field]) {\n                    // Here, the record leaving the old group matches its domain,\n                    // so we must decrease the domainCount too.\n                    old_group.domainCount--;\n                }\n                old_group.res_ids = _.without(old_group.res_ids, resID);\n                self._updateParentResIDs(old_group);\n                break;\n            }\n        }\n        // Add record to its new group\n        new_group.data.push(recordID);\n        new_group.res_ids.push(resID);\n        new_group.count++;\n\n        return this.notifyChanges(recordID, changes).then(function () {\n            return self.save(recordID);\n        }).then(function () {\n            record.parentID = new_group.id;\n            return [old_group.id, new_group.id];\n        });\n    },\n\n    /**\n     * When grouped by personal stage create a new personal stage instead of\n     * a regular stage.\n     * Meaning setting `user_id` on the stage.\n     *\n     * @override\n     */\n    createGroup: function (name, parentID) {\n        const parent = this.localData[parentID];\n        const groupedFieldName = viewUtils.getGroupByField(parent.groupedBy[0]);\n        if (groupedFieldName !== 'personal_stage_type_ids') {\n            return this._super(...arguments);\n        }\n        const groupBy = parent.groupedBy[0];\n        const context = Object.assign({}, parent.context, {\n            default_user_id: this.getSession().uid,\n        });\n        // In case it's a personal stage we don't want to assign it to the project.\n        delete context.default_project_id;\n        return this._rpc({\n                model: 'project.task.type',\n                method: 'name_create',\n                args: [name],\n                context: context,\n            })\n            .then((result) => {\n                const createGroupDataPoint = (model, parent) => {\n                    const newGroup = model._makeDataPoint({\n                        modelName: parent.model,\n                        context: parent.context,\n                        domain: parent.domain.concat([[groupBy, \"=\", result[0]]]),\n                        fields: parent.fields,\n                        fieldsInfo: parent.fieldsInfo,\n                        isOpen: true,\n                        limit: parent.limit,\n                        parentID: parent.id,\n                        openGroupByDefault: true,\n                        orderedBy: parent.orderedBy,\n                        value: result,\n                        viewType: parent.viewType,\n                    });\n                    if (parent.progressBar) {\n                        newGroup.progressBarValues = _.extend({\n                            counts: {},\n                        }, parent.progressBar);\n                    }\n                    return newGroup;\n                };\n                const newGroup = createGroupDataPoint(this, parent);\n                parent.data.push(newGroup.id);\n                if (this.isInSampleMode()) {\n                    // in sample mode, create the new group in both models (main + sample)\n                    const sampleParent = this.sampleModel.localData[parentID];\n                    const newSampleGroup = createGroupDataPoint(this.sampleModel, sampleParent);\n                    sampleParent.data.push(newSampleGroup.id);\n                }\n                return newGroup.id;\n            });\n    },\n\n    /**\n     * Force tasks assigned to the user when grouping by personal stage.\n     *\n     * @override\n     * @private\n     */\n    _readGroup: function (list) {\n        const groupedBy = list.groupedBy[0];\n        if (groupedBy === 'personal_stage_type_ids') {\n            list.domain = Domain.and([\n                [['user_ids', 'in', this.getSession().uid]],\n                list.domain\n            ]).toList();\n        }\n        return this._super(...arguments);\n    },\n})\n\nconst ProjectKanbanView = KanbanView.extend({\n    config: _.extend({}, KanbanView.prototype.config, {\n        Model: ProjectTaskKanbanModel,\n        Controller: ProjectKanbanController,\n        Renderer: ProjectTaskKanbanRenderer,\n        ControlPanel: ProjectControlPanel,\n    }),\n});\n\nviewRegistry.add('project_task_kanban', ProjectKanbanView);\n", "/** @odoo-module **/\n\nimport { _t } from 'web.core';\nimport Dialog from 'web.Dialog';\nimport ListView from 'web.ListView';\nimport ListController from 'web.ListController';\nimport viewRegistry from 'web.view_registry';\nimport { ProjectControlPanel } from '@project/js/project_control_panel';\n\nconst ProjectListController = ListController.extend({\n    _getActionMenuItems(state) {\n        if (!this.archiveEnabled) {\n            return this._super(...arguments);\n        }\n\n        const recurringRecords = this.getSelectedRecords().filter(rec => rec.data.recurrence_id).map(rec => rec.data.id);\n        this.archiveEnabled = recurringRecords.length == 0;\n        let actions = this._super(...arguments);\n        this.archiveEnabled = true;\n\n        if (actions && recurringRecords.length > 0) {\n            actions.items.other.unshift({\n                description: _t('Archive'),\n                callback: () => this._stopRecurrence(recurringRecords, this.selectedRecords, 'archive'),\n            }, {\n                description: _t('Unarchive'),\n                callback: () => this._toggleArchiveState(false)\n            });\n        }\n        return actions;\n    },\n\n    _onDeleteSelectedRecords() {\n        const recurringRecords = this.getSelectedRecords().filter(rec => rec.data.recurrence_id).map(rec => rec.data.id);\n        if (recurringRecords.length > 0) {\n            return this._stopRecurrence(recurringRecords, this.selectedRecords, 'delete');\n        }\n\n        return this._super(...arguments);\n    },\n\n    _countRecordsPerReccurence(recurrenceIds, resIds) {\n        return this._rpc({\n            model: 'project.task',\n            method: 'read_group',\n            args: [\n                [['recurrence_id', 'in', recurrenceIds], ['id', 'not in', resIds]],\n                ['recurrence_id'],\n                ['recurrence_id'],\n            ],\n        });\n    },\n\n    async _stopRecurrence(recurringResIds, resIds, mode) {\n        const recurrenceIdsSet = new Set();\n        for (const record of this.getSelectedRecords()) {\n            const recurrenceId = record.data.recurrence_id;\n            if (recurrenceId) {\n                recurrenceIdsSet.add(recurrenceId);\n            }\n        }\n        const recurrenceIds = Array.from(recurrenceIdsSet);\n        // list recurrences that have tasks left after deleting/archiving\n        let countsLeft = await this._countRecordsPerReccurence(recurrenceIds, recurringResIds);\n        countsLeft = countsLeft.map(rec => rec.recurrence_id[0]);\n        // so we check that no recurrence is absent, as it would mean no task is left\n        const allowContinue = recurrenceIds.every(rec => countsLeft.includes(rec));\n\n        let warning;\n        if (resIds.length > 1) {\n            warning = allowContinue\n                    ? _t('It seems that some tasks are part of a recurrence.')\n                    : _t('It seems that some tasks are part of a recurrence. At least one of them must be kept as a model to create the next occurences.');\n        } else {\n            warning = allowContinue\n                    ? _t('It seems that this task is part of a recurrence.')\n                    : _t('It seems that this task is part of a recurrence. You must keep it as a model to create the next occurences.');\n        }\n\n        const dialog = new Dialog(this, {\n            buttons: [\n                {\n                    classes: 'btn-primary',\n                    click: () => {\n                        this._rpc({\n                            model: 'project.task',\n                            method: 'action_stop_recurrence',\n                            args: [recurringResIds],\n                        }).then(() => {\n                            if (mode === 'archive') {\n                                this._toggleArchiveState(true);\n                            } else if (mode === 'delete') {\n                                this._deleteRecords(resIds);\n                            }\n                        });\n                    },\n                    close: true,\n                    text: _t('Stop Recurrence'),\n                },\n                {\n                    close: true,\n                    text: _t('Discard'),\n                }\n            ],\n            size: 'medium',\n            title: _t('Confirmation'),\n            $content: $('<main/>', {\n                role: 'alert',\n                text: warning,\n            }),\n        });\n\n        if (allowContinue) {\n            Dialog.buttons.splice(1, 0,\n                {\n                    click: () => {\n                        this._rpc({\n                            model: 'project.task',\n                            method: 'action_continue_recurrence',\n                            args: [recurringResIds],\n                        }).then(() => {\n                            if (mode === 'archive') {\n                                this._toggleArchiveState(true);\n                            } else if (mode === 'delete') {\n                                this._deleteRecords(resIds);\n                            }\n                        });\n                },\n                close: true,\n                text: _t('Continue Recurrence'),\n            });\n        }\n\n        dialog.open();\n    }\n});\n\nexport const ProjectListView = ListView.extend({\n    config: Object.assign({}, ListView.prototype.config, {\n        Controller: ProjectListController,\n        ControlPanel: ProjectControlPanel,\n    }),\n});\n\nviewRegistry.add('project_list', ProjectListView);\n", "/** @odoo-module **/\n\nimport { ProjectControlPanel } from \"@project/project_control_panel/project_control_panel\";\nimport { registry } from \"@web/core/registry\";\nimport { PivotView } from \"@web/views/pivot/pivot_view\";\n\nconst viewRegistry = registry.category(\"views\");\n\nclass ProjectPivotView extends PivotView {}\nProjectPivotView.ControlPanel = ProjectControlPanel;\n\nviewRegistry.add(\"project_pivot\", ProjectPivotView);\n", "/** @odoo-module **/\n\nimport { _lt } from \"@web/core/l10n/translation\";\nimport { registry } from \"@web/core/registry\";\nimport { GraphArchParser } from \"@web/views/graph/graph_arch_parser\";\nimport { GraphView } from \"@web/views/graph/graph_view\";\n\nconst viewRegistry = registry.category(\"views\");\n\nconst MEASURE_STRINGS = {\n    parent_res_id: _lt(\"Project\"),\n    rating: _lt(\"Rating Value (/5)\"),\n    res_id: _lt(\"Task\"),\n};\n\nclass ProjectRatingArchParser extends GraphArchParser {\n    parse() {\n        const archInfo = super.parse(...arguments);\n        for (const [key, val] of Object.entries(MEASURE_STRINGS)) {\n            archInfo.fieldAttrs[key] = {\n                ...archInfo.fieldAttrs[key],\n                string: val.toString(),\n            };\n        }\n        return archInfo;\n    }\n}\n\n// Would it be not better achiedved by using a proper arch directly?\n\nclass ProjectRatingGraphView extends GraphView {}\nProjectRatingGraphView.ArchParser = ProjectRatingArchParser;\n\nviewRegistry.add(\"project_rating_graph\", ProjectRatingGraphView);\n", "/** @odoo-module **/\n\nimport { _lt } from \"@web/core/l10n/translation\";\nimport { registry } from \"@web/core/registry\";\nimport { PivotArchParser } from \"@web/views/pivot/pivot_arch_parser\";\nimport { PivotView } from \"@web/views/pivot/pivot_view\";\n\nconst viewRegistry = registry.category(\"views\");\n\nconst MEASURE_STRINGS = {\n    parent_res_id: _lt(\"Project\"),\n    rating: _lt(\"Rating Value (/5)\"),\n    res_id: _lt(\"Task\"),\n};\n\nclass ProjectRatingArchParser extends PivotArchParser {\n    parse() {\n        const archInfo = super.parse(...arguments);\n        for (const [key, val] of Object.entries(MEASURE_STRINGS)) {\n            archInfo.fieldAttrs[key] = {\n                ...archInfo.fieldAttrs[key],\n                string: val.toString(),\n            };\n        }\n        return archInfo;\n    }\n}\n\n// Would it be not better achiedved by using a proper arch directly?\n\nclass ProjectRatingPivotView extends PivotView {}\nProjectRatingPivotView.ArchParser = ProjectRatingArchParser;\n\nviewRegistry.add(\"project_rating_pivot\", ProjectRatingPivotView);\n", "/** @odoo-module **/\n\nimport { _lt } from 'web.core';\nimport {Markup} from 'web.utils';\nimport kanbanExamplesRegistry from 'web.kanban_examples_registry';\n\nconst greenBullet = Markup`<span class=\"o_status d-inline-block o_status_green\"></span>`;\nconst redBullet = Markup`<span class=\"o_status d-inline-block o_status_red\"></span>`;\nconst star = Markup`<a style=\"color: gold;\" class=\"fa fa-star\"/>`;\nconst clock = Markup`<a class=\"fa fa-clock-o\" />`;\n\nconst descriptionActivities = escFormat(_lt('%s Use the %s icon to organize your daily activities.'), '<br/>', clock);\nconst description = escFormat(_lt('Prioritize Tasks by using the %s icon.' +\n            '%s Use the %s button to signalize to your colleagues that a task is ready for the next stage.' +\n            '%s Use the %s to signalize a problem or a need for discussion on a task.' +\n            '%s'), star, '<br/>', greenBullet, '<br/>', redBullet, descriptionActivities);\n\n/**\n * Helper function to escape the format string, but not the values formatted in,\n * rougly equivalent to `_.str.sprintf(_.escape(fmt), ...)`.\n *\n * Performs the escaping lazily (at point of use) as it's designed to be used\n * with `_lt` as the source of the format string.\n *\n * @param fmt format string, to escape\n * @param args objects to format into `fmt`, unescaped\n * @returns {Object} a stringifiable object returning the escaped then formatted string\n */\nfunction escFormat(fmt, ...args) {\n    return {\n        [_.escapeMethod]() {\n            return this;\n        },\n        toString() {\n            return _.str.sprintf(_.escape(fmt), ...args);\n        },\n    };\n}\n\nkanbanExamplesRegistry.add('project', {\n    ghostColumns: [_lt('New'), _lt('Assigned'), _lt('In Progress'), _lt('Done')],\n    applyExamplesText: _lt(\"Use This For My Project\"),\n    examples:[{\n        name: _lt('Software Development'),\n        columns: [_lt('Backlog'), _lt('Specifications'), _lt('Development'), _lt('Tests'), _lt('Delivered')],\n        description: escFormat(_lt('Prioritize Tasks by using the %s icon.' +\n            '%s Use the %s button to inform your colleagues that a task is ready for the next stage.' +\n            '%s Use the %s to indicate a problem or a need for discussion on a task.' +\n            '%s'), star, '<br/>', greenBullet, '<br/>', redBullet, descriptionActivities),\n        bullets: [greenBullet, redBullet, star],\n    }, {\n        name: _lt('Agile Scrum'),\n        columns: [_lt('Backlog'), _lt('Sprint Backlog'), _lt('Sprint in Progress'), _lt('Sprint Complete'), _lt('Old Completed Sprint')],\n        description: escFormat(_lt('Use %s and %s bullets to indicate the status of a task. %s'), greenBullet, redBullet, descriptionActivities),\n        bullets: [greenBullet, redBullet],\n    }, {\n        name: _lt('Digital Marketing'),\n        columns: [_lt('Ideas'), _lt('Researching'), _lt('Writing'), _lt('Editing'), _lt('Done')],\n        description: escFormat(_lt('Everyone can propose ideas, and the Editor marks the best ones ' +\n            'as %s. Attach all documents or links to the task directly, to have all research information centralized. %s'), greenBullet, descriptionActivities),\n        bullets: [greenBullet, redBullet],\n    }, {\n        name: _lt('Customer Feedback'),\n        columns: [_lt('New'), _lt('In development'), _lt('Done'), _lt('Refused')],\n        description: escFormat(_lt('Customers propose feedbacks by email; Odoo creates tasks ' +\n            'automatically, and you can communicate on the task directly. Your managers decide which ' +\n            'feedback is accepted %s and which feedback is moved to the %s column. %s'), greenBullet, _lt('\"Refused\"'), descriptionActivities),\n        bullets: [greenBullet, redBullet],\n    }, {\n        name: _lt('Getting Things Done (GTD)'),\n        columns: [_lt('Inbox'), _lt('Today'), _lt('This Week'), _lt('This Month'), _lt('Long Term')],\n        description: escFormat(_lt('Fill your Inbox easily with the email gateway. Periodically review your ' +\n            'Inbox and schedule tasks by moving them to other columns. Every day, you review the ' +\n            '%s column to move important tasks %s. Every Monday, you review the %s column. %s'), _lt('\"This Week\"'), _lt('\"Today\"'), _lt('\"This Month\"'), descriptionActivities),\n    }, {\n        name: _lt('Consulting'),\n        columns: [_lt('New Projects'), _lt('Resources Allocation'), _lt('In Progress'), _lt('Done')],\n        description: escFormat(_lt('Manage the lifecycle of your project using the kanban view. Add newly acquired projects, assign them and use the %s and %s to define if the project is ready for the next step. %s'), greenBullet, redBullet, descriptionActivities),\n        bullets: [greenBullet, redBullet],\n    }, {\n        name: _lt('Research Project'),\n        columns: [_lt('Brainstorm'), _lt('Research'), _lt('Draft'), _lt('Final Document')],\n        description: escFormat(_lt('Handle your idea gathering within Tasks of your new Project and discuss them in the chatter of the tasks. Use the %s and %s to signalize what is the current status of your Idea. %s'), greenBullet, redBullet, descriptionActivities),\n        bullets: [greenBullet, redBullet],\n    }, {\n        name: _lt('Website Redesign'),\n        columns: [_lt('Page Ideas'), _lt('Copywriting'), _lt('Design'), _lt('Live')],\n        description: escFormat(_lt('Handle your idea gathering within Tasks of your new Project and discuss them in the chatter of the tasks. Use the %s and %s to signalize what is the current status of your Idea. %s'), greenBullet, redBullet, descriptionActivities),\n    }, {\n        name: _lt('T-shirt Printing'),\n        columns: [_lt('New Orders'), _lt('Logo Design'), _lt('To Print'), _lt('Done')],\n        description: escFormat(_lt('Communicate with customers on the task using the email gateway. ' +\n            'Attach logo designs to the task, so that information flows from designers to the workers ' +\n            'who print the t-shirt. Organize priorities amongst orders using the %s icon. %s'), star, descriptionActivities),\n        bullets: [star],\n    }, {\n        name: _lt('Design'),\n        columns: [_lt('New Request'), _lt('Design'), _lt('Client Review'), _lt('Handoff')],\n        description: description,\n        bullets: [greenBullet, redBullet, star, clock],\n    }, {\n        name: _lt('Publishing'),\n        columns: [_lt('Ideas'), _lt('Writing'), _lt('Editing'), _lt('Published')],\n        description: description,\n        bullets: [greenBullet, redBullet, star, clock],\n    }, {\n        name: _lt('Manufacturing'),\n        columns: [_lt('New Orders'), _lt('Material Sourcing'), _lt('Manufacturing'), _lt('Assembling'), _lt('Delivered')],\n        description: description,\n        bullets: [greenBullet, redBullet, star, clock],\n    }, {\n        name: _lt('Podcast and Video Production'),\n        columns: [_lt('Research'), _lt('Script'), _lt('Recording'), _lt('Mixing'), _lt('Published')],\n        description: description,\n        bullets: [greenBullet, redBullet, star, clock],\n    }],\n});\n", "odoo.define('project.tour', function(require) {\n\"use strict\";\n\nconst {_t} = require('web.core');\nconst {Markup} = require('web.utils');\nvar tour = require('web_tour.tour');\n\ntour.register('project_tour', {\n    sequence: 110,\n    url: \"/web\",\n    rainbowManMessage: \"Congratulations, you are now a master of project management.\",\n}, [tour.stepUtils.showAppsMenuItem(), {\n    trigger: '.o_app[data-menu-xmlid=\"project.menu_main_pm\"]',\n    content: Markup(_t('Want a better way to <b>manage your projects</b>? <i>It starts here.</i>')),\n    position: 'right',\n    edition: 'community',\n}, {\n    trigger: '.o_app[data-menu-xmlid=\"project.menu_main_pm\"]',\n    content: Markup(_t('Want a better way to <b>manage your projects</b>? <i>It starts here.</i>')),\n    position: 'bottom',\n    edition: 'enterprise',\n}, {\n    trigger: '.o-kanban-button-new',\n    extra_trigger: '.o_project_kanban',\n    content: Markup(_t('Let\\'s create your first <b>project</b>.')),\n    position: 'bottom',\n    width: 200,\n}, {\n    trigger: 'input.o_project_name',\n    content: Markup(_t('Choose a <b>name</b> for your project. <i>It can be anything you want: the name of a customer,\\\n     of a product, of a team, of a construction site, etc.</i>')),\n    position: 'right',\n}, {\n    trigger: '.o_open_tasks',\n    content: Markup(_t('Let\\'s create your first <b>project</b>.')),\n    position: 'top',\n    run: function (actions) {\n        actions.auto('.modal:visible .btn.btn-primary');\n    },\n}, {\n    trigger: \".o_kanban_project_tasks .o_column_quick_create .input-group\",\n    content: Markup(_t(\"Add columns to organize your tasks into <b>stages</b> <i>e.g. New - In Progress - Done</i>.\")),\n    position: 'right',\n    run: function (actions) {\n        actions.text(\"Test\", this.$anchor.find(\"input\"));\n    },\n}, {\n    trigger: \".o_kanban_project_tasks .o_column_quick_create .o_kanban_add\",\n    auto: true,\n}, {\n    trigger: \".o_kanban_project_tasks .o_column_quick_create .input-group\",\n    extra_trigger: '.o_kanban_group',\n    content: Markup(_t(\"Add columns to organize your tasks into <b>stages</b> <i>e.g. New - In Progress - Done</i>.\")),\n    position: 'right',\n    run: function (actions) {\n        actions.text(\"Test\", this.$anchor.find(\"input\"));\n    },\n}, {\n    trigger: \".o_kanban_project_tasks .o_column_quick_create .o_kanban_add\",\n    auto: true,\n}, {\n    trigger: '.o-kanban-button-new',\n    extra_trigger: '.o_kanban_group:eq(1)',\n    content: Markup(_t(\"Let's create your first <b>task</b>.\")),\n    position: 'bottom',\n    width: 200,\n}, {\n    trigger: '.o_kanban_quick_create input.o_field_char[name=name]',\n    extra_trigger: '.o_kanban_project_tasks',\n    content: Markup(_t('Choose a task <b>name</b> <i>(e.g. Website Design, Purchase Goods...)</i>')),\n    position: 'right',\n}, {\n    trigger: '.o_kanban_quick_create .o_kanban_add',\n    extra_trigger: '.o_kanban_project_tasks',\n    content: _t(\"Add your task once it is ready.\"),\n    position: \"bottom\",\n}, {\n    trigger: \".o_kanban_record .oe_kanban_content\",\n    extra_trigger: '.o_kanban_project_tasks',\n    content: Markup(_t(\"<b>Drag &amp; drop</b> the card to change your task from stage.\")),\n    position: \"bottom\",\n    run: \"drag_and_drop .o_kanban_group:eq(1) \",\n}, {\n    trigger: \".o_kanban_record:first\",\n    extra_trigger: '.o_kanban_project_tasks',\n    content: _t(\"Let's start working on your task.\"),\n    position: \"bottom\",\n}, {\n    trigger: \".o_ChatterTopbar_buttonSendMessage\",\n    extra_trigger: '.o_form_project_tasks',\n    content: Markup(_t(\"Use the chatter to <b>send emails</b> and communicate efficiently with your customers. \\\n    Add new people to the followers' list to make them aware of the main changes about this task.\")),\n    width: 350,\n    position: \"bottom\",\n}, {\n    trigger: \".o_ChatterTopbar_buttonLogNote\",\n    extra_trigger: '.o_form_project_tasks',\n    content: Markup(_t(\"<b>Log notes</b> for internal communications <i>(the people following this task won't be notified \\\n    of the note you are logging unless you specifically tag them)</i>. Use @ <b>mentions</b> to ping a colleague \\\n    or # <b>mentions</b> to reach an entire team.\")),\n    width: 350,\n    position: \"bottom\"\n}, {\n    trigger: \".o_ChatterTopbar_buttonScheduleActivity\",\n    extra_trigger: '.o_form_project_tasks',\n    content: Markup(_t(\"Use <b>activities</b> to organize your daily work.\")),\n}, {\n    trigger: \".modal-dialog .btn-primary\",\n    extra_trigger: '.o_form_project_tasks',\n    content: \"Schedule your activity once it is ready.\",\n    position: \"bottom\",\n    run: \"click\",\n}, {\n    trigger: \".breadcrumb-item:not(.active):last\",\n    extra_trigger: '.o_form_project_tasks.o_form_readonly',\n    content: Markup(_t(\"Let's go back to the <b>kanban view</b> to have an overview of your next tasks.\")),\n    position: \"right\",\n    run: 'click',\n}]);\n\n});\n", "/** @odoo-module **/\n\nimport CalendarController from 'web.CalendarController';\nimport CalendarView from 'web.CalendarView';\nimport viewRegistry from 'web.view_registry';\nimport { ProjectControlPanel } from '@project/js/project_control_panel';\n\nconst ProjectCalendarController = CalendarController.extend({\n    _renderButtonsParameters() {\n        return Object.assign({}, this._super(...arguments), {scaleDrop: true});\n    },\n\n    /**\n     * @private\n     * @param {OdooEvent} event\n     */\n    _onChangeDate: function (event) {\n        this._super.apply(this, arguments);\n        this.model.setScale('month');\n        this.model.setDate(event.data.date);\n        this.reload();\n    },\n});\n\nexport const ProjectCalendarView = CalendarView.extend({\n    config: Object.assign({}, CalendarView.prototype.config, {\n        Controller: ProjectCalendarController,\n        ControlPanel: ProjectControlPanel,\n    }),\n});\n\nviewRegistry.add('project_calendar', ProjectCalendarView);\n", "/** @odoo-module **/\n\nimport { AddMilestone, OpenMilestone } from '@project/js/right_panel/project_utils';\nimport { formatFloat } from \"@web/fields/formatters\";\nconst { useState } = owl.hooks;\n\nexport default class ProjectRightPanel extends owl.Component {\n    constructor() {\n        super(...arguments);\n        this.context = this.props.action.context;\n        this.domain = this.props.action.domain;\n        this.project_id = this.context.active_id;\n        this.state = useState({\n            data: {\n                milestones: {\n                    data: []\n                },\n                user: {},\n            }\n        });\n    }\n\n    formatFloat(value) {\n        return formatFloat(value, { digits: [false, 1] });\n    }\n\n    async willStart() {\n        await super.willStart(...arguments);\n        await this._loadQwebContext();\n    }\n\n    async willUpdateProps() {\n        await super.willUpdateProps(...arguments);\n        await this._loadQwebContext();\n    }\n\n    async _loadQwebContext() {\n        if (!this.project_id){ // If this is called from notif, multiples updates but no specific project\n            return {};\n        }\n        const data = await this.rpc({\n            model: 'project.project',\n            method: 'get_panel_data',\n            args: [this.project_id],\n            kwargs: {\n                context: this.context\n            }\n        });\n        this.state.data = data;\n        return data;\n    }\n\n    async onProjectActionClick(event) {\n        event.stopPropagation();\n        let action = event.currentTarget.dataset.action;\n        const additionalContext = JSON.parse(event.currentTarget.dataset.additional_context || \"{}\");\n        if (event.currentTarget.dataset.type === \"object\") {\n            action = await this.rpc({\n                // Use the call_button method in order to have an action\n                // with the correct view naming, i.e. list view is named\n                // 'list' rather than 'tree'.\n                route: '/web/dataset/call_button',\n                params: {\n                    model: 'project.project',\n                    method: event.currentTarget.dataset.action,\n                    args: [this.project_id],\n                    kwargs: {\n                        context: this.context\n                    }\n                }\n            });\n        }\n        this._doAction(action, {\n            additional_context: additionalContext\n        });\n    }\n\n    _doAction(action, options) {\n        this.trigger('do-action', {\n            action,\n            options\n        });\n    }\n}\n\nProjectRightPanel.template = \"project.ProjectRightPanel\";\nProjectRightPanel.components = {AddMilestone, OpenMilestone};\n", "/** @odoo-module **/\n\nimport { ComponentWrapper } from 'web.OwlCompatibility';\n\nexport const RightPanelRendererMixin = {\n    /**\n     * Add RightPanel css class to renderer in order to handle panel style.\n     *\n     * @override\n     */\n    async start() {\n        this.$el.addClass('o_renderer_with_rightpanel');\n        await Promise.all([this._render(), this._super()]);\n    },\n};\n\nexport const RightPanelControllerMixin = {\n    rightPanelPosition: 'last-child',\n    /**\n     * Init the rightSidePanel from the config parameters\n     *\n     * @override\n     */\n    init: function (parent, model, renderer, params) {\n        this._super.apply(this, arguments);\n        this.rightSidePanel = params.rightSidePanel;\n    },\n    /**\n     * Add the Rightpanel component through the component wrapper.\n     *\n     * @override\n     */\n    start: async function () {\n        const promises = [this._super(...arguments)];\n        this._rightPanelWrapper = new ComponentWrapper(this, this.rightSidePanel.Component, this.rightSidePanel.props);\n        const content = this.el.querySelector(':scope .o_content');\n        content.classList.add('o_controller_with_rightpanel');\n        promises.push(this._rightPanelWrapper.mount(content, { position: this.rightPanelPosition }));\n        await Promise.all(promises);\n    },\n    /**\n     * Make sure the right panel is updated each time the view is reloaded.\n     *\n     * @override\n     */\n    async _update() {\n        this._rightPanelWrapper.update(this.rightSidePanel.props);\n        await this._super.apply(this, arguments);\n    },\n};\n\nexport const RightPanelViewMixin = {\n    searchMenuTypes: ['filter', 'favorite'],\n    /**\n     * Adds the rightSidePanel in the view.\n     * This extention is assuming the rightSidePanel is always given in the case this Mixin is used.\n     *\n     * @override\n     */\n    _createSearchModel: function (params) {\n        const result = this._super.apply(this, arguments);\n        const props = {\n            action: params.action,\n        };\n        this.controllerParams.rightSidePanel = {\n            Component: this.config.RightSidePanel,\n            props: props,\n        };\n        return result;\n    }\n};\n", "/** @odoo-module **/\n\nimport { _lt } from 'web.core';\nimport fieldUtils from 'web.field_utils';\nimport { ComponentAdapter } from 'web.OwlCompatibility';\nimport { FormViewDialog } from 'web.view_dialogs';\nconst { useState, useRef } = owl.hooks;\n\nclass MilestoneComponent extends owl.Component {\n    constructor() {\n        super(...arguments);\n        this.contextValue = Object.assign({}, {\n            'default_project_id': this.props.context.active_id,\n        }, this.props.context);\n        this.FormViewDialog = FormViewDialog;\n        this.state = useState({\n            openDialog: false\n        });\n        this._dialogRef = useRef('dialog');\n        this._isDialogOpen = false;\n        this._createContext = this._createContext.bind(this);\n        this._onDialogSaved = this._onDialogSaved.bind(this);\n    }\n\n    get context() {\n        return this.contextValue;\n    }\n\n    set context(value) {\n        this.contextValue = Object.assign({}, {\n            'default_project_id': value.active_id,\n        }, value);\n    }\n\n    dialogClosed() {\n        this._isDialogOpen = false;\n        this.state.openDialog = false;\n    }\n\n    patched() {\n        if (this.state.openDialog && !this._isDialogOpen) {\n            this._isDialogOpen = true;\n            this._dialogRef.comp.widget.on('closed', this, () => {\n                this.dialogClosed();\n            });\n            this._dialogRef.comp.widget.open();\n        }\n    }\n\n    _createContext() {\n        return Object.assign({}, {\n            'default_project_id': this.contextValue.active_id,\n        }, this.contextValue);\n    }\n\n    async _onDialogSaved() {\n        await this.__owl__.parent.willUpdateProps();\n    }\n}\nMilestoneComponent.components = { ComponentAdapter };\n\nexport class AddMilestone extends MilestoneComponent {\n    get NEW_PROJECT_MILESTONE() {\n        return _lt(\"New Milestone\");\n    }\n\n    onAddMilestoneClick(event) {\n        if (!this._isDialogOpen) {\n            event.stopPropagation();\n            this.state.openDialog = true;\n        }\n    }\n}\nAddMilestone.template = 'project.AddMilestone';\n\nexport class OpenMilestone extends MilestoneComponent {\n\n    constructor() {\n        super(...arguments);\n        this.milestone = useState(this.props.milestone);\n        this.state.colorClass = this.milestone.is_deadline_exceeded ? \"o_milestone_danger\" : \"\";\n        this.state.checkboxIcon = this.milestone.is_reached ? \"fa-check-square-o\" : \"fa-square-o\";\n    }\n\n    get OPEN_PROJECT_MILESTONE() {\n        return _lt(\"Milestone\");\n    }\n\n    get deadline() {\n        return fieldUtils.format.date(moment(this.milestone.deadline));\n    }\n\n    willUpdateProps(nextProps) {\n        if (nextProps.milestone) {\n            this.milestone = nextProps.milestone;\n            this.state.colorClass = this.milestone.is_deadline_exceeded ? \"o_milestone_danger\" : \"\";\n            this.state.checkboxIcon = this.milestone.is_reached ? \"fa-check-square-o\" : \"fa-square-o\";\n        }\n        if (nextProps.context) {\n            this.contextValue = nextProps.context;\n        }\n    }\n\n    dialogClosed() {\n        super.dialogClosed();\n        this.write_mutex = false;\n    }\n\n    async onDeleteMilestone() {\n        await this.rpc({\n            model: 'project.milestone',\n            method: 'unlink',\n            args: [this.milestone.id]\n        });\n        await this.__owl__.parent.willUpdateProps();\n    }\n\n    onOpenMilestone() {\n        if (!this._isDialogOpen && !this.write_mutex) {\n            this.write_mutex = true;\n            this.state.openDialog = true;\n        }\n    }\n\n    async onMilestoneClick() {\n        if (!this.write_mutex) {\n            this.write_mutex = true;\n            this.milestone = await this.rpc({\n                model: 'project.milestone',\n                method: 'toggle_is_reached',\n                args: [[this.milestone.id], !this.milestone.is_reached],\n            });\n            this.state.colorClass = this.milestone.is_deadline_exceeded ? \"o_milestone_danger\" : \"\";\n            this.state.checkboxIcon = this.milestone.is_reached ? \"fa-check-square-o\" : \"fa-square-o\";\n            this.write_mutex = false;\n        }\n    }\n}\nOpenMilestone.template = 'project.OpenMilestone';\n", "/** @odoo-module **/\n\nimport KanbanController from 'web.KanbanController';\nimport KanbanRenderer from 'web.KanbanRenderer';\nimport KanbanView from 'web.KanbanView';\nimport viewRegistry from 'web.view_registry';\nimport ProjectRightSidePanel from '@project/js/right_panel/project_right_panel';\nimport {\n    RightPanelControllerMixin,\n    RightPanelRendererMixin,\n    RightPanelViewMixin,\n} from '@project/js/right_panel/project_right_panel_mixin';\n\nconst ProjectUpdateKanbanRenderer = KanbanRenderer.extend(RightPanelRendererMixin);\n\nconst ProjectUpdateKanbanController = KanbanController.extend(RightPanelControllerMixin);\n\nexport const ProjectUpdateKanbanView = KanbanView.extend(RightPanelViewMixin).extend({\n    config: Object.assign({}, KanbanView.prototype.config, {\n        Controller: ProjectUpdateKanbanController,\n        Renderer: ProjectUpdateKanbanRenderer,\n        RightSidePanel: ProjectRightSidePanel,\n    }),\n});\n\nviewRegistry.add('project_update_kanban', ProjectUpdateKanbanView);\n", "/** @odoo-module **/\n\nimport ListController from 'web.ListController';\nimport ListRenderer from 'web.ListRenderer';\nimport ListView from 'web.ListView';\nimport viewRegistry from 'web.view_registry';\nimport ProjectRightSidePanel from '@project/js/right_panel/project_right_panel';\nimport {\n    RightPanelControllerMixin,\n    RightPanelRendererMixin,\n    RightPanelViewMixin,\n} from '@project/js/right_panel/project_right_panel_mixin';\n\nconst ProjectUpdateListRenderer = ListRenderer.extend(RightPanelRendererMixin);\n\nconst ProjectUpdateListController = ListController.extend(RightPanelControllerMixin);\n\nexport const ProjectUpdateListView = ListView.extend(RightPanelViewMixin).extend({\n    config: Object.assign({}, ListView.prototype.config, {\n        Controller: ProjectUpdateListController,\n        Renderer: ProjectUpdateListRenderer,\n        RightSidePanel: ProjectRightSidePanel,\n    }),\n});\n\nviewRegistry.add('project_update_list', ProjectUpdateListView);\n", "/** @odoo-module **/\n\nimport { device } from 'web.config';\nimport { bus } from 'web.core';\nimport fieldRegistry from 'web.field_registry';\nimport FieldHtml from 'web_editor.field.html';\n\nexport const FieldHtmlWithAction = FieldHtml.extend({\n    events: Object.assign({}, FieldHtml.prototype.events, {\n        'click a[type=\"object\"]': '_onClickObject'\n    }),\n    init() {\n        this._super(...arguments);\n        if (!device.isMobile) {\n            bus.on(\"DOM_updated\", this, () => {\n                const $editable = this.$el.find('.note-editable');\n                if ($editable.length) {\n                    const minHeight = window.innerHeight - $editable.offset().top - 30;\n                    $editable.css('min-height', minHeight + 'px');\n                }\n            });\n        }\n    },\n    /**\n     * Handle the click on a link with object as type\n     * @param {*} event\n     */\n    _onClickObject: async function (event) {\n        event.preventDefault();\n        const action = await this._rpc({\n            model: this.model,\n            method: event.target.name,\n            args: [this.res_id],\n            context: this.record.context,\n        });\n        if (action) {\n            this.do_action(action);\n        }\n    }\n});\n\nfieldRegistry.add('html_with_action', FieldHtmlWithAction);\n", "/** @odoo-module **/\n\nimport fieldRegistry from 'web.field_registry';\nimport { FieldChar } from 'web.basic_fields';\n\nexport const FieldNameWithSubTaskCount = FieldChar.extend({\n    /**\n     * @override\n     */\n    init() {\n        this._super(...arguments);\n        if (this.viewType === 'kanban') {\n            // remove click event handler\n            const {click, ...events} = this.events;\n            this.events = events;\n        }\n    },\n\n    _render: function () {\n        let result = this._super.apply(this, arguments);\n        if (this.recordData.allow_subtasks && this.recordData.child_text) {\n            this.$el.append($('<span>')\n                    .addClass(\"text-muted ml-2\")\n                    .text(this.recordData.child_text)\n                    .css('font-weight', 'normal'));\n        }\n        return result;\n    }\n});\n\nfieldRegistry.add('name_with_subtask_count', FieldNameWithSubTaskCount);\n", "/** @odoo-module **/\n\nimport { qweb } from 'web.core';\nimport fieldRegistry from 'web.field_registry';\nimport { FieldSelection } from 'web.relational_fields';\n\n/**\n * options :\n * `color_field` : The field that must be use to color the bubble. It must be in the view. (from 0 to 11). Default : grey.\n */\nexport const StatusWithColor = FieldSelection.extend({\n    _template: 'project.statusWithColor',\n\n    /**\n     * @override\n     */\n    init: function () {\n        this._super.apply(this, arguments);\n        this.color = this.recordData[this.nodeOptions.color_field];\n        if (this.nodeOptions.no_quick_edit) {\n            this._canQuickEdit = false;\n        }\n    },\n\n    /**\n     * @override\n     */\n    _renderReadonly() {\n        this._super.apply(this, arguments);\n        if (this.value) {\n            this.$el.addClass('o_status_with_color');\n            this.$el.prepend(qweb.render(this._template, {\n                color: this.color,\n            }));\n        }\n    },\n});\n\nfieldRegistry.add('status_with_color', StatusWithColor);\n", "odoo.define('website_sale.video_field_preview', function (require) {\n\"use strict\";\n\n\nvar AbstractField = require('web.AbstractField');\nvar core = require('web.core');\nconst {Markup} = require('web.utils');\nvar fieldRegistry = require('web.field_registry');\n\nvar QWeb = core.qweb;\n\n/**\n * Displays preview of the video showcasing product.\n */\nvar FieldVideoPreview = AbstractField.extend({\n    className: 'd-block o_field_video_preview',\n\n    _render: function () {\n        this.$el.html(QWeb.render('productVideo', {\n            embedCode: Markup(this.value),\n        }));\n    },\n});\n\nfieldRegistry.add('video_preview', FieldVideoPreview);\n\nreturn FieldVideoPreview;\n\n});\n", "odoo.define('website_sale.backend', function (require) {\n\"use strict\";\n\nvar WebsiteBackend = require('website.backend.dashboard');\nvar COLORS = ['#875a7b', '#21b799', '#E4A900', '#D5653E', '#5B899E', '#E46F78', '#8F8F8F'];\n\nWebsiteBackend.include({\n    jsLibs: [\n        '/web/static/lib/Chart/Chart.js',\n    ],\n\n    events: _.defaults({\n        'click tr.o_product_template': 'on_product_template',\n        'click .js_utm_selector': '_onClickUtmButton',\n    }, WebsiteBackend.prototype.events),\n\n    init: function (parent, context) {\n        this._super(parent, context);\n\n        this.graphs.push({'name': 'sales', 'group': 'sale_salesman'});\n    },\n\n    /**\n     * @override method from website backendDashboard\n     * @private\n     */\n    render_graphs: function() {\n        this._super();\n        this.utmGraphData = this.dashboards_data.sales.utm_graph;\n        this.utmGraphData && this._renderUtmGraph();\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Method used to generate Pie chart, depending on user selected UTM option(campaign, medium, source)\n     *\n     * @private\n     */\n    _renderUtmGraph: function() {\n        var self = this;\n        this.$(\".utm_button_name\").html(this.btnName); // change drop-down button name\n        var utmDataType = this.utmType || 'campaign_id';\n        var graphData = this.utmGraphData[utmDataType];\n        if (graphData.length) {\n            this.$(\".o_utm_no_data_img\").hide();\n            this.$(\".o_utm_data_graph\").empty().show();\n            var $canvas = $('<canvas/>');\n            this.$(\".o_utm_data_graph\").append($canvas);\n            var context = $canvas[0].getContext('2d');\n            console.log(graphData);\n\n            var data = [];\n            var labels = [];\n            graphData.forEach(function(pt) {\n                data.push(pt.amount_total);\n                labels.push(pt.utm_type);\n            });\n            var config = {\n                type: 'pie',\n                data: {\n                    labels: labels,\n                    datasets: [{\n                        data: data,\n                        backgroundColor: COLORS,\n                    }]\n                },\n                options: {\n                    tooltips: {\n                        callbacks: {\n                            label: function(tooltipItem, data) {\n                                var label = data.labels[tooltipItem.index] || '';\n                                if (label) {\n                                    label += ': ';\n                                }\n                                var amount = data.datasets[0].data[tooltipItem.index];\n                                amount = self.render_monetary_field(amount, self.data.currency);\n                                label += amount;\n                                return label;\n                            }\n                        }\n                    },\n                    legend: {display: false}\n                }\n            };\n            new Chart(context, config);\n        } else {\n            this.$(\".o_utm_no_data_img\").show();\n            this.$(\".o_utm_data_graph\").hide();\n        }\n    },\n\n    //--------------------------------------------------------------------------\n        // Handlers\n        //--------------------------------------------------------------------------\n\n        /**\n         * Onchange on UTM dropdown button, this method is called.\n         *\n         * @private\n         */\n    _onClickUtmButton: function(ev) {\n        this.utmType = $(ev.currentTarget).attr('name');\n        this.btnName = $(ev.currentTarget).text();\n        this._renderUtmGraph();\n    },\n\n    on_product_template: function (ev) {\n        ev.preventDefault();\n\n        var product_tmpl_id = $(ev.currentTarget).data('productId');\n        this.do_action({\n            type: 'ir.actions.act_window',\n            res_model: 'product.template',\n            res_id: product_tmpl_id,\n            views: [[false, 'form']],\n            target: 'current',\n        }, {\n            on_reverse_breadcrumb: this.on_reverse_breadcrumb,\n        });\n    },\n});\nreturn WebsiteBackend;\n\n});\n", "odoo.define(\"website_sale.tour_shop_backend\", function (require) {\n\"use strict\";\n\nvar tour = require(\"web_tour.tour\");\nvar steps = require(\"website_sale.tour_shop\");\ntour.register(\"shop\", {url: \"/shop\"}, steps);\n\n});\n", "/** @odoo-module **/\n\nimport AbstractField from 'web.AbstractField';\nimport { _t } from 'web.core';\nimport fields from 'web.basic_fields';\nimport fieldUtils from 'web.field_utils';\nimport field_registry from 'web.field_registry';\nimport time from 'web.time';\n\n/**\n * This widget is used to display the availability on a workorder.\n */\nvar SetBulletStatus = AbstractField.extend({\n    // as this widget is based on hardcoded values, use it in another context\n    // probably won't work\n    // supportedFieldTypes: ['selection'],\n    /**\n     * @override\n     */\n    init: function () {\n        this._super.apply(this, arguments);\n        this.classes = this.nodeOptions && this.nodeOptions.classes || {};\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @override\n     */\n    _renderReadonly: function () {\n        this._super.apply(this, arguments);\n        var bullet_class = this.classes[this.value] || 'default';\n        if (this.value) {\n            var title = this.value === 'waiting' ? _t('Waiting Materials') : '';\n            this.$el.attr({'title': title, 'style': 'display:inline'});\n            this.$el.removeClass('text-success text-danger text-default');\n            this.$el.html($('<span>' + title + '</span>').addClass('badge badge-' + bullet_class));\n        }\n    }\n});\n\nvar TimeCounter = fields.FieldFloatTime.extend({\n\n    init: function () {\n        this._super.apply(this, arguments);\n        this.duration = this.record.data.duration;\n    },\n\n    willStart: function () {\n        var self = this;\n        var def = this._rpc({\n            model: 'mrp.workcenter.productivity',\n            method: 'search_read',\n            domain: [\n                ['workorder_id', '=', this.record.data.id],\n                ['date_end', '=', false],\n            ],\n        }).then(function (result) {\n            var currentDate = new Date();\n            var duration = 0;\n            if (result.length > 0) {\n                duration += self._getDateDifference(time.auto_str_to_date(result[0].date_start), currentDate);\n            }\n            var minutes = duration / 60 >> 0;\n            var seconds = duration % 60;\n            self.duration += minutes + seconds / 60;\n            if (self.mode === 'edit') {\n                self.value = self.duration;\n            }\n        });\n        return Promise.all([this._super.apply(this, arguments), def]);\n    },\n\n    destroy: function () {\n        this._super.apply(this, arguments);\n        clearTimeout(this.timer);\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     */\n    isSet: function () {\n        return true;\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Compute the difference between two dates.\n     *\n     * @private\n     * @param {string} dateStart\n     * @param {string} dateEnd\n     * @returns {integer} the difference in millisecond\n     */\n    _getDateDifference: function (dateStart, dateEnd) {\n        return moment(dateEnd).diff(moment(dateStart), 'seconds');\n    },\n    /**\n     * @override\n     */\n    _renderReadonly: function () {\n        if (this.record.data.is_user_working) {\n            this._startTimeCounter();\n        } else {\n            this._super.apply(this, arguments);\n        }\n    },\n    /**\n     * @private\n     */\n    _startTimeCounter: function () {\n        var self = this;\n        clearTimeout(this.timer);\n        if (this.record.data.is_user_working) {\n            this.timer = setTimeout(function () {\n                self.duration += 1/60;\n                self._startTimeCounter();\n            }, 1000);\n        } else {\n            clearTimeout(this.timer);\n        }\n        this.$el.text(fieldUtils.format.float_time(this.duration));\n    },\n});\n\nvar FieldEmbedURLViewer = fields.FieldChar.extend({\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     */\n    init: function () {\n        this._super.apply(this, arguments);\n        this.page = 1;\n        this.srcDirty = false;\n    },\n\n    /**\n     * force to set 'src' for embed iframe viewer when its value has changed\n     *\n     * @override\n     *\n     */\n    reset: function () {\n        this._super.apply(this, arguments);\n        this._updateIframePreview();\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Initializes and returns an iframe for the viewer\n     *\n     * @private\n     * @returns {jQueryElement}\n     */\n    _prepareIframe: function () {\n        return $('<iframe>', {\n            class: 'o_embed_iframe d-none',\n            allowfullscreen: true,\n        });\n    },\n\n    /**\n     * @override\n     * @private\n     */\n    _renderEdit: function () {\n        if (!this.$('iframe.o_embed_iframe').length) {\n            this.$input = this.$el;\n            this.setElement(this.$el.wrap('<div class=\"o_embed_url_viewer o_field_widget\"/>').parent());\n            this.$el.append(this._prepareIframe());\n        }\n        this._prepareInput(this.$input);\n\n        // Do not set iframe src if widget is invisible\n        if (!this.record.evalModifiers(this.attrs.modifiers).invisible) {\n            this._updateIframePreview();\n        } else {\n            this.srcDirty = true;\n        }\n    },\n    /**\n     * @override\n     * @private\n     */\n    _renderReadonly: function () {\n        if (!this.$('iframe.o_embed_iframe').length) {\n            this.$el.addClass('o_embed_url_viewer');\n            this.$el.append(this._prepareIframe());\n        }\n        this._updateIframePreview();\n    },\n    /**\n     * Set the associated src for embed iframe viewer\n     *\n     * @private\n     * @returns {string} source of the google slide\n     */\n    _getEmbedSrc: function () {\n        var src = false;\n        if (this.value) {\n            // check given google slide url is valid or not\n            var googleRegExp = /(^https:\\/\\/docs.google.com).*(\\/d\\/e\\/|\\/d\\/)([A-Za-z0-9-_]+)/;\n            var google = this.value.match(googleRegExp);\n            if (google && google[3]) {\n                src = 'https://docs.google.com/presentation' + google[2] + google[3] + '/preview?slide=' + this.page;\n            }\n        }\n        return src || this.value;\n    },\n    /**\n     * update iframe attrs\n     *\n     * @private\n     */\n    _updateIframePreview: function () {\n        var $iframe = this.$('iframe.o_embed_iframe');\n        var src = this._getEmbedSrc();\n        $iframe.toggleClass('d-none', !src);\n        if (src) {\n            $iframe.attr('src', src);\n        } else {\n            $iframe.removeAttr('src');\n        }\n    },\n    /**\n     * Listen to modifiers updates to and only render iframe when it is necessary\n     *\n     * @override\n     */\n    updateModifiersValue: function () {\n        this._super.apply(this, arguments);\n        if (!this.attrs.modifiersValue.invisible && this.srcDirty) {\n            this._updateIframePreview();\n            this.srcDirty = false;\n        }\n    },\n});\n\n\nfield_registry\n    .add('bullet_state', SetBulletStatus)\n    .add('mrp_time_counter', TimeCounter)\n    .add('embed_viewer', FieldEmbedURLViewer);\n\nfieldUtils.format.mrp_time_counter = fieldUtils.format.float_time;\n\nexport default FieldEmbedURLViewer;\n", "/** @odoo-module **/\n\nimport core from 'web.core';\nimport framework from 'web.framework';\nimport stock_report_generic from 'stock.stock_report_generic';\n\nvar QWeb = core.qweb;\nvar _t = core._t;\n\nvar MrpBomReport = stock_report_generic.extend({\n    events: {\n        'click .o_mrp_bom_unfoldable': '_onClickUnfold',\n        'click .o_mrp_bom_foldable': '_onClickFold',\n        'click .o_mrp_bom_action': '_onClickAction',\n        'click .o_mrp_show_attachment_action': '_onClickShowAttachment',\n    },\n    get_html: function() {\n        var self = this;\n        var args = [\n            this.given_context.active_id,\n            this.given_context.searchQty || false,\n            this.given_context.searchVariant,\n        ];\n        return this._rpc({\n                model: 'report.mrp.report_bom_structure',\n                method: 'get_html',\n                args: args,\n                context: this.given_context,\n            })\n            .then(function (result) {\n                self.data = result;\n                if (! self.given_context.searchVariant) {\n                    self.given_context.searchVariant = result.is_variant_applied && Object.keys(result.variants)[0];\n                }\n            });\n    },\n    set_html: function() {\n        var self = this;\n        return this._super().then(function () {\n            self.$('.o_content').html(self.data.lines);\n            self.renderSearch();\n            self.update_cp();\n        });\n    },\n    render_html: function(event, $el, result){\n        if (result.indexOf('mrp.document') > 0) {\n            if (this.$('.o_mrp_has_attachments').length === 0) {\n                var column = $('<th/>', {\n                    class: 'o_mrp_has_attachments',\n                    title: 'Files attached to the product Attachments',\n                    text: 'Attachments',\n                });\n                this.$('table thead th:last-child').after(column);\n            }\n        }\n        $el.after(result);\n        $(event.currentTarget).toggleClass('o_mrp_bom_foldable o_mrp_bom_unfoldable fa-caret-right fa-caret-down');\n        this._reload_report_type();\n    },\n    get_bom: function(event) {\n      var self = this;\n      var $parent = $(event.currentTarget).closest('tr');\n      var activeID = $parent.data('id');\n      var productID = $parent.data('product_id');\n      var lineID = $parent.data('line');\n      var qty = $parent.data('qty');\n      var level = $parent.data('level') || 0;\n      return this._rpc({\n              model: 'report.mrp.report_bom_structure',\n              method: 'get_bom',\n              args: [\n                  activeID,\n                  productID,\n                  parseFloat(qty),\n                  lineID,\n                  level + 1,\n              ]\n          })\n          .then(function (result) {\n              self.render_html(event, $parent, result);\n          });\n    },\n    get_operations: function(event) {\n      var self = this;\n      var $parent = $(event.currentTarget).closest('tr');\n      var activeID = $parent.data('bom-id');\n      var qty = $parent.data('qty');\n      var productId = $parent.data('product_id');\n      var level = $parent.data('level') || 0;\n      return this._rpc({\n              model: 'report.mrp.report_bom_structure',\n              method: 'get_operations',\n              args: [\n                  productId,\n                  activeID,\n                  parseFloat(qty),\n                  level + 1\n              ]\n          })\n          .then(function (result) {\n              self.render_html(event, $parent, result);\n          });\n    },\n    get_byproducts: function(event) {\n        var self = this;\n        var $parent = $(event.currentTarget).closest('tr');\n        var activeID = $parent.data('bom-id');\n        var qty = $parent.data('qty');\n        var level = $parent.data('level') || 0;\n        var total = $parent.data('total') || 0;\n        return this._rpc({\n                model: 'report.mrp.report_bom_structure',\n                method: 'get_byproducts',\n                args: [\n                    activeID,\n                    parseFloat(qty),\n                    level + 1,\n                    parseFloat(total)\n                ]\n            })\n            .then(function (result) {\n                self.render_html(event, $parent, result);\n            });\n      },\n    update_cp: function () {\n        var status = {\n            cp_content: {\n                $buttons: this.$buttonPrint,\n                $searchview: this.$searchView\n            },\n        };\n        return this.updateControlPanel(status);\n    },\n    renderSearch: function () {\n        this.$buttonPrint = $(QWeb.render('mrp.button', {'is_variant_applied': this.data.is_variant_applied}));\n        this.$buttonPrint.find('.o_mrp_bom_print').on('click', this._onClickPrint.bind(this));\n        this.$buttonPrint.find('.o_mrp_bom_print_all_variants').on('click', this._onClickPrint.bind(this));\n        this.$buttonPrint.find('.o_mrp_bom_print_unfolded').on('click', this._onClickPrint.bind(this));\n        this.$searchView = $(QWeb.render('mrp.report_bom_search', _.omit(this.data, 'lines')));\n        this.$searchView.find('.o_mrp_bom_report_qty').on('change', this._onChangeQty.bind(this)).change();\n        this.$searchView.find('.o_mrp_bom_report_variants').on('change', this._onChangeVariants.bind(this)).change();\n        this.$searchView.find('.o_mrp_bom_report_type').on('change', this._onChangeType.bind(this));\n    },\n    _onClickPrint: function (ev) {\n        var childBomIDs = _.map(this.$el.find('.o_mrp_bom_foldable').closest('tr'), function (el) {\n            return $(el).data('id');\n        });\n        this.searchModelConfig.env.services.ui.block();\n        var reportname = 'mrp.report_bom_structure?docids=' + this.given_context.active_id +\n                         '&report_type=' + this.given_context.report_type +\n                         '&quantity=' + (this.given_context.searchQty || 1);\n        if (! $(ev.currentTarget).hasClass('o_mrp_bom_print_unfolded')) {\n            reportname += '&childs=' + JSON.stringify(childBomIDs);\n        }\n        if ($(ev.currentTarget).hasClass('o_mrp_bom_print_all_variants')) {\n            reportname += '&all_variants=' + 1;\n        } else if (this.given_context.searchVariant) {\n            reportname += '&variant=' + this.given_context.searchVariant;\n        }\n        var action = {\n            'type': 'ir.actions.report',\n            'report_type': 'qweb-pdf',\n            'report_name': reportname,\n            'report_file': 'mrp.report_bom_structure',\n        };\n        return this.do_action(action).then(() => {\n            this.searchModelConfig.env.services.ui.unblock();\n        });\n    },\n    _onChangeQty: function (ev) {\n        var qty = $(ev.currentTarget).val().trim();\n        if (qty) {\n            this.given_context.searchQty = parseFloat(qty);\n            this._reload();\n        }\n    },\n    _onChangeType: function (ev) {\n        var report_type = $(\"option:selected\", $(ev.currentTarget)).data('type');\n        this.given_context.report_type = report_type;\n        this._reload_report_type();\n    },\n    _onChangeVariants: function (ev) {\n        this.given_context.searchVariant = $(ev.currentTarget).val();\n        this._reload();\n    },\n    _onClickUnfold: function (ev) {\n        var redirect_function = $(ev.currentTarget).data('function');\n        this[redirect_function](ev);\n    },\n    _onClickFold: function (ev) {\n        this._removeLines($(ev.currentTarget).closest('tr'));\n        $(ev.currentTarget).toggleClass('o_mrp_bom_foldable o_mrp_bom_unfoldable fa-caret-right fa-caret-down');\n    },\n    _onClickAction: function (ev) {\n        ev.preventDefault();\n        return this.do_action({\n            type: 'ir.actions.act_window',\n            res_model: $(ev.currentTarget).data('model'),\n            res_id: $(ev.currentTarget).data('res-id'),\n            context: {\n                'active_id': $(ev.currentTarget).data('res-id')\n            },\n            views: [[false, 'form']],\n            target: 'current'\n        });\n    },\n    _onClickShowAttachment: function (ev) {\n        ev.preventDefault();\n        var ids = $(ev.currentTarget).data('res-id');\n        return this.do_action({\n            name: _t('Attachments'),\n            type: 'ir.actions.act_window',\n            res_model: $(ev.currentTarget).data('model'),\n            domain: [['id', 'in', ids]],\n            views: [[false, 'kanban'], [false, 'list'], [false, 'form']],\n            view_mode: 'kanban,list,form',\n            target: 'current',\n        });\n    },\n    _reload: function () {\n        var self = this;\n        return this.get_html().then(function () {\n            self.$('.o_content').html(self.data.lines);\n            self._reload_report_type();\n        });\n    },\n    _reload_report_type: function () {\n        this.$('.o_mrp_bom_cost.o_hidden, .o_mrp_prod_cost.o_hidden').toggleClass('o_hidden');\n        if (this.given_context.report_type === 'bom_structure') {\n           this.$('.o_mrp_bom_cost, .o_mrp_prod_cost').toggleClass('o_hidden');\n        }\n    },\n    _removeLines: function ($el) {\n        var self = this;\n        var activeID = $el.data('id');\n        _.each(this.$('tr[parent_id='+ activeID +']'), function (parent) {\n            var $parent = self.$(parent);\n            var $el = self.$('tr[parent_id='+ $parent.data('id') +']');\n            if ($el.length) {\n                self._removeLines($parent);\n            }\n            $parent.remove();\n        });\n    },\n});\n\ncore.action_registry.add('mrp_bom_report', MrpBomReport);\nexport default MrpBomReport;\n", "/** @odoo-module **/\n\nimport PopoverWidget from 'stock.popover_widget';\nimport fieldRegistry from 'web.field_registry';\nimport { _t } from 'web.core';\n\n\n/**\n * Link to a Char field representing a JSON:\n * {\n *  'replan': <REPLAN_BOOL>, // Show the replan btn\n *  'color': '<COLOR_CLASS>', // Color Class of the icon (d-none to hide)\n *  'infos': [\n *      {'msg' : '<MESSAGE>', 'color' : '<COLOR_CLASS>'},\n *      {'msg' : '<MESSAGE>', 'color' : '<COLOR_CLASS>'},\n *      ... ]\n * }\n */\nvar MrpWorkorderPopover = PopoverWidget.extend({\n    popoverTemplate: 'mrp.workorderPopover',\n    title: _t('Scheduling Information'),\n\n    _render: function () {\n        this._super.apply(this, arguments);\n        if (! this.$popover) {\n          return;\n        }\n        var self = this;\n        this.$popover.find('.action_replan_button').click(function (e) {\n            self._onReplanClick(e);\n        });\n    },\n\n    _onReplanClick:function (e) {\n        var self = this;\n        this._rpc({\n            model: 'mrp.workorder',\n            method: 'action_replan',\n            args: [[self.res_id]]\n        }).then(function () {\n            self.trigger_up('reload');\n        });\n    },\n});\n\nfieldRegistry.add('mrp_workorder_popover', MrpWorkorderPopover);\n\nexport default MrpWorkorderPopover;\n", "/** @odoo-module **/\n\nimport { _t, qweb } from 'web.core';\nimport fileUploadMixin from 'web.fileUploadMixin';\nimport DocumentViewer from '@mrp/js/mrp_documents_document_viewer';\n\nconst MrpDocumentsControllerMixin = Object.assign({}, fileUploadMixin, {\n    events: {\n        'click .o_mrp_documents_kanban_upload': '_onClickMrpDocumentsUpload',\n    },\n    custom_events: Object.assign({}, fileUploadMixin.custom_events, {\n        kanban_image_clicked: '_onKanbanPreview',\n        upload_file: '_onUploadFile',\n    }),\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Called right after the reload of the view.\n     */\n    async reload() {\n        await this._renderFileUploads();\n    },\n\n    /**\n     * @override\n     * @param {jQueryElement} $node\n     */\n    renderButtons($node) {\n        if (this.is_action_enabled('edit')) {\n            this.$buttons = $(qweb.render('MrpDocumentsKanbanView.buttons'));\n            this.$buttons.appendTo($node);\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     */\n    _getFileUploadRoute() {\n        return '/mrp/upload_attachment';\n    },\n\n    /**\n     * @override\n     * @param {integer} param0.recordId\n     */\n    _makeFileUploadFormDataKeys() {\n        const context = this.model.get(this.handle, { raw: true }).getContext();\n        return {\n            res_id: context.default_res_id,\n            res_model: context.default_res_model,\n        };\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     */\n    _onClickMrpDocumentsUpload() {\n        const $uploadInput = $('<input>', {\n            type: 'file',\n            name: 'files[]',\n            multiple: 'multiple'\n        });\n        $uploadInput.on('change', async ev => {\n            await this._uploadFiles(ev.target.files);\n            $uploadInput.remove();\n        });\n        $uploadInput.click();\n    },\n\n    /**\n     * Handles custom event to display the document viewer.\n     *\n     * @private\n     * @param {OdooEvent} ev\n     * @param {integer} ev.data.recordID\n     * @param {Array<Object>} ev.data.recordList\n     */\n    _onKanbanPreview(ev) {\n        ev.stopPropagation();\n        const documents = ev.data.recordList;\n        const documentID = ev.data.recordID;\n        const documentViewer = new DocumentViewer(this, documents, documentID);\n        documentViewer.appendTo(this.$('.o_mrp_documents_kanban_view'));\n    },\n\n    /**\n     * Specially created to call `_uploadFiles` method from tests.\n     *\n     * @private\n     * @param {OdooEvent} ev\n     */\n    async _onUploadFile(ev) {\n        await this._uploadFiles(ev.data.files);\n    },\n\n    /**\n     * @override\n     * @param {Object} param0\n     * @param {XMLHttpRequest} param0.xhr\n     */\n    _onUploadLoad({ xhr }) {\n        const result = xhr.status === 200\n            ? JSON.parse(xhr.response)\n            : {\n                error: _.str.sprintf(_t(\"status code: %s, message: %s\"), xhr.status, xhr.response)\n            };\n        if (result.error) {\n            this.displayNotification({ title: _t(\"Error\"), message: result.error, sticky: true });\n        }\n        fileUploadMixin._onUploadLoad.apply(this, arguments);\n    },\n});\n\nexport default MrpDocumentsControllerMixin;\n", "/** @odoo-module **/\n\nimport DocumentViewer from '@mail/js/document_viewer';\n\n/**\n * This file defines the DocumentViewer for the MRP Documents Kanban view.\n */\nconst MrpDocumentsDocumentViewer = DocumentViewer.extend({\n    init(parent, attachments, activeAttachmentID) {\n        this._super(...arguments);\n        this.modelName = 'mrp.document';\n    },\n});\n\nexport default MrpDocumentsDocumentViewer;\n", "/** @odoo-module **/\n\n/**\n * This file defines the Controller for the MRP Documents Kanban view, which is an\n * override of the KanbanController.\n */\n\nimport MrpDocumentsControllerMixin from '@mrp/js/mrp_documents_controller_mixin';\n\nimport KanbanController from 'web.KanbanController';\n\nconst MrpDocumentsKanbanController = KanbanController.extend(MrpDocumentsControllerMixin, {\n    events: Object.assign({}, KanbanController.prototype.events, MrpDocumentsControllerMixin.events),\n    custom_events: Object.assign({}, KanbanController.prototype.custom_events, MrpDocumentsControllerMixin.custom_events),\n\n    /**\n     * @override\n    */\n    init() {\n        this._super(...arguments);\n        MrpDocumentsControllerMixin.init.apply(this, arguments);\n    },\n    /**\n     * Override to update the records selection.\n     *\n     * @override\n    */\n    async reload() {\n        await this._super(...arguments);\n        await MrpDocumentsControllerMixin.reload.apply(this, arguments);\n    },\n});\n\nexport default MrpDocumentsKanbanController;\n", "/** @odoo-module **/\n\n/**\n * This file defines the KanbanRecord for the MRP Documents Kanban view.\n */\n\nimport KanbanRecord from 'web.KanbanRecord';\n\nconst MrpDocumentsKanbanRecord = KanbanRecord.extend({\n    events: Object.assign({}, KanbanRecord.prototype.events, {\n        'click .o_mrp_download': '_onDownload',\n        'click .o_kanban_previewer': '_onImageClicked',\n    }),\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Handles the click on the download link to save the attachment locally.\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onDownload(ev) {\n        ev.preventDefault();\n        window.location = `/web/content/${this.modelName}/${this.id}/datas?download=true`;\n    },\n\n    /**\n     * Handles the click on the preview image. Triggers up `_onKanbanPreview` to\n     * display `DocumentViewer`.\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onImageClicked(ev) {\n        ev.preventDefault();\n        ev.stopPropagation();\n        this.trigger_up('kanban_image_clicked', {\n            recordList: [this.recordData],\n            recordID: this.recordData.id\n        });\n    },\n});\n\nexport default MrpDocumentsKanbanRecord;\n", "/** @odoo-module **/\n\n/**\n * This file defines the Renderer for the MRP Documents Kanban view, which is an\n * override of the KanbanRenderer.\n */\n\nimport KanbanRenderer from 'web.KanbanRenderer';\nimport MrpDocumentsKanbanRecord from '@mrp/js/mrp_documents_kanban_record';\n\nconst MrpDocumentsKanbanRenderer = KanbanRenderer.extend({\n    config: Object.assign({}, KanbanRenderer.prototype.config, {\n        KanbanRecord: MrpDocumentsKanbanRecord,\n    }),\n    /**\n     * @override\n     */\n    async start() {\n        this.$el.addClass('o_mrp_documents_kanban_view');\n        await this._super(...arguments);\n    },\n});\n\nexport default MrpDocumentsKanbanRenderer;\n", "/** @odoo-module **/\n\nimport KanbanView from 'web.KanbanView';\nimport MrpDocumentsKanbanController from '@mrp/js/mrp_documents_kanban_controller';\nimport MrpDocumentsKanbanRenderer from '@mrp/js/mrp_documents_kanban_renderer';\nimport viewRegistry from 'web.view_registry';\n\nconst MrpDocumentsKanbanView = KanbanView.extend({\n    config: Object.assign({}, KanbanView.prototype.config, {\n        Controller: MrpDocumentsKanbanController,\n        Renderer: MrpDocumentsKanbanRenderer,\n    }),\n});\n\nviewRegistry.add('mrp_documents_kanban', MrpDocumentsKanbanView);\n\nexport default MrpDocumentsKanbanView;\n", "/** @odoo-module **/\n\nimport { FieldFloat } from 'web.basic_fields';\nimport fieldRegistry from 'web.field_registry';\nimport field_utils from 'web.field_utils';\n/**\n * This widget is used to display alongside the total quantity to consume of a production order,\n * the exact quantity that the worker should consume depending on the BoM. Ex:\n * 2 components to make 1 finished product.\n * The production order is created to make 5 finished product and the quantity producing is set to 3.\n * The widget will be '3.000 / 5.000'.\n */\nconst MrpShouldConsume = FieldFloat.extend({\n    /**\n     * @override\n     */\n    init: function (parent, name, params) {\n        this._super.apply(this, arguments);\n        this.displayShouldConsume = !['done', 'draft', 'cancel'].includes(params.data.state);\n        this.should_consume_qty = field_utils.format.float(params.data.should_consume_qty, params.fields.should_consume_qty, this.nodeOptions);\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Prefix the classic float field (this.$el) by a static value.\n     *\n     * @private\n     * @param {float} [value] quantity to display before the input `el`\n     * @param {bool} [edit] whether the field will be editable or readonly\n     */\n    _addShouldConsume: function (value, edit=false) {\n        const $to_consume_container = $('<span class=\"o_should_consume\"/>');\n        if (edit) {\n            $to_consume_container.addClass('o_row');\n        }\n        $to_consume_container.text(value + ' / ');\n        this.setElement(this.$el.wrap($to_consume_container).parent());\n    },\n\n    /**\n     * @private\n     * @override\n     */\n    _renderEdit: function () {\n        if (this.displayShouldConsume) {\n            if (!this.$el.text().includes('/')) {\n                this.$input = this.$el;\n                this._addShouldConsume(this.should_consume_qty, true);\n            }\n            this._prepareInput(this.$input);\n        } else {\n            this._super.apply(this);\n        }\n    },\n    /**\n     * Resets the content to the formated value in readonly mode.\n     *\n     * @override\n     * @private\n     */\n    _renderReadonly: function () {\n        this.$el.text(this._formatValue(this.value));\n        if (this.displayShouldConsume) {\n            this._addShouldConsume(this.should_consume_qty);\n        }\n    },\n});\n\nfieldRegistry.add('mrp_should_consume', MrpShouldConsume);\n\nexport default {\n    MrpShouldConsume: MrpShouldConsume,\n};\n", "/** @odoo-module **/\n\nimport { FieldOne2Many } from 'web.relational_fields';\nimport ListRenderer from 'web.ListRenderer';\nimport fieldRegistry from 'web.field_registry';\nimport {_t} from 'web.core';\n\n//----------------------------------------------------\n\nvar MrpFieldOne2ManyWithCopyListRenderer = ListRenderer.extend({\n\n    /**\n     * @override\n     */\n    init: function (parent, state, params) {\n        this._super.apply(this, arguments);\n        this.creates.push({\n            string: parent.nodeOptions.copy_text,\n            context: '',\n        });\n    },\n});\n\nvar MrpFieldOne2ManyWithCopy = FieldOne2Many.extend({\n\n    /**\n     * @override\n     */\n    init: function (parent, name, record, options) {\n        this._super.apply(this, arguments);\n        this.nodeOptions = _.defaults(this.nodeOptions, {\n            copy_text: _t('Copy Existing Operations'),\n        });\n    },\n    /**\n     * @override\n     */\n    _getRenderer: function () {\n        if (this.view.arch.tag === 'tree') {\n            return MrpFieldOne2ManyWithCopyListRenderer;\n        }\n        return this._super.apply(this, arguments);\n    },\n    /**\n     * @override\n     */\n    _openFormDialog: function (params) {\n        if (params.context === undefined) {\n            return this._super.apply(this, arguments);\n        }\n        const parent = this.getParent();\n        const parentIsNew = parent.state.res_id === undefined;\n        const parentHasChanged = parent.state.isDirty();\n        if (parentIsNew || parentHasChanged) {\n            this.displayNotification({ message: _t('Please click on the \"save\" button first'), type: 'danger' });\n            return;\n        }\n        this.do_action({\n            name: _t('Select Operations to Copy'),\n            type: 'ir.actions.act_window',\n            res_model: 'mrp.routing.workcenter',\n            views: [[false, 'list'], [false, 'form']],\n            domain: ['|', ['bom_id', '=', false], ['bom_id.active', '=', true]],\n            context: {\n                tree_view_ref: 'mrp.mrp_routing_workcenter_copy_to_bom_tree_view',\n                bom_id: this.recordData.id,\n            },\n        });\n\n    },\n});\n\nfieldRegistry.add('mrp_one2many_with_copy', MrpFieldOne2ManyWithCopy);\n\nexport default MrpFieldOne2ManyWithCopy;\n", "odoo.define('web_map.MapController', function (require) {\n\"use strict\";\n\nconst AbstractController = require('web.AbstractController');\nconst core = require('web.core');\nconst qweb = core.qweb;\n\nconst MapController = AbstractController.extend({\n    custom_events: _.extend({}, AbstractController.prototype.custom_events, {\n        'pin_clicked': '_onPinClick',\n        'get_itinerary_clicked': '_onGetItineraryClicked',\n        'open_clicked': '_onOpenClicked',\n        'pager_changed': '_onPagerChanged',\n        'coordinate_fetched': '_onCoordinateFetched',\n    }),\n\n    /**\n     * @constructor\n     */\n    init: function (parent, model, renderer, params) {\n        this._super.apply(this, arguments);\n        this.actionName = params.actionName;\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     * @param {jQuery} [$node]\n     */\n    renderButtons: function ($node) {\n        this.$buttons = $(qweb.render(\"MapView.buttons\"), { widget: this });\n        this._updateGoogleMapUrl();\n        this.$buttons.appendTo($node);\n    },\n    /**\n     * @override\n     */\n    update: async function () {\n        await this._super(...arguments);\n        this._updatePaging();\n        this._updateGoogleMapUrl();\n    },\n    /**\n     * When the records dataset is updated, the URL to Google Maps need to be updated as well\n     * to reflect the new recordset.\n     * This will redirect the user to the displayed records even if he filters them using the search bar.\n     *\n     * @private\n     */\n    _updateGoogleMapUrl: function () {\n        var url = 'https://www.google.com/maps/dir/?api=1';\n        if (this.model.data.records.length) {\n            url += '&waypoints=';\n            var all_coord = this.model.data.records.filter((record) => record.partner && record.partner.partner_latitude && record.partner.partner_longitude);\n            _.uniq(all_coord, function (record) { return record.partner.partner_latitude + '_' + record.partner.partner_longitude; })\n                .forEach((record) => {\n                    url += record.partner.partner_latitude + ',' + record.partner.partner_longitude + '|';\n                });\n            url = url.slice(0, -1);\n        }\n        this.$buttons.find('a.btn.btn-primary').attr('href', url);\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Return the params (currentMinimum, limit and size) to pass to the pager,\n     * according to the current state.\n     *\n     * @private\n     * @returns {Object}\n     */\n    _getPagingInfo: function () {\n        const state = this.model.get();\n        return {\n            currentMinimum: state.offset + 1,\n            limit: state.limit,\n            size: state.count,\n        };\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onCoordinateFetched: function (ev) {\n        ev.stopPropagation();\n        this.update({}, { reload: false });\n    },\n    /**\n     * Redirects to google maps with all the records' coordinates.\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onGetItineraryClicked: function (ev) {\n        window.open(`https://www.google.com/maps/dir/?api=1&destination=${ev.data.lat},${ev.data.lon}`);\n    },\n    /**\n     * Redirects to views when clicked on open button in marker popup.\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onOpenClicked: function (ev) {\n        if (ev.data.ids.length > 1) {\n            this.do_action({\n                type: 'ir.actions.act_window',\n                name: this.actionName,\n                views: [[false, 'list'], [false, 'form']],\n                res_model: this.modelName,\n                domain: [['id', 'in', ev.data.ids]],\n            });\n        } else {\n            this.trigger_up('switch_view', {\n                view_type: 'form',\n                res_id: ev.data.ids[0],\n                mode: 'readonly',\n                model: this.modelName\n            });\n        }\n    },\n    /**\n     * @private\n     * @param {OdooEvent} ev\n     */\n    async _onPagerChanged(ev) {\n        const { currentMinimum, limit } = ev.data;\n        await this.reload({ limit, offset: currentMinimum - 1 });\n    },\n});\n\nreturn MapController;\n});\n", "odoo.define('web_map.MapModel', function (require) {\n\"use strict\";\n\nconst AbstractModel = require('web.AbstractModel');\nconst session = require('web.session');\nconst core = require('web.core');\nconst _t = core._t;\n\nconst MapModel = AbstractModel.extend({\n    // Used in _openStreetMapAPIAsync to add delay between coordinates fetches\n    // We need this delay to not get banned from OSM.\n    COORDINATE_FETCH_DELAY: 1000,\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @constructor\n     */\n    init: function () {\n        this._super.apply(this, arguments);\n        this.data = {};\n        this.data.mapBoxToken = session.map_box_token;\n    },\n    __get: function () {\n        return this.data;\n    },\n    __load: function (params) {\n        this.data.count = 0;\n        this.data.offset = 0;\n        this.data.limit = params.limit;\n        this.partnerToCache = [];\n        this.partnerIds = [];\n        this.resPartnerField = params.resPartnerField;\n        this.model = params.modelName;\n        this.context = params.context;\n        this.fields = params.fieldNames;\n        this.fieldsInfo = params.fieldsInfo;\n        this.domain = params.domain;\n        this.params = params;\n        this.orderBy = params.orderBy;\n        this.routing = params.routing;\n        this.numberOfLocatedRecords = 0;\n        this.coordinateFetchingTimeoutHandle = undefined;\n        this.data.shouldUpdatePosition = true;\n        this.data.fetchingCoordinates = false;\n        this.data.groupBy = params.groupedBy.length ? params.groupedBy[0] : false;\n        return this._fetchData();\n    },\n    __reload: function (handle, params) {\n        const options = params || {};\n        this.partnerToCache = [];\n        this.partnerIds = [];\n        this.numberOfLocatedRecords = 0;\n        this.data.shouldUpdatePosition = true;\n        this.data.fetchingCoordinates = false;\n        if (this.coordinateFetchingTimeoutHandle !== undefined) {\n            clearInterval(this.coordinateFetchingTimeoutHandle);\n            this.coordinateFetchingTimeoutHandle = undefined;\n        }\n        if (options.domain !== undefined) {\n            this.domain = options.domain;\n        }\n        if (options.limit !== undefined) {\n            this.data.limit = options.limit;\n        }\n        if (options.offset !== undefined) {\n            this.data.offset = options.offset;\n        }\n        if (options.groupBy !== undefined && options.groupBy[0] !== this.data.groupBy) {\n            this.data.groupBy = options.groupBy.length ? options.groupBy[0] : false;\n        }\n        return this._fetchData();\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Adds the corresponding partner to a record.\n     *\n     * @private\n     */\n    _addPartnerToRecord: function () {\n        this.data.records.forEach((record) => {\n            this.data.partners.forEach((partner) => {\n                let recordPartnerId;\n                if (this.model === \"res.partner\" && this.resPartnerField === \"id\") {\n                    recordPartnerId = record.id;\n                } else {\n                    recordPartnerId = record[this.resPartnerField][0];\n                }\n\n                if (recordPartnerId == partner.id) {\n                    record.partner = partner;\n                    this.numberOfLocatedRecords++;\n                }\n            });\n        });\n    },\n    /**\n     * The partner's coordinates should be between -90 <= latitude <= 90 and -180 <= longitude <= 180.\n     *\n     * @private\n     * @param {Object} partner\n     * @param {float} partner.partner_latitude latitude of the partner\n     * @param {float} partner.partner_longitude longitude of the partner\n     * @returns {boolean}\n     */\n    _checkCoordinatesValidity: function (partner) {\n        if (partner.partner_latitude && partner.partner_longitude &&\n            partner.partner_latitude >= -90 && partner.partner_latitude <= 90 &&\n            partner.partner_longitude >= -180 && partner.partner_longitude <= 180) {\n            return true;\n        }\n        return false;\n    },\n    /**\n     * This function convert the addresses to coordinates using the mapbox API.\n     *\n     * @private\n     * @param {Object} record this object contains the record fetched from the database.\n     * @returns {Promise<result>} result.query contains the query the the api received\n     *      result.features contains results in descendant order of relevance\n     */\n    _fetchCoordinatesFromAddressMB: function (record) {\n        const address = encodeURIComponent(record.contact_address_complete);\n        const token = this.data.mapBoxToken;\n        const encodedUrl = `https://api.mapbox.com/geocoding/v5/mapbox.places/${address}.json?access_token=${token}&cachebuster=1552314159970&autocomplete=true`;\n        return new Promise((resolve, reject) => {\n            $.get(encodedUrl).then(resolve).catch(reject);\n        });\n    },\n    /**\n     * This function convert the addresses to coordinates using the openStreetMap api.\n     *\n     * @private\n     * @param {Object} record this object contains the record fetched from the database.\n     * @returns {Promise<result>} result is an array that contains the result in descendant order of relevance\n     *      result[i].lat is the latitude of the converted address\n     *      result[i].lon is the longitude of the converted address\n     *      result[i].importance is a float that the relevance of the result the closer the float is to one the best it is.\n     */\n    _fetchCoordinatesFromAddressOSM: function (record) {\n        const address = encodeURIComponent(record.contact_address_complete.replace('/', ' '));\n        const encodedUrl = `https://nominatim.openstreetmap.org/search/${address}?format=jsonv2`;\n        return new Promise(function (resolve, reject) {\n            $.get(encodedUrl).then(resolve).catch(reject);\n        });\n    },\n    /**\n     * Handles the case of an empty map.\n     * Handles the case where the model is res_partner.\n     * Fetches the records according to the model given in the arch.\n     * If the records has no partner_id field it is sliced from the array.\n     *\n     * @private\n     * @return {Promise}\n     */\n    _fetchData: async function () {\n        //case of empty map\n        if (!this.resPartnerField) {\n            this.data.recordGroups = [];\n            this.data.records = [];\n            this.data.routeInfo = { routes: [] };\n            return;\n        }\n        const results = await this._fetchRecordData();\n        this.data.records = results.records;\n        this.data.count = results.length;\n        if (this.data.groupBy) {\n            this.data.recordGroups = this._getRecordGroups();\n        } else {\n            this.data.recordGroups = {};\n        }\n\n        this.partnerIds = [];\n        if (this.model === \"res.partner\" && this.resPartnerField === \"id\") {\n            this.data.records.forEach((record) => {\n                this.partnerIds.push(record.id);\n                record.partner_id = [record.id];\n            });\n        } else {\n            this._fillPartnerIds(this.data.records);\n        }\n\n        this.partnerIds = _.uniq(this.partnerIds);\n        return this._partnerFetching(this.partnerIds);\n    },\n    /**\n     * Fetch the records for a given model.\n     *\n     * @private\n     * @returns {Promise<results>}\n     */\n    async _fetchRecordData() {\n        const groupBy = this.data.groupBy ? this.data.groupBy.split(':')[0] : false;\n        const results = await this._rpc({\n            route: '/web/dataset/search_read',\n            model: this.model,\n            context: this.context,\n            fields: groupBy ?\n                this.fields.concat(groupBy) :\n                this.fields,\n            domain: this.domain,\n            orderBy: this.orderBy,\n            limit: this.data.limit,\n            offset: this.data.offset\n        })\n        if (results && groupBy && [\"one2many\", \"many2many\"].includes(this.fieldsInfo[groupBy].type)) {\n            const ids = new Set(results.records.flatMap((record) => record[groupBy]));\n            const groupbyRecords = await this._rpc({\n                method: 'name_get',\n                model: this.fieldsInfo[groupBy].relation,\n                context: this.context,\n                args: [[...ids]],\n            })\n            const labelPerRecordId = Object.fromEntries(groupbyRecords);\n            for (const record of results.records) {\n                record[groupBy] = record[groupBy].map(\n                    val =>\n                        val && val in labelPerRecordId\n                            ? [val, labelPerRecordId[val]]\n                            : false\n                );\n            }\n        }\n        return results;\n    },\n    /**\n     * @private\n     * @returns {Object} the fetched records grouped by the groupBy field.\n     */\n    _getRecordGroups: function () {\n        const [fieldName, subGroup] = this.data.groupBy.split(':');\n        const dateGroupFormats = {\n            year: 'YYYY',\n            quarter: '[Q]Q YYYY',\n            month: 'MMMM YYYY',\n            week: '[W]WW YYYY',\n            day: 'DD MMM YYYY',\n        };\n        const groups = {};\n        for (const record of this.data.records) {\n            const vals = [\"one2many\", \"many2many\"].includes(this.fieldsInfo[fieldName].type)\n                ? record[fieldName] : [record[fieldName]];\n\n            for(const val of vals){\n                let id, name;\n                if (['date', 'datetime'].includes(this.fieldsInfo[fieldName].type)) {\n                    const date = moment(val);\n                    id = name = date.format(dateGroupFormats[subGroup]);\n                } else {\n                    id = Array.isArray(val) ? val[0] : val;\n                    name = Array.isArray(val) ? val[1] : val;\n                }\n                if (!groups[id]) {\n                    groups[id] = {\n                        name,\n                        records: [],\n                    };\n                }\n                groups[id].records.push(record);\n            }\n        }\n        return groups;\n    },\n    /**\n     * @private\n     * @param {Number[]} ids contains the ids from the partners\n     * @returns {Promise}\n     */\n    _fetchRecordsPartner: function (ids) {\n        return this._rpc({\n            model: 'res.partner',\n            method: 'search_read',\n            fields: ['contact_address_complete', 'partner_latitude', 'partner_longitude'],\n            domain: [['contact_address_complete', '!=', 'False'], ['id', 'in', ids]],\n        });\n    },\n    /**\n     * Fetch the route from the mapbox api.\n     *\n     * @private\n     * @returns {Promise<results>}\n     *      results.geometry.legs[i] contains one leg (i.e: the trip between two markers).\n     *      results.geometry.legs[i].steps contains the sets of coordinates to follow to reach a point from an other.\n     *      results.geometry.legs[i].distance: the distance in meters to reach the destination\n     *      results.geometry.legs[i].duration the duration of the leg\n     *      results.geometry.coordinates contains the sets of coordinates to go from the first to the last marker without the notion of waypoint\n     */\n    _fetchRoute: function () {\n        const coordinatesParam = this.data.records\n            .filter(record => record.partner.partner_latitude && record.partner.partner_longitude)\n            .map(record => record.partner.partner_longitude + ',' + record.partner.partner_latitude);\n        const address = encodeURIComponent(coordinatesParam.join(';'));\n        const token = this.data.mapBoxToken;\n        const encodedUrl = `https://api.mapbox.com/directions/v5/mapbox/driving/${address}?access_token=${token}&steps=true&geometries=geojson`;\n        return new Promise(function (resolve, reject) {\n            $.get(encodedUrl).then(resolve).catch(reject);\n        });\n    },\n    /**\n     * @private\n     * @param {Object[]} records the records that are going to be filtered\n     * @returns {Object[]} Array of records that contains a partner_id\n     */\n    _fillPartnerIds: function (records) {\n        return records.forEach(record => {\n            if (record[this.resPartnerField]) {\n                this.partnerIds.push(record[this.resPartnerField][0]);\n            }\n        });\n    },\n    /**\n     * Converts a MapBox error message into a custom translatable one.\n     *\n     * @private\n     * @param {string} message\n     */\n    _getErrorMessage: function (message) {\n        const ERROR_MESSAGES = {\n            'Too many coordinates; maximum number of coordinates is 25': _t(\"Too many routing points (maximum 25)\"),\n            'Route exceeds maximum distance limitation': _t(\"Some routing points are too far apart\"),\n            'Too Many Requests': _t(\"Too many requests, try again in a few minutes\"),\n        };\n        return ERROR_MESSAGES[message];\n    },\n    /**\n     * Handles the case where the selected api is MapBox.\n     * Iterates on all the partners and fetches their coordinates when they're not set.\n     *\n     * @private\n     * @return {Promise<routeResult> | Promise<>} if there's more than 2 located records and the routing option is activated it returns a promise that fetches the route\n     *      resultResult is an object that contains the computed route\n     *      or if either of these conditions are not respected it returns an empty promise\n     */\n    _maxBoxAPI: function () {\n        const promises = [];\n        this.data.partners.forEach(partner => {\n            if (partner.contact_address_complete && (!partner.partner_latitude || !partner.partner_longitude)) {\n                promises.push(this._fetchCoordinatesFromAddressMB(partner).then(coordinates => {\n                    if (coordinates.features.length) {\n                        partner.partner_longitude = coordinates.features[0].geometry.coordinates[0];\n                        partner.partner_latitude = coordinates.features[0].geometry.coordinates[1];\n                        this.partnerToCache.push(partner);\n                    }\n                }));\n            } else if (!this._checkCoordinatesValidity(partner)) {\n                partner.partner_latitude = undefined;\n                partner.partner_longitude = undefined;\n            }\n        });\n        return Promise.all(promises).then(() => {\n            this.data.routeInfo = { routes: [] };\n            if (this.numberOfLocatedRecords > 1 && this.routing && !this.data.groupBy) {\n                return this._fetchRoute().then(routeResult => {\n                    if (routeResult.routes) {\n                        this.data.routeInfo = routeResult;\n                    } else {\n                        this.data.routingError = this._getErrorMessage(routeResult.message);\n                    }\n                });\n            } else {\n                return Promise.resolve();\n            }\n        });\n    },\n    /**\n     * Handles the displaying of error message according to the error.\n     *\n     * @private\n     * @param {Object} err contains the error returned by the requests\n     * @param {Number} err.status contains the status_code of the failed http request\n     */\n    _mapBoxErrorHandling: function (err) {\n        switch (err.status) {\n            case 401:\n                this.displayNotification({\n                    title: _t('Token invalid'),\n                    message: _t('The view has switched to another provider but functionalities will be limited'),\n                    type: 'danger',\n                });\n                break;\n            case 403:\n                this.displayNotification({\n                    title: _t('Unauthorized connection'),\n                    message: _t('The view has switched to another provider but functionalities will be limited'),\n                    type: 'danger',\n                });\n                break;\n            case 422:   // Max. addresses reached\n            case 429:   // Max. requests reached\n                this.data.routingError = this._getErrorMessage(err.responseJSON.message);\n                break;\n            case 500:\n                this.displayNotification({\n                    title: _t('MapBox servers unreachable'),\n                    message: _t('The view has switched to another provider but functionalities will be limited'),\n                    type: 'danger',\n                });\n        }\n    },\n    /**\n     * Notifies the fetched coordinates to server and controller.\n     *\n     * @private\n     */\n    _notifyFetchedCoordinate: function () {\n        this._writeCoordinatesUsers();\n        this.data.shouldUpdatePosition = false;\n        this.trigger_up('coordinate_fetched');\n    },\n    /**\n     * Calls (without awaiting) _openStreetMapAPIAsync with a delay of 1000ms\n     * to not get banned from openstreetmap's server.\n     *\n     * Tests should patch this function to wait for coords to be fetched.\n     *\n     * @see _openStreetMapAPIAsync\n     * @private\n     * @return {Promise}\n     */\n    _openStreetMapAPI: function () {\n        this._openStreetMapAPIAsync();\n        return Promise.resolve();\n    },\n    /**\n     * Handles the case where the selected api is open street map.\n     * Iterates on all the partners and fetches their coordinates when they're not set.\n     *\n     * @private\n     * @returns {Promise}\n     */\n    _openStreetMapAPIAsync: function () {\n        // Group partners by address to reduce address list\n        const addressPartnerMap = new Map();\n        for (const partner of this.data.partners) {\n            if (partner.contact_address_complete && (!partner.partner_latitude || !partner.partner_longitude)) {\n                if (!addressPartnerMap.has(partner.contact_address_complete)) {\n                    addressPartnerMap.set(partner.contact_address_complete, []);\n                }\n                addressPartnerMap.get(partner.contact_address_complete).push(partner);\n                partner.fetchingCoordinate = true;\n            } else if (!this._checkCoordinatesValidity(partner)) {\n                partner.partner_latitude = undefined;\n                partner.partner_longitude = undefined;\n            }\n        }\n\n        // `fetchingCoordinates` is used to display the \"fetching banner\"\n        // We need to check if there are coordinates to fetch before reload the\n        // view to prevent flickering\n        this.data.fetchingCoordinates = addressPartnerMap.size > 0;\n        const fetch = async () => {\n            const partnersList = Array.from(addressPartnerMap.values());\n            for (let i = 0; i < partnersList.length; i++) {\n                const partners = partnersList[i];\n                try {\n                    const coordinates = await this._fetchCoordinatesFromAddressOSM(partners[0]);\n                    if (coordinates.length) {\n                        for (const partner of partners) {\n                            partner.partner_longitude = coordinates[0].lon;\n                            partner.partner_latitude = coordinates[0].lat;\n                            this.partnerToCache.push(partner);\n                        }\n                    }\n                } finally {\n                    for (const partner of partners) {\n                        partner.fetchingCoordinate = false;\n                    }\n                    this.data.fetchingCoordinates = (i < partnersList.length - 1);\n                    this._notifyFetchedCoordinate();\n                    await new Promise((resolve) => {\n                        this.coordinateFetchingTimeoutHandle =\n                            setTimeout(resolve, this.COORDINATE_FETCH_DELAY);\n                    });\n                }\n            }\n        }\n        return fetch();\n    },\n    /**\n     * Fetches the partner which ids are contained in the the array partnerids\n     * if the token is set it uses the mapBoxApi to fetch address and route\n     * if not is uses the openstreetmap api to fetch the address.\n     *\n     * @private\n     * @param {number[]} partnerIds this array contains the ids from the partner that are linked to records\n     * @returns {Promise}\n     */\n    _partnerFetching: async function (partnerIds) {\n        this.data.partners = partnerIds.length ? await this._fetchRecordsPartner(partnerIds) : [];\n        this._addPartnerToRecord();\n        if (this.data.mapBoxToken) {\n            return this._maxBoxAPI()\n                .then(() => {\n                    this._writeCoordinatesUsers();\n                }).catch((err) => {\n                    this._mapBoxErrorHandling(err);\n                    this.data.mapBoxToken = '';\n                    return this._openStreetMapAPI();\n                });\n        } else {\n            return this._openStreetMapAPI().then(() => {\n                this._writeCoordinatesUsers();\n            });\n        }\n    },\n    /**\n     * Writes partner_longitude and partner_latitude of the res.partner model.\n     *\n     * @private\n     * @return {Promise}\n     */\n    _writeCoordinatesUsers: function () {\n        if (this.partnerToCache.length) {\n            this._rpc({\n                model: 'res.partner',\n                method: 'update_latitude_longitude',\n                context: this.context,\n                args: [this.partnerToCache]\n            });\n            this.partnerToCache = [];\n        }\n    },\n});\n\nreturn MapModel;\n});\n", "/* global L */\n// L is the object of leaflet\nodoo.define('web_map.MapRenderer', function (require) {\n    \"use strict\";\n\n    const AbstractRendererOwl = require('web.AbstractRendererOwl');\n\n    const { useRef, useState } = owl.hooks;\n\n    const apiTilesRouteWithToken =\n        'https://api.mapbox.com/styles/v1/{id}/tiles/{z}/{x}/{y}?access_token={accessToken}';\n    const apiTilesRouteWithoutToken = 'https://a.tile.openstreetmap.org/{z}/{x}/{y}.png';\n\n    const colors = [\n        '#F06050',\n        '#6CC1ED',\n        '#F7CD1F',\n        '#814968',\n        '#30C381',\n        '#D6145F',\n        '#475577',\n        '#F4A460',\n        '#EB7E7F',\n        '#2C8397',\n    ];\n\n    const mapTileAttribution = `\n        \u00a9 <a href=\"https://www.mapbox.com/about/maps/\">Mapbox</a>\n        \u00a9 <a href=\"http://www.openstreetmap.org/copyright\">OpenStreetMap</a>\n        <strong>\n            <a href=\"https://www.mapbox.com/map-feedback/\" target=\"_blank\">\n                Improve this map\n            </a>\n        </strong>`;\n\n    class MapRenderer extends AbstractRendererOwl {\n        /**\n         * @constructor\n         */\n        constructor() {\n            super(...arguments);\n            this.leafletMap = null;\n            this.markers = [];\n            this.polylines = [];\n            this.mapContainerRef = useRef('mapContainer');\n            this.state = useState({\n                closedGroupIds: [],\n            });\n        }\n        /**\n         * Load marker icons.\n         *\n         * @override\n         */\n        async willStart() {\n            const p = { method: 'GET' };\n            [this._pinCircleSVG, this._pinNoCircleSVG] = await Promise.all([\n                this.env.services.httpRequest('web_map/static/img/pin-circle.svg', p, 'text'),\n                this.env.services.httpRequest('web_map/static/img/pin-no-circle.svg', p, 'text'),\n            ]);\n            return super.willStart(...arguments);\n        }\n        /**\n         * Initialize and mount map.\n         *\n         * @override\n         */\n        mounted() {\n            this.leafletMap = L.map(this.mapContainerRef.el, {\n                maxBounds: [L.latLng(180, -180), L.latLng(-180, 180)],\n            });\n            L.tileLayer(this.apiTilesRoute, {\n                attribution: mapTileAttribution,\n                tileSize: 512,\n                zoomOffset: -1,\n                minZoom: 2,\n                maxZoom: 19,\n                id: 'mapbox/streets-v11',\n                accessToken: this.props.mapBoxToken,\n            }).addTo(this.leafletMap);\n            this._updateMap();\n            super.mounted(...arguments);\n        }\n        /**\n         * Update position in the map, markers and routes.\n         *\n         * @override\n         */\n        patched() {\n            this._updateMap();\n            super.patched(...arguments);\n        }\n        /**\n         * Update group opened/closed state.\n         *\n         * @override\n         */\n        willUpdateProps(nextProps) {\n            if (this.props.groupBy !== nextProps.groupBy) {\n                this.state.closedGroupIds = [];\n            }\n            return super.willUpdateProps(...arguments);\n        }\n        /**\n         * Remove map and the listeners on its markers and routes.\n         *\n         * @override\n         */\n        willUnmount() {\n            for (const marker of this.markers) {\n                marker.off('click');\n            }\n            for (const polyline of this.polylines) {\n                polyline.off('click');\n            }\n            this.leafletMap.remove();\n            super.willUnmount(...arguments);\n        }\n\n        //----------------------------------------------------------------------\n        // Getters\n        //----------------------------------------------------------------------\n\n        /**\n         * Return the route to the tiles api with or without access token.\n         *\n         * @returns {string}\n         */\n        get apiTilesRoute() {\n            return this.props.mapBoxToken ? apiTilesRouteWithToken : apiTilesRouteWithoutToken;\n        }\n\n        //----------------------------------------------------------------------\n        // Private\n        //----------------------------------------------------------------------\n\n        /**\n         * If there's located records, adds the corresponding marker on the map.\n         * Binds events to the created markers.\n         *\n         * @private\n         */\n        _addMarkers() {\n            this._removeMarkers();\n\n            const markersInfo = {};\n            let records = this.props.records;\n            if (this.props.groupBy) {\n                records = Object.entries(this.props.recordGroups)\n                    .filter(([key]) => !this.state.closedGroupIds.includes(key))\n                    .flatMap(([, value]) => value.records);\n            }\n\n            for (const record of records) {\n                const partner = record.partner;\n                if (partner && partner.partner_latitude && partner.partner_longitude) {\n                    const key = `${partner.partner_latitude}-${partner.partner_longitude}`;\n                    if (key in markersInfo) {\n                        markersInfo[key].record = record;\n                        markersInfo[key].ids.push(record.id);\n                    } else {\n                        markersInfo[key] = { record: record, ids: [record.id] };\n                    }\n                }\n            }\n\n            for (const markerInfo of Object.values(markersInfo)) {\n                const params = {\n                    count: markerInfo.ids.length,\n                    isMulti: markerInfo.ids.length > 1,\n                    number: this.props.records.indexOf(markerInfo.record) + 1,\n                    numbering: this.props.numbering,\n                    pinSVG: (this.props.numbering ? this._pinNoCircleSVG : this._pinCircleSVG),\n                };\n\n                if (this.props.groupBy) {\n                    const group = Object.entries(this.props.recordGroups)\n                        .find(([, value]) => value.records.includes(markerInfo.record));\n                    params.color = this._getGroupColor(group[0]);\n                    params.number = group[1].records.indexOf(markerInfo.record) + 1;\n                }\n\n                // Icon creation\n                const iconInfo = {\n                    className: 'o_map_marker',\n                    html: this.env.qweb.renderToString('web_map.marker', params),\n                };\n\n                // Attach marker with icon and popup\n                const marker = L.marker([\n                    markerInfo.record.partner.partner_latitude,\n                    markerInfo.record.partner.partner_longitude\n                ], { icon: L.divIcon(iconInfo) });\n                marker.addTo(this.leafletMap);\n                marker.on('click', () => {\n                    this._createMarkerPopup(markerInfo);\n                });\n                this.markers.push(marker);\n            }\n        }\n        /**\n         * If there are computed routes, create polylines and add them to the map.\n         * each element of this.props.routeInfo[0].legs array represent the route between\n         * two waypoints thus each of these must be a polyline.\n         *\n         * @private\n         */\n        _addRoutes() {\n            this._removeRoutes();\n            if (!this.props.mapBoxToken || !this.props.routeInfo.routes.length) {\n                return;\n            }\n\n            for (const leg of this.props.routeInfo.routes[0].legs) {\n                const latLngs = [];\n                for (const step of leg.steps) {\n                    for (const coordinate of step.geometry.coordinates) {\n                        latLngs.push(L.latLng(coordinate[1], coordinate[0]));\n                    }\n                }\n\n                const polyline = L.polyline(latLngs, {\n                    color: 'blue',\n                    weight: 5,\n                    opacity: 0.3,\n                }).addTo(this.leafletMap);\n\n                const polylines = this.polylines;\n                polyline.on('click', function () {\n                    for (const polyline of polylines) {\n                        polyline.setStyle({ color: 'blue', opacity: 0.3 });\n                    }\n                    this.setStyle({ color: 'darkblue', opacity: 1.0 });\n                });\n                this.polylines.push(polyline);\n            }\n        }\n        /**\n         * Create a popup for the specified marker.\n         *\n         * @private\n         * @param {Object} markerInfo\n         */\n        _createMarkerPopup(markerInfo) {\n            const popupFields = this._getMarkerPopupFields(markerInfo);\n            const partner = markerInfo.record.partner;\n            const popupHtml = this.env.qweb.renderToString('web_map.markerPopup', {\n                fields: popupFields,\n                hasFormView: this.props.hasFormView,\n                url: `https://www.google.com/maps/dir/?api=1&destination=${partner.partner_latitude},${partner.partner_longitude}`,\n            });\n\n            const popup = L.popup({ offset: [0, -30] })\n                .setLatLng([partner.partner_latitude, partner.partner_longitude])\n                .setContent(popupHtml)\n                .openOn(this.leafletMap);\n\n            const openBtn = popup.getElement().querySelector('button.o_open');\n            if (openBtn) {\n                openBtn.onclick = () => {\n                    this.trigger('open_clicked', { ids: markerInfo.ids });\n                };\n            }\n            return popup;\n        }\n        /**\n         * @private\n         * @param {Number} groupId\n         */\n        _getGroupColor(groupId) {\n            const index = Object.keys(this.props.recordGroups).indexOf(groupId);\n            return colors[index % colors.length];\n        }\n        /**\n         * Creates an array of latLng objects if there is located records.\n         *\n         * @private\n         * @returns {latLngBounds|boolean} objects containing the coordinates that\n         *          allows all the records to be shown on the map or returns false\n         *          if the records does not contain any located record.\n         */\n        _getLatLng() {\n            const tabLatLng = [];\n            for (const record of this.props.records) {\n                const partner = record.partner;\n                if (partner && partner.partner_latitude && partner.partner_longitude) {\n                    tabLatLng.push(L.latLng(partner.partner_latitude, partner.partner_longitude));\n                }\n            }\n            if (!tabLatLng.length) {\n                return false;\n            }\n            return L.latLngBounds(tabLatLng);\n        }\n        /**\n         * Get the fields' name and value to display in the popup.\n         *\n         * @private\n         * @param {Object} markerInfo\n         * @returns {Object} value contains the value of the field and string\n         *                   contains the value of the xml's string attribute\n         */\n        _getMarkerPopupFields(markerInfo) {\n            const record = markerInfo.record;\n            const fieldsView = [];\n            // Only display address in multi coordinates marker popup\n            if (markerInfo.ids.length > 1) {\n                if (!this.props.hideAddress) {\n                    fieldsView.push({\n                        value: record.partner.contact_address_complete,\n                        string: this.env._t(\"Address\"),\n                    });\n                }\n                return fieldsView;\n            }\n            if (!this.props.hideName) {\n                fieldsView.push({\n                    value: record.display_name,\n                    string: this.env._t(\"Name\"),\n                });\n            }\n            if (!this.props.hideAddress) {\n                fieldsView.push({\n                    value: record.partner.contact_address_complete,\n                    string: this.env._t(\"Address\"),\n                });\n            }\n            for (const field of this.props.fieldNamesMarkerPopup) {\n                if (record[field.fieldName]) {\n                    const fieldName = record[field.fieldName] instanceof Array ?\n                        record[field.fieldName][1] :\n                        record[field.fieldName];\n                    fieldsView.push({\n                        value: fieldName,\n                        string: field.string,\n                    });\n                }\n            }\n            return fieldsView;\n        }\n        /**\n         * Remove the markers from the map and empty the markers array.\n         *\n         * @private\n         */\n        _removeMarkers() {\n            for (const marker of this.markers) {\n                this.leafletMap.removeLayer(marker);\n            }\n            this.markers = [];\n        }\n        /**\n         * Remove the routes from the map and empty the the polyline array.\n         *\n         * @private\n         */\n        _removeRoutes() {\n            for (const polyline of this.polylines) {\n                this.leafletMap.removeLayer(polyline);\n            }\n            this.polylines = [];\n        }\n        /**\n         * Update position in the map, markers and routes.\n         *\n         * @private\n         */\n        _updateMap() {\n            if (this.props.shouldUpdatePosition) {\n                const initialCoord = this._getLatLng();\n                if (initialCoord) {\n                    this.leafletMap.flyToBounds(initialCoord, { animate: false });\n                } else {\n                    this.leafletMap.fitWorld();\n                }\n                this.leafletMap.closePopup();\n            }\n            this._addMarkers();\n            this._addRoutes();\n        }\n\n        //----------------------------------------------------------------------\n        // Handlers\n        //----------------------------------------------------------------------\n\n        /**\n         * Center the map on a certain pin and open the popup linked to it.\n         *\n         * @private\n         * @param {Object} record\n         */\n        _centerAndOpenPin(record) {\n            const popup = this._createMarkerPopup({\n                record: record,\n                ids: [record.id],\n            });\n            const px = this.leafletMap.project([record.partner.partner_latitude, record.partner.partner_longitude]);\n            const popupHeight = popup.getElement().offsetHeight;\n            px.y -= popupHeight / 2;\n            const latlng = this.leafletMap.unproject(px);\n            this.leafletMap.panTo(latlng, { animate: true });\n        }\n        /**\n         * @private\n         * @param {Number} id\n         */\n        _toggleGroup(id) {\n            if (this.state.closedGroupIds.includes(id)) {\n                const index = this.state.closedGroupIds.indexOf(id);\n                this.state.closedGroupIds.splice(index, 1);\n            } else {\n                this.state.closedGroupIds.push(id);\n            }\n        }\n    }\n    MapRenderer.props = {\n        arch: Object,\n        count: Number,\n        defaultOrder: {\n            type: String,\n            optional: true,\n        },\n        fetchingCoordinates: Boolean,\n        fieldNamesMarkerPopup: {\n            type: Array,\n            element: {\n                type: Object,\n                shape: {\n                    fieldName: String,\n                    string: String,\n                },\n            },\n        },\n        groupBy: [String, Boolean],\n        hasFormView: Boolean,\n        hideAddress: Boolean,\n        hideName: Boolean,\n        isEmbedded: Boolean,\n        limit: Number,\n        mapBoxToken: { type: [Boolean, String], optional: 1 },\n        noContentHelp: {\n            type: String,\n            optional: true,\n        },\n        numbering: Boolean,\n        hideTitle: Boolean,\n        panelTitle: String,\n        offset: Number,\n        partners: { type: [Array, Boolean], optional: 1 },\n        recordGroups: Object,\n        records: Array,\n        routeInfo: {\n            type: Object,\n            optional: true,\n        },\n        routing: Boolean,\n        routingError: {\n            type: String,\n            optional: true,\n        },\n        shouldUpdatePosition: Boolean,\n    };\n    MapRenderer.template = 'web_map.MapRenderer';\n\n    return MapRenderer;\n});\n", "odoo.define('web_map.MapView', function (require) {\n\"use strict\";\n\nconst MapModel = require('web_map.MapModel');\nconst MapController = require('web_map.MapController');\nconst MapRenderer = require('web_map.MapRenderer');\nconst AbstractView = require('web.AbstractView');\nconst RendererWrapper = require('web.RendererWrapper');\nconst utils = require('web.utils');\nconst viewRegistry = require('web.view_registry');\nconst _t = require('web.core')._t;\n\nconst MapView = AbstractView.extend({\n    jsLibs: [\n        '/web_map/static/lib/leaflet/leaflet.js',\n    ],\n    config: _.extend({}, AbstractView.prototype.config, {\n        Model: MapModel,\n        Controller: MapController,\n        Renderer: MapRenderer,\n    }),\n    icon: 'fa-map-marker',\n    display_name: 'Map',\n    viewType: 'map',\n    mobile_friendly: true,\n    searchMenuTypes: ['filter', 'groupBy', 'favorite'],\n\n    init: function (viewInfo, params) {\n        this._super.apply(this, arguments);\n\n        const fieldNames = [];\n        const fieldNamesMarkerPopup = [];\n\n        this.loadParams.resPartnerField = this.arch.attrs.res_partner;\n        fieldNames.push(this.arch.attrs.res_partner);\n        fieldNames.push('display_name');\n\n        if (this.arch.attrs.default_order) {\n            this.loadParams.orderBy = [{ name: this.arch.attrs.default_order || 'display_name', asc: true }];\n        }\n\n        const routing = [\"true\", \"True\", \"1\"].includes(this.arch.attrs.routing);\n\n        this.loadParams.limit = this.arch.attrs.limit ?\n            parseInt(this.arch.attrs.limit, 10) :\n            params.limit || 80;\n        this.loadParams.routing = routing;\n        this.rendererParams.routing = routing;\n        this.rendererParams.numbering = this.arch.attrs.routing ? true : false;\n        this.rendererParams.defaultOrder = this.arch.attrs.default_order;\n        this.rendererParams.panelTitle = this.arch.attrs.panel_title || params.displayName || _t('Items');\n        this.rendererParams.hideTitle = utils.toBoolElse(this.arch.attrs.hide_title || '', false);\n\n        const hideName = utils.toBoolElse(this.arch.attrs.hide_name || '', false);\n        this.rendererParams.hideName = hideName;\n        if (!hideName) {\n            fieldNames.push('display_name');\n        }\n        this.rendererParams.hideAddress = utils.toBoolElse(this.arch.attrs.hide_address || '', false);\n\n        this.arch.children.forEach(node => {\n            if (node.tag === 'field') {\n                fieldNames.push(node.attrs.name);\n                fieldNamesMarkerPopup.push({ fieldName: node.attrs.name, string: node.attrs.string });\n            }\n        });\n        this.loadParams.fieldsInfo = this.fields;\n        this.loadParams.fieldNames = _.uniq(fieldNames);\n        this.rendererParams.fieldNamesMarkerPopup = fieldNamesMarkerPopup;\n\n        this.rendererParams.hasFormView = params.actionViews.some(view => view.type === \"form\");\n\n        this.controllerParams.actionName = params.action ? params.action.name : _t(\"Untitled\");\n    },\n    /**\n     * @override\n     */\n    getRenderer(parent, state) {\n        state = Object.assign({}, state, this.rendererParams);\n        return new RendererWrapper(null, this.config.Renderer, state);\n    },\n});\n\nviewRegistry.add('map', MapView);\n\nreturn MapView;\n});\n", "odoo.define('web_gantt.GanttController', function (require) {\n\"use strict\";\n\nvar AbstractController = require('web.AbstractController');\nvar core = require('web.core');\nvar config = require('web.config');\nvar dialogs = require('web.view_dialogs');\nvar confirmDialog = require('web.Dialog').confirm;\n\nvar QWeb = core.qweb;\nvar _t = core._t;\n\nvar GanttController = AbstractController.extend({\n    events: _.extend({}, AbstractController.prototype.events, {\n        'click .o_gantt_button_add': '_onAddClicked',\n        'click .o_gantt_button_scale': '_onScaleClicked',\n        'click .o_gantt_button_prev': '_onPrevPeriodClicked',\n        'click .o_gantt_button_next': '_onNextPeriodClicked',\n        'click .o_gantt_button_today': '_onTodayClicked',\n        'click .o_gantt_button_expand_rows': '_onExpandClicked',\n        'click .o_gantt_button_collapse_rows': '_onCollapseClicked',\n    }),\n    custom_events: _.extend({}, AbstractController.prototype.custom_events, {\n        add_button_clicked: '_onCellAddClicked',\n        plan_button_clicked: '_onCellPlanClicked',\n        collapse_row: '_onCollapseRow',\n        expand_row: '_onExpandRow',\n        pill_clicked: '_onPillClicked',\n        pill_resized: '_onPillResized',\n        pill_dropped: '_onPillDropped',\n        updating_pill_started: '_onPillUpdatingStarted',\n        updating_pill_stopped: '_onPillUpdatingStopped',\n    }),\n    buttonTemplateName: 'GanttView.buttons',\n\n    /**\n     * @override\n     * @param {Widget} parent\n     * @param {GanttModel} model\n     * @param {GanttRenderer} renderer\n     * @param {Object} params\n     * @param {Object} params.context\n     * @param {Array[]} params.dialogViews\n     * @param {Object} params.SCALES\n     * @param {boolean} params.collapseFirstLevel\n     */\n    init: function (parent, model, renderer, params) {\n        this._super.apply(this, arguments);\n        this.model = model;\n        this.context = params.context;\n        this.dialogViews = params.dialogViews;\n        this.SCALES = params.SCALES;\n        this.allowedScales = params.allowedScales;\n        this.collapseFirstLevel = params.collapseFirstLevel;\n        this.createAction = params.createAction;\n        this.actionDomain = params.actionDomain;\n\n        this.isRTL = _t.database.parameters.direction === \"rtl\";\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     * @param {jQuery} [$node] to which the buttons will be appended\n     */\n    renderButtons: function ($node) {\n        this.$buttons = this._renderButtonsQWeb();\n        if ($node) {\n            this.$buttons.appendTo($node);\n        }\n    },\n    _renderButtonsQWeb: function () {\n        return $(QWeb.render(this.buttonTemplateName, this._renderButtonQWebParameter()));\n    },\n    _renderButtonQWebParameter: function () {\n        var state = this.model.get();\n        var nbGroups = state.groupedBy.length;\n        var minNbGroups = this.collapseFirstLevel ? 0 : 1;\n        var displayExpandCollapseButtons = nbGroups > minNbGroups;\n        return {\n            groupedBy: state.groupedBy,\n            widget: this,\n            SCALES: this.SCALES,\n            activateScale: state.scale,\n            allowedScales: this.allowedScales,\n            displayExpandCollapseButtons: displayExpandCollapseButtons,\n            isMobile: config.device.isMobile,\n        };\n    },\n    /**\n     * @override\n     */\n    updateButtons: function () {\n        if (!this.$buttons) {\n            return;\n        }\n        this.$buttons.html(this._renderButtonsQWeb());\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {integer} id\n     * @param {Object} schedule\n     */\n    _copy: function (id, schedule) {\n        return this._executeAsyncOperation(\n            this.model.copy.bind(this.model),\n            [id, schedule]\n        );\n    },\n    /**\n     * @private\n     * @param {function} operation\n     * @param {Array} args\n     */\n    _executeAsyncOperation: function (operation, args) {\n        const self = this;\n        var prom = new Promise(function (resolve, reject) {\n            var asyncOp = operation(...args);\n            asyncOp.then(resolve).guardedCatch(resolve);\n            self.dp.add(asyncOp).guardedCatch(reject);\n        });\n        return prom.then(this.reload.bind(this, {}));\n    },\n    /**\n     * @private\n     * @param {OdooEvent} event\n     */\n    _getDialogContext: function (date, rowId) {\n        var state = this.model.get();\n        var context = {};\n        context[state.dateStartField] = date.clone();\n        context[state.dateStopField] = date.clone().endOf(this.SCALES[state.scale].interval);\n        if (rowId) {\n            // Default values of the group this cell belongs in\n            // We can read them from any pill in this group row\n            _.each(state.groupedBy, function (fieldName) {\n                const groupValue = Object.assign({}, ...JSON.parse(rowId));\n                var value = groupValue[fieldName];\n                if (Array.isArray(value)) {\n                    const { type: fieldType } = state.fields[fieldName];\n                    if (fieldType === \"many2many\") {\n                        value = [value[0]];\n                    } else if (fieldType === \"many2one\") {\n                        value = value[0];\n                    }\n                }\n                if (value !== undefined) {\n                    context[fieldName] = value;\n                }\n            });\n        }\n\n        // moment context dates needs to be converted in server time in view\n        // dialog (for default values)\n        for (var k in context) {\n            var type = state.fields[k].type;\n            if (context[k] && (type === 'datetime' || type === 'date')) {\n                context[k] = this.model.convertToServerTime(context[k]);\n            }\n        }\n\n        return context;\n    },\n    /**\n     * Opens dialog to add/edit/view a record\n     *\n     * @private\n     * @param {integer|undefined} resID\n     * @param {Object|undefined} context\n     * @returns {FormViewDialog}\n     */\n    _openDialog: function (resID, context) {\n        var title = resID ? _t(\"Open\") : _t(\"Create\");\n\n        return new dialogs.FormViewDialog(this, {\n            title: _.str.sprintf(title),\n            res_model: this.modelName,\n            view_id: this.dialogViews[0][0],\n            res_id: resID,\n            readonly: !this.is_action_enabled('edit'),\n            deletable: this.is_action_enabled('delete') && resID,\n            context: _.extend({}, this.context, context),\n            on_saved: this.reload.bind(this, {}),\n            on_remove: this._onDialogRemove.bind(this, resID),\n        }).open();\n    },\n    /**\n     * Handler called when clicking the\n     * delete button in the edit/view dialog.\n     * Reload the view and close the dialog\n     *\n     * @returns {function}\n     */\n    _onDialogRemove: function (resID) {\n        var controller = this;\n\n        var confirm = new Promise(function (resolve) {\n            confirmDialog(this, _t('Are you sure to delete this record?'), {\n                confirm_callback: function () {\n                    resolve(true);\n                },\n                cancel_callback: function () {\n                    resolve(false);\n                },\n            });\n        });\n\n        return confirm.then(function (confirmed) {\n            if ((!confirmed)) {\n                return Promise.resolve();\n            }// else\n            return controller._rpc({\n                model: controller.modelName,\n                method: 'unlink',\n                args: [[resID,],],\n            }).then(function () {\n                return controller.reload();\n            })\n        });\n    },\n    /**\n     * Opens dialog to plan records.\n     *\n     * @private\n     * @param {Object} context\n     */\n    _openPlanDialog: function (context) {\n        var self = this;\n        var state = this.model.get();\n        var domain = [\n            '|',\n            [state.dateStartField, '=', false],\n            [state.dateStopField, '=', false],\n        ];\n        new dialogs.SelectCreateDialog(this, {\n            title: _t(\"Plan\"),\n            res_model: this.modelName,\n            domain: this.actionDomain.concat(domain),\n            views: this.dialogViews,\n            context: _.extend({}, this.context, context),\n            on_selected: function (records) {\n                var ids = _.pluck(records, 'id');\n                if (ids.length) {\n                    // Here, the dates are already in server time so we set the\n                    // isUTC parameter of reschedule to true to avoid conversion\n                    self._reschedule(ids, context, true, self.openPlanDialogCallback);\n                }\n            },\n        }).open();\n    },\n    /**\n     * upon clicking on the create button, determines if a dialog with a formview should be opened\n     * or if a wizard should be openned, then opens it\n     *\n     * @param {object} context\n     */\n    _onCreate: function (context) {\n        if (this.createAction) {\n            var fullContext = _.extend({}, this.context, context);\n            this.do_action(this.createAction, {\n                additional_context: fullContext,\n                on_close: this.reload.bind(this, {})\n            });\n        } else {\n            this._openDialog(undefined, context);\n        }\n    },\n    /**\n     * Reschedule records and reload.\n     *\n     * Use a DropPrevious to prevent unnecessary reload and rendering.\n     *\n     * Note that when the rpc fails, we have to reload and re-render as some\n     * records might be outdated, causing the rpc failure).\n     *\n     * @private\n     * @param {integer[]|integer} ids\n     * @param {Object} schedule\n     * @param {boolean} isUTC\n     * @returns {Promise} resolved when the record has been reloaded, rejected\n     *   if the request has been dropped by DropPrevious\n     */\n    _reschedule: function (ids, schedule, isUTC, callback) {\n        return this._executeAsyncOperation(\n            this.model.reschedule.bind(this.model),\n            [ids, schedule, isUTC, callback]\n        );\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Opens a dialog to create a new record.\n     *\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onCellAddClicked: function (ev) {\n        ev.stopPropagation();\n        const context = this._getDialogContext(ev.data.date, ev.data.rowId);\n        for (var k in context) {\n            context[_.str.sprintf('default_%s', k)] = context[k];\n        }\n        this._onCreate(context);\n    },\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onAddClicked: function (ev) {\n        ev.preventDefault();\n        var context = {};\n        var state = this.model.get();\n        context[state.dateStartField] = this.model.convertToServerTime(state.focusDate.clone().startOf(state.scale));\n        context[state.dateStopField] = this.model.convertToServerTime(state.focusDate.clone().endOf(state.scale));\n        for (var k in context) {\n            context[_.str.sprintf('default_%s', k)] = context[k];\n        }\n        this._onCreate(context);\n    },\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onCollapseClicked: function (ev) {\n        ev.preventDefault();\n        this.model.collapseRows();\n        this.update({}, { reload: false });\n    },\n    /**\n     * @private\n     * @param {OdooEvent} ev\n     * @param {string} ev.data.rowId\n     */\n    _onCollapseRow: function (ev) {\n        ev.stopPropagation();\n        this.model.collapseRow(ev.data.rowId);\n        this.renderer.updateRow(this.model.get(ev.data.rowId));\n    },\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onExpandClicked: function (ev) {\n        ev.preventDefault();\n        this.model.expandRows();\n        this.update({}, { reload: false });\n    },\n    /**\n     * @private\n     * @param {OdooEvent} ev\n     * @param {string} ev.data.rowId\n     */\n    _onExpandRow: function (ev) {\n        ev.stopPropagation();\n        this.model.expandRow(ev.data.rowId);\n        this.renderer.updateRow(this.model.get(ev.data.rowId));\n    },\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onNextPeriodClicked: function (ev) {\n        ev.preventDefault();\n        var state = this.model.get();\n        this.update({ date: state.focusDate.add(1, state.scale) });\n    },\n    /**\n     * Opens dialog when clicked on pill to view record.\n     *\n     * @private\n     * @param {OdooEvent} ev\n     * @param {jQuery} ev.data.target\n     */\n    _onPillClicked: async function (ev) {\n        if (!this._updating) {\n            ev.data.target.addClass('o_gantt_pill_editing');\n\n            // Sync with the mutex to wait for potential changes on the view\n            await this.model.mutex.getUnlockedDef();\n\n            var dialog = this._openDialog(ev.data.target.data('id'));\n            dialog.on('closed', this, function () {\n                ev.data.target.removeClass('o_gantt_pill_editing');\n            });\n        }\n    },\n    /**\n     * Saves pill information when dragged.\n     *\n     * @private\n     * @param {OdooEvent} ev\n     * @param {Object} ev.data\n     * @param {integer} [ev.data.diff]\n     * @param {integer} [ev.data.groupLevel]\n     * @param {string} [ev.data.pillId]\n     * @param {string} [ev.data.newRowId]\n     * @param {string} [ev.data.oldRowId]\n     * @param {'copy'|'reschedule'} [ev.data.action]\n     */\n    _onPillDropped: function (ev) {\n        ev.stopPropagation();\n\n        var state = this.model.get();\n\n        var schedule = {};\n\n        var diff = ev.data.diff;\n        diff = this.isRTL ? -diff : diff;\n        if (diff) {\n            var pill = _.findWhere(state.records, { id: ev.data.pillId });\n            schedule[state.dateStartField] = this.model.dateAdd(pill[state.dateStartField], diff, this.SCALES[state.scale].time);\n            schedule[state.dateStopField] = this.model.dateAdd(pill[state.dateStopField], diff, this.SCALES[state.scale].time);\n        } else if (ev.data.action === 'copy') {\n            // When we copy the info on dates is sometimes mandatory (e.g. working on hr.leave, see copy_data)\n            const pill = _.findWhere(state.records, { id: ev.data.pillId });\n            schedule[state.dateStartField] = pill[state.dateStartField].clone();\n            schedule[state.dateStopField] = pill[state.dateStopField].clone();\n        }\n\n        if (ev.data.newRowId && ev.data.newRowId !== ev.data.oldRowId) {\n            const groupValue = Object.assign({}, ...JSON.parse(ev.data.newRowId));\n\n            // if the pill is dragged in a top level group, we only want to\n            // write on fields linked to this top level group\n            var fieldsToWrite = state.groupedBy.slice(0, ev.data.groupLevel + 1);\n            _.each(fieldsToWrite, function (fieldName) {\n                // TODO: maybe not write if the value hasn't changed?\n                let valueToWrite = groupValue[fieldName];\n                if (Array.isArray(valueToWrite)) {\n                    const { type: fieldType } = state.fields[fieldName];\n                    if (fieldType === \"many2many\") {\n                        valueToWrite = [valueToWrite[0]];\n                    } else if (fieldType === \"many2one\") {\n                        valueToWrite = valueToWrite[0];\n                    }\n                }\n                schedule[fieldName] = valueToWrite;\n            });\n        }\n        if (ev.data.action === 'copy') {\n            this._copy(ev.data.pillId, schedule);\n        } else {\n            this._reschedule(ev.data.pillId, schedule);\n        }\n    },\n    /**\n     * Save pill information when resized\n     *\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onPillResized: function (ev) {\n        ev.stopPropagation();\n        var schedule = {};\n        schedule[ev.data.field] = ev.data.date;\n        this._reschedule(ev.data.id, schedule);\n    },\n    /**\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onPillUpdatingStarted: function (ev) {\n        ev.stopPropagation();\n        this._updating = true;\n    },\n    /**\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onPillUpdatingStopped: function (ev) {\n        ev.stopPropagation();\n        this._updating = false;\n    },\n    /**\n     * Opens a dialog to plan records.\n     *\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onCellPlanClicked: function (ev) {\n        ev.stopPropagation();\n        const context = this._getDialogContext(ev.data.date, ev.data.rowId);\n        this._openPlanDialog(context);\n    },\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onPrevPeriodClicked: function (ev) {\n        ev.preventDefault();\n        var state = this.model.get();\n        this.update({ date: state.focusDate.subtract(1, state.scale) });\n    },\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onScaleClicked: function (ev) {\n        ev.preventDefault();\n        var $button = $(ev.currentTarget);\n        if ($button.hasClass('active')) {\n            return;\n        }\n        this.update({ scale: $button.data('value') });\n    },\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onTodayClicked: function (ev) {\n        ev.preventDefault();\n        this.update({ date: moment() });\n    },\n});\n\nreturn GanttController;\n\n});\n", "odoo.define('web_gantt.GanttModel', function (require) {\n\"use strict\";\n\nvar AbstractModel = require('web.AbstractModel');\nvar concurrency = require('web.concurrency');\nvar core = require('web.core');\nvar fieldUtils = require('web.field_utils');\nconst { findWhere, groupBy } = require('web.utils');\nvar session = require('web.session');\n\nvar _t = core._t;\n\n\nvar GanttModel = AbstractModel.extend({\n    /**\n     * @override\n     */\n    init: function () {\n        this._super.apply(this, arguments);\n\n        this.dp = new concurrency.DropPrevious();\n        this.mutex = new concurrency.Mutex();\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Collapses the given row.\n     *\n     * @param {string} rowId\n     */\n    collapseRow: function (rowId) {\n        this.allRows[rowId].isOpen = false;\n    },\n    /**\n     * Collapses all rows (first level only).\n     */\n    collapseRows: function () {\n        this.ganttData.rows.forEach(function (group) {\n            group.isOpen = false;\n        });\n    },\n    /**\n     * Convert date to server timezone\n     *\n     * @param {Moment} date\n     * @returns {string} date in server format\n     */\n    convertToServerTime: function (date) {\n        var result = date.clone();\n        if (!result.isUTC()) {\n            result.subtract(session.getTZOffset(date), 'minutes');\n        }\n        return result.locale('en').format('YYYY-MM-DD HH:mm:ss');\n    },\n    /**\n     * Add or subtract value to a moment.\n     * If we are changing by a whole day or more, adjust the time if needed to keep\n     * the same local time, if the UTC offset has changed between the 2 dates\n     * (usually, because of daylight savings)\n     *\n     * @param {Moment} date\n     * @param {integer} offset\n     * @param {string} unit\n     */\n    dateAdd: function(date, offset, unit) {\n        var result = date.clone().add(offset, unit);\n        if(Math.abs(result.diff(date, 'hours')) >= 24) {\n            var tzOffsetDiff = result.clone().local().utcOffset() - date.clone().local().utcOffset();\n            if(tzOffsetDiff !== 0) {\n                result.subtract(tzOffsetDiff, 'minutes');\n            }\n        }\n        return result;\n    },\n    /**\n     * @override\n     * @param {string} [rowId]\n     * @returns {Object} the whole gantt data if no rowId given, the given row's\n     *   description otherwise\n     */\n    __get: function (rowId) {\n        if (rowId) {\n            return this.allRows[rowId];\n        } else {\n            return Object.assign({ isSample: this.isSampleModel }, this.ganttData);\n        }\n    },\n    /**\n     * Expands the given row.\n     *\n     * @param {string} rowId\n     */\n    expandRow: function (rowId) {\n        this.allRows[rowId].isOpen = true;\n    },\n    /**\n     * Expands all rows.\n     */\n    expandRows: function () {\n        var self = this;\n        Object.keys(this.allRows).forEach(function (rowId) {\n            var row = self.allRows[rowId];\n            if (row.isGroup) {\n                self.allRows[rowId].isOpen = true;\n            }\n        });\n    },\n    /**\n     * @override\n     * @param {Object} params\n     * @param {Object} params.context\n     * @param {Object} params.colorField\n     * @param {string} params.dateStartField\n     * @param {string} params.dateStopField\n     * @param {string[]} params.decorationFields\n     * @param {string[]} params.defaultGroupBy\n     * @param {boolean} params.displayUnavailability\n     * @param {Array[]} params.domain\n     * @param {Object} params.fields\n     * @param {boolean} params.dynamicRange\n     * @param {string[]} params.groupedBy\n     * @param {Moment} params.initialDate\n     * @param {string} params.modelName\n     * @param {string} params.scale\n     * @returns {Promise<any>}\n     */\n    __load: async function (params) {\n        await this._super(...arguments);\n        this.modelName = params.modelName;\n        this.fields = params.fields;\n        this.domain = params.domain;\n        this.context = params.context;\n        this.decorationFields = params.decorationFields;\n        this.colorField = params.colorField;\n        this.progressField = params.progressField;\n        this.consolidationParams = params.consolidationParams;\n        this.collapseFirstLevel = params.collapseFirstLevel;\n        this.displayUnavailability = params.displayUnavailability;\n        this.SCALES = params.SCALES;\n\n        this.defaultGroupBy = params.defaultGroupBy ? [params.defaultGroupBy] : [];\n        let groupedBy = params.groupedBy;\n        if (!groupedBy || !groupedBy.length) {\n            groupedBy = this.defaultGroupBy;\n        }\n        groupedBy = this._filterDateInGroupedBy(groupedBy);\n\n        this.ganttData = {\n            dateStartField: params.dateStartField,\n            dateStopField: params.dateStopField,\n            groupedBy,\n            fields: params.fields,\n            dynamicRange: params.dynamicRange,\n        };\n        this._setRange(params.initialDate, params.scale);\n        return this._fetchData().then(function () {\n            // The 'load' function returns a promise which resolves with the\n            // handle to pass to the 'get' function to access the data. In this\n            // case, we don't want to pass any argument to 'get' (see its API).\n            return Promise.resolve();\n        });\n    },\n    /**\n     * @param {any} handle\n     * @param {Object} params\n     * @param {Array[]} params.domain\n     * @param {string[]} params.groupBy\n     * @param {string} params.scale\n     * @param {Moment} params.date\n     * @returns {Promise<any>}\n     */\n    __reload: async function (handle, params) {\n        await this._super(...arguments);\n        if ('scale' in params) {\n            this._setRange(this.ganttData.focusDate, params.scale);\n        }\n        if ('date' in params) {\n            this._setRange(params.date, this.ganttData.scale);\n        }\n        if ('domain' in params) {\n            this.domain = params.domain;\n        }\n        if ('groupBy' in params) {\n            if (params.groupBy && params.groupBy.length) {\n                this.ganttData.groupedBy = this._filterDateInGroupedBy(params.groupBy);\n                if(this.ganttData.groupedBy.length !== params.groupBy.length){\n                    this.displayNotification({ message: _t('Grouping by date is not supported'), type: 'danger' });\n                }\n            } else {\n                this.ganttData.groupedBy = this.defaultGroupBy;\n            }\n        }\n        return this._fetchData().then(function () {\n            // The 'reload' function returns a promise which resolves with the\n            // handle to pass to the 'get' function to access the data. In this\n            // case, we don't want to pass any argument to 'get' (see its API).\n            return Promise.resolve();\n        });\n    },\n    /**\n     * Create a copy of a task with defaults determined by schedule.\n     *\n     * @param {integer} id\n     * @param {Object} schedule\n     * @returns {Promise}\n     */\n    copy: function (id, schedule) {\n        var self = this;\n        const defaults = this.rescheduleData(schedule);\n        return this.mutex.exec(function () {\n            return self._rpc({\n                model: self.modelName,\n                method: 'copy',\n                args: [id, defaults],\n                context: self.context,\n            });\n        });\n    },\n    /**\n     * Reschedule a task to the given schedule.\n     *\n     * @param {integer} id\n     * @param {Object} schedule\n     * @param {boolean} isUTC\n     * @returns {Promise}\n     */\n    reschedule: function (ids, schedule, isUTC, callback) {\n        var self = this;\n        if (!_.isArray(ids)) {\n            ids = [ids];\n        }\n        const data = this.rescheduleData(schedule, isUTC);\n        return this.mutex.exec(function () {\n            return self._rpc({\n                model: self.modelName,\n                method: 'write',\n                args: [ids, data],\n                context: self.context,\n            }).then((result) => {\n                if (callback) {\n                    callback(result);\n                }\n            });\n        });\n    },\n    /**\n     * @param {Object} schedule\n     * @param {boolean} isUTC\n     */\n    rescheduleData: function (schedule, isUTC) {\n        const allowedFields = [\n            this.ganttData.dateStartField,\n            this.ganttData.dateStopField,\n            ...this.ganttData.groupedBy\n        ];\n\n        const data = _.pick(schedule, allowedFields);\n\n        let type;\n        for (let k in data) {\n            type = this.fields[k].type;\n            if (data[k] && (type === 'datetime' || type === 'date') && !isUTC) {\n                data[k] = this.convertToServerTime(data[k]);\n            }\n        };\n        return data\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Fetches records to display (and groups if necessary).\n     *\n     * @private\n     * @returns {Deferred}\n     */\n    _fetchData: function () {\n        var self = this;\n        var domain = this._getDomain();\n        var context = Object.assign({}, this.context, { group_by: this.ganttData.groupedBy });\n\n        var groupsDef;\n        if (this.ganttData.groupedBy.length) {\n            groupsDef = this._rpc({\n                model: this.modelName,\n                method: 'read_group',\n                fields: this._getFields(),\n                domain: domain,\n                context: context,\n                groupBy: this.ganttData.groupedBy,\n                orderBy: this.ganttData.groupedBy.map(function (f) { return {name: f}; }),\n                lazy: this.ganttData.groupedBy.length === 1,\n            });\n        }\n\n        var dataDef = this._rpc({\n            route: '/web/dataset/search_read',\n            model: this.modelName,\n            fields: this._getFields(),\n            context: context,\n            domain: domain,\n        });\n\n        return this.dp.add(Promise.all([groupsDef, dataDef])).then(function (results) {\n            const groups = results[0] || [];\n            groups.forEach((g) => (g.fromServer = true));\n            var searchReadResult = results[1];\n            var oldRows = self.allRows;\n            self.allRows = {};\n            self.ganttData.records = self._parseServerData(searchReadResult.records);\n            self.ganttData.rows = self._generateRows({\n                groupedBy: self.ganttData.groupedBy,\n                groups: groups,\n                oldRows: oldRows,\n                parentPath: [],\n                records: self.ganttData.records,\n            });\n            var unavailabilityProm;\n            if (self.displayUnavailability && !self.isSampleModel) {\n                unavailabilityProm = self._fetchUnavailability();\n            }\n            return unavailabilityProm;\n        });\n    },\n    /**\n     * Compute rows for unavailability rpc call.\n     *\n     * @private\n     * @param {Object} rows in the format of ganttData.rows\n     * @returns {Object} simplified rows only containing useful attributes\n     */\n    _computeUnavailabilityRows: function(rows) {\n        var self = this;\n        return _.map(rows, function (r) {\n            if (r) {\n                return {\n                    groupedBy: r.groupedBy,\n                    records: r.records,\n                    name: r.name,\n                    resId: r.resId,\n                    rows: self._computeUnavailabilityRows(r.rows)\n                }\n            } else {\n                return r;\n            }\n        });\n    },\n    /**\n     * Fetches gantt unavailability.\n     *\n     * @private\n     * @returns {Deferred}\n     */\n    _fetchUnavailability: function () {\n        var self = this;\n        return this._rpc({\n            model: this.modelName,\n            method: 'gantt_unavailability',\n            args: [\n                this.convertToServerTime(this.ganttData.startDate),\n                this.convertToServerTime(this.ganttData.stopDate),\n                this.ganttData.scale,\n                this.ganttData.groupedBy,\n                this._computeUnavailabilityRows(this.ganttData.rows),\n            ],\n            context: this.context,\n        }).then(function (enrichedRows) {\n            // Update ganttData.rows with the new unavailabilities data\n            self._updateUnavailabilityRows(self.ganttData.rows, enrichedRows);\n        });\n    },\n    /**\n     * Update rows with unavailabilities from enriched rows.\n     *\n     * @private\n     * @param {Object} original rows in the format of ganttData.rows\n     * @param {Object} enriched rows as returned by the gantt_unavailability rpc call\n     * @returns {Object} original rows enriched with the unavailabilities data\n     */\n    _updateUnavailabilityRows: function (original, enriched) {\n        var self = this;\n        _.zip(original, enriched).forEach(function (rowPair) {\n            var o = rowPair[0];\n            var e = rowPair[1];\n            o.unavailabilities = _.map(e.unavailabilities, function (u) {\n                // These are new data from the server, they haven't been parsed yet\n                u.start = self._parseServerValue({ type: 'datetime' }, u.start);\n                u.stop = self._parseServerValue({ type: 'datetime' }, u.stop);\n                return u;\n            });\n            if (o.rows && e.rows) {\n                self._updateUnavailabilityRows(o.rows, e.rows);\n            }\n        });\n    },\n    /**\n     * Process groups and records to generate a recursive structure according\n     * to groupedBy fields. Note that there might be empty groups (filled by\n     * read_goup with group_expand) that also need to be processed.\n     *\n     * @private\n     * @param {Object} params\n     * @param {Object[]} params.groups\n     * @param {Object[]} params.records\n     * @param {string[]} params.groupedBy\n     * @param {Object} params.oldRows previous version of this.allRows (prior to\n     *   this reload), used to keep collapsed rows collapsed\n     * @param {Object[]} params.parentPath used to determine the ancestors of a\n     *   row through their groupedBy field and value.\n     *   The stringification of this must give a unique identifier to the parent row.\n     * @returns {Object[]}\n     */\n    _generateRows(params) {\n        const { groupedBy, groups, oldRows, parentPath, records } = params;\n        const groupLevel = this.ganttData.groupedBy.length - groupedBy.length;\n        if (!groupedBy.length || !groups.length) {\n            const row = {\n                groupLevel,\n                id: JSON.stringify([...parentPath, {}]),\n                isGroup: false,\n                name: \"\",\n                records,\n            };\n            this.allRows[row.id] = row;\n            return [row];\n        }\n\n        const rows = [];\n        // Some groups might be empty (thanks to expand_groups), so we can't\n        // simply group the data, we need to keep all returned groups\n        const groupedByField = groupedBy[0];\n        const currentLevelGroups = groupBy(groups, group => {\n            if (group[groupedByField] === undefined) {\n                // Here we change undefined value to false as:\n                // 1/ we want to group together:\n                //    - groups having an undefined value for groupedByField\n                //    - groups having false value for groupedByField\n                // 2/ we want to be sure that stringification keeps\n                //    the groupedByField because of:\n                //      JSON.stringify({ key: undefined }) === \"{}\"\n                //      (see id construction below)\n                group[groupedByField] = false;\n            }\n            return group[groupedByField];\n        });\n        const isM2MGrouped = this.ganttData.fields[groupedByField].type === \"many2many\";\n        let groupedRecords;\n        if (isM2MGrouped) {\n            groupedRecords = {};\n            for (const [key, currentGroup] of Object.entries(currentLevelGroups)) {\n                groupedRecords[key] = [];\n                const value = currentGroup[0][groupedByField];\n                for (const r of records || []) {\n                    if (\n                        !value && r[groupedByField].length === 0 ||\n                        value && r[groupedByField].includes(value[0])\n                    ) {\n                        groupedRecords[key].push(r)\n                    }\n                }\n            }\n        } else {\n            groupedRecords = groupBy(records || [], groupedByField);\n        }\n\n        for (const key in currentLevelGroups) {\n            const subGroups = currentLevelGroups[key];\n            const groupRecords = groupedRecords[key] || [];\n            // For empty groups (or when groupedByField is a m2m), we can't look at the record to get the\n            // formatted value of the field, we have to trust expand_groups.\n            let value;\n            if (groupRecords && groupRecords.length && !isM2MGrouped) {\n                value = groupRecords[0][groupedByField];\n            } else {\n                value = subGroups[0][groupedByField];\n            }\n            const part = {};\n            part[groupedByField] = value;\n            const path = [...parentPath, part];\n            const id = JSON.stringify(path);\n            const resId = Array.isArray(value) ? value[0] : value;\n            const minNbGroups = this.collapseFirstLevel ? 0 : 1;\n            const isGroup = groupedBy.length > minNbGroups;\n            const fromServer = subGroups.some((g) => g.fromServer);\n            const row = {\n                name: this._getRowName(groupedByField, value),\n                groupedBy,\n                groupedByField,\n                groupLevel,\n                id,\n                resId,\n                isGroup,\n                fromServer,\n                isOpen: !findWhere(oldRows, { id: JSON.stringify(parentPath), isOpen: false }),\n                records: groupRecords,\n            };\n\n            if (isGroup) {\n                row.rows = this._generateRows({\n                    ...params,\n                    groupedBy: groupedBy.slice(1),\n                    groups: subGroups,\n                    oldRows,\n                    parentPath: path,\n                    records: groupRecords,\n                });\n                row.childrenRowIds = [];\n                row.rows.forEach(function (subRow) {\n                    row.childrenRowIds.push(subRow.id);\n                    row.childrenRowIds = row.childrenRowIds.concat(subRow.childrenRowIds || []);\n                });\n            }\n\n            rows.push(row);\n            this.allRows[row.id] = row;\n        }\n        return rows;\n    },\n    /**\n     * Get domain of records to display in the gantt view.\n     *\n     * @private\n     * @returns {Array[]}\n     */\n    _getDomain: function () {\n        var domain = [\n            [this.ganttData.dateStartField, '<=', this.convertToServerTime(this.ganttData.stopDate)],\n            [this.ganttData.dateStopField, '>=', this.convertToServerTime(this.ganttData.startDate)],\n        ];\n        return this.domain.concat(domain);\n    },\n    /**\n     * Get all the fields needed.\n     *\n     * @private\n     * @returns {string[]}\n     */\n    _getFields: function () {\n        var fields = ['display_name', this.ganttData.dateStartField, this.ganttData.dateStopField];\n        fields = fields.concat(this.ganttData.groupedBy, this.decorationFields);\n\n        if (this.progressField) {\n            fields.push(this.progressField);\n        }\n\n        if (this.colorField) {\n            fields.push(this.colorField);\n        }\n\n        if (this.consolidationParams.field) {\n            fields.push(this.consolidationParams.field);\n        }\n\n        if (this.consolidationParams.excludeField) {\n            fields.push(this.consolidationParams.excludeField);\n        }\n\n        return _.uniq(fields);\n    },\n    /**\n     * Format field value to display purpose.\n     *\n     * @private\n     * @param {any} value\n     * @param {Object} field\n     * @returns {string} formatted field value\n     */\n    _getFieldFormattedValue: function (value, field) {\n        var options = {};\n        if (field.type === 'boolean') {\n            options = {forceString: true};\n        }\n        let label;\n        if (field.type === \"many2many\") {\n            label = Array.isArray(value) ? value[1] : value;\n        } else {\n            label = fieldUtils.format[field.type](value, field, options);\n        }\n        return label || _.str.sprintf(_t('Undefined %s'), field.string);\n    },\n    /**\n     * @param {string} groupedByField\n     * @param {*} value\n     * @returns {string}\n     */\n    _getRowName(groupedByField, value) {\n        const field = this.fields[groupedByField];\n        return this._getFieldFormattedValue(value, field);\n    },\n    /**\n     * @override\n     */\n    _isEmpty() {\n        return !this.ganttData.records.length;\n    },\n    /**\n     * Parse in place the server values (and in particular, convert datetime\n     * field values to moment in UTC).\n     *\n     * @private\n     * @param {Object} data the server data to parse\n     * @returns {Promise<any>}\n     */\n    _parseServerData: function (data) {\n        var self = this;\n\n        data.forEach(function (record) {\n            Object.keys(record).forEach(function (fieldName) {\n                record[fieldName] = self._parseServerValue(self.fields[fieldName], record[fieldName]);\n            });\n        });\n\n        return data;\n    },\n    /**\n     * Set date range to render gantt\n     *\n     * @private\n     * @param {Moment} focusDate current activated date\n     * @param {string} scale current activated scale\n     */\n    _setRange: function (focusDate, scale) {\n        this.ganttData.scale = scale;\n        this.ganttData.focusDate = focusDate;\n        if (this.ganttData.dynamicRange) {\n            this.ganttData.startDate = focusDate.clone().startOf(this.SCALES[scale].interval);\n            this.ganttData.stopDate = this.ganttData.startDate.clone().add(1, scale);\n        } else {\n            this.ganttData.startDate = focusDate.clone().startOf(scale);\n            this.ganttData.stopDate = focusDate.clone().endOf(scale);\n        }\n    },\n    /**\n     * Remove date in groupedBy field\n     */\n    _filterDateInGroupedBy(groupedBy) {\n        return groupedBy.filter(\n            groupedByField => {\n                var fieldName = groupedByField.split(':')[0];\n                return fieldName in this.fields && this.fields[fieldName].type.indexOf('date') === -1;\n            }\n        );\n    },\n});\n\nreturn GanttModel;\n\n});\n", "odoo.define('web_gantt.GanttRenderer', function (require) {\n\"use strict\";\n\nvar AbstractRenderer = require('web.AbstractRenderer');\nvar config = require('web.config');\nvar core = require('web.core');\nvar GanttRow = require('web_gantt.GanttRow');\nvar qweb = require('web.QWeb');\nvar session = require('web.session');\nvar utils = require('web.utils');\n\nvar QWeb = core.qweb;\nvar _t = core._t;\n\n\nvar GanttRenderer = AbstractRenderer.extend({\n    config: {\n        GanttRow: GanttRow\n    },\n\n    custom_events: _.extend({}, AbstractRenderer.prototype.custom_events, {\n        'start_dragging': '_onStartDragging',\n        'start_no_dragging': '_onStartNoDragging',\n        'stop_dragging': '_onStopDragging',\n        'stop_no_dragging': '_onStopNoDragging',\n    }),\n\n    DECORATIONS: [\n        'decoration-secondary',\n        'decoration-success',\n        'decoration-info',\n        'decoration-warning',\n        'decoration-danger',\n    ],\n    sampleDataTargets: [\n        '.o_gantt_row',\n    ],\n    /**\n     * @override\n     * @param {Widget} parent\n     * @param {Object} state\n     * @param {Object} params\n     * @param {boolean} params.canCreate\n     * @param {boolean} params.canEdit\n     * @param {boolean} params.canCellCreate\n     * @param {Object} params.cellPrecisions\n     * @param {string} params.colorField\n     * @param {Object} params.fieldsInfo\n     * @param {Object} params.SCALES\n     * @param {string} params.string\n     * @param {string} params.totalRow\n     * @param {string} [params.popoverTemplate]\n     */\n    init: function (parent, state, params) {\n        var self = this;\n        this._super.apply(this, arguments);\n\n        this.$draggedPill = null;\n        this.$draggedPillClone = null;\n\n        this.canCreate = params.canCreate;\n        this.canCellCreate = params.canCellCreate;\n        this.canEdit = params.canEdit;\n        this.canPlan = params.canPlan;\n        this.cellPrecisions = params.cellPrecisions;\n        this.colorField = params.colorField;\n        this.disableDragdrop = params.disableDragdrop;\n        this.progressField = params.progressField;\n        this.consolidationParams = params.consolidationParams;\n        this.fieldsInfo = params.fieldsInfo;\n        this.SCALES = params.SCALES;\n        this.string = params.string;\n        this.totalRow = params.totalRow;\n        this.collapseFirstLevel = params.collapseFirstLevel;\n        this.thumbnails = params.thumbnails;\n        this.rowWidgets = {};\n        // Pill decoration colors, By default display primary color for pill\n        this.pillDecorations = _.chain(this.arch.attrs)\n            .pick(function (value, key) {\n                return self.DECORATIONS.indexOf(key) >= 0;\n            }).mapObject(function (value) {\n                return py.parse(py.tokenize(value));\n            }).value();\n        if (params.popoverTemplate) {\n            this.popoverQWeb = new qweb(config.isDebug(), {_s: session.origin});\n            this.popoverQWeb.add_template(utils.json_node_to_xml(params.popoverTemplate));\n        } else {\n            this.popoverQWeb = QWeb;\n        }\n\n        this.isRTL = _t.database.parameters.direction === \"rtl\";\n        this.template_to_use = \"GanttView\";\n    },\n    /**\n     * Called each time the renderer is attached into the DOM.\n     */\n    on_attach_callback: function () {\n        this._isInDom = true;\n        core.bus.on(\"keydown\", this, this._onKeydown);\n        core.bus.on(\"keyup\", this, this._onKeyup);\n        if (!this.disableDragdrop) {\n            this._setRowsDroppable();\n        }\n    },\n    /**\n     * Called each time the renderer is detached from the DOM.\n     */\n    on_detach_callback: function () {\n        this._isInDom = false;\n        core.bus.off(\"keydown\", this, this._onKeydown);\n        core.bus.off(\"keyup\", this, this._onKeyup);\n        _.invoke(this.rowWidgets, 'on_detach_callback');\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Re-render a given row and its sub-rows. This typically occurs when a row\n     * is collapsed/expanded, to prevent from re-rendering the whole view.\n     *\n     * @param {Object} rowState part of the state concerning the row to update\n     * @returns {Promise}\n     */\n    updateRow: function (rowState) {\n        var self = this;\n        var oldRowIds = [rowState.id].concat(rowState.childrenRowIds);\n        var oldRows = [];\n        oldRowIds.forEach(function (rowId) {\n            if (self.rowWidgets[rowId]) {\n                oldRows.push(self.rowWidgets[rowId]);\n                delete self.rowWidgets[rowId];\n            }\n        });\n        this.proms = [];\n        var rows = this._renderRows([rowState], rowState.groupedBy);\n        var proms = this.proms;\n        delete this.proms;\n        return Promise.all(proms).then(function () {\n            var $previousRow = oldRows[0].$el;\n            rows.forEach(function (row) {\n                row.$el.insertAfter($previousRow);\n                $previousRow = row.$el;\n            });\n            _.invoke(oldRows, 'destroy');\n            if (!self.disableDragdrop) {\n                self._setRowsDroppable();\n            }\n        });\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Determines if a dragged pill aims to be copied or updated\n     * @private\n     * @param {jQueryEvent} event\n     */\n    _getAction: function (event) {\n        return event.ctrlKey || event.metaKey ? 'copy': 'reschedule';\n    },\n    /**\n     * Format focus date which is used to display in gantt header (see XML\n     * template).\n     *\n     * @private\n     */\n    _getFocusDateFormat: function () {\n        var focusDate = this.state.focusDate;\n        switch (this.state.scale) {\n            case 'day':\n                return focusDate.format('dddd, MMMM DD, YYYY');\n            case 'week':\n                var dateStart = focusDate.clone().startOf('week').format('DD MMMM YYYY');\n                var dateEnd = focusDate.clone().endOf('week').format('DD MMMM YYYY');\n                return _.str.sprintf('%s - %s', dateStart, dateEnd);\n            case 'month':\n                return focusDate.format('MMMM YYYY');\n            case 'year':\n                return focusDate.format('YYYY');\n            default:\n                break;\n        }\n    },\n    /**\n     * Get dates between gantt start and gantt stop date to render gantt slots\n     *\n     * @private\n     * @returns {Moment[]}\n     */\n    _getSlotsDates: function () {\n        var token = this.SCALES[this.state.scale].interval;\n        var stopDate = this.state.stopDate;\n        var day = this.state.startDate;\n        var dates = [];\n        while (day <= stopDate) {\n            dates.push(day);\n            day = day.clone().add(1, token);\n        }\n        return dates;\n    },\n    /**\n     * Prepare view info which is used by GanttRow widget\n     *\n     * @private\n     * @returns {Object}\n     */\n    _prepareViewInfo: function () {\n        return {\n            colorField: this.colorField,\n            progressField: this.progressField,\n            consolidationParams: this.consolidationParams,\n            state: this.state,\n            fieldsInfo: this.fieldsInfo,\n            slots: this._getSlotsDates(),\n            pillDecorations: this.pillDecorations,\n            popoverQWeb: this.popoverQWeb,\n            activeScaleInfo: {\n                precision: this.cellPrecisions[this.state.scale],\n                interval: this.SCALES[this.state.scale].cellPrecisions[this.cellPrecisions[this.state.scale]],\n                time: this.SCALES[this.state.scale].time,\n            },\n        };\n    },\n    /**\n     * Renders gantt view and its rows.\n     *\n     * @override\n     */\n    async _renderView() {\n        var self = this;\n        var oldRowWidgets = Object.keys(this.rowWidgets).map(function (rowId) {\n            return self.rowWidgets[rowId];\n        });\n        this.rowWidgets = {};\n        this.viewInfo = this._prepareViewInfo();\n\n        this.proms = [];\n        var rows = this._renderRows(this.state.rows, this.state.groupedBy);\n        var totalRow;\n        if (this.totalRow) {\n            totalRow = this._renderTotalRow();\n        }\n        this.proms.push(this._super.apply(this, arguments));\n        var proms = this.proms;\n        delete this.proms;\n        return Promise.all(proms).then(function () {\n            _.invoke(oldRowWidgets, 'destroy');\n            self.$el.empty();\n\n            self._replaceElement(QWeb.render(self.template_to_use, {widget: self, isMobile: config.device.isMobile}));\n            const $containment = $('<div id=\"o_gantt_containment\"/>');\n            const $rowContainer = self.$('.o_gantt_row_container');\n            $rowContainer.append($containment);\n            if (!self.state.groupedBy.length) {\n                $containment.css(self.isRTL ? {right: 0} : {left: 0});\n            }\n\n            rows.forEach(function (row) {\n                row.$el.appendTo($rowContainer);\n            });\n            if (totalRow) {\n                totalRow.$el.appendTo(self.$('.o_gantt_total_row_container'));\n            }\n\n            if (self._isInDom && !self.disableDragdrop) {\n                self._setRowsDroppable();\n            }\n\n            if (self.state.isSample) {\n                self._renderNoContentHelper();\n            }\n        });\n    },\n    /**\n     * Render rows outside the DOM, so that we can insert them to the DOM once\n     * they are all ready.\n     *\n     * @private\n     * @param {Object[]} rows recursive structure of records according to\n     *   groupBys\n     * @param {string[]} groupedBy\n     * @returns {Promise<GanttRow[]>} resolved with the row widgets\n     */\n    _renderRows: function (rows, groupedBy) {\n        var self = this;\n        var rowWidgets = [];\n        var disableResize = this.state.scale === 'year';\n\n        var groupLevel = this.state.groupedBy.length - groupedBy.length;\n        // FIXME: could we get rid of collapseFirstLevel in Renderer, and fully\n        // handle this in Model?\n        var hideSidebar = groupedBy.length === 0;\n        if (this.collapseFirstLevel) {\n            hideSidebar = self.state.groupedBy.length === 0;\n        }\n        rows.forEach(function (row) {\n            const pillsInfo = self._getPillsInfo(row, groupLevel);\n            if (groupedBy.length) {\n                pillsInfo.groupName = row.name;\n                pillsInfo.groupedByField = row.groupedByField;\n            }\n            var params = {\n                canCreate: self.canCreate,\n                canCellCreate: self.canCellCreate,\n                canEdit: self.canEdit,\n                canPlan: self.canPlan,\n                isGroup: row.isGroup,\n                consolidate: (groupLevel === 0) && (self.state.groupedBy[0] === self.consolidationParams.maxField),\n                hideSidebar: hideSidebar,\n                isOpen: row.isOpen,\n                disableResize: disableResize,\n                disableDragdrop: self.disableDragdrop,\n                rowId: row.id,\n                fromServer: row.fromServer,\n                scales: self.SCALES,\n                unavailabilities: row.unavailabilities,\n            };\n            if (self.thumbnails && row.groupedByField && row.groupedByField in self.thumbnails){\n                params.thumbnail = {model: self.fieldsInfo[row.groupedByField].relation, field: self.thumbnails[row.groupedByField],};\n            }\n            rowWidgets.push(self._renderRow(pillsInfo, params));\n            if (row.isGroup && row.isOpen) {\n                var subRowWidgets = self._renderRows(row.rows, groupedBy.slice(1));\n                rowWidgets = rowWidgets.concat(subRowWidgets);\n            }\n        });\n        return rowWidgets;\n    },\n    /**\n     * Render a row outside the DOM.\n     *\n     * Note that we directly call the private function _widgetRenderAndInsert to\n     * prevent from generating a documentFragment for each row we have to\n     * render. The Widget API should offer a proper way to start a widget\n     * without inserting it anywhere.\n     *\n     * @private\n     * @param {Object} pillsInfo\n     * @param {Object} params\n     * @returns {Promise<GanttRow>} resolved when the row is ready\n     */\n    _renderRow: function (pillsInfo, params) {\n        var ganttRow = new this.config.GanttRow(this, pillsInfo, this.viewInfo, params);\n        this.rowWidgets[ganttRow.rowId] = ganttRow;\n        this.proms.push(ganttRow._widgetRenderAndInsert(function () {}));\n        return ganttRow;\n    },\n    /**\n     * Renders the total row outside the DOM, so that we can insert it to the\n     * DOM once all rows are ready.\n     *\n     * @returns {Promise<GanttRow} resolved with the row widget\n     */\n    _renderTotalRow: function () {\n        var pillsInfo = {\n            pills: this.state.records,\n            groupLevel: 0,\n            groupName: \"Total\"\n        };\n        var params = {\n            canCreate: this.canCreate,\n            canCellCreate: this.canCellCreate,\n            canEdit: this.canEdit,\n            canPlan: this.canPlan,\n            hideSidebar: this.state.groupedBy.length === 0,\n            isGroup: true,\n            rowId: '__total_row__',\n            scales: this.SCALES,\n        };\n        return this._renderRow(pillsInfo, params);\n    },\n    /**\n     * Set droppable on all rows\n     */\n    _setRowsDroppable: function () {\n        // jQuery (< 3.0) rounds the width value but we need the exact value\n        // getBoundingClientRect is costly when there are lots of rows\n        const firstCell = this.$('.o_gantt_header_scale .o_gantt_header_cell:first')[0];\n        _.invoke(this.rowWidgets, 'setDroppable', firstCell);\n    },\n    /**\n     * Get pills info\n     *\n     * @param {Object} row\n     * @param {*} groupLevel\n     */\n    _getPillsInfo: function (row, groupLevel) {\n        return {\n            resId: row.resId,\n            pills: row.records,\n            groupLevel: groupLevel,\n        };\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @param {KeyboardEvent} ev\n     */\n    _onKeydown: function (ev) {\n        this.action = this._getAction(ev);\n        if (this.$draggedPill && this.action === 'copy') {\n            this.$el.addClass('o_copying');\n            this.$el.removeClass('o_grabbing');\n        }\n    },\n    /**\n     * @param {KeyboardEvent} ev\n     */\n    _onKeyup: function (ev) {\n        this.action = this._getAction(ev);\n        if (this.$draggedPill && this.action === 'reschedule') {\n            this.$el.addClass('o_grabbing');\n            this.$el.removeClass('o_copying');\n        }\n    },\n    /**\n     * @private\n     * @param {OdooEvent} event\n     */\n    _onStartDragging: function (event) {\n        this.$draggedPill = event.data.$draggedPill;\n        this.$draggedPill.addClass('o_dragged_pill');\n        if (this.action === 'copy') {\n            this.$el.addClass('o_copying');\n        } else {\n            this.$el.addClass('o_grabbing');\n        }\n    },\n    /**\n     * Used to give a feedback on the impossibility of moving the pill\n     * @private\n     */\n    _onStartNoDragging: function () {\n        this.$el.addClass('o_no_dragging');\n    },\n    /**\n     * @private\n     */\n    _onStopDragging: function () {\n        this.$draggedPill.removeClass('o_dragged_pill');\n        this.$draggedPill = null;\n        this.$draggedPillClone = null;\n        this.$el.removeClass('o_grabbing');\n        this.$el.removeClass('o_copying');\n    },\n    /**\n     * @private\n     */\n    _onStopNoDragging: function () {\n        this.$el.removeClass('o_no_dragging');\n    },\n});\n\nreturn GanttRenderer;\n\n});\n", "odoo.define('web_gantt.GanttRow', function (require) {\n\"use strict\";\n\nvar core = require('web.core');\nvar config = require('web.config');\nvar session = require('web.session');\nvar Widget = require('web.Widget');\nconst pyUtils = require('web.py_utils');\nlet pyUtilsContext = null;\n\nvar QWeb = core.qweb;\nvar _t = core._t;\n\nvar GanttRow = Widget.extend({\n    template: 'GanttView.Row',\n    events: {\n        'mouseleave': '_onMouseLeave',\n        'mousemove .o_gantt_cell': '_onMouseMove',\n        'mouseenter .o_gantt_pill': '_onPillEntered',\n        'click .o_gantt_pill': '_onPillClicked',\n        'click': '_onRowSidebarClicked',\n        'click .o_gantt_cell_buttons > div > .o_gantt_cell_add': '_onButtonAddClicked',\n        'click .o_gantt_cell_buttons > div > .o_gantt_cell_plan': '_onButtonPlanClicked',\n    },\n    NB_GANTT_RECORD_COLORS: 12,\n    LEVEL_LEFT_OFFSET: 16, // 16 px per level\n    // This determines the pills height. It needs to be an odd number. If it is not a pill can\n    // be dropped between two rows without the droppables drop method being called (see tolerance: 'intersect').\n    LEVEL_TOP_OFFSET: 31, // 31 px per level\n    POPOVER_DELAY: 260,\n    /**\n     * @override\n     * @param {Object} pillsInfo\n     * @param {Object} viewInfo\n     * @param {Object} options\n     * @param {boolean} options.canCreate\n     * @param {boolean} options.canEdit\n     * @param {boolean} options.disableResize Disable resize for pills\n     * @param {boolean} options.disableDragdrop Disable drag and drop for pills\n     * @param {boolean} options.hideSidebar Hide sidebar\n     * @param {boolean} options.isGroup If is group, It will display all its\n     *                  pills on one row, disable resize, don't allow to create\n     *                  new record when clicked on cell\n     */\n    init: function (parent, pillsInfo, viewInfo, options) {\n        this._super.apply(this, arguments);\n        var self = this;\n\n        this.name = pillsInfo.groupName;\n        this.groupLevel = pillsInfo.groupLevel;\n        this.groupedByField = pillsInfo.groupedByField;\n        this.pills = _.map(pillsInfo.pills, _.clone);\n        this.resId = pillsInfo.resId;\n\n        this.viewInfo = viewInfo;\n        this.fieldsInfo = viewInfo.fieldsInfo;\n        this.state = viewInfo.state;\n        this.colorField = viewInfo.colorField;\n\n        this.options = options;\n        this.SCALES = options.scales;\n        this.isGroup = options.isGroup;\n        this.isOpen = options.isOpen;\n        this.rowId = options.rowId;\n        this.fromServer = options.fromServer;\n        this.unavailabilities = (options.unavailabilities || []).map(u => {\n            return {\n                startDate: self._convertToUserTime(u.start),\n                stopDate: self._convertToUserTime(u.stop)\n            };\n        });\n\n        this.consolidate = options.consolidate;\n        this.consolidationParams = viewInfo.consolidationParams;\n\n        if(options.thumbnail){\n            this.thumbnailUrl = session.url('/web/image', {\n                model: options.thumbnail.model,\n                id: this.resId,\n                field: this.options.thumbnail.field,\n            });\n        }\n\n        // the total row has some special behaviour\n        this.isTotal = this.rowId === '__total_row__';\n\n        this._adaptPills();\n        this._snapToGrid(this.pills);\n        this._calculateLevel();\n        if (this.isGroup && this.pills.length) {\n            this._aggregateGroupedPills();\n        } else {\n            this.progressField = viewInfo.progressField;\n            this._evaluateDecoration();\n        }\n        this._calculateMarginAndWidth();\n\n        // Add the 16px odoo window default padding.\n        this.leftPadding = (this.groupLevel + 1) * this.LEVEL_LEFT_OFFSET;\n        this.cellHeight = this.level * (this.LEVEL_TOP_OFFSET + 3) + (this.level > 0 ? this.level : 0);\n\n        this.MIN_WIDTHS = { full: 100, half: 50, quarter: 25 };\n        this.PARTS = { full: 1, half: 2, quarter: 4 };\n\n        this.cellMinWidth = this.MIN_WIDTHS[this.viewInfo.activeScaleInfo.precision];\n        this.cellPart = this.PARTS[this.viewInfo.activeScaleInfo.precision];\n\n        this._prepareSlots();\n        this._insertIntoSlot();\n\n        this.childrenRows = [];\n\n        this._onButtonAddClicked = _.debounce(this._onButtonAddClicked, 500, true);\n        this._onButtonPlanClicked = _.debounce(this._onButtonPlanClicked, 500, true);\n        this._onPillClicked = _.debounce(this._onPillClicked, 500, true);\n\n        if (this.isTotal) {\n            const maxCount = Math.max(...this.pills.map(p => p.count));\n            const factor = maxCount ? (90 / maxCount) : 0;\n            for (let p of this.pills) {\n                p.totalHeight = factor * p.count;\n            }\n        }\n        this.isRTL = _t.database.parameters.direction === \"rtl\";\n    },\n    /**\n     * @override\n     */\n    destroy: function () {\n        if (this.$el) {\n            this.$('.o_gantt_pill').popover('dispose');\n        }\n        this._super();\n    },\n \n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Set the row (if not total row) as droppable for the pills (but the draggables option \"containment\" prevents\n     * them from going above the row headers).\n     * See @_setDraggable\n     * @param {DOMElement} firstCell\n     */\n    setDroppable: function (firstCell) {\n        if (this.isTotal) {\n            return;\n        }\n        var self = this;\n        const resizeSnappingWidth = this._getResizeSnappingWidth(firstCell);\n        this.$el.droppable({\n            drop: function (event, ui) {\n                var diff = self._getDiff(resizeSnappingWidth, ui.position.left);\n                var $pill = ui.draggable;\n                const oldRowId = $pill.closest('.o_gantt_row')[0].dataset.rowId;\n                if (diff || (self.rowId !== oldRowId)) { // do not perform write if nothing change\n                    const action = event.ctrlKey || event.metaKey ? 'copy': 'reschedule';\n                    self._saveDragChanges($pill.data('id'), diff, oldRowId, self.rowId, action);\n                } else {\n                    ui.helper.animate({\n                        left: 0,\n                        top: 0,\n                    });\n                }\n            },\n            tolerance: 'intersect',\n        });\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * binds the popover of a specific pill\n     * @param target\n     * @private\n     */\n    _bindPillPopover: function(target) {\n        var self = this;\n        var $target = $(target);\n        if (!$target.hasClass('o_gantt_pill')) {\n            $target = this.$(target.offsetParent);\n        }\n        $target.popover({\n            container: this.$el,\n            trigger: 'hover',\n            delay: {show: this.POPOVER_DELAY},\n            html: true,\n            placement: 'auto',\n            content: function () {\n                return self.viewInfo.popoverQWeb.render('gantt-popover', self._getPopoverContext($(this).data('id')));\n            },\n        }).popover(\"show\");\n    },\n\n    /**\n     * Compute minimal levels required to display all pills without overlapping\n     *\n     * @private\n     */\n    _calculateLevel: function () {\n        if (this.isGroup || !this.pills.length) {\n            // We want shadow pills to overlap each other\n            this.level = 0;\n            this.pills.forEach(function (pill) {\n                pill.level = 0;\n            });\n        } else {\n            // Sort pills according to start date\n            this.pills = _.sortBy(this.pills, 'startDate');\n            this.pills[0].level = 0;\n            var levels = [{\n                pills: [this.pills[0]],\n                maxStopDate: this.pills[0].stopDate,\n            }];\n            for (var i = 1; i < this.pills.length; i++) {\n                var currentPill = this.pills[i];\n                for (var l = 0; l < levels.length; l++) {\n                    if (currentPill.startDate >= levels[l].maxStopDate) {\n                        currentPill.level = l;\n                        levels[l].pills.push(currentPill);\n                        if (currentPill.stopDate > levels[l].maxStopDate) {\n                            levels[l].maxStopDate = currentPill.stopDate;\n                        }\n                        break;\n                    }\n                }\n                if (!currentPill.level && currentPill.level != 0) {\n                    currentPill.level = levels.length;\n                    levels.push({\n                        pills: [currentPill],\n                        maxStopDate: currentPill.stopDate,\n                    });\n                }\n            }\n            this.level = levels.length;\n        }\n    },\n    /**\n     * Adapt pills to the range of current gantt view\n     * Disable resize feature if date is before the start of the gantt scope\n     * Disable resize feature for group rows\n     *\n     * @private\n     */\n    _adaptPills: function () {\n        var self = this;\n        var dateStartField = this.state.dateStartField;\n        var dateStopField = this.state.dateStopField;\n        var ganttStartDate = this.state.startDate;\n        var ganttStopDate = this.state.stopDate;\n        this.pills.forEach(function (pill) {\n            var pillStartDate = self._convertToUserTime(pill[dateStartField]);\n            var pillStopDate = self._convertToUserTime(pill[dateStopField]);\n            if (pillStartDate < ganttStartDate) {\n                pill.startDate = ganttStartDate;\n                pill.disableStartResize = true;\n            } else {\n                pill.startDate = pillStartDate;\n            }\n            if (pillStopDate > ganttStopDate) {\n                pill.stopDate = ganttStopDate;\n                pill.disableStopResize = true;\n            } else {\n                pill.stopDate = pillStopDate;\n            }\n            // Disable resize feature for groups\n            if (self.isGroup) {\n                pill.disableStartResize = true;\n                pill.disableStopResize = true;\n            }\n        });\n    },\n    /**\n     * Aggregate overlapping pills in group rows\n     *\n     * @private\n     */\n    _aggregateGroupedPills: function () {\n        var self = this;\n        var sortedPills = _.sortBy(_.map(this.pills, _.clone), 'startDate');\n        var firstPill = sortedPills[0];\n        firstPill.count = 1;\n\n        var timeToken = this.SCALES[this.state.scale].time;\n        var precision = this.viewInfo.activeScaleInfo.precision;\n        var cellTime = this.SCALES[this.state.scale].cellPrecisions[precision];\n        var intervals = _.reduce(this.viewInfo.slots, function (intervals, slotStart) {\n            intervals.push(slotStart);\n            if (precision === 'half') {\n                intervals.push(slotStart.clone().add(cellTime, timeToken));\n            }\n            return intervals;\n        }, []);\n\n        this.pills = _.reduce(intervals, function (pills, intervalStart) {\n            var intervalStop = intervalStart.clone().add(cellTime, timeToken);\n            var pillsInThisInterval = _.filter(self.pills, function (pill) {\n                return pill.startDate < intervalStop && pill.stopDate > intervalStart;\n            });\n            if (pillsInThisInterval.length) {\n                var previousPill = pills[pills.length - 1];\n                var isContinuous = previousPill &&\n                    _.intersection(previousPill.aggregatedPills, pillsInThisInterval).length;\n\n                if (isContinuous && previousPill.count === pillsInThisInterval.length) {\n                    // Enlarge previous pill so that it spans the current slot\n                    previousPill.stopDate = intervalStop;\n                    previousPill.aggregatedPills = previousPill.aggregatedPills.concat(pillsInThisInterval);\n                } else {\n                    var newPill = {\n                        id: 0,\n                        count: pillsInThisInterval.length,\n                        aggregatedPills: pillsInThisInterval,\n                        startDate: moment.max(_.min(pillsInThisInterval, 'startDate').startDate, intervalStart),\n                        stopDate: moment.min(_.max(pillsInThisInterval, 'stopDate').stopDate, intervalStop),\n                    };\n\n                    // Enrich the aggregates with consolidation data\n                    if (self.consolidate && self.consolidationParams.field) {\n                        newPill.consolidationValue = pillsInThisInterval.reduce(\n                            function (sum, pill) {\n                                if (!pill[self.consolidationParams.excludeField]) {\n                                    return sum + pill[self.consolidationParams.field];\n                                }\n                                return sum; // Don't sum this pill if it is excluded\n                            },\n                            0\n                        );\n                        newPill.consolidationMaxValue = self.consolidationParams.maxValue;\n                        newPill.consolidationExceeded = newPill.consolidationValue > newPill.consolidationMaxValue;\n                    }\n\n                    pills.push(newPill);\n                }\n            }\n            return pills;\n        }, []);\n\n        var maxCount = _.max(this.pills, function (pill) {\n            return pill.count;\n        }).count;\n        var minColor = 215;\n        var maxColor = 100;\n        this.pills.forEach(function (pill) {\n            pill.consolidated = true;\n            if (self.consolidate && self.consolidationParams.maxValue) {\n                pill.status = pill.consolidationExceeded ? 'danger' : 'success';\n                pill.display_name = pill.consolidationValue;\n            } else {\n                var color = minColor - ((pill.count - 1) / maxCount) * (minColor - maxColor);\n                pill.style = _.str.sprintf(\"background-color: rgba(%s, %s, %s, 0.6)\", color, color, color);\n                pill.display_name = pill.count;\n            }\n        });\n    },\n    /**\n     * Calculate left margin and width for pills\n     *\n     * @private\n     */\n    _calculateMarginAndWidth: function () {\n        var self = this;\n        var left;\n        var diff;\n        this.pills.forEach(function (pill) {\n            let widthPill;\n            let margin;\n            switch (self.state.scale) {\n                case 'day':\n                    left = pill.startDate.diff(pill.startDate.clone().startOf('hour'), 'minutes');\n                    pill.leftMargin = (left / 60) * 100;\n                    diff = pill.stopDate.diff(pill.startDate, 'minutes');\n                    var gapSize = pill.stopDate.diff(pill.startDate, 'hours') - 1; // Eventually compensate border(s) width\n                    widthPill = (diff / 60) * 100;\n                    margin = pill.aggregatedPills ? 0 : 4;\n                    pill.width = gapSize > 0 ? `calc(${widthPill}% + ${gapSize}px - ${margin}px)` : `calc(${widthPill}% - ${margin}px)`;\n                    break;\n                case 'week':\n                case 'month':\n                    left = pill.startDate.diff(pill.startDate.clone().startOf('day'), 'hours');\n                    pill.leftMargin = (left / 24) * 100;\n                    diff = pill.stopDate.diff(pill.startDate, 'hours');\n                    var gapSize = pill.stopDate.diff(pill.startDate, 'days') - 1; // Eventually compensate border(s) width\n                    widthPill = (diff / 24) * 100;\n                    margin = pill.aggregatedPills ? 0 : 4;\n                    pill.width = gapSize > 0 ? `calc(${widthPill}% + ${gapSize}px - ${margin}px)` : `calc(${widthPill}% - ${margin}px)`;\n                    break;\n                case 'year':\n                    var startDateMonthStart = pill.startDate.clone().startOf('month');\n                    var stopDateMonthEnd = pill.stopDate.clone().endOf('month');\n                    left = pill.startDate.diff(startDateMonthStart, 'days');\n                    pill.leftMargin = (left / 30) * 100;\n\n                    var monthsDiff = stopDateMonthEnd.diff(startDateMonthStart, 'months', true);\n                    margin = pill.aggregatedPills ? 0 : 4;\n                    if (monthsDiff < 1) {\n                        // A 30th of a month slot is too small to display\n                        // 1-day events are displayed as if they were 2-days events\n                        diff = Math.max(Math.ceil(pill.stopDate.diff(pill.startDate, 'days', true)), 2);\n                        pill.width = `calc(${(diff / pill.startDate.daysInMonth()) * 100}% - ${margin}px)`;\n                    } else {\n                        // The pill spans more than one month, so counting its\n                        // number of days is not enough as some months have more\n                        // days than others. We need to compute the proportion\n                        // of each month that the pill is actually taking.\n                        var startDateMonthEnd = pill.startDate.clone().endOf('month');\n                        var diffMonthStart = Math.ceil(startDateMonthEnd.diff(pill.startDate, 'days', true));\n                        var widthMonthStart = (diffMonthStart / pill.startDate.daysInMonth());\n\n                        var stopDateMonthStart = pill.stopDate.clone().startOf('month');\n                        var diffMonthStop = Math.ceil(pill.stopDate.diff(stopDateMonthStart, 'days', true));\n                        var widthMonthStop = (diffMonthStop / pill.stopDate.daysInMonth());\n\n                        var width = Math.max((widthMonthStart + widthMonthStop), (2 / 30)) * 100;\n                        if (monthsDiff > 2) { // start and end months are already covered\n                            // If the pill spans more than 2 months, we know\n                            // that the middle months are fully covered\n                            width += (monthsDiff - 2) * 100;\n                        }\n                        pill.width = `calc(${width}% - ${margin}px)`;\n                    }\n                    break;\n                default:\n                    break;\n            }\n\n            // Add 1px top-gap to events sharing the same cell.\n            pill.topPadding = pill.level * (self.LEVEL_TOP_OFFSET + 4) + 2;\n        });\n    },\n    /**\n    * Convert date to user timezone\n    *\n    * @private\n    * @param {Moment} date\n    * @returns {Moment} date in user timezone\n    */\n    _convertToUserTime: function (date) {\n        // we need to change the original timezone (UTC) to take the user\n        // timezone\n        return date.clone().local();\n    },\n    /**\n     * Evaluate decoration conditions\n     *\n     * @private\n     */\n    _evaluateDecoration: function () {\n        var self = this;\n        this.pills.forEach(function (pill) {\n            var pillDecorations = [];\n            _.each(self.viewInfo.pillDecorations, function (expr, decoration) {\n                if (py.PY_isTrue(py.evaluate(expr, self._getDecorationEvalContext(pill)))) {\n                    pillDecorations.push(decoration);\n                }\n            });\n            pill.decorations = pillDecorations;\n\n            if (self.colorField) {\n                pill._color = self._getColor(pill[self.colorField]);\n            }\n\n            if (self.progressField) {\n                pill._progress = pill[self.progressField] || 0;\n            }\n        });\n    },\n    /**\n     * @param {integer|Array} value\n     * @private\n     */\n    _getColor: function (value) {\n        if (_.isNumber(value)) {\n            return Math.round(value) % this.NB_GANTT_RECORD_COLORS;\n        } else if (_.isArray(value)) {\n            return value[0] % this.NB_GANTT_RECORD_COLORS;\n        }\n        return 0;\n    },\n    /**\n     * Get context to evaluate decoration\n     *\n     * @private\n     * @param {Object} pillData\n     * @returns {Object} context contains pill data, current date, user session\n     */\n    _getDecorationEvalContext: function (pillData) {\n        return Object.assign(\n            {},\n            this._getPyUtilsContext(),\n            session.user_context,\n            this._getPillEvalContext(pillData),\n        );\n    },\n    /**\n     * @private\n     * @param {number} gridOffset\n     */\n    _getDiff: function (resizeSnappingWidth, gridOffset) {\n        return Math.round(gridOffset / resizeSnappingWidth) * this.viewInfo.activeScaleInfo.interval;\n    },\n    /**\n     * Evaluate the pill evaluation context.\n     *\n     * @private\n     * @param {Object} pillData\n     * @returns {Object} context\n     */\n    _getPillEvalContext: function (pillData) {\n        var pillContext = _.clone(pillData);\n        for (var fieldName in pillContext) {\n            const field = this.fieldsInfo[fieldName];\n            if (field) {\n                const pillCurrentField = pillContext[fieldName];\n                if (pillCurrentField instanceof moment) {\n                    // Replace by ISO formatted string only, without computing it as it is already avalaible in the Moment object interns.\n                    pillContext[fieldName] = pillCurrentField._i;\n                }\n                else if (field.type === 'date' || field.type === 'datetime') {\n                    if (pillCurrentField) {\n                        pillContext[fieldName] = JSON.parse(JSON.stringify(pillCurrentField));\n                    }\n                    continue;\n                }\n            }\n        }\n        return pillContext;\n    },\n    /**\n     * Get context to display in popover template\n     *\n     * @private\n     * @param {integer} pillID\n     * @returns {Object}\n     */\n    _getPopoverContext: function (pillID) {\n        var data = _.clone(_.findWhere(this.pills, {id: pillID}));\n        data.userTimezoneStartDate = this._convertToUserTime(data[this.state.dateStartField]);\n        data.userTimezoneStopDate = this._convertToUserTime(data[this.state.dateStopField]);\n        return data;\n    },\n    /**\n    * Get pyUtils context\n    * When in the same tick, the same pyUtils.context in returned.\n    *\n    * @returns {Object} the pyUtils context\n     */\n    _getPyUtilsContext() {\n        if (!pyUtilsContext) {\n            pyUtilsContext = pyUtils.context();\n            Promise.resolve().then(() => {\n                pyUtilsContext = null;\n            });\n        }\n        return pyUtilsContext;\n    },\n    /**\n     * @private\n     * @returns {number}\n     */\n    _getResizeSnappingWidth: function (firstCell) {\n        if (!this.firstCell) {\n            this.firstCell = firstCell || $('.o_gantt_view .o_gantt_header_scale .o_gantt_header_cell:first')[0];\n        }\n        // jQuery (< 3.0) rounds the width value but we need the exact value\n        // getBoundingClientRect is costly when there are lots of rows\n        return this.firstCell.getBoundingClientRect().width / this.cellPart;\n    },\n    /**\n     * Insert the pills into the gantt row slots according to their start dates\n     *\n     * @private\n     */\n    _insertIntoSlot: function () {\n        var slotsToFill = this.slots;\n        this.pills.forEach(function (currentPill) {\n            var skippedSlots = [];\n            slotsToFill.some(function (currentSlot) {\n                var fitsInThisSlot = currentPill.startDate < currentSlot.stop;\n                if (fitsInThisSlot) {\n                    currentSlot.pills.push(currentPill);\n                } else {\n                    skippedSlots.push(currentSlot);\n                }\n                return fitsInThisSlot;\n            });\n            // Pills are sorted by start date, so any slot that was skipped\n            // for this pill will not be suitable for any of the next pills\n            slotsToFill = _.difference(slotsToFill, skippedSlots);\n        });\n    },\n    /**\n     * Prepare the gantt row slots\n     *\n     * @private\n     */\n    _prepareSlots: function () {\n        const { interval, time, cellPrecisions } = this.SCALES[this.state.scale];\n        const precision = this.viewInfo.activeScaleInfo.precision;\n        const cellTime = cellPrecisions[precision];\n\n        function getSlotStyle(cellPart, subSlotUnavailabilities, isToday) {\n            function color(d) {\n                if (isToday) {\n                    return d ? '#e9ecef' : '#fffaeb';\n                }\n                return d ? '#e9ecef' : '#ffffff';\n            }\n            const sum = subSlotUnavailabilities.reduce((acc, d) => acc + d);\n            if (!sum) {\n                return '';\n            }\n            if (cellPart === sum) {\n                return `background: ${color(1)}`;\n            }\n            if (cellPart === 2) {\n                const [c0, c1] = subSlotUnavailabilities.map(color);\n                return `background: linear-gradient(90deg, ${c0} 49%, ${c1} 50%);`\n            }\n            if (cellPart === 4) {\n                const [c0, c1, c2, c3] = subSlotUnavailabilities.map(color);\n                return `background: linear-gradient(90deg, ${c0} 24%, ${c1} 25%, ${c1} 49%, ${c2} 50%, ${c2} 74%, ${c3} 75%);`\n            }\n        }\n\n        this.slots = [];\n\n        // We assume that the 'slots' (dates) are naturally ordered\n        // and that unavailabilties have been normalized\n        // (i.e. naturally ordered and pairwise disjoint).\n        // A subslot is considered unavailable (and greyed) when totally covered by\n        // an unavailability.\n        let index = 0;\n        for (const date of this.viewInfo.slots) {\n            const slotStart = date;\n            const slotStop = date.clone().add(1, interval);\n            const isToday = date.isSame(new Date(), 'day') && this.state.scale !== 'day';\n\n            let slotStyle = '';\n            if (!this.isGroup && this.unavailabilities.slice(index).length) {\n                let subSlotUnavailabilities = [];\n                for (let j = 0; j < this.cellPart; j++) {\n                    const subSlotStart = date.clone().add(j * cellTime, time);\n                    const subSlotStop = date.clone().add((j + 1) * cellTime, time).subtract(1, 'seconds');\n                    let subSlotUnavailable = 0;\n                    for (let i = index; i < this.unavailabilities.length; i++) {\n                        let u = this.unavailabilities[i];\n                        if (subSlotStop > u.stopDate) {\n                            index++;\n                        } else if (u.startDate <= subSlotStart) {\n                            subSlotUnavailable = 1;\n                            break;\n                        }\n                    }\n                    subSlotUnavailabilities.push(subSlotUnavailable);\n                }\n                slotStyle = getSlotStyle(this.cellPart, subSlotUnavailabilities, isToday);\n            }\n\n            this.slots.push({\n                isToday: isToday,\n                style: slotStyle,\n                hasButtons: !this.isGroup && !this.isTotal,\n                start: slotStart,\n                stop: slotStop,\n                pills: [],\n            });\n        }\n    },\n    /**\n     * Save drag changes\n     *\n     * @private\n     * @param {integer} pillID\n     * @param {integer} diff\n     * @param {string} oldRowId\n     * @param {string} newRowId\n     * @param {'copy'|'reschedule'} action\n     */\n    _saveDragChanges: function (pillId, diff, oldRowId, newRowId, action) {\n        this.trigger_up('pill_dropped', {\n            pillId: pillId,\n            diff: diff,\n            oldRowId: oldRowId,\n            newRowId: newRowId,\n            groupLevel: this.groupLevel,\n            action: action,\n        });\n    },\n    /**\n     * Save resize changes\n     *\n     * @private\n     * @param {integer} pillID\n     * @param {integer} resizeDiff\n     * @param {string} direction\n     */\n    _saveResizeChanges: function (pillID, resizeDiff, direction) {\n        var pill = _.findWhere(this.pills, {id: pillID});\n        var data = { id: pillID };\n        if (direction === 'left') {\n            data.field = this.state.dateStartField;\n            data.date = pill[this.state.dateStartField].clone().subtract(resizeDiff, this.viewInfo.activeScaleInfo.time);\n        } else {\n            data.field = this.state.dateStopField;\n            data.date = pill[this.state.dateStopField].clone().add(resizeDiff, this.viewInfo.activeScaleInfo.time);\n        }\n        this.trigger_up('pill_resized', data);\n    },\n    /**\n     * Set the draggable jQuery property on a $pill.\n     * @private\n     * @param {jQuery} $pill\n     */\n    _setDraggable: function ($pill) {\n        if ($pill.hasClass('ui-draggable-dragging')) {\n            return;\n        }\n\n        var self = this;\n        var pill = _.findWhere(this.pills, { id: $pill.data('id') });\n\n        // DRAGGABLE\n        if (this.options.canEdit && !pill.disableStartResize && !pill.disableStopResize && !this.isGroup) {\n\n            const resizeSnappingWidth = this._getResizeSnappingWidth();\n\n            if ($pill.draggable( \"instance\")) {\n                return;\n            }\n            if (!this.$containment) {\n                this.$containment = $('#o_gantt_containment');\n            }\n            $pill.draggable({\n                containment: this.$containment,\n                start: function (event, ui) {\n                    self.trigger_up('updating_pill_started');\n\n                    const pillWidth = $pill[0].getBoundingClientRect().width;\n                    ui.helper.css({ width: pillWidth });\n                    ui.helper.removeClass('position-relative');\n\n                    // The following trigger up will sometimes add the class o_hidden on the $pill.\n                    // This is why the pill's width is computed above.\n                    self.trigger_up('start_dragging', {\n                        $draggedPill: $pill,\n                        $draggedPillClone: ui.helper,\n                    });\n\n                    self.$el.addClass('o_gantt_dragging');\n                    $pill.popover('hide');\n                    self.$('.o_gantt_pill').popover('disable');\n                },\n                drag: function (event, ui) {\n                    if ($(event.target).hasClass('o_gantt_pill_editing')) {\n                        // Kill draggable if pill opened its dialog\n                        return false;\n                    }\n                    var diff = self._getDiff(resizeSnappingWidth, ui.position.left);\n                    self._updateResizeBadge(ui.helper, diff, ui);\n\n                    const pointObject = { x: event.pageX, y: event.pageY };\n                    const options = { container: document.body };\n                    const $el = $.nearest(pointObject, '.o_gantt_hoverable', options).first();\n                    if ($el.length) {\n                        // remove ui-drag-hover class from other rows\n                        $('.o_gantt_hoverable').removeClass('ui-drag-hover');\n                        $el.addClass('ui-drag-hover');\n                    }\n                },\n                stop: function () {\n                    self.trigger_up('updating_pill_stopped');\n                    self.trigger_up('stop_dragging');\n\n                    self.$('.ui-drag-hover').removeClass('ui-drag-hover');\n                    self.$el.removeClass('o_gantt_dragging');\n                    self.$('.o_gantt_pill').popover('enable').popover('dispose');\n                },\n                helper: 'clone',\n            });\n        } else {\n            if ($pill.draggable( \"instance\")) {\n                return;\n            }\n            if (!this.$lockIndicator) {\n                this.$lockIndicator = $('<div class=\"fa fa-lock\"/>').css({\n                    'z-index': 20,\n                    position: 'absolute',\n                    top: '4px',\n                    right: '4px',\n                });\n            }\n            $pill.draggable({\n                // prevents the pill from moving but allows to send feedback\n                grid: [0, 0],\n                start: function () {\n                    self.trigger_up('updating_pill_started');\n                    self.trigger_up('start_no_dragging');\n                    $pill.popover('hide');\n                    self.$('.o_gantt_pill').popover('disable');\n                    self.$lockIndicator.appendTo($pill);\n                },\n                drag: function (ev) {\n                    if ($(ev.target).hasClass('o_gantt_pill_editing')) {\n                        // Kill draggable if pill opened its dialog\n                        return false;\n                    }\n                },\n                stop: function () {\n                    self.trigger_up('updating_pill_stopped');\n                    self.trigger_up('stop_no_dragging');\n                    self.$('.o_gantt_pill').popover('enable').popover('dispose');\n                    self.$lockIndicator.detach();\n                },\n            });\n            $pill.addClass('o_fake_draggable');\n        }\n    },\n    /**\n     * Set the resizable jQuery property on a $pill.\n     * @private\n     * @param {jQuery} $pill\n     */\n    _setResizable: function ($pill) {\n        if ($pill.hasClass('ui-resizable')) {\n            return;\n        }\n        var self = this;\n        var pillHeight = this.$('.o_gantt_pill:first').height();\n\n        var pill = _.findWhere(self.pills, { id: $pill.data('id') });\n\n        const resizeSnappingWidth = this._getResizeSnappingWidth();\n\n        // RESIZABLE\n        var handles = [];\n        if (!pill.disableStartResize) {\n            handles.push('w');\n        }\n        if (!pill.disableStopResize) {\n            handles.push('e');\n        }\n        if (handles.length && !self.options.disableResize && !self.isGroup && self.options.canEdit) {\n            $pill.resizable({\n                handles: handles.join(', '),\n                odoo_isRTL: this.isRTL,\n                // DAM: I wanted to use a containment but there is a bug with them\n                // when elements are both draggable and resizable. In that case, is is no more possible\n                // to resize on the left side of the pill (I mean starting from left, go to left)\n                grid: [resizeSnappingWidth, pillHeight],\n                start: function () {\n                    $pill.popover('hide');\n                    self.$('.o_gantt_pill').popover('disable');\n                    self.trigger_up('updating_pill_started');\n                    self.$el.addClass('o_gantt_dragging');\n                },\n                resize: function (event, ui) {\n                    var diff = Math.round((ui.size.width - ui.originalSize.width) / resizeSnappingWidth * self.viewInfo.activeScaleInfo.interval);\n                    self._updateResizeBadge($pill, diff, ui);\n                },\n                stop: function (event, ui) {\n                    // 'stop' is triggered by the mouseup event. Right after, the click is event is\n                    // triggered. As we also listen to this event (to open a dialog to edit the pill),\n                    // we have to delay a bit the moment where we mark the pill as no longer being\n                    // updated, to prevent the dialog from opening when the user ends its resize\n                    setTimeout(() => {\n                        self.trigger_up('updating_pill_stopped');\n                        self.$el.removeClass('o_gantt_dragging');\n                        self.$('.o_gantt_pill').popover('enable').popover('dispose');\n                    });\n                    var diff = Math.round((ui.size.width - ui.originalSize.width) / resizeSnappingWidth * self.viewInfo.activeScaleInfo.interval);\n                    var direction = ui.position.left ? 'left' : 'right';\n                    if (diff) { // do not perform write if nothing change\n                        self._saveResizeChanges(pill.id, diff, direction);\n                    }\n                },\n            });\n        }\n    },\n    /**\n     * Snap timespans start and stop dates on grid described by scale precision\n     * @params Array<Object> timeSpans objects representing timespans. They need\n     *      to have a startDate and a stopDate properties.\n     *\n     * @private\n     */\n    _snapToGrid: function (timeSpans) {\n        var self = this;\n        var interval = this.viewInfo.activeScaleInfo.interval;\n        switch (this.state.scale) {\n            case 'day':\n                timeSpans.forEach(function (span) {\n                    var snappedStartDate = self._snapMinutes(span.startDate, interval);\n                    var snappedStopDate = self._snapMinutes(span.stopDate, interval);\n                    // Set min width\n                    var minuteDiff = snappedStartDate.diff(snappedStopDate, 'minute');\n                    if (minuteDiff === 0) {\n                        if (snappedStartDate > span.startDate) {\n                            span.startDate = snappedStartDate.subtract(interval, 'minute');\n                            span.stopDate = snappedStopDate;\n                        } else {\n                            span.startDate = snappedStartDate;\n                            span.stopDate = snappedStopDate.add(interval, 'minute');\n                        }\n                    } else {\n                        span.startDate = snappedStartDate;\n                        span.stopDate = snappedStopDate;\n                    }\n                });\n                break;\n            case 'week':\n            case 'month':\n                timeSpans.forEach(function (span) {\n                    var snappedStartDate = self._snapHours(span.startDate, interval);\n                    var snappedStopDate = self._snapHours(span.stopDate, interval);\n                    // Set min width\n                    var hourDiff = snappedStartDate.diff(snappedStopDate, 'hour');\n                    if (hourDiff === 0) {\n                        if (snappedStartDate.diff(span.startDate, 'hours') > 2 && span.stopDate.diff(snappedStopDate, 'hours') > 2) {\n                            span.startDate = snappedStartDate.subtract(interval, 'hour');\n                            span.stopDate = snappedStopDate.add(interval, 'hour');\n                        } else if (snappedStartDate > span.startDate) {\n                            span.startDate = snappedStartDate.subtract(interval, 'hour');\n                            span.stopDate = snappedStopDate;\n                        } else {\n                            span.startDate = snappedStartDate;\n                            span.stopDate = snappedStopDate.add(interval, 'hour');\n                        }\n                    } else {\n                        if (snappedStartDate.diff(span.startDate, 'hours') > 2) {\n                            snappedStartDate = snappedStartDate.subtract(interval, 'hour');\n                        }\n                        if (span.stopDate.diff(snappedStopDate, 'hours') > 2) {\n                            snappedStopDate = snappedStopDate.add(interval, 'hour');\n                        }\n                        span.startDate = snappedStartDate;\n                        span.stopDate = snappedStopDate;\n                    }\n                });\n                break;\n            case 'year':\n                timeSpans.forEach(function (span) {\n                    span.startDate = span.startDate.clone().startOf('month');\n                    span.stopDate = span.stopDate.clone().endOf('month');\n                });\n                break;\n            default:\n                break;\n        }\n    },\n    /**\n     * Snap a day to given interval\n     *\n     * @private\n     * @param {Moment} date\n     * @param {integer} interval\n     * @returns {Moment} snapped date\n     */\n    _snapHours: function (date, interval) {\n        var snappedHours = Math.round(date.clone().hour() / interval) * interval;\n        return date.clone().hour(snappedHours).minute(0).second(0);\n    },\n    /**\n     * Snap a hour to given interval\n     *\n     * @private\n     * @param {Moment} date\n     * @param {integer} interval\n     * @returns {Moment} snapped hour date\n     */\n    _snapMinutes: function (date, interval) {\n        var snappedMinutes = Math.round(date.clone().minute() / interval) * interval;\n        return date.clone().minute(snappedMinutes).second(0);\n    },\n    /**\n     * @private\n     * @param {jQuert} $pill\n     * @param {integer} diff\n     * @param {Object} ui\n     */\n    _updateResizeBadge: function ($pill, diff, ui) {\n        $pill.find('.o_gantt_pill_resize_badge').remove();\n        if (diff) {\n            var direction = ui.position.left ? 'left' : 'right';\n            $( QWeb.render('GanttView.ResizeBadge', {\n                diff: diff,\n                direction: direction,\n                time: this.viewInfo.activeScaleInfo.time,\n            } ), { css: { 'z-index': 2 } } )\n            .appendTo($pill);\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * When click on cell open dialog to create new record with prefilled fields\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onButtonAddClicked: function (ev) {\n        var date = moment($(ev.currentTarget).closest('.o_gantt_cell').data('date'));\n        this.trigger_up('add_button_clicked', {\n            date: date,\n            rowId: this.rowId,\n        });\n    },\n    /**\n     * When click on cell open dialog to create new record with prefilled fields\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onButtonPlanClicked: function (ev) {\n        var date = moment($(ev.currentTarget).closest('.o_gantt_cell').data('date'));\n        this.trigger_up('plan_button_clicked', {\n            date: date,\n            rowId: this.rowId,\n        });\n    },\n    /**\n     * When entering a cell, it displays some buttons (but not when resizing\n     * another pill, we thus can't use css rules).\n     *\n     * Note that we cannot do that on the cell mouseenter because we don't enter\n     * the cell we moving the mouse on a pill that spans on multiple cells.\n     *\n     * Also note that we try to *avoid using jQuery* here to reduce the time\n     * spent in this function so the whole view doesn't feel sluggish when there\n     * are a lot of records.\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onMouseMove: function (ev) {\n        if ((this.options.canCreate || this.options.canEdit) &&\n            !this.$el[0].classList.contains('o_gantt_dragging')) {\n            // Pills are part of the cell in which they start. If a pill is\n            // longer than one cell, and the user is hovering on the right\n            // side of the pill, the browser will say that the left cell is\n            // hovered, since the hover event will bubble up from the pill to\n            // the cell which contains it, hence, the left one. The only way we\n            // found to target the real cell on which the user is currently\n            // hovering is calling the costly elementsFromPoint function.\n            // Besides, this function will not work in the test environment.\n            var elementsFromPoint = function (x, y) {\n                if (document.elementsFromPoint)\n                    return document.elementsFromPoint(x, y);\n                if (document.msElementsFromPoint) {\n                    return Array.prototype.slice.call(document.msElementsFromPoint(x, y));\n                }\n            };\n\n            var hoveredCell;\n            if (ev.target.classList.contains('o_gantt_pill') || ev.target.parentNode.classList.contains('o_gantt_pill')) {\n                elementsFromPoint(ev.pageX, ev.pageY).some(function (element) {\n                    return element.classList.contains('o_gantt_cell') ? ((hoveredCell = element), true) : false;\n                });\n            } else {\n                hoveredCell = ev.currentTarget;\n            }\n\n            if (hoveredCell && hoveredCell != this.lastHoveredCell) {\n                if (this.lastHoveredCell) {\n                    this.lastHoveredCell.classList.remove('o_hovered');\n                }\n                hoveredCell.classList.add('o_hovered');\n                this.lastHoveredCell = hoveredCell;\n            }\n        }\n    },\n    /**\n     * @private\n     */\n    _onMouseLeave: function () {\n        // User leaves this row to enter another one\n        this.$(\".o_gantt_cell.o_hovered\").removeClass('o_hovered');\n        this.lastHoveredCell = undefined;\n    },\n    /**\n     * When click on pill open dialog to view record\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onPillClicked: function (ev) {\n        if (!this.isGroup) {\n            this.trigger_up('pill_clicked', {\n                target: $(ev.currentTarget),\n            });\n        }\n    },\n    /**\n     * Set the draggable and resizable jQuery properties on a pill when the user\n     * enters the pill.\n     *\n     * This is only done at this time and not in `on_attach_callback` to\n     * optimize the rendering (creating jQuery draggable and resizable for\n     * potentially thousands of pills is the heaviest task).\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onPillEntered: function (ev) {\n        var $pill = $(ev.currentTarget);\n\n        this._setResizable($pill);\n        if (!this.isTotal && !this.options.disableDragdrop) {\n            this._setDraggable($pill);\n        }\n        if (!this.isGroup && !config.device.isMobile) {\n            this._bindPillPopover(ev.target);\n        }\n    },\n    /**\n     * Toggle Collapse/Expand rows when user click in gantt row sidebar\n     *\n     * @private\n     */\n    _onRowSidebarClicked: function () {\n        if (this.isGroup & !this.isTotal) {\n            if (this.isOpen) {\n                this.trigger_up('collapse_row', {rowId: this.rowId});\n            } else {\n                this.trigger_up('expand_row', {rowId: this.rowId});\n            }\n        }\n    },\n});\n\nreturn GanttRow;\n\n});\n", "odoo.define('web_gantt.GanttView', function (require) {\n\"use strict\";\n\nvar AbstractView = require('web.AbstractView');\nvar core = require('web.core');\nvar GanttModel = require('web_gantt.GanttModel');\nvar GanttRenderer = require('web_gantt.GanttRenderer');\nvar GanttController = require('web_gantt.GanttController');\nvar pyUtils = require('web.py_utils');\nvar view_registry = require('web.view_registry');\n\nvar _t = core._t;\nvar _lt = core._lt;\n\nvar GanttView = AbstractView.extend({\n    display_name: _lt('Gantt'),\n    icon: 'fa-tasks',\n    config: _.extend({}, AbstractView.prototype.config, {\n        Model: GanttModel,\n        Controller: GanttController,\n        Renderer: GanttRenderer,\n    }),\n    jsLibs: [\n        '/web/static/lib/nearest/jquery.nearest.js',\n    ],\n    viewType: 'gantt',\n\n    /**\n     * @override\n     */\n    init: function (viewInfo, params) {\n        this._super.apply(this, arguments);\n\n        const { domain } = params.action || {};\n        this.controllerParams.actionDomain = domain || [];\n\n        this.SCALES = {\n            day: { string: _t('Day'), cellPrecisions: { full: 60, half: 30, quarter: 15 }, defaultPrecision: 'full', time: 'minutes', interval: 'hour' },\n            week: { string: _t('Week'), cellPrecisions: { full: 24, half: 12 }, defaultPrecision: 'half', time: 'hours', interval: 'day' },\n            month: { string: _t('Month'), cellPrecisions: { full: 24, half: 12 }, defaultPrecision: 'half', time: 'hours', interval: 'day' },\n            year: { string: _t('Year'), cellPrecisions: { full: 1 }, defaultPrecision: 'full', time: 'months', interval: 'month' },\n        };\n\n        var arch = this.arch;\n\n        // Decoration fields\n        var decorationFields = [];\n        _.each(arch.children, function (child) {\n            if (child.tag === 'field') {\n                decorationFields.push(child.attrs.name);\n            }\n        });\n\n        var collapseFirstLevel = !!arch.attrs.collapse_first_level;\n\n        // Unavailability\n        var displayUnavailability = !!arch.attrs.display_unavailability;\n\n        // Colors\n        var colorField = arch.attrs.color;\n\n        // Cell precision\n        // precision = {'day': 'hour:half', 'week': 'day:half', 'month': 'day', 'year': 'month:quarter'}\n        var precisionAttrs = arch.attrs.precision ? pyUtils.py_eval(arch.attrs.precision) : {};\n        var cellPrecisions = {};\n        _.each(this.SCALES, function (vals, key) {\n            if (precisionAttrs[key]) {\n                var precision = precisionAttrs[key].split(':'); // hour:half\n                // Note that precision[0] (which is the cell interval) is not\n                // taken into account right now because it is no customizable.\n                if (precision[1] && _.contains(_.keys(vals.cellPrecisions), precision[1])) {\n                    cellPrecisions[key] = precision[1];\n                }\n            }\n            cellPrecisions[key] = cellPrecisions[key] || vals.defaultPrecision;\n        });\n\n        var consolidationMaxField;\n        var consolidationMaxValue;\n        var consolidationMax = arch.attrs.consolidation_max ? pyUtils.py_eval(arch.attrs.consolidation_max) : {};\n        if (Object.keys(consolidationMax).length > 0) {\n            consolidationMaxField = Object.keys(consolidationMax)[0];\n            consolidationMaxValue = consolidationMax[consolidationMaxField];\n            // We need to display the aggregates even if there is only one groupby\n            collapseFirstLevel = !!consolidationMaxField || collapseFirstLevel;\n        }\n\n        var consolidationParams = {\n            field: arch.attrs.consolidation,\n            maxField: consolidationMaxField,\n            maxValue: consolidationMaxValue,\n            excludeField: arch.attrs.consolidation_exclude,\n        };\n\n        // form view which is opened by gantt\n        var formViewId = arch.attrs.form_view_id ? parseInt(arch.attrs.form_view_id, 10) : false;\n        if (params.action && !formViewId) { // fallback on form view action, or 'false'\n            var result = _.findWhere(params.action.views, { type: 'form' });\n            formViewId = result ? result.viewID : false;\n        }\n        var dialogViews = [[formViewId, 'form']];\n\n        var allowedScales;\n        if (arch.attrs.scales) {\n            var possibleScales = Object.keys(this.SCALES);\n            allowedScales = _.reduce(arch.attrs.scales.split(','), function (allowedScales, scale) {\n                if (possibleScales.indexOf(scale) >= 0) {\n                    allowedScales.push(scale.trim());\n                }\n                return allowedScales;\n            }, []);\n        } else {\n            allowedScales = Object.keys(this.SCALES);\n        }\n\n        var scale = params.context.default_scale || arch.attrs.default_scale || 'month';\n        var initialDate = moment(params.context.initialDate || params.initialDate || arch.attrs.initial_date || new Date());\n        var offset = arch.attrs.offset;\n        if (offset && scale) {\n            initialDate.add(offset, scale);\n        }\n\n        // thumbnails for groups (display a thumbnail next to the group name)\n        var thumbnails = this.arch.attrs.thumbnails ? pyUtils.py_eval(this.arch.attrs.thumbnails) : {};\n        // plan option\n        var canPlan = this.arch.attrs.plan ? !!JSON.parse(this.arch.attrs.plan) : true;\n        // cell create option\n        const canCellCreate = this.arch.attrs.cell_create ? !!JSON.parse(this.arch.attrs.cell_create) : true;\n\n        this.controllerParams.context = params.context || {};\n        this.controllerParams.dialogViews = dialogViews;\n        this.controllerParams.SCALES = this.SCALES;\n        this.controllerParams.allowedScales = allowedScales;\n        this.controllerParams.collapseFirstLevel = collapseFirstLevel;\n        this.controllerParams.createAction = arch.attrs.on_create || null;\n\n        this.loadParams.initialDate = initialDate;\n        this.loadParams.collapseFirstLevel = collapseFirstLevel;\n        this.loadParams.colorField = colorField;\n        this.loadParams.dateStartField = arch.attrs.date_start;\n        this.loadParams.dateStopField = arch.attrs.date_stop;\n        this.loadParams.progressField = arch.attrs.progress;\n        this.loadParams.decorationFields = decorationFields;\n        this.loadParams.defaultGroupBy = this.arch.attrs.default_group_by;\n        this.loadParams.dynamicRange = this.arch.attrs.dynamic_range;\n        this.loadParams.displayUnavailability = displayUnavailability;\n        this.loadParams.fields = this.fields;\n        this.loadParams.scale = scale;\n        this.loadParams.SCALES = this.SCALES;\n        this.loadParams.consolidationParams = consolidationParams;\n\n        this.rendererParams.canCreate = this.controllerParams.activeActions.create;\n        this.rendererParams.canCellCreate = canCellCreate;\n        this.rendererParams.canEdit = this.controllerParams.activeActions.edit;\n        this.rendererParams.canPlan = canPlan && this.rendererParams.canEdit;\n        this.rendererParams.fieldsInfo = viewInfo.fields;\n        this.rendererParams.SCALES = this.SCALES;\n        this.rendererParams.cellPrecisions = cellPrecisions;\n        this.rendererParams.totalRow = arch.attrs.total_row || false;\n        this.rendererParams.string = arch.attrs.string || _t('Gantt View');\n        this.rendererParams.popoverTemplate = _.findWhere(arch.children, {tag: 'templates'});\n        this.rendererParams.colorField = colorField;\n        this.rendererParams.disableDragdrop = arch.attrs.disable_drag_drop ? !!JSON.parse(arch.attrs.disable_drag_drop) : false;\n        this.rendererParams.progressField = arch.attrs.progress;\n        this.rendererParams.displayUnavailability = displayUnavailability;\n        this.rendererParams.collapseFirstLevel = collapseFirstLevel;\n        this.rendererParams.consolidationParams = consolidationParams;\n        this.rendererParams.thumbnails = thumbnails;\n    },\n});\n\nview_registry.add('gantt', GanttView);\n\nreturn GanttView;\n\n});\n", "/** @odoo-module **/\n\nimport { deepMerge } from \"./connector_utils\";\nconst { Component } = owl;\nconst { css } = owl.tags;\n\n\nconst STYLE = css`\n        .o_connector {\n            position: absolute;\n            top: 0;\n            left: 0;\n            width: 100%;\n            height: 100%;\n            &.o_connector_hovered {\n                z-index: 2;\n            }\n            .o_connector_stroke_button {\n                > rect {\n                    cursor: pointer;\n                    stroke: #091124;\n                    stroke-width: 24px;\n                    fill: white;\n                }\n                &.o_connector_stroke_reschedule_button {\n                    line {\n                        stroke: #00a09d;\n                    }\n                    &:hover{\n                        > rect {\n                            fill: #00a09d;\n                        }\n                        line {\n                            stroke: white;\n                        }\n                    }\n                }\n                &.o_connector_stroke_remove_button {\n                    g {\n                        rect {\n                            fill: #dd3c4f;\n                        }\n                    }\n                    &:hover{\n                        > rect {\n                            fill: #dd3c4f;\n                        }\n                        g {\n                            rect {\n                                fill: white;\n                            }\n                        }\n                    }\n                }\n            }\n        }\n`;\n\nclass Connector extends Component {\n\n    // -----------------------------------------------------------------------------\n    // Life cycle hooks\n    // -----------------------------------------------------------------------------\n\n    /**\n     * @override\n     */\n    setup() {\n        this._refreshPropertiesFromProps(this.props);\n    }\n\n    /**\n     *\n     * @override\n     * @param nextProps\n     * @returns {Promise<void>}\n     */\n    async willUpdateProps(nextProps) {\n        this._refreshPropertiesFromProps(nextProps);\n    }\n\n    // -----------------------------------------------------------------------------\n    // Private\n    // -----------------------------------------------------------------------------\n\n    /**\n     * Refreshes the connector properties from the props.\n     *\n     * @param {Object} props\n     * @private\n     */\n    _refreshPropertiesFromProps(props) {\n        const defaultStyleProps = {\n            drawHead: true,\n            outlineStroke: {\n                color: 'rgba(255,255,255,0.5)',\n                hoveredColor: 'rgba(255,255,255,0.9)',\n                width: 2,\n            },\n            slackness: 0.5,\n            stroke: {\n                color: 'rgba(0,0,0,0.5)',\n                hoveredColor: 'rgba(0,0,0,0.9)',\n                width: 2,\n            },\n        };\n        this.hoverEaseWidth = props.hoverEaseWidth ? props.hoverEaseWidth : 1;\n        this.style = deepMerge(defaultStyleProps, props.style);\n        const pathInfo = this._getPathInfo(props.source, props.target,  this.style.slackness);\n        this.path = `M ${pathInfo.singlePath.source.left} ${pathInfo.singlePath.source.top} \\\n                     C ${pathInfo.singlePath.sourceControlPoint.left} ${pathInfo.singlePath.sourceControlPoint.top} \\\n                       ${pathInfo.singlePath.targetControlPoint.left} ${pathInfo.singlePath.targetControlPoint.top} \\\n                       ${pathInfo.singlePath.target.left} ${pathInfo.singlePath.target.top}`;\n        this.removeButtonPosition = pathInfo.doublePath.startingPath.target;\n    }\n\n    /**\n     * Returns the parameters of both the single Bezier curve as well as is decomposition into two beziers curves\n     * (which allows to get the middle position of the single Bezier curve) for the provided source, target and\n     * slackness (0 being a straight line).\n     *\n     * @param {{ left: number, top: number }} source\n     * @param {{ left: number, top: number }} target\n     * @param {number} slackness [0, 1]\n     * @returns {{\n     *              singlePath: {\n     *                      source: {\n     *                          top: number,\n     *                          left: number\n     *                      },\n     *                      sourceControlPoint: {\n     *                          top: number,\n     *                          left: number\n     *                      },\n     *                      target: {\n     *                          top: number,\n     *                          left: number\n     *                      },\n     *                      targetControlPoint: {\n     *                          top: number,\n     *                          left: number\n     *                      }\n     *              },\n     *              doublePath: {\n     *                  endingPath: {\n     *                      source: {\n     *                          top: number,\n     *                          left: number\n     *                      },\n     *                      sourceControlPoint: {\n     *                          top: number,\n     *                          left: number\n     *                      },\n     *                      target: {\n     *                          top: number,\n     *                          left: number\n     *                      },\n     *                      targetControlPoint: {\n     *                          top: number,\n     *                          left: number\n     *                      }\n     *                  },\n     *                  startingPath: {\n     *                      source: {\n     *                          top: number,\n     *                          left: number\n     *                      },\n     *                      sourceControlPoint: {\n     *                          top: number,\n     *                          left: number\n     *                      },\n     *                      target: {\n     *                          top: number,\n     *                          left: number\n     *                      },\n     *                      targetControlPoint: {\n     *                          top: number,\n     *                          left: number\n     *                      }\n     *                  }\n     *              }\n     *          }}\n     * @private\n     */\n    _getPathInfo(source, target, slackness) {\n        const b = { left: 0, top: 0 };\n        const c = { left: 0, top: 0 };\n        // If the source is on the left of the target, we need to invert the control points.\n        const directionFactor = source.left < target.left ? 1 : -1;\n        // What follows can be seen as magic numbers. And those are indeed such numbers as they have been determined\n        // by observing their shape while creating short and long connectors. These seems to allow keeping the same\n        // kind of shape amongst short and long connectors.\n        const xDelta = 100 + directionFactor * (target.left - source.left) * slackness / 10;\n        const yDelta = Math.abs(source.top - target.top) < 16 && source.left > target.left ? 15 + 0.001 * (source.left - target.left) * slackness : 0;\n        b.left = source.left + xDelta;\n        b.top = source.top + yDelta;\n        // Prevent having the air pin effect when in creation and having target on the left of the source\n        if (!this.props.inCreation || directionFactor > 0) {\n            c.left = target.left - xDelta;\n        } else {\n            c.left = target.left + xDelta;\n        }\n        c.top = target.top + yDelta;\n\n        const cuttingDistance = 0.5;\n        const e = Connector._getLinearInterpolation(source, b, cuttingDistance);\n        const f = Connector._getLinearInterpolation(b, c, cuttingDistance);\n        const g = Connector._getLinearInterpolation(c, target, cuttingDistance);\n        const h = Connector._getLinearInterpolation(e, f, cuttingDistance);\n        const i = Connector._getLinearInterpolation(f, g, cuttingDistance);\n        const j = Connector._getLinearInterpolation(h, i, cuttingDistance);\n\n        return {\n            singlePath: {\n                source: source,\n                sourceControlPoint: b,\n                target: target,\n                targetControlPoint: c,\n            },\n            doublePath: {\n                endingPath: {\n                    source: j,\n                    sourceControlPoint: i,\n                    target: target,\n                    targetControlPoint: g,\n                },\n                startingPath: {\n                    source: source,\n                    sourceControlPoint: e,\n                    target: j,\n                    targetControlPoint: h,\n                },\n            },\n        };\n    }\n\n    // -----------------------------------------------------------------------------\n    // Handlers\n    // -----------------------------------------------------------------------------\n\n    /**\n     * Handler for connector_stroke_buttons remove click event.\n     *\n     * @param {OwlEvent} ev\n     */\n    _onRemoveButtonClick(ev) {\n        const payload = {\n            data: deepMerge(this.props.data),\n            id: this.props.id,\n        };\n        this.trigger('remove-button-click', payload);\n    }\n    /**\n     * Handler for connector_stroke_buttons reschedule sooner click event.\n     *\n     * @param {OwlEvent} ev\n     */\n    _onRescheduleSoonerClick(ev) {\n        const payload = {\n            data: deepMerge(this.props.data),\n            id: this.props.id,\n        };\n        this.trigger('reschedule-sooner-click', payload);\n    }\n    /**\n     * Handler for connector_stroke_buttons reschedule later click event.\n     *\n     * @param {OwlEvent} ev\n     */\n    _onRescheduleLaterClick(ev) {\n        const payload = {\n            data: deepMerge(this.props.data),\n            id: this.props.id,\n        };\n        this.trigger('reschedule-later-click', payload);\n    }\n\n}\n\nconst endProps = {\n    shape: {\n        left: Number,\n        top: Number,\n    },\n    type: Object,\n};\nconst strokeStyleProps = {\n    optional: true,\n    shape: {\n        color: {\n            optional: true,\n            type: String,\n        },\n        hoveredColor: {\n            optional: true,\n            type: String,\n        },\n        width: {\n            optional: true,\n            type: Number,\n        },\n    },\n    type: Object,\n};\n\nObject.assign(Connector, {\n    props: {\n        canBeRemoved: {\n            optional: true,\n            type: Boolean\n        },\n        data: {\n            optional: true,\n            type: Object,\n        },\n        hoverEaseWidth: {\n            optional: true,\n            type: Number,\n        },\n        hovered: {\n            optional: true,\n            type: Boolean\n        },\n        inCreation: {\n            optional: true,\n            type: Boolean,\n        },\n        id: { type: String | Number },\n        source: endProps,\n        style: {\n            optional: true,\n            shape: {\n                drawHead: {\n                    optional: true,\n                    type: Boolean,\n                },\n                outlineStroke: strokeStyleProps,\n                slackness: {\n                    optional: true,\n                    type: Number,\n                    validate: slackness => (0 <= slackness && slackness <= 1),\n                },\n                stroke: strokeStyleProps,\n            },\n            type: Object,\n        },\n        target: endProps,\n    },\n    style: STYLE,\n    template: 'connector',\n\n    // -----------------------------------------------------------------------------\n    // Private Static\n    // -----------------------------------------------------------------------------\n\n    /**\n     * Returns the linear interpolation for a point to be found somewhere between a startingPoint and a endingPoint.\n     *\n     * @param {{top: number, left: number}} startingPoint\n     * @param {{top: number, left: number}} endingPoint\n     * @param {number} interpolationPercentage [0, 1] the distance (from 0 startingPoint to 1 endingPoint)\n     *        the point has to be computed at.\n     * @returns {{top: number, left: number}}\n     * @private\n     */\n    _getLinearInterpolation(startingPoint, endingPoint, interpolationPercentage) {\n        if (interpolationPercentage < 0 || 1 > interpolationPercentage) {\n            // Ensures interpolationPercentage is within expected boundaries.\n            interpolationPercentage = Math.min(Math.max (0, interpolationPercentage), 1);\n        }\n        const remaining = 1 - interpolationPercentage;\n        return {\n            left: startingPoint.left * remaining + endingPoint.left * interpolationPercentage,\n            top: startingPoint.top * remaining + endingPoint.top * interpolationPercentage\n        };\n    },\n});\n\nexport default Connector;\n", "/** @odoo-module **/\n\nimport Connector from \"./connector\";\nimport { deepMerge } from \"./connector_utils\";\nconst { Component } = owl;\nconst { css } = owl.tags;\n\n\nconst STYLE = css`\n        .o_connector_container {\n            pointer-events: none;\n            position: absolute;\n            top: 0;\n            left: 0;\n            width: 100%;\n            height: 100%;\n        }\n`;\n\nclass ConnectorContainer extends Component {\n\n    // -----------------------------------------------------------------------------\n    // Life cycle hooks\n    // -----------------------------------------------------------------------------\n\n    /**\n     * @override\n     */\n    setup() {\n        this._createsParentListenerHandlers();\n        /**\n         * Keeps track of the mouse events related info.\n         * @type {{ isParentDragging: boolean, hoveredConnector: HTMLElement }}\n         */\n        this.mouseEventsInfo = { };\n        // Connector component used in order to manage connector creation.\n        this.newConnector = {\n            id: \"newConnectorId\",\n            canBeRemoved: false,\n        };\n        // Apply default styling (if any) to newConnector.\n        if ('defaultStyle' in this.props) {\n            this.newConnector = deepMerge(this.newConnector, { style: this.props.defaultStyle });\n        }\n        if ('newConnectorStyle' in this.props) {\n            this.newConnector = deepMerge(this.newConnector, { style: this.props.newConnectorStyle });\n        }\n        this._refreshPropertiesFromProps(this.props);\n    }\n\n    /**\n     * @override\n     */\n    mounted() {\n        if (this.parentElement && this.parentElement !== this.el.parentElement) {\n            this._removeParentListeners();\n        }\n        this.parentElement = this.el.parentElement;\n        this._addParentListeners();\n    }\n\n    /**\n     * @override\n     */\n    willUnmount() {\n        this._removeParentListeners();\n    }\n\n    /**\n     *\n     * @override\n     * @param nextProps\n     * @returns {Promise<void>}\n     */\n    async willUpdateProps(nextProps) {\n        this._refreshPropertiesFromProps(nextProps);\n    }\n\n    // -----------------------------------------------------------------------------\n    // Private\n    // -----------------------------------------------------------------------------\n\n    /**\n     * Adds the ConnectorContainer's parent required EventListeners.\n     *\n     * @private\n     */\n    _addParentListeners() {\n        this.parentElement.addEventListener('mousedown', this._onParentMouseDownHandler);\n        this.parentElement.addEventListener('mousemove', this._throttledOnParentMouseOverHandler);\n        this.parentElement.addEventListener('mouseup', this._onParentMouseUpHandler);\n        this.parentElement.addEventListener('mouseleave', this._onParentMouseUpHandler);\n    }\n\n    /**\n     * Creates the handlers used in _addParentListeners and _removeParentListeners calls.\n     *\n     * @private\n     */\n    _createsParentListenerHandlers() {\n        this._throttledOnParentMouseOverHandler = _.throttle((ev) => this._onParentMouseOver(ev), 50);\n        this._onParentMouseDownHandler = (ev) => this._onParentMouseDown(ev);\n        this._onParentMouseUpHandler = (ev) => this._onParentMouseUp(ev);\n    }\n\n    /**\n     * Gets the element offset against the connectorContainer's parent.\n     *\n     * @param {HTMLElement} element the element the offset position has to be calculated for.\n     */\n    _getElementPosition(element) {\n        // This will not work for css translated elements and this is acceptable at this time.\n        // If needed in the future, consider using getBoundingClientRect() if getComputedStyle() returns a style\n        // having a transform (and place this also in the for loop as we would need to do it if the element or any of\n        // its parent is using css transform).\n        let left = element.offsetLeft || 0;\n        let top = element.offsetTop || 0;\n        for (let el = element.offsetParent; el != null && el !== this.el.parentElement; el = el.offsetParent) {\n            left += el.offsetLeft || 0;\n            top += el.offsetTop || 0;\n        }\n        return {\n            left: left,\n            top: top,\n        };\n    }\n\n    /**\n     * Refreshes the connector properties from the props.\n     *\n     * @param {Object} props\n     * @private\n     */\n    _refreshPropertiesFromProps(props) {\n        this.connectors = deepMerge(props.connectors);\n        if (this.props.defaultStyle) {\n            Object.keys(this.connectors)\n                  .forEach((key) => {\n                      this.connectors[key].style = deepMerge(this.props.defaultStyle, this.connectors[key].style);\n                      if (!('hoverEaseWidth' in this.connectors[key]) && 'hoverEaseWidth' in props) {\n                          this.connectors[key].hoverEaseWidth = props.hoverEaseWidth;\n                      }\n                  });\n        }\n        const isHoveredConnectorSet = 'hoveredConnector' in this.mouseEventsInfo;\n        const isHoveredConnectorPartOfProps = isHoveredConnectorSet && this.mouseEventsInfo.hoveredConnector.dataset.id in this.connectors;\n        if (isHoveredConnectorSet && !isHoveredConnectorPartOfProps) {\n            // Ensures to reset the mouseEventsInfo in case the hoveredConnector is set but is no more part\n            // of the new props.\n            delete this.mouseEventsInfo.hoveredConnector;\n        }\n    }\n\n    /**\n     * Removes the ConnectorContainer's parent required EventListeners.\n     *\n     */\n    _removeParentListeners() {\n        this.parentElement.removeEventListener('mousedown', this._onParentMouseDownHandler);\n        this.parentElement.removeEventListener('mousemove', this._throttledOnParentMouseOverHandler);\n        this.parentElement.removeEventListener('mouseup', this._onParentMouseUpHandler);\n        this.parentElement.removeEventListener('mouseleave', this._onParentMouseUpHandler);\n    }\n\n    /**\n     * Updates the hover state of the connector and render\n     *\n     * @param {string} id the id of the connector which hover state has to be updated.\n     * @param {boolean} hovered the hover state to be set.\n     * @private\n     */\n    _updateConnectorHoverState(id, hovered) {\n        this.connectors[id].hovered = hovered && !(this.props.preventHoverEffect || this.mouseEventsInfo.isParentDragging);\n        if (hovered) {\n            // When a connector is hover we need to ensure it is rendered as last element as svg z-index works\n            // that way and unfortunately no css can be used to modify it.\n            const hoverConnector = this.connectors[id];\n            delete this.connectors[id];\n            this.connectors[id] = hoverConnector;\n        }\n        this.render();\n    }\n\n    // -----------------------------------------------------------------------------\n    // Public\n    // -----------------------------------------------------------------------------\n\n    /**\n     * Gets the top, right, bottom and left anchors positions for the provided element with respect to the\n     * ConnectorContainer's parent.\n     *\n     * @param {HTMLElement} element the element the anchors positions have to be calculated for.\n     * @param {HTMLElement} container the container the anchors positions will be calculated with respect to. In order\n     *                                to have a valid result, the container should be an element with position attribute\n     *                                set to relative.\n     * @returns {{\n     *              top: {top: number, left: number},\n     *              left: {top: number, left: number},\n     *              bottom: {top: number, left: number},\n     *              right: {top: number, left: number}\n     *          }}\n     */\n    getAnchorsPositions(element) {\n        const elementPosition = this._getElementPosition(element);\n        return {\n            top: {\n                top: elementPosition.top,\n                left: elementPosition.left + element.offsetWidth / 2,\n            },\n            right: {\n                top: elementPosition.top + element.offsetHeight / 2,\n                left: elementPosition.left + element.offsetWidth,\n            },\n            bottom: {\n                top: elementPosition.top + element.offsetHeight,\n                left: elementPosition.left + element.offsetWidth / 2,\n            },\n            left: {\n                top: elementPosition.top + element.offsetHeight / 2,\n                left: elementPosition.left,\n            },\n        };\n    }\n\n    // -----------------------------------------------------------------------------\n    // Handlers\n    // -----------------------------------------------------------------------------\n\n    /**\n     * Handler for the connector remove-button-click event.\n     *\n     * @param {OwlEvent} ev\n     * @private\n     */\n    _onConnectorRemoveButtonClick(ev) {\n        ev.stopPropagation();\n        this.trigger('connector-remove-button-click', ev.detail);\n    }\n\n    _onConnectorRescheduleLaterButtonClick(ev) {\n        ev.stopPropagation();\n        this.trigger('connector-reschedule-later-button-click', ev.detail);\n    }\n\n    _onConnectorRescheduleSoonerButtonClick(ev) {\n        ev.stopPropagation();\n        this.trigger('connector-reschedule-sooner-button-click', ev.detail);\n    }\n\n    /**\n     * Handler for the ConnectorContainer's parent mousedown event. This handle is responsible of managing the start of a possible\n     * connector creation (depending on whether the event target matches the sourceQuerySelector).\n     *\n     * @param {MouseEvent} ev\n     * @private\n     */\n    _onParentMouseDown(ev) {\n        const connector_source = ev.target.closest(this.props.sourceQuerySelector);\n        if (connector_source) {\n            ev.stopPropagation();\n            ev.preventDefault();\n            this.mouseEventsInfo.isParentDragging = true;\n            const anchors = this.getAnchorsPositions(ev.target);\n            this.newConnector = deepMerge(\n                this.newConnector,\n                {\n                    data: {\n                        sourceElement: connector_source,\n                    },\n                    inCreation: true,\n                    source: {\n                        top: anchors.right.top,\n                        left: anchors.right.left,\n                    },\n                    target: {\n                        top: anchors.right.top + ev.offsetY,\n                        left: anchors.right.left + ev.offsetX,\n                    },\n                });\n            this.trigger('connector-creation-start', deepMerge({ }, this.newConnector));\n            this.render();\n        }\n    }\n\n    /**\n     * Handler for the ConnectorContainer's parent mouseover event. This handle is responsible of the update of the newConnector\n     * component props if a connector creation has started.\n     *\n     * @param {MouseEvent} ev\n     * @private\n     */\n    _onParentMouseOver(ev) {\n        if (this.mouseEventsInfo.isParentDragging === true) {\n            ev.stopPropagation();\n            ev.preventDefault();\n            const position = this._getElementPosition(ev.target);\n            this.newConnector = deepMerge(\n                this.newConnector,\n            {\n                target: {\n                    top: position.top + ev.offsetY,\n                    left: position.left + ev.offsetX,\n                },\n            });\n            this.render();\n        }\n    }\n\n    /**\n     * Handler for the ConnectorContainer's parent mouseup event. This handle is responsible of triggering either the\n     * connector-creation-done or connector-creation-abort (depending on whether the event target matches the\n     * targetQuerySelector) if a connector creation has started.\n     *\n     * @param {MouseEvent} ev\n     * @private\n     */\n    _onParentMouseUp(ev) {\n        if (this.mouseEventsInfo.isParentDragging === true) {\n            ev.stopPropagation();\n            ev.preventDefault();\n            const connector_target = ev.target.closest(this.props.targetQuerySelector || this.props.sourceQuerySelector);\n            if (connector_target) {\n                this.newConnector = deepMerge(\n                    this.newConnector,\n                    {\n                        data: {\n                            targetElement: connector_target,\n                        },\n                    });\n                this.trigger('connector-creation-done', deepMerge({ }, this.newConnector));\n            } else {\n                this.trigger('connector-creation-abort', deepMerge({ }, this.newConnector));\n            }\n            this.mouseEventsInfo.isParentDragging = false;\n            delete this.newConnector.source;\n            delete this.newConnector.target;\n            this.render();\n        }\n    }\n\n    /**\n     * Handler for the connector_manager svg mouseout event. Its purpose is to handle the hover state of the connectors.\n     * It has been implemented here in order to manage it globally instead of in each connector (and thus limiting\n     * the number of listeners).\n     *\n     * @param {OwlEvent} ev\n     * @private\n     */\n    _onMouseOut(ev) {\n        ev.stopPropagation();\n        if (!('hoveredConnector' in this.mouseEventsInfo)) {\n            // If hoverConnector is not set this means were not in a connector. So ignore it.\n            return;\n        }\n        let relatedTarget = ev.relatedTarget;\n        while (relatedTarget) {\n            // Go up the parent chain\n            if (relatedTarget === this.mouseEventsInfo.hoveredConnector) {\n                // Check that we are still inside hoveredConnector.\n                // If so it means it is a transition between child elements so ignore it.\n                return;\n            }\n            relatedTarget = relatedTarget.parentElement;\n        }\n        this._updateConnectorHoverState(this.mouseEventsInfo.hoveredConnector.dataset.id, false);\n        this.trigger('connector-mouseout', this.connectors[this.mouseEventsInfo.hoveredConnector.dataset.id]);\n        delete this.mouseEventsInfo.hoveredConnector;\n    }\n\n    /**\n     * Handler for the connector_manager svg mouseover event. Its purpose is to handle the hover state of the connectors.\n     * It has been implemented here in order to manage it globally instead of in each connector (and thus limiting\n     * the number of listeners).\n     *\n     * @param {OwlEvent} ev\n     * @private\n     */\n    _onMouseOver(ev) {\n        ev.stopPropagation();\n        if ('hoveredConnector' in this.mouseEventsInfo) {\n            // As mouseout is call prior to mouseover, if hoveredConnector is set this means\n            // that we haven't left it. So it's a mouseover inside it.\n            return;\n        }\n        let target = ev.target.closest('.o_connector');\n        if (!target) {\n            // We are not into a connector si ignore.\n            return;\n        }\n        if (!(target.dataset.id in this.connectors) || Object.is(this.connectors[target.dataset.id], this.newConnector)) {\n            // We ensure that the connector to hover is not this.newConnector\n            return;\n        }\n        this.mouseEventsInfo.hoveredConnector = target;\n        this._updateConnectorHoverState(target.dataset.id, true);\n        this.trigger('connector-mouseover', this.connectors[target.dataset.id]);\n    }\n\n}\n\nObject.assign(ConnectorContainer, {\n    components: { Connector },\n    props: {\n        connectors: { type: Object },\n        defaultStyle: Connector.props.style,\n        hoverEaseWidth: {\n            optional: true,\n            type: Number,\n        },\n        newConnectorStyle: Connector.props.style,\n        preventHoverEffect: {\n            optional: true,\n            type: Boolean\n        },\n        sourceQuerySelector: { type: String },\n        targetQuerySelector: {\n            optional: true,\n            type: String,\n        },\n    },\n    style: STYLE,\n    template: 'connector_container',\n});\n\nexport default ConnectorContainer;\n", "/** @odoo-module **/\n\n\n// -----------------------------------------------------------------------------\n// Private\n// -----------------------------------------------------------------------------\n\n/**\n * Clones the value according to its type and returns it.\n *\n * @param value\n * @return {Object|Array|*} The cloned value.\n * @private\n */\nfunction _clone(value) {\n    if (_isPlainObject(value) || Array.isArray(value)) {\n        return deepMerge(_getEmptyTarget(value), value);\n    } else {\n        return value;\n    }\n}\n\n/**\n * Gets an empty value according to value's type.\n *\n * @param {Object | Array} value\n * @return {Object | Array} an empty Array or Object.\n * @private\n */\nfunction _getEmptyTarget(value) {\n    return Array.isArray(value) ? [] : { };\n}\n\n/**\n * Returns whether the provided argument is a plain object or not.\n *\n * @param {*} value\n * @returns {boolean} true if the provided argument is a plain object, false if not.\n */\nfunction _isPlainObject(value) {\n    if (typeof value == 'object' && value !== null) {\n        const proto = Object.getPrototypeOf(value);\n        return proto === Object.prototype || proto === null;\n    }\n    return false;\n}\n\n/**\n * Deep merges target and source arrays and returns the result.\n *\n * @param {Array} target\n * @param {Array} source\n * @return {Array} the result of the merge.\n * @private\n */\nfunction _deepMergeArray(target, source) {\n    return target.concat(source)\n                 .map((entry) => _clone(entry));\n}\n\n/**\n * Deep merges target and source Objects and returns the result\n *\n * @param {Object} target\n * @param {Object} source\n * @return {Object} the result of the merge.\n */\nfunction _mergeObject(target, source) {\n    const destination = { };\n    if (_isPlainObject(target)) {\n        Object.keys(target).forEach((key) => {\n            destination[key] = _clone(target[key]);\n        });\n    }\n    Object.keys(source).forEach((key) => {\n        if ((_isPlainObject(target) && key in target) && _isPlainObject(source[key])) {\n            destination[key] = deepMerge(target[key], source[key]);\n        } else {\n            destination[key] = _clone(source[key]);\n        }\n    });\n    return destination;\n}\n\n// -----------------------------------------------------------------------------\n// Public\n// -----------------------------------------------------------------------------\n\n/**\n * Deep merges target and source and returns the result.\n * This implementation has been added since vanilla JS is now preferred.\n * A deep copy is made of all the plain objects and arrays.\n * For the other type of objects (like HTMLElement, etc.), the reference is passed.\n *\n * @param {Object | Array} target\n * @param {Object | Array} [source] if source is undefined, target wil be set to an empty value of source type.\n * @returns {Object | Array} the result of the merge.\n */\nexport function deepMerge(target, source) {\n    if (typeof source === 'undefined') {\n        source = _getEmptyTarget(source);\n    }\n\n    const isSourceAnArray = Array.isArray(source);\n    const isTargetAnArray = Array.isArray(target);\n\n    if (isSourceAnArray !== isTargetAnArray) {\n        return _clone(source);\n    } else if (isSourceAnArray) {\n        return _deepMergeArray(target, source);\n    } else {\n        return _mergeObject(target, source);\n    }\n}\n\n/**\n * Deep merges all the entries from the passed array and returns the result.\n *\n * @param {Array} array the elements to be merged together.\n * @return {Object | Array} the result of the merge.\n */\nexport function deepMergeAll(array) {\n    if (!Array.isArray(array)) {\n        throw new Error('deepmergeAll argument must be an Array.');\n    }\n    return array.reduce((accumulator, current) => deepMerge(accumulator, current), { });\n}\n", "/** @odoo-module **/\n\nimport MapView from 'web_map.MapView';\nimport { ProjectControlPanel } from '@project/js/project_control_panel';\nimport viewRegistry from 'web.view_registry';\n\nexport const ProjectMapView = MapView.extend({\n    config: Object.assign({}, MapView.prototype.config, {\n        ControlPanel: ProjectControlPanel,\n    }),\n});\n\nviewRegistry.add('project_map', ProjectMapView);\n", "/** @odoo-module **/\n\nimport config from 'web.config';\nimport { patch } from 'web.utils';\nimport { RightPanelControllerMixin } from '@project/js/right_panel/project_right_panel_mixin';\nimport ProjectRightPanel from '@project/js/right_panel/project_right_panel';\nconst { useState } = owl.hooks;\n\nif (config.device.isMobile) {\n    patch(RightPanelControllerMixin, 'project_enterprise.project_right_panel_mixin', {\n        rightPanelPosition: 'first-child',\n    });\n\n    patch(ProjectRightPanel.prototype, 'project_enterprise.ProjectRightPanel', {\n        setup() {\n            this._super(...arguments);\n            this.section = useState({\n                sold: {\n                    closed: true,\n                },\n                total_sold: {\n                    closed: true,\n                },\n                milestone: {\n                    closed: true,\n                }\n            });\n        },\n        _onClickSection(event) {\n            const sectionName = $(event.target).closest(\".o_rightpanel_section\").attr(\"name\");\n            this.section[sectionName].closed = !this.section[sectionName].closed;\n        },\n    });\n\n    patch(ProjectRightPanel, 'project_enterprise.ProjectRightPanel', {\n        template: 'project_enterprise.ProjectRightPanel',\n    });\n}\n", "/** @odoo-module **/\n\nimport TaskGanttController from '../task_gantt_controller';\n\n\nconst TaskGanttConnectorController = TaskGanttController.extend({\n    custom_events: Object.assign(\n        { },\n        TaskGanttController.prototype.custom_events,\n        {\n            display_milestone_popover: '_onDisplayMilestonePopover',\n            on_remove_connector: '_onRemoveConnector',\n            on_reschedule_task: '_onRescheduleTask',\n            on_create_connector: '_onCreateConnector',\n            on_pill_highlight: '_onPillHighlight',\n            on_connector_highlight: '_onConnectorHighlight',\n            on_connector_start_drag: '_onConnectorStartDrag',\n            on_connector_end_drag: '_onConnectorEndDrag',\n        }),\n\n    //--------------------------------------------------------------------------\n    // Life Cycle\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     */\n    init: function () {\n        this._super(...arguments);\n        this._draggingConnector = false;\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     * @param {OdooEvent} ev\n     * @private\n     */\n    _onDisplayMilestonePopover: function (ev) {\n        Object.assign(\n            ev.data.popoverData,\n            {\n                display_project_name: !!this.context.search_default_my_tasks,\n            });\n        this.renderer.display_milestone_popover(ev.data.popoverData, ev.data.targetElement);\n    },\n    /**\n     * @override\n     * @param {OdooEvent} ev\n     * @private\n     */\n    _onPillUpdatingStarted: function (ev) {\n        this._super(...arguments);\n        this.renderer.togglePreventConnectorsHoverEffect(true);\n    },\n    /**\n     * @override\n     * @param {OdooEvent} ev\n     * @private\n     */\n    _onPillUpdatingStopped: function (ev) {\n        this._super(...arguments);\n        this.renderer.togglePreventConnectorsHoverEffect(false);\n    },\n    /**\n     * Handler for renderer on-connector-end-drag event.\n     *\n     * @param {OdooEvent} ev\n     * @private\n     */\n    _onConnectorEndDrag(ev) {\n        ev.stopPropagation();\n        this._draggingConnector = false;\n        this.renderer.set_connector_creation_mode(this._draggingConnector);\n    },\n    /**\n     * Handler for renderer on-connector-highlight event.\n     *\n     * @param {OdooEvent} ev\n     * @private\n     */\n    _onConnectorHighlight(ev) {\n        ev.stopPropagation();\n        if (!this._updating && !this._draggingConnector) {\n            this.renderer.toggleConnectorHighlighting(ev.data.connector, ev.data.highlighted);\n        }\n    },\n    /**\n     * Handler for renderer on-connector-start-drag event.\n     *\n     * @param {OdooEvent} ev\n     * @private\n     */\n    _onConnectorStartDrag(ev) {\n        ev.stopPropagation();\n        this._draggingConnector = true;\n        this.renderer.set_connector_creation_mode(this._draggingConnector);\n    },\n    /**\n     * Handler for renderer on-create-connector event.\n     *\n     * @param {OdooEvent} ev\n     * @returns {Promise<*>}\n     * @private\n     */\n    async _onCreateConnector(ev) {\n        ev.stopPropagation();\n        await this.model.createDependency(ev.data.masterTaskId, ev.data.slaveTaskId);\n        await this.reload();\n    },\n    /**\n     * Handler for renderer on-connector-end-drag event.\n     *\n     * @param {OdooEvent} ev\n     * @private\n     */\n    async _onPillHighlight(ev) {\n        ev.stopPropagation();\n        if (!this._updating || !ev.data.highlighted) {\n            await this.renderer.togglePillHighlighting(ev.data.element, ev.data.highlighted);\n        }\n    },\n    /**\n     * Handler for renderer on-remove-connector event.\n     *\n     * @param {OdooEvent} ev\n     * @private\n     */\n    async _onRemoveConnector(ev) {\n        ev.stopPropagation();\n        await this.model.removeDependency(ev.data.masterTaskId, ev.data.slaveTaskId);\n        await this.reload();\n    },\n    /**\n     * Handler for renderer on-reschedule-task event.\n     *\n     * @param {OdooEvent} ev\n     * @private\n     */\n    async _onRescheduleTask(ev) {\n        ev.stopPropagation();\n        const result = await this.model.rescheduleTask(ev.data.direction, ev.data.masterTaskId, ev.data.slaveTaskId);\n        if (result.type !== 'ir.actions.client') {\n            await this.reload();\n        } else {\n            this.do_action(result);\n        }\n    },\n});\n\nexport default TaskGanttConnectorController;\n", "/** @odoo-module **/\n\nimport { Commands } from '@web/core/orm_service';\nimport TaskGanttModel from '../task_gantt_model';\n\n\nconst TaskGanttConnectorModel = TaskGanttModel.extend({\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Adds a task dependency between masterTaskId and slaveTaskId (slaveTaskId depends\n     * on masterTaskId).\n     *\n     * @param masterTaskId\n     * @param slaveTaskId\n     * @returns {Promise<*>}\n     */\n    async createDependency(masterTaskId, slaveTaskId) {\n        return this.mutex.exec(() => {\n            return this._rpc({\n                model: 'project.task',\n                method: 'write',\n                args: [[slaveTaskId], {depend_on_ids: [Commands.linkTo(masterTaskId)]}],\n            });\n        });\n    },\n    /**\n     * Removes the task dependency between masterTaskId and slaveTaskId (slaveTaskId is no\n     * more dependent on masterTaskId).\n     *\n     * @param masterTaskId\n     * @param slaveTaskId\n     * @returns {Promise<*>}\n     */\n    async removeDependency(masterTaskId, slaveTaskId) {\n        return this.mutex.exec(() => {\n            return this._rpc({\n                model: 'project.task',\n                method: 'write',\n                args: [[slaveTaskId], {depend_on_ids: [Commands.forget(masterTaskId)]}],\n            });\n        });\n    },\n    async rescheduleTask(direction, masterTaskId, slaveTaskId) {\n        return this.mutex.exec(() => {\n            return this._rpc({\n                model: 'project.task',\n                method: 'action_reschedule',\n                args: [direction, masterTaskId, slaveTaskId],\n            });\n        });\n    }\n});\n\nexport default TaskGanttConnectorModel;\n", "/** @odoo-module **/\n\nimport ConnectorContainer from '../connector/connector_container';\nimport { device } from 'web.config';\nimport { ComponentWrapper, WidgetAdapterMixin } from 'web.OwlCompatibility';\nimport TaskGanttRenderer from '../task_gantt_renderer';\nimport TaskGanttConnectorRow from \"./task_gantt_connector_row\";\n\n\nconst TaskGanttConnectorRenderer = TaskGanttRenderer.extend(WidgetAdapterMixin, {\n    config: {\n        GanttRow: TaskGanttConnectorRow,\n    },\n    custom_events: Object.assign({ }, TaskGanttRenderer.prototype.custom_events || { }, {\n        connector_creation_abort: '_onConnectorCreationAbort',\n        connector_creation_done: '_onConnectorCreationDone',\n        connector_creation_start: '_onConnectorCreationStart',\n        connector_mouseout: '_onConnectorMouseOut',\n        connector_mouseover: '_onConnectorMouseOver',\n        connector_remove_button_click: '_onConnectorRemoveButtonClick',\n        connector_reschedule_later_button_click: 'onConnectorRescheduleLaterButtonClick',\n        connector_reschedule_sooner_button_click: 'onConnectorRescheduleSoonerButtonClick',\n    }),\n    events: Object.assign({ }, TaskGanttRenderer.prototype.events || { }, {\n        'mouseenter .o_gantt_pill, .o_connector_creator_wrapper': '_onPillMouseEnter',\n        'mouseleave .o_gantt_pill, .o_connector_creator_wrapper': '_onPillMouseLeave',\n    }),\n\n    //--------------------------------------------------------------------------\n    // Life Cycle\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n    */\n    init() {\n        this._super(...arguments);\n        this._connectors = { };\n        this._preventHoverEffect = false;\n        this._connectorsStrokeColors = this._getStrokeColors();\n        this._connectorsStrokeWarningColors = this._getStrokeWarningColors();\n        this._connectorsStrokeErrorColors = this._getStrokeErrorColors();\n        this._connectorsOutlineStrokeColor = this._getOutlineStrokeColors();\n        this._connectorsCssSelectors = {\n            bullet: '.o_connector_creator_bullet',\n            pill: '.o_gantt_pill',\n            pillWrapper: '.o_gantt_pill_wrapper',\n            wrapper: '.o_connector_creator_wrapper',\n            groupByNoGroup: '.o_gantt_row_nogroup',\n        };\n    },\n    /**\n     * @override\n    */\n    destroy() {\n        this._super(...arguments);\n        window.removeEventListener('resize', this._throttledReRender);\n    },\n    /**\n     * @override\n    */\n    on_attach_callback() {\n        this._super(...arguments);\n        // As we needs the source and target of the connectors to be part of the dom,\n        // we need to use the on_attach_callback in order to have the first rendering successful.\n        this._mountConnectorContainer();\n        window.addEventListener('resize', this._throttledReRender);\n    },\n    /**\n     * @override\n    */\n    async start() {\n        await this._super(...arguments);\n        this._connectorContainerComponent = new ComponentWrapper(this, ConnectorContainer, this._getConnectorContainerProps());\n        this._throttledReRender = _.throttle(async () => {\n            if (this._shouldRenderConnectors()) {\n                await this._connectorContainerComponent.update(this._generateAndGetConnectorContainerProps());\n            }\n        }, 100);\n    },\n    /**\n      * Make sure the connectorManager Component is updated each time the view is updated.\n      *\n      * @override\n      */\n    async update() {\n        if (this._shouldRenderConnectors()) {\n            await this._connectorContainerComponent.update(this._generateAndGetConnectorContainerProps());\n        }\n        await this._super(...arguments);\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Updates the connectors state in regards to the records state and returns the props.\n     *\n     * @return {Object} the props to pass to the ConnectorContainer\n     * @private\n     */\n    _generateAndGetConnectorContainerProps() {\n        this._preventHoverEffect = false;\n        this._generateConnectors();\n        return this._getConnectorContainerProps();\n    },\n    /**\n     * Updates the connectors state in regards to the records state.\n     *\n     * @private\n     */\n    _generateConnectors() {\n        /*\n            First we need to build a dictionary in order to be able to manage the cases when a task is present\n            multiple times in the gantt view, in order to draw the connectors accordingly.\n            Structure of dict:\n            {\n                records : {\n                    #ID_RECORD_1: {\n                        record: STATE_RECORD,\n                        rowsInfo: {\n                            #ID_ROW_1: {\n                                pillElement: HTMLElementPill1,\n                            },\n                            ...\n                        }\n                    },\n                    ...\n                },\n                rows: {\n                    #ID_ROW_1: {\n                        records: {\n                            #ID_RECORD_1: {\n                                pillElement: HTMLElementPill1,\n                                record: STATE_RECORD\n                            },\n                            ...\n                        }\n                    },\n                    ...\n                },\n            }\n        */\n        this._rowsAndRecordsDict = {\n            records: { },\n            rows: { },\n        };\n        for (const row of this.state.rows) {\n            // We need to escape '\"' & '\\' from the row.id before calling the querySelector\n            const rowElementSelector = `${this._connectorsCssSelectors.groupByNoGroup}[data-row-id=\"${row.id.replace(/[\"\\\\]/g, '\\\\$&')}\"]`;\n            const rowElement = this.el.querySelector(rowElementSelector);\n            this._rowsAndRecordsDict.rows[row.id] = {\n                records: { }\n            };\n            for (const record of row.records) {\n                const recordElementSelector = `${this._connectorsCssSelectors.pill}[data-id=\"${record.id}\"]`;\n                const pillElement = rowElement.querySelector(recordElementSelector);\n                this._rowsAndRecordsDict.rows[row.id].records[record.id] = {\n                    pillElement: pillElement,\n                    record: record,\n                };\n                if (!(record.id in this._rowsAndRecordsDict.records)) {\n                    this._rowsAndRecordsDict.records[record.id] = {\n                        record: record,\n                        rowsInfo: { },\n                    };\n                }\n                this._rowsAndRecordsDict.records[record.id].rowsInfo[row.id] = {\n                    pillElement: pillElement,\n                };\n            }\n        }\n\n        // Then we go over the rows and records one by one in order to create the connectors\n        const connector_id_generator = {\n            _value: 1,\n            getNext() {\n                return this._value++;\n            }\n        };\n        this._connectors = { };\n        for (const record of this.state.records) {\n            const taskConnectors = this._generateConnectorsForTask(record, connector_id_generator);\n            Object.assign(this._connectors, taskConnectors);\n        }\n    },\n    /**\n     * Generates the connectors (from depend_on_ids tasks to the task) for the provided task.\n     *\n     * @param {Object} task task record.\n     * @param {{ getNext(): Number }} connector_id_generator a connector_id generator.\n     * @private\n     */\n    _generateConnectorsForTask(task, connector_id_generator) {\n        const result = {};\n        for (const masterTaskId of task.depend_on_ids) {\n            if (masterTaskId in this._rowsAndRecordsDict.records) {\n                let connectors = [];\n                for (const taskRowId in this._rowsAndRecordsDict.records[task.id].rowsInfo) {\n                    for (const masterTaskRowId in this._rowsAndRecordsDict.records[masterTaskId].rowsInfo) {\n                        /**\n                         *   Having:\n                         *      * B dependent on A\n                         *      * C dependent on B\n                         *      * D dependent on C\n                         *   Prevent:\n                         *      * Connectors between B & C that are not in the same group if B is in same group than C:\n                         *          G1        B --- C                  B --- C\n                         *                  /   \\ /   \\              /         \\\n                         *          G2    A             D    =>    A             D\n                         *                  \\   / \\   /              \\         /\n                         *          G3        B --- C                  B --- C\n                         *      * Connectors between A & B if A has already a link to B in the same group:\n                         *          G1        --------- B              --------- B\n                         *                  /       /                /\n                         *          G2    A      /           =>    A\n                         *                    /\n                         *          G3    A ----------- B          A ----------- B\n                         *   Allow:\n                         *      * Connectors between C & B when A & B are always present in the same groups\n                         *          G1    A ------ B          A ------ B\n                         *                                           /\n                         *          G2    A               =>  A ====\n                         *                                           \\\n                         *          G3    A ------ B          A ------ B\n                         */\n                        if (masterTaskRowId === taskRowId\n                            || !(\n                                task.id in this._rowsAndRecordsDict.rows[masterTaskRowId].records\n                                || masterTaskId in this._rowsAndRecordsDict.rows[taskRowId].records\n                            )\n                            || Object.keys(this._rowsAndRecordsDict.records[task.id].rowsInfo).every(\n                                (rowId) => (masterTaskRowId !== rowId && masterTaskId in this._rowsAndRecordsDict.rows[rowId].records)\n                            )\n                            || Object.keys(this._rowsAndRecordsDict.records[masterTaskId].rowsInfo).every(\n                                (rowId) => (taskRowId !== rowId && task.id in this._rowsAndRecordsDict.rows[rowId].records)\n                            )\n                        ) {\n                            connectors.push(\n                                this._generateConnector(\n                                    masterTaskRowId,\n                                    this._rowsAndRecordsDict.records[masterTaskId].record,\n                                    taskRowId,\n                                    task,\n                                    connector_id_generator)\n                            );\n                        }\n                    }\n                }\n                for (const connector of connectors) {\n                    result[connector.id] = connector;\n                }\n            }\n        }\n        return result;\n    },\n    /**\n     *\n     * @param masterTaskRowId the row id of the masterTask (in order to handle m2m grouping)\n     * @param masterTask a task record corresponding to the depend_on_id.\n     * @param taskRowId the row id of the task (in order to handle m2m grouping)\n     * @param task a task record.\n     * @param {{ getNext(): Number }} connector_id_generator a connector_id generator.\n     * @return {Object} a connector for the provided parameters.\n     * @private\n     */\n    _generateConnector(masterTaskRowId, masterTask, taskRowId, task, connector_id_generator) {\n        const masterTaskPill = this._rowsAndRecordsDict.rows[masterTaskRowId].records[masterTask.id].pillElement;\n        const taskPill = this._rowsAndRecordsDict.rows[taskRowId].records[task.id].pillElement;\n        let source = this._connectorContainerComponent.componentRef.comp.getAnchorsPositions(masterTaskPill);\n        let target = this._connectorContainerComponent.componentRef.comp.getAnchorsPositions(taskPill);\n\n        let connector = {\n            id: connector_id_generator.getNext(),\n            source: source.right,\n            canBeRemoved: true,\n            data: {\n                taskId: task.id,\n                taskRowId: taskRowId,\n                masterTaskId: masterTask.id,\n                masterTaskRowId: masterTaskRowId,\n            },\n            target: target.left,\n        };\n\n        let specialColors;\n        if (masterTask.display_warning_dependency_in_gantt &&\n            task.display_warning_dependency_in_gantt &&\n            task.planned_date_begin.isBefore(masterTask.planned_date_end)) {\n            specialColors = this._connectorsStrokeWarningColors;\n            if (task.planned_date_begin.isBefore(masterTask.planned_date_begin)) {\n                specialColors = this._connectorsStrokeErrorColors;\n            }\n        }\n        if (specialColors) {\n            connector['style'] = {\n                stroke: {\n                    color: specialColors.stroke,\n                    hoveredColor: specialColors.hoveredStroke,\n                }\n            };\n        }\n\n        return connector;\n    },\n    /**\n     * Gets the connector creator info for the provided element.\n     *\n     * @param {HTMLElement} element HTMLElement with a class of either o_connector_creator_bullet,\n     *                              o_connector_creator_wrapper, o_gantt_pill or o_gantt_pill_wrapper.\n     * @returns {{pillWrapper: HTMLElement, pill: HTMLElement, connectorCreators: Array<HTMLElement>}}\n     * @private\n     */\n    _getConnectorCreatorInfo(element) {\n        let connectorCreators = [];\n        let pill = null;\n        if (element.matches(this._connectorsCssSelectors.pillWrapper)) {\n            element = element.querySelector(this._connectorsCssSelectors.pill);\n        }\n        if (element.matches(this._connectorsCssSelectors.bullet)) {\n            element = element.closest(this._connectorsCssSelectors.wrapper);\n        }\n        if (element.matches(this._connectorsCssSelectors.pill)) {\n            pill = element;\n            connectorCreators = Array.from(element.parentElement.querySelectorAll(this._connectorsCssSelectors.wrapper));\n        } else if (element.matches(this._connectorsCssSelectors.wrapper)) {\n            connectorCreators = [element];\n            pill = element.parentElement.querySelector(this._connectorsCssSelectors.pill);\n        }\n        return {\n            pill: pill,\n            pillWrapper: pill.parentElement,\n            connectorCreators: connectorCreators,\n        };\n    },\n    /**\n     * Returns the props according to the current connectors state\n     *\n     * @returns {Object} the props to pass to the ConnectorContainer.\n     * @private\n     */\n    _getConnectorContainerProps() {\n        return {\n            connectors: this._connectors,\n            defaultStyle: {\n                slackness: 0.9,\n                stroke: {\n                    color: this._connectorsStrokeColors.stroke,\n                    hoveredColor: this._connectorsStrokeColors.hoveredStroke,\n                    width: 2,\n                },\n                outlineStroke: {\n                    color: this._connectorsOutlineStrokeColor.stroke,\n                    hoveredColor: this._connectorsOutlineStrokeColor.hoveredStroke,\n                    width: 1,\n                }\n            },\n            hoverEaseWidth: 10,\n            preventHoverEffect: this._preventHoverEffect,\n            sourceQuerySelector: this._connectorsCssSelectors.bullet,\n            targetQuerySelector: this._connectorsCssSelectors.pillWrapper,\n        };\n    },\n    /**\n     * Gets the rgba css string corresponding to the provided parameters.\n     *\n     * @param {number} r - [0, 255]\n     * @param {number} g - [0, 255]\n     * @param {number} b - [0, 255]\n     * @param {number} [a = 1] - [0, 1]\n     * @return {string} the css color.\n     * @private\n     */\n    _getCssRGBAColor(r, g, b, a) {\n        return `rgba(${ r }, ${ g }, ${ b }, ${ a || 1 })`;\n    },\n    /**\n     * Gets the outline stroke's rgba css strings for both the stroke and its hovered state in error state.\n     *\n     * @return {{ stroke: {string}, hoveredStroke: {string} }}\n     * @private\n     */\n    _getOutlineStrokeColors() {\n        return this._getStrokeAndHoveredStrokeColor(255, 255, 255);\n    },\n    /**\n     * Returns the HTMLElement wrapped set for the provided taskId.\n     *\n     * @param {number} taskId\n     * @returns {HTMLElement}\n     * @private\n     */\n    _getPillForTaskId(taskId) {\n        return this.el.querySelector(`${this._connectorsCssSelectors.pill}[data-id=\"${taskId}\"]`);\n    },\n    /**\n     * Returns the record corresponding to the taskId.\n     *\n     * @param taskId\n     * @returns {Object}\n     * @private\n     */\n    _getRecordForTaskId(taskId) {\n        return this._rowsAndRecordsDict.records[taskId];\n    },\n    /**\n     * Gets the stroke's rgba css string corresponding to the provided parameters for both the stroke and its\n     * hovered state.\n     *\n     * @param {number} r - [0, 255]\n     * @param {number} g - [0, 255]\n     * @param {number} b - [0, 255]\n     * @return {{ stroke: {string}, hoveredStroke: {string} }} the css colors.\n     * @private\n     */\n    _getStrokeAndHoveredStrokeColor(r, g, b) {\n        return {\n            stroke: this._getCssRGBAColor(r, g, b, 0.5),\n            hoveredStroke: this._getCssRGBAColor(r, g, b, 1),\n        };\n    },\n    /**\n     * Gets the stroke's rgba css strings for both the stroke and its hovered state.\n     *\n     * @return {{ stroke: {string}, hoveredStroke: {string} }}\n     * @private\n     */\n    _getStrokeColors() {\n        return this._getStrokeAndHoveredStrokeColor(143, 143, 143);\n    },\n    /**\n     * Gets the stroke's rgba css strings for both the stroke and its hovered state in error state.\n     *\n     * @return {{ stroke: {string}, hoveredStroke: {string} }}\n     * @private\n     */\n    _getStrokeErrorColors() {\n        return this._getStrokeAndHoveredStrokeColor(211, 65, 59);\n    },\n    /**\n     * Gets the stroke's rgba css strings for both the stroke and its hovered state in warning state.\n     *\n     * @return {{ stroke: {string}, hoveredStroke: {string} }}\n     * @private\n     */\n    _getStrokeWarningColors() {\n        return this._getStrokeAndHoveredStrokeColor(236, 151, 31);\n    },\n    /**\n     * Gets whether the provided connector creator is the source element of the currently dragged connector.\n     *\n     * @param {{pill: HTMLElement, connectorCreators: Array<HTMLElement>}} connectorCreatorInfo\n     * @returns {boolean}\n     * @private\n     */\n    _isConnectorCreatorDragged(connectorCreatorInfo) {\n        return this._connectorInCreation && this._connectorInCreation.data.sourceElement.dataset.id === connectorCreatorInfo.pill.dataset.id;\n    },\n    /**\n     * @override\n     * @private\n     */\n    async _render() {\n        await this._super(...arguments);\n        if (this._isInDom) {\n            // If the renderer is not yet part of the dom (during first rendering), then\n            // the call will be performed in the on_attach_callback.\n            await this._mountConnectorContainer();\n        }\n    },\n    async _mountConnectorContainer() {\n        if (this._shouldRenderConnectors()) {\n            this.el.classList.toggle('position-relative', true);\n            await this._connectorContainerComponent.mount(this.el);\n            await this._connectorContainerComponent.update(this._generateAndGetConnectorContainerProps());\n        }\n    },\n    /**\n     * Returns whether should be rendered or not.\n     * The connectors won't be rendered on sampleData as we can't be sure that data are coherent.\n     * The connectors won't be rendered on mobile as the usability is not guarantied.\n     * The connectors won't be rendered on multiple groupBy as we would need to manage groups folding which seems\n     *     overkill at this stage.\n     *\n     * @return {boolean}\n     * @private\n     */\n    _shouldRenderConnectors() {\n        return this._isInDom && !this.state.isSample && !device.isMobile && this.state.groupedBy.length <= 1;\n    },\n    /**\n     * Toggles popover visibility.\n     *\n     * @param visible\n     * @private\n     */\n    _togglePopoverVisibility(visible) {\n        const $pills = this.$(this._connectorsCssSelectors.pill);\n        if (visible) {\n            $pills.popover('enable').popover('dispose');\n        } else {\n            $pills.popover('hide').popover('disable');\n        }\n    },\n    /**\n     * Triggers the on_connector_highlight at the Controller.\n     *\n     * @param {ConnectorContainer.Connector.props} connector\n     * @param {boolean} highlighted\n     * @private\n     */\n    _triggerConnectorHighlighting(connector, highlighted) {\n        this.trigger_up(\n            'on_connector_highlight',\n            {\n                connector: connector,\n                highlighted: highlighted,\n            });\n    },\n    /**\n     * Triggers the on_pill_highlight at the Controller.\n     *\n     * @param {HTMLElement} element\n     * @param {boolean} highlighted\n     * @private\n     */\n    _triggerPillHighlighting(element, highlighted) {\n        this.trigger_up(\n            'on_pill_highlight',\n            {\n                element: element,\n                highlighted: highlighted,\n            });\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Sets the class on the gantt_view corresponding to the mode.\n     * This class is used to prevent the magnifier and + buttons during connection creation.\n     *\n     * @param {boolean} in_creation\n     */\n    set_connector_creation_mode(in_creation) {\n        this.el.classList.toggle('o_grabbing', in_creation);\n    },\n    /**\n     * Toggles the highlighting of the connector.\n     *\n     * @param {ConnectorContainer.Connector.props} connector\n     * @param {boolean} highlighted\n     */\n    toggleConnectorHighlighting(connector, highlighted) {\n        const masterTaskPill = this._rowsAndRecordsDict.rows[connector.data.masterTaskRowId].records[connector.data.masterTaskId].pillElement;\n        const taskPill = this._rowsAndRecordsDict.rows[connector.data.taskRowId].records[connector.data.taskId].pillElement;\n        const sourceConnectorCreatorInfo = this._getConnectorCreatorInfo(masterTaskPill);\n        const targetConnectorCreatorInfo = this._getConnectorCreatorInfo(taskPill);\n        if (!this._isConnectorCreatorDragged(sourceConnectorCreatorInfo)) {\n            sourceConnectorCreatorInfo.pill.classList.toggle('highlight', highlighted);\n        }\n        if (!this._isConnectorCreatorDragged(targetConnectorCreatorInfo)) {\n            targetConnectorCreatorInfo.pill.classList.toggle('highlight', highlighted);\n        }\n    },\n    /**\n     * Toggles the preventConnectorsHover props of the connector container.\n     *\n     * @param {boolean} prevent\n     */\n    togglePreventConnectorsHoverEffect(prevent){\n        this._preventHoverEffect = prevent;\n        this._connectorContainerComponent.update(this._getConnectorContainerProps());\n    },\n    /**\n     * Toggles the highlighting of the pill and connector creator of the provided element.\n     *\n     * @param {HTMLElement} element\n     * @param {boolean} highlighted\n     */\n    async togglePillHighlighting(element, highlighted) {\n        const connectorCreatorInfo = this._getConnectorCreatorInfo(element);\n        if (connectorCreatorInfo.pill.dataset.id != 0) {\n            const connectedConnectors = Object.values(this._connectors)\n                                              .filter((connector) => {\n                                                  const ids = [connector.data.taskId, connector.data.masterTaskId];\n                                                  return ids.includes(\n                                                      parseInt(connectorCreatorInfo.pill.dataset.id)\n                                                  );\n                                              });\n            if (connectedConnectors.length) {\n                connectedConnectors.forEach((connector) => {\n                    connector.hovered = highlighted;\n                    connector.canBeRemoved = !highlighted;\n                });\n                await this._connectorContainerComponent.update(this._getConnectorContainerProps());\n            }\n            // Check if connector should be rendered\n            if (!(this._rowsAndRecordsDict && this._shouldRenderConnectors())) return\n            for (const pill of Object.values(this._rowsAndRecordsDict.records[connectorCreatorInfo.pill.dataset.id].rowsInfo).map((rowInfo) => rowInfo.pillElement)) {\n                const tempConnectorCreatorInfo = this._getConnectorCreatorInfo(pill);\n                if (highlighted || !this._isConnectorCreatorDragged(tempConnectorCreatorInfo)) {\n                    tempConnectorCreatorInfo.pill.classList.toggle('highlight', highlighted);\n                    if (connectorCreatorInfo.pill === tempConnectorCreatorInfo.pill) {\n                        for (let connectorCreator of tempConnectorCreatorInfo.connectorCreators) {\n                            connectorCreator.classList.toggle('invisible', !highlighted);\n                        }\n                    }\n                }\n            }\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Handler for Connector connector-creation-abort event.\n     *\n     * @param {OdooEvent} ev\n     * @private\n     */\n    async _onConnectorCreationAbort(ev) {\n        ev.stopPropagation();\n        this._connectorInCreation = null;\n        const connectorCreatorInfo = this._getConnectorCreatorInfo(ev.data.data.sourceElement);\n        this._triggerPillHighlighting(connectorCreatorInfo.pill, false);\n        this.trigger_up('on_connector_end_drag');\n        this._togglePopoverVisibility(true);\n    },\n    /**\n     * Handler for Connector connector-creation-done event.\n     *\n     * @param {OdooEvent} ev\n     * @private\n     */\n    async _onConnectorCreationDone(ev) {\n        ev.stopPropagation();\n        this._connectorInCreation = null;\n        const connectorSourceCreatorInfo = this._getConnectorCreatorInfo(ev.data.data.sourceElement);\n        const connectorTargetCreatorInfo = this._getConnectorCreatorInfo(ev.data.data.targetElement);\n        this.trigger_up('on_connector_end_drag');\n        this.trigger_up(\n            'on_create_connector',\n            {\n                masterTaskId: parseInt(connectorSourceCreatorInfo.pill.dataset.id),\n                slaveTaskId: parseInt(connectorTargetCreatorInfo.pill.dataset.id),\n            });\n        this._togglePopoverVisibility(true);\n    },\n    /**\n     * Handler for Connector connector-creation-start event.\n     *\n     * @param {OdooEvent} ev\n     * @private\n     */\n    async _onConnectorCreationStart(ev) {\n        ev.stopPropagation();\n        this._connectorInCreation = ev.data;\n        this._togglePopoverVisibility(false);\n        const connectorCreatorInfo = this._getConnectorCreatorInfo(ev.data.data.sourceElement);\n        this._triggerPillHighlighting(connectorCreatorInfo.pill, false);\n        this.trigger_up('on_connector_start_drag');\n    },\n    /**\n     * Handler for Connector connector-mouseout event.\n     *\n     * @param {OdooEvent} ev\n     * @private\n     */\n    async _onConnectorMouseOut(ev) {\n        ev.stopPropagation();\n        this._triggerConnectorHighlighting(ev.data, false);\n    },\n    /**\n     * Handler for Connector connector-mouseover event.\n     *\n     * @param {OdooEvent} ev\n     * @private\n     */\n    async _onConnectorMouseOver(ev) {\n        ev.stopPropagation();\n        this._triggerConnectorHighlighting(ev.data, true);\n    },\n    /**\n     * Handler for Connector connector-remove-button-click event.\n     *\n     * @param {OdooEvent} ev\n     * @private\n     */\n    async _onConnectorRemoveButtonClick(ev) {\n        ev.stopPropagation();\n        const payload = ev.data;\n        this.trigger_up(\n        'on_remove_connector',\n        {\n            masterTaskId: payload.data.masterTaskId,\n            slaveTaskId: payload.data.taskId,\n        });\n    },\n    /**\n     * Handler for Connector connector_reschedule_later_button_click event.\n     *\n     * @param {OdooEvent} ev\n     * @private\n     */\n    onConnectorRescheduleLaterButtonClick(ev) {\n        ev.stopPropagation();\n        const payload = ev.data;\n        this.trigger_up(\n        'on_reschedule_task',\n        {\n            direction: 'forward',\n            masterTaskId: payload.data.masterTaskId,\n            slaveTaskId: payload.data.taskId,\n        });\n    },\n    /**\n     * Handler for Connector connector_reschedule_sooner_button_click event.\n     *\n     * @param {OdooEvent} ev\n     * @private\n     */\n    onConnectorRescheduleSoonerButtonClick(ev) {\n        ev.stopPropagation();\n        const payload = ev.data;\n        this.trigger_up(\n        'on_reschedule_task',\n        {\n            direction: 'backward',\n            masterTaskId: payload.data.masterTaskId,\n            slaveTaskId: payload.data.taskId,\n        });\n    },\n    /**\n     * Handler for Pill connector-mouseenter event.\n     *\n     * @param {OdooEvent} ev\n     * @private\n     */\n    async _onPillMouseEnter(ev) {\n        ev.stopPropagation();\n        this._triggerPillHighlighting(ev.currentTarget, true);\n    },\n    /**\n     * Handler for Pill connector-mouseleave event.\n     *\n     * @param {OdooEvent} ev\n     * @private\n     */\n    async _onPillMouseLeave(ev) {\n        ev.stopPropagation();\n        this._triggerPillHighlighting(ev.currentTarget, false);\n    },\n    /**\n     * @override\n     * @private\n     * @param {OdooEvent} event\n     */\n    async _onStartDragging(event) {\n        this._super(...arguments);\n        this._triggerPillHighlighting(this.$draggedPill.get(0), false);\n    }\n});\n\nexport default TaskGanttConnectorRenderer;\n", "/** @odoo-module **/\n\nimport TaskGanttRow from \"../task_gantt_row\";\n\n\nconst TaskGanttConnectorRow = TaskGanttRow.extend({\n    template: 'TaskGanttConnectorView.Row',\n});\n\nexport default TaskGanttConnectorRow;\n", "/** @odoo-module **/\n\nimport viewRegistry from 'web.view_registry';\nimport { TaskGanttView } from '../task_gantt_view';\nimport TaskGanttConnectorController from \"./task_gantt_connector_controller\";\nimport TaskGanttConnectorRenderer from \"./task_gantt_connector_renderer\";\nimport TaskGanttConnectorModel from \"./task_gantt_connector_model\";\n\nexport const TaskGanttConnectorView = TaskGanttView.extend({\n    config: Object.assign({}, TaskGanttView.prototype.config, {\n        Controller: TaskGanttConnectorController,\n        Renderer: TaskGanttConnectorRenderer,\n        Model: TaskGanttConnectorModel,\n    }),\n\n    //--------------------------------------------------------------------------\n    // Life Cycle\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     */\n    init: function (viewInfo, params) {\n        this._super.apply(this, arguments);\n        const taskDependenciesFields = ['allow_task_dependencies', 'depend_on_ids', 'display_warning_dependency_in_gantt', 'project_id'];\n        this.loadParams.decorationFields.push(...taskDependenciesFields);\n    }\n});\n\nviewRegistry.add('task_gantt_connector', TaskGanttConnectorView);\n", "/** @odoo-module **/\n\nimport GanttController from 'web_gantt.GanttController';\n\n\nconst TaskGanttController = GanttController.extend({\n    custom_events: Object.assign(\n        { },\n        GanttController.prototype.custom_events,\n        {\n            display_milestone_popover: '_onDisplayMilestonePopover',\n        }),\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     * @param {OdooEvent} ev\n     * @private\n     */\n    _onDisplayMilestonePopover: function (ev) {\n        ev.stopPropagation();\n        Object.assign(\n            ev.data.popoverData,\n            {\n                display_project_name: !!this.context.search_default_my_tasks,\n            });\n        this.renderer.display_milestone_popover(ev.data.popoverData, ev.data.targetElement);\n    },\n\n    //--------------------------------------------------------------------------\n    // Utils\n    //--------------------------------------------------------------------------\n    /**\n     * In the case of special Many2many Fields, like personal_stage_type_ids in project.task\n     * model, we don't want to write the many2many field but use the inverse method of the\n     * linked Many2one field, in this case the personal_stage_type_id, to create or update the\n     * record - here set the stage_id - in the personal_stage_type_ids.\n     *\n     * This is mandatory since the python ORM doesn't support the creation of\n     * a personnal stage from scratch. If this method is not overriden, then an entry\n     * will be inserted in the project_task_user_rel.\n     * One for the faked Many2many user_ids field (1), and a second one for the other faked\n     * Many2many personal_stage_type_ids field (2).\n     *\n     * While the first one meets the constraint on the project_task_user_rel, the second one\n     * fails because it specifies no user_id; It tries to insert (task_id, stage_id) into the\n     * relation.\n     *\n     * If we don't remove those key from the context, the ORM will face two problems :\n     * - It will try to insert 2 entries in the project_task_user_rel\n     * - It will try to insert an incorrect entry in the project_task_user_rel\n     *\n     * @private\n     * @override\n     */\n    _getDialogContext: function () {\n        const context = this._super.apply(this, arguments);\n        for (let mapping of this.model.mapMany2manyFields) {\n            if (mapping.many2many_field in context) {\n                context[mapping.many2one_field] = context[mapping.many2many_field][0];\n                delete context[mapping.many2many_field];\n            }\n        }\n        return context;\n    },\n});\n\nexport default TaskGanttController;\n", "/** @odoo-module **/\n\nimport { device } from 'web.config';\nimport { format } from 'web.field_utils';\nimport GanttModel from 'web_gantt.GanttModel';\nimport { _t } from 'web.core';\n\n\nconst TaskGanttModel = GanttModel.extend({\n    mapMany2manyFields: [{\n        many2many_field: 'personal_stage_type_ids',\n        many2one_field: 'personal_stage_type_id',\n    }],\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @override\n     */\n    _fetchData() {\n        const proms = [];\n        proms.push(this._super(...arguments));\n        proms.push(this._fetchMilestoneData());\n        return Promise.all(proms);\n    },\n    /**\n     * Retrieve the milestone data based on the task domain.\n     *\n     * @private\n     */\n    _fetchMilestoneData() {\n        this.ganttData.milestones = [];\n        if (this.isSampleModel || device.isMobile) {\n            return Promise.resolve();\n        }\n        return this._rpc({\n            model: 'project.milestone',\n            method: 'search_milestone_from_task',\n            kwargs: {\n                task_domain: this.domain,\n                milestone_domain: [\n                    ['deadline', '<=', this.convertToServerTime(this.ganttData.stopDate)],\n                    ['deadline', '>=', this.convertToServerTime(this.ganttData.startDate)],\n                ],\n                fields: ['name', 'deadline', 'is_deadline_exceeded', 'is_reached', 'project_id'],\n                order: 'project_id ASC, deadline ASC',\n            },\n        }).then((milestones) => {\n            this.ganttData.milestones = milestones.map(milestone => {\n                return Object.assign(\n                    milestone,\n                    {\n                        'deadlineUserFormatted': format.date(moment(milestone.deadline)),\n                        // Ensure milestones are displayed at the end of the period.\n                        'deadline': moment(milestone.deadline).clone().add(1, 'd').subtract(1, 'ms'),\n                    },\n                );\n            });\n        });\n    },\n    /**\n     * @private\n     * @override\n     */\n    _generateRows(params) {\n        const { groupedBy, groups, parentPath } = params;\n        if (groupedBy.length) {\n            const groupedByField = groupedBy[0];\n            if (groupedByField === 'user_ids') {\n                // Here we are generating some rows under a common \"parent\" (if any).\n                // We make sure that a row with resId = false for \"user_id\"\n                // ('Unassigned Tasks') and same \"parent\" will be added by adding\n                // a suitable fake group to groups (a subset of the groups returned\n                // by read_group).\n                const fakeGroup = Object.assign({}, ...parentPath);\n                groups.push(fakeGroup);\n            }\n        }\n        const rows = this._super(params);\n        // always move an empty row to the head\n        if (groupedBy && groupedBy.length && rows.length > 1 && rows[0].resId) {\n            this._reorderEmptyRow(rows);\n        }\n        return rows;\n    },\n    /**\n     * @private\n     * @override\n     */\n    _getRowName(groupedByField, value) {\n        if (groupedByField === \"user_ids\") {\n            const resId = Array.isArray(value) ? value[0] : value;\n            if (!resId) {\n                return _t(\"Unassigned Tasks\");\n            }\n        }\n        return this._super(...arguments);\n    },\n    /**\n     * Find an empty row and move it at the head of the array.\n     *\n     * @private\n     * @param {Object[]} rows\n     */\n    _reorderEmptyRow(rows) {\n        let emptyIndex = null;\n        for (let i = 0; i < rows.length; ++i) {\n            if (!rows[i].resId) {\n                emptyIndex = i;\n                break;\n            }\n        }\n        if (emptyIndex) {\n            const emptyRow = rows.splice(emptyIndex, 1)[0];\n            rows.unshift(emptyRow);\n        }\n    },\n    /**\n     * In the case of special Many2many Fields, like personal_stage_type_ids in project.task\n     * model, we don't want to write the many2many field but use the inverse method of the\n     * linked Many2one field, in this case the personal_stage_type_id, to create or update the\n     * record - here set the stage_id - in the personal_stage_type_ids.\n     *\n     * See @project/src/js/task_gantt_controller::_getDialogContext() for\n     * further explanation.\n     *\n     * @private\n     * @override\n     */\n    rescheduleData: function (schedule, isUTC) {\n        const data = this._super.apply(this, arguments);\n        for (let mapping of this.mapMany2manyFields) {\n            if (mapping.many2many_field in data) {\n                data[mapping.many2one_field] = data[mapping.many2many_field][0];\n                delete data[mapping.many2many_field];\n            }\n        }\n        return data;\n    },\n});\n\nexport default TaskGanttModel;\n", "/** @odoo-module **/\n\nimport TaskGanttRow from './task_gantt_row';\nimport GanttRenderer from 'web_gantt.GanttRenderer';\nimport {getDateFormatForScale} from \"./task_gantt_utils\";\nimport core from 'web.core';\n\nconst QWeb = core.qweb;\n\n\nconst TaskGanttRenderer = GanttRenderer.extend({\n    config: {\n        GanttRow: TaskGanttRow,\n    },\n    events: Object.assign({ }, GanttRenderer.prototype.events || { }, {\n        'mouseover .o_project_milestone_diamond': '_onMilestoneMouseEnter',\n        'mouseleave .o_project_milestone_diamond': '_onMilestoneMouseLeave',\n    }),\n\n    //--------------------------------------------------------------------------\n    // Life Cycle\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n    */\n    init() {\n        this._super(...arguments);\n        this.template_to_use = 'TaskGanttMilestonesView';\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     * @private\n     */\n    _prepareViewInfo: function () {\n        const viewInfo = this._super(...arguments);\n        let dateFormat = getDateFormatForScale(this.SCALES[this.state.scale]);\n        const slotsMilestonesDict = viewInfo.slots.reduce((accumulator, current) => {\n            accumulator[current.format(dateFormat)] = {\n                hasDeadLineExceeded: false,\n                allReached: true,\n                milestones: [],\n            };\n            return accumulator;\n        }, { });\n        this.state.milestones.forEach((milestone) => {\n            const formattedDate = milestone.deadline.format(dateFormat);\n            if (formattedDate in slotsMilestonesDict) {\n                if (milestone.is_deadline_exceeded)\n                    slotsMilestonesDict[formattedDate].hasDeadLineExceeded = true;\n                if (!milestone.is_reached)\n                    slotsMilestonesDict[formattedDate].allReached = false;\n                slotsMilestonesDict[formattedDate].milestones.push(milestone);\n            }\n        });\n        viewInfo.getSlotKey = (slot) => slot.format(dateFormat);\n        viewInfo.slotsMilestonesDict = slotsMilestonesDict;\n        viewInfo.slotMilestonesInfo = (slot) => {\n            const slotKey = slot.format(dateFormat);\n            return viewInfo.slotsMilestonesDict[slotKey];\n        };\n        return viewInfo;\n    },\n    /**\n     *\n     * @return {Promise<void>}\n     * @private\n     * @override\n     */\n    async _renderView() {\n        await this._super(...arguments);\n        this.el.classList.add('o_project_gantt');\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    display_milestone_popover(data, targetElement) {\n        const $milestone = $(targetElement);\n        $milestone.popover({\n            container: this.$el,\n            delay: {show: this.POPOVER_DELAY},\n            html: true,\n            placement: 'auto',\n            content: () => {\n                return QWeb.render('gantt-milestone-popover', data);\n            },\n        });\n        $milestone.popover(\"show\");\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Handler for Milestones mouseenter event.\n     * This is the moment when we render the popover template and create the popover.\n     * This prevent using too much resources upfront.\n     *\n     * @param {OdooEvent} ev\n     * @private\n     */\n    async _onMilestoneMouseEnter(ev) {\n        ev.stopPropagation();\n        this.trigger_up(\n            'display_milestone_popover',\n            {\n                 popoverData: {\n                    milestones: this.viewInfo.slotsMilestonesDict[ev.currentTarget.dataset.slotKey].milestones,\n                    display_milestone_dates: this.viewInfo.state.scale === 'year'\n                 },\n                targetElement: ev.currentTarget,\n            });\n    },\n    /**\n     * Handler for Milestones mouseleave event.\n     *\n     *\n     * @param {OdooEvent} ev\n     * @private\n     */\n    async _onMilestoneMouseLeave(ev) {\n        ev.stopPropagation();\n        const $milestone = $(ev.currentTarget);\n        $milestone.popover('hide').popover('dispose');\n    },\n\n});\n\nexport default TaskGanttRenderer;\n", "/** @odoo-module **/\n\nimport GanttRow from 'web_gantt.GanttRow';\nimport { getDateFormatForScale } from \"./task_gantt_utils\";\n\n\nconst TaskGanttRow = GanttRow.extend({\n    template: 'TaskGanttMilestonesView.Row',\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n    */\n    _prepareSlots: function () {\n        this._super(...arguments);\n        let dateFormat = getDateFormatForScale(this.SCALES[this.state.scale]);\n        this.slots.forEach((slot) => {\n            const slotKey = slot.start.format(dateFormat);\n            slot.milestonesInfo = this.viewInfo.slotsMilestonesDict[slotKey];\n        });\n    },\n});\n\nexport default TaskGanttRow;\n", "/** @odoo-module **/\n\n\n// -----------------------------------------------------------------------------\n// Public\n// -----------------------------------------------------------------------------\n\n/**\n * Returns the moment format to use in order to compute the correct slot key for the provided interval.\n * @param scale\n * @return {string}\n */\nexport function getDateFormatForScale(scale) {\n    if (scale.interval === 'hour') {\n        return 'DD-MM-YYYY HH';\n    } else if (scale.interval === 'day') {\n        return 'DD-MM-YYYY';\n    } else if (scale.interval === 'month') {\n        return 'MM-YYYY';\n    }\n    throw Error(\"Invalid SCALE interval !\");\n}\n", "/** @odoo-module **/\n\nimport viewRegistry from 'web.view_registry';\nimport GanttView from 'web_gantt.GanttView';\nimport TaskGanttController from './task_gantt_controller';\nimport TaskGanttRenderer from './task_gantt_renderer';\nimport TaskGanttModel from './task_gantt_model';\nimport { ProjectControlPanel } from '@project/js/project_control_panel';\n\nexport const TaskGanttView = GanttView.extend({\n    config: Object.assign({}, GanttView.prototype.config, {\n        Controller: TaskGanttController,\n        Renderer: TaskGanttRenderer,\n        Model: TaskGanttModel,\n        ControlPanel: ProjectControlPanel,\n    }),\n});\n\nviewRegistry.add('task_gantt', TaskGanttView);\n", "/** @odoo-module **/\n\nimport { patch } from \"@web/core/utils/patch\";\nimport { ProjectControlPanel } from \"@project/project_control_panel/project_control_panel\";\n\npatch(ProjectControlPanel, \"project_enterprise.ProjectControlPanel\", {\n    template: \"project_enterprise.ProjectControlPanel\",\n});\n", "odoo.define('web_grid.component_registry', function (require) {\n    \"use strict\";\n\n    const Registry = require('web.Registry');\n\n    return new Registry();\n});\n\nodoo.define('web_grid._component_registry', function (require) {\n    \"use strict\";\n\n    const components = require('web_grid.components');\n    const registry = require('web_grid.component_registry');\n\n    registry\n        .add('float_factor', components.FloatFactorComponent)\n        .add('float_time', components.FloatTimeComponent)\n        .add('float_toggle', components.FloatToggleComponent);\n});\n", "odoo.define('web_grid.components', function (require) {\n    \"use strict\";\n\n    const fieldUtils = require('web.field_utils');\n    const utils = require('web.utils');\n\n    const { useRef, useState } = owl.hooks;\n    const { debounce } = owl.utils;\n\n\n    class BaseGridComponent extends owl.Component {\n        constructor() {\n            super(...arguments);\n            this.currentInput = useRef(\"currentInput\");\n            this.state = useState({\n                error: false,\n            });\n        }\n        willUpdateProps(nextProps) {\n            if (nextProps.date !== this.props.date) {\n                // if we change the range of dates we are looking at, the\n                // component must remove it's error state\n                this.state.error = false;\n            }\n        }\n        patched() {\n            if (this.currentInput.el) {\n                this.currentInput.el.select();\n            }\n        }\n\n        //----------------------------------------------------------------------\n        // Getters\n        //----------------------------------------------------------------------\n\n        /**\n         * Returns the additional options needed for format/parse.\n         * Override this getter to add options.\n         *\n         * @returns {Object}\n         */\n        get fieldOptions() {\n            return this.props.nodeOptions;\n        }\n        /**\n         * Returns the formatType needed for the format/parse function.\n         * Override this getter to add options.\n         *\n         * @returns {Object}\n         */\n        get formatType() {\n            return this.constructor.formatType || this.props.fieldInfo.type;\n        }\n\n        //----------------------------------------------------------------------\n        // Private\n        //----------------------------------------------------------------------\n\n        /**\n         * @private\n         * @param {any} value\n         * @returns {string}\n         */\n        _format(value) {\n            return fieldUtils.format[this.formatType](value, {}, this.fieldOptions);\n        }\n        /**\n         * @private\n         * @param {any} value\n         * @returns {string}\n         */\n        _parse(value) {\n            return fieldUtils.parse[this.formatType](value, {}, this.fieldOptions);\n        }\n\n        //----------------------------------------------------------------------\n        // Handlers\n        //----------------------------------------------------------------------\n\n        /**\n         * This handler verifies that the value has a good format, if it is\n         * the case it will trigger an event to update the value in DB.\n         *\n         * @private\n         * @param {MouseEvent} ev\n         */\n        _onBlurCell(ev) {\n            let value;\n            try {\n                value = this._parse(ev.target.value);\n                this.state.error = false;\n            } catch (_) {\n                this.state.error = ev.target.value;\n            } finally {\n                this.trigger('grid-cell-update', {\n                    path: this.props.path,\n                    value\n                });\n            }\n        }\n        /**\n         * This handler notifies the grid that a cell has been focused\n         *\n         * @private\n         */\n        _onFocusCell() {\n            this.trigger('grid-cell-focus', {\n                path: this.props.path\n            });\n        }\n    }\n    BaseGridComponent.defaultProps = {\n        cellHeight: 0,\n        cellValue: 0,\n        hasBarChartTotal: false,\n        readonly: false,\n        isTotal: false,\n        nodeOptions: {}\n    };\n    BaseGridComponent.props = {\n        cellHeight: {\n            type: Number,\n            optional: true\n        },\n        cellValue: {\n            type: Number,\n            optional: true\n        },\n        fieldInfo: Object,\n        hasBarChartTotal: Boolean,\n        isInput: Boolean,\n        nodeOptions: Object,\n        path: {\n            type: String,\n            optional: true\n        },\n        readonly: Boolean,\n        isTotal: {\n            type: Boolean,\n            optional: true\n        },\n        date: {\n            type: String,\n            optional: true\n        },\n    };\n    BaseGridComponent.template = 'web_grid.BaseGridComponent';\n    BaseGridComponent.formatType = 'float_factor';\n\n\n    class FloatFactorComponent extends BaseGridComponent {}\n\n\n    class FloatTimeComponent extends BaseGridComponent {\n        get fieldOptions() {\n            return Object.assign({}, super.fieldOptions, {\n                noLeadingZeroHour: true,\n            });\n        }\n    }\n    FloatTimeComponent.formatType = 'float_time';\n\n\n    class FloatToggleComponent extends BaseGridComponent {\n        constructor() {\n            super(...arguments);\n            this.state = useState({\n                disabled: false,\n                value: this.initialValue,\n            });\n            this._onClickButton = debounce(this._onClickButton, 200, true);\n        }\n        willUpdateProps(nextProps) {\n            if (nextProps.cellValue !== this.initialValue) {\n                this.state.value = nextProps.cellValue;\n            }\n        }\n\n        //----------------------------------------------------------------------\n        // Getters\n        //----------------------------------------------------------------------\n\n        /**\n         * Returns the additional options to the format function.\n         *\n         * @returns {Object}\n         */\n        get fieldOptions() {\n            const fieldOptions = Object.assign({}, this.props.nodeOptions);\n            if (!fieldOptions.factor) {\n                fieldOptions.factor = 1;\n            }\n            const range = [0.0, 0.5, 1.0];\n            if (!fieldOptions.range) {\n                fieldOptions.range = range;\n            }\n            return fieldOptions;\n        }\n        /**\n         * Returns the initial value.\n         *\n         * @returns {Number}\n         */\n        get initialValue() {\n            return this.props.cellValue;\n        }\n\n        //----------------------------------------------------------------------\n        // Handlers\n        //----------------------------------------------------------------------\n\n        /**\n         * This handler is called when a user clicks on a button\n         * it will change the value in the state\n         *\n         * @private\n         * @param {MouseEvent} ev\n         */\n        _onClickButton() {\n            const range = this.fieldOptions.range;\n            const currentFloat = fieldUtils.parse.float(this._format(this.state.value));\n            const closest = utils.closestNumber(currentFloat, range);\n            const closestIndex = range.indexOf(closest);\n            const nextIndex = closestIndex + 1 < range.length ? closestIndex + 1 : 0;\n            this.state.value = this._parse(fieldUtils.format.float(range[nextIndex]));\n            this.state.disabled = true;\n            this.trigger('grid-cell-update', {\n                path: this.props.path,\n                value: this.state.value,\n                doneCallback: () => {\n                    this.state.disabled = false;\n                }\n            });\n        }\n\n    }\n    FloatToggleComponent.template = 'web_grid.FloatToggleComponent';\n\n\n    return {\n        BaseGridComponent,\n        FloatFactorComponent,\n        FloatTimeComponent,\n        FloatToggleComponent,\n    };\n});\n", "odoo.define('web_grid.GridController', function (require) {\n\"use strict\";\n\nvar AbstractController = require('web.AbstractController');\nvar config = require('web.config');\nvar core = require('web.core');\nvar dialogs = require('web.view_dialogs');\nvar utils = require('web.utils');\nvar concurrency = require('web.concurrency');\n\nvar qweb = core.qweb;\nvar _t = core._t;\n\nvar GridController = AbstractController.extend({\n    custom_events: Object.assign({}, AbstractController.prototype.custom_events, {\n        'create_inline': '_addLine',\n        'cell_edited': '_onCellEdited',\n        'open_cell_information': '_onOpenCellInformation',\n    }),\n\n    /**\n     * @override\n     */\n    init: function (parent, model, renderer, params) {\n        this._super.apply(this, arguments);\n        this.context = params.context;\n        this.navigationButtons = params.navigationButtons;\n        this.ranges = params.ranges;\n        this.currentRange = params.currentRange;\n        this.formViewID = params.formViewID;\n        this.listViewID = params.listViewID;\n        this.adjustment = params.adjustment;\n        this.adjustName = params.adjustName;\n        this.canCreate = params.activeActions.create;\n        this.createInline = params.createInline;\n        this.displayEmpty = params.displayEmpty;\n        this.mutex = new concurrency.Mutex();\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     * @param {jQuery} [$node]\n     */\n    renderButtons: function ($node) {\n        this.$buttons = $(qweb.render('grid.GridArrows', {\n            widget: {\n                _ranges: this.ranges,\n                _buttons: this.navigationButtons,\n                allowCreate: this.canCreate,\n            },\n            isMobile: config.device.isMobile\n        }));\n        this.$buttons.on('click', '.o_grid_button_add', this._onAddLine.bind(this));\n        this.$buttons.on('click', '.grid_arrow_previous', this._onPaginationChange.bind(this, 'prev'));\n        this.$buttons.on('click', '.grid_button_initial', this._onPaginationChange.bind(this, 'initial'));\n        this.$buttons.on('click', '.grid_arrow_next', this._onPaginationChange.bind(this, 'next'));\n        this.$buttons.on('click', '.grid_arrow_range', this._onRangeChange.bind(this));\n        this.$buttons.on('click', '.grid_arrow_button', this._onButtonClicked.bind(this));\n        this.updateButtons();\n        if ($node) {\n            this.$buttons.appendTo($node);\n        }\n    },\n    /**\n     * @override\n     */\n    updateButtons: function () {\n        if (!this.$buttons) {\n            return;\n        }\n        const state = this.model.get();\n        this.$buttons.find('.o_grid_button_add').toggleClass('d-none', this.createInline && (!!state.data[0].rows.length || this.displayEmpty));\n        this.$buttons.find('.grid_arrow_previous').toggleClass('d-none', !state.data[0].prev);\n        this.$buttons.find('.grid_arrow_next').toggleClass('d-none', !state.data[0].next);\n        this.$buttons.find('.grid_button_initial').toggleClass('d-none', !state.data[0].initial);\n        this.$buttons.find('.grid_arrow_range').removeClass('active');\n        this.$buttons.find('.grid_arrow_range[data-name=' + this.currentRange + ']').addClass('active');\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Open a form View to create a new entry in the grid\n     * @private\n     */\n    _addLine: function () {\n        var context = this.model.getContext();\n        var formContext = _.extend({}, context, {view_grid_add_line: true});\n        // TODO: document quick_create_view (?) context key\n        var formViewID = context.quick_create_view || this.formViewID || false;\n        new dialogs.FormViewDialog(this, {\n            res_model: this.modelName,\n            res_id: false,\n            context: formContext,\n            view_id: formViewID,\n            title: _t(\"Add a Line\"),\n            disable_multiple_selection: true,\n            on_saved: this.reload.bind(this, {}),\n        }).open();\n    },\n    /**\n     * @private\n     * @param {Object} cell\n     * @param {number} newValue\n     * @returns {Promise}\n     */\n    _adjust: function (cell, newValue) {\n        var difference = newValue - cell.value;\n        // 1e-6 is probably an overkill, but that way milli-values are usable\n        if (Math.abs(difference) < 1e-6) {\n            // cell value was set to itself, don't hit the server\n            return Promise.resolve();\n        }\n        // convert row values to a domain, concat to action domain\n        var state = this.model.get();\n        var domain = this.model.domain.concat(cell.row.domain);\n        // early rendering of the new value.\n        // FIXME: only the model should modify the state, so in master\n        // move the _adjust method in the model so that it can properly\n        // handle \"pending\" data\n        utils.into(state.data, cell.cell_path).value = newValue;\n\n        var self = this;\n        return this.mutex.exec(function () {\n            if (self.adjustment === 'action') {\n                const actionData = {\n                    type: self.adjustment,\n                    name: self.adjustName,\n                    context: self.model.getContext({\n                        grid_adjust: { // context for type=action\n                            row_domain: domain,\n                            column_field: state.colField,\n                            column_value: cell.col.values[state.colField][0],\n                            cell_field: state.cellField,\n                            change: difference,\n                        },\n                    }),\n                };\n                return self.trigger_up('execute_action', {\n                    action_data: actionData,\n                    env: {\n                        context: self.model.getContext(),\n                        model: self.modelName\n                    },\n                    on_success: async function () {\n                        let state = self.model.get();\n                        await self.model.reloadCell(cell, state.cellField, state.colField);\n                        state = self.model.get();\n                        await self.renderer.update(state);\n                        self.updateButtons(state);\n                    },\n                });\n            }\n            return self._rpc({\n                model: self.modelName,\n                method: self.adjustName,\n                args: [ // args for type=object\n                    [],\n                    domain,\n                    state.colField,\n                    cell.col.values[state.colField][0],\n                    state.cellField,\n                    difference\n                ],\n                context: self.model.getContext()\n            }).then(function () {\n                return self.model.reloadCell(cell, state.cellField, state.colField);\n            }).then(function () {\n                var state = self.model.get();\n                return self.renderer.update(state);\n            }).then(function () {\n                self.updateButtons(state);\n            });\n        });\n    },\n    /**\n     * @override\n     * @private\n     * @returns {Promise}\n     */\n    _update: function () {\n        return this._super.apply(this, arguments)\n            .then(this.updateButtons.bind(this));\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {MouseEvent} event\n     */\n    _onAddLine: function (event) {\n        event.preventDefault();\n        this._addLine();\n    },\n\n    /**\n     * If something needs to be done when a new value has been set, it can be done here\n     * @param ev the event that triggered the update\n     */\n    _cellHasBeenUpdated(ev) {\n        // Currently overriden in timesheet_grid.timesheet_grid_controller\n    },\n\n    /**\n     * @private\n     * @param {OdooEvent} e\n     */\n    _onCellEdited: function (event) {\n        var state = this.model.get();\n        this._adjust({\n            row: utils.into(state.data, event.data.row_path),\n            col: utils.into(state.data, event.data.col_path),\n            value: utils.into(state.data, event.data.cell_path).value,\n            cell_path: event.data.cell_path,\n        }, event.data.value)\n        .then(() => {\n            if (event.data.doneCallback !== undefined) {\n                event.data.doneCallback();\n            }\n            this._cellHasBeenUpdated(event);\n        })\n        .guardedCatch(function () {\n            if (event.data.doneCallback !== undefined) {\n                event.data.doneCallback();\n            }\n        });\n    },\n    /**\n     * @private\n     * @param {MouseEvent} e\n     */\n    _onButtonClicked: function (e) {\n        var self = this;\n        e.stopPropagation();\n        // TODO: maybe allow opting out of getting ids?\n        var button = this.navigationButtons[$(e.target).attr('data-index')];\n        var actionData = _.extend({}, button, {\n            context: this.model.getContext(button.context),\n        });\n        this.model.getIds().then(function (ids) {\n            self.trigger_up('execute_action', {\n                action_data: actionData,\n                env: {\n                    context: self.model.getContext(),\n                    model: self.modelName,\n                    resIDs: ids,\n                },\n                on_closed: self.reload.bind(self, {}),\n            });\n        });\n    },\n    /**\n     * @private\n     * @param {OwlEvent} ev\n     */\n    _onOpenCellInformation: function (ev) {\n        var self = this;\n        var cell_path = ev.data.path.split('.');\n        var row_path = cell_path.slice(0, -3).concat(['rows'], cell_path.slice(-2, -1));\n        var state = this.model.get();\n        var cell = utils.into(state.data, cell_path);\n        var row = utils.into(state.data, row_path);\n\n        var groupFields = state.groupBy.slice(state.isGrouped ? 1 : 0);\n        var label = _.filter(_.map(groupFields, function (g) {\n            return row.values[g][1];\n        }), function (g) {\n            return g;\n        }).join(' - ');\n        // pass group by, section and col fields as default in context\n        var cols_path = cell_path.slice(0, -3).concat(['cols'], cell_path.slice(-1));\n        var col = utils.into(state.data, cols_path);\n        var column_value = col.values[state.colField][0];\n        if (!column_value) {\n            column_value = false;\n        } else if (!_.isNumber(column_value)) {\n            column_value = column_value.split(\"/\")[0];\n        }\n        var ctx = _.extend({}, this.context);\n        var sectionField = _.find(this.renderer.fields, function (res) {\n            return self.model.sectionField === res.name;\n        });\n        if (this.model.sectionField && state.groupBy && state.groupBy[0] === this.model.sectionField) {\n            var value = state.data[parseInt(cols_path[0])].__label;\n            ctx['default_' + this.model.sectionField] = _.isArray(value) ? value[0] : value;\n        }\n        _.each(groupFields, function (field) {\n            ctx['default_' + field] = row.values[field][0] || false;\n        });\n\n        ctx['default_' + state.colField] = column_value;\n\n        ctx['create'] = this.canCreate && !cell.readonly;\n        ctx['edit'] = this.activeActions.edit && !cell.readonly;\n        this.do_action({\n            type: 'ir.actions.act_window',\n            name: label,\n            res_model: this.modelName,\n            views: [\n                [this.listViewID, 'list'],\n                [this.formViewID, 'form']\n            ],\n            domain: cell.domain,\n            context: ctx,\n            help: \"<p class='o_view_nocontent_smiling_face'>No activities found</p>\",\n        });\n    },\n    /**\n     * @private\n     * @param {string} dir either 'prev', 'initial' or 'next\n     */\n    _onPaginationChange: function (dir) {\n        var state = this.model.get();\n        this.update({pagination: state.data[0][dir]});\n    },\n    /**\n     * @private\n     * @param {MouseEvent} e\n     */\n    _onRangeChange: function (e) {\n        e.stopPropagation();\n        var $target = $(e.target);\n        if (config.device.isMobile) {\n            $target.closest(\".dropdown-menu\").prev().dropdown(\"toggle\");\n        }\n        if ($target.hasClass('active')) {\n            return;\n        }\n        this.currentRange = $target.attr('data-name');\n\n        this.update({range: this.currentRange});\n    },\n});\n\nreturn GridController;\n\n});\n", "odoo.define('web_grid.GridModel', function (require) {\n\"use strict\";\n\nvar AbstractModel = require('web.AbstractModel');\nvar concurrency = require('web.concurrency');\nvar utils = require('web.utils');\n\nconst { _t } = require('web.core');\n\nconst GridModel = AbstractModel.extend({\n    /**\n     * GridModel\n     *\n     * All data will be loaded in the _gridData object and can be retrieved with\n     * the `get` method.\n     */\n\n    /**\n     * @override\n     */\n    init: function () {\n        this._super.apply(this, arguments);\n        this._gridData = null;\n        this.dp = new concurrency.DropPrevious();\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @public\n     */\n    computeAllTotals: function (state) {\n        state.data.forEach((group, groupIndex) => {\n            state.data[groupIndex].totals = this._computeTotals(group.grid);\n        });\n        state.totals = this._computeTotals(_.flatten(_.pluck(state.data, 'grid'), true));\n        return state;\n    },\n    /**\n     * @override\n     * @returns {Object}\n     */\n    __get: function () {\n        return this._gridData;\n    },\n    /**\n     * @override\n     * @param {Object} context\n     * @returns {Object}\n     */\n    getContext: function (context) {\n        var c = _.extend({}, this.context, context);\n        return c;\n    },\n    /**\n     * The data from the grid view basically come from a read_group so we don't\n     * have any res_ids. A big domain is thus computed with the domain of all\n     * cells and this big domain is used to search for res_ids.\n     *\n     * @returns {Promise<integer[]>} the list of ids used in the grid\n     */\n    getIds: function () {\n        var data = this._gridData.data;\n        if (!_.isArray(data)) {\n            data = [data];\n        }\n\n        var domain = [];\n        // count number of non-empty cells and only add those to the search\n        // domain, on sparse grids this makes domains way smaller\n        var cells = 0;\n\n        for (var i = 0; i < data.length; i++) {\n            var grid = data[i].grid;\n\n            for (var j = 0; j < grid.length; j++) {\n                var row = grid[j];\n                for (var k = 0; k < row.length; k++) {\n                    var cell = row[k];\n                    if (cell.size !== 0) {\n                        cells++;\n                        domain.push.apply(domain, cell.domain);\n                    }\n                }\n            }\n        }\n\n        // if there are no elements in the grid we'll get an empty domain\n        // which will select all records of the model... that is *not* what\n        // we want\n        if (cells === 0) {\n            return Promise.resolve([]);\n        }\n\n        while (--cells > 0) {\n            domain.unshift('|');\n        }\n\n        return this._rpc({\n            model: this.modelName,\n            method: 'search',\n            args: [domain],\n            context: this.getContext(),\n        });\n    },\n    /**\n     * @override\n     * @param {Object} params\n     * @returns {Promise}\n     */\n    __load: function (params) {\n        this.fields = params.fields;\n        this.modelName = params.modelName;\n        this.rowFields = params.rowFields;\n        this.sectionField = params.sectionField;\n        this.colField = params.colField;\n        this.cellField = params.cellField;\n        this.ranges = params.ranges;\n        this.currentRange = params.currentRange;\n        this.domain = params.domain;\n        this.context = params.context;\n        var groupedBy = (params.groupedBy && params.groupedBy.length) ?\n            params.groupedBy : this.rowFields;\n        this.groupedBy = Array.isArray(groupedBy) ? groupedBy : [groupedBy];\n        this.readonlyField = params.readonlyField;\n        return this._fetch(this.groupedBy);\n    },\n    /**\n     * @override\n     * @param {any} handle this parameter is ignored\n     * @param {Object} params\n     * @returns {Promise}\n     */\n    __reload: function (handle, params) {\n        if (params === 'special') {\n            return Promise.resolve();\n        }\n        params = params || {};\n        if ('context' in params) {\n            // keep the grid anchor, when reloading view (e.i.: removing a filter in search view)\n            var old_context = this.context;\n            this.context = params.context;\n            if (old_context.grid_anchor !== undefined || params.context.grid_anchor !== undefined) {\n                this.context.grid_anchor = old_context.grid_anchor || params.context.grid_anchor;\n            }\n        }\n        if ('domain' in params) {\n            this.domain = params.domain;\n        }\n        if ('pagination' in params) {\n            _.extend(this.context, params.pagination);\n        }\n        if ('range' in params) {\n            this.currentRange = _.findWhere(this.ranges, {name: params.range});\n        }\n        if ('groupBy' in params) {\n            if (params.groupBy.length) {\n                this.groupedBy = Array.isArray(params.groupBy) ?\n                    params.groupBy : [params.groupBy];\n            } else {\n                this.groupedBy = this.rowFields;\n            }\n        }\n        return this._fetch(this.groupedBy);\n    },\n    reloadCell: function (cell, cellField, colField) {\n        var self = this;\n        var domain = cell.col.domain.concat(this.domain);\n        var domainRow = cell.row.values;\n        for (var value in domainRow) {\n            domain = domain.concat([[value.toString(), '=', domainRow[value][0]]]);\n        }\n        /**\n         * We're doing this because the record can be attribute to someone else\n         * when it's attribute to no one at the beginning.\n         * Once we've done this we have to reload all the grid and not only the cell\n         * (to also change de name of the person it's attribute to)\n         */\n        if (this._gridData.isGrouped) {\n            var groupLabel = this._gridData.data[cell.cell_path[0]].__label;\n            if (groupLabel !== undefined)\n                domain = domain.concat([[this._gridData.groupBy[0], '=', groupLabel[0]]]);\n            else {\n                return self._fetch(self._gridData.groupBy);\n            }\n        }\n\n        return this._rpc({\n            model: this.modelName,\n            method: 'read_group',\n            kwargs: {\n                domain: domain,\n                fields: [cellField],\n                groupby: [colField],\n            },\n            context: this.getContext()\n        }).then(function (result) {\n            if (result.length === 0 || !(cellField in result[0])) {\n                return Promise.resolve();\n            }\n            var currentCell = utils.into(self._gridData.data, cell.cell_path);\n            currentCell.value = result[0][cellField];\n            currentCell.size = result[0][colField + '_count'];\n            currentCell.domain = domain;\n            self._gridData = self.computeAllTotals(self._gridData);\n        });\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {Object[]} grid\n     * @returns {{super: number, rows: {}, columns: {}}}\n     */\n    _computeTotals: function (grid) {\n        const totals = {\n            super: 0,\n            rows: {},\n            columns: {}\n        };\n        for (let i = 0; i < grid.length; i++) {\n            const row = grid[i];\n            for (let j = 0; j < row.length; j++) {\n                const cell = row[j];\n                totals.super += cell.value;\n                totals.rows[i] = (totals.rows[i] || 0) + cell.value;\n                totals.columns[j] = (totals.columns[j] || 0) + cell.value;\n            }\n        }\n        return totals;\n    },\n    /**\n     * @private\n     * @param {Object} rows\n     * @param {boolean} grouped\n     * @returns {Object with keys id (string) and label (string[])}\n     */\n    _getRowInfo(row, grouped) {\n        let groupBy = this.groupedBy;\n        if (grouped) {\n            groupBy = groupBy.slice(1);\n        }\n        const rowValues = [];\n        const rowIds = [];\n        for (let i = 0; i < groupBy.length; i++) {\n            const rowField = groupBy[i];\n            let value = row.values[rowField];\n            const fieldName = rowField.split(':')[0]; // remove groupby function (:day, :month...)\n            const fieldType = this.fields[fieldName].type;\n            if (fieldType === 'selection') {\n                value = this.fields[fieldName].selection.find(function (choice) {\n                    return choice[0] === value;\n                });\n            }\n            const id = value && [\"many2one\", \"selection\"].includes(fieldType) ? value[0] : value;\n            value = value && [\"many2one\", \"selection\"].includes(fieldType) ? value[1] : value;\n            rowValues.push(value);\n            rowIds.push(id);\n        }\n        return { id: rowIds.join(','), label: rowValues };\n    },\n    /**\n     * @private\n     * @param {string[]} groupBy\n     * @returns {Promise}\n     */\n    _fetch: function (groupBy) {\n        if (!this.currentRange) {\n            return Promise.resolve();\n        }\n\n        if (this.sectionField && this.sectionField === groupBy[0]) {\n            return this._fetchGroupedData(groupBy);\n        } else {\n            return this._fetchUngroupedData(groupBy);\n        }\n    },\n    /**\n     * @private\n     * @param {string[]} groupBy\n     * @returns {Promise}\n     */\n    _fetchGroupedData: async function (groupBy) {\n        const d = await this.dp.add(this._rpc({\n            model: this.modelName,\n            method: 'read_grid_domain',\n            kwargs: {\n                field: this.colField,\n                range: this.currentRange,\n            },\n            context: this.getContext(),\n        }));\n\n        const groups = await this.dp.add(this._rpc({\n            model: this.modelName,\n            method: 'read_group',\n            kwargs: {\n                domain: d.concat(this.domain || []),\n                fields: [this.sectionField],\n                groupby: [this.sectionField],\n            },\n            context: this.getContext()\n        }));\n\n        let prom;\n        if (!groups.length) {\n            // if there are no groups in the output we still need\n            // to fetch an empty grid so we can render the table's\n            // decoration (pagination and columns &etc) otherwise\n            // we get a completely empty grid\n            prom = Promise.all([this._fetchSectionGrid(groupBy, {\n                __domain: this.domain || [],\n            })]);\n        } else {\n            prom = Promise.all((groups || []).map(group => {\n                return this._fetchSectionGrid(groupBy, group);\n            }));\n        }\n        const results = await this.dp.add(prom);\n\n        if (!(_.isEmpty(results) || _.reduce(results, function (m, it) {\n                return _.isEqual(m.cols, it.cols) && m;\n            }))) {\n            throw new Error(_t(\"The sectioned grid view can't handle groups with different columns sets\"));\n        }\n        results.forEach((group, groupIndex) => {\n            results[groupIndex].totals = this._computeTotals(group.grid);\n            group.rows.forEach((row, rowIndex) => {\n                const { id, label } = this._getRowInfo(row, true);\n                results[groupIndex].rows[rowIndex].id = id;\n                results[groupIndex].rows[rowIndex].label = label;\n            });\n        });\n\n        this._gridData = {\n            isGrouped: true,\n            data: results,\n            totals: this._computeTotals(_.flatten(_.pluck(results, 'grid'), true)),\n            groupBy,\n            colField: this.colField,\n            cellField: this.cellField,\n            range: this.currentRange.name,\n            context: this.context,\n        };\n    },\n    /**\n     * @private\n     * @param {string[]} groupBy\n     * @param {Object} sectionGroup\n     * @param {Object} [additionalContext]\n     * @returns {Promise}\n     */\n    _fetchSectionGrid: function (groupBy, sectionGroup, additionalContext) {\n        var self = this;\n        var rpcProm = this._rpc({\n            model: this.modelName,\n            method: 'read_grid',\n            kwargs: {\n                row_fields: groupBy.slice(1),\n                col_field: this.colField,\n                cell_field: this.cellField,\n                range: this.currentRange,\n                domain: sectionGroup.__domain,\n                readonly_field: this.readonlyField,\n            },\n            context: this.getContext(additionalContext),\n        })\n        rpcProm.then(function (grid) {\n            grid.__label = sectionGroup[self.sectionField];\n        });\n        return rpcProm;\n    },\n    /**\n     * @private\n     * @param {string[]} groupBy\n     * @returns {Promise}\n     */\n    _fetchUngroupedData: async function (groupBy) {\n        const result = await this.dp.add(this._rpc({\n                model: this.modelName,\n                method: 'read_grid',\n                kwargs: {\n                    row_fields: groupBy,\n                    col_field: this.colField,\n                    cell_field: this.cellField,\n                    domain: this.domain,\n                    range: this.currentRange,\n                    readonly_field: this.readonlyField,\n                },\n                context: this.getContext(),\n        }));\n\n        const rows = result.rows;\n        rows.forEach((row, rowIndex) => {\n            const { id, label } = this._getRowInfo(row, false);\n            result.rows[rowIndex].label = label;\n            result.rows[rowIndex].id = id;\n        });\n        this._gridData = {\n            isGrouped: false,\n            data: [result],\n            totals: this._computeTotals(result.grid),\n            groupBy,\n            colField: this.colField,\n            cellField: this.cellField,\n            range: this.currentRange.name,\n            context: this.context,\n        };\n    },\n});\n\nreturn GridModel;\n\n});\n", "odoo.define('web_grid.GridRenderer', function (require) {\n    \"use strict\";\n\n    const AbstractRenderer = require('web.AbstractRendererOwl');\n    const fieldUtils = require('web.field_utils');\n    const utils = require('web.utils');\n\n    const gridComponentRegistry = require('web_grid.component_registry');\n    const { useListener } = require('web.custom_hooks');\n    const {useRef, useState} = owl.hooks;\n\n    class GridRenderer extends AbstractRenderer {\n        constructor(parent, props) {\n            super(parent, props);\n            this.state = useState({\n                editMode: false,\n                currentPath: \"\",\n                errors: {},\n            });\n            this.currentInput = useRef(\"currentInput\");\n            useListener('mouseover', 'td:not(:first-child), th:not(:first-child)', this._onMouseEnter);\n            useListener('mouseout', 'td:not(:first-child), th:not(:first-child)', this._onMouseLeave);\n        }\n\n        willUpdateProps(nextProps) {\n            if (nextProps.data[0].next.grid_anchor !== this.props.data[0].next.grid_anchor) {\n                //if we change the range of dates we are looking at,\n                //the cells should not be in error state anymore\n                this.state.errors = {};\n            }\n        }\n        patched() {\n            if (this.currentInput.el) {\n                this.currentInput.el.select();\n            }\n        }\n\n        //----------------------------------------------------------------------\n        // Getters\n        //----------------------------------------------------------------------\n\n        /**\n         * returns the columns of the first gridgroup\n         *\n         * @returns {Object}\n         */\n        get columns() {\n            return this.props.data.length ? this.props.data[0].cols : [];\n        }\n        /**\n         * returns a boolean expressing if the grid uses cellComponents\n         *\n         * @returns {Object}\n         */\n        get component() {\n            return gridComponentRegistry.get(this.props.cellComponent);\n        }\n        get gridAnchorNext() {\n            return this.props.data[0].next.grid_anchor;\n        }\n        /**\n         * As there have to be a minimum of 5 rows in an ungrouped grid,\n         * this will return the number of empty rows to add\n         * if there are not enough.\n         *\n         * @returns {Array}\n         */\n        get emptyRows() {\n            return Array.from({\n                length: Math.max(5 - this.props.data[0].rows.length, 0)\n            }, (_, i) => i);\n        }\n        /**\n         * get the formatType needed for format and parse\n         *\n         * @returns {string}\n         */\n        get formatType() {\n            if (this.hasComponent) {\n                return this.component.formatType;\n            }\n            return this.props.fields[this.props.cellField].type;\n        }\n        /**\n         * returns a boolean expressing if the grid uses cellComponents\n         *\n         * @returns {Boolean}\n         */\n        get hasComponent() {\n            return gridComponentRegistry.contains(this.props.cellComponent);\n        }\n        /**\n         * Get the information needed to display the total of a grid correctly\n         * will contain the classMap and the value\n         *\n         * @returns {classmap: Object, value: number}\n         */\n        get gridTotal() {\n            if (this.props.totals.super) {\n                const classMap = {\n                    'o_grid_super': true,\n                    'text-danger': this.props.totals.super < 0,\n                };\n                const value = this.props.totals.super;\n                return {\n                    classMap,\n                    value\n                };\n            } else {\n                return {\n                    classMap: {\n                        o_grid_super: true\n                    },\n                    value: 0.0\n                };\n            }\n        }\n        /**\n         * returns the getMeasureLabels\n         *\n         * @returns {string}\n         */\n        get measureLabel() {\n            if (this.props.measureLabel) {\n                return _.str.sprintf(\"%s\", this.props.measureLabel);\n            } else {\n                return this.env._t(\"Total\");\n            }\n        }\n        /**\n         * returns the xml of the noContentHelper\n         *\n         * @returns {string}\n         */\n        get noContentHelper() {\n            return utils.json_node_to_xml(this.props.noContentHelper);\n        }\n        /**\n         * returns a boolean expressing if yes or no the noContentHelp should be shown\n         *\n         * @returns {Boolean}\n         */\n        get showNoContentHelp() {\n            const stateRow = Array.isArray(this.props.data) ? this.props.data.find(data => data.rows[0]) : this.props.data.rows[0];\n            return stateRow === undefined && !!this.props.noContentHelp;\n        }\n\n        //----------------------------------------------------------------------\n        // Private\n        //----------------------------------------------------------------------\n\n        /**\n         * Notifies the model that a cell has been edited.\n         *\n         * @private\n         * @param {string} path path to the cell\n         * @param {Number} value new value that we want to store in DB\n         * @param {Function} doneCallback function to call after update\n         */\n        _cellEdited(path, value, doneCallback) {\n            const cell_path = path.split('.');\n            const grid_path = cell_path.slice(0, -3);\n            const row_path = grid_path.concat(['rows'], cell_path.slice(-2, -1));\n            const col_path = grid_path.concat(['cols'], cell_path.slice(-1));\n            this.trigger('cell-edited', {\n                cell_path,\n                row_path,\n                col_path,\n                value,\n                doneCallback,\n            });\n        }\n        /**\n         * @private\n         * @param {any} value\n         * @returns {string}\n         */\n        _format(value) {\n            if (value === undefined) {\n                return '';\n            }\n            const cellField = this.props.fields[this.props.cellField];\n            return fieldUtils.format[this.formatType](value, cellField, this.props.cellComponentOptions);\n        }\n        /**\n         * @private\n         * @param {integer} index\n         * @returns {value: number, smallerThanZero: boolean, muted: boolean}\n         */\n        _formatCellContentTotals(index) {\n            if (this.props.totals) {\n                return {\n                    value: this.props.totals.columns[index],\n                    smallerThanZero: this.props.totals.columns[index] < 0,\n                    muted: !this.props.totals.columns || !this.props.totals.columns[index]\n                };\n            } else {\n                return {};\n            }\n        }\n        /**\n         * @private\n         * @param {Object} cell\n         * @returns {Object}\n         */\n        _getCellClassMap(cell) {\n            // these are \"hard-set\" for correct grid behaviour\n            const classmap = {\n                o_grid_cell_container: true,\n                o_grid_cell_empty: !cell.size,\n                o_grid_cell_readonly: !this.props.editableCells || cell.readonly,\n            };\n            // merge in class info from the cell\n            for (const cls of cell.classes || []) {\n                // don't allow overwriting initial values\n                if (!(cls in classmap)) {\n                    classmap[cls] = true;\n                }\n            }\n            return classmap;\n        }\n        /**\n         * @private\n         * @param {string} value\n         * @returns {*}\n         */\n        _parse(value) {\n            const cellField = this.props.fields[this.props.cellField];\n            return fieldUtils.parse[this.formatType](value, cellField, this.props.cellComponentOptions);\n        }\n        /**\n         * measure the height value of footer cell if hasBarChartTotal=\"true\"\n         * max height value is 90%\n         *\n         * @private\n         * @param {number} index\n         * @returns {number} height: to be used as css percentage\n         */\n        _totalHeight(index) {\n            const maxCount = Math.max(...Object.values(this.props.totals.columns));\n            const factor = maxCount ? (90 / maxCount) : 0;\n            return factor * this.props.totals.columns[index];\n        }\n\n        //----------------------------------------------------------------------\n        // Handlers\n        //----------------------------------------------------------------------\n\n        /**\n         * @private\n         * @param {OwlEvent} ev\n         */\n        _onClickCreateInline(ev) {\n            this.trigger('create-inline');\n        }\n        /**\n         * @private\n         * @param path path to the cell\n         */\n        _onClickCellInformation(path) {\n            this.state.editMode = false;\n            this.trigger('open-cell-information', {\n                path\n            });\n        }\n        /**\n         * @private\n         * @param {OwlEvent} ev\n         */\n        _onFocusComponent(ev) {\n            this.state.editMode = true;\n            this.state.currentPath = ev.detail.path;\n        }\n        /**\n         * @private\n         * @param {string} path path to the cell\n         * @param {CustomEvent} ev\n         */\n        _onFocusGridCell(path) {\n            this.state.editMode = true;\n            this.state.currentPath = path;\n        }\n        /**\n         * @private\n         * @param {Object} cell\n         * @param {CustomEvent} ev\n         */\n        _onGridInputBlur(ev) {\n            this.state.editMode = false;\n            let hasError = false;\n            let value = ev.target.value;\n            try {\n                value = this._parse(value);\n            } catch (_) {\n                hasError = true;\n            }\n            const path = this.state.currentPath;\n            if (hasError) {\n                this.state.errors[path] = value;\n            } else {\n                delete this.state.errors[path];\n                this._cellEdited(path, value);\n            }\n        }\n        /**\n         * @private\n         * @param {CustomEvent} ev\n         */\n        _onUpdateValue(ev) {\n            this.state.editMode = false;\n            const value = ev.detail.value;\n            const doneCallback = ev.detail.doneCallback;\n            const path = ev.detail.path;\n            if (value !== undefined) {\n                this._cellEdited(path, value, doneCallback);\n            }\n        }\n        /**\n         * Hover the column in which the mouse is.\n         *\n         * @private\n         * @param {MouseEvent} ev\n         */\n        _onMouseEnter(ev) {\n            const cellParent = ev.target.closest('td,th');\n            const rowParent = ev.target.closest('tr');\n            const index = [...rowParent.children].indexOf(cellParent) + 1;\n            this.el.querySelectorAll(`td:nth-child(${index}), th:nth-child(${index})`)\n                .forEach(el => {\n                    if (cellParent.querySelector('.o_grid_total_title')) {\n                        el.classList.add('o_cell_highlight');\n                    }\n                    el.classList.add('o_cell_hover');\n                });\n        }\n        /**\n         * Remove the hover on the columns.\n         *\n         * @private\n         */\n        _onMouseLeave() {\n            this.el.querySelectorAll('.o_cell_hover')\n                .forEach(el => el.classList.remove('o_cell_hover', 'o_cell_highlight'));\n        }\n    }\n\n    GridRenderer.defaultProps = {\n        cellComponentOptions: {},\n        hasBarChartTotal: false,\n        hideColumnTotal: false,\n        hideLineTotal: false,\n    };\n    GridRenderer.props = {\n        editableCells: {\n            type: Boolean,\n            optional: true\n        },\n        canCreate: Boolean,\n        cellComponent: {\n            type: String,\n            optional: true\n        },\n        cellComponentOptions: Object,\n        cellField: String,\n        colField: String,\n        createInline: Boolean,\n        displayEmpty: Boolean,\n        fields: Object,\n        groupBy: Array,\n        hasBarChartTotal: Boolean,\n        hideColumnTotal: Boolean,\n        hideLineTotal: Boolean,\n        measureLabel: {\n            type: String,\n            optional: true\n        },\n        noContentHelp: {\n            type: String,\n            optional: true\n        },\n        range: String,\n        context: Object,\n        arch: Object,\n        isEmbedded: Boolean,\n        isGrouped: Boolean,\n        data: [{\n            cols: [{\n                values: Object,\n                domain: Array,\n                is_current: Boolean,\n                is_unavailable: Boolean,\n            }],\n            grid: [{\n                size: Number,\n                domain: Array,\n                value: Number,\n                readonly: {\n                    type: Boolean,\n                    optional: true\n                },\n                is_current: Boolean,\n                is_unavailable: Boolean,\n            }],\n            initial: Object,\n            next: Object,\n            prev: Object,\n            rows: [{\n                values: Object,\n                domain: Array,\n                project: Object,\n                label: Array\n            }],\n            totals: {\n                columns: Object,\n                rows: Object,\n                super: Number\n            },\n            __label: Array\n        }],\n        totals: Object,\n    };\n    GridRenderer.template = 'web_grid.GridRenderer';\n\n    return GridRenderer;\n});\n", "odoo.define('web_grid.GridView', function (require) {\n\"use strict\";\n\nvar AbstractView = require('web.AbstractView');\nvar config = require('web.config');\nvar core = require('web.core');\nvar GridModel = require('web_grid.GridModel');\nvar GridController = require('web_grid.GridController');\nvar GridRenderer = require('web_grid.GridRenderer');\nvar viewRegistry = require('web.view_registry');\nvar pyUtils = require('web.py_utils');\nconst RendererWrapper = require('web.RendererWrapper');\nvar session = require('web.session');\n\nvar _t = core._t;\nvar _lt = core._lt;\n\nvar GridView = AbstractView.extend({\n    display_name: _lt('Grid'),\n    mobile_friendly: true,\n    icon: 'fa-th',\n    config: _.extend({}, AbstractView.prototype.config, {\n        Model: GridModel,\n        Controller: GridController,\n        Renderer: GridRenderer,\n    }),\n    viewType: 'grid',\n    init: function (viewInfo, params) {\n        var self = this;\n        this._super.apply(this, arguments);\n        var arch = this.arch;\n        var fields = this.fields;\n        var rowFields = [];\n        var sectionField, colField, cellField, ranges, cellComponent, cellComponentOptions, measureLabel, readonlyField;\n        _.each(arch.children, function (child) {\n            if (child.tag === 'field') {\n                if (child.attrs.type === 'row') {\n                    if (child.attrs.section === '1' && !sectionField) {\n                        sectionField = child.attrs.name;\n                    }\n                    rowFields.push(child.attrs.name);\n                }\n                if (child.attrs.type === 'col') {\n                    colField = child.attrs.name;\n                    ranges = self._extract_ranges(child, params.context);\n                }\n                if (child.attrs.type === 'measure') {\n                    cellField = child.attrs.name;\n                    cellComponent = child.attrs.widget;\n                    if (child.attrs.options) {\n                        cellComponentOptions = JSON.parse(child.attrs.options.replace(/'/g, '\"'));\n                    }\n                    measureLabel = child.attrs.string;\n                }\n                if (child.attrs.type === 'readonly') {\n                    readonlyField = child.attrs.name;\n                }\n            }\n        });\n\n        // model\n        this.loadParams.ranges = ranges;\n        var contextRangeName = params.context.grid_range;\n        var contextRange = contextRangeName && _.findWhere(ranges, {name: contextRangeName});\n        this.loadParams.fields = this.fields;\n        this.loadParams.currentRange = contextRange || ranges[0];\n        this.loadParams.rowFields = rowFields;\n        this.loadParams.sectionField = sectionField;\n        this.loadParams.colField = colField;\n        this.loadParams.cellField = cellField;\n        this.loadParams.groupedBy = params.groupBy;\n        this.loadParams.readonlyField = readonlyField;\n\n        // renderer\n        this.rendererParams.canCreate = this.controllerParams.activeActions.create;\n        this.rendererParams.fields = fields;\n        this.rendererParams.measureLabel = measureLabel;\n        this.rendererParams.editableCells = !!(this.controllerParams.activeActions.edit && arch.attrs.adjustment);\n        this.rendererParams.cellComponent = cellComponent;\n        this.rendererParams.cellComponentOptions = cellComponentOptions;\n        this.rendererParams.hideLineTotal = !!JSON.parse(arch.attrs.hide_line_total || '0');\n        this.rendererParams.hideColumnTotal = !!JSON.parse(arch.attrs.hide_column_total || '0');\n        this.rendererParams.hasBarChartTotal = !!JSON.parse(arch.attrs.barchart_total || '0');\n        this.rendererParams.createInline = !!JSON.parse(arch.attrs.create_inline || 'false');\n        this.rendererParams.displayEmpty = !!JSON.parse(arch.attrs.display_empty || 'false');\n        this.rendererParams.noContentHelp = (!this.rendererParams.displayEmpty && this.rendererParams.noContentHelp) || \"\";\n\n        // controller\n        this.controllerParams.formViewID = false;\n        this.controllerParams.listViewID = false;\n        _.each(params.actionViews, function (view) {\n            if (view.type === 'form') {\n                self.controllerParams.formViewID = view.viewID;\n            }\n            if (view.type === 'list') {\n                self.controllerParams.listViewID = view.viewID;\n            }\n        });\n        this.controllerParams.context = params.context;\n        this.controllerParams.ranges = ranges;\n        this.controllerParams.currentRange = this.loadParams.currentRange.name;\n        this.controllerParams.navigationButtons = arch.children\n            .filter(function (c) { return c.tag === 'button'; })\n            .map(function (c) { return c.attrs; });\n        this.controllerParams.adjustment = arch.attrs.adjustment;\n        this.controllerParams.adjustName = arch.attrs.adjust_name;\n        this.controllerParams.createInline = this.rendererParams.createInline;\n        this.controllerParams.displayEmpty = this.rendererParams.displayEmpty;\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     */\n    getRenderer(parent, state) {\n        state = Object.assign({}, state, this.rendererParams);\n        return new RendererWrapper(null, this.config.Renderer, state);\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n    /**\n     * Extract the range to display on the view, and filter\n     * them according they should be visible or not (attribute 'invisible')\n     *\n     * @private\n     * @param {node} col_node - the node of 'col' in grid view arch definition\n     * @param {Object} context - the context used to instanciate the view\n     */\n     _extract_ranges: function(col_node, context) {\n        var ranges = [];\n        if (config.device.isMobile) {\n            ranges.push({\n                name: 'day',\n                string: _t('Day'),\n                span: 'day',\n                step: 'day',\n            });\n        }\n        var pyevalContext = py.dict.fromJSON(context || {});\n        _.each(_.pluck(col_node.children, 'attrs'), function(range) {\n            if (range.invisible && pyUtils.py_eval(range.invisible, {'context': pyevalContext})) {\n                return;\n            }\n            ranges.push(range);\n        });\n        return ranges;\n     },\n\n});\n\nviewRegistry.add('grid', GridView);\n\nreturn GridView;\n});\n", "odoo.define('hr.chat_mixin', function (require) {\n\"use strict\";\n\nconst { Component } = owl;\n\n// CHAT MIXIN\nconst ChatMixin = {\n    /**\n     * @override\n     */\n    _render: function () {\n        var self = this;\n        return this._super.apply(this, arguments).then(function () {\n            var $chat_button = self.$el.find('.o_employee_chat_btn');\n            $chat_button.off('click').on('click', self._onOpenChat.bind(self));\n        });\n    },\n\n    destroy: function () {\n        if (this.$el) {\n            this.$el.find('.o_employee_chat_btn').off('click');\n        }\n        return this._super();\n    },\n\n    async _onOpenChat(ev) {\n        ev.preventDefault();\n        ev.stopImmediatePropagation();\n        const messaging = await Component.env.services.messaging.get();\n        messaging.openChat({ employeeId: this.state.data.id });\n        return true;\n    },\n};\n\nreturn ChatMixin;\n});\n", "odoo.define('hr.employee_chat', function (require) {\n'use strict';\n    var viewRegistry = require('web.view_registry');\n\n    var FormController = require('web.FormController');\n    var FormView = require('web.FormView');\n    var FormRenderer = require('web.FormRenderer');\n\n    const ListController = require('web.ListController');\n    const ListView = require('web.ListView');\n\n    var KanbanController = require('web.KanbanController');\n    var KanbanView = require('web.KanbanView');\n    var KanbanRenderer = require('web.KanbanRenderer');\n    var KanbanRecord = require('web.KanbanRecord');\n\n    const ChatMixin = require('hr.chat_mixin');\n\n\n    const core = require('web.core');\n    const _t = core._t;\n\n    // USAGE OF CHAT MIXIN IN FORM VIEWS\n    var EmployeeFormRenderer = FormRenderer.extend(ChatMixin);\n\n    const EmployeeArchiveMixin = {\n        _getArchiveAction: function (id) {\n            return {\n                type: 'ir.actions.act_window',\n                name: _t('Employee Termination'),\n                res_model: 'hr.departure.wizard',\n                views: [[false, 'form']],\n                view_mode: 'form',\n                target: 'new',\n                context: {\n                    'active_id': id,\n                    'toggle_active': true,\n                }\n            }\n        }\n    };\n\n    const EmployeeFormController = FormController.extend(EmployeeArchiveMixin, {\n        /**\n         * Override the archive action to directly open the departure wizard\n         * @override\n         * @private\n         */\n        _getActionMenuItems: function (state) {\n            let self = this;\n            let actionMenuItems = this._super(...arguments);\n            const activeField = this.model.getActiveField(state);\n            if (actionMenuItems != null && this.archiveEnabled && activeField in state.data) {\n                //This might break in future version, don't see a better way however\n                let archiveString = _t(\"Archive\");\n                let archiveMenuItem = actionMenuItems.items.other.find(item => {return (item.description === archiveString)});\n                if (archiveMenuItem) {\n                    archiveMenuItem.callback = () => {self.do_action(\n                        self._getArchiveAction(self.model.localIdsToResIds([this.handle])[0]), {\n                        on_close: function () {\n                            self.update({}, {reload: true});\n                        }\n                    })}\n                }\n            }\n            return actionMenuItems;\n        }\n    })\n\n    var EmployeeFormView = FormView.extend({\n        config: _.extend({}, FormView.prototype.config, {\n            Controller: EmployeeFormController,\n            Renderer: EmployeeFormRenderer\n        }),\n    });\n\n    viewRegistry.add('hr_employee_form', EmployeeFormView);\n\n    const EmployeeListController = ListController.extend(EmployeeArchiveMixin, {\n        /**\n         * Override the archive action to directly open the departure wizard\n         * @override\n         * @private\n         */\n        _getActionMenuItems: function (state) {\n            let self = this;\n            let actionMenuItems = this._super(...arguments);\n            if (actionMenuItems != null && this.archiveEnabled) {\n                //This might break in future version, don't see a better way however\n                let archiveString = _t(\"Archive\");\n                let archiveMenuItem = actionMenuItems.items.other.find(item => {return (item.description === archiveString)});\n                if (archiveMenuItem) {\n                    //On this one we want the default action when multiple are selected\n                    let originalCallback = archiveMenuItem.callback;\n                    archiveMenuItem.callback = () => {\n                        let records = self.getSelectedRecords()\n                        if (records.length == 1 && records[0].data.active === true) {\n                            self.do_action(\n                                self._getArchiveAction(records[0].res_id), {\n                                on_close: function () {\n                                    self.update({}, {reload: true});\n                                }\n                            })\n                        } else {\n                            originalCallback();\n                        }\n                    };\n                }\n            }\n            return actionMenuItems;\n        }\n    });\n\n    const EmployeeListView = ListView.extend({\n        config: _.extend({}, ListView.prototype.config, {\n            Controller: EmployeeListController,\n        })\n    })\n\n    viewRegistry.add('hr_employee_list', EmployeeListView);\n\n    // USAGE OF CHAT MIXIN IN KANBAN VIEWS\n    var EmployeeKanbanRecord = KanbanRecord.extend(ChatMixin);\n\n    var EmployeeKanbanRenderer = KanbanRenderer.extend({\n        config: Object.assign({}, KanbanRenderer.prototype.config, {\n            KanbanRecord: EmployeeKanbanRecord,\n        }),\n    });\n\n    var EmployeeKanbanView = KanbanView.extend({\n        config: _.extend({}, KanbanView.prototype.config, {\n            Controller: KanbanController,\n            Renderer: EmployeeKanbanRenderer\n        }),\n    });\n\n    viewRegistry.add('hr_employee_kanban', EmployeeKanbanView);\n});\n", "/** @odoo-module **/\n\nimport FormController from 'web.FormController';\nimport FormView from 'web.FormView';\nimport viewRegistry from 'web.view_registry';\n\nvar EmployeeFormController = FormController.extend({\n    saveRecord: function () {\n        var self = this;\n        return this._super.apply(this, arguments).then(function () {\n            if (arguments[0].indexOf('lang') >= 0) {\n                self.do_action('reload_context');\n            }\n        });\n    },\n});\n\nvar EmployeeProfileFormView = FormView.extend({\n    config: _.extend({}, FormView.prototype.config, {\n        Controller: EmployeeFormController,\n    }),\n});\n\nviewRegistry.add('hr_employee_profile_form', EmployeeProfileFormView);\nexport default EmployeeProfileFormView;\n", "/** @odoo-module alias=hr.Many2OneAvatarEmployee **/\n\nimport fieldRegistry from 'web.field_registry';\n\nimport { Many2OneAvatarUser, KanbanMany2OneAvatarUser, KanbanMany2ManyAvatarUser, ListMany2ManyAvatarUser } from '@mail/js/m2x_avatar_user';\nimport { Many2ManyAvatarUser } from '@mail/js/m2x_avatar_user';\nimport { KanbanMany2ManyTagsAvatar, ListMany2ManyTagsAvatar } from 'web.relational_fields';\n\n\n// This module defines variants of the Many2OneAvatarUser and Many2ManyAvatarUser\n// field widgets, to support fields pointing to 'hr.employee'. It also defines the\n// kanban version of the Many2OneAvatarEmployee widget.\n//\n// Usage:\n//   <field name=\"employee_id\" widget=\"many2one_avatar_employee\"/>\n\nconst M2XAvatarEmployeeMixin = {\n    supportedModels: ['hr.employee', 'hr.employee.public'],\n\n    //----------------------------------------------------------------------\n    // Private\n    //----------------------------------------------------------------------\n\n    _getEmployeeID() {\n        return this.value.res_id;\n    },\n\n    //----------------------------------------------------------------------\n    // Handlers\n    //----------------------------------------------------------------------\n\n    /**\n     * @override\n     */\n    _onAvatarClicked(ev) {\n        ev.stopPropagation(); // in list view, prevent from opening the record\n        const employeeId = this._getEmployeeID(ev);\n        this._openChat({ employeeId: employeeId });\n    }\n};\n\nexport const Many2OneAvatarEmployee = Many2OneAvatarUser.extend(M2XAvatarEmployeeMixin);\nexport const KanbanMany2OneAvatarEmployee = KanbanMany2OneAvatarUser.extend(M2XAvatarEmployeeMixin);\n\nfieldRegistry.add('many2one_avatar_employee', Many2OneAvatarEmployee);\nfieldRegistry.add('kanban.many2one_avatar_employee', KanbanMany2OneAvatarEmployee);\n\nconst M2MAvatarEmployeeMixin = Object.assign(M2XAvatarEmployeeMixin, {\n    //----------------------------------------------------------------------\n    // Private\n    //----------------------------------------------------------------------\n\n    _getEmployeeID(ev) {\n        return parseInt(ev.target.getAttribute('data-id'), 10);\n    },\n});\n\nexport const Many2ManyAvatarEmployee = Many2ManyAvatarUser.extend(M2MAvatarEmployeeMixin, {});\n\nexport const KanbanMany2ManyAvatarEmployee = KanbanMany2ManyAvatarUser.extend(M2MAvatarEmployeeMixin, {});\n\nexport const ListMany2ManyAvatarEmployee = ListMany2ManyAvatarUser.extend(M2MAvatarEmployeeMixin, {});\n\nfieldRegistry.add('many2many_avatar_employee', Many2ManyAvatarEmployee);\nfieldRegistry.add('kanban.many2many_avatar_employee', KanbanMany2ManyAvatarEmployee);\nfieldRegistry.add('list.many2many_avatar_employee', ListMany2ManyAvatarEmployee);\n\nexport default {\n    Many2OneAvatarEmployee,\n};\n", "/** @odoo-module **/\n\n    import StandaloneFieldManagerMixin from 'web.StandaloneFieldManagerMixin';\n    import Widget from 'web.Widget';\n\n    import { Many2OneAvatarEmployee } from '@hr/js/m2x_avatar_employee';\n\n    const StandaloneM2OAvatarEmployee = Widget.extend(StandaloneFieldManagerMixin, {\n        className: 'o_standalone_avatar_employee',\n\n        /**\n         * @override\n         */\n        init(parent, value) {\n            this._super(...arguments);\n            StandaloneFieldManagerMixin.init.call(this);\n            this.value = value;\n        },\n        /**\n         * @override\n         */\n        willStart() {\n            return Promise.all([this._super(...arguments), this._makeAvatarWidget()]);\n        },\n        /**\n         * @override\n         */\n        start() {\n            this.avatarWidget.$el.appendTo(this.$el);\n            return this._super(...arguments);\n        },\n\n        //--------------------------------------------------------------------------\n        // Private\n        //--------------------------------------------------------------------------\n\n        /**\n         * Create a record, and initialize and start the avatar widget.\n         *\n         * @private\n         * @returns {Promise}\n         */\n        async _makeAvatarWidget() {\n            const modelName = 'hr.employee';\n            const fieldName = 'employee_id';\n            const recordId = await this.model.makeRecord(modelName, [{\n                name: fieldName,\n                relation: modelName,\n                type: 'many2one',\n                value: this.value,\n            }]);\n            const state = this.model.get(recordId);\n            this.avatarWidget = new Many2OneAvatarEmployee(this, fieldName, state);\n            this._registerWidget(recordId, fieldName, this.avatarWidget);\n            return this.avatarWidget.appendTo(document.createDocumentFragment());\n        },\n    });\n\n    export default StandaloneM2OAvatarEmployee;\n", "/** @odoo-module **/\n\nimport { registry } from \"@web/core/registry\";\nimport { preferencesItem } from \"@web/webclient/user_menu/user_menu_items\";\n\nexport function hrPreferencesItem(env)  {\n    return Object.assign(\n        {}, \n        preferencesItem(env),\n        {\n            description: env._t('My Profile'),\n        }\n    );\n}\n\nregistry.category(\"user_menuitems\").add('profile', hrPreferencesItem, { force: true })\n", "/** @odoo-module **/\n\nimport { registerNewModel } from '@mail/model/model_core';\nimport { attr, one2one } from '@mail/model/model_field';\nimport { insert, unlink } from '@mail/model/model_field_command';\n\nfunction factory(dependencies) {\n\n    class Employee extends dependencies['mail.model'] {\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        /**\n         * @static\n         * @param {Object} data\n         * @returns {Object}\n         */\n        static convertData(data) {\n            const data2 = {};\n            if ('id' in data) {\n                data2.id = data.id;\n            }\n            if ('user_id' in data) {\n                data2.hasCheckedUser = true;\n                if (!data.user_id) {\n                    data2.user = unlink();\n                } else {\n                    const partnerNameGet = data['user_partner_id'];\n                    const partnerData = {\n                        display_name: partnerNameGet[1],\n                        id: partnerNameGet[0],\n                    };\n                    const userNameGet = data['user_id'];\n                    const userData = {\n                        id: userNameGet[0],\n                        partner: insert(partnerData),\n                        display_name: userNameGet[1],\n                    };\n                    data2.user = insert(userData);\n                }\n            }\n            return data2;\n        }\n\n        /**\n         * Performs the `read` RPC on the `hr.employee.public`.\n         *\n         * @static\n         * @param {Object} param0\n         * @param {Object} param0.context\n         * @param {string[]} param0.fields\n         * @param {integer[]} param0.ids\n         */\n        static async performRpcRead({ context, fields, ids }) {\n            const employeesData = await this.env.services.rpc({\n                model: 'hr.employee.public',\n                method: 'read',\n                args: [ids, fields],\n                kwargs: {\n                    context,\n                },\n            });\n            this.messaging.models['hr.employee'].insert(employeesData.map(employeeData =>\n                this.messaging.models['hr.employee'].convertData(employeeData)\n            ));\n        }\n\n        /**\n         * Performs the `search_read` RPC on `hr.employee.public`.\n         *\n         * @static\n         * @param {Object} param0\n         * @param {Object} param0.context\n         * @param {Array[]} param0.domain\n         * @param {string[]} param0.fields\n         */\n        static async performRpcSearchRead({ context, domain, fields }) {\n            const employeesData = await this.env.services.rpc({\n                model: 'hr.employee.public',\n                method: 'search_read',\n                kwargs: {\n                    context,\n                    domain,\n                    fields,\n                },\n            });\n            this.messaging.models['hr.employee'].insert(employeesData.map(employeeData =>\n                this.messaging.models['hr.employee'].convertData(employeeData)\n            ));\n        }\n\n        /**\n         * Checks whether this employee has a related user and partner and links\n         * them if applicable.\n         */\n        async checkIsUser() {\n            return this.messaging.models['hr.employee'].performRpcRead({\n                ids: [this.id],\n                fields: ['user_id', 'user_partner_id'],\n                context: { active_test: false },\n            });\n        }\n\n        /**\n         * Gets the chat between the user of this employee and the current user.\n         *\n         * If a chat is not appropriate, a notification is displayed instead.\n         *\n         * @returns {mail.thread|undefined}\n         */\n        async getChat() {\n            if (!this.user && !this.hasCheckedUser) {\n                await this.async(() => this.checkIsUser());\n            }\n            // prevent chatting with non-users\n            if (!this.user) {\n                this.env.services['notification'].notify({\n                    message: this.env._t(\"You can only chat with employees that have a dedicated user.\"),\n                    type: 'info',\n                });\n                return;\n            }\n            return this.user.getChat();\n        }\n\n        /**\n         * Opens a chat between the user of this employee and the current user\n         * and returns it.\n         *\n         * If a chat is not appropriate, a notification is displayed instead.\n         *\n         * @param {Object} [options] forwarded to @see `mail.thread:open()`\n         * @returns {mail.thread|undefined}\n         */\n        async openChat(options) {\n            const chat = await this.async(() => this.getChat());\n            if (!chat) {\n                return;\n            }\n            await this.async(() => chat.open(options));\n            return chat;\n        }\n\n        /**\n         * Opens the most appropriate view that is a profile for this employee.\n         */\n        async openProfile(model = 'hr.employee.public') {\n            return this.messaging.openDocument({\n                id: this.id,\n                model: model,\n            });\n        }\n\n    }\n\n    Employee.fields = {\n        /**\n         * Whether an attempt was already made to fetch the user corresponding\n         * to this employee. This prevents doing the same RPC multiple times.\n         */\n        hasCheckedUser: attr({\n            default: false,\n        }),\n        /**\n         * Unique identifier for this employee.\n         */\n        id: attr({\n            readonly: true,\n            required: true,\n        }),\n        /**\n         * Partner related to this employee.\n         */\n        partner: one2one('mail.partner', {\n            inverse: 'employee',\n            related: 'user.partner',\n        }),\n        /**\n         * User related to this employee.\n         */\n        user: one2one('mail.user', {\n            inverse: 'employee',\n        }),\n    };\n    Employee.identifyingFields = ['id'];\n    Employee.modelName = 'hr.employee';\n\n    return Employee;\n}\n\nregisterNewModel('hr.employee', factory);\n", "/** @odoo-module **/\n\nimport {\n    registerInstancePatchModel,\n} from '@mail/model/model_core';\n\nregisterInstancePatchModel('mail.messaging', 'hr/static/src/models/messaging/messaging.js', {\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     * @param {integer} [param0.employeeId]\n     */\n    async getChat({ employeeId }) {\n        if (employeeId) {\n            const employee = this.messaging.models['hr.employee'].insert({ id: employeeId });\n            return employee.getChat();\n        }\n        return this._super(...arguments);\n    },\n    /**\n     * @override\n     */\n    async openProfile({ id, model }) {\n        if (model === 'hr.employee' || model === 'hr.employee.public') {\n            const employee = this.messaging.models['hr.employee'].insert({ id });\n            return employee.openProfile(model);\n        }\n        return this._super(...arguments);\n    },\n});\n", "/** @odoo-module **/\n\nimport {\n    registerInstancePatchModel,\n    registerFieldPatchModel,\n} from '@mail/model/model_core';\nimport { attr, one2one } from '@mail/model/model_field';\n\nregisterInstancePatchModel('mail.partner', 'hr/static/src/models/partner/partner.js', {\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Checks whether this partner has a related employee and links them if\n     * applicable.\n     */\n    async checkIsEmployee() {\n        await this.async(() => this.messaging.models['hr.employee'].performRpcSearchRead({\n            context: { active_test: false },\n            domain: [['user_partner_id', '=', this.id]],\n            fields: ['user_id', 'user_partner_id'],\n        }));\n        this.update({ hasCheckedEmployee: true });\n    },\n    /**\n     * When a partner is an employee, its employee profile contains more useful\n     * information to know who he is than its partner profile.\n     *\n     * @override\n     */\n    async openProfile() {\n        // limitation of patch, `this._super` becomes unavailable after `await`\n        const _super = this._super.bind(this, ...arguments);\n        if (!this.employee && !this.hasCheckedEmployee) {\n            await this.async(() => this.checkIsEmployee());\n        }\n        if (this.employee) {\n            return this.employee.openProfile();\n        }\n        return _super();\n    },\n});\n\nregisterFieldPatchModel('mail.partner', 'hr/static/src/models/partner/partner.js', {\n    /**\n     * Employee related to this partner. It is computed through\n     * the inverse relation and should be considered read-only.\n     */\n    employee: one2one('hr.employee', {\n        inverse: 'partner',\n    }),\n    /**\n     * Whether an attempt was already made to fetch the employee corresponding\n     * to this partner. This prevents doing the same RPC multiple times.\n     */\n    hasCheckedEmployee: attr({\n        default: false,\n    }),\n});\n", "/** @odoo-module **/\n\nimport {\n    registerFieldPatchModel,\n} from '@mail/model/model_core';\nimport { one2one } from '@mail/model/model_field';\n\nregisterFieldPatchModel('mail.user', 'hr/static/src/models/user/user.js', {\n    /**\n     * Employee related to this user.\n     */\n    employee: one2one('hr.employee', {\n        inverse: 'user',\n    }),\n});\n\n", "/** @odoo-module alias=hr_timesheet.task_with_hours **/\n\nimport field_registry from 'web.field_registry';\nimport { FieldMany2One } from 'web.relational_fields';\n\nconst TaskWithHours = FieldMany2One.extend({\n    /**\n     * @override\n     */\n    init: function () {\n        this._super.apply(this, arguments);\n        this.additionalContext.hr_timesheet_display_remaining_hours = true;\n        // By default, we keep the no_quick_create value or we set to false.\n        this.nodeOptions.no_quick_create = this.nodeOptions.no_quick_create || false;\n    },\n    /**\n     * @override\n     */\n    _getDisplayNameWithoutHours: function (value) {\n        return value && value.split('\\u00A0')[0];\n    },\n    /**\n     * @override\n     * @private\n     */\n    _onInputClick: function () {\n        const context = Object.assign(\n            this.record.getContext(this.recordParams),\n            this.additionalContext\n        );\n        // We don't want to quick create if no project is set in the timesheet\n        this.nodeOptions.no_quick_create =\n            this.nodeOptions.no_quick_create || (!('default_project_id' in context) || !context.default_project_id);\n        this._super.apply(this, arguments);\n    },\n    /**\n     * @override\n     * @private\n     */\n    _renderEdit: function (){\n        this.m2o_value = this._getDisplayNameWithoutHours(this.m2o_value);\n        this._super.apply(this, arguments);\n    },\n});\n\nfield_registry.add('task_with_hours', TaskWithHours);\n\nexport default TaskWithHours;\n", "odoo.define('hr_timesheet.timesheet_uom', function (require) {\n'use strict';\n\nconst { registry } = require(\"@web/core/registry\");\nconst basicFields = require('web.basic_fields');\nconst fieldUtils = require('web.field_utils');\n\nconst fieldRegistry = require('web.field_registry');\n\n// We need the field registry to be populated, as we bind the\n// timesheet_uom widget on existing field widgets.\nrequire('web._field_registry');\n\nconst session = require('web.session');\n\nconst TimesheetUOMMultiCompanyMixin = {\n    init: function(parent, name, record, options) {\n        this._super(parent, name, record, options);\n        const currentCompanyId = session.user_context.allowed_company_ids[0];\n        const currentCompany = session.user_companies.allowed_companies[currentCompanyId];\n        this.currentCompanyTimesheetUOMFactor = currentCompany.timesheet_uom_factor || 1;\n    }\n};\n\n/**\n * Extend the float factor widget to set default value for timesheet\n * use case. The 'factor' is forced to be the UoM timesheet\n * conversion from the session info.\n **/\nconst FieldTimesheetFactor = basicFields.FieldFloatFactor.extend(TimesheetUOMMultiCompanyMixin).extend({\n    formatType: 'float_factor',\n    /**\n     * Override init to tweak options depending on the session info\n     *\n     * @constructor\n     * @override\n     */\n    init: function(parent, name, record, options) {\n        this._super(parent, name, record, options);\n\n        // force factor in format and parse options\n        this.nodeOptions.factor = this.currentCompanyTimesheetUOMFactor;\n        this.parseOptions.factor = this.currentCompanyTimesheetUOMFactor;\n    },\n});\n\n\n/**\n * Extend the float toggle widget to set default value for timesheet\n * use case. The 'range' is different from the default one of the\n * native widget, and the 'factor' is forced to be the UoM timesheet\n * conversion.\n **/\nconst FieldTimesheetToggle = basicFields.FieldFloatToggle.extend(TimesheetUOMMultiCompanyMixin).extend({\n    formatType: 'float_factor',\n    /**\n     * Override init to tweak options depending on the session info\n     *\n     * @constructor\n     * @override\n     */\n    init: function(parent, name, record, options) {\n        options = options || {};\n        var fieldsInfo = record.fieldsInfo[options.viewType || 'default'];\n        var attrs = options.attrs || (fieldsInfo && fieldsInfo[name]) || {};\n\n        var hasRange = _.contains(_.keys(attrs.options || {}), 'range');\n\n        this._super(parent, name, record, options);\n\n        // Set the timesheet widget options: the range can be customized\n        // by setting the option on the field in the view. The factor\n        // is forced to be the UoM conversion factor.\n        if (!hasRange) {\n            this.nodeOptions.range = [0.00, 1.00, 0.50];\n        }\n        this.nodeOptions.factor = this.currentCompanyTimesheetUOMFactor;\n    },\n});\n\n\n/**\n * Extend float time widget\n */\nconst FieldTimesheetTime = basicFields.FieldFloatTime.extend(TimesheetUOMMultiCompanyMixin).extend({\n    init: function () {\n        this._super.apply(this, arguments);\n        this.nodeOptions.factor = this.currentCompanyTimesheetUOMFactor;\n        this.parseOptions.factor = this.currentCompanyTimesheetUOMFactor;\n    }\n});\n\nconst timesheetUomService = {\n    dependencies: [\"legacy_session\"],\n    start() {\n        const timesheetUomInfo = {\n            widget: null,\n            factor: 1,\n        };\n        if (session.user_context &&\n            session.user_context.allowed_company_ids &&\n            session.user_context.allowed_company_ids.length) {\n            const currentCompanyId = session.user_context.allowed_company_ids[0];\n            const currentCompany = session.user_companies.allowed_companies[currentCompanyId];\n            const currentCompanyTimesheetUOMId = currentCompany.timesheet_uom_id || false;\n            timesheetUomInfo.factor = currentCompany.timesheet_uom_factor || 1;\n            if (currentCompanyTimesheetUOMId) {\n                timesheetUomInfo.widget = session.uom_ids[currentCompanyTimesheetUOMId].timesheet_widget;\n            }\n        }\n\n        /**\n         * Binding depending on Company Preference\n         *\n         * determine wich widget will be the timesheet one.\n         * Simply match the 'timesheet_uom' widget key with the correct\n         * implementation (float_time, float_toggle, ...). The default\n         * value will be 'float_factor'.\n         **/\n        const widgetName = timesheetUomInfo.widget || 'float_factor';\n\n        let FieldTimesheetUom = null;\n\n        if (widgetName === 'float_toggle') {\n            FieldTimesheetUom = FieldTimesheetToggle;\n        } else if (widgetName === 'float_time') {\n            FieldTimesheetUom = FieldTimesheetTime;\n        } else {\n            FieldTimesheetUom = (\n                fieldRegistry.get(widgetName) &&\n                fieldRegistry.get(widgetName).extend({ })\n            ) || FieldTimesheetFactor;\n        }\n        fieldRegistry.add('timesheet_uom', FieldTimesheetUom);\n\n        // widget timesheet_uom_no_toggle is the same as timesheet_uom but without toggle.\n        // We can modify easly huge amount of days.\n        let FieldTimesheetUomWithoutToggle = null;\n        if (widgetName === 'float_toggle') {\n            FieldTimesheetUomWithoutToggle = FieldTimesheetFactor;\n        } else {\n            FieldTimesheetUomWithoutToggle = FieldTimesheetTime;\n        }\n        fieldRegistry.add('timesheet_uom_no_toggle', FieldTimesheetUomWithoutToggle);\n\n\n        // bind the formatter and parser method, and tweak the options\n        const _tweak_options = (options) => {\n            if (!_.contains(options, 'factor')) {\n                options.factor = timesheetUomInfo.factor;\n            }\n            return options;\n        };\n\n        fieldUtils.format.timesheet_uom = function(value, field, options) {\n            options = _tweak_options(options || { });\n            const formatter = fieldUtils.format[FieldTimesheetUom.prototype.formatType];\n            return formatter(value, field, options);\n        };\n\n        fieldUtils.parse.timesheet_uom = function(value, field, options) {\n            options = _tweak_options(options || { });\n            const parser = fieldUtils.parse[FieldTimesheetUom.prototype.formatType];\n            return parser(value, field, options);\n        };\n\n        fieldUtils.format.timesheet_uom_no_toggle = function(value, field, options) {\n            options = _tweak_options(options || { });\n            const formatter = fieldUtils.format[FieldTimesheetUom.prototype.formatType];\n            return formatter(value, field, options);\n        };\n\n        fieldUtils.parse.timesheet_uom_no_toggle = function(value, field, options) {\n            options = _tweak_options(options || { });\n            const parser = fieldUtils.parse[FieldTimesheetUom.prototype.formatType];\n            return parser(value, field, options);\n        };\n        return timesheetUomInfo;\n    },\n};\nregistry.category(\"services\").add(\"timesheet_uom\", timesheetUomService);\n\nreturn {\n    FieldTimesheetFactor,\n    FieldTimesheetTime,\n    FieldTimesheetToggle,\n    timesheetUomService,\n};\n\n});\n", "odoo.define('hr_timesheet.timesheet_factor', function (require) {\n'use strict';\n\nconst timesheetUomFields = require('hr_timesheet.timesheet_uom');\nconst fieldUtils = require('web.field_utils');\nconst fieldRegistry = require('web.field_registry');\n\nfieldRegistry.add('timesheet_factor', timesheetUomFields.FieldTimesheetFactor);\n\nfieldUtils.format.timesheet_factor = function(value, field, options) {\n    const formatter = fieldUtils.format[timesheetUomFields.FieldTimesheetFactor.prototype.formatType];\n    return formatter(value, field, options);\n};\n\nfieldUtils.parse.timesheet_factor = function(value, field, options) {\n    const parser = fieldUtils.parse[timesheetUomFields.FieldTimesheetFactor.prototype.formatType];\n    return parser(value, field, options);\n};\n\n});\n", "odoo.define('hr_timesheet.res.config.form', function (require) {\n    \"use strict\";\n\n    const core = require('web.core');\n    const config = require('web.config');\n    const Dialog = require('web.Dialog');\n    const viewRegistry = require('web.view_registry');\n    const BaseSetting = require('base.settings');\n    const QWeb = core.qweb;\n    \n    const _t = core._t;\n\n    const TimesheetConfigQRCodeDialog = Dialog.extend({\n        /**\n         * @override\n         */\n        init: function (parent, url) {\n            this.url = _.str.sprintf(\"/report/barcode/?type=QR&value=%s&width=256&height=256&humanreadable=1\", url);\n            this._super(parent, {\n                title: _t('Download our App'),\n                buttons: [{\n                    text: _t('View App'),\n                    classes: 'btn-primary',\n                    click: function() {\n                        window.open(url, '_blank');\n                    }\n                }, {\n                    text: _t('Discard'),\n                    close: true\n                }],\n                $content: QWeb.render('hr_timesheet_qr_code', {widget: this})\n            });\n        },\n    });\n\n    const TimesheetConfigQRCodeMixin = {\n        async _renderView() {\n            const self = this;\n            await this._super(...arguments);\n            const google_url = \"https://play.google.com/store/apps/details?id=com.odoo.OdooTimesheets\";\n            const apple_url = \"https://apps.apple.com/be/app/awesome-timesheet/id1078657549\";\n            this.$el.find('img.o_config_app_store').on('click', function(event) {\n                event.preventDefault();\n                if (!config.device.isMobile) {\n                    new TimesheetConfigQRCodeDialog(this, apple_url).open();\n                } else {\n                    self.do_action({type: 'ir.actions.act_url', url: apple_url});\n                }\n            });\n            this.$el.find('img.o_config_play_store').on('click', function(event) {\n                event.preventDefault();\n                if (!config.device.isMobile) {\n                    new TimesheetConfigQRCodeDialog(this, google_url).open();\n                } else {\n                    self.do_action({type: 'ir.actions.act_url', url: google_url});\n                }\n            });\n        },\n    };\n\n\n    var TimesheetConfigFormRenderer = BaseSetting.Renderer.extend(TimesheetConfigQRCodeMixin);\n    const BaseSettingView = viewRegistry.get('base_settings');\n    var TimesheetConfigFormView = BaseSettingView.extend({\n        config: _.extend({}, BaseSettingView.prototype.config, {\n            Renderer : TimesheetConfigFormRenderer,\n        }),\n    });\n\n    viewRegistry.add('hr_timesheet_config_form', TimesheetConfigFormView);\n\n    return {TimesheetConfigQRCodeDialog, TimesheetConfigQRCodeMixin, TimesheetConfigFormRenderer, TimesheetConfigFormView};\n\n});\n", "odoo.define('hr_timesheet.qr_code_action', function (require) {\n    \"use strict\";\n\nconst AbstractAction = require('web.AbstractAction');\nconst core = require('web.core');\nconst config = require('web.config');\n\nconst QRModalAction = AbstractAction.extend({\n    template: 'hr_timesheet_qr_code',\n    xmlDependencies: ['/hr_timesheet/static/src/xml/qr_modal_template.xml'],\n\n    init: function(parent, action){\n        this._super.apply(this, arguments);\n        this.url = _.str.sprintf(\"/report/barcode/?type=QR&value=%s&width=256&height=256&humanreadable=1\", action.params.url);\n    },\n});\n\ncore.action_registry.add('timesheet_qr_code_modal', QRModalAction);\n});\n", "/** @odoo-module **/\n\nimport { ProjectGraphView } from \"@project/js/project_graph_view\";\nimport { hrTimesheetGraphModel } from \"./timesheet_graph_model\";\nimport { registry } from \"@web/core/registry\";\n\nconst viewRegistry = registry.category(\"views\");\n\nexport class hrTimesheetGraphView extends ProjectGraphView {}\nhrTimesheetGraphView.Model = hrTimesheetGraphModel;\n\nviewRegistry.add(\"hr_timesheet_graphview\", hrTimesheetGraphView);\n", "/** @odoo-module **/\n\nimport { GraphModel } from \"@web/views/graph/graph_model\";\n\nconst FIELDS = [\n    'unit_amount', 'effective_hours', 'planned_hours', 'remaining_hours', 'total_hours_spent', 'subtask_effective_hours',\n    'overtime', 'number_hours', 'difference', 'hours_effective', 'hours_planned', 'timesheet_unit_amount'\n];\n\nexport class hrTimesheetGraphModel extends GraphModel {\n    /**\n     * @override\n     */\n    setup(params, services) {\n        super.setup(...arguments);\n        this.companyService = services.company;\n    }\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Override processDataPoints to take into account the analytic line uom.\n     * @override\n     */\n    _getProcessedDataPoints() {\n        const currentCompany = this.companyService.currentCompany;\n        const factor = currentCompany.timesheet_uom_factor || 1;\n        if (factor !== 1 && FIELDS.includes(this.metaData.measure)) {\n            // recalculate the Duration values according to the timesheet_uom_factor\n            for (const dataPt of this.dataPoints) {\n                dataPt.value *= factor;\n            }\n        }\n        return super._getProcessedDataPoints(...arguments);\n    }\n}\nhrTimesheetGraphModel.services = [...GraphModel.services, \"company\"];\n", "odoo.define('timer.timer', function (require) {\n\"use strict\";\n\nvar fieldRegistry = require('web.field_registry');\nvar AbstractField = require('web.AbstractField');\nvar Timer = require('timer.Timer');\n\nvar TimerFieldWidget = AbstractField.extend({\n\n    /**\n     * @override\n     * @private\n     */\n    isSet: function () {\n        return true;\n    },\n    /**\n     * @override\n     * @private\n     */\n    _render: function () {\n        this._super.apply(this, arguments);\n        this._startTimeCounter();\n    },\n    /**\n     * @override\n     */\n    destroy: function () {\n        this._super.apply(this, arguments);\n        clearInterval(this.timer);\n    },\n    /**\n     * @private\n     */\n    _startTimeCounter: async function () {\n        if (this.record.data.timer_start) {\n            const serverTime = this.record.data.timer_pause || await this._getServerTime();\n            this.time = Timer.createTimer(0, this.record.data.timer_start, serverTime);\n            this.$el.text(this.time.toString());\n            this.timer = setInterval(() => {\n                if (this.record.data.timer_pause) {\n                    clearInterval(this.timer);\n                } else {\n                    this.time.addSecond();\n                    this.$el.text(this.time.toString());\n                }\n            }, 1000);\n        } else if (!this.record.data.timer_pause){\n            clearInterval(this.timer);\n        }\n    },\n    _getServerTime: function () {\n        return this._rpc({\n            model: 'timer.timer',\n            method: 'get_server_time',\n            args: []\n        });\n    }\n});\n\nfieldRegistry.add('timer_timer', TimerFieldWidget);\n\n});\n", "odoo.define('timer.Timer', function (require) {\n\"use strict\";\n\n    /**\n     * This class improves the timer display using the\n     * unit_amount field on account.analytic.line.\n     */\n    class Timer {\n        constructor(hours, minutes, seconds) {\n            this.hours = hours;\n            this.minutes = minutes;\n            this.seconds = seconds;\n        }\n\n        addHours(hours) {\n            this.hours += hours;\n        }\n\n        addMinutes(minutes) {\n            minutes += this.minutes;\n\n            this.minutes = minutes % 60;\n            this.addHours(Math.floor(minutes / 60));\n        }\n\n        addSeconds(seconds) {\n            seconds += this.seconds;\n            this.seconds = seconds % 60;\n            this.addMinutes(Math.floor(seconds / 60));\n        }\n\n        display2digits(number) {\n            return number > 9 ? \"\" + number : \"0\" + number;\n        }\n\n        addSecond() {\n            this.seconds += 1;\n            if (this.seconds === 60) {\n                this.minutes += 1;\n                this.seconds = 0;\n\n                if (this.minutes === 60) {\n                    this.hours += 1;\n                    this.minutes = 0;\n                }\n            }\n        }\n\n        addTime(time) {\n            if (typeof time == 'string' && time.indexOf(':') !== -1) {\n                let [hour, minute, second] = time.split(':');\n\n                hour = parseInt(hour);\n                minute = parseInt(minute);\n                second = (second === undefined) ? 0 : parseInt(second);\n\n                this.addSeconds(second);\n                this.addMinutes(minute);\n                this.addHours(hour);\n            }\n        }\n\n        convertToFloat() {\n            return (this.hours * 60 + this.minutes) * 60 / 3600;\n        }\n\n        convertToSeconds() {\n            return (this.hours * 60 + this.minutes) * 60 + this.seconds;\n        }\n\n        toString() {\n            const time = {\n                hours: this.display2digits(this.hours),\n                minutes: this.display2digits(this.minutes),\n                seconds: this.display2digits(this.seconds)\n            };\n\n            return moment(time).format(\"HH:mm:ss\");\n        }\n    }\n\n        /**\n         * Convert float to time\n         * @param {number} float\n         */\n        Timer.convertFloatToTime = function (float) {\n            if (float === 0) {\n                return new Timer(0, 0, 0);\n            }\n\n            let minutes = float % 1;\n            const hours = float - minutes;\n            minutes *= 60;\n\n            return new Timer(hours, Math.round(minutes), 0);\n        };\n\n        /**\n         * Create timer\n         * @param {number} unit_amount\n         * @param {String} timer_start\n         * @param {String} serverTime\n         */\n        Timer.createTimer = function (unit_amount, timer_start, serverTime) {\n            const timer = this.convertFloatToTime(unit_amount);\n\n            const time_moment = moment.utc(Math.abs(moment.utc(serverTime)\n                .diff(moment.utc(timer_start))\n            ));\n            const time = {\n                hours: timer.display2digits(time_moment.hours()),\n                minutes: timer.display2digits(time_moment.minutes()),\n                seconds: timer.display2digits(time_moment.seconds())\n            };\n            timer.addTime(\n                `${time.hours}:${time.minutes}:${time.seconds}`\n            );\n\n            return timer;\n        };\n\n    return Timer;\n\n});\n", "odoo.define('timer.timer_toggle_button', function (require) {\n\"use strict\";\n\nconst fieldRegistry = require('web.field_registry');\nconst { FieldToggleBoolean } = require(\"web.basic_fields\");\nconst { _lt } = require('web.core');\n\n/**\n * The TimerToggleButton is used to display correctly the button\n * to start or stop a timer for a timesheet in kanban, list and grid\n * views.\n */\nconst TimerToggleButton = FieldToggleBoolean.extend({\n    /**\n     * @override\n     * @private\n     */\n    _render: function () {\n        // When the is_timer_running field is false, then the button is used to start the timer\n        const title = this.value ? _lt('Stop') : _lt('Play');\n        const name = this.value ? 'action_timer_stop' : 'action_timer_start';\n        const label = this.value ? _lt('Stop') : _lt('Start');\n\n        this.$('i')\n            .addClass('fa')\n            .toggleClass('fa-stop-circle o-timer-stop-button', this.value)\n            .toggleClass('fa-play-circle o-timer-play-button', !this.value)\n            .attr('title', title);\n\n        this.$el.addClass('o-timer-button');\n        this.$el.attr('title', title);\n        this.$el.attr('name', name);\n        this.$el.attr('aria-label', label);\n        this.$el.attr('aria-pressed', this.value);\n        this.$el.attr('type', 'button');\n        this.$el.attr('role', 'button');\n    },\n    /**\n     * Toggle the button\n     *\n     * When the user click on this button,\n     *  -   the action \"action_timer_start\" is called\n     *      into the account.analytic.line model,\n     *      if the value of is_timer_running field is set on false.\n     *  -   the action \"action_timer_stop\" is called\n     *      into the account.analytic.line model,\n     *      if the value of is_timer_running field is set on true.\n     * Then we change the value of the is_timer_running.\n     * @override\n     * @private\n     * @param {MouseEvent} event\n     */\n    _onToggleButton: async function (event) {\n        const context = this.record.getContext();\n        event.stopPropagation();\n        const result = await this._rpc({\n            model: this.model,\n            method: this._getActionButton(),\n            context: context,\n            args: [this.res_id]\n        });\n\n        this.trigger_up('timer_changed', {\n            id: this.res_id,\n            is_timer_running: !this.value\n        });\n\n        this._setValue(!this.value);\n    },\n    _getActionButton: function () {\n        return this.value ? 'action_timer_stop' : 'action_timer_start';\n    }\n});\n\nfieldRegistry.add('timer_toggle_button', TimerToggleButton);\n\nreturn TimerToggleButton;\n\n});\n", "odoo.define('timesheet_grid.timesheet_uom', function (require) {\n    'use strict';\n\n    const gridComponentRegistry = require('web_grid.component_registry');\n    const gridComponent = require('web_grid.components');\n    const session = require('web.session');\n    const { registry } = require(\"@web/core/registry\");\n\n    const TimesheetUOMMultiCompanyMixin = (component) => class extends component {\n        willStart() {\n            if (super.willStart) super.willStart(...arguments);\n            const currentCompanyId = session.user_context.allowed_company_ids[0];\n            const currentCompany = session.user_companies.allowed_companies[currentCompanyId];\n            this.currentCompanyTimesheetUOMFactor = currentCompany.timesheet_uom_factor || 1;\n        }\n    };\n\n    /**\n     * Extend the float toggle widget to set default value for timesheet\n     * use case. The 'range' is different from the default one of the\n     * native widget, and the 'factor' is forced to be the UoM timesheet\n     * conversion.\n     **/\n    class FloatFactorComponentTimesheet extends TimesheetUOMMultiCompanyMixin(gridComponent.FloatFactorComponent) {\n        //----------------------------------------------------------------------\n        // Getters\n        //----------------------------------------------------------------------\n        /**\n         * Returns the additional options pass to the format function.\n         *\n         * @returns {Object}\n         */\n        get fieldOptions() {\n            const fieldOptions = Object.assign({}, this.props.nodeOptions);\n            // force factor in format and parse options\n            fieldOptions.factor = this.currentCompanyTimesheetUOMFactor;\n            return fieldOptions;\n        }\n    }\n    class FloatToggleComponentTimesheet extends TimesheetUOMMultiCompanyMixin(gridComponent.FloatToggleComponent) {\n        //----------------------------------------------------------------------\n        // Getters\n        //----------------------------------------------------------------------\n        /**\n         * Returns the additional options pass to the format function.\n         *\n         * @returns {Object}\n         */\n        get fieldOptions() {\n            const fieldOptions = Object.assign({}, this.props.nodeOptions);\n            // force factor in format and parse options\n            fieldOptions.factor = this.currentCompanyTimesheetUOMFactor;\n            const hasRange = Object.keys(this.props.nodeOptions || {}).includes('range');\n            // the range can be customized by setting the\n            // option on the field in the view arch\n            if (!hasRange) {\n                fieldOptions.range = [0.00, 0.50, 1.00];\n            }\n            return fieldOptions;\n        }\n    }\n\n    const timesheetUomGridService = {\n        dependencies: [\"timesheet_uom\"],\n        start(env, { timesheet_uom }) {\n            const widgetName = timesheet_uom.widget || 'float_factor';\n\n            /**\n             * Binding depending on Company Preference\n             *\n             * determine which component will be the timesheet one.\n             * Simply match the 'timesheet_uom' component key with the correct\n             * implementation (float_time, float_toggle, ...). The default\n             * value will be 'float_factor'.\n             **/\n\n            let FieldTimesheetUom;\n            if (widgetName === \"float_toggle\") {\n                FieldTimesheetUom = FloatToggleComponentTimesheet;\n            } else if (widgetName === \"float_factor\") {\n                FieldTimesheetUom = FloatFactorComponentTimesheet;\n            } else {\n                FieldTimesheetUom = (gridComponentRegistry.get(widgetName) || FloatFactorComponentTimesheet);\n            }\n            gridComponentRegistry.add('timesheet_uom', FieldTimesheetUom);\n        },\n    };\n    registry.category(\"services\").add(\"timesheet_uom_grid\", timesheetUomGridService);\n\nreturn {\n    FloatFactorComponentTimesheet,\n    FloatToggleComponentTimesheet,\n    timesheetUomGridService,\n};\n\n});\n", "odoo.define('thimesheet_grid.timesheet_uom_timer', function (require) {\n\"use strict\";\n\nconst fieldRegistry = require('web.field_registry');\nconst fieldUtils = require('web.field_utils');\nconst TimesheetUom = require('hr_timesheet.timesheet_uom');\nconst { _lt } = require('web.core');\nconst { registry } = require(\"@web/core/registry\");\nconst Timer = require('timer.Timer');\nconst session = require('web.session');\n\nconst TimesheetUomDisplayTimer = TimesheetUom.FieldTimesheetTime.extend({\n    /**\n     * Refresh the Widget content so that it shows the timer elapsed time.\n     *\n     * @private\n     */\n    _refreshTime() {\n        if (this.$el.children().length) {\n            this.$el.contents()[1].replaceWith(this.time.toString());\n        } else {\n            this.$el.text(this.time.toString());\n        }\n    },\n    /**\n     * Display the timer elapsed time.\n     *\n     * @private\n     */\n    _startTimeCounter() {\n        // Check if the timer_start exists and it's not false\n        // In other word, when user clicks on play button, this button\n        if (this.recordData.timer_start && !this.recordData.timer_pause && !this.rendererIsSample) {\n            this.time = Timer.createTimer(this.recordData.unit_amount, this.recordData.timer_start, this.serverTime);\n            if (this.time) {\n                this.$el.addClass('font-weight-bold text-danger');\n                this._refreshTime();\n                this.timer = setInterval(() => {\n                    this.time = Timer.createTimer(this.recordData.unit_amount, this.recordData.timer_start, this.serverTime);\n                    this._refreshTime();\n                }, 1000);\n            } else {\n                clearTimeout(this.timer);\n                this.$el.removeClass('font-weight-bold text-danger');\n            }\n        }\n    },\n    /**\n     * @override\n     */\n    async _render() {\n        await this._super.apply(this, arguments);\n        this._startTimeCounter();\n    },\n});\n\n/**\n * Extend float time widget to add the using of a timer for duration\n * (unit_amount) field.\n */\nconst FieldTimesheetTimeTimer = TimesheetUomDisplayTimer.extend({\n    init: function () {\n        this._super.apply(this, arguments);\n        this.isTimerRunning = this.record.data.is_timer_running;\n        this.rendererIsSample = arguments[0].state.isSample; // This only works with list_views.\n    },\n\n    willstart() {\n        const timePromise = this._rpc({\n            model: 'timer.timer',\n            method: 'get_server_time',\n            args: []\n        }).then((time) => {\n            this.serverTime = time;\n        });\n        return Promise.all([\n            this._super(...arguments),\n            timePromise,\n        ]);\n    },\n\n    _render: async function () {\n        await this._super.apply(this, arguments);\n        const my_timesheets = this.record.getContext().my_timesheet_display_timer;\n        const display_timer = this.record.data.display_timer;\n        if (my_timesheets && display_timer && this.record.viewType === 'list') {\n            const title = this.isTimerRunning ? _lt('Stop') : _lt('Play');\n            const name = this.isTimerRunning ? 'action_timer_stop' : 'action_timer_start';\n            const label = this.isTimerRunning ? _lt('Stop') : _lt('Start');\n\n            const button = $('<button>', {\n                'class': 'o_icon_button o-timer-button mr8',\n                'title': title,\n                'name': name,\n                'aria-label': label,\n                'aria-pressed': this.isTimerRunning,\n                'type': 'button',\n                'role': 'button',\n            });\n            button.html('<i/>');\n            button.find('i')\n                .addClass('fa')\n                .toggleClass('fa-stop-circle o-timer-stop-button', this.isTimerRunning)\n                .toggleClass('fa-play-circle o-timer-play-button', !this.isTimerRunning)\n                .attr('title', title);\n            button.on('click', this._onToggleButton.bind(this));\n            this.$el.prepend(button);\n        }\n    },\n\n    _onToggleButton: async function (event) {\n        const context = this.record.getContext();\n        event.stopPropagation();\n        const result = await this._rpc({\n            model: this.model,\n            method: this._getActionButton(),\n            context: context,\n            args: [this.res_id]\n        });\n\n        this.trigger_up('field_changed', {\n            dataPointID: this.dataPointID,\n            changes: {\n                'is_timer_running': !this.isTimerRunning,\n            },\n        });\n        this.trigger_up('timer_changed', {\n            id: this.res_id,\n            is_timer_running: !this.isTimerRunning\n        });\n    },\n\n    _getActionButton: function () {\n        return this.isTimerRunning ? 'action_timer_stop' : 'action_timer_start';\n    },\n\n    /**\n     * @override\n     */\n    destroy: function () {\n        clearTimeout(this.timer);\n        this._super.apply(this, arguments);\n    },\n});\n\nconst timesheetUomTimerService = {\n    dependencies: [\"timesheet_uom\"],\n    start(env, { timesheet_uom }) {\n        /**\n         * Binding depending on Company Preference\n         *\n         * determine wich widget will be the timesheet one.\n         * Simply match the 'timesheet_uom' widget key with the correct\n         * implementation (float_time, float_toggle, ...). The default\n         * value will be 'float_factor'.\n        **/\n        const widgetName = timesheet_uom.widget || 'float_factor';\n\n        let FieldTimesheetUom = null;\n\n        if (widgetName === 'float_toggle') {\n            FieldTimesheetUom = TimesheetUom.FieldTimesheetToggle;\n        } else if (widgetName === 'float_time') {\n            FieldTimesheetUom = FieldTimesheetTimeTimer;\n        } else {\n            FieldTimesheetUom = (\n                    fieldRegistry.get(widgetName) &&\n                    fieldRegistry.get(widgetName).extend({ })\n                ) || TimesheetUom.FieldTimesheetFactor;\n        }\n        fieldRegistry.add('timesheet_uom_timer', FieldTimesheetUom);\n\n        // bind the formatter and parser method, and tweak the options\n        const _tweak_options = (options) => {\n            if (!_.contains(options, 'factor')) {\n                options.factor = timesheet_uom.factor;\n            }\n            return options;\n        };\n\n        fieldUtils.format.timesheet_uom_timer = function(value, field, options) {\n            options = _tweak_options(options || { });\n            const formatter = fieldUtils.format[FieldTimesheetUom.prototype.formatType];\n            return formatter(value, field, options);\n        };\n\n        fieldUtils.parse.timesheet_uom_timer = function(value, field, options) {\n            options = _tweak_options(options || { });\n            const parser = fieldUtils.parse[FieldTimesheetUom.prototype.formatType];\n            return parser(value, field, options);\n        };\n    },\n};\n\nregistry.category(\"services\").add(\"timesheet_uom_timer\", timesheetUomTimerService);\n\n/**\n * Extend Time widget to add the +/- button for duration\n * (duration_unit_amount) field.\n */\nconst FieldTimesheetHours = TimesheetUomDisplayTimer.extend({\n    /**\n     * @override\n     */\n    async _render() {\n        await this._super.apply(this, arguments);\n        const $timer = this.getParent().el.querySelector('.o_kanban_timer_start');\n        $timer.before(this._makeButton(_lt('Decrease Time'), 'action_timer_decrease', 'fa-minus'));\n        $timer.after(this._makeButton(_lt('Increase Time'), 'action_timer_increase', 'fa-plus'));\n    },\n    /**\n     * @private\n     * @param {String} title\n     * @param {String} name\n     * @param {String} icon\n     */\n    _makeButton(title, name, icon) {\n        const button = document.createElement('button');\n        button.className = 'btn btn-light btn-sm fa ' + icon;\n        button.title = title;\n        button.name = name;\n        button.type = 'button';\n        button.addEventListener('click', this._onToggleButton.bind(this));\n        return button;\n    },\n    /**\n     * @private\n     * @param {OdooEvent} event\n     */\n    async _onToggleButton(ev) {\n        ev.stopPropagation();\n        await this._rpc({\n            model: this.model,\n            method: ev.currentTarget.name,\n            args: [this.res_id]\n        });\n        this.trigger_up('reload');\n    },\n});\n\nfieldRegistry.add('timesheet_uom_hours', FieldTimesheetHours);\n\nreturn {\n    FieldTimesheetHours,\n    FieldTimesheetTimeTimer,\n    timesheetUomTimerService,\n};\n\n});\n", "odoo.define('timesheet_grid.TimesheetConfigQRCodeMixin', function (require) {\n    \"use strict\";\n\n    const TimesheetConfigQRCodeMixin = {\n\n        /**\n         * Bind the event for play store icons\n         * @private\n         */\n        _bindPlayStoreIcon() {\n            const playStore = this.el.querySelector('.o_config_play_store');\n            const appStore = this.el.querySelector('.o_config_app_store');\n\n            if (playStore) {\n                playStore.onclick = this._onClickAppStoreIcon.bind(this);\n            }\n            if (appStore) {\n                appStore.onclick = this._onClickAppStoreIcon.bind(this);\n            }\n        },\n\n        //--------------------------------------------------------------------------\n        // Handlers\n        //--------------------------------------------------------------------------\n\n        /**\n         * @private\n         * @param {MouseEvent} ev\n         */\n        _onClickAppStoreIcon(ev) {\n            ev.preventDefault();\n            const googleUrl = \"https://play.google.com/store/apps/details?id=com.odoo.OdooTimesheets\";\n            const appleUrl = \"https://apps.apple.com/be/app/awesome-timesheet/id1078657549\";\n            const url = ev.target.classList.contains(\"o_config_play_store\") ? googleUrl : appleUrl;\n\n            if (!this.env.device.isMobile) {\n                const actionDesktop = {\n                    name: this.env._t('Download our App'),\n                    type: 'ir.actions.client',\n                    tag: 'timesheet_qr_code_modal',\n                    target: 'new',\n                };\n                this.trigger('do-action', {action: Object.assign(actionDesktop, {params: {'url': url}})});\n            } else {\n                this.trigger('do-action', {action: {type: 'ir.actions.act_url', url: url}});\n            }\n        },\n\n    };\n\n    return TimesheetConfigQRCodeMixin;\n});\n", "/** @odoo-module **/\n\nimport TaskGanttRow from '@project_enterprise/js/task_gantt_row';\nimport fieldUtils from 'web.field_utils';\nimport { registry } from '@web/core/registry';\n\n\n/*\n    Although this might look quite crappy at first sight, this is unfortunately necessary as there is a real\n    dependency of the include() on the timesheet_uom service. Indeed fieldUtils.format.timesheet_uom(),\n    which depends on the session, is only defined once the timesheet_uom service has started.\n*/\n\nconst timesheetUomGanttPopoverService = {\n    dependencies: [\"timesheet_uom\"],\n    start() {\n        TaskGanttRow.include({\n            _getPopoverContext: function () {\n                const data = this._super.apply(this, arguments);\n                if (data.allow_subtasks) {\n                    data.total_hours_spent_formatted = fieldUtils.format.timesheet_uom(data.total_hours_spent);\n                } else {\n                    data.effective_hours_formatted = fieldUtils.format.timesheet_uom(data.effective_hours);\n                }\n                data.progressFormatted = Math.round(data.progress);\n                return data;\n            },\n        });\n    },\n};\n\nregistry.category(\"services\").add(\"timesheet_uom_gantt_popover\", timesheetUomGanttPopoverService);\n", "odoo.define('timesheet_grid.GridModel', function (require) {\n    \"use strict\";\n\n    const { _t } = require('web.core');\n    const GridModel = require('web_grid.GridModel');\n\n    const TimesheetGridModel = GridModel.extend({\n\n        /**\n         * @override\n         */\n        async __load(params) {\n            const result = await this._super(...arguments);\n\n            this._gridData.timeBoundariesContext = this.getTimeContext();\n            this._gridData.workingHoursData = await this.fetchAllTimesheetM2OAvatarData(this.getEmployeeGridValues(), this._gridData.timeBoundariesContext.start, this._gridData.timeBoundariesContext.end);\n\n            return result;\n        },\n\n        /**\n         * @override\n         */\n        async __reload(handle, params) {\n\n            // Sometimes, like after a cell update, we only need to update the hours widget data.\n            if (params && params.onlyHoursData) {\n                const { start, end } = this.getTimeContext();\n                this._gridData.workingHoursData = await this.fetchAllTimesheetM2OAvatarData(this.getEmployeeGridValues(), start, end);\n                return;\n            }\n\n            if (params && 'groupBy' in params) {\n                // With timesheet grid, it makes nonsense to manage group_by with a field date (as the dates are already in the rows).\n                // Detection of groupby date with ':' (date:day). Ignore grouped by date, and display warning.\n                var GroupBy = params.groupBy.filter(filter => {\n                    return filter.split(':').length === 1;\n                });\n                if (GroupBy.length !== params.groupBy.length) {\n                    this.displayNotification({ message: _t('Grouping by date is not supported'), type: 'danger' });\n                }\n                params.groupBy = GroupBy;\n            }\n\n            const result = await this._super(...arguments);\n\n            this._gridData.timeBoundariesContext = this.getTimeContext();\n            this._gridData.workingHoursData = await this.fetchAllTimesheetM2OAvatarData(this.getEmployeeGridValues(), this._gridData.timeBoundariesContext.start, this._gridData.timeBoundariesContext.end);\n\n            return result;\n\n        },\n\n        /**\n         * Retrieves from the grid data about the employees.\n         * This data is useful for the widget timesheet avatar's rpc.\n         *\n         * It needs to pay attention that depending on the way the grid is grouped or not,\n         * the data is not at the same place and at the same format.\n         *\n         * @returns [ { employee_id, employee_display_name, grid_row_index }, ... ]\n         */\n        getEmployeeGridValues() {\n            const employees = [];\n            if (this._gridData.isGrouped && this._gridData.groupBy[0] === 'employee_id') {\n                this._gridData.data // all the rows\n                    .filter(row => row.__label)\n                    .forEach((row, index) => {\n                        employees.push({\n                            'employee_id': row.__label[0],\n                            'employee_display_name': row.__label[1],\n                            'grid_row_index': index\n                        });\n                    });\n            } else {\n                this._gridData.data[0].rows // all the rows\n                    .filter(row => 'employee_id' in row.values)\n                    .forEach((row, index) => {\n                        employees.push({\n                            'employee_id': row.values.employee_id[0],\n                            'employee_display_name': row.values.employee_id[1],\n                            'grid_row_index': index\n                        });\n                    });\n            }\n            return employees;\n        },\n\n        /**\n         * Retrieve the start and end date of the currently displayed range.\n         * So, start of week / month and end of week / month.\n         * The data is retrieved that way to avoid problems of localization where the start of the week may be a\n         * different day (Sunday or Monday or ... )\n         *\n         * @returns {{start: string, end: string}}\n         */\n\n        getTimeContext() {\n\n            const startOfTheRange = this._gridData.data[0].cols[0].domain[1][2];\n            const endOfTheRange = this._gridData.data[0].cols[this._gridData.data[0].cols.length - 1].domain[1][2];\n\n            return {\n                start: startOfTheRange,\n                end: endOfTheRange,\n            };\n\n        },\n\n        /**\n         * Perform a rpc to get the data for the timesheet avatar widget.\n         *\n         * @param employeesGridData employees data gathered from the grid.\n         * @param {String} start the range start data\n         * @param {String} end the range end date\n         * @returns {Promise<object|*>}\n         */\n        async fetchAllTimesheetM2OAvatarData(employeesGridData, start, end) {\n\n            // If there is no data, we don't bother\n            if (employeesGridData.length === 0) {\n                return {};\n            }\n\n            const hoursData = await this._rpc({\n                model: 'hr.employee',\n                method: 'get_timesheet_and_working_hours_for_employees',\n                args: [employeesGridData, start, end],\n            });\n\n            return hoursData;\n        },\n\n    });\n\n    return TimesheetGridModel;\n});\n", "odoo.define('timesheet_grid.GridController', function (require) {\n    \"use strict\";\n\n    const GridController = require('web_grid.GridController');\n\n    const TimesheetGridController = GridController.extend({\n\n        /**\n         * @override\n         */\n        _cellHasBeenUpdated(ev) {\n            this._super(...arguments);\n            this.update({ onlyHoursData: true });\n        },\n\n        /**\n         * @override\n         */\n        renderButtons($node) {\n            this._super(...arguments);\n            this.$buttons.on('click', '.o_timesheet_validate', this._onValidateButtonClicked.bind(this));\n        },\n\n        /**\n         * @override\n         */\n        updateButtons() {\n            this._super(...arguments);\n            this.$buttons.find('.o_timesheet_validate').removeClass('grid_arrow_button');\n        },\n\n        // -------------------------------------------------------------------------\n        // Private\n        // -------------------------------------------------------------------------\n\n        _onValidateButtonClicked(e) {\n            e.stopPropagation();\n\n            return this.mutex.exec(async () => {\n                const ids = await this.model.getIds();\n                const res = await this._rpc({\n                    model: 'account.analytic.line',\n                    method: 'action_validate_timesheet',\n                    args: [ids],\n                });\n                this.displayNotification({type: res.params.type, title: res.params.title});\n                await this.model.reload();\n                var state = this.model.get();\n                await this.renderer.update(state);\n                this.updateButtons(state);\n            });\n        },\n    });\n\n\n    return TimesheetGridController;\n});\n", "odoo.define('timesheet_grid.GridRenderer', function (require) {\n    \"use strict\";\n\n    const { ComponentAdapter } = require('web.OwlCompatibility');\n    const GridRenderer = require('web_grid.GridRenderer');\n    const TimesheetM2OAvatarEmployee = require('timesheet_grid.TimesheetM2OAvatarEmployee');\n\n    class TimesheetM2OAvatarEmployeeAdapter extends ComponentAdapter {\n\n        /**\n         * @override\n         */\n        async updateWidget(nextProps) {\n            await this.widget.update(nextProps);\n        }\n\n        /**\n         * @override\n         */\n        get widgetArgs() {\n            return [this.props.value, this.props.rowIndex, this.props.rangeContext, this.props.timeBoundariesContext, this.props.workingHoursData];\n        }\n\n    }\n\n    class TimesheetGridRenderer extends GridRenderer {\n        constructor(parent, props) {\n            super(...arguments);\n            this.widgetComponents = {\n                TimesheetM2OAvatarEmployee: TimesheetM2OAvatarEmployee\n            };\n        }\n\n        //----------------------------------------------------------------------\n        // Getters\n        //----------------------------------------------------------------------\n        /**\n         * @returns {boolean} true if we need to display an employee avatar\n         */\n        get showEmployeeAvatar() {\n            const empIdGroupIndex = this.props.groupBy.indexOf('employee_id');\n\n            if (empIdGroupIndex < 0) {\n                // Not grouped by employee_id = no avatar to show\n                return false;\n            }\n\n            if (this.props.isGrouped) {\n                // For grouped grid\n                const isGroupLabel = this.rowlabel_index === undefined;\n                const isGroupLabelAnEmployee = isGroupLabel && empIdGroupIndex === 0;\n                const isLabelAnEmployee = !isGroupLabel && empIdGroupIndex === this.label_index + 1;\n                return isGroupLabelAnEmployee || isLabelAnEmployee;\n            }\n\n            // For ungrouped grid, show if current label is an employee\n            return empIdGroupIndex === this.label_index;\n        }\n    }\n\n    TimesheetGridRenderer.components = {\n        TimesheetM2OAvatarEmployeeAdapter\n    };\n\n    TimesheetGridRenderer.props = Object.assign({}, GridRenderer.props, {\n        workingHoursData: Object,\n        timeBoundariesContext: {\n            type: Object,\n            shape: {\n                start: String,\n                end: String,\n            },\n        },\n    });\n\n    return TimesheetGridRenderer;\n});\n", "odoo.define('timesheet_grid.GridView', function (require) {\n    \"use strict\";\n\n    const viewRegistry = require('web.view_registry');\n    const WebGridView = require('web_grid.GridView');\n    const TimesheetConfigQRCodeMixin = require('timesheet_grid.TimesheetConfigQRCodeMixin');\n    const TimesheetGridController = require('timesheet_grid.GridController');\n    const TimesheetGridModel = require('timesheet_grid.GridModel');\n    const GridRenderer = require('timesheet_grid.GridRenderer');\n    const { onMounted, onPatched } = owl.hooks;\n\n    class TimesheetGridRenderer extends GridRenderer {\n        constructor() {\n            super(...arguments);\n            onMounted(() => this._bindPlayStoreIcon());\n            onPatched(() => this._bindPlayStoreIcon());\n        }\n    }\n\n    // QRCode mixin to bind event on play store icon\n    Object.assign(TimesheetGridRenderer.prototype, TimesheetConfigQRCodeMixin);\n\n    // JS class to avoid grouping by date\n    const TimesheetGridView = WebGridView.extend({\n        config: Object.assign({}, WebGridView.prototype.config, {\n            Model: TimesheetGridModel,\n            Controller: TimesheetGridController,\n            Renderer: TimesheetGridRenderer\n        })\n    });\n\n    viewRegistry.add('timesheet_grid', TimesheetGridView);\n\n    return TimesheetGridView;\n});\n", "odoo.define('timesheet_grid.TimerGridModel', function (require) {\n    \"use strict\";\n\n    const { _t } = require('web.core');\n    const GridModel = require('web_grid.GridModel');\n\n    const TimerGridModel = GridModel.extend({\n        /**\n         * Update state\n         *\n         * When the user click on a timer button, we need to update the state without reordering the data.\n         */\n        async actionTimer(state) {\n            await this.reload();\n\n            let i = 0;\n\n            const array = [];\n\n            while (state.data.hasOwnProperty(i)) {\n                array.push(state.data[i]);\n                i += 1;\n            }\n\n            i = 0;\n\n            // Get fields containing in rowFields without the sectionField\n            const fields = _.difference(this.rowFields, [this.sectionField]);\n\n            while (this._gridData.data.hasOwnProperty(i)) {\n                array.some((el, index) => {\n                    if (_.isEqual(el.__label, this._gridData.data[i].__label)) {\n                        state.data[index].cols = this._gridData.data[i].cols;\n                        if (this._checkRowsSameOrder(state.data[index].rows, this._gridData.data[i].rows, fields)) {\n                            // Then same order\n                            state.data[index].grid = this._gridData.data[i].grid;\n                            state.data[index].rows = this._gridData.data[i].rows;\n                        } else {\n                            // Update state with the same order than the old state\n                            const {rows, grid} = this._updateGrid(\n                                {rows: state.data[index].rows, grid: state.data[index].grid},\n                                {rows: this._gridData.data[i].rows, grid: this._gridData.data[i].grid},\n                                fields\n                            );\n\n                            state.data[index].rows = rows;\n                            state.data[index].grid = grid;\n                        }\n\n                        return true;\n                    }\n                });\n\n                i += 1;\n            }\n            if (this._gridData.serverTime) {\n                state.serverTime = this._gridData.serverTime;\n            }\n            this._gridData = state;\n            this._gridData.data.forEach((group, groupIndex) => {\n                this._gridData.data[groupIndex].totals = this._computeTotals(group.grid);\n            });\n            this._gridData.totals = this._computeTotals(_.flatten(_.pluck(this._gridData.data, 'grid'), true));\n            return this._gridData;\n        },\n\n        // -------------------------------------------------------------------------\n        // Private\n        // -------------------------------------------------------------------------\n\n        /**\n         * @override\n         */\n        async __load() {\n            await this._super(...arguments);\n            await this._getTimerData();\n        },\n        /**\n         * @override\n         */\n        async __reload(handle, params) {\n            if (params && 'groupBy' in params) {\n                // With timesheet grid, it makes nonsense to manage group_by with a field date (as the dates are already in the rows).\n                // Detection of groupby date with ':' (date:day). Ignore grouped by date, and display warning.\n                var GroupBy = params.groupBy.filter(filter => {\n                    return filter.split(':').length === 1;\n                });\n                if (GroupBy.length !== params.groupBy.length) {\n                    this.displayNotification({ message: _t('Grouping by date is not supported'), type: 'danger' });\n                }\n                params.groupBy = GroupBy;\n            }\n            await this._super(...arguments);\n        },\n        _changeTimerDescription(timesheetId, description) {\n            this._rpc({\n                model: 'account.analytic.line',\n                method: 'change_description',\n                args: [[timesheetId], description],\n            });\n        },\n        _addTimeTimer(timesheetId, time) {\n            this._rpc({\n                model: 'account.analytic.line',\n                method: 'action_add_time_to_timer',\n                args: [[timesheetId], time],\n            });\n        },\n        async _stopTimer(timesheetId) {\n            await this._rpc({\n                model: 'account.analytic.line',\n                method: 'action_timer_stop',\n                args: [timesheetId, true],\n            });\n        },\n        _unlinkTimer(timesheetId) {\n            this._rpc({\n                model: 'account.analytic.line',\n                method: 'action_timer_unlink',\n                args: [[timesheetId]],\n            });\n        },\n        async _getTimerData() {\n            const result = await this._rpc({\n                model: 'account.analytic.line',\n                method: 'get_timer_data',\n                args: [],\n            });\n            this._gridData.stepTimer = result['step_timer'];\n            this._gridData.defaultProject = result['favorite_project'];\n        },\n        /**\n         * Check if the \"rows\" of 2 states (old and new) contains theirs elements in the same order\n         * @param {Array} a contains rows of oldState\n         * @param {Array} b contains rows of newState\n         * @param {Array} fields contains rowFields of grid view without the sectionField\n         */\n        _checkRowsSameOrder(a, b, fields) {\n            if (a.length !== b.length) {\n                return false;\n            }\n\n            for (let i = 0; i < a.length; i++) {\n                for (const field of fields) {\n                    if (a[i].values[field] === false && b[i].values[field] !== false) {\n                        return false;\n                    }\n                    if (_.difference(a[i].values[field], b[i].values[field]).length !== 0) {\n                        return false;\n                    }\n                }\n            }\n\n            return true;\n        },\n        /**\n         * We want to update the state when the user clicks on the timer button, but we want to keep\n         * the same order that the oldState.\n         *\n         * @param {Array} a contains rows and grid of oldState\n         * @param {Array} b contains rows and grid of newState\n         * @param {Array} fields contains rowFields of grid view without the sectionField\n         */\n        _updateGrid(a, b, fields) {\n            const result = {rows: [], grid: []};\n\n            let i = 0;\n            for (i = 0; i < a.rows.length; i++) {\n                b.rows.some((row, index) => {\n                    for (const field of fields) {\n                        if (a.rows[i].values[field] === false && row.values[field] !== false) {\n                            return false;\n                        }\n                        if (_.difference(a.rows[i].values[field], row.values[field]).length !== 0) {\n                            return false;\n                        }\n                    }\n                    result.rows.push(row);\n                    result.grid.push(b.grid[index]);\n                    return true;\n                });\n            }\n\n            if (i < b.rows.length) {\n                for (i; i < b.rows.length; i++) {\n                    result.rows.push(b.rows[i]);\n                    result.grid.push(b.grid[i]);\n                }\n            }\n\n            return result;\n        },\n    });\n\n    return TimerGridModel;\n});\n", "odoo.define('timesheet_grid.TimerGridController', function (require) {\n    \"use strict\";\n\n    const GridController = require('web_grid.GridController');\n\n    const TimerGridController = GridController.extend({\n        custom_events: Object.assign({}, GridController.prototype.custom_events, {\n            update_timer: '_onUpdateTimer',\n            update_timer_description: '_onUpdateTimerDescription',\n            add_time_timer: '_onAddTimeTimer',\n            stop_timer: '_onStopTimer',\n            unlink_timer: '_onUnlinkTimer',\n        }),\n\n        //----------------------------------------------------------------------\n        // Handlers\n        //----------------------------------------------------------------------\n\n        /**\n         * @constructor\n         */\n        init: function () {\n            this._super.apply(this, arguments);\n            this._onClickTimerButton = _.debounce(this._onClickTimerButton, 500);\n        },\n\n        /**\n         * If we update an existing line, we update the view.\n         *\n         * @private\n         */\n        async _onUpdateTimer() {\n            const state = await this.model.actionTimer(this.model.get());\n            await this.renderer.update(state);\n            this.updateButtons(state);\n        },\n        _onUpdateTimerDescription(event) {\n            const timesheetId = event.data.timesheetId;\n            const description = event.data.description;\n            this.model._changeTimerDescription(timesheetId, description);\n        },\n        _onAddTimeTimer(event) {\n            const timesheetId = event.data.timesheetId;\n            const time = event.data.time;\n            this.model._addTimeTimer(timesheetId, time);\n        },\n        async _onStopTimer(event) {\n            const timesheetId = event.data.timesheetId;\n            await this.model._stopTimer(timesheetId);\n            await this.reload();\n        },\n        _onUnlinkTimer(event) {\n            const timesheetId = event.data.timesheetId;\n            this.model._unlinkTimer(timesheetId);\n        }\n    });\n\n    return TimerGridController;\n});\n", "odoo.define('timesheet_grid.TimerGridRenderer', function (require) {\n    \"use strict\";\n\n    const utils = require('web.utils');\n    const GridRenderer = require('web_grid.GridRenderer');\n    const TimerHeaderComponent = require('timesheet_grid.TimerHeaderComponent');\n    const TimerStartComponent = require('timesheet_grid.TimerStartComponent');\n    const { useState, useExternalListener, useRef } = owl.hooks;\n\n    class TimerGridRenderer extends GridRenderer {\n        constructor(parent, props) {\n            super(...arguments);\n            useExternalListener(window, 'keydown', this._onKeydown);\n            useExternalListener(window, 'keyup', this._onKeyup);\n\n            this.initialGridAnchor = props.context.grid_anchor;\n            this.initialGroupBy = props.groupBy;\n\n            this.stateTimer = useState({\n                taskId: undefined,\n                taskName: '',\n                projectId: undefined,\n                projectName: '',\n                addTimeMode: false,\n                description: '',\n                startSeconds: 0,\n                timerRunning: false,\n                indexRunning: -1,\n                readOnly: false,\n                projectWarning: false,\n            });\n            this.timerHeader = useRef('timerHeader');\n            this.timesheetId = false;\n            this._onChangeProjectTaskDebounce = _.debounce(this._setProjectTask.bind(this), 500);\n        }\n        mounted() {\n            super.mounted(...arguments);\n            if (this.formatType === 'float_time') {\n                this._get_running_timer();\n            }\n        }\n        async willUpdateProps(nextProps) {\n            if (nextProps.data !== this.props.data) {\n                this._match_line(nextProps.data);\n            }\n            return super.willUpdateProps(...arguments);\n        }\n\n        //----------------------------------------------------------------------\n        // Getters\n        //----------------------------------------------------------------------\n\n        /**\n         * @returns {boolean} returns true if when we need to display the timer button\n         *\n         */\n        get showTimerButton() {\n            return ((this.formatType === 'float_time') && (\n                this.props.groupBy.includes('project_id')\n            ));\n        }\n        /**\n         * @returns {boolean} returns always true if timesheet in hours, that way we know we're on a timesheet grid and\n         * we can show the timer header.\n         *\n         */\n        get showTimer() {\n            return this.formatType === 'float_time';\n        }\n\n        //--------------------------------------------------------------------------\n        // Private\n        //--------------------------------------------------------------------------\n\n        _match_line(new_grid) {\n            const grid = (new_grid) ? new_grid[0].rows : this.props.data[0].rows;\n            let current_value;\n            for (let i = 0; i < grid.length; i++) {\n                current_value = grid[i].values;\n                if (current_value.project_id && current_value.project_id[0] === this.stateTimer.projectId\n                    && ((!current_value.task_id && !this.stateTimer.taskId) ||\n                    (current_value.task_id && current_value.task_id[0] === this.stateTimer.taskId))) {\n                    this.stateTimer.indexRunning = i;\n                    return;\n                }\n            }\n            this.stateTimer.indexRunning = -1;\n        }\n        async _get_running_timer() {\n            const result = await this.rpc({\n                model: 'account.analytic.line',\n                method: 'get_running_timer',\n                args: []\n            });\n            if (result.id !== undefined) {\n                this.stateTimer.timerRunning = true;\n                this.timesheetId = result.id;\n                this.stateTimer.readOnly = result.readonly;\n                this.stateTimer.projectId = result.project_id;\n                this.stateTimer.taskId = result.task_id || undefined;\n\n                // In case of read-only timer\n                this.stateTimer.projectName = (result.project_name) ? result.project_name : '';\n                this.stateTimer.taskName = (result.task_name) ? result.task_name : '';\n\n                this.stateTimer.timerRunning = true;\n                this.stateTimer.description = (result.description === '/') ? '' : result.description;\n                this.stateTimer.startSeconds = Math.floor(Date.now() / 1000) - result.start;\n            } else if (this.stateTimer.timerRunning && this.stateTimer.projectId) {\n                this.timesheetId = false;\n                this.stateTimer.readOnly = false;\n                this.stateTimer.projectId = false;\n                this.stateTimer.taskId = undefined;\n\n                this.stateTimer.timerRunning = false;\n                this.stateTimer.description = '';\n            }\n            if (this.timerHeader.comp.startButton.el) {\n                this.timerHeader.comp.startButton.el.focus();\n            }\n            this._match_line();\n        }\n        async _onSetProject(data) {\n            this.stateTimer.projectId = data.detail.projectId;\n            this.stateTimer.taskId = undefined;\n            this._onChangeProjectTaskDebounce(data.detail.projectId, undefined);\n        }\n        async _onSetTask(data) {\n            this.stateTimer.projectId = data.detail.projectId;\n            this.stateTimer.taskId = data.detail.taskId || undefined;\n            this._onChangeProjectTaskDebounce(this.stateTimer.projectId, data.detail.taskId);\n        }\n        async _setProjectTask(projectId, taskId) {\n            if (!this.stateTimer.projectId) {\n                return;\n            }\n            if (this.timesheetId) {\n                const timesheetId = await this.rpc({\n                    model: 'account.analytic.line',\n                    method: 'action_change_project_task',\n                    args: [[this.timesheetId], this.stateTimer.projectId, this.stateTimer.taskId],\n                });\n                if (this.timesheetId !== timesheetId) {\n                    this.timesheetId = timesheetId;\n                    await this._get_running_timer();\n                }\n            } else {\n                const seconds = Math.floor(Date.now() / 1000) - this.stateTimer.startSeconds;\n                this.timesheetId = await this.rpc({\n                    model: 'account.analytic.line',\n                    method: 'create',\n                    args: [{\n                        'name': this.stateTimer.description,\n                        'project_id': this.stateTimer.projectId,\n                        'task_id': this.stateTimer.taskId,\n                    }],\n                });\n                // Add already runned time and start timer if doesn't running yet in DB\n                this.trigger('add_time_timer', {\n                    timesheetId: this.timesheetId,\n                    time: seconds\n                });\n            }\n            this._match_line();\n        }\n        async _onClickLineButton(taskId, projectId) {\n            // Check that we can create timers for the selected project.\n            // This is an edge case in multi-company environment.\n            const canStartTimerResult = await this.rpc({\n                model: 'project.project',\n                method: 'check_can_start_timer',\n                args: [[projectId]],\n            });\n            if (canStartTimerResult !== true) {\n                this.trigger('do_action', {action: canStartTimerResult})\n                return;\n            }\n            if (this.stateTimer.addTimeMode === true) {\n                this.timesheetId = await this.rpc({\n                    model: 'account.analytic.line',\n                    method: 'action_add_time_to_timesheet',\n                    args: [[this.timesheetId], projectId, taskId, this.props.stepTimer * 60],\n                });\n                this.trigger('update_timer');\n            } else if (! this.timesheetId && this.stateTimer.timerRunning) {\n                this.stateTimer.projectId = projectId;\n                this.stateTimer.taskId = (taskId) ? taskId : undefined;\n                await this._onChangeProjectTaskDebounce(projectId, taskId);\n            } else {\n                if (this.stateTimer.projectId === projectId && this.stateTimer.taskId === taskId) {\n                    await this._stop_timer();\n                    return;\n                }\n                await this._stop_timer();\n                this.stateTimer.projectId = projectId;\n                this.stateTimer.taskId = (taskId) ? taskId : undefined;\n                await this._onTimerStarted();\n                await this._onChangeProjectTaskDebounce(projectId, taskId);\n            }\n            if (this.timerHeader.comp.stopButton.el) {\n                this.timerHeader.comp.stopButton.el.focus();\n            }\n        }\n        async _onTimerStarted() {\n            this.stateTimer.timerRunning = true;\n            this.stateTimer.addTimeMode = false;\n            this.stateTimer.startSeconds = Math.floor(Date.now() / 1000);\n            if (this.props.defaultProject && ! this.stateTimer.projectId) {\n                this.stateTimer.projectId = this.props.defaultProject;\n                this._onChangeProjectTaskDebounce(this.props.defaultProject, undefined);\n            }\n        }\n        async _stop_timer() {\n            if (!this.timesheetId) {\n                this.stateTimer.projectWarning = true;\n                return;\n            }\n            let timesheetId = this.timesheetId;\n            this.timesheetId = false;\n            this.trigger('stop_timer', {\n                timesheetId: timesheetId,\n            });\n            this.stateTimer.description = '';\n            this.stateTimer.timerRunning = false;\n            this.timesheetId = false;\n            this.stateTimer.projectId = undefined;\n            this.stateTimer.taskId = undefined;\n\n            this.stateTimer.timerRunning = false;\n            this.stateTimer.projectWarning = false;\n\n            this._match_line();\n            this.stateTimer.readOnly = false;\n        }\n        async _onTimerUnlink() {\n            if (this.timesheetId !== false) {\n                this.trigger('unlink_timer', {\n                    timesheetId: this.timesheetId,\n                });\n            }\n            this.timesheetId = false;\n            this.stateTimer.projectId = undefined;\n            this.stateTimer.taskId = undefined;\n\n            this.stateTimer.timerRunning = false;\n            this.stateTimer.description = '';\n            this.stateTimer.manualTimeInput = false;\n            this._match_line();\n            this.stateTimer.readOnly = false;\n            this.stateTimer.projectWarning = false;\n        }\n        _onNewDescription(data) {\n            this.stateTimer.description = data.detail;\n            if (this.timesheetId) {\n                this.trigger('update_timer_description', {\n                    timesheetId: this.timesheetId,\n                    description: data.detail\n                });\n            }\n        }\n        async _onNewTimerValue(data) {\n            const seconds = Math.floor(Date.now() / 1000) - this.stateTimer.startSeconds;\n            const toAdd = data.detail * 3600 - seconds;\n            this.stateTimer.startSeconds = this.stateTimer.startSeconds - toAdd;\n            if (this.timesheetId && typeof toAdd === 'number') {\n                this.trigger('add_time_timer', {\n                    timesheetId: this.timesheetId,\n                    time: toAdd\n                });\n            }\n            this.timerHeader.comp.stopButton.el.focus();\n        }\n\n        //----------------------------------------------------------------------\n        // Handlers\n        //----------------------------------------------------------------------\n\n        /**\n         * @private\n         * @param {MouseEvent} ev\n         */\n        async _onClickStartTimerFromLine(ev) {\n            if (! ev.detail) {\n                return;\n            }\n            const cell_path = ev.detail.split('.');\n            const grid_path = cell_path.slice(0, -2);\n            const row_path = grid_path.concat(['rows'], cell_path.slice(-1));\n            const row = utils.into(this.props.data, row_path);\n            const data = row.values;\n            const task = (data.task_id) ? data.task_id[0] : undefined;\n            this._onClickLineButton(task, data.project_id[0]);\n        }\n        /**\n         * @private\n         * @param {KeyboardEvent} ev\n         */\n        async _onKeydown(ev) {\n            if (ev.key === 'Shift' && !this.stateTimer.timerRunning && !this.state.editMode) {\n                this.stateTimer.addTimeMode = true;\n            } else if (!ev.altKey && !ev.ctrlKey && !ev.metaKey && this.showTimerButton && ! ['input', 'textarea'].includes(ev.target.tagName.toLowerCase())) {\n                if (ev.key === 'Escape' && this.stateTimer.timerRunning) {\n                    this._onTimerUnlink();\n                }\n                const index = ev.keyCode - 65;\n                if (index >= 0 && index <= 26 && index < this.props.data[0].rows.length) {\n                    const data = this.props.data[0].rows[index].values;\n                    const projectId = data.project_id[0];\n                    const taskId = data.task_id && data.task_id[0];\n                    this._onClickLineButton(taskId, projectId);\n                }\n            }\n        }\n        /**\n         * @private\n         * @param {KeyboardEvent} ev\n         */\n        _onKeyup(ev) {\n            if (ev.key === 'Shift' && !this.state.editMode) {\n                this.stateTimer.addTimeMode = false;\n            }\n        }\n    }\n\n    TimerGridRenderer.props = Object.assign({}, GridRenderer.props, {\n        serverTime: {\n            type: String,\n            optional: true\n        },\n        stepTimer: {\n            type: Number,\n            optional: true\n        },\n        defaultProject: {\n            type: [Boolean, Number],\n            optional: true\n        },\n        Component: {\n            type: Object,\n            optional: true\n        },\n    });\n\n    TimerGridRenderer.components = {\n        TimerHeaderComponent,\n        TimerStartComponent,\n    };\n\n    return TimerGridRenderer;\n});\n", "odoo.define('timesheet_grid.TimerGridView', function (require) {\n    \"use strict\";\n\n    const viewRegistry = require('web.view_registry');\n    const WebGridView = require('web_grid.GridView');\n    const TimerGridController = require('timesheet_grid.TimerGridController');\n    const TimerGridModel = require('timesheet_grid.TimerGridModel');\n    const GridRenderer = require('timesheet_grid.TimerGridRenderer');\n    const TimesheetConfigQRCodeMixin = require('timesheet_grid.TimesheetConfigQRCodeMixin');\n    const { onMounted, onPatched } = owl.hooks;\n\n    class TimerGridRenderer extends GridRenderer {\n        constructor() {\n            super(...arguments);\n            onMounted(() => this._bindPlayStoreIcon());\n            onPatched(() => this._bindPlayStoreIcon());\n        }\n    }\n\n    // QRCode mixin to bind event on play store icon\n    Object.assign(TimerGridRenderer.prototype, TimesheetConfigQRCodeMixin);\n\n    const TimerGridView = WebGridView.extend({\n        config: Object.assign({}, WebGridView.prototype.config, {\n            Model: TimerGridModel,\n            Controller: TimerGridController,\n            Renderer: TimerGridRenderer\n        })\n    });\n\n    viewRegistry.add('timesheet_timer_grid', TimerGridView);\n\n    return TimerGridView;\n});\n", "odoo.define('timesheet_grid.TimerHeaderM2O', function (require) {\n\"use strict\";\n\nconst config = require('web.config');\nconst core = require('web.core');\nconst relational_fields = require('web.relational_fields');\nconst StandaloneFieldManagerMixin = require('web.StandaloneFieldManagerMixin');\nconst Widget = require('web.Widget');\nconst session = require('web.session');\n\nconst Many2One = relational_fields.FieldMany2One;\nconst TaskWithHours = require('hr_timesheet.task_with_hours');\nconst _t = core._t;\n\nconst TimerHeaderM2O = Widget.extend(StandaloneFieldManagerMixin, {\n    template: 'timesheet_grid.timer_project_task',\n    /**\n     * @constructor\n     * @param {Widget} parent\n     * @param {Object} params\n     */\n    init: function (parent, params) {\n        this._super(...arguments);\n        StandaloneFieldManagerMixin.init.call(this);\n        this.projectId = arguments[1];\n        this.taskId = arguments[2];\n    },\n    /**\n     * @override\n     */\n    willStart: async function () {\n        await this._super(...arguments);\n\n        const projectDomain = [['allow_timesheets', '=', true]];\n        if (session.user_companies) {\n            // As the TimerHeaderComponent (in which TimerHeaderM2O is injected) is not injected unless the current\n            // company timesheet UOM is hours, we can assume that current_uom_id is always hours UOM. Thus,\n            // the bellow domain ensures that we only get projects of companies that uses hours UOM as timesheet UOM.\n            const currentUOMId = session.user_companies.allowed_companies[session.company_id].timesheet_uom_id;\n            projectDomain.push(['timesheet_encode_uom_id', '=', currentUOMId]);\n        }\n\n        this.project = await this.model.makeRecord('account.analytic.line', [{\n            name: 'project_id',\n            relation: 'project.project',\n            type: 'many2one',\n            value: this.projectId,\n            domain: projectDomain,\n        }]);\n\n        this.task = await this.model.makeRecord('account.analytic.line', [{\n            name: 'task_id',\n            relation: 'project.task',\n            type: 'many2one',\n            value: this.taskId,\n            domain: this.projectId ? [['project_id', '=', this.projectId]] : []\n        }]);\n    },\n    /**\n     * @override\n     */\n    start: async function () {\n        const _super = this._super.bind(this);\n        let placeholderTask, placeholderProject;\n        if (config.device.isMobile) {\n            placeholderTask = _t('Task');\n            placeholderProject = _t('Project');\n        } else {\n            placeholderTask = _t('Select a Task');\n            placeholderProject = _t('Select a Project');\n        }\n        const projectRecord = this.model.get(this.project);\n        const projectMany2one = new Many2One(this, 'project_id', projectRecord, {\n            attrs: {\n                placeholder: placeholderProject,\n            },\n            noOpen: true,\n            noCreate: true,\n            mode: 'edit',\n            required: true,\n        });\n        projectMany2one.field['required'] = true;\n        this._registerWidget(this.project, 'project_id', projectMany2one);\n        await projectMany2one.appendTo(this.$('.timer_project_id'));\n        this.projectMany2one = projectMany2one;\n\n        const taskRecord = this.model.get(this.task);\n        const taskMany2one = new TaskWithHours(this, 'task_id', taskRecord, {\n            attrs: {\n                placeholder: placeholderTask,\n            },\n            noOpen: true,\n            noCreate: true,\n            mode: 'edit',\n        });\n        this._registerWidget(this.task, 'task_id', taskMany2one);\n        await taskMany2one.appendTo(this.$('.timer_task_id'));\n        this.taskMany2one = taskMany2one;\n        this.$('.timer_project_id').addClass('o_required_modifier');\n\n        _super.apply(...arguments);\n    },\n    /**\n     * @private\n     */\n    _updateRequiredField: function () {\n        if (this.projectId === undefined) {\n            this.$('.timer_label_project').addClass('o_field_invalid');\n            this.$('.timer_project_id').addClass('o_field_invalid');\n        } else {\n            this.$('.timer_label_project').removeClass('o_field_invalid');\n            this.$('.timer_project_id').removeClass('o_field_invalid');\n        }\n    },\n\n    /**\n     * @private\n     * @override\n     * @param {OdooEvent} ev\n     */\n    _onFieldChanged: async function (ev) {\n        const project = this.projectId;\n        const task = (this.taskId) ? this.taskId : false;\n        await StandaloneFieldManagerMixin._onFieldChanged.apply(this, arguments);\n        const fieldName = ev.target.name;\n        let record;\n        if (fieldName === 'project_id') {\n            record = this.model.get(this.project);\n            var newId = record.data.project_id.res_id;\n            if (project !== newId) {\n                this.projectId = newId;\n                this.taskId = false;\n\n                this.taskMany2one.value = [];\n                this.taskMany2one.m2o_value = this.taskMany2one._formatValue([]);\n                this.taskMany2one._render();\n                this.taskMany2one.field.domain = [['project_id', '=?', newId]];\n                this.trigger_up('timer-edit-project', {'projectId': newId});\n                this._updateRequiredField();\n            }\n        } else if (fieldName === 'task_id') {\n            record = this.model.get(this.task);\n            const newId = record.data.task_id && record.data.task_id.res_id;\n            if (task !== newId) {\n                let project_id = this.projectId;\n                if (!project_id) {\n                    const task_data = await this._rpc({\n                        model: 'project.task',\n                        method: 'search_read',\n                        args: [[['id', '=', newId]], ['project_id']],\n                    });\n                    project_id = task_data[0].project_id[0];\n                }\n\n                this.taskId = false;\n                this.trigger_up('timer-edit-task', {'taskId': newId, 'projectId': project_id});\n            }\n        }\n    },\n});\n\nreturn TimerHeaderM2O;\n\n});\n", "odoo.define('timesheet_grid.TimerHeaderComponent', function (require) {\n    \"use strict\";\n\n    const fieldUtils = require('web.field_utils');\n    const TimerHeaderM2O = require('timesheet_grid.TimerHeaderM2O');\n\n    const { useState, useRef } = owl.hooks;\n    const { ComponentAdapter } = require('web.OwlCompatibility');\n\n    class TimerHeaderM2OAdapter extends ComponentAdapter {\n        async updateWidget(nextProps) {\n            if (this.widget.projectId !== nextProps.widgetArgs[0] ||\n                this.widget.taskId !== nextProps.widgetArgs[1]) {\n                this.widget.projectId = nextProps.widgetArgs[0];\n                this.widget.taskId = nextProps.widgetArgs[1];\n                this.widget._updateRequiredField();\n                const project = this.widget.projectId || false;\n                await this.widget.projectMany2one.reinitialize(project);\n                this.widget.taskMany2one.field.domain = [['project_id', '=?', project]];\n                const task = this.widget.taskId || false;\n                await this.widget.taskMany2one.reinitialize(task);\n            } else if (nextProps.widgetArgs[2]) {\n                this.widget._updateRequiredField();\n            }\n        }\n    }\n\n    class TimerHeaderComponent extends owl.Component {\n        constructor() {\n            super(...arguments);\n\n            this.state = useState({\n                time: null,\n                manualTimeInput: false,\n                errorManualTimeInput: false,\n            });\n            this.TimerHeaderM2O = TimerHeaderM2O;\n            this.manualTimerAmount = \"00:00\";\n            this.manualTimeInput = useRef(\"manualTimerInput\");\n            this.descriptionInput = useRef(\"inputDescription\");\n            this.startButton = useRef(\"startButton\");\n            this.stopButton = useRef(\"stopButton\");\n            this.timerStarted = false;\n\n            if (this.props.timerRunning === true) {\n                this.timerStarted = true;\n                this.state.time = Math.floor(Date.now() / 1000) - this.props.timer;\n                this.timer = setInterval(() => {\n                    this.state.time = Math.floor(Date.now() / 1000) - this.props.timer;\n                }, 1000);\n            }\n        }\n        async willUpdateProps(nextProps) {\n            if (nextProps.description !== this.props.description && this.descriptionInput.el) {\n                this.descriptionInput.el.value = nextProps.description;\n            }\n            return super.willUpdateProps(...arguments);\n        }\n        patched() {\n            if (this.state.manualTimeInput && !this.state.errorManualTimeInput && this.manualTimeInput.el !== document.activeElement) {\n                this.manualTimeInput.el.focus();\n                this.manualTimeInput.el.select();\n            }\n            if (this.props.timerRunning && !this.timerStarted) {\n                this.timerStarted = true;\n                this.state.time = Math.floor(Date.now() / 1000) - this.props.timer;\n                this.timer = setInterval(() => {\n                    this.state.time = Math.floor(Date.now() / 1000) - this.props.timer;\n                }, 1000);\n                this.stopButton.el.focus();\n            } else if (!this.props.timerRunning && this.timerStarted) {\n                this.timerStarted = false;\n                clearInterval(this.timer);\n                this.startButton.el.focus();\n            }\n        }\n        mounted() {\n            if (this.stopButton.el) {\n                this.stopButton.el.focus();\n            } else {\n                this.startButton.el.focus();\n            }\n\n        }\n\n        //----------------------------------------------------------------------\n        // Getters\n        //----------------------------------------------------------------------\n\n        get timerMode() {\n            return this.props.addTimeMode;\n        }\n        get timeInput() {\n            return this.manualTimerAmount;\n        }\n        get _timerIsRunning() {\n            return this.props.timerRunning;\n        }\n        get _timerReadOnly() {\n            return this.props.timerReadOnly;\n        }\n        get _manualTimeInput() {\n            return this.state.manualTimeInput;\n        }\n        get _timerString() {\n            if (this.state.time) {\n                const hours = Math.floor(this.state.time / 3600);\n                const secondsLeft = this.state.time % 3600;\n                const seconds = this._display2digits(secondsLeft % 60);\n                const minutes = this._display2digits(Math.floor(secondsLeft / 60));\n\n                return `${this._display2digits(hours)}:${minutes}:${seconds}`;\n            }\n            return \"00:00:00\";\n        }\n        get isMobile() {\n            return this.env.device.isMobile;\n        }\n\n        //--------------------------------------------------------------------------\n        // Private\n        //--------------------------------------------------------------------------\n\n        _display2digits(number) {\n            return number > 9 ? \"\" + number : \"0\" + number;\n        }\n\n        //--------------------------------------------------------------------------\n        // Handlers\n        //--------------------------------------------------------------------------\n\n        /**\n         * @private\n         * @param {KeyboardEvent} ev\n         */\n        async _onKeydown(ev) {\n            if (ev.key === 'Enter') {\n                ev.preventDefault();\n                if (this.state.manualTimeInput) {\n                    this._onFocusoutTimer(ev);\n                } else {\n                    this.trigger('new-description', ev.target.value);\n                    this.trigger('timer-stopped');\n                }\n            }\n        }\n        /**\n         * @private\n         * @param {MouseEvent} ev\n         */\n        _onFocusoutTimer(ev) {\n            try {\n                const value = fieldUtils.parse['float_time'](ev.target.value);\n                this.state.errorManualTimeInput = (value < 0);\n                if (!this.state.errorManualTimeInput) {\n                    this.trigger('new-timer-value', value);\n                    this.state.time = value * 3600;\n                    this.state.manualTimeInput = false;\n                }\n            } catch (_) {\n                this.state.errorManualTimeInput = true;\n            }\n        }\n        /**\n         * @private\n         * @param {KeyboardEvent} ev\n         */\n        _onInputTimer(ev) {\n            try {\n                const value = fieldUtils.parse['float_time'](ev.target.value);\n                this.state.errorManualTimeInput = (value < 0);\n            } catch (_) {\n                this.state.errorManualTimeInput = true;\n            }\n        }\n        /**\n         * @private\n         * @param {MouseEvent} ev\n         */\n        _onClickStopTimer(ev) {\n            ev.stopPropagation();\n            this.trigger('timer-stopped');\n        }\n        /**\n         * @private\n         * @param {MouseEvent} ev\n         */\n        _onClickStartTimer(ev) {\n            ev.stopPropagation();\n            this.trigger('timer-started');\n        }\n        /**\n         * @private\n         * @param {Event} ev\n         */\n        _onInputDescription(ev) {\n            this.trigger('new-description', ev.target.value);\n        }\n        /**\n         * @private\n         * @param {MouseEvent} ev\n         */\n        async _onClickManualTime(ev) {\n            if (this.props.timerReadOnly) {\n                return;\n            }\n            const rounded_minutes = await this.rpc({\n                model: 'account.analytic.line',\n                method: 'get_rounded_time',\n                args: [this.state.time/60],\n            });\n            this.manualTimerAmount = fieldUtils.format['float_time'](rounded_minutes);\n            this.state.manualTimeInput = true;\n        }\n        /**\n         * @private\n         * @param {MouseEvent} ev\n         */\n        async _onUnlinkTimer(ev) {\n            this.trigger('timer-unlink');\n        }\n    }\n    TimerHeaderComponent.template = 'timesheet_grid.timer_header';\n    TimerHeaderComponent.props = {\n        taskId: {\n            type: Number,\n            optional: true\n        },\n        projectId: {\n            type: Number,\n            optional: true\n        },\n        taskName: {\n            type: String,\n            optional: true\n        },\n        projectName: {\n            type: String,\n            optional: true\n        },\n        stepTimer: Number,\n        timer: Number,\n        description: {\n            type: String,\n            optional: true\n        },\n        timerRunning: Boolean,\n        addTimeMode: Boolean,\n        timerReadOnly: {\n            type: Boolean,\n            optional: true\n        },\n        projectWarning: Boolean,\n    };\n    TimerHeaderComponent.components = { TimerHeaderM2OAdapter };\n\n    return TimerHeaderComponent;\n});\n", "odoo.define('timesheet_grid.TimerStartComponent', function (require) {\n    \"use strict\";\n\n    class TimerStartComponent extends owl.Component {\n\n        //----------------------------------------------------------------------\n        // Getters\n        //----------------------------------------------------------------------\n\n        get letter() {\n            if (this.props.runningIndex !== this.props.index && this.props.index < 26) {\n                const from = this.props.addTimeMode ? 65 : 97;\n                return String.fromCharCode(from + this.props.index);\n            } else {\n                return '';\n            }\n        }\n        get iconClass() {\n            if (this.props.runningIndex === this.props.index) {\n                return 'fa fa-play primary-green';\n            } else if (this.props.index < 26) {\n                return '';\n            } else if (this.props.addTimeMode) {\n                return 'fa fa-plus';\n            } else {\n                return 'fa fa-play';\n            }\n        }\n\n        //--------------------------------------------------------------------------\n        // Handlers\n        //--------------------------------------------------------------------------\n\n        /**\n         * @private\n         * @param {MouseEvent} ev\n         */\n        _onClickTimer(ev) {\n            ev.stopPropagation();\n            this.trigger('timer-started-from-line', this.props.path);\n        }\n    }\n    TimerStartComponent.template = 'timesheet_grid.start_timer';\n    TimerStartComponent.props = {\n        path: String,\n        index: {\n            type: Number,\n            optional: true\n        },\n        runningIndex: {\n            type: Number,\n            optional: true\n        },\n        addTimeMode: Boolean\n    };\n\n    return TimerStartComponent;\n});\n", "odoo.define('timesheet_grid.timesheet_kanban_view', function (require) {\n\"use strict\";\n\nconst KanbanController = require('web.KanbanController');\nconst KanbanView = require('web.KanbanView');\nconst KanbanRenderer = require('web.KanbanRenderer');\nconst viewRegistry = require('web.view_registry');\nconst QRCodeMixin = require('hr_timesheet.res.config.form');\n\n/**\n * @override the KanbanController to add a trigger when a timer is launched or stopped\n */\nconst TimesheetKanbanController = KanbanController.extend({\n    custom_events: _.extend({}, KanbanController.prototype.custom_events, {\n        'timer_changed': '_onTimerChanged',\n    }),\n    /**\n     * When a timer is launched or stopped, we reload the view to see the updating.\n     * @private\n     * @param {Object} event\n     */\n    _onTimerChanged: function (event) {\n        this.reload();\n    }\n});\n\nconst TimesheetKanbanRenderer = KanbanRenderer.extend(QRCodeMixin.TimesheetConfigQRCodeMixin);\n\nconst TimesheetKanbanView = KanbanView.extend({\n    config: _.extend({}, KanbanView.prototype.config, {\n        Controller: TimesheetKanbanController,\n        Renderer: TimesheetKanbanRenderer,\n    })\n});\n\nviewRegistry.add('timesheet_kanban_view', TimesheetKanbanView);\n\nreturn { TimesheetKanbanController, TimesheetKanbanView, TimesheetKanbanRenderer };\n\n});\n", "odoo.define('timesheet_grid.timesheet_list_view', function (require) {\n\"use strict\";\n\nconst ListController = require('web.ListController');\nconst ListView = require('web.ListView');\nconst ListRenderer = require('web.ListRenderer');\nconst QRCodeMixin = require('hr_timesheet.res.config.form');\nconst viewRegistry = require('web.view_registry');\n\n/**\n * @override the ListController to add a trigger when the timer is launched or stopped\n */\nconst TimesheetListController = ListController.extend({\n    custom_events: _.extend({}, ListController.prototype.custom_events, {\n        'timer_changed': '_onTimerChanged',\n    }),\n    /**\n     * When a timer is launched or stopped, we reload the view to see the updating.\n     * @private\n     * @param {Object} event\n     */\n    _onTimerChanged: function (event) {\n        this.reload();\n    }\n});\n\nconst TimesheetListRenderer = ListRenderer.extend(QRCodeMixin.TimesheetConfigQRCodeMixin);\n\nconst TimesheetListView = ListView.extend({\n    config: _.extend({}, ListView.prototype.config, {\n        Controller: TimesheetListController,\n        Renderer: TimesheetListRenderer\n    })\n});\n\nviewRegistry.add('timesheet_tree', TimesheetListView);\n\nreturn { TimesheetListController, TimesheetListView, TimesheetListRenderer };\n\n});\n", "/** @odoo-module **/\n\nimport { PivotView } from \"@web/views/pivot/pivot_view\";\nimport { registry } from \"@web/core/registry\";\n\nconst { onMounted, onPatched } = owl.hooks;\n\nconst viewRegistry = registry.category(\"views\");\n\nclass TimesheetPivotView extends PivotView {\n    setup() {\n        super.setup();\n        onMounted(this.bindPlayStoreIcon);\n        onPatched(this.bindPlayStoreIcon);\n    }\n\n    /**\n     * Bind the event for play store icons\n     */\n    bindPlayStoreIcon() {\n        const playStore = this.el.querySelector(\".o_config_play_store\");\n        const appStore = this.el.querySelector(\".o_config_app_store\");\n\n        if (playStore) {\n            playStore.onclick = this.onClickAppStoreIcon.bind(this);\n        }\n        if (appStore) {\n            appStore.onclick = this.onClickAppStoreIcon.bind(this);\n        }\n    }\n\n    /**\n     * @param {MouseEvent} ev\n     */\n    onClickAppStoreIcon(ev) {\n        ev.preventDefault();\n        const googleUrl = \"https://play.google.com/store/apps/details?id=com.odoo.OdooTimesheets\";\n        const appleUrl = \"https://apps.apple.com/be/app/awesome-timesheet/id1078657549\";\n        const url = ev.target.classList.contains(\"o_config_play_store\") ? googleUrl : appleUrl;\n\n        if (!this.env.isSmall) {\n            const actionDesktop = {\n                name: this.env._t(\"Download our App\"),\n                type: \"ir.actions.client\",\n                tag: \"timesheet_qr_code_modal\",\n                target: \"new\",\n                params: { url },\n            };\n            this.actionService.doAction(actionDesktop);\n        } else {\n            this.actionService.doAction({ type: \"ir.actions.act_url\", url });\n        }\n    }\n}\n\nviewRegistry.add(\"timesheet_pivot_view\", TimesheetPivotView);\n", "\"use strict\";\nodoo.define('timesheet.tour', function(require) {\n\nvar core = require('web.core');\nconst {Markup} = require('web.utils');\nvar tour = require('web_tour.tour');\n\nvar _t = core._t;\n\ntour.register('timesheet_tour', {\n    sequence: 100,\n    rainbowManMessage: _t(\"Congratulations, you are now a master of Timesheets.</b> <i>Psst: try the  [a] - [Enter] - [b] - [Enter] - shift + [A]  sequence on your keyboard and see what happens next!</i>\"),\n    url: \"/web\",\n}, [tour.stepUtils.showAppsMenuItem(), {\n    trigger: '.o_app[data-menu-xmlid=\"hr_timesheet.timesheet_menu_root\"]',\n    content: Markup(_t('Track the <b>time spent</b> on your projects. <i>It starts here.</i>')),\n    position: 'bottom',\n}, {\n    trigger: '.btn_start_timer',\n    content: Markup(_t('Launch the <b>timer</b> to start a new activity.')),\n    position: 'bottom',\n}, {\n    trigger: '.input_description_timer',\n    content: Markup(_t('Describe your activity <i>(e.g. sent an e-mail, meeting with the customer...)</i>.')),\n    position: 'bottom',\n}, {\n    trigger: '.timer_project_id .o_field_many2one',\n    content: Markup(_t('Select the <b>project</b> on which you are working.')),\n    position: 'bottom',\n}, {\n    trigger: '.btn_stop_timer',\n    content: Markup(_t('Stop the <b>timer</b> when you are done. <i>Tip: hit <b>[Enter]</b> from the description to automatically log your entry.</i>')),\n    position: 'bottom',\n}, {\n    trigger: '.btn_timer_line',\n    content: Markup(_t('Launch the <b>timer</b> for this project by hitting the <b>[a] key</b>. You can easily switch from one project to another using those keys. <i>Tip: you can also directly add 15 minutes to this project by hitting the <b>shift + [A] keys</b>.</i>')),\n    position: 'right',\n}, {\n    trigger: 'td:not(.o_grid_unavailable)',\n    content: Markup(_t('Set the number of hours you spent on this project (e.g. 1:30 or 1.5). <i>Tip: use the tab keys to easily navigate from one cell to another.</i>')),\n    position: 'bottom',\n    consumeEvent: 'change',\n}]);\n\n});\n", "/** @odoo-module alias=timesheet_grid.TimesheetM2OAvatarEmployee **/\nimport field_utils from 'web.field_utils';\nimport StandaloneM2OAvatarEmployee from '@hr/js/standalone_m2o_avatar_employee';\nimport { qweb, _lt } from 'web.core';\n\n    /**\n     * Widget that add hours to be performed next to the avatar name.\n     * It's displayed in red if all hours for the currently displayed time period have not been timesheeted AND\n     * and time period is in the past. Otherwise, it's red.\n     */\n    const TimesheetM2OAvatarEmployee = StandaloneM2OAvatarEmployee.extend({\n\n        $className: '.o_grid_section_subtext',\n        hoursTemplate: 'timesheet_grid.Many2OneAvatarHoursSubfield',\n        title: _lt('Difference between the number of hours recorded and the number of hours the employee was supposed to work according to his contract.'),\n\n        init(parent, value, rowIndex, rangeContext, timeBoundariesContext, workingHoursData) {\n            this._super(...arguments);\n\n            this.elementIndex = rowIndex;\n            this.rangeContext = rangeContext;\n            this.timeContext = timeBoundariesContext;\n\n            this.hasAllTheRequiredData = true;\n\n            if (workingHoursData) {\n                this.cacheHours = workingHoursData['units_to_work'];\n                this.cacheUnit = workingHoursData['uom'];\n                this.cacheWorkedHours = workingHoursData['worked_hours'];\n                if (this.cacheUnit === 'days') {\n                    this.title = _lt('Difference between the number of days recorded and the number of days the employee was supposed to work according to his contract.');\n                }\n            } else {\n                this.hasAllTheRequiredData = false;\n                console.error(\"For some reason, the working hours of the employee couldn't be loaded...\");\n            }\n        },\n\n        start() {\n            if (this.hasAllTheRequiredData) {\n                this._updateTemplateFromCacheData();\n                this._renderHoursFromCache(true);\n            }\n\n            return this._super(...arguments);\n        },\n\n        //----------------------------------------------------------------------\n        // Public\n        //----------------------------------------------------------------------\n\n        async update(data) {\n            let shouldAttachFreshTemplate = false;\n\n            if (data.value[0] !== this.value[0]) {\n                this.value = data.value;\n                await this.avatarWidget.reinitialize(data.value);\n                shouldAttachFreshTemplate = true;\n            }\n\n            this.rangeContext = data.rangeContext;\n            this.timeContext = data.timeBoundariesContext;\n\n            if (data.workingHoursData) {\n                this.cacheHours = data.workingHoursData['units_to_work'];\n                this.cacheUnit = data.workingHoursData['uom'];\n                this.cacheWorkedHours = data.workingHoursData['worked_hours'];\n\n                this._updateTemplateFromCacheData();\n                this._renderHoursFromCache(shouldAttachFreshTemplate);\n            } else {\n                console.error(\"For some reason, the working hours of the employee couldn't be loaded...\");\n            }\n        },\n\n        //----------------------------------------------------------------------\n        // Private\n        //----------------------------------------------------------------------\n\n        /**\n         * Renders the widget.\n         *\n         * @param {bool} attachNewTemplate should a new template be attached and not replaced ?\n         */\n        _renderHoursFromCache(attachNewTemplate = false) {\n            if (attachNewTemplate) {\n                this.avatarWidget.$el.find('.o_m2o_avatar').append(this.$templateHtml);\n            } else {\n                this.avatarWidget.$el.find(this.$className).replaceWith(this.$templateHtml);\n            }\n        },\n\n        /**\n         * @returns boolean should show the hours line in red ?\n         */\n        _shouldShowHoursInRed() {\n            return (this.cacheWorkedHours < this.cacheHours) && (moment(this.timeContext.end) < moment());\n        },\n\n        /**\n         * @returns boolean should show the hours line\n         */\n        _shouldShowHours() {\n            return this.cacheWorkedHours !== undefined && this.cacheWorkedHours != null && this.cacheWorkedHours - this.cacheHours != 0 && moment(this.timeContext.end) < moment();\n        },\n\n        _displayOvertimeIndication() {\n            if (!this._shouldShowHours()) {\n                return null;\n            }\n            const overtime = this.cacheWorkedHours - this.cacheHours;\n            let overtimeIndication = overtime > 0 ? '+' : '';\n            if (this.cacheUnit === 'days') { // format in days\n                overtimeIndication += `${(Math.round(overtime * 100) / 100).toFixed(2)} ${this.cacheUnit}`;\n            } else { // format in hours\n                overtimeIndication += field_utils.format.float_time(this.cacheWorkedHours - this.cacheHours);\n            }\n\n            return overtimeIndication;\n        },\n\n        /**\n         * Generate (qweb render) the template from the attribute values.\n         */\n        _updateTemplateFromCacheData() {\n            this.$templateHtml = $(qweb._render(this.hoursTemplate, {\n                'overtime_indication': this._displayOvertimeIndication(),\n                'unit': this.cacheUnit,\n                'range': this.rangeContext,\n                'not_enough_hours': this._shouldShowHoursInRed(),\n                'title': this.title\n            }));\n        },\n\n    });\n\nexport default TimesheetM2OAvatarEmployee;\n", "/** @odoo-module */\n\nimport { RPCErrorDialog } from \"@web/core/errors/error_dialogs\";\nimport session from \"web.session\";\nimport { registry } from \"@web/core/registry\";\nimport { useService } from \"@web/core/utils/hooks\";\n\nexport class BaseAutomationErrorDialog extends RPCErrorDialog {\n    setup() {\n        super.setup(...arguments);\n        const { id, name } = this.props.data.context.base_automation;\n        this.actionId = id;\n        this.actionName = name;\n        this.isUserAdmin = useService(\"user\").isAdmin;\n        this.actionService = useService(\"action\");\n        this.orm = useService(\"orm\");\n    }\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * This method is called when the user clicks on the 'Disable action' button\n     * displayed when a crash occurs in the evaluation of an automated action.\n     * Then, we write `active` to `False` on the automated action to disable it.\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    async disableAction(ev) {\n        await this.orm.write(\"base.automation\", [this.actionId], {\n            active: false,\n        });\n        this.close();\n    }\n    /**\n     * This method is called when the user clicks on the 'Edit action' button\n     * displayed when a crash occurs in the evaluation of an automated action.\n     * Then, we redirect the user to the automated action form.\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    editAction(ev) {\n        this.actionService.doAction({\n            name: \"Automated Actions\",\n            res_model: \"base.automation\",\n            res_id: this.actionId,\n            views: [[false, \"form\"]],\n            type: \"ir.actions.act_window\",\n            view_mode: \"form\",\n            target: \"new\",\n        });\n        this.close();\n    }\n}\n\nBaseAutomationErrorDialog.bodyTemplate = \"base_automation.ErrorDialogBody\";\n\nregistry.category(\"error_dialogs\").add(\"base_automation\", BaseAutomationErrorDialog);\n", "odoo.define('iap.buy_more_credits', function (require) {\n'use strict';\n\nvar widgetRegistry = require('web.widget_registry');\nvar Widget = require('web.Widget');\n\nvar core = require('web.core');\nconst utils = require('web.utils');\n\nvar QWeb = core.qweb;\n\nvar IAPBuyMoreCreditsWidget = Widget.extend({\n    className: 'o_field_iap_buy_more_credits',\n\n    /**\n     * @constructor\n     * Prepares the basic rendering of edit mode by setting the root to be a\n     * div.dropdown.open.\n     * @see FieldChar.init\n     */\n    init: function (parent, data, options) {\n        this._super.apply(this, arguments);\n        this.service_name = options.attrs.service_name;\n        this.hideService = utils.toBoolElse(options.attrs.hide_service || '', false);\n    },\n\n    /**\n     * @override\n     */\n    start: function () {\n        this.$widget = $(QWeb.render('iap.buy_more_credits', {'hideService': this.hideService}));\n        this.$buyLink = this.$widget.find('.buy_credits');\n        this.$widget.appendTo(this.$el);\n        this.$buyLink.click(this._getLink.bind(this));\n        if (!this.hideService) {\n            this.el.querySelector('.o_iap_view_my_services').addEventListener('click', this._getMyServices.bind(this));\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n    _getLink: function () {\n        var self = this;\n        return this._rpc({\n            model: 'iap.account',\n            method: 'get_credits_url',\n            args: [this.service_name],\n        }, {\n            shadow: true,\n        }).then(function (url) {\n            return self.do_action({\n                type: 'ir.actions.act_url',\n                url: url,\n            });\n        });\n    },\n\n    /**\n     * @private\n     */\n    _getMyServices() {\n        return this._rpc({\n            model: 'iap.account',\n            method: 'get_account_url',\n        }).then(url => {\n            this.do_action({type: 'ir.actions.act_url', url: url});\n        });\n    },\n});\n\nwidgetRegistry.add('iap_buy_more_credits', IAPBuyMoreCreditsWidget);\n\nreturn IAPBuyMoreCreditsWidget;\n});\n", "/** @odoo-module */\nimport { Dialog } from \"@web/core/dialog/dialog\";\nimport { registry } from \"@web/core/registry\";\nimport { useService } from \"@web/core/utils/hooks\";\n\nclass InsufficientCreditDialog extends Dialog {\n    setup() {\n        super.setup(...arguments);\n        this.orm = useService(\"orm\");\n    }\n\n    async willStart() {\n        const { errorData } = this.props;\n        this.url = await this.orm.call(\"iap.account\", \"get_credits_url\", [], {\n            base_url: errorData.base_url,\n            service_name: errorData.service_name,\n            credit: errorData.credit,\n            trial: errorData.trial,\n        });\n        this.style = errorData.body ? \"padding:0;\" : \"\";\n        const { _t } = this.env;\n        const { isEnterprise } = odoo.info;\n        if (errorData.trial && isEnterprise) {\n            this.buttonMessage = _t(\"Start a Trial at Odoo\");\n        } else {\n            this.buttonMessage = _t(\"Buy credits\");\n        }\n    }\n\n    buyCredits() {\n        window.open(this.url, \"_blank\");\n        this.close();\n    }\n}\nInsufficientCreditDialog.bodyTemplate = \"iap.redirect_to_odoo_credit\";\nInsufficientCreditDialog.footerTemplate = \"iap.InsufficientCreditFooter\";\n\nfunction insufficientCreditHandler(env, error, originalError) {\n    if (!originalError) {\n        return false;\n    }\n    const { data } = originalError;\n    if (data && data.name === \"odoo.addons.iap.tools.iap_tools.InsufficientCreditError\") {\n        env.services.dialog.add(InsufficientCreditDialog, {\n            errorData: JSON.parse(data.message),\n        });\n        return true;\n    }\n    return false;\n}\n\nregistry\n    .category(\"error_handlers\")\n    .add(\"insufficientCreditHandler\", insufficientCreditHandler, { sequence: 0 });\n", "odoo.define('sms.fields', function (require) {\n\"use strict\";\n\nvar basic_fields = require('web.basic_fields');\nvar core = require('web.core');\nvar session = require('web.session');\n\nvar _t = core._t;\n\n/**\n * Override of FieldPhone to add a button calling SMS composer if option activated (default)\n */\n\nvar Phone = basic_fields.FieldPhone;\nPhone.include({\n    /**\n     * By default, enable_sms is activated\n     *\n     * @override\n     */\n    init() {\n        this._super.apply(this, arguments);\n        this.enableSMS = 'enable_sms' in this.attrs.options ? this.attrs.options.enable_sms : true;\n        // reinject in nodeOptions (and thus in this.attrs) to signal the property\n        this.attrs.options.enable_sms = this.enableSMS;\n    },\n    /**\n     * When the send SMS button is displayed, $el becomes a div wrapping\n     * the original links.\n     * This method makes sure we always focus the phone number\n     *\n     * @override\n     */\n    getFocusableElement() {\n        if (this.enableSMS && this.mode === 'readonly') {\n            return this.$el.filter('.' + this.className).find('a');\n        }\n        return this._super.apply(this, arguments);\n    },\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Open SMS composer wizard\n     *\n     * @private\n     */\n    _onClickSMS: function (ev) {\n        ev.preventDefault();\n        ev.stopPropagation();\n\n        var context = session.user_context;\n        context = _.extend({}, context, {\n            default_res_model: this.model,\n            default_res_id: parseInt(this.res_id),\n            default_number_field_name: this.name,\n            default_composition_mode: 'comment',\n        });\n        var self = this;\n        return this.do_action({\n            title: _t('Send SMS Text Message'),\n            type: 'ir.actions.act_window',\n            res_model: 'sms.composer',\n            target: 'new',\n            views: [[false, 'form']],\n            context: context,\n        }, {\n        on_close: function () {\n            self.trigger_up('reload');\n        }});\n    },\n\n    /**\n     * Add a button to call the composer wizard\n     *\n     * @override\n     * @private\n     */\n    _renderReadonly: function () {\n        var def = this._super.apply(this, arguments);\n        if (this.enableSMS && this.value) {\n            var $composerButton = $('<a>', {\n                title: _t('Send SMS Text Message'),\n                href: '',\n                class: 'ml-3 d-inline-flex align-items-center o_field_phone_sms',\n                html: $('<small>', {class: 'font-weight-bold ml-1', html: 'SMS'}),\n            });\n            $composerButton.prepend($('<i>', {class: 'fa fa-mobile'}));\n            $composerButton.on('click', this._onClickSMS.bind(this));\n            this.$el = this.$el.add($composerButton);\n        }\n        return def;\n    },\n});\n\nreturn Phone;\n\n});\n", "/** @odoo-module **/\n\nimport { _t } from 'web.core';\nimport fieldRegistry from 'web.field_registry';\nimport FieldTextEmojis from '@mail/js/field_text_emojis';\n/**\n * SmsWidget is a widget to display a textarea (the body) and a text representing\n * the number of SMS and the number of characters. This text is computed every\n * time the user changes the body.\n */\nvar SmsWidget = FieldTextEmojis.extend({\n    className: 'o_field_text',\n    enableEmojis: false,\n    /**\n     * @constructor\n     */\n    init: function () {\n        this._super.apply(this, arguments);\n        this.nbrChar = 0;\n        this.nbrSMS = 0;\n        this.encoding = 'GSM7';\n        this.enableEmojis = !!this.nodeOptions.enable_emojis;\n    },\n\n    /**\n     * @override\n     *\"This will add the emoji dropdown to a target field (controlled by the \"enableEmojis\" attribute)\n     */\n    on_attach_callback: function () {\n        if (this.enableEmojis) {\n            this._super.apply(this, arguments);\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Private: override widget\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @override\n     */\n    _renderEdit: function () {\n        var def = this._super.apply(this, arguments);\n\n        this._compute();\n        $('.o_sms_container').remove();\n        var $sms_container = $('<div class=\"o_sms_container\"/>');\n        $sms_container.append(this._renderSMSInfo());\n        $sms_container.append(this._renderIAPButton());\n        this.$el = this.$el.add($sms_container);\n\n        return def;\n    },\n\n    //--------------------------------------------------------------------------\n    // Private: SMS\n    //--------------------------------------------------------------------------\n\n    /**\n     * Compute the number of characters and sms\n     * @private\n     */\n    _compute: function () {\n        var content = this._getValue();\n        this.encoding = this._extractEncoding(content);\n        this.nbrChar = content.length;\n        this.nbrChar += (content.match(/\\n/g) || []).length;\n        this.nbrSMS = this._countSMS(this.nbrChar, this.encoding);\n    },\n\n    /**\n     * Count the number of SMS of the content\n     * @private\n     * @returns {integer} Number of SMS\n     */\n    _countSMS: function () {\n        if (this.nbrChar === 0) {\n            return 0;\n        }\n        if (this.encoding === 'UNICODE') {\n            if (this.nbrChar <= 70) {\n                return 1;\n            }\n            return Math.ceil(this.nbrChar / 67);\n        }\n        if (this.nbrChar <= 160) {\n            return 1;\n        }\n        return Math.ceil(this.nbrChar / 153);\n    },\n\n    /**\n     * Extract the encoding depending on the characters in the content\n     * @private\n     * @param {String} content Content of the SMS\n     * @returns {String} Encoding of the content (GSM7 or UNICODE)\n     */\n    _extractEncoding: function (content) {\n        if (String(content).match(RegExp(\"^[@\u00a3$\u00a5\u00e8\u00e9\u00f9\u00ec\u00f2\u00c7\\\\n\u00d8\u00f8\\\\r\u00c5\u00e5\u0394_\u03a6\u0393\u039b\u03a9\u03a0\u03a8\u03a3\u0398\u039e\u00c6\u00e6\u00df\u00c9 !\\\\\\\"#\u00a4%&'()*+,-./0123456789:;<=>?\u00a1ABCDEFGHIJKLMNOPQRSTUVWXYZ\u00c4\u00d6\u00d1\u00dc\u00a7\u00bfabcdefghijklmnopqrstuvwxyz\u00e4\u00f6\u00f1\u00fc\u00e0]*$\"))) {\n            return 'GSM7';\n        }\n        return 'UNICODE';\n    },\n\n    /**\n     * Render the IAP button to redirect to IAP pricing\n     * @private\n     */\n    _renderIAPButton: function () {\n        return $('<a>', {\n            'href': 'https://iap-services.odoo.com/iap/sms/pricing',\n            'target': '_blank',\n            'title': _t('SMS Pricing'),\n            'aria-label': _t('SMS Pricing'),\n            'class': 'fa fa-lg fa-info-circle',\n        });\n    },\n\n    /**\n     * Render the number of characters, sms and the encoding.\n     * @private\n     */\n    _renderSMSInfo: function () {\n        var string = _.str.sprintf(_t('%s characters, fits in %s SMS (%s) '), this.nbrChar, this.nbrSMS, this.encoding);\n        var $span = $('<span>', {\n            'class': 'text-muted o_sms_count',\n        });\n        $span.text(string);\n        return $span;\n    },\n\n    /**\n     * Update widget SMS information with re-computed info about length, ...\n     * @private\n     */\n    _updateSMSInfo: function ()  {\n        this._compute();\n        var string = _.str.sprintf(_t('%s characters, fits in %s SMS (%s) '), this.nbrChar, this.nbrSMS, this.encoding);\n        this.$('.o_sms_count').text(string);\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     * @private\n     */\n    _onBlur: function () {\n        var content = this._getValue();\n        if( !content.trim().length && content.length > 0) {\n            this.displayNotification({ title: _t(\"Your SMS Text Message must include at least one non-whitespace character\"), type: 'danger' });\n            this.$input.val(content.trim());\n            this._updateSMSInfo();\n        }\n    },\n\n    /**\n     * @override\n     * @private\n     */\n    _onChange: function () {\n        this._super.apply(this, arguments);\n        this._updateSMSInfo();\n    },\n\n    /**\n     * @override\n     * @private\n     */\n    _onInput: function () {\n        this._super.apply(this, arguments);\n        this._updateSMSInfo();\n    },\n});\n\nfieldRegistry.add('sms_widget', SmsWidget);\n\nexport default SmsWidget;\n", "/** @odoo-module **/\n\nimport { NotificationGroup } from '@mail/components/notification_group/notification_group';\n\nimport { patch } from 'web.utils';\n\npatch(NotificationGroup.prototype, 'sms/static/src/components/notification_group/notification_group.js', {\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     */\n    image() {\n        if (this.group.notification_type === 'sms') {\n            return '/sms/static/img/sms_failure.svg';\n        }\n        return this._super(...arguments);\n    },\n});\n", "/** @odoo-module **/\n\nimport {\n    registerInstancePatchModel,\n} from '@mail/model/model_core';\n\nregisterInstancePatchModel('mail.message', 'sms/static/src/models/message/message.js', {\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     */\n    openResendAction() {\n        if (this.message_type === 'sms') {\n            this.env.bus.trigger('do-action', {\n                action: 'sms.sms_resend_action',\n                options: {\n                    additional_context: {\n                        default_mail_message_id: this.id,\n                    },\n                },\n            });\n        } else {\n            this._super(...arguments);\n        }\n    },\n});\n", "/** @odoo-module **/\n\nimport {\n    registerInstancePatchModel,\n} from '@mail/model/model_core';\n\nregisterInstancePatchModel('mail.notification_group', 'sms/static/src/models/notification_group/notification_group.js', {\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     */\n    openCancelAction() {\n        if (this.notification_type !== 'sms') {\n            return this._super(...arguments);\n        }\n        this.env.bus.trigger('do-action', {\n            action: 'sms.sms_cancel_action',\n            options: {\n                additional_context: {\n                    default_model: this.res_model,\n                    unread_counter: this.notifications.length,\n                },\n            },\n        });\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     */\n    _openDocuments() {\n        if (this.notification_type !== 'sms') {\n            return this._super(...arguments);\n        }\n        this.env.bus.trigger('do-action', {\n            action: {\n                name: this.env._t(\"SMS Failures\"),\n                type: 'ir.actions.act_window',\n                view_mode: 'kanban,list,form',\n                views: [[false, 'kanban'], [false, 'list'], [false, 'form']],\n                target: 'current',\n                res_model: this.res_model,\n                domain: [['message_has_sms_error', '=', true]],\n            },\n        });\n        if (this.messaging.device.isMobile) {\n            // messaging menu has a higher z-index than views so it must\n            // be closed to ensure the visibility of the view\n            this.messaging.messagingMenu.close();\n        }\n    },\n});\n", "/** @odoo-module **/\nimport { registry } from \"@web/core/registry\";\nimport { useService } from \"@web/core/utils/hooks\";\n\nconst { Component, hooks } = owl;\n\nclass StudioSystray extends Component {\n    setup() {\n        this.hm = useService(\"home_menu\");\n        this.studio = useService(\"studio\");\n        this.rootRef = hooks.useRef(\"root\");\n        this.env.bus.on(\"ACTION_MANAGER:UI-UPDATED\", this, (mode) => {\n            if (mode !== \"new\" && this.rootRef.el) {\n                this.rootRef.el.classList.toggle(\"o_disabled\", this.buttonDisabled);\n            }\n        });\n    }\n    get buttonDisabled() {\n        return !this.studio.isStudioEditable();\n    }\n    _onClick() {\n        this.studio.open();\n    }\n}\nStudioSystray.template = \"web_studio.SystrayItem\";\n\nexport const systrayItem = {\n    Component: StudioSystray,\n    isDisplayed: (env) => env.services.user.isSystem,\n};\n\nregistry.category(\"systray\").add(\"StudioSystrayItem\", systrayItem, { sequence: 1 });\n", "/** @odoo-module **/\nimport { registry } from \"@web/core/registry\";\nimport legacyBus from \"web_studio.bus\";\n\nconst { core } = owl;\n\nconst URL_VIEW_KEY = \"_view_type\";\nconst URL_ACTION_KEY = \"_action\";\nconst URL_TAB_KEY = \"_tab\";\nconst URL_MODE_KEY = \"mode\";\n\nexport const MODES = {\n    EDITOR: \"editor\",\n    HOME_MENU: \"home_menu\",\n    APP_CREATOR: \"app_creator\",\n};\n\nexport class NotEditableActionError extends Error {}\n\nexport const SUPPORTED_VIEW_TYPES = [\n    \"activity\",\n    \"calendar\",\n    \"cohort\",\n    \"dashboard\",\n    \"form\",\n    \"gantt\",\n    \"graph\",\n    \"kanban\",\n    \"list\",\n    \"map\",\n    \"pivot\",\n    \"search\",\n];\n\nexport const studioService = {\n    dependencies: [\"action\", \"home_menu\", \"router\", \"user\"],\n    async start(env, { user }) {\n        function _getCurrentAction() {\n            const currentController = env.services.action.currentController;\n            return currentController ? currentController.action : null;\n        }\n\n        function _isStudioEditable(action) {\n            if (action.type === \"ir.actions.client\") {\n                // home_menu is somehow customizable (app creator)\n                return action.tag === \"menu\" ? true : false;\n            }\n            if (action.type === \"ir.actions.act_window\" && action.xml_id) {\n                if (\n                    action.res_model.indexOf(\"settings\") > -1 &&\n                    action.res_model.indexOf(\"x_\") !== 0\n                ) {\n                    return false; // settings views aren't editable; but x_settings is\n                }\n                if (action.res_model === \"board.board\") {\n                    return false; // dashboard isn't editable\n                }\n                if (action.view_mode === \"qweb\") {\n                    // Apparently there is a QWebView that allows to\n                    // implement ActWindow actions that are completely custom\n                    // but not editable by studio\n                    return false;\n                }\n                return action.res_model ? true : false;\n            }\n            return false;\n        }\n\n        function isViewEditable(view) {\n            return view && SUPPORTED_VIEW_TYPES.includes(view);\n        }\n\n        const bus = new core.EventBus();\n        let inStudio = false;\n\n        const state = {\n            studioMode: null,\n            editedViewType: null,\n            editedAction: null,\n            editedControllerState: null,\n            editorTab: \"views\",\n            x2mEditorPath: [],\n            editedReport: null,\n        };\n\n        async function _loadParamsFromURL() {\n            const currentHash = env.services.router.current.hash;\n            user.removeFromContext(\"studio\");\n            if (currentHash.action === \"studio\") {\n                user.updateContext({ studio: 1 });\n                state.studioMode = currentHash[URL_MODE_KEY];\n                state.editedViewType = currentHash[URL_VIEW_KEY] || null;\n                state.editorTab = currentHash[URL_TAB_KEY] || null;\n\n                const editedActionId = currentHash[URL_ACTION_KEY];\n                if (state.studioMode === MODES.EDITOR) {\n                    if (editedActionId) {\n                        state.editedAction = await env.services.action.loadAction(editedActionId);\n                    } else {\n                        state.editedAction = null;\n                    }\n                }\n                if (!state.editedAction || !_isStudioEditable(state.editedAction)) {\n                    state.studioMode = state.studioMode || MODES.HOME_MENU;\n                    state.editedAction = null;\n                    state.editedViewType = null;\n                    state.editorTab = null;\n                }\n            }\n        }\n\n        let studioProm = _loadParamsFromURL();\n        env.bus.on(\"ROUTE_CHANGE\", null, async () => {\n            studioProm = _loadParamsFromURL();\n        });\n\n        async function _openStudio(targetMode, action = false, viewType = false) {\n            if (!targetMode) {\n                throw new Error(\"mode is mandatory\");\n            }\n\n            const options = {};\n            if (targetMode === MODES.EDITOR) {\n                let controllerState;\n                if (!action) {\n                    // systray open\n                    const currentController = env.services.action.currentController;\n                    if (currentController) {\n                        action = currentController.action;\n                        viewType = currentController.view.type;\n                        controllerState = Object.assign({}, currentController.getLocalState());\n                        const { resIds } = currentController.getGlobalState() || {};\n                        if (resIds) {\n                            controllerState.resIds = resIds;\n                        }\n                    }\n                }\n                if (!_isStudioEditable(action)) {\n                    throw new NotEditableActionError();\n                }\n                if (action !== state.editedAction) {\n                    options.clearBreadcrumbs = true;\n                }\n                state.editedAction = action;\n                const vtype = viewType || action.views[0][1]; // fallback on first view of action\n                state.editedViewType = isViewEditable(vtype) ? vtype : null;\n                state.editorTab = \"views\";\n                state.editedControllerState = controllerState || {};\n            }\n            if (inStudio) {\n                options.stackPosition = \"replaceCurrentAction\";\n            }\n            state.studioMode = targetMode;\n            user.updateContext({ studio: 1 });\n            // LPE: we don't manage errors during do action.....\n            return env.services.action.doAction(\"studio\", options);\n        }\n\n        async function open(mode = false, actionId = false) {\n            if (!mode && inStudio) {\n                throw new Error(\"can't already be in studio\");\n            }\n            if (!mode) {\n                mode = env.services.home_menu.hasHomeMenu ? MODES.HOME_MENU : MODES.EDITOR;\n            }\n            let action;\n            if (actionId) {\n                action = await env.services.action.loadAction(actionId);\n            }\n            return _openStudio(mode, action);\n        }\n\n        async function leave() {\n            if (!inStudio) {\n                throw new Error(\"leave when not in studio???\");\n            }\n            env.bus.trigger(\"CLEAR-CACHES\");\n            const options = {\n                stackPosition: \"replacePreviousAction\", // If target is menu, then replaceCurrent, see comment above why we cannot do this\n            };\n            let actionId;\n            if (state.studioMode === MODES.EDITOR) {\n                actionId = state.editedAction.id;\n                options.additionalContext = state.editedAction.context;\n                options.viewType = state.editedViewType;\n                if (state.editedControllerState) {\n                    options.props = { resId: state.editedControllerState.currentId };\n                }\n            } else {\n                actionId = \"menu\";\n            }\n            user.removeFromContext(\"studio\");\n            await env.services.action.doAction(actionId, options);\n            // force rendering of the main navbar to allow adaptation of the size\n            env.bus.trigger(\"MENUS:APP-CHANGED\");\n            state.studioMode = null;\n            state.x2mEditorPath = [];\n        }\n\n        async function reload(params = {}) {\n            env.bus.trigger(\"CLEAR-CACHES\");\n            const action = await env.services.action.loadAction(state.editedAction.id);\n            setParams({ action, ...params });\n        }\n\n        function toggleHomeMenu() {\n            if (!inStudio) {\n                throw new Error(\"is it possible?\");\n            }\n            let targetMode;\n            if (state.studioMode === MODES.APP_CREATOR || state.studioMode === MODES.EDITOR) {\n                targetMode = MODES.HOME_MENU;\n            } else {\n                targetMode = MODES.EDITOR;\n            }\n            const action = targetMode === MODES.EDITOR ? state.editedAction : null;\n            if (targetMode === MODES.EDITOR && !action) {\n                throw new Error(\"this button should not be clickable/visible\");\n            }\n            const viewType = targetMode === MODES.EDITOR ? state.editedViewType : null;\n            return _openStudio(targetMode, action, viewType);\n        }\n\n        function pushState() {\n            const hash = { action: \"studio\" };\n            hash[URL_MODE_KEY] = state.studioMode;\n            hash[URL_ACTION_KEY] = undefined;\n            hash[URL_VIEW_KEY] = undefined;\n            hash[URL_TAB_KEY] = undefined;\n            if (state.studioMode === MODES.EDITOR) {\n                hash[URL_ACTION_KEY] = JSON.stringify(state.editedAction.id);\n                hash[URL_VIEW_KEY] = state.editedViewType || undefined;\n                hash[URL_TAB_KEY] = state.editorTab;\n            }\n            env.services.router.pushState(hash, { replace: true });\n        }\n\n        function setParams(params = {}) {\n            if (\"mode\" in params) {\n                state.studioMode = params.mode;\n            }\n            if (\"viewType\" in params) {\n                state.editedViewType = params.viewType || null;\n                state.x2mEditorPath = [];\n            }\n            if (\"action\" in params) {\n                state.editedAction = params.action || null;\n            }\n            if (\"editorTab\" in params) {\n                state.editorTab = params.editorTab;\n                state.x2mEditorPath = [];\n                if (!(\"viewType\" in params)) {\n                    // clean me\n                    state.editedViewType = null;\n                }\n                if (!(\"editedReport\" in params)) {\n                    state.editedReport = null;\n                }\n            }\n            if (\"editedReport\" in params) {\n                state.editedReport = params.editedReport;\n            }\n            if (\"x2mEditorPath\" in params) {\n                state.x2mEditorPath = params.x2mEditorPath;\n            }\n            if (state.editorTab !== \"reports\") {\n                state.editedReport = null;\n            }\n            bus.trigger(\"UPDATE\");\n        }\n        legacyBus.on(\"STUDIO_ENTER_X2M\", null, (newX2mPath) => {\n            const x2mEditorPath = state.x2mEditorPath.slice();\n            x2mEditorPath.push(newX2mPath);\n            setParams({ x2mEditorPath });\n        });\n\n        env.bus.on(\"ACTION_MANAGER:UI-UPDATED\", null, (mode) => {\n            if (mode === \"new\") {\n                return;\n            }\n            const action = _getCurrentAction();\n            inStudio = action.tag === \"studio\";\n        });\n\n        const legacyBusTrigger = legacyBus.trigger.bind(legacyBus);\n        const busTrigger = bus.trigger.bind(bus);\n        function mappedTrigger(...args) {\n            legacyBusTrigger(...args);\n            busTrigger(...args);\n        }\n        legacyBus.trigger = mappedTrigger;\n        bus.trigger = mappedTrigger;\n\n        return {\n            MODES,\n            bus,\n            isStudioEditable() {\n                const action = _getCurrentAction();\n                return action ? _isStudioEditable(action) : false;\n            },\n            open,\n            reload,\n            pushState,\n            leave,\n            toggleHomeMenu,\n            setParams,\n            get ready() {\n                return studioProm;\n            },\n            get mode() {\n                return state.studioMode;\n            },\n            get editedAction() {\n                return state.editedAction;\n            },\n            get editedViewType() {\n                return state.editedViewType;\n            },\n            get editedControllerState() {\n                return state.editedControllerState;\n            },\n            get editedReport() {\n                return state.editedReport;\n            },\n            get editorTab() {\n                return state.editorTab;\n            },\n            get x2mEditorPath() {\n                return state.x2mEditorPath;\n            },\n        };\n    },\n};\n\nregistry.category(\"services\").add(\"studio\", studioService);\n", "/** @odoo-module alias=web_studio.utils default=false **/\nexport const COLORS = [\n    \"#FFFFFF\",\n    \"#262c34\",\n    \"#00dec9\",\n    \"#2ecc71\",\n    \"#f1c40f\",\n    \"#FFAB4A\",\n    \"#EB5A46\",\n    \"#9b59b6\",\n    \"#0079BF\",\n    \"#4dd0e1\",\n];\n\nexport const BG_COLORS = [\n    \"#1abc9c\",\n    \"#58a177\",\n    \"#B4C259\",\n    \"#56829f\",\n    \"#636DA9\",\n    \"#34495e\",\n    \"#BC4242\",\n    \"#C6572A\",\n    \"#d49054\",\n    \"#D89F45\",\n    \"#DAB852\",\n    \"#606060\",\n    \"#6B6C70\",\n    \"#838383\",\n    \"#F5F5F5\",\n];\n\nexport const ICONS = [\n    \"fa fa-diamond\",\n    \"fa fa-bell\",\n    \"fa fa-calendar\",\n    \"fa fa-circle\",\n    \"fa fa-cube\",\n    \"fa fa-cubes\",\n    \"fa fa-flag\",\n    \"fa fa-folder-open\",\n    \"fa fa-home\",\n    \"fa fa-rocket\",\n    \"fa fa-sitemap\",\n    \"fa fa-area-chart\",\n    \"fa fa-balance-scale\",\n    \"fa fa-database\",\n    \"fa fa-globe\",\n    \"fa fa-institution\",\n    \"fa fa-random\",\n    \"fa fa-umbrella\",\n    \"fa fa-bed\",\n    \"fa fa-bolt\",\n    \"fa fa-commenting\",\n    \"fa fa-envelope\",\n    \"fa fa-flask\",\n    \"fa fa-magic\",\n    \"fa fa-pie-chart\",\n    \"fa fa-retweet\",\n    \"fa fa-shopping-basket\",\n    \"fa fa-star\",\n    \"fa fa-television\",\n    \"fa fa-tree\",\n    \"fa fa-thumbs-o-up\",\n    \"fa fa-file-o\",\n    \"fa fa-wheelchair\",\n    \"fa fa-code\",\n    \"fa fa-spinner\",\n    \"fa fa-ticket\",\n    \"fa fa-shield\",\n    \"fa fa-recycle\",\n    \"fa fa-phone\",\n    \"fa fa-microphone\",\n    \"fa fa-magnet\",\n    \"fa fa-info\",\n    \"fa fa-inbox\",\n    \"fa fa-heart\",\n    \"fa fa-bullseye\",\n    \"fa fa-cutlery\",\n    \"fa fa-credit-card\",\n    \"fa fa-briefcase\",\n];\n\n/**\n * @param {Integer} string_length\n * @returns {String} A random string with numbers and lower/upper case chars\n */\nexport function randomString(string_length) {\n    var chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\n    var randomstring = \"\";\n    for (var i = 0; i < string_length; i++) {\n        var rnum = Math.floor(Math.random() * chars.length);\n        randomstring += chars.substring(rnum, rnum + 1);\n    }\n    return randomstring;\n}\n\nexport default {\n    BG_COLORS,\n    COLORS,\n    ICONS,\n    randomString,\n};\n", "/** @odoo-module */\n\nimport { _t } from \"web.core\";\nimport utils from \"web_studio.utils\";\nimport tour from \"web_tour.tour\";\n\ntour.register(\n    \"web_studio_home_menu_background_tour\",\n    {\n        url: \"/web\",\n        sequence: 260,\n    },\n    [\n        {\n            trigger: \".o_web_studio_navbar_item\",\n            content: _t(\"Want to customize the background? Let\u2019s activate <b>Odoo Studio</b>.\"),\n            position: \"bottom\",\n            extra_trigger: \".o_home_menu\",\n        },\n        {\n            trigger: \".o_web_studio_home_studio_menu .dropdown-toggle\",\n            content: _t(\"Click here.\"),\n            position: \"right\",\n        },\n        {\n            trigger:\n                \".o_web_studio_home_studio_menu .dropdown-menu .dropdown-item.o_web_studio_change_background\",\n            content: _t(\"Change the <b>background</b>, make it yours.\"),\n            position: \"bottom\",\n        },\n    ]\n);\n\ntour.register(\n    \"web_studio_new_app_tour\",\n    {\n        url: \"/web#action=studio&mode=home_menu\",\n        sequence: 270,\n    },\n    [\n        {\n            trigger: \".o_web_studio_new_app\",\n            auto: true,\n            position: \"bottom\",\n        },\n        {\n            trigger: \".o_web_studio_app_creator_next\",\n            content: _t(\"I bet you can <b>build an app</b> in 5 minutes. Ready for the challenge?\"),\n            position: \"top\",\n        },\n        {\n            trigger: \".o_web_studio_app_creator_name > input\",\n            content: _t(\"How do you want to <b>name</b> your app? Library, Academy, \u2026?\"),\n            position: \"right\",\n            run: \"text \" + utils.randomString(6),\n        },\n        {\n            trigger: \".o_web_studio_selectors .o_web_studio_selector:eq(2)\",\n            content: _t(\"Now, customize your icon. Make it yours.\"),\n            position: \"top\",\n        },\n        {\n            trigger: \".o_web_studio_app_creator_next.is_ready\",\n            content: _t(\"Go on, you are almost done!\"),\n            position: \"top\",\n        },\n        {\n            trigger: \".o_web_studio_app_creator_menu > input\",\n            content: _t(\"How do you want to name your first <b>menu</b>? My books, My courses?\"),\n            position: \"right\",\n            run: \"text \" + utils.randomString(6),\n        },\n        {\n            trigger: \".o_web_studio_app_creator_next.is_ready\",\n            content: _t(\n                \"Continue to configure some typical behaviors for your new type of object.\"\n            ),\n            position: \"bottom\",\n        },\n        {\n            trigger: \".o_web_studio_model_configurator_next\",\n            content: _t(\n                \"All set? You are just one click away from <b>generating your first app</b>.\"\n            ),\n            position: \"bottom\",\n        },\n        {\n            trigger:\n                \".o_web_studio_sidebar .o_web_studio_field_type_container:eq(1) .o_web_studio_field_char\",\n            content: _t(\n                \"Nicely done! Let\u2019s build your screen now; <b>drag</b> a <i>text field</i> and <b>drop</b> it in your view, on the right.\"\n            ),\n            position: \"bottom\",\n            run: \"drag_and_drop .o_web_studio_form_view_editor .o_inner_group\",\n            timeout: 60000 /* previous step reloads registry, etc. - could take a long time */,\n        },\n        {\n            trigger: \".o_web_studio_form_view_editor td.o_td_label\",\n            content: _t(\"To <b>customize a field</b>, click on its <i>label</i>.\"),\n            position: \"bottom\",\n        },\n        {\n            trigger: '.o_web_studio_sidebar_content.o_display_field input[name=\"string\"]',\n            content: _t(\n                \"Here, you can <b>name</b> your field (e.g. Book reference, ISBN, Internal Note, etc.).\"\n            ),\n            position: \"bottom\",\n            run: \"text My Field\",\n        },\n        {\n            // wait for the field to be renamed\n            extra_trigger: \".o_web_studio_form_view_editor td.o_td_label:contains(My Field)\",\n            trigger: \".o_web_studio_sidebar .o_web_studio_new\",\n            content: _t(\"Good job! To add more <b>fields</b>, come back to the <i>Add tab</i>.\"),\n            position: \"bottom\",\n            // the rename operation (/web_studio/rename_field + /web_studio/edit_view)\n            // takes a while and sometimes reaches the default 10s timeout\n            timeout: 20000,\n            async run() {\n                // During the rename, the UI is blocked. When the rpc returns, the UI is\n                // unblocked and the sidebar is re-rendered. Without this, the step is\n                // sometimes executed exactly when the sidebar is about to be replaced,\n                // and it doesn't work. We thus here wait for 1s to ensure that the\n                // sidebar has been re-rendered, before going further.\n                // note1: there's nothing in the DOM that could be used to determine that\n                // we're ready to continue (the sidebar is just replaced by itself, same state)\n                // note2: ideally, it should work whenever we click, but with the current\n                // architecture of studio, it's really hard to fix. Hopefully, when studio\n                // will be converted to owl, this should no longer be an issue.\n                await new Promise((r) => setTimeout(r, 1000));\n                $(\".o_web_studio_sidebar .o_web_studio_new\").click();\n            },\n        },\n        {\n            trigger:\n                \".o_web_studio_sidebar .o_web_studio_field_type_container:eq(1) .o_web_studio_field_selection\",\n            content: _t(\n                \"Drag & drop <b>another field</b>. Let\u2019s try with a <i>selection field</i>.\"\n            ),\n            position: \"bottom\",\n            run: \"drag_and_drop .o_web_studio_form_view_editor .o_inner_group\",\n        },\n        {\n            trigger: \".o_web_studio_field_dialog_form > .o_web_studio_add_selection input\",\n            content: _t(\n                \"Create your <b>selection values</b> (e.g.: Romance, Polar, Fantasy, etc.)\"\n            ),\n            position: \"top\",\n            run: \"text \" + utils.randomString(6),\n        },\n        {\n            trigger:\n                \".o_web_studio_field_dialog_form > .o_web_studio_add_selection .o_web_studio_add_selection_value\",\n            auto: true,\n        },\n        {\n            trigger: \".modal-footer > button:eq(0)\",\n            auto: true,\n        },\n        {\n            trigger: \".o_web_studio_sidebar_text\",\n            auto: true,\n        },\n        {\n            trigger: \".o_web_studio_form_view_editor .o_Chatter\",\n            content: _t(\"Click to edit messaging features on your model.\"),\n            position: \"top\",\n            timeout: 15000, // this can take some time on 'slow' builds (coverage, etc.)\n        },\n        {\n            trigger: '.o_web_studio_sidebar .o_display_chatter input[name=\"email_alias\"]',\n            content: _t(\n                \"Set an <b>email alias</b>. Then, try to send an email to this address; it will create a document automatically for you. Pretty cool, huh?\"\n            ),\n            position: \"bottom\",\n        },\n        {\n            trigger: \".o_web_studio_leave\",\n            content: _t(\n                \"Let\u2019s check the result. Close Odoo Studio to get an <b>overview of your app</b>.\"\n            ),\n            position: \"left\",\n        },\n        {\n            trigger: \"input.o_required_modifier\",\n            auto: true,\n            position: \"bottom\",\n        },\n        {\n            trigger: \".o_control_panel .o_cp_buttons .o_form_button_save\",\n            content: _t(\"Save.\"),\n            position: \"right\",\n        },\n        {\n            trigger: \".o_web_studio_navbar_item\",\n            extra_trigger: \".o_form_view.o_form_readonly\",\n            content: _t(\n                \"Wow, nice! And I\u2019m sure you can make it even better! Use this icon to open <b>Odoo Studio</b> and customize any screen.\"\n            ),\n            position: \"bottom\",\n        },\n        {\n            trigger: \".o_web_studio_menu .o_menu_sections li:contains(Views)\",\n            content: _t(\"Want more fun? Let\u2019s create more <b>views</b>.\"),\n            position: \"bottom\",\n        },\n        {\n            trigger:\n                '.o_web_studio_view_category .o_web_studio_view_type.o_web_studio_inactive[data-type=\"kanban\"] .o_web_studio_thumbnail',\n            content: _t(\"What about a <b>Kanban view</b>?\"),\n            position: \"bottom\",\n        },\n        {\n            trigger: \".o_web_studio_sidebar .o_web_studio_new\",\n            content: _t(\"Now you\u2019re on your own. Enjoy your <b>super power</b>.\"),\n            position: \"bottom\",\n        },\n    ]\n);\n", "odoo.define('web_studio.ApprovalComponent', function (require) {\n    'use strict';\n\n    const { Component, useState } = owl;\n    const Dialog = require('web.OwlDialog');\n\n    class ApprovalComponent extends Component {\n        //--------------------------------------------------------------------------\n        // Lifecycle\n        //--------------------------------------------------------------------------\n\n        constructor() {\n            super(...arguments);\n            this.state = useState({\n                entries: null,\n                rules: null,\n                showInfo: false,\n                syncing: false,\n                init: true,\n            });\n        }\n\n        mounted() {\n            this.env.bus.on('refresh-approval', this, this._onRefresh);\n            return super.mounted(...arguments);\n        }\n\n        willUnmount() {\n            this.env.bus.off('refresh-approval', this, this._onRefresh);\n            return super.willUnmount(...arguments);\n        }\n\n        async willStart() {\n            return Promise.all([this._fetchApprovalData(), super.willStart(...arguments)]);\n        }\n\n        async willUpdateProps() {\n            return Promise.all([this._fetchApprovalData(), super.willUpdateProps(...arguments)]);\n        }\n\n        //--------------------------------------------------------------------------\n        // Public\n        //--------------------------------------------------------------------------\n\n        /**\n         * @param {Number} ruleId: id of the rule for which the entry is requested.\n         * @returns {Object}\n         */\n        getEntry(ruleId) {\n            return this.state.entries.find((e) => e.rule_id[0] === ruleId);\n        }\n\n        //--------------------------------------------------------------------------\n        // Private\n        //--------------------------------------------------------------------------\n\n        /**\n         * Delete an approval entry for a given rule server-side.\n         * @private\n         * @param {Number} ruleId\n         */\n        _cancelApproval(ruleId) {\n            this._setSyncing(true);\n            this.rpc({\n                model: 'studio.approval.rule',\n                method: 'delete_approval',\n                args: [[ruleId]],\n                kwargs: {\n                    res_id: this.props.resId,\n                },\n                context: this.env.session.user_context,\n            }).then(async () => {\n                this._notifyChange();\n                await this._fetchApprovalData()\n                this._setSyncing(false);\n            }).guardedCatch(async () => {\n                this._notifyChange();\n                await this._fetchApprovalData()\n                this._setSyncing(false);\n            });\n        }\n\n        /**\n         * @private\n         */\n        async _fetchApprovalData() {\n            const spec = await this.rpc(\n                {\n                    model: 'studio.approval.rule',\n                    method: 'get_approval_spec',\n                    args: [this.props.model, this.props.method, this.props.action],\n                    kwargs: {\n                        res_id: !this.props.inStudio && this.props.resId,\n                    },\n                    context: this.env.session.user_context,\n                },\n                { shadow: true }\n            );\n            // reformat the dates\n            spec.entries.forEach((entry) => {\n                entry.long_date = moment.utc(entry.write_date).local().format('LLL');\n                entry.short_date = moment.utc(entry.write_date).local().format('LL');\n            });\n            Object.assign(this.state, spec);\n            this.state.init = false;\n        }\n\n        /**\n         * Notifies other widgets that an approval change has occurred server-side,\n         * this is useful if more than one button with the same action is in the view\n         * to avoid displaying conflicting approval data.\n         * @private\n         */\n        _notifyChange() {\n            this.env.bus.trigger('refresh-approval', {\n                approvalSpec: [this.props.model, this.props.resId, this.props.method, this.props.action],\n            });\n        }\n\n        /**\n         * Create or update an approval entry for a specified rule server-side.\n         * @private\n         * @param {Number} ruleId\n         * @param {Boolean} approved\n         */\n        _setApproval(ruleId, approved) {\n            this._setSyncing(true);\n            this.rpc({\n                model: 'studio.approval.rule',\n                method: 'set_approval',\n                args: [[ruleId]],\n                kwargs: {\n                    res_id: this.props.resId,\n                    approved: approved,\n                },\n                context: this.env.session.user_context,\n            }).then(async () => {\n                this._notifyChange();\n                await this._fetchApprovalData();\n                this._setSyncing(false);\n            }).guardedCatch(async () => {\n                this._notifyChange();\n                await this._fetchApprovalData();\n                this._setSyncing(false);\n            });\n        }\n\n        /**\n         * Mark the widget as syncing; this is used to disable buttons while\n         * an action is being processed server-side.\n         * @param {Boolean} value: true to mark the widget as syncing, false otherwise.\n         */\n        _setSyncing(value) {\n            this.state.syncing = value;\n        }\n\n        //--------------------------------------------------------------------------\n        // Handlers\n        //--------------------------------------------------------------------------\n\n        /**\n         * Handle notification dispatched by the bus; if another action has modifed\n         * approval data server-side for an approval spec that matches this widget,\n         * it will update itself.\n         * @param {Object} ev\n         */\n        _onRefresh(ev) {\n            if (\n                ev.approvalSpec[0] === this.props.model &&\n                ev.approvalSpec[1] === this.props.resId &&\n                ev.approvalSpec[2] === this.props.method &&\n                ev.approvalSpec[3] === this.props.action\n            ) {\n                // someone clicked on this widget's button, which\n                // might trigger approvals server-side\n                // refresh the widget\n                this._fetchApprovalData();\n            }\n        }\n\n        /**\n         * Display or hide more information through a popover (desktop) or\n         * dialog (mobile).\n         * @param {DOMEvent} ev\n         */\n        _toggleInfo(ev) {\n            if (!this.props.inStudio) {\n                ev.stopPropagation();\n            }\n            this.state.showInfo = !this.state.showInfo;\n        }\n    }\n\n    ApprovalComponent.template = 'Studio.ApprovalComponent';\n    ApprovalComponent.components = { Dialog };\n    ApprovalComponent.props = {\n        action: [Number, Boolean],\n        actionName: { type: String, optional: true },\n        inStudio: Boolean,\n        method: [String, Boolean],\n        model: String,\n        resId: { type: Number, optional: true },\n    };\n\n    return ApprovalComponent;\n});\n", "odoo.define('web_studio.bus', function (require) {\n\"use strict\";\n\nvar Bus = require('web.Bus');\n\nvar bus = new Bus();\n\n/* Events on this bus\n * ==================\n *\n * `studio_toggled`\n *      Studio has been toggled\n *      @param mode: ['app_creator', 'main']\n *\n * `studio_main`\n *      Studio main has been opened\n *      @param action: the edited action\n *\n * `action_changed`\n *      the action used by Studio has been changed (updated server side).\n *      @param action: the updated action\n *\n * `edition_mode_entered`\n *      the view has entered in edition mode.\n *      @param view_type\n *\n * `toggle_snack_bar`\n *     a temporary message needs to be displayed.\n *     @param type either 'saved' or 'saving'\n *\n * `(un,re)do_clicked`\n *      during the view edition, the button (un,re)do has been clicked.\n *\n * `(un,re)do_available`\n *      during the view edition, the button (un,re)do has become available.\n *\n * `(un,re)do_not_available`\n *      during the view edition, the button (un,re)do has become unavailable.\n *\n */\n\nreturn bus;\n\n});\n", "odoo.define('web_studio.FormRenderer', function (require) {\n    /**\n     * Overrides on the form renderer to modify the behaviour\n     * of buttons in form views so the that Studio Validation\n     * mechanism works with them.\n     *\n     * Add a ApprovalComponent inside buttons with the `studio_approval`\n     * attribute if they're visible.\n     */\n    'use strict';\n\n    const FormRenderer = require('web.FormRenderer');\n    const { ComponentWrapper } = require('web.OwlCompatibility');\n    const ApprovalComponent = require('web_studio.ApprovalComponent');\n\n    FormRenderer.include({\n        /**\n         * Override to add an approval widget (if needed) on header buttons.\n         * @private\n         * @param {Object} node\n         * @returns {jQueryElement}\n         */\n        _renderHeaderButton(node) {\n            const $button = this._super(...arguments);\n            this._addApprovalComponent($button, node);\n            return $button;\n        },\n        /**\n         * Override to add an approval widget (if needed) on stat buttons.\n         * @private\n         * @param {Object} node\n         * @returns {jQueryElement}\n         */\n        _renderStatButton(node) {\n            const $button = this._super(...arguments);\n            this._addApprovalComponent($button, node);\n            return $button;\n        },\n        /**\n         * Override to add an approval widget (if needed) on  generic buttons.\n         * @private\n         * @param {Object} node\n         * @returns {jQueryElement}\n         */\n        _renderTagButton(node) {\n            const $button = this._super(...arguments);\n            this._addApprovalComponent($button, node);\n            return $button;\n        },\n        /**\n         * Append an ApprovalComponent to buttons that have the studio_approval\n         * attribute set and that are visible (no 'invisible' modifier).\n         * This is used for rendering only, the actual check of approval rules\n         * is done in the form controller - there's no need to display the widget\n         * for the approval flow to work (and hiding it on invisible buttons\n         * spares us a few RPC calls).\n         * @param {JQueryElement} $el\n         * @param {Object} node\n         */\n        async _addApprovalComponent($el, node) {\n            const attrs = node.attrs;\n            const approvalEnabled = attrs.studio_approval && attrs.studio_approval !== 'False';\n            const isInvisible = $el[0].classList.contains('o_invisible_modifier');\n            if (approvalEnabled && !isInvisible) {\n                const options = {\n                    action: false,\n                    /* actionName will be falsy for stat buttons, but the feature\n                    is not really made for them and this is an informative field,\n                    i'm not about to go exploring the tree of children of the node\n                    to find a meaningful name */\n                    actionName: attrs.string,\n                    inStudio: Boolean(this.state.getContext().studio),\n                    method: false,\n                    model: this.state.model,\n                    resId: this.state.res_id,\n                };\n                if (attrs.type === 'object') {\n                    options.method = attrs.name;\n                } else if (attrs.type === 'action') {\n                    options.action = parseInt(attrs.name);\n                }\n                const approvalComponent = new ComponentWrapper(this, ApprovalComponent, options);\n                await approvalComponent.mount($el[0]);\n            }\n        },\n    });\n});\n", "odoo.define('web_studio.ListRenderer', function (require) {\n\"use_strict\";\n\n/**\n * In this file, we patch the ListRenderer, to open Studio when the user clicks\n * on 'Add a field' in the optional field dropdown. We create a dedicated file\n * for this patch as it can't be lazy loaded when the user first opens Studio,\n * as this patch applies outside Studio.\n */\n\nconst ListRenderer = require('web.ListRenderer');\nconst { patch } = require('web.utils');\n\npatch(ListRenderer.prototype, 'web_studio.ListRenderer', {\n    /**\n     * This function opens the studio mode with current view\n     *\n     * @override\n     */\n    _onAddCustomFieldClick: function (event) {\n        event.stopPropagation();\n        this.trigger_up('studio_icon_clicked');\n    },\n});\n\n});\n", "odoo.define('web_studio.FormController', function (require) {\n    /**\n     * Monkeypatching of the form controller to modify the behaviour\n     * of buttons in form views so the that Studio Validation\n     * mechanism works with them.\n     *\n     * Intercept calls to `_callButtonAction` and do a proper validation\n     * of approvals before continuing with the action.\n     */\n    'use strict';\n\n    const core = require('web.core');\n    const FormController = require('web.FormController');\n\n    const _t = core._t;\n\n    FormController.include({\n        /**\n         * Intercept calls for buttons that have the `studio_approval` attrs\n         * set; the action (method or action id) is checked server-side for the\n         * current record to check if the current user can proceed or not base on\n         * approval flows. If not, a notification is displayed detailing the issue;\n         * if yes, the action proceeds normally.\n         * @override\n         * @param {Object} attrs the attrs of the button clicked\n         * @param {Object} [record] the current state of the view\n         * @returns {Promise}\n         */\n        async _callButtonAction(attrs, record) {\n            const _super = this._super;\n            if (attrs.studio_approval && attrs.studio_approval !== 'False') {\n                const appSpec = await this._checkApproval(attrs, record);\n                if (!appSpec.approved) {\n                    // we've just saved the record, refresh the view since this is\n                    // normally done in super that won't get called\n                    await this.update({}, { reload: true });\n                    const missingApprovals = [];\n                    const doneApprovals = appSpec.entries.filter((e) => e.approved).map((e) => e.rule_id[0]);\n                    appSpec.rules.forEach((r) => {if (!doneApprovals.includes(r.id)) {missingApprovals.push(r);}});\n                    let msg = '<ul>';\n                    missingApprovals.forEach((r) => (msg += `<li>${r.message || r.group_id[1]}</li>`));\n                    msg += '</ul>';\n                    this.displayNotification({\n                        subtitle: _t('The following approvals are missing:'),\n                        message: msg,\n                        type: 'warning',\n                    });\n                    return Promise.reject();\n                }\n            }\n            return _super.apply(this, arguments);\n        },\n\n        /**\n         * Check server-side the status of approvals for an action for a particular\n         * record. An action can be the ID of an ir.actions.actions record (for\n         * buttons linked to an action; e.g. wizards, stat buttons, etc.) or\n         * the name of a method on a model (for buttons that call a method).\n         * @private\n         * @param {Object} data: OdooEvent payload\n         * @param {Object} record\n         * @returns {Object}\n         */\n        async _checkApproval(attrs, record) {\n            const isAction = attrs.type === 'action';\n            const args = [\n                this.modelName,\n                parseInt(record.res_id),\n                isAction ? undefined : attrs.name,\n                isAction ? parseInt(attrs.name) : undefined,\n            ];\n            const result = await this._rpc({\n                model: 'studio.approval.rule',\n                method: 'check_approval',\n                args: args,\n                context: record.context,\n            });\n            // trigger a refresh of the relevant validation widget since validation\n            // could happen server side\n            core.bus.trigger('refresh-approval', { approvalSpec: args });\n            return result;\n        },\n    });\n});\n", "/** @odoo-module **/\n\nimport { browser } from \"@web/core/browser/browser\";\nimport { registry } from \"@web/core/registry\";\n\nexport const studioLegacyService = {\n    dependencies: [\"studio\"],\n    async start(env, { studio }) {\n        browser.addEventListener(\"studio-icon-clicked\", () => {\n            studio.open();\n        });\n    }\n};\n\nregistry.category(\"services\").add(\"studio_legacy\", studioLegacyService);\n", "/** @odoo-module **/\nimport { HomeMenu } from \"@web_enterprise/webclient/home_menu/home_menu\";\nimport { url } from \"@web/core/utils/urls\";\nimport { patch } from \"@web/core/utils/patch\";\n\npatch(HomeMenu.prototype, \"web_studio.HomeMenuBackground\", {\n    setup() {\n        this._super();\n        if (!this.menus.getMenu(\"root\").backgroundImage) {\n            return;\n        }\n        this.backgroundImageUrl = url(\"/web/image\", {\n            id: this.env.services.company.currentCompany.id,\n            model: \"res.company\",\n            field: \"background_image\",\n        });\n    },\n});\n", "odoo.define('sale_timesheet.so_line_many2one', function (require) {\n\"use strict\";\n\nconst fieldRegistry = require('web.field_registry');\nconst { FieldOne2Many, FieldMany2One } = require('web.relational_fields');\n\nconst SoLineOne2Many = FieldOne2Many.extend({\n    _onFieldChanged: function (ev) {\n        if (\n            ev.data.changes &&\n            ev.data.changes.hasOwnProperty('timesheet_ids') &&\n            ev.data.changes.timesheet_ids.operation === 'UPDATE' &&\n            ev.data.changes.timesheet_ids.data &&\n            ev.data.changes.timesheet_ids.data.hasOwnProperty('so_line')) {\n            const line = this.value.data.find(line => {\n                return line.id === ev.data.changes.timesheet_ids.id;\n            });\n            if (!line.is_so_line_edited) {\n                ev.data.changes.timesheet_ids.data.is_so_line_edited = true;\n            }\n        }\n        this._super.apply(this, arguments);\n    }\n});\n\nconst SoLineMany2one = FieldMany2One.extend({\n    /**\n     * @override\n     *\n     * When the user manually changes the field, we need to change the is_so_line_edited field in this model\n     * to know the changes is manual and not via a compute method.\n     */\n    _onFieldChanged(ev) {\n        if (ev.data.changes && ev.data.changes.hasOwnProperty('so_line') && !ev.data.changes.so_line.is_so_line_edited) {\n            ev.data.changes.is_so_line_edited = true;\n        }\n        this._super.apply(this, arguments);\n    },\n});\n\n\nfieldRegistry.add('so_line_one2many', SoLineOne2Many);\nfieldRegistry.add('so_line_many2one', SoLineMany2one);\n\nreturn SoLineOne2Many;\n\n});\n", "odoo.define('pj_dashboard.Dashboard', function (require) {\n\"use strict\";\n\nvar AbstractAction = require('web.AbstractAction');\nvar core = require('web.core');\nvar QWeb = core.qweb;\nvar ajax = require('web.ajax');\nvar rpc = require('web.rpc');\nvar _t = core._t;\nvar session = require('web.session');\nvar web_client = require('web.web_client');\nvar abstractView = require('web.AbstractView');\n\n\n\n\nvar PjDashboard = AbstractAction.extend({\n    template:'PjDashboard',\n    cssLibs: [\n        '/hotel_dashboard/static/src/css/lib/nv.d3.css'\n    ],\n    jsLibs: [\n        '/hotel_dashboard/static/src/js/lib/d3.min.js'\n    ],\n\n    events: {\n             'click .tot_projects':'tot_projects',\n             'click .tot_tasks':'tot_tasks',\n             'click .tot_profitability':'tot_profitability',\n             'click .hr_recorded':'hr_recorded',\n             'click .tot_sale':'tot_sale',\n             'click .tot_draft_reserve':'tot_draft_reserve',\n             'click .tot_confirm_reserve':'tot_confirm_reserve',\n             'click .tot_emp':'tot_emp',\n             'click #income_this_year': 'onclick_income_this_year',\n             'click #income_last_year': 'onclick_income_last_year',\n             'click #income_this_month': 'onclick_income_this_month',\n\n        },\n\n    init: function(parent, context) {\n        this._super(parent, context);\n        this.dashboards_templates = ['DashboardProject','DashboardChart'];\n        this.today_sale = [];\n    },\n\n\n    willStart: function() {\n        var self = this;\n        return $.when(ajax.loadLibs(this), this._super()).then(function() {\n            return self.fetch_data();\n        });\n    },\n\n    start: function() {\n            var self = this;\n            this.set(\"title\", 'Dashboard');\n            return this._super().then(function() {\n                self.render_dashboards();\n                self.render_graphs();\n            });\n        },\n\n    render_dashboards: function(){\n        var self = this;\n        _.each(this.dashboards_templates, function(template) {\n                self.$('.o_pj_dashboard').append(QWeb.render(template, {widget: self}));\n            });\n    },\n\n\n\n    render_graphs: function(){\n        var self = this;\n            self.render_project_task();\n            self.render_top_employees_graph();\n\n    },\n\n    on_reverse_breadcrumb: function() {\n        var self = this;\n        web_client.do_push_state({});\n        this.fetch_data().then(function() {\n            self.$('.o_pj_dashboard').empty();\n            self.render_dashboards();\n            self.render_graphs();\n        });\n    },\n\n//\n    onclick_toggle_two: function(ev) {\n        this.onclick_income_this_year(ev);\n        this.onclick_income_last_year(ev);\n        this.onclick_income_this_month(ev);\n    },\n\n\n\n\n    render_project_task:function(){\n        var self = this;\n        var w = 400;\n        var h = 400;\n        var r = h/2;\n        var elem = this.$('.emp_graph');\n        var colors = ['#70cac1', '#659d4e', '#208cc2', '#4d6cb1', '#584999', '#8e559e', '#cf3650', '#f65337', '#fe7139',\n        '#ffa433', '#ffc25b', '#f8e54b'];\n        var color = d3.scale.ordinal().range(colors);\n        rpc.query({\n            model: \"hotel.folio\",\n            method: \"get_project_task\",\n        }).then(function (data) {\n            var segColor = {};\n            var vis = d3.select(elem[0]).append(\"svg:svg\").data([data]).attr(\"width\", w).attr(\"height\", h).append(\"svg:g\").attr(\"transform\", \"translate(\" + r + \",\" + r + \")\");\n            var pie = d3.layout.pie().value(function(d){return d.value;});\n            var arc = d3.svg.arc().outerRadius(r);\n            var arcs = vis.selectAll(\"g.slice\").data(pie).enter().append(\"svg:g\").attr(\"class\", \"slice\");\n            arcs.append(\"svg:path\")\n                .attr(\"fill\", function(d, i){\n                    return color(i);\n                })\n                .attr(\"d\", function (d) {\n                    return arc(d);\n                });\n\n            var legend = d3.select(elem[0]).append(\"table\").attr('class','legend');\n\n            var tr = legend.append(\"tbody\").selectAll(\"tr\").data(data).enter().append(\"tr\");\n\n            tr.append(\"td\").append(\"svg\").attr(\"width\", '16').attr(\"height\", '16').append(\"rect\")\n                .attr(\"width\", '16').attr(\"height\", '16')\n                .attr(\"fill\",function(d, i){ return color(i) });\n\n            tr.append(\"td\").text(function(d){ return d.label;});\n\n            tr.append(\"td\").attr(\"class\",'legendFreq')\n                .text(function(d){ return d.value;});\n\n\n\n        });\n\n    },\n\n\n\n    //project\n        tot_projects: function(e) {\n        var self = this;\n        e.stopPropagation();\n        e.preventDefault();\n        var options = {\n            on_reverse_breadcrumb: this.on_reverse_breadcrumb,\n        };\n        this.do_action({\n            name: _t(\"Rooms\"),\n            type: 'ir.actions.act_window',\n            res_model: 'hotel.room',\n            view_mode: 'kanban,form',\n            views: [[false, 'list'],[false, 'form']],\n            target: 'current'\n        }, options)\n    },\n\n    //task\n        tot_tasks: function(e) {\n        var self = this;\n        e.stopPropagation();\n        e.preventDefault();\n        var options = {\n            on_reverse_breadcrumb: this.on_reverse_breadcrumb,\n        };\n        this.do_action({\n            name: _t(\"Available Rooms\"),\n            type: 'ir.actions.act_window',\n            res_model: 'hotel.room',\n            view_mode: 'tree,kanban,form',\n            views: [[false, 'list'],[false, 'form']],\n            domain: [['room_status', '=','available' ]],\n            target: 'current'\n        }, options)\n    },\n\n    //task\n    tot_profitability: function(e) {\n        var self = this;\n        e.stopPropagation();\n        e.preventDefault();\n        var options = {\n            on_reverse_breadcrumb: this.on_reverse_breadcrumb,\n        };\n        this.do_action({\n            name: _t(\"Maintain Rooms\"),\n            type: 'ir.actions.act_window',\n            res_model: 'hotel.room',\n            view_mode: 'tree,kanban,form',\n            views: [[false, 'list'],[false, 'form']],\n            domain: [['room_status', '=','maintain' ]],\n            target: 'current'\n        }, options)\n    },\n\n    //hr timesheets\n\n    hr_recorded: function(e) {\n        var self = this;\n        e.stopPropagation();\n        e.preventDefault();\n        var options = {\n            on_reverse_breadcrumb: this.on_reverse_breadcrumb,\n        };\n        this.do_action({\n            name: _t(\"Cleaning Rooms\"),\n            type: 'ir.actions.act_window',\n            res_model: 'hotel.room',\n            view_mode: 'tree,kanban,form',\n            views: [[false, 'list'],[false, 'form']],\n            domain: [['room_status', '=','cleaning' ]],\n            target: 'current'\n        }, options)\n    },\n\n    //total saleorder\n\n        tot_sale: function(e) {\n        var self = this;\n        e.stopPropagation();\n        e.preventDefault();\n        var options = {\n            on_reverse_breadcrumb: this.on_reverse_breadcrumb,\n        };\n        this.do_action({\n            name: _t(\"Reserve Rooms\"),\n            type: 'ir.actions.act_window',\n            res_model: 'hotel.room',\n            view_mode: 'tree',\n            views: [[false, 'list']],\n            domain: [['room_status', '=','reserve' ]],\n            target: 'current'\n        }, options)\n    },\n\n    tot_draft_reserve: function(e) {\n        var self = this;\n        e.stopPropagation();\n        e.preventDefault();\n        var options = {\n            on_reverse_breadcrumb: this.on_reverse_breadcrumb,\n        };\n        this.do_action({\n            name: _t(\"Draft Reserve\"),\n            type: 'ir.actions.act_window',\n            res_model: 'hotel.reservation',\n            view_mode: 'tree',\n            views: [[false, 'list']],\n            domain: [['state', '=','draft' ]],\n            target: 'current'\n        }, options)\n    },\n\n    tot_confirm_reserve: function(e) {\n        var self = this;\n        e.stopPropagation();\n        e.preventDefault();\n        var options = {\n            on_reverse_breadcrumb: this.on_reverse_breadcrumb,\n        };\n        this.do_action({\n            name: _t(\"Confirmed Reserve\"),\n            type: 'ir.actions.act_window',\n            res_model: 'hotel.reservation',\n            view_mode: 'tree',\n            views: [[false, 'list']],\n            domain: [['state', '=','confirm' ]],\n            target: 'current'\n        }, options)\n    },\n\n    //total emp\n\n        tot_emp: function(e) {\n        var self = this;\n        e.stopPropagation();\n        e.preventDefault();\n        var options = {\n            on_reverse_breadcrumb: this.on_reverse_breadcrumb,\n        };\n        this.do_action({\n            name: _t(\"Occupied Rooms\"),\n            type: 'ir.actions.act_window',\n            res_model: 'hotel.room',\n            view_mode: 'tree,form',\n            views: [[false, 'list'],[false, 'form']],\n            domain: [['room_status', '=','occupied' ]],\n            target: 'current'\n        }, options)\n    },\n\n\n\n    render_top_employees_graph:function(){\n    console.log('hhhh')\n       var self = this\n           console.log('bbb')\n\n        var ctx = self.$(\".top_selling_employees\");\n            console.log('vvv',ctx)\n\n            rpc.query({\n                model: \"hotel.folio\",\n                method: 'get_top_timesheet_employees',\n           }).then(function (arrays) {\n\n\n          var data = {\n            labels: arrays[1],\n            datasets: [\n              {\n                label: \"Used Count\",\n                data: arrays[0],\n                backgroundColor: [\n                  \"rgba(190, 27, 75,1)\",\n                  \"rgba(31, 241, 91,1)\",\n                  \"rgba(103, 23, 252,1)\",\n                  \"rgba(158, 106, 198,1)\",\n                  \"rgba(250, 217, 105,1)\",\n                  \"rgba(255, 98, 31,1)\",\n                  \"rgba(255, 31, 188,1)\",\n                  \"rgba(75, 192, 192,1)\",\n                  \"rgba(153, 102, 255,1)\",\n                  \"rgba(255,204,0,1)\"\n                ],\n                borderColor: [\n                 \"rgba(190, 27, 75, 0.2)\",\n                 \"rgba(190, 223, 122, 0.2)\",\n                 \"rgba(103, 23, 252, 0.2)\",\n                  \"rgba(158, 106, 198, 0.2)\",\n                  \"rgba(250, 217, 105, 0.2)\",\n                  \"rgba(255, 98, 31, 0.2)\",\n                  \"rgba(255, 31, 188, 0.2)\",\n                  \"rgba(75, 192, 192, 0.2)\",\n                  \"rgba(153, 102, 255, 0.2)\",\n                  \"rgba(255,204,0,0.3)\"\n                ],\n                borderWidth: 1\n              },\n\n            ]\n          };\n          console.log(data)\n\n  //options\n          var options = {\n            responsive: true,\n            title: {\n              display: true,\n              position: \"top\",\n              text: \" Room Used Graph\",\n              fontSize: 18,\n              fontColor: \"#111\"\n            },\n            legend: {\n              display: true,\n              position: \"bottom\",\n              labels: {\n                fontColor: \"#333\",\n                fontSize: 16\n              }\n            },\n            scales: {\n              yAxes: [{\n                ticks: {\n                  min: 0\n                }\n              }]\n            }\n          };\n        console.log('lllll',data)\n          //create Chart class object\n          var chart = new Chart(ctx, {\n  type: 'bar',\n              data: data,\n            options: options\n          });\n\n        });\n        },\n\n    onclick_income_last_year: function(ev) {\n        ev.preventDefault();\n        var selected = $('.btn.btn-tool.income');\n        var data = $(selected[0]).data();\n        var posted = 1;\n\n        rpc.query({\n                model: 'hotel.folio',\n                method: 'get_income_last_year',\n                args: [],\n            })\n            .then(function(result) {\n\n                $('#net_profit_current_months').hide();\n                $('#net_profit_last_year').show();\n                $('#net_profit_this_year').hide();\n\n                var ctx = document.getElementById(\"canvas\").getContext('2d');\n\n                // Define the data\n\n                var profit = result.profit;\n\n                var labels = result.month; // Add labels to array\n                // End Defining data\n\n                // End Defining data\n                if (window.myCharts != undefined)\n                    window.myCharts.destroy();\n                window.myCharts = new Chart(ctx, {\n                    //var myChart = new Chart(ctx, {\n                    type: 'bar',\n                    data: {\n                        labels: labels,\n                        datasets: [\n                      {\n                                label: 'Profitability', // Name the series\n                                data: profit, // Specify the data values array\n                                backgroundColor: '#0bd465',\n                                borderColor: '#0bd465',\n\n                                borderWidth: 1, // Specify bar border width\n                                type: 'line', // Set this data to a line chart\n                                fill: false\n                            }\n                        ]\n                    },\n                    options: {\n                        responsive: true, // Instruct chart js to respond nicely.\n                        maintainAspectRatio: false, // Add to prevent default behaviour of full-width/height\n                    }\n                });\n\n            })\n    },\n\n    onclick_income_this_year: function(ev) {\n        ev.preventDefault();\n        var selected = $('.btn.btn-tool.income');\n        var data = $(selected[0]).data();\n        var posted = false;\n\n        rpc.query({\n                model: 'hotel.folio',\n                method: 'get_income_this_year',\n                args: [],\n\n            })\n            .then(function(result) {\n\n                $('#net_profit_current_months').hide();\n                $('#net_profit_last_year').hide();\n                $('#net_profit_this_year').show();\n\n                var ctx = document.getElementById(\"canvas\").getContext('2d');\n\n                // Define the data\n                var income = result.income; // Add data values to array\n//                    var expense = result.expense;\n                var profit = result.profit;\n\n                var labels = result.month; // Add labels to array\n\n\n                if (window.myCharts != undefined)\n                    window.myCharts.destroy();\n                window.myCharts = new Chart(ctx, {\n                    //var myChart = new Chart(ctx, {\n                    type: 'bar',\n                    data: {\n                        labels: labels,\n                        datasets: [\n                            {\n                                label: 'Profitability', // Name the series\n                                data: profit, // Specify the data values array\n                                backgroundColor: '#0bd465',\n                                borderColor: '#0bd465',\n\n                                borderWidth: 1, // Specify bar border width\n                                type: 'line', // Set this data to a line chart\n                                fill: false\n                            }\n                        ]\n                    },\n                    options: {\n                        responsive: true, // Instruct chart js to respond nicely.\n                        maintainAspectRatio: false, // Add to prevent default behaviour of full-width/height\n                    }\n                });\n\n            })\n    },\n\n    onclick_income_this_month: function(ev) {\n        ev.preventDefault();\n        var selected = $('.btn.btn-tool.income');\n        var data = $(selected[0]).data();\n        var posted = 1;\n\n        rpc.query({\n                model: 'hotel.folio',\n                method: 'get_income_this_month',\n                args: [],\n\n            })\n            .then(function(result) {\n\n\n                var ctx = document.getElementById(\"canvas\").getContext('2d');\n\n                // Define the data\n                var profit = result.profit;\n\n                var labels = result.date; // Add labels to array\n                // End Defining data\n\n                // End Defining data\n                if (window.myCharts != undefined)\n                    window.myCharts.destroy();\n                window.myCharts = new Chart(ctx, {\n                    //var myChart = new Chart(ctx, {\n                    type: 'bar',\n                    data: {\n                        labels: labels,\n                        datasets: [\n\n                            {\n                                label: 'Profitability', // Name the series\n                                data: profit, // Specify the data values array\n                                backgroundColor: '#0bd465',\n                                borderColor: '#0bd465',\n\n                                borderWidth: 1, // Specify bar border width\n                                type: 'line', // Set this data to a line chart\n                                fill: false\n                            }\n                        ]\n                    },\n                    options: {\n                        responsive: true, // Instruct chart js to respond nicely.\n                        maintainAspectRatio: false, // Add to prevent default behaviour of full-width/height\n                    }\n                });\n\n            })\n    },\n\n\n    fetch_data: function() {\n        var self = this;\n        var def1 =  this._rpc({\n                model: 'hotel.folio',\n                method: 'get_tiles_data'\n    }).then(function(result)\n     {\n       self.total_rooms = result['total_rooms'],\n       self.total_occupied = result['total_occupied'],\n       self.total_available = result['total_available'],\n       self.total_cleaning = result['total_cleaning'],\n       self.total_maintain = result['total_maintain'],\n       self.total_ooo = result['total_ooo'],\n       self.total_draft_reserve = result['total_draft_reserve'],\n       self.total_confirm_reserve = result['total_confirm_reserve']\n\n    });\n    var def2 = self._rpc({\n            model: \"hotel.folio\",\n            method: \"get_details\",\n        })\n        .then(function (res) {\n            self.invoiced = res['invoiced'];\n            self.to_invoice = res['to_invoice'];\n            self.time_cost = res['time_cost'];\n            self.expen_cost = res['expen_cost'];\n            self.payment_details = res['payment_details'];\n        });\n        var def3 = self._rpc({\n            model: \"hotel.folio\",\n            method: \"get_hours_data\",\n        })\n        .then(function (res) {\n            self.hour_recorded = res['hour_recorded'];\n            self.hour_recorde = res['hour_recorde'];\n            self.billable_fix = res['billable_fix'];\n            self.non_billable = res['non_billable'];\n            self.total_hr = res['total_hr'];\n        });\n\n        var def4 = self._rpc({\n            model: \"hotel.folio\",\n            method: \"get_task_data\",\n        })\n        .then(function (res) {\n            self.task_data = res['project'];\n\n        });\n\n        return $.when(def1,def2,def3,def4);\n    },\n\n});\n\ncore.action_registry.add('hotel_dashboard', PjDashboard);\n\nreturn PjDashboard;\n\n});\n\n", "! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();! function() {\n    function n(n) {\n        return n && (n.ownerDocument || n.document).documentElement\n    }\n\n    function t(n) {\n        return n && n.ownerDocument ? n.ownerDocument.defaultView : n\n    }\n\n    function e(n, t) {\n        return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0\n    }\n\n    function r(n) {\n        return null === n ? 0 / 0 : +n\n    }\n\n    function u(n) {\n        return !isNaN(n)\n    }\n\n    function i(n) {\n        return {\n            left: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) < 0 ? r = i + 1 : u = i\n                }\n                return r\n            },\n            right: function(t, e, r, u) {\n                for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {\n                    var i = r + u >>> 1;\n                    n(t[i], e) > 0 ? u = i : r = i + 1\n                }\n                return r\n            }\n        }\n    }\n\n    function o(n) {\n        return n.length\n    }\n\n    function a(n) {\n        for (var t = 1; n * t % 1;) t *= 10;\n        return t\n    }\n\n    function c(n, t) {\n        for (var e in t) Object.defineProperty(n.prototype, e, {\n            value: t[e],\n            enumerable: !1\n        })\n    }\n\n    function l() {\n        this._ = Object.create(null)\n    }\n\n    function s(n) {\n        return (n += \"\") === pa || n[0] === va ? va + n : n\n    }\n\n    function f(n) {\n        return (n += \"\")[0] === va ? n.slice(1) : n\n    }\n\n    function h(n) {\n        return s(n) in this._\n    }\n\n    function g(n) {\n        return (n = s(n)) in this._ && delete this._[n]\n    }\n\n    function p() {\n        var n = [];\n        for (var t in this._) n.push(f(t));\n        return n\n    }\n\n    function v() {\n        var n = 0;\n        for (var t in this._) ++n;\n        return n\n    }\n\n    function d() {\n        for (var n in this._) return !1;\n        return !0\n    }\n\n    function m() {\n        this._ = Object.create(null)\n    }\n\n    function y(n) {\n        return n\n    }\n\n    function M(n, t, e) {\n        return function() {\n            var r = e.apply(t, arguments);\n            return r === t ? n : r\n        }\n    }\n\n    function x(n, t) {\n        if (t in n) return t;\n        t = t.charAt(0).toUpperCase() + t.slice(1);\n        for (var e = 0, r = da.length; r > e; ++e) {\n            var u = da[e] + t;\n            if (u in n) return u\n        }\n    }\n\n    function b() {}\n\n    function _() {}\n\n    function w(n) {\n        function t() {\n            for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);\n            return n\n        }\n        var e = [],\n            r = new l;\n        return t.on = function(t, u) {\n            var i, o = r.get(t);\n            return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {\n                on: u\n            })), n)\n        }, t\n    }\n\n    function S() {\n        ta.event.preventDefault()\n    }\n\n    function k() {\n        for (var n, t = ta.event; n = t.sourceEvent;) t = n;\n        return t\n    }\n\n    function E(n) {\n        for (var t = new _, e = 0, r = arguments.length; ++e < r;) t[arguments[e]] = w(t);\n        return t.of = function(e, r) {\n            return function(u) {\n                try {\n                    var i = u.sourceEvent = ta.event;\n                    u.target = n, ta.event = u, t[u.type].apply(e, r)\n                } finally {\n                    ta.event = i\n                }\n            }\n        }, t\n    }\n\n    function A(n) {\n        return ya(n, _a), n\n    }\n\n    function N(n) {\n        return \"function\" == typeof n ? n : function() {\n            return Ma(n, this)\n        }\n    }\n\n    function C(n) {\n        return \"function\" == typeof n ? n : function() {\n            return xa(n, this)\n        }\n    }\n\n    function z(n, t) {\n        function e() {\n            this.removeAttribute(n)\n        }\n\n        function r() {\n            this.removeAttributeNS(n.space, n.local)\n        }\n\n        function u() {\n            this.setAttribute(n, t)\n        }\n\n        function i() {\n            this.setAttributeNS(n.space, n.local, t)\n        }\n\n        function o() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttribute(n) : this.setAttribute(n, e)\n        }\n\n        function a() {\n            var e = t.apply(this, arguments);\n            null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)\n        }\n        return n = ta.ns.qualify(n), null == t ? n.local ? r : e : \"function\" == typeof t ? n.local ? a : o : n.local ? i : u\n    }\n\n    function q(n) {\n        return n.trim().replace(/\\s+/g, \" \")\n    }\n\n    function L(n) {\n        return new RegExp(\"(?:^|\\\\s+)\" + ta.requote(n) + \"(?:\\\\s+|$)\", \"g\")\n    }\n\n    function T(n) {\n        return (n + \"\").trim().split(/^|\\s+/)\n    }\n\n    function R(n, t) {\n        function e() {\n            for (var e = -1; ++e < u;) n[e](this, t)\n        }\n\n        function r() {\n            for (var e = -1, r = t.apply(this, arguments); ++e < u;) n[e](this, r)\n        }\n        n = T(n).map(D);\n        var u = n.length;\n        return \"function\" == typeof t ? r : e\n    }\n\n    function D(n) {\n        var t = L(n);\n        return function(e, r) {\n            if (u = e.classList) return r ? u.add(n) : u.remove(n);\n            var u = e.getAttribute(\"class\") || \"\";\n            r ? (t.lastIndex = 0, t.test(u) || e.setAttribute(\"class\", q(u + \" \" + n))) : e.setAttribute(\"class\", q(u.replace(t, \" \")))\n        }\n    }\n\n    function P(n, t, e) {\n        function r() {\n            this.style.removeProperty(n)\n        }\n\n        function u() {\n            this.style.setProperty(n, t, e)\n        }\n\n        function i() {\n            var r = t.apply(this, arguments);\n            null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)\n        }\n        return null == t ? r : \"function\" == typeof t ? i : u\n    }\n\n    function U(n, t) {\n        function e() {\n            delete this[n]\n        }\n\n        function r() {\n            this[n] = t\n        }\n\n        function u() {\n            var e = t.apply(this, arguments);\n            null == e ? delete this[n] : this[n] = e\n        }\n        return null == t ? e : \"function\" == typeof t ? u : r\n    }\n\n    function j(n) {\n        function t() {\n            var t = this.ownerDocument,\n                e = this.namespaceURI;\n            return e ? t.createElementNS(e, n) : t.createElement(n)\n        }\n\n        function e() {\n            return this.ownerDocument.createElementNS(n.space, n.local)\n        }\n        return \"function\" == typeof n ? n : (n = ta.ns.qualify(n)).local ? e : t\n    }\n\n    function F() {\n        var n = this.parentNode;\n        n && n.removeChild(this)\n    }\n\n    function H(n) {\n        return {\n            __data__: n\n        }\n    }\n\n    function O(n) {\n        return function() {\n            return ba(this, n)\n        }\n    }\n\n    function I(n) {\n        return arguments.length || (n = e),\n            function(t, e) {\n                return t && e ? n(t.__data__, e.__data__) : !t - !e\n            }\n    }\n\n    function Y(n, t) {\n        for (var e = 0, r = n.length; r > e; e++)\n            for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);\n        return n\n    }\n\n    function Z(n) {\n        return ya(n, Sa), n\n    }\n\n    function V(n) {\n        var t, e;\n        return function(r, u, i) {\n            var o, a = n[i].update,\n                c = a.length;\n            for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);\n            return o\n        }\n    }\n\n    function X(n, t, e) {\n        function r() {\n            var t = this[o];\n            t && (this.removeEventListener(n, t, t.$), delete this[o])\n        }\n\n        function u() {\n            var u = c(t, ra(arguments));\n            r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t\n        }\n\n        function i() {\n            var t, e = new RegExp(\"^__on([^.]+)\" + ta.requote(n) + \"$\");\n            for (var r in this)\n                if (t = r.match(e)) {\n                    var u = this[r];\n                    this.removeEventListener(t[1], u, u.$), delete this[r]\n                }\n        }\n        var o = \"__on\" + n,\n            a = n.indexOf(\".\"),\n            c = $;\n        a > 0 && (n = n.slice(0, a));\n        var l = ka.get(n);\n        return l && (n = l, c = B), a ? t ? u : r : t ? b : i\n    }\n\n    function $(n, t) {\n        return function(e) {\n            var r = ta.event;\n            ta.event = e, t[0] = this.__data__;\n            try {\n                n.apply(this, t)\n            } finally {\n                ta.event = r\n            }\n        }\n    }\n\n    function B(n, t) {\n        var e = $(n, t);\n        return function(n) {\n            var t = this,\n                r = n.relatedTarget;\n            r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)\n        }\n    }\n\n    function W(e) {\n        var r = \".dragsuppress-\" + ++Aa,\n            u = \"click\" + r,\n            i = ta.select(t(e)).on(\"touchmove\" + r, S).on(\"dragstart\" + r, S).on(\"selectstart\" + r, S);\n        if (null == Ea && (Ea = \"onselectstart\" in e ? !1 : x(e.style, \"userSelect\")), Ea) {\n            var o = n(e).style,\n                a = o[Ea];\n            o[Ea] = \"none\"\n        }\n        return function(n) {\n            if (i.on(r, null), Ea && (o[Ea] = a), n) {\n                var t = function() {\n                    i.on(u, null)\n                };\n                i.on(u, function() {\n                    S(), t()\n                }, !0), setTimeout(t, 0)\n            }\n        }\n    }\n\n    function J(n, e) {\n        e.changedTouches && (e = e.changedTouches[0]);\n        var r = n.ownerSVGElement || n;\n        if (r.createSVGPoint) {\n            var u = r.createSVGPoint();\n            if (0 > Na) {\n                var i = t(n);\n                if (i.scrollX || i.scrollY) {\n                    r = ta.select(\"body\").append(\"svg\").style({\n                        position: \"absolute\",\n                        top: 0,\n                        left: 0,\n                        margin: 0,\n                        padding: 0,\n                        border: \"none\"\n                    }, \"important\");\n                    var o = r[0][0].getScreenCTM();\n                    Na = !(o.f || o.e), r.remove()\n                }\n            }\n            return Na ? (u.x = e.pageX, u.y = e.pageY) : (u.x = e.clientX, u.y = e.clientY), u = u.matrixTransform(n.getScreenCTM().inverse()), [u.x, u.y]\n        }\n        var a = n.getBoundingClientRect();\n        return [e.clientX - a.left - n.clientLeft, e.clientY - a.top - n.clientTop]\n    }\n\n    function G() {\n        return ta.event.changedTouches[0].identifier\n    }\n\n    function K(n) {\n        return n > 0 ? 1 : 0 > n ? -1 : 0\n    }\n\n    function Q(n, t, e) {\n        return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])\n    }\n\n    function nt(n) {\n        return n > 1 ? 0 : -1 > n ? qa : Math.acos(n)\n    }\n\n    function tt(n) {\n        return n > 1 ? Ra : -1 > n ? -Ra : Math.asin(n)\n    }\n\n    function et(n) {\n        return ((n = Math.exp(n)) - 1 / n) / 2\n    }\n\n    function rt(n) {\n        return ((n = Math.exp(n)) + 1 / n) / 2\n    }\n\n    function ut(n) {\n        return ((n = Math.exp(2 * n)) - 1) / (n + 1)\n    }\n\n    function it(n) {\n        return (n = Math.sin(n / 2)) * n\n    }\n\n    function ot() {}\n\n    function at(n, t, e) {\n        return this instanceof at ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof at ? new at(n.h, n.s, n.l) : bt(\"\" + n, _t, at) : new at(n, t, e)\n    }\n\n    function ct(n, t, e) {\n        function r(n) {\n            return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i\n        }\n\n        function u(n) {\n            return Math.round(255 * r(n))\n        }\n        var i, o;\n        return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new mt(u(n + 120), u(n), u(n - 120))\n    }\n\n    function lt(n, t, e) {\n        return this instanceof lt ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof lt ? new lt(n.h, n.c, n.l) : n instanceof ft ? gt(n.l, n.a, n.b) : gt((n = wt((n = ta.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new lt(n, t, e)\n    }\n\n    function st(n, t, e) {\n        return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new ft(e, Math.cos(n *= Da) * t, Math.sin(n) * t)\n    }\n\n    function ft(n, t, e) {\n        return this instanceof ft ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof ft ? new ft(n.l, n.a, n.b) : n instanceof lt ? st(n.h, n.c, n.l) : wt((n = mt(n)).r, n.g, n.b) : new ft(n, t, e)\n    }\n\n    function ht(n, t, e) {\n        var r = (n + 16) / 116,\n            u = r + t / 500,\n            i = r - e / 200;\n        return u = pt(u) * Xa, r = pt(r) * $a, i = pt(i) * Ba, new mt(dt(3.2404542 * u - 1.5371385 * r - .4985314 * i), dt(-.969266 * u + 1.8760108 * r + .041556 * i), dt(.0556434 * u - .2040259 * r + 1.0572252 * i))\n    }\n\n    function gt(n, t, e) {\n        return n > 0 ? new lt(Math.atan2(e, t) * Pa, Math.sqrt(t * t + e * e), n) : new lt(0 / 0, 0 / 0, n)\n    }\n\n    function pt(n) {\n        return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037\n    }\n\n    function vt(n) {\n        return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29\n    }\n\n    function dt(n) {\n        return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))\n    }\n\n    function mt(n, t, e) {\n        return this instanceof mt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof mt ? new mt(n.r, n.g, n.b) : bt(\"\" + n, mt, ct) : new mt(n, t, e)\n    }\n\n    function yt(n) {\n        return new mt(n >> 16, n >> 8 & 255, 255 & n)\n    }\n\n    function Mt(n) {\n        return yt(n) + \"\"\n    }\n\n    function xt(n) {\n        return 16 > n ? \"0\" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)\n    }\n\n    function bt(n, t, e) {\n        var r, u, i, o = 0,\n            a = 0,\n            c = 0;\n        if (r = /([a-z]+)\\((.*)\\)/i.exec(n)) switch (u = r[2].split(\",\"), r[1]) {\n            case \"hsl\":\n                return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);\n            case \"rgb\":\n                return t(kt(u[0]), kt(u[1]), kt(u[2]))\n        }\n        return (i = Ga.get(n.toLowerCase())) ? t(i.r, i.g, i.b) : (null == n || \"#\" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))\n    }\n\n    function _t(n, t, e) {\n        var r, u, i = Math.min(n /= 255, t /= 255, e /= 255),\n            o = Math.max(n, t, e),\n            a = o - i,\n            c = (o + i) / 2;\n        return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new at(r, u, c)\n    }\n\n    function wt(n, t, e) {\n        n = St(n), t = St(t), e = St(e);\n        var r = vt((.4124564 * n + .3575761 * t + .1804375 * e) / Xa),\n            u = vt((.2126729 * n + .7151522 * t + .072175 * e) / $a),\n            i = vt((.0193339 * n + .119192 * t + .9503041 * e) / Ba);\n        return ft(116 * u - 16, 500 * (r - u), 200 * (u - i))\n    }\n\n    function St(n) {\n        return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)\n    }\n\n    function kt(n) {\n        var t = parseFloat(n);\n        return \"%\" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t\n    }\n\n    function Et(n) {\n        return \"function\" == typeof n ? n : function() {\n            return n\n        }\n    }\n\n    function At(n) {\n        return function(t, e, r) {\n            return 2 === arguments.length && \"function\" == typeof e && (r = e, e = null), Nt(t, e, n, r)\n        }\n    }\n\n    function Nt(n, t, e, r) {\n        function u() {\n            var n, t = c.status;\n            if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {\n                try {\n                    n = e.call(i, c)\n                } catch (r) {\n                    return void o.error.call(i, r)\n                }\n                o.load.call(i, n)\n            } else o.error.call(i, c)\n        }\n        var i = {},\n            o = ta.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n            a = {},\n            c = new XMLHttpRequest,\n            l = null;\n        return !this.XDomainRequest || \"withCredentials\" in c || !/^(http(s)?:)?\\/\\//.test(n) || (c = new XDomainRequest), \"onload\" in c ? c.onload = c.onerror = u : c.onreadystatechange = function() {\n            c.readyState > 3 && u()\n        }, c.onprogress = function(n) {\n            var t = ta.event;\n            ta.event = n;\n            try {\n                o.progress.call(i, c)\n            } finally {\n                ta.event = t\n            }\n        }, i.header = function(n, t) {\n            return n = (n + \"\").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + \"\", i)\n        }, i.mimeType = function(n) {\n            return arguments.length ? (t = null == n ? null : n + \"\", i) : t\n        }, i.responseType = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.response = function(n) {\n            return e = n, i\n        }, [\"get\", \"post\"].forEach(function(n) {\n            i[n] = function() {\n                return i.send.apply(i, [n].concat(ra(arguments)))\n            }\n        }), i.send = function(e, r, u) {\n            if (2 === arguments.length && \"function\" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || \"accept\" in a || (a.accept = t + \",*/*\"), c.setRequestHeader)\n                for (var s in a) c.setRequestHeader(s, a[s]);\n            return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on(\"error\", u).on(\"load\", function(n) {\n                u(null, n)\n            }), o.beforesend.call(i, c), c.send(null == r ? null : r), i\n        }, i.abort = function() {\n            return c.abort(), i\n        }, ta.rebind(i, o, \"on\"), null == r ? i : i.get(Ct(r))\n    }\n\n    function Ct(n) {\n        return 1 === n.length ? function(t, e) {\n            n(null == t ? e : null)\n        } : n\n    }\n\n    function zt(n) {\n        var t = n.responseType;\n        return t && \"text\" !== t ? n.response : n.responseText\n    }\n\n    function qt() {\n        var n = Lt(),\n            t = Tt() - n;\n        t > 24 ? (isFinite(t) && (clearTimeout(tc), tc = setTimeout(qt, t)), nc = 0) : (nc = 1, rc(qt))\n    }\n\n    function Lt() {\n        var n = Date.now();\n        for (ec = Ka; ec;) n >= ec.t && (ec.f = ec.c(n - ec.t)), ec = ec.n;\n        return n\n    }\n\n    function Tt() {\n        for (var n, t = Ka, e = 1 / 0; t;) t.f ? t = n ? n.n = t.n : Ka = t.n : (t.t < e && (e = t.t), t = (n = t).n);\n        return Qa = n, e\n    }\n\n    function Rt(n, t) {\n        return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)\n    }\n\n    function Dt(n, t) {\n        var e = Math.pow(10, 3 * ga(8 - t));\n        return {\n            scale: t > 8 ? function(n) {\n                return n / e\n            } : function(n) {\n                return n * e\n            },\n            symbol: n\n        }\n    }\n\n    function Pt(n) {\n        var t = n.decimal,\n            e = n.thousands,\n            r = n.grouping,\n            u = n.currency,\n            i = r && e ? function(n, t) {\n                for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));) a = r[o = (o + 1) % r.length];\n                return i.reverse().join(e)\n            } : y;\n        return function(n) {\n            var e = ic.exec(n),\n                r = e[1] || \" \",\n                o = e[2] || \">\",\n                a = e[3] || \"-\",\n                c = e[4] || \"\",\n                l = e[5],\n                s = +e[6],\n                f = e[7],\n                h = e[8],\n                g = e[9],\n                p = 1,\n                v = \"\",\n                d = \"\",\n                m = !1,\n                y = !0;\n            switch (h && (h = +h.substring(1)), (l || \"0\" === r && \"=\" === o) && (l = r = \"0\", o = \"=\"), g) {\n                case \"n\":\n                    f = !0, g = \"g\";\n                    break;\n                case \"%\":\n                    p = 100, d = \"%\", g = \"f\";\n                    break;\n                case \"p\":\n                    p = 100, d = \"%\", g = \"r\";\n                    break;\n                case \"b\":\n                case \"o\":\n                case \"x\":\n                case \"X\":\n                    \"#\" === c && (v = \"0\" + g.toLowerCase());\n                case \"c\":\n                    y = !1;\n                case \"d\":\n                    m = !0, h = 0;\n                    break;\n                case \"s\":\n                    p = -1, g = \"r\"\n            }\n            \"$\" === c && (v = u[0], d = u[1]), \"r\" != g || h || (g = \"g\"), null != h && (\"g\" == g ? h = Math.max(1, Math.min(21, h)) : (\"e\" == g || \"f\" == g) && (h = Math.max(0, Math.min(20, h)))), g = oc.get(g) || Ut;\n            var M = l && f;\n            return function(n) {\n                var e = d;\n                if (m && n % 1) return \"\";\n                var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, \"-\") : \"-\" === a ? \"\" : a;\n                if (0 > p) {\n                    var c = ta.formatPrefix(n, h);\n                    n = c.scale(n), e = c.symbol + d\n                } else n *= p;\n                n = g(n, h);\n                var x, b, _ = n.lastIndexOf(\".\");\n                if (0 > _) {\n                    var w = y ? n.lastIndexOf(\"e\") : -1;\n                    0 > w ? (x = n, b = \"\") : (x = n.substring(0, w), b = n.substring(w))\n                } else x = n.substring(0, _), b = t + n.substring(_ + 1);\n                !l && f && (x = i(x, 1 / 0));\n                var S = v.length + x.length + b.length + (M ? 0 : u.length),\n                    k = s > S ? new Array(S = s - S + 1).join(r) : \"\";\n                return M && (x = i(k + x, k.length ? s - b.length : 1 / 0)), u += v, n = x + b, (\"<\" === o ? u + n + k : \">\" === o ? k + u + n : \"^\" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (M ? n : k + n)) + e\n            }\n        }\n    }\n\n    function Ut(n) {\n        return n + \"\"\n    }\n\n    function jt() {\n        this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])\n    }\n\n    function Ft(n, t, e) {\n        function r(t) {\n            var e = n(t),\n                r = i(e, 1);\n            return r - t > t - e ? e : r\n        }\n\n        function u(e) {\n            return t(e = n(new cc(e - 1)), 1), e\n        }\n\n        function i(n, e) {\n            return t(n = new cc(+n), e), n\n        }\n\n        function o(n, r, i) {\n            var o = u(n),\n                a = [];\n            if (i > 1)\n                for (; r > o;) e(o) % i || a.push(new Date(+o)), t(o, 1);\n            else\n                for (; r > o;) a.push(new Date(+o)), t(o, 1);\n            return a\n        }\n\n        function a(n, t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = n, o(r, t, e)\n            } finally {\n                cc = Date\n            }\n        }\n        n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;\n        var c = n.utc = Ht(n);\n        return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n\n    }\n\n    function Ht(n) {\n        return function(t, e) {\n            try {\n                cc = jt;\n                var r = new jt;\n                return r._ = t, n(r, e)._\n            } finally {\n                cc = Date\n            }\n        }\n    }\n\n    function Ot(n) {\n        function t(n) {\n            function t(t) {\n                for (var e, u, i, o = [], a = -1, c = 0; ++a < r;) 37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = sc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = N[e]) && (e = i(t, null == u ? \"e\" === e ? \" \" : \"0\" : u)), o.push(e), c = a + 1);\n                return o.push(n.slice(c, a)), o.join(\"\")\n            }\n            var r = n.length;\n            return t.parse = function(t) {\n                var r = {\n                        y: 1900,\n                        m: 0,\n                        d: 1,\n                        H: 0,\n                        M: 0,\n                        S: 0,\n                        L: 0,\n                        Z: null\n                    },\n                    u = e(r, n, t, 0);\n                if (u != t.length) return null;\n                \"p\" in r && (r.H = r.H % 12 + 12 * r.p);\n                var i = null != r.Z && cc !== jt,\n                    o = new(i ? jt : cc);\n                return \"j\" in r ? o.setFullYear(r.y, 0, r.j) : \"w\" in r && (\"W\" in r || \"U\" in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, \"W\" in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (r.Z / 100 | 0), r.M + r.Z % 100, r.S, r.L), i ? o._ : o\n            }, t.toString = function() {\n                return n\n            }, t\n        }\n\n        function e(n, t, e, r) {\n            for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {\n                if (r >= l) return -1;\n                if (u = t.charCodeAt(a++), 37 === u) {\n                    if (o = t.charAt(a++), i = C[o in sc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0) return -1\n                } else if (u != e.charCodeAt(r++)) return -1\n            }\n            return r\n        }\n\n        function r(n, t, e) {\n            _.lastIndex = 0;\n            var r = _.exec(t.slice(e));\n            return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function u(n, t, e) {\n            x.lastIndex = 0;\n            var r = x.exec(t.slice(e));\n            return r ? (n.w = b.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function i(n, t, e) {\n            E.lastIndex = 0;\n            var r = E.exec(t.slice(e));\n            return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function o(n, t, e) {\n            S.lastIndex = 0;\n            var r = S.exec(t.slice(e));\n            return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1\n        }\n\n        function a(n, t, r) {\n            return e(n, N.c.toString(), t, r)\n        }\n\n        function c(n, t, r) {\n            return e(n, N.x.toString(), t, r)\n        }\n\n        function l(n, t, r) {\n            return e(n, N.X.toString(), t, r)\n        }\n\n        function s(n, t, e) {\n            var r = M.get(t.slice(e, e += 2).toLowerCase());\n            return null == r ? -1 : (n.p = r, e)\n        }\n        var f = n.dateTime,\n            h = n.date,\n            g = n.time,\n            p = n.periods,\n            v = n.days,\n            d = n.shortDays,\n            m = n.months,\n            y = n.shortMonths;\n        t.utc = function(n) {\n            function e(n) {\n                try {\n                    cc = jt;\n                    var t = new cc;\n                    return t._ = n, r(t)\n                } finally {\n                    cc = Date\n                }\n            }\n            var r = t(n);\n            return e.parse = function(n) {\n                try {\n                    cc = jt;\n                    var t = r.parse(n);\n                    return t && t._\n                } finally {\n                    cc = Date\n                }\n            }, e.toString = r.toString, e\n        }, t.multi = t.utc.multi = ae;\n        var M = ta.map(),\n            x = Yt(v),\n            b = Zt(v),\n            _ = Yt(d),\n            w = Zt(d),\n            S = Yt(m),\n            k = Zt(m),\n            E = Yt(y),\n            A = Zt(y);\n        p.forEach(function(n, t) {\n            M.set(n.toLowerCase(), t)\n        });\n        var N = {\n                a: function(n) {\n                    return d[n.getDay()]\n                },\n                A: function(n) {\n                    return v[n.getDay()]\n                },\n                b: function(n) {\n                    return y[n.getMonth()]\n                },\n                B: function(n) {\n                    return m[n.getMonth()]\n                },\n                c: t(f),\n                d: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                e: function(n, t) {\n                    return It(n.getDate(), t, 2)\n                },\n                H: function(n, t) {\n                    return It(n.getHours(), t, 2)\n                },\n                I: function(n, t) {\n                    return It(n.getHours() % 12 || 12, t, 2)\n                },\n                j: function(n, t) {\n                    return It(1 + ac.dayOfYear(n), t, 3)\n                },\n                L: function(n, t) {\n                    return It(n.getMilliseconds(), t, 3)\n                },\n                m: function(n, t) {\n                    return It(n.getMonth() + 1, t, 2)\n                },\n                M: function(n, t) {\n                    return It(n.getMinutes(), t, 2)\n                },\n                p: function(n) {\n                    return p[+(n.getHours() >= 12)]\n                },\n                S: function(n, t) {\n                    return It(n.getSeconds(), t, 2)\n                },\n                U: function(n, t) {\n                    return It(ac.sundayOfYear(n), t, 2)\n                },\n                w: function(n) {\n                    return n.getDay()\n                },\n                W: function(n, t) {\n                    return It(ac.mondayOfYear(n), t, 2)\n                },\n                x: t(h),\n                X: t(g),\n                y: function(n, t) {\n                    return It(n.getFullYear() % 100, t, 2)\n                },\n                Y: function(n, t) {\n                    return It(n.getFullYear() % 1e4, t, 4)\n                },\n                Z: ie,\n                \"%\": function() {\n                    return \"%\"\n                }\n            },\n            C = {\n                a: r,\n                A: u,\n                b: i,\n                B: o,\n                c: a,\n                d: Qt,\n                e: Qt,\n                H: te,\n                I: te,\n                j: ne,\n                L: ue,\n                m: Kt,\n                M: ee,\n                p: s,\n                S: re,\n                U: Xt,\n                w: Vt,\n                W: $t,\n                x: c,\n                X: l,\n                y: Wt,\n                Y: Bt,\n                Z: Jt,\n                \"%\": oe\n            };\n        return t\n    }\n\n    function It(n, t, e) {\n        var r = 0 > n ? \"-\" : \"\",\n            u = (r ? -n : n) + \"\",\n            i = u.length;\n        return r + (e > i ? new Array(e - i + 1).join(t) + u : u)\n    }\n\n    function Yt(n) {\n        return new RegExp(\"^(?:\" + n.map(ta.requote).join(\"|\") + \")\", \"i\")\n    }\n\n    function Zt(n) {\n        for (var t = new l, e = -1, r = n.length; ++e < r;) t.set(n[e].toLowerCase(), e);\n        return t\n    }\n\n    function Vt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 1));\n        return r ? (n.w = +r[0], e + r[0].length) : -1\n    }\n\n    function Xt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.U = +r[0], e + r[0].length) : -1\n    }\n\n    function $t(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e));\n        return r ? (n.W = +r[0], e + r[0].length) : -1\n    }\n\n    function Bt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 4));\n        return r ? (n.y = +r[0], e + r[0].length) : -1\n    }\n\n    function Wt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1\n    }\n\n    function Jt(n, t, e) {\n        return /^[+-]\\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1\n    }\n\n    function Gt(n) {\n        return n + (n > 68 ? 1900 : 2e3)\n    }\n\n    function Kt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.m = r[0] - 1, e + r[0].length) : -1\n    }\n\n    function Qt(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.d = +r[0], e + r[0].length) : -1\n    }\n\n    function ne(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.j = +r[0], e + r[0].length) : -1\n    }\n\n    function te(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.H = +r[0], e + r[0].length) : -1\n    }\n\n    function ee(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.M = +r[0], e + r[0].length) : -1\n    }\n\n    function re(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 2));\n        return r ? (n.S = +r[0], e + r[0].length) : -1\n    }\n\n    function ue(n, t, e) {\n        fc.lastIndex = 0;\n        var r = fc.exec(t.slice(e, e + 3));\n        return r ? (n.L = +r[0], e + r[0].length) : -1\n    }\n\n    function ie(n) {\n        var t = n.getTimezoneOffset(),\n            e = t > 0 ? \"-\" : \"+\",\n            r = ga(t) / 60 | 0,\n            u = ga(t) % 60;\n        return e + It(r, \"0\", 2) + It(u, \"0\", 2)\n    }\n\n    function oe(n, t, e) {\n        hc.lastIndex = 0;\n        var r = hc.exec(t.slice(e, e + 1));\n        return r ? e + r[0].length : -1\n    }\n\n    function ae(n) {\n        for (var t = n.length, e = -1; ++e < t;) n[e][0] = this(n[e][0]);\n        return function(t) {\n            for (var e = 0, r = n[e]; !r[1](t);) r = n[++e];\n            return r[0](t)\n        }\n    }\n\n    function ce() {}\n\n    function le(n, t, e) {\n        var r = e.s = n + t,\n            u = r - n,\n            i = r - u;\n        e.t = n - i + (t - u)\n    }\n\n    function se(n, t) {\n        n && dc.hasOwnProperty(n.type) && dc[n.type](n, t)\n    }\n\n    function fe(n, t, e) {\n        var r, u = -1,\n            i = n.length - e;\n        for (t.lineStart(); ++u < i;) r = n[u], t.point(r[0], r[1], r[2]);\n        t.lineEnd()\n    }\n\n    function he(n, t) {\n        var e = -1,\n            r = n.length;\n        for (t.polygonStart(); ++e < r;) fe(n[e], t, 1);\n        t.polygonEnd()\n    }\n\n    function ge() {\n        function n(n, t) {\n            n *= Da, t = t * Da / 2 + qa / 4;\n            var e = n - r,\n                o = e >= 0 ? 1 : -1,\n                a = o * e,\n                c = Math.cos(t),\n                l = Math.sin(t),\n                s = i * l,\n                f = u * c + s * Math.cos(a),\n                h = s * o * Math.sin(a);\n            yc.add(Math.atan2(h, f)), r = n, u = c, i = l\n        }\n        var t, e, r, u, i;\n        Mc.point = function(o, a) {\n            Mc.point = n, r = (t = o) * Da, u = Math.cos(a = (e = a) * Da / 2 + qa / 4), i = Math.sin(a)\n        }, Mc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function pe(n) {\n        var t = n[0],\n            e = n[1],\n            r = Math.cos(e);\n        return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]\n    }\n\n    function ve(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]\n    }\n\n    function de(n, t) {\n        return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]\n    }\n\n    function me(n, t) {\n        n[0] += t[0], n[1] += t[1], n[2] += t[2]\n    }\n\n    function ye(n, t) {\n        return [n[0] * t, n[1] * t, n[2] * t]\n    }\n\n    function Me(n) {\n        var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);\n        n[0] /= t, n[1] /= t, n[2] /= t\n    }\n\n    function xe(n) {\n        return [Math.atan2(n[1], n[0]), tt(n[2])]\n    }\n\n    function be(n, t) {\n        return ga(n[0] - t[0]) < Ca && ga(n[1] - t[1]) < Ca\n    }\n\n    function _e(n, t) {\n        n *= Da;\n        var e = Math.cos(t *= Da);\n        we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))\n    }\n\n    function we(n, t, e) {\n        ++xc, _c += (n - _c) / xc, wc += (t - wc) / xc, Sc += (e - Sc) / xc\n    }\n\n    function Se() {\n        function n(n, u) {\n            n *= Da;\n            var i = Math.cos(u *= Da),\n                o = i * Math.cos(n),\n                a = i * Math.sin(n),\n                c = Math.sin(u),\n                l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);\n            bc += l, kc += l * (t + (t = o)), Ec += l * (e + (e = a)), Ac += l * (r + (r = c)), we(t, e, r)\n        }\n        var t, e, r;\n        qc.point = function(u, i) {\n            u *= Da;\n            var o = Math.cos(i *= Da);\n            t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), qc.point = n, we(t, e, r)\n        }\n    }\n\n    function ke() {\n        qc.point = _e\n    }\n\n    function Ee() {\n        function n(n, t) {\n            n *= Da;\n            var e = Math.cos(t *= Da),\n                o = e * Math.cos(n),\n                a = e * Math.sin(n),\n                c = Math.sin(t),\n                l = u * c - i * a,\n                s = i * o - r * c,\n                f = r * a - u * o,\n                h = Math.sqrt(l * l + s * s + f * f),\n                g = r * o + u * a + i * c,\n                p = h && -nt(g) / h,\n                v = Math.atan2(h, g);\n            Nc += p * l, Cc += p * s, zc += p * f, bc += v, kc += v * (r + (r = o)), Ec += v * (u + (u = a)), Ac += v * (i + (i = c)), we(r, u, i)\n        }\n        var t, e, r, u, i;\n        qc.point = function(o, a) {\n            t = o, e = a, qc.point = n, o *= Da;\n            var c = Math.cos(a *= Da);\n            r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)\n        }, qc.lineEnd = function() {\n            n(t, e), qc.lineEnd = ke, qc.point = _e\n        }\n    }\n\n    function Ae(n, t) {\n        function e(e, r) {\n            return e = n(e, r), t(e[0], e[1])\n        }\n        return n.invert && t.invert && (e.invert = function(e, r) {\n            return e = t.invert(e, r), e && n.invert(e[0], e[1])\n        }), e\n    }\n\n    function Ne() {\n        return !0\n    }\n\n    function Ce(n, t, e, r, u) {\n        var i = [],\n            o = [];\n        if (n.forEach(function(n) {\n                if (!((t = n.length - 1) <= 0)) {\n                    var t, e = n[0],\n                        r = n[t];\n                    if (be(e, r)) {\n                        u.lineStart();\n                        for (var a = 0; t > a; ++a) u.point((e = n[a])[0], e[1]);\n                        return void u.lineEnd()\n                    }\n                    var c = new qe(e, n, null, !0),\n                        l = new qe(e, null, c, !1);\n                    c.o = l, i.push(c), o.push(l), c = new qe(r, n, null, !1), l = new qe(r, null, c, !0), c.o = l, i.push(c), o.push(l)\n                }\n            }), o.sort(t), ze(i), ze(o), i.length) {\n            for (var a = 0, c = e, l = o.length; l > a; ++a) o[a].e = c = !c;\n            for (var s, f, h = i[0];;) {\n                for (var g = h, p = !0; g.v;)\n                    if ((g = g.n) === h) return;\n                s = g.z, u.lineStart();\n                do {\n                    if (g.v = g.o.v = !0, g.e) {\n                        if (p)\n                            for (var a = 0, l = s.length; l > a; ++a) u.point((f = s[a])[0], f[1]);\n                        else r(g.x, g.n.x, 1, u);\n                        g = g.n\n                    } else {\n                        if (p) {\n                            s = g.p.z;\n                            for (var a = s.length - 1; a >= 0; --a) u.point((f = s[a])[0], f[1])\n                        } else r(g.x, g.p.x, -1, u);\n                        g = g.p\n                    }\n                    g = g.o, s = g.z, p = !p\n                } while (!g.v);\n                u.lineEnd()\n            }\n        }\n    }\n\n    function ze(n) {\n        if (t = n.length) {\n            for (var t, e, r = 0, u = n[0]; ++r < t;) u.n = e = n[r], e.p = u, u = e;\n            u.n = e = n[0], e.p = u\n        }\n    }\n\n    function qe(n, t, e, r) {\n        this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null\n    }\n\n    function Le(n, t, e, r) {\n        return function(u, i) {\n            function o(t, e) {\n                var r = u(t, e);\n                n(t = r[0], e = r[1]) && i.point(t, e)\n            }\n\n            function a(n, t) {\n                var e = u(n, t);\n                d.point(e[0], e[1])\n            }\n\n            function c() {\n                y.point = a, d.lineStart()\n            }\n\n            function l() {\n                y.point = o, d.lineEnd()\n            }\n\n            function s(n, t) {\n                v.push([n, t]);\n                var e = u(n, t);\n                x.point(e[0], e[1])\n            }\n\n            function f() {\n                x.lineStart(), v = []\n            }\n\n            function h() {\n                s(v[0][0], v[0][1]), x.lineEnd();\n                var n, t = x.clean(),\n                    e = M.buffer(),\n                    r = e.length;\n                if (v.pop(), p.push(v), v = null, r)\n                    if (1 & t) {\n                        n = e[0];\n                        var u, r = n.length - 1,\n                            o = -1;\n                        if (r > 0) {\n                            for (b || (i.polygonStart(), b = !0), i.lineStart(); ++o < r;) i.point((u = n[o])[0], u[1]);\n                            i.lineEnd()\n                        }\n                    } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))\n            }\n            var g, p, v, d = t(i),\n                m = u.invert(r[0], r[1]),\n                y = {\n                    point: o,\n                    lineStart: c,\n                    lineEnd: l,\n                    polygonStart: function() {\n                        y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []\n                    },\n                    polygonEnd: function() {\n                        y.point = o, y.lineStart = c, y.lineEnd = l, g = ta.merge(g);\n                        var n = Fe(m, p);\n                        g.length ? (b || (i.polygonStart(), b = !0), Ce(g, De, n, e, i)) : n && (b || (i.polygonStart(), b = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), b && (i.polygonEnd(), b = !1), g = p = null\n                    },\n                    sphere: function() {\n                        i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()\n                    }\n                },\n                M = Re(),\n                x = t(M),\n                b = !1;\n            return y\n        }\n    }\n\n    function Te(n) {\n        return n.length > 1\n    }\n\n    function Re() {\n        var n, t = [];\n        return {\n            lineStart: function() {\n                t.push(n = [])\n            },\n            point: function(t, e) {\n                n.push([t, e])\n            },\n            lineEnd: b,\n            buffer: function() {\n                var e = t;\n                return t = [], n = null, e\n            },\n            rejoin: function() {\n                t.length > 1 && t.push(t.pop().concat(t.shift()))\n            }\n        }\n    }\n\n    function De(n, t) {\n        return ((n = n.x)[0] < 0 ? n[1] - Ra - Ca : Ra - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ra - Ca : Ra - t[1])\n    }\n\n    function Pe(n) {\n        var t, e = 0 / 0,\n            r = 0 / 0,\n            u = 0 / 0;\n        return {\n            lineStart: function() {\n                n.lineStart(), t = 1\n            },\n            point: function(i, o) {\n                var a = i > 0 ? qa : -qa,\n                    c = ga(i - e);\n                ga(c - qa) < Ca ? (n.point(e, r = (r + o) / 2 > 0 ? Ra : -Ra), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= qa && (ga(e - u) < Ca && (e -= u * Ca), ga(i - a) < Ca && (i -= a * Ca), r = Ue(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a\n            },\n            lineEnd: function() {\n                n.lineEnd(), e = r = 0 / 0\n            },\n            clean: function() {\n                return 2 - t\n            }\n        }\n    }\n\n    function Ue(n, t, e, r) {\n        var u, i, o = Math.sin(n - e);\n        return ga(o) > Ca ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2\n    }\n\n    function je(n, t, e, r) {\n        var u;\n        if (null == n) u = e * Ra, r.point(-qa, u), r.point(0, u), r.point(qa, u), r.point(qa, 0), r.point(qa, -u), r.point(0, -u), r.point(-qa, -u), r.point(-qa, 0), r.point(-qa, u);\n        else if (ga(n[0] - t[0]) > Ca) {\n            var i = n[0] < t[0] ? qa : -qa;\n            u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)\n        } else r.point(t[0], t[1])\n    }\n\n    function Fe(n, t) {\n        var e = n[0],\n            r = n[1],\n            u = [Math.sin(e), -Math.cos(e), 0],\n            i = 0,\n            o = 0;\n        yc.reset();\n        for (var a = 0, c = t.length; c > a; ++a) {\n            var l = t[a],\n                s = l.length;\n            if (s)\n                for (var f = l[0], h = f[0], g = f[1] / 2 + qa / 4, p = Math.sin(g), v = Math.cos(g), d = 1;;) {\n                    d === s && (d = 0), n = l[d];\n                    var m = n[0],\n                        y = n[1] / 2 + qa / 4,\n                        M = Math.sin(y),\n                        x = Math.cos(y),\n                        b = m - h,\n                        _ = b >= 0 ? 1 : -1,\n                        w = _ * b,\n                        S = w > qa,\n                        k = p * M;\n                    if (yc.add(Math.atan2(k * _ * Math.sin(w), v * x + k * Math.cos(w))), i += S ? b + _ * La : b, S ^ h >= e ^ m >= e) {\n                        var E = de(pe(f), pe(n));\n                        Me(E);\n                        var A = de(u, E);\n                        Me(A);\n                        var N = (S ^ b >= 0 ? -1 : 1) * tt(A[2]);\n                        (r > N || r === N && (E[0] || E[1])) && (o += S ^ b >= 0 ? 1 : -1)\n                    }\n                    if (!d++) break;\n                    h = m, p = M, v = x, f = n\n                }\n        }\n        return (-Ca > i || Ca > i && 0 > yc) ^ 1 & o\n    }\n\n    function He(n) {\n        function t(n, t) {\n            return Math.cos(n) * Math.cos(t) > i\n        }\n\n        function e(n) {\n            var e, i, c, l, s;\n            return {\n                lineStart: function() {\n                    l = c = !1, s = 1\n                },\n                point: function(f, h) {\n                    var g, p = [f, h],\n                        v = t(f, h),\n                        d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? qa : -qa), h) : 0;\n                    if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (be(e, g) || be(p, g)) && (p[0] += Ca, p[1] += Ca, v = t(p[0], p[1]))), v !== c) s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g;\n                    else if (a && e && o ^ v) {\n                        var m;\n                        d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))\n                    }!v || e && be(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d\n                },\n                lineEnd: function() {\n                    c && n.lineEnd(), e = null\n                },\n                clean: function() {\n                    return s | (l && c) << 1\n                }\n            }\n        }\n\n        function r(n, t, e) {\n            var r = pe(n),\n                u = pe(t),\n                o = [1, 0, 0],\n                a = de(r, u),\n                c = ve(a, a),\n                l = a[0],\n                s = c - l * l;\n            if (!s) return !e && n;\n            var f = i * c / s,\n                h = -i * l / s,\n                g = de(o, a),\n                p = ye(o, f),\n                v = ye(a, h);\n            me(p, v);\n            var d = g,\n                m = ve(p, d),\n                y = ve(d, d),\n                M = m * m - y * (ve(p, p) - 1);\n            if (!(0 > M)) {\n                var x = Math.sqrt(M),\n                    b = ye(d, (-m - x) / y);\n                if (me(b, p), b = xe(b), !e) return b;\n                var _, w = n[0],\n                    S = t[0],\n                    k = n[1],\n                    E = t[1];\n                w > S && (_ = w, w = S, S = _);\n                var A = S - w,\n                    N = ga(A - qa) < Ca,\n                    C = N || Ca > A;\n                if (!N && k > E && (_ = k, k = E, E = _), C ? N ? k + E > 0 ^ b[1] < (ga(b[0] - w) < Ca ? k : E) : k <= b[1] && b[1] <= E : A > qa ^ (w <= b[0] && b[0] <= S)) {\n                    var z = ye(d, (-m + x) / y);\n                    return me(z, p), [b, xe(z)]\n                }\n            }\n        }\n\n        function u(t, e) {\n            var r = o ? n : qa - n,\n                u = 0;\n            return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u\n        }\n        var i = Math.cos(n),\n            o = i > 0,\n            a = ga(i) > Ca,\n            c = gr(n, 6 * Da);\n        return Le(t, e, c, o ? [0, -n] : [-qa, n - qa])\n    }\n\n    function Oe(n, t, e, r) {\n        return function(u) {\n            var i, o = u.a,\n                a = u.b,\n                c = o.x,\n                l = o.y,\n                s = a.x,\n                f = a.y,\n                h = 0,\n                g = 1,\n                p = s - c,\n                v = f - l;\n            if (i = n - c, p || !(i > 0)) {\n                if (i /= p, 0 > p) {\n                    if (h > i) return;\n                    g > i && (g = i)\n                } else if (p > 0) {\n                    if (i > g) return;\n                    i > h && (h = i)\n                }\n                if (i = e - c, p || !(0 > i)) {\n                    if (i /= p, 0 > p) {\n                        if (i > g) return;\n                        i > h && (h = i)\n                    } else if (p > 0) {\n                        if (h > i) return;\n                        g > i && (g = i)\n                    }\n                    if (i = t - l, v || !(i > 0)) {\n                        if (i /= v, 0 > v) {\n                            if (h > i) return;\n                            g > i && (g = i)\n                        } else if (v > 0) {\n                            if (i > g) return;\n                            i > h && (h = i)\n                        }\n                        if (i = r - l, v || !(0 > i)) {\n                            if (i /= v, 0 > v) {\n                                if (i > g) return;\n                                i > h && (h = i)\n                            } else if (v > 0) {\n                                if (h > i) return;\n                                g > i && (g = i)\n                            }\n                            return h > 0 && (u.a = {\n                                x: c + h * p,\n                                y: l + h * v\n                            }), 1 > g && (u.b = {\n                                x: c + g * p,\n                                y: l + g * v\n                            }), u\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    function Ie(n, t, e, r) {\n        function u(r, u) {\n            return ga(r[0] - n) < Ca ? u > 0 ? 0 : 3 : ga(r[0] - e) < Ca ? u > 0 ? 2 : 1 : ga(r[1] - t) < Ca ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2\n        }\n\n        function i(n, t) {\n            return o(n.x, t.x)\n        }\n\n        function o(n, t) {\n            var e = u(n, 1),\n                r = u(t, 1);\n            return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]\n        }\n        return function(a) {\n            function c(n) {\n                for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)\n                    for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o) i = a[o], l[1] <= r ? i[1] > r && Q(l, i, n) > 0 && ++t : i[1] <= r && Q(l, i, n) < 0 && --t, l = i;\n                return 0 !== t\n            }\n\n            function l(i, a, c, l) {\n                var s = 0,\n                    f = 0;\n                if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {\n                    do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)\n                } else l.point(a[0], a[1])\n            }\n\n            function s(u, i) {\n                return u >= n && e >= u && i >= t && r >= i\n            }\n\n            function f(n, t) {\n                s(n, t) && a.point(n, t)\n            }\n\n            function h() {\n                C.point = p, d && d.push(m = []), S = !0, w = !1, b = _ = 0 / 0\n            }\n\n            function g() {\n                v && (p(y, M), x && w && A.rejoin(), v.push(A.buffer())), C.point = f, w && a.lineEnd()\n            }\n\n            function p(n, t) {\n                n = Math.max(-Tc, Math.min(Tc, n)), t = Math.max(-Tc, Math.min(Tc, t));\n                var e = s(n, t);\n                if (d && m.push([n, t]), S) y = n, M = t, x = e, S = !1, e && (a.lineStart(), a.point(n, t));\n                else if (e && w) a.point(n, t);\n                else {\n                    var r = {\n                        a: {\n                            x: b,\n                            y: _\n                        },\n                        b: {\n                            x: n,\n                            y: t\n                        }\n                    };\n                    N(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)\n                }\n                b = n, _ = t, w = e\n            }\n            var v, d, m, y, M, x, b, _, w, S, k, E = a,\n                A = Re(),\n                N = Oe(n, t, e, r),\n                C = {\n                    point: f,\n                    lineStart: h,\n                    lineEnd: g,\n                    polygonStart: function() {\n                        a = A, v = [], d = [], k = !0\n                    },\n                    polygonEnd: function() {\n                        a = E, v = ta.merge(v);\n                        var t = c([n, r]),\n                            e = k && t,\n                            u = v.length;\n                        (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null\n                    }\n                };\n            return C\n        }\n    }\n\n    function Ye(n) {\n        var t = 0,\n            e = qa / 3,\n            r = ir(n),\n            u = r(t, e);\n        return u.parallels = function(n) {\n            return arguments.length ? r(t = n[0] * qa / 180, e = n[1] * qa / 180) : [t / qa * 180, e / qa * 180]\n        }, u\n    }\n\n    function Ze(n, t) {\n        function e(n, t) {\n            var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;\n            return [e * Math.sin(n *= u), o - e * Math.cos(n)]\n        }\n        var r = Math.sin(n),\n            u = (r + Math.sin(t)) / 2,\n            i = 1 + r * (2 * u - r),\n            o = Math.sqrt(i) / u;\n        return e.invert = function(n, t) {\n            var e = o - t;\n            return [Math.atan2(n, e) / u, tt((i - (n * n + e * e) * u * u) / (2 * u))]\n        }, e\n    }\n\n    function Ve() {\n        function n(n, t) {\n            Dc += u * n - r * t, r = n, u = t\n        }\n        var t, e, r, u;\n        Hc.point = function(i, o) {\n            Hc.point = n, t = r = i, e = u = o\n        }, Hc.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Xe(n, t) {\n        Pc > n && (Pc = n), n > jc && (jc = n), Uc > t && (Uc = t), t > Fc && (Fc = t)\n    }\n\n    function $e() {\n        function n(n, t) {\n            o.push(\"M\", n, \",\", t, i)\n        }\n\n        function t(n, t) {\n            o.push(\"M\", n, \",\", t), a.point = e\n        }\n\n        function e(n, t) {\n            o.push(\"L\", n, \",\", t)\n        }\n\n        function r() {\n            a.point = n\n        }\n\n        function u() {\n            o.push(\"Z\")\n        }\n        var i = Be(4.5),\n            o = [],\n            a = {\n                point: n,\n                lineStart: function() {\n                    a.point = t\n                },\n                lineEnd: r,\n                polygonStart: function() {\n                    a.lineEnd = u\n                },\n                polygonEnd: function() {\n                    a.lineEnd = r, a.point = n\n                },\n                pointRadius: function(n) {\n                    return i = Be(n), a\n                },\n                result: function() {\n                    if (o.length) {\n                        var n = o.join(\"\");\n                        return o = [], n\n                    }\n                }\n            };\n        return a\n    }\n\n    function Be(n) {\n        return \"m0,\" + n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + -2 * n + \"a\" + n + \",\" + n + \" 0 1,1 0,\" + 2 * n + \"z\"\n    }\n\n    function We(n, t) {\n        _c += n, wc += t, ++Sc\n    }\n\n    function Je() {\n        function n(n, r) {\n            var u = n - t,\n                i = r - e,\n                o = Math.sqrt(u * u + i * i);\n            kc += o * (t + n) / 2, Ec += o * (e + r) / 2, Ac += o, We(t = n, e = r)\n        }\n        var t, e;\n        Ic.point = function(r, u) {\n            Ic.point = n, We(t = r, e = u)\n        }\n    }\n\n    function Ge() {\n        Ic.point = We\n    }\n\n    function Ke() {\n        function n(n, t) {\n            var e = n - r,\n                i = t - u,\n                o = Math.sqrt(e * e + i * i);\n            kc += o * (r + n) / 2, Ec += o * (u + t) / 2, Ac += o, o = u * n - r * t, Nc += o * (r + n), Cc += o * (u + t), zc += 3 * o, We(r = n, u = t)\n        }\n        var t, e, r, u;\n        Ic.point = function(i, o) {\n            Ic.point = n, We(t = r = i, e = u = o)\n        }, Ic.lineEnd = function() {\n            n(t, e)\n        }\n    }\n\n    function Qe(n) {\n        function t(t, e) {\n            n.moveTo(t + o, e), n.arc(t, e, o, 0, La)\n        }\n\n        function e(t, e) {\n            n.moveTo(t, e), a.point = r\n        }\n\n        function r(t, e) {\n            n.lineTo(t, e)\n        }\n\n        function u() {\n            a.point = t\n        }\n\n        function i() {\n            n.closePath()\n        }\n        var o = 4.5,\n            a = {\n                point: t,\n                lineStart: function() {\n                    a.point = e\n                },\n                lineEnd: u,\n                polygonStart: function() {\n                    a.lineEnd = i\n                },\n                polygonEnd: function() {\n                    a.lineEnd = u, a.point = t\n                },\n                pointRadius: function(n) {\n                    return o = n, a\n                },\n                result: b\n            };\n        return a\n    }\n\n    function nr(n) {\n        function t(n) {\n            return (a ? r : e)(n)\n        }\n\n        function e(t) {\n            return rr(t, function(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            })\n        }\n\n        function r(t) {\n            function e(e, r) {\n                e = n(e, r), t.point(e[0], e[1])\n            }\n\n            function r() {\n                M = 0 / 0, S.point = i, t.lineStart()\n            }\n\n            function i(e, r) {\n                var i = pe([e, r]),\n                    o = n(e, r);\n                u(M, x, y, b, _, w, M = o[0], x = o[1], y = e, b = i[0], _ = i[1], w = i[2], a, t), t.point(M, x)\n            }\n\n            function o() {\n                S.point = e, t.lineEnd()\n            }\n\n            function c() {\n                r(), S.point = l, S.lineEnd = s\n            }\n\n            function l(n, t) {\n                i(f = n, h = t), g = M, p = x, v = b, d = _, m = w, S.point = i\n            }\n\n            function s() {\n                u(M, x, y, b, _, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()\n            }\n            var f, h, g, p, v, d, m, y, M, x, b, _, w, S = {\n                point: e,\n                lineStart: r,\n                lineEnd: o,\n                polygonStart: function() {\n                    t.polygonStart(), S.lineStart = c\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), S.lineStart = r\n                }\n            };\n            return S\n        }\n\n        function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {\n            var y = s - t,\n                M = f - e,\n                x = y * y + M * M;\n            if (x > 4 * i && d--) {\n                var b = a + g,\n                    _ = c + p,\n                    w = l + v,\n                    S = Math.sqrt(b * b + _ * _ + w * w),\n                    k = Math.asin(w /= S),\n                    E = ga(ga(w) - 1) < Ca || ga(r - h) < Ca ? (r + h) / 2 : Math.atan2(_, b),\n                    A = n(E, k),\n                    N = A[0],\n                    C = A[1],\n                    z = N - t,\n                    q = C - e,\n                    L = M * z - y * q;\n                (L * L / x > i || ga((y * z + M * q) / x - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, N, C, E, b /= S, _ /= S, w, d, m), m.point(N, C), u(N, C, E, b, _, w, s, f, h, g, p, v, d, m))\n            }\n        }\n        var i = .5,\n            o = Math.cos(30 * Da),\n            a = 16;\n        return t.precision = function(n) {\n            return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)\n        }, t\n    }\n\n    function tr(n) {\n        var t = nr(function(t, e) {\n            return n([t * Pa, e * Pa])\n        });\n        return function(n) {\n            return or(t(n))\n        }\n    }\n\n    function er(n) {\n        this.stream = n\n    }\n\n    function rr(n, t) {\n        return {\n            point: t,\n            sphere: function() {\n                n.sphere()\n            },\n            lineStart: function() {\n                n.lineStart()\n            },\n            lineEnd: function() {\n                n.lineEnd()\n            },\n            polygonStart: function() {\n                n.polygonStart()\n            },\n            polygonEnd: function() {\n                n.polygonEnd()\n            }\n        }\n    }\n\n    function ur(n) {\n        return ir(function() {\n            return n\n        })()\n    }\n\n    function ir(n) {\n        function t(n) {\n            return n = a(n[0] * Da, n[1] * Da), [n[0] * h + c, l - n[1] * h]\n        }\n\n        function e(n) {\n            return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Pa, n[1] * Pa]\n        }\n\n        function r() {\n            a = Ae(o = lr(m, M, x), i);\n            var n = i(v, d);\n            return c = g - n[0] * h, l = p + n[1] * h, u()\n        }\n\n        function u() {\n            return s && (s.valid = !1, s = null), t\n        }\n        var i, o, a, c, l, s, f = nr(function(n, t) {\n                return n = i(n, t), [n[0] * h + c, l - n[1] * h]\n            }),\n            h = 150,\n            g = 480,\n            p = 250,\n            v = 0,\n            d = 0,\n            m = 0,\n            M = 0,\n            x = 0,\n            b = Lc,\n            _ = y,\n            w = null,\n            S = null;\n        return t.stream = function(n) {\n                return s && (s.valid = !1), s = or(b(o, f(_(n)))), s.valid = !0, s\n            }, t.clipAngle = function(n) {\n                return arguments.length ? (b = null == n ? (w = n, Lc) : He((w = +n) * Da), u()) : w\n            }, t.clipExtent = function(n) {\n                return arguments.length ? (S = n, _ = n ? Ie(n[0][0], n[0][1], n[1][0], n[1][1]) : y, u()) : S\n            }, t.scale = function(n) {\n                return arguments.length ? (h = +n, r()) : h\n            }, t.translate = function(n) {\n                return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]\n            }, t.center = function(n) {\n                return arguments.length ? (v = n[0] % 360 * Da, d = n[1] % 360 * Da, r()) : [v * Pa, d * Pa]\n            }, t.rotate = function(n) {\n                return arguments.length ? (m = n[0] % 360 * Da, M = n[1] % 360 * Da, x = n.length > 2 ? n[2] % 360 * Da : 0, r()) : [m * Pa, M * Pa, x * Pa]\n            }, ta.rebind(t, f, \"precision\"),\n            function() {\n                return i = n.apply(this, arguments), t.invert = i.invert && e, r()\n            }\n    }\n\n    function or(n) {\n        return rr(n, function(t, e) {\n            n.point(t * Da, e * Da)\n        })\n    }\n\n    function ar(n, t) {\n        return [n, t]\n    }\n\n    function cr(n, t) {\n        return [n > qa ? n - La : -qa > n ? n + La : n, t]\n    }\n\n    function lr(n, t, e) {\n        return n ? t || e ? Ae(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr\n    }\n\n    function sr(n) {\n        return function(t, e) {\n            return t += n, [t > qa ? t - La : -qa > t ? t + La : t, e]\n        }\n    }\n\n    function fr(n) {\n        var t = sr(n);\n        return t.invert = sr(-n), t\n    }\n\n    function hr(n, t) {\n        function e(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * r + a * u;\n            return [Math.atan2(c * i - s * o, a * r - l * u), tt(s * i + c * o)]\n        }\n        var r = Math.cos(n),\n            u = Math.sin(n),\n            i = Math.cos(t),\n            o = Math.sin(t);\n        return e.invert = function(n, t) {\n            var e = Math.cos(t),\n                a = Math.cos(n) * e,\n                c = Math.sin(n) * e,\n                l = Math.sin(t),\n                s = l * i - c * o;\n            return [Math.atan2(c * i + l * o, a * r + s * u), tt(s * r - a * u)]\n        }, e\n    }\n\n    function gr(n, t) {\n        var e = Math.cos(n),\n            r = Math.sin(n);\n        return function(u, i, o, a) {\n            var c = o * t;\n            null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * La)) : (u = n + o * La, i = n - .5 * c);\n            for (var l, s = u; o > 0 ? s > i : i > s; s -= c) a.point((l = xe([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])\n        }\n    }\n\n    function pr(n, t) {\n        var e = pe(t);\n        e[0] -= n, Me(e);\n        var r = nt(-e[1]);\n        return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Ca) % (2 * Math.PI)\n    }\n\n    function vr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [n, t]\n            })\n        }\n    }\n\n    function dr(n, t, e) {\n        var r = ta.range(n, t - Ca, e).concat(t);\n        return function(n) {\n            return r.map(function(t) {\n                return [t, n]\n            })\n        }\n    }\n\n    function mr(n) {\n        return n.source\n    }\n\n    function yr(n) {\n        return n.target\n    }\n\n    function Mr(n, t, e, r) {\n        var u = Math.cos(t),\n            i = Math.sin(t),\n            o = Math.cos(r),\n            a = Math.sin(r),\n            c = u * Math.cos(n),\n            l = u * Math.sin(n),\n            s = o * Math.cos(e),\n            f = o * Math.sin(e),\n            h = 2 * Math.asin(Math.sqrt(it(r - t) + u * o * it(e - n))),\n            g = 1 / Math.sin(h),\n            p = h ? function(n) {\n                var t = Math.sin(n *= h) * g,\n                    e = Math.sin(h - n) * g,\n                    r = e * c + t * s,\n                    u = e * l + t * f,\n                    o = e * i + t * a;\n                return [Math.atan2(u, r) * Pa, Math.atan2(o, Math.sqrt(r * r + u * u)) * Pa]\n            } : function() {\n                return [n * Pa, t * Pa]\n            };\n        return p.distance = h, p\n    }\n\n    function xr() {\n        function n(n, u) {\n            var i = Math.sin(u *= Da),\n                o = Math.cos(u),\n                a = ga((n *= Da) - t),\n                c = Math.cos(a);\n            Yc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o\n        }\n        var t, e, r;\n        Zc.point = function(u, i) {\n            t = u * Da, e = Math.sin(i *= Da), r = Math.cos(i), Zc.point = n\n        }, Zc.lineEnd = function() {\n            Zc.point = Zc.lineEnd = b\n        }\n    }\n\n    function br(n, t) {\n        function e(t, e) {\n            var r = Math.cos(t),\n                u = Math.cos(e),\n                i = n(r * u);\n            return [i * u * Math.sin(t), i * Math.sin(e)]\n        }\n        return e.invert = function(n, e) {\n            var r = Math.sqrt(n * n + e * e),\n                u = t(r),\n                i = Math.sin(u),\n                o = Math.cos(u);\n            return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]\n        }, e\n    }\n\n    function _r(n, t) {\n        function e(n, t) {\n            o > 0 ? -Ra + Ca > t && (t = -Ra + Ca) : t > Ra - Ca && (t = Ra - Ca);\n            var e = o / Math.pow(u(t), i);\n            return [e * Math.sin(i * n), o - e * Math.cos(i * n)]\n        }\n        var r = Math.cos(n),\n            u = function(n) {\n                return Math.tan(qa / 4 + n / 2)\n            },\n            i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)),\n            o = r * Math.pow(u(n), i) / i;\n        return i ? (e.invert = function(n, t) {\n            var e = o - t,\n                r = K(i) * Math.sqrt(n * n + e * e);\n            return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ra]\n        }, e) : Sr\n    }\n\n    function wr(n, t) {\n        function e(n, t) {\n            var e = i - t;\n            return [e * Math.sin(u * n), i - e * Math.cos(u * n)]\n        }\n        var r = Math.cos(n),\n            u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n),\n            i = r / u + n;\n        return ga(u) < Ca ? ar : (e.invert = function(n, t) {\n            var e = i - t;\n            return [Math.atan2(n, e) / u, i - K(u) * Math.sqrt(n * n + e * e)]\n        }, e)\n    }\n\n    function Sr(n, t) {\n        return [n, Math.log(Math.tan(qa / 4 + t / 2))]\n    }\n\n    function kr(n) {\n        var t, e = ur(n),\n            r = e.scale,\n            u = e.translate,\n            i = e.clipExtent;\n        return e.scale = function() {\n            var n = r.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.translate = function() {\n            var n = u.apply(e, arguments);\n            return n === e ? t ? e.clipExtent(null) : e : n\n        }, e.clipExtent = function(n) {\n            var o = i.apply(e, arguments);\n            if (o === e) {\n                if (t = null == n) {\n                    var a = qa * r(),\n                        c = u();\n                    i([\n                        [c[0] - a, c[1] - a],\n                        [c[0] + a, c[1] + a]\n                    ])\n                }\n            } else t && (o = null);\n            return o\n        }, e.clipExtent(null)\n    }\n\n    function Er(n, t) {\n        return [Math.log(Math.tan(qa / 4 + t / 2)), -n]\n    }\n\n    function Ar(n) {\n        return n[0]\n    }\n\n    function Nr(n) {\n        return n[1]\n    }\n\n    function Cr(n) {\n        for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {\n            for (; r > 1 && Q(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;) --r;\n            e[r++] = u\n        }\n        return e.slice(0, r)\n    }\n\n    function zr(n, t) {\n        return n[0] - t[0] || n[1] - t[1]\n    }\n\n    function qr(n, t, e) {\n        return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])\n    }\n\n    function Lr(n, t, e, r) {\n        var u = n[0],\n            i = e[0],\n            o = t[0] - u,\n            a = r[0] - i,\n            c = n[1],\n            l = e[1],\n            s = t[1] - c,\n            f = r[1] - l,\n            h = (a * (c - l) - f * (u - i)) / (f * o - a * s);\n        return [u + h * o, c + h * s]\n    }\n\n    function Tr(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return !(t[0] - e[0] || t[1] - e[1])\n    }\n\n    function Rr() {\n        tu(this), this.edge = this.site = this.circle = null\n    }\n\n    function Dr(n) {\n        var t = el.pop() || new Rr;\n        return t.site = n, t\n    }\n\n    function Pr(n) {\n        Xr(n), Qc.remove(n), el.push(n), tu(n)\n    }\n\n    function Ur(n) {\n        var t = n.circle,\n            e = t.x,\n            r = t.cy,\n            u = {\n                x: e,\n                y: r\n            },\n            i = n.P,\n            o = n.N,\n            a = [n];\n        Pr(n);\n        for (var c = i; c.circle && ga(e - c.circle.x) < Ca && ga(r - c.circle.cy) < Ca;) i = c.P, a.unshift(c), Pr(c), c = i;\n        a.unshift(c), Xr(c);\n        for (var l = o; l.circle && ga(e - l.circle.x) < Ca && ga(r - l.circle.cy) < Ca;) o = l.N, a.push(l), Pr(l), l = o;\n        a.push(l), Xr(l);\n        var s, f = a.length;\n        for (s = 1; f > s; ++s) l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);\n        c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)\n    }\n\n    function jr(n) {\n        for (var t, e, r, u, i = n.x, o = n.y, a = Qc._; a;)\n            if (r = Fr(a, o) - i, r > Ca) a = a.L;\n            else {\n                if (u = i - Hr(a, o), !(u > Ca)) {\n                    r > -Ca ? (t = a.P, e = a) : u > -Ca ? (t = a, e = a.N) : t = e = a;\n                    break\n                }\n                if (!a.R) {\n                    t = a;\n                    break\n                }\n                a = a.R\n            } var c = Dr(n);\n        if (Qc.insert(t, c), t || e) {\n            if (t === e) return Xr(t), e = Dr(t.site), Qc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), void Vr(e);\n            if (!e) return void(c.edge = Jr(t.site, c.site));\n            Xr(t), Xr(e);\n            var l = t.site,\n                s = l.x,\n                f = l.y,\n                h = n.x - s,\n                g = n.y - f,\n                p = e.site,\n                v = p.x - s,\n                d = p.y - f,\n                m = 2 * (h * d - g * v),\n                y = h * h + g * g,\n                M = v * v + d * d,\n                x = {\n                    x: (d * y - g * M) / m + s,\n                    y: (h * M - v * y) / m + f\n                };\n            Kr(e.edge, l, p, x), c.edge = Jr(l, n, null, x), e.edge = Jr(n, p, null, x), Vr(t), Vr(e)\n        }\n    }\n\n    function Fr(n, t) {\n        var e = n.site,\n            r = e.x,\n            u = e.y,\n            i = u - t;\n        if (!i) return r;\n        var o = n.P;\n        if (!o) return -1 / 0;\n        e = o.site;\n        var a = e.x,\n            c = e.y,\n            l = c - t;\n        if (!l) return a;\n        var s = a - r,\n            f = 1 / i - 1 / l,\n            h = s / l;\n        return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2\n    }\n\n    function Hr(n, t) {\n        var e = n.N;\n        if (e) return Fr(e, t);\n        var r = n.site;\n        return r.y === t ? r.x : 1 / 0\n    }\n\n    function Or(n) {\n        this.site = n, this.edges = []\n    }\n\n    function Ir(n) {\n        for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Kc, d = v.length; d--;)\n            if (i = v[d], i && i.prepare())\n                for (a = i.edges, c = a.length, o = 0; c > o;) s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ga(r - t) > Ca || ga(u - e) > Ca) && (a.splice(o, 0, new Qr(Gr(i.site, s, ga(r - f) < Ca && p - u > Ca ? {\n                    x: f,\n                    y: ga(t - f) < Ca ? e : p\n                } : ga(u - p) < Ca && h - r > Ca ? {\n                    x: ga(e - p) < Ca ? t : h,\n                    y: p\n                } : ga(r - h) < Ca && u - g > Ca ? {\n                    x: h,\n                    y: ga(t - h) < Ca ? e : g\n                } : ga(u - g) < Ca && r - f > Ca ? {\n                    x: ga(e - g) < Ca ? t : f,\n                    y: g\n                } : null), i.site, null)), ++c)\n    }\n\n    function Yr(n, t) {\n        return t.angle - n.angle\n    }\n\n    function Zr() {\n        tu(this), this.x = this.y = this.arc = this.site = this.cy = null\n    }\n\n    function Vr(n) {\n        var t = n.P,\n            e = n.N;\n        if (t && e) {\n            var r = t.site,\n                u = n.site,\n                i = e.site;\n            if (r !== i) {\n                var o = u.x,\n                    a = u.y,\n                    c = r.x - o,\n                    l = r.y - a,\n                    s = i.x - o,\n                    f = i.y - a,\n                    h = 2 * (c * f - l * s);\n                if (!(h >= -za)) {\n                    var g = c * c + l * l,\n                        p = s * s + f * f,\n                        v = (f * g - l * p) / h,\n                        d = (c * p - s * g) / h,\n                        f = d + a,\n                        m = rl.pop() || new Zr;\n                    m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;\n                    for (var y = null, M = tl._; M;)\n                        if (m.y < M.y || m.y === M.y && m.x <= M.x) {\n                            if (!M.L) {\n                                y = M.P;\n                                break\n                            }\n                            M = M.L\n                        } else {\n                            if (!M.R) {\n                                y = M;\n                                break\n                            }\n                            M = M.R\n                        } tl.insert(y, m), y || (nl = m)\n                }\n            }\n        }\n    }\n\n    function Xr(n) {\n        var t = n.circle;\n        t && (t.P || (nl = t.N), tl.remove(t), rl.push(t), tu(t), n.circle = null)\n    }\n\n    function $r(n) {\n        for (var t, e = Gc, r = Oe(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;) t = e[u], (!Br(t, n) || !r(t) || ga(t.a.x - t.b.x) < Ca && ga(t.a.y - t.b.y) < Ca) && (t.a = t.b = null, e.splice(u, 1))\n    }\n\n    function Br(n, t) {\n        var e = n.b;\n        if (e) return !0;\n        var r, u, i = n.a,\n            o = t[0][0],\n            a = t[1][0],\n            c = t[0][1],\n            l = t[1][1],\n            s = n.l,\n            f = n.r,\n            h = s.x,\n            g = s.y,\n            p = f.x,\n            v = f.y,\n            d = (h + p) / 2,\n            m = (g + v) / 2;\n        if (v === g) {\n            if (o > d || d >= a) return;\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: d,\n                    y: c\n                };\n                e = {\n                    x: d,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: d,\n                    y: l\n                };\n                e = {\n                    x: d,\n                    y: c\n                }\n            }\n        } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)\n            if (h > p) {\n                if (i) {\n                    if (i.y >= l) return\n                } else i = {\n                    x: (c - u) / r,\n                    y: c\n                };\n                e = {\n                    x: (l - u) / r,\n                    y: l\n                }\n            } else {\n                if (i) {\n                    if (i.y < c) return\n                } else i = {\n                    x: (l - u) / r,\n                    y: l\n                };\n                e = {\n                    x: (c - u) / r,\n                    y: c\n                }\n            }\n        else if (v > g) {\n            if (i) {\n                if (i.x >= a) return\n            } else i = {\n                x: o,\n                y: r * o + u\n            };\n            e = {\n                x: a,\n                y: r * a + u\n            }\n        } else {\n            if (i) {\n                if (i.x < o) return\n            } else i = {\n                x: a,\n                y: r * a + u\n            };\n            e = {\n                x: o,\n                y: r * o + u\n            }\n        }\n        return n.a = i, n.b = e, !0\n    }\n\n    function Wr(n, t) {\n        this.l = n, this.r = t, this.a = this.b = null\n    }\n\n    function Jr(n, t, e, r) {\n        var u = new Wr(n, t);\n        return Gc.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Kc[n.i].edges.push(new Qr(u, n, t)), Kc[t.i].edges.push(new Qr(u, t, n)), u\n    }\n\n    function Gr(n, t, e) {\n        var r = new Wr(n, null);\n        return r.a = t, r.b = e, Gc.push(r), r\n    }\n\n    function Kr(n, t, e, r) {\n        n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)\n    }\n\n    function Qr(n, t, e) {\n        var r = n.a,\n            u = n.b;\n        this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)\n    }\n\n    function nu() {\n        this._ = null\n    }\n\n    function tu(n) {\n        n.U = n.C = n.L = n.R = n.P = n.N = null\n    }\n\n    function eu(n, t) {\n        var e = t,\n            r = t.R,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e\n    }\n\n    function ru(n, t) {\n        var e = t,\n            r = t.L,\n            u = e.U;\n        u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e\n    }\n\n    function uu(n) {\n        for (; n.L;) n = n.L;\n        return n\n    }\n\n    function iu(n, t) {\n        var e, r, u, i = n.sort(ou).pop();\n        for (Gc = [], Kc = new Array(n.length), Qc = new nu, tl = new nu;;)\n            if (u = nl, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Kc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop();\n            else {\n                if (!u) break;\n                Ur(u.arc)\n            } t && ($r(t), Ir(t));\n        var o = {\n            cells: Kc,\n            edges: Gc\n        };\n        return Qc = tl = Gc = Kc = null, o\n    }\n\n    function ou(n, t) {\n        return t.y - n.y || t.x - n.x\n    }\n\n    function au(n, t, e) {\n        return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)\n    }\n\n    function cu(n) {\n        return n.x\n    }\n\n    function lu(n) {\n        return n.y\n    }\n\n    function su() {\n        return {\n            leaf: !0,\n            nodes: [],\n            point: null,\n            x: null,\n            y: null\n        }\n    }\n\n    function fu(n, t, e, r, u, i) {\n        if (!n(t, e, r, u, i)) {\n            var o = .5 * (e + u),\n                a = .5 * (r + i),\n                c = t.nodes;\n            c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)\n        }\n    }\n\n    function hu(n, t, e, r, u, i, o) {\n        var a, c = 1 / 0;\n        return function l(n, s, f, h, g) {\n            if (!(s > i || f > o || r > h || u > g)) {\n                if (p = n.point) {\n                    var p, v = t - n.x,\n                        d = e - n.y,\n                        m = v * v + d * d;\n                    if (c > m) {\n                        var y = Math.sqrt(c = m);\n                        r = t - y, u = e - y, i = t + y, o = e + y, a = p\n                    }\n                }\n                for (var M = n.nodes, x = .5 * (s + h), b = .5 * (f + g), _ = t >= x, w = e >= b, S = w << 1 | _, k = S + 4; k > S; ++S)\n                    if (n = M[3 & S]) switch (3 & S) {\n                        case 0:\n                            l(n, s, f, x, b);\n                            break;\n                        case 1:\n                            l(n, x, f, h, b);\n                            break;\n                        case 2:\n                            l(n, s, b, x, g);\n                            break;\n                        case 3:\n                            l(n, x, b, h, g)\n                    }\n            }\n        }(n, r, u, i, o), a\n    }\n\n    function gu(n, t) {\n        n = ta.rgb(n), t = ta.rgb(t);\n        var e = n.r,\n            r = n.g,\n            u = n.b,\n            i = t.r - e,\n            o = t.g - r,\n            a = t.b - u;\n        return function(n) {\n            return \"#\" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))\n        }\n    }\n\n    function pu(n, t) {\n        var e, r = {},\n            u = {};\n        for (e in n) e in t ? r[e] = mu(n[e], t[e]) : u[e] = n[e];\n        for (e in t) e in n || (u[e] = t[e]);\n        return function(n) {\n            for (e in r) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function vu(n, t) {\n        return n = +n, t = +t,\n            function(e) {\n                return n * (1 - e) + t * e\n            }\n    }\n\n    function du(n, t) {\n        var e, r, u, i = il.lastIndex = ol.lastIndex = 0,\n            o = -1,\n            a = [],\n            c = [];\n        for (n += \"\", t += \"\";\n            (e = il.exec(n)) && (r = ol.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({\n            i: o,\n            x: vu(e, r)\n        })), i = ol.lastIndex;\n        return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function(n) {\n            return t(n) + \"\"\n        }) : function() {\n            return t\n        } : (t = c.length, function(n) {\n            for (var e, r = 0; t > r; ++r) a[(e = c[r]).i] = e.x(n);\n            return a.join(\"\")\n        })\n    }\n\n    function mu(n, t) {\n        for (var e, r = ta.interpolators.length; --r >= 0 && !(e = ta.interpolators[r](n, t)););\n        return e\n    }\n\n    function yu(n, t) {\n        var e, r = [],\n            u = [],\n            i = n.length,\n            o = t.length,\n            a = Math.min(n.length, t.length);\n        for (e = 0; a > e; ++e) r.push(mu(n[e], t[e]));\n        for (; i > e; ++e) u[e] = n[e];\n        for (; o > e; ++e) u[e] = t[e];\n        return function(n) {\n            for (e = 0; a > e; ++e) u[e] = r[e](n);\n            return u\n        }\n    }\n\n    function Mu(n) {\n        return function(t) {\n            return 0 >= t ? 0 : t >= 1 ? 1 : n(t)\n        }\n    }\n\n    function xu(n) {\n        return function(t) {\n            return 1 - n(1 - t)\n        }\n    }\n\n    function bu(n) {\n        return function(t) {\n            return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))\n        }\n    }\n\n    function _u(n) {\n        return n * n\n    }\n\n    function wu(n) {\n        return n * n * n\n    }\n\n    function Su(n) {\n        if (0 >= n) return 0;\n        if (n >= 1) return 1;\n        var t = n * n,\n            e = t * n;\n        return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)\n    }\n\n    function ku(n) {\n        return function(t) {\n            return Math.pow(t, n)\n        }\n    }\n\n    function Eu(n) {\n        return 1 - Math.cos(n * Ra)\n    }\n\n    function Au(n) {\n        return Math.pow(2, 10 * (n - 1))\n    }\n\n    function Nu(n) {\n        return 1 - Math.sqrt(1 - n * n)\n    }\n\n    function Cu(n, t) {\n        var e;\n        return arguments.length < 2 && (t = .45), arguments.length ? e = t / La * Math.asin(1 / n) : (n = 1, e = t / 4),\n            function(r) {\n                return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * La / t)\n            }\n    }\n\n    function zu(n) {\n        return n || (n = 1.70158),\n            function(t) {\n                return t * t * ((n + 1) * t - n)\n            }\n    }\n\n    function qu(n) {\n        return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375\n    }\n\n    function Lu(n, t) {\n        n = ta.hcl(n), t = ta.hcl(t);\n        var e = n.h,\n            r = n.c,\n            u = n.l,\n            i = t.h - e,\n            o = t.c - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return st(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Tu(n, t) {\n        n = ta.hsl(n), t = ta.hsl(t);\n        var e = n.h,\n            r = n.s,\n            u = n.l,\n            i = t.h - e,\n            o = t.s - r,\n            a = t.l - u;\n        return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360),\n            function(n) {\n                return ct(e + i * n, r + o * n, u + a * n) + \"\"\n            }\n    }\n\n    function Ru(n, t) {\n        n = ta.lab(n), t = ta.lab(t);\n        var e = n.l,\n            r = n.a,\n            u = n.b,\n            i = t.l - e,\n            o = t.a - r,\n            a = t.b - u;\n        return function(n) {\n            return ht(e + i * n, r + o * n, u + a * n) + \"\"\n        }\n    }\n\n    function Du(n, t) {\n        return t -= n,\n            function(e) {\n                return Math.round(n + t * e)\n            }\n    }\n\n    function Pu(n) {\n        var t = [n.a, n.b],\n            e = [n.c, n.d],\n            r = ju(t),\n            u = Uu(t, e),\n            i = ju(Fu(e, t, -u)) || 0;\n        t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Pa, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Pa : 0\n    }\n\n    function Uu(n, t) {\n        return n[0] * t[0] + n[1] * t[1]\n    }\n\n    function ju(n) {\n        var t = Math.sqrt(Uu(n, n));\n        return t && (n[0] /= t, n[1] /= t), t\n    }\n\n    function Fu(n, t, e) {\n        return n[0] += e * t[0], n[1] += e * t[1], n\n    }\n\n    function Hu(n, t) {\n        var e, r = [],\n            u = [],\n            i = ta.transform(n),\n            o = ta.transform(t),\n            a = i.translate,\n            c = o.translate,\n            l = i.rotate,\n            s = o.rotate,\n            f = i.skew,\n            h = o.skew,\n            g = i.scale,\n            p = o.scale;\n        return a[0] != c[0] || a[1] != c[1] ? (r.push(\"translate(\", null, \",\", null, \")\"), u.push({\n                i: 1,\n                x: vu(a[0], c[0])\n            }, {\n                i: 3,\n                x: vu(a[1], c[1])\n            })) : r.push(c[0] || c[1] ? \"translate(\" + c + \")\" : \"\"), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({\n                i: r.push(r.pop() + \"rotate(\", null, \")\") - 2,\n                x: vu(l, s)\n            })) : s && r.push(r.pop() + \"rotate(\" + s + \")\"), f != h ? u.push({\n                i: r.push(r.pop() + \"skewX(\", null, \")\") - 2,\n                x: vu(f, h)\n            }) : h && r.push(r.pop() + \"skewX(\" + h + \")\"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + \"scale(\", null, \",\", null, \")\"), u.push({\n                i: e - 4,\n                x: vu(g[0], p[0])\n            }, {\n                i: e - 2,\n                x: vu(g[1], p[1])\n            })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + \"scale(\" + p + \")\"), e = u.length,\n            function(n) {\n                for (var t, i = -1; ++i < e;) r[(t = u[i]).i] = t.x(n);\n                return r.join(\"\")\n            }\n    }\n\n    function Ou(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return (e - n) / t\n            }\n    }\n\n    function Iu(n, t) {\n        return t = (t -= n = +n) || 1 / t,\n            function(e) {\n                return Math.max(0, Math.min(1, (e - n) / t))\n            }\n    }\n\n    function Yu(n) {\n        for (var t = n.source, e = n.target, r = Vu(t, e), u = [t]; t !== r;) t = t.parent, u.push(t);\n        for (var i = u.length; e !== r;) u.splice(i, 0, e), e = e.parent;\n        return u\n    }\n\n    function Zu(n) {\n        for (var t = [], e = n.parent; null != e;) t.push(n), n = e, e = e.parent;\n        return t.push(n), t\n    }\n\n    function Vu(n, t) {\n        if (n === t) return n;\n        for (var e = Zu(n), r = Zu(t), u = e.pop(), i = r.pop(), o = null; u === i;) o = u, u = e.pop(), i = r.pop();\n        return o\n    }\n\n    function Xu(n) {\n        n.fixed |= 2\n    }\n\n    function $u(n) {\n        n.fixed &= -7\n    }\n\n    function Bu(n) {\n        n.fixed |= 4, n.px = n.x, n.py = n.y\n    }\n\n    function Wu(n) {\n        n.fixed &= -5\n    }\n\n    function Ju(n, t, e) {\n        var r = 0,\n            u = 0;\n        if (n.charge = 0, !n.leaf)\n            for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;) i = o[c], null != i && (Ju(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);\n        if (n.point) {\n            n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);\n            var l = t * e[n.point.index];\n            n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y\n        }\n        n.cx = r / n.charge, n.cy = u / n.charge\n    }\n\n    function Gu(n, t) {\n        return ta.rebind(n, t, \"sort\", \"children\", \"value\"), n.nodes = n, n.links = ri, n\n    }\n\n    function Ku(n, t) {\n        for (var e = [n]; null != (n = e.pop());)\n            if (t(n), (u = n.children) && (r = u.length))\n                for (var r, u; --r >= 0;) e.push(u[r])\n    }\n\n    function Qu(n, t) {\n        for (var e = [n], r = []; null != (n = e.pop());)\n            if (r.push(n), (i = n.children) && (u = i.length))\n                for (var u, i, o = -1; ++o < u;) e.push(i[o]);\n        for (; null != (n = r.pop());) t(n)\n    }\n\n    function ni(n) {\n        return n.children\n    }\n\n    function ti(n) {\n        return n.value\n    }\n\n    function ei(n, t) {\n        return t.value - n.value\n    }\n\n    function ri(n) {\n        return ta.merge(n.map(function(n) {\n            return (n.children || []).map(function(t) {\n                return {\n                    source: n,\n                    target: t\n                }\n            })\n        }))\n    }\n\n    function ui(n) {\n        return n.x\n    }\n\n    function ii(n) {\n        return n.y\n    }\n\n    function oi(n, t, e) {\n        n.y0 = t, n.y = e\n    }\n\n    function ai(n) {\n        return ta.range(n.length)\n    }\n\n    function ci(n) {\n        for (var t = -1, e = n[0].length, r = []; ++t < e;) r[t] = 0;\n        return r\n    }\n\n    function li(n) {\n        for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);\n        return r\n    }\n\n    function si(n) {\n        return n.reduce(fi, 0)\n    }\n\n    function fi(n, t) {\n        return n + t[1]\n    }\n\n    function hi(n, t) {\n        return gi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))\n    }\n\n    function gi(n, t) {\n        for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;) i[e] = u * e + r;\n        return i\n    }\n\n    function pi(n) {\n        return [ta.min(n), ta.max(n)]\n    }\n\n    function vi(n, t) {\n        return n.value - t.value\n    }\n\n    function di(n, t) {\n        var e = n._pack_next;\n        n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t\n    }\n\n    function mi(n, t) {\n        n._pack_next = t, t._pack_prev = n\n    }\n\n    function yi(n, t) {\n        var e = t.x - n.x,\n            r = t.y - n.y,\n            u = n.r + t.r;\n        return .999 * u * u > e * e + r * r\n    }\n\n    function Mi(n) {\n        function t(n) {\n            s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)\n        }\n        if ((e = n.children) && (l = e.length)) {\n            var e, r, u, i, o, a, c, l, s = 1 / 0,\n                f = -1 / 0,\n                h = 1 / 0,\n                g = -1 / 0;\n            if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))\n                for (i = e[2], wi(r, u, i), t(i), di(r, i), r._pack_prev = i, di(i, u), u = r._pack_next, o = 3; l > o; o++) {\n                    wi(r, u, i = e[o]);\n                    var p = 0,\n                        v = 1,\n                        d = 1;\n                    for (a = u._pack_next; a !== u; a = a._pack_next, v++)\n                        if (yi(a, i)) {\n                            p = 1;\n                            break\n                        } if (1 == p)\n                        for (c = r._pack_prev; c !== a._pack_prev && !yi(c, i); c = c._pack_prev, d++);\n                    p ? (d > v || v == d && u.r < r.r ? mi(r, u = a) : mi(r = c, u), o--) : (di(r, i), u = i, t(i))\n                }\n            var m = (s + f) / 2,\n                y = (h + g) / 2,\n                M = 0;\n            for (o = 0; l > o; o++) i = e[o], i.x -= m, i.y -= y, M = Math.max(M, i.r + Math.sqrt(i.x * i.x + i.y * i.y));\n            n.r = M, e.forEach(bi)\n        }\n    }\n\n    function xi(n) {\n        n._pack_next = n._pack_prev = n\n    }\n\n    function bi(n) {\n        delete n._pack_next, delete n._pack_prev\n    }\n\n    function _i(n, t, e, r) {\n        var u = n.children;\n        if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)\n            for (var i = -1, o = u.length; ++i < o;) _i(u[i], t, e, r)\n    }\n\n    function wi(n, t, e) {\n        var r = n.r + e.r,\n            u = t.x - n.x,\n            i = t.y - n.y;\n        if (r && (u || i)) {\n            var o = t.r + e.r,\n                a = u * u + i * i;\n            o *= o, r *= r;\n            var c = .5 + (r - o) / (2 * a),\n                l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);\n            e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u\n        } else e.x = n.x + r, e.y = n.y\n    }\n\n    function Si(n, t) {\n        return n.parent == t.parent ? 1 : 2\n    }\n\n    function ki(n) {\n        var t = n.children;\n        return t.length ? t[0] : n.t\n    }\n\n    function Ei(n) {\n        var t, e = n.children;\n        return (t = e.length) ? e[t - 1] : n.t\n    }\n\n    function Ai(n, t, e) {\n        var r = e / (t.i - n.i);\n        t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e\n    }\n\n    function Ni(n) {\n        for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;) t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)\n    }\n\n    function Ci(n, t, e) {\n        return n.a.parent === t.parent ? n.a : e\n    }\n\n    function zi(n) {\n        return 1 + ta.max(n, function(n) {\n            return n.y\n        })\n    }\n\n    function qi(n) {\n        return n.reduce(function(n, t) {\n            return n + t.x\n        }, 0) / n.length\n    }\n\n    function Li(n) {\n        var t = n.children;\n        return t && t.length ? Li(t[0]) : n\n    }\n\n    function Ti(n) {\n        var t, e = n.children;\n        return e && (t = e.length) ? Ti(e[t - 1]) : n\n    }\n\n    function Ri(n) {\n        return {\n            x: n.x,\n            y: n.y,\n            dx: n.dx,\n            dy: n.dy\n        }\n    }\n\n    function Di(n, t) {\n        var e = n.x + t[3],\n            r = n.y + t[0],\n            u = n.dx - t[1] - t[3],\n            i = n.dy - t[0] - t[2];\n        return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {\n            x: e,\n            y: r,\n            dx: u,\n            dy: i\n        }\n    }\n\n    function Pi(n) {\n        var t = n[0],\n            e = n[n.length - 1];\n        return e > t ? [t, e] : [e, t]\n    }\n\n    function Ui(n) {\n        return n.rangeExtent ? n.rangeExtent() : Pi(n.range())\n    }\n\n    function ji(n, t, e, r) {\n        var u = e(n[0], n[1]),\n            i = r(t[0], t[1]);\n        return function(n) {\n            return i(u(n))\n        }\n    }\n\n    function Fi(n, t) {\n        var e, r = 0,\n            u = n.length - 1,\n            i = n[r],\n            o = n[u];\n        return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n\n    }\n\n    function Hi(n) {\n        return n ? {\n            floor: function(t) {\n                return Math.floor(t / n) * n\n            },\n            ceil: function(t) {\n                return Math.ceil(t / n) * n\n            }\n        } : ml\n    }\n\n    function Oi(n, t, e, r) {\n        var u = [],\n            i = [],\n            o = 0,\n            a = Math.min(n.length, t.length) - 1;\n        for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;) u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));\n        return function(t) {\n            var e = ta.bisect(n, t, 1, a) - 1;\n            return i[e](u[e](t))\n        }\n    }\n\n    function Ii(n, t, e, r) {\n        function u() {\n            var u = Math.min(n.length, t.length) > 2 ? Oi : ji,\n                c = r ? Iu : Ou;\n            return o = u(n, t, c, e), a = u(t, n, c, mu), i\n        }\n\n        function i(n) {\n            return o(n)\n        }\n        var o, a;\n        return i.invert = function(n) {\n            return a(n)\n        }, i.domain = function(t) {\n            return arguments.length ? (n = t.map(Number), u()) : n\n        }, i.range = function(n) {\n            return arguments.length ? (t = n, u()) : t\n        }, i.rangeRound = function(n) {\n            return i.range(n).interpolate(Du)\n        }, i.clamp = function(n) {\n            return arguments.length ? (r = n, u()) : r\n        }, i.interpolate = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, i.ticks = function(t) {\n            return Xi(n, t)\n        }, i.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, i.nice = function(t) {\n            return Zi(n, t), u()\n        }, i.copy = function() {\n            return Ii(n, t, e, r)\n        }, u()\n    }\n\n    function Yi(n, t) {\n        return ta.rebind(n, t, \"range\", \"rangeRound\", \"interpolate\", \"clamp\")\n    }\n\n    function Zi(n, t) {\n        return Fi(n, Hi(Vi(n, t)[2]))\n    }\n\n    function Vi(n, t) {\n        null == t && (t = 10);\n        var e = Pi(n),\n            r = e[1] - e[0],\n            u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)),\n            i = t / r * u;\n        return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e\n    }\n\n    function Xi(n, t) {\n        return ta.range.apply(ta, Vi(n, t))\n    }\n\n    function $i(n, t, e) {\n        var r = Vi(n, t);\n        if (e) {\n            var u = ic.exec(e);\n            if (u.shift(), \"s\" === u[8]) {\n                var i = ta.formatPrefix(Math.max(ga(r[0]), ga(r[1])));\n                return u[7] || (u[7] = \".\" + Bi(i.scale(r[2]))), u[8] = \"f\", e = ta.format(u.join(\"\")),\n                    function(n) {\n                        return e(i.scale(n)) + i.symbol\n                    }\n            }\n            u[7] || (u[7] = \".\" + Wi(u[8], r)), e = u.join(\"\")\n        } else e = \",.\" + Bi(r[2]) + \"f\";\n        return ta.format(e)\n    }\n\n    function Bi(n) {\n        return -Math.floor(Math.log(n) / Math.LN10 + .01)\n    }\n\n    function Wi(n, t) {\n        var e = Bi(t[2]);\n        return n in yl ? Math.abs(e - Bi(Math.max(ga(t[0]), ga(t[1])))) + +(\"e\" !== n) : e - 2 * (\"%\" === n)\n    }\n\n    function Ji(n, t, e, r) {\n        function u(n) {\n            return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)\n        }\n\n        function i(n) {\n            return e ? Math.pow(t, n) : -Math.pow(t, -n)\n        }\n\n        function o(t) {\n            return n(u(t))\n        }\n        return o.invert = function(t) {\n            return i(n.invert(t))\n        }, o.domain = function(t) {\n            return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r\n        }, o.base = function(e) {\n            return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t\n        }, o.nice = function() {\n            var t = Fi(r.map(u), e ? Math : xl);\n            return n.domain(t), r = t.map(i), o\n        }, o.ticks = function() {\n            var n = Pi(r),\n                o = [],\n                a = n[0],\n                c = n[1],\n                l = Math.floor(u(a)),\n                s = Math.ceil(u(c)),\n                f = t % 1 ? 2 : t;\n            if (isFinite(s - l)) {\n                if (e) {\n                    for (; s > l; l++)\n                        for (var h = 1; f > h; h++) o.push(i(l) * h);\n                    o.push(i(l))\n                } else\n                    for (o.push(i(l)); l++ < s;)\n                        for (var h = f - 1; h > 0; h--) o.push(i(l) * h);\n                for (l = 0; o[l] < a; l++);\n                for (s = o.length; o[s - 1] > c; s--);\n                o = o.slice(l, s)\n            }\n            return o\n        }, o.tickFormat = function(n, t) {\n            if (!arguments.length) return Ml;\n            arguments.length < 2 ? t = Ml : \"function\" != typeof t && (t = ta.format(t));\n            var r, a = Math.max(.1, n / o.ticks().length),\n                c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);\n            return function(n) {\n                return n / i(c(u(n) + r)) <= a ? t(n) : \"\"\n            }\n        }, o.copy = function() {\n            return Ji(n.copy(), t, e, r)\n        }, Yi(o, n)\n    }\n\n    function Gi(n, t, e) {\n        function r(t) {\n            return n(u(t))\n        }\n        var u = Ki(t),\n            i = Ki(1 / t);\n        return r.invert = function(t) {\n            return i(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e\n        }, r.ticks = function(n) {\n            return Xi(e, n)\n        }, r.tickFormat = function(n, t) {\n            return $i(e, n, t)\n        }, r.nice = function(n) {\n            return r.domain(Zi(e, n))\n        }, r.exponent = function(o) {\n            return arguments.length ? (u = Ki(t = o), i = Ki(1 / t), n.domain(e.map(u)), r) : t\n        }, r.copy = function() {\n            return Gi(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ki(n) {\n        return function(t) {\n            return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)\n        }\n    }\n\n    function Qi(n, t) {\n        function e(e) {\n            return i[((u.get(e) || (\"range\" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]\n        }\n\n        function r(t, e) {\n            return ta.range(n.length).map(function(n) {\n                return t + e * n\n            })\n        }\n        var u, i, o;\n        return e.domain = function(r) {\n            if (!arguments.length) return n;\n            n = [], u = new l;\n            for (var i, o = -1, a = r.length; ++o < a;) u.has(i = r[o]) || u.set(i, n.push(i));\n            return e[t.t].apply(e, t.a)\n        }, e.range = function(n) {\n            return arguments.length ? (i = n, o = 0, t = {\n                t: \"range\",\n                a: arguments\n            }, e) : i\n        }, e.rangePoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = (c + l) / 2, 0) : (l - c) / (n.length - 1 + a);\n            return i = r(c + s * a / 2, s), o = 0, t = {\n                t: \"rangePoints\",\n                a: arguments\n            }, e\n        }, e.rangeRoundPoints = function(u, a) {\n            arguments.length < 2 && (a = 0);\n            var c = u[0],\n                l = u[1],\n                s = n.length < 2 ? (c = l = Math.round((c + l) / 2), 0) : (l - c) / (n.length - 1 + a) | 0;\n            return i = r(c + Math.round(s * a / 2 + (l - c - (n.length - 1 + a) * s) / 2), s), o = 0, t = {\n                t: \"rangeRoundPoints\",\n                a: arguments\n            }, e\n        }, e.rangeBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = (f - s) / (n.length - a + 2 * c);\n            return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {\n                t: \"rangeBands\",\n                a: arguments\n            }, e\n        }, e.rangeRoundBands = function(u, a, c) {\n            arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);\n            var l = u[1] < u[0],\n                s = u[l - 0],\n                f = u[1 - l],\n                h = Math.floor((f - s) / (n.length - a + 2 * c));\n            return i = r(s + Math.round((f - s - (n.length - a) * h) / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {\n                t: \"rangeRoundBands\",\n                a: arguments\n            }, e\n        }, e.rangeBand = function() {\n            return o\n        }, e.rangeExtent = function() {\n            return Pi(t.a[0])\n        }, e.copy = function() {\n            return Qi(n, t)\n        }, e.domain(n)\n    }\n\n    function no(n, t) {\n        function i() {\n            var e = 0,\n                r = t.length;\n            for (a = []; ++e < r;) a[e - 1] = ta.quantile(n, e / r);\n            return o\n        }\n\n        function o(n) {\n            return isNaN(n = +n) ? void 0 : t[ta.bisect(a, n)]\n        }\n        var a;\n        return o.domain = function(t) {\n            return arguments.length ? (n = t.map(r).filter(u).sort(e), i()) : n\n        }, o.range = function(n) {\n            return arguments.length ? (t = n, i()) : t\n        }, o.quantiles = function() {\n            return a\n        }, o.invertExtent = function(e) {\n            return e = t.indexOf(e), 0 > e ? [0 / 0, 0 / 0] : [e > 0 ? a[e - 1] : n[0], e < a.length ? a[e] : n[n.length - 1]]\n        }, o.copy = function() {\n            return no(n, t)\n        }, i()\n    }\n\n    function to(n, t, e) {\n        function r(t) {\n            return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]\n        }\n\n        function u() {\n            return i = e.length / (t - n), o = e.length - 1, r\n        }\n        var i, o;\n        return r.domain = function(e) {\n            return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]\n        }, r.range = function(n) {\n            return arguments.length ? (e = n, u()) : e\n        }, r.invertExtent = function(t) {\n            return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]\n        }, r.copy = function() {\n            return to(n, t, e)\n        }, u()\n    }\n\n    function eo(n, t) {\n        function e(e) {\n            return e >= e ? t[ta.bisect(n, e)] : void 0\n        }\n        return e.domain = function(t) {\n            return arguments.length ? (n = t, e) : n\n        }, e.range = function(n) {\n            return arguments.length ? (t = n, e) : t\n        }, e.invertExtent = function(e) {\n            return e = t.indexOf(e), [n[e - 1], n[e]]\n        }, e.copy = function() {\n            return eo(n, t)\n        }, e\n    }\n\n    function ro(n) {\n        function t(n) {\n            return +n\n        }\n        return t.invert = t, t.domain = t.range = function(e) {\n            return arguments.length ? (n = e.map(t), t) : n\n        }, t.ticks = function(t) {\n            return Xi(n, t)\n        }, t.tickFormat = function(t, e) {\n            return $i(n, t, e)\n        }, t.copy = function() {\n            return ro(n)\n        }, t\n    }\n\n    function uo() {\n        return 0\n    }\n\n    function io(n) {\n        return n.innerRadius\n    }\n\n    function oo(n) {\n        return n.outerRadius\n    }\n\n    function ao(n) {\n        return n.startAngle\n    }\n\n    function co(n) {\n        return n.endAngle\n    }\n\n    function lo(n) {\n        return n && n.padAngle\n    }\n\n    function so(n, t, e, r) {\n        return (n - e) * t - (t - r) * n > 0 ? 0 : 1\n    }\n\n    function fo(n, t, e, r, u) {\n        var i = n[0] - t[0],\n            o = n[1] - t[1],\n            a = (u ? r : -r) / Math.sqrt(i * i + o * o),\n            c = a * o,\n            l = -a * i,\n            s = n[0] + c,\n            f = n[1] + l,\n            h = t[0] + c,\n            g = t[1] + l,\n            p = (s + h) / 2,\n            v = (f + g) / 2,\n            d = h - s,\n            m = g - f,\n            y = d * d + m * m,\n            M = e - r,\n            x = s * g - h * f,\n            b = (0 > m ? -1 : 1) * Math.sqrt(M * M * y - x * x),\n            _ = (x * m - d * b) / y,\n            w = (-x * d - m * b) / y,\n            S = (x * m + d * b) / y,\n            k = (-x * d + m * b) / y,\n            E = _ - p,\n            A = w - v,\n            N = S - p,\n            C = k - v;\n        return E * E + A * A > N * N + C * C && (_ = S, w = k), [\n            [_ - c, w - l],\n            [_ * e / M, w * e / M]\n        ]\n    }\n\n    function ho(n) {\n        function t(t) {\n            function o() {\n                l.push(\"M\", i(n(s), a))\n            }\n            for (var c, l = [], s = [], f = -1, h = t.length, g = Et(e), p = Et(r); ++f < h;) u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);\n            return s.length && o(), l.length ? l.join(\"\") : null\n        }\n        var e = Ar,\n            r = Nr,\n            u = Ne,\n            i = go,\n            o = i.key,\n            a = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.defined = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.interpolate = function(n) {\n            return arguments.length ? (o = \"function\" == typeof n ? i = n : (i = El.get(n) || go).key, t) : o\n        }, t.tension = function(n) {\n            return arguments.length ? (a = n, t) : a\n        }, t\n    }\n\n    function go(n) {\n        return n.join(\"L\")\n    }\n\n    function po(n) {\n        return go(n) + \"Z\"\n    }\n\n    function vo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r[0] + (r = n[t])[0]) / 2, \"V\", r[1]);\n        return e > 1 && u.push(\"H\", r[0]), u.join(\"\")\n    }\n\n    function mo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"V\", (r = n[t])[1], \"H\", r[0]);\n        return u.join(\"\")\n    }\n\n    function yo(n) {\n        for (var t = 0, e = n.length, r = n[0], u = [r[0], \",\", r[1]]; ++t < e;) u.push(\"H\", (r = n[t])[0], \"V\", r[1]);\n        return u.join(\"\")\n    }\n\n    function Mo(n, t) {\n        return n.length < 4 ? go(n) : n[1] + _o(n.slice(1, -1), wo(n, t))\n    }\n\n    function xo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o((n.push(n[0]), n), wo([n[n.length - 2]].concat(n, [n[1]]), t))\n    }\n\n    function bo(n, t) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, wo(n, t))\n    }\n\n    function _o(n, t) {\n        if (t.length < 1 || n.length != t.length && n.length != t.length + 2) return go(n);\n        var e = n.length != t.length,\n            r = \"\",\n            u = n[0],\n            i = n[1],\n            o = t[0],\n            a = o,\n            c = 1;\n        if (e && (r += \"Q\" + (i[0] - 2 * o[0] / 3) + \",\" + (i[1] - 2 * o[1] / 3) + \",\" + i[0] + \",\" + i[1], u = n[1], c = 2), t.length > 1) {\n            a = t[1], i = n[c], c++, r += \"C\" + (u[0] + o[0]) + \",\" + (u[1] + o[1]) + \",\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1];\n            for (var l = 2; l < t.length; l++, c++) i = n[c], a = t[l], r += \"S\" + (i[0] - a[0]) + \",\" + (i[1] - a[1]) + \",\" + i[0] + \",\" + i[1]\n        }\n        if (e) {\n            var s = n[c];\n            r += \"Q\" + (i[0] + 2 * a[0] / 3) + \",\" + (i[1] + 2 * a[1] / 3) + \",\" + s[0] + \",\" + s[1]\n        }\n        return r\n    }\n\n    function wo(n, t) {\n        for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;) e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);\n        return r\n    }\n\n    function So(n) {\n        if (n.length < 3) return go(n);\n        var t = 1,\n            e = n.length,\n            r = n[0],\n            u = r[0],\n            i = r[1],\n            o = [u, u, u, (r = n[1])[0]],\n            a = [i, i, i, r[1]],\n            c = [u, \",\", i, \"L\", No(Cl, o), \",\", No(Cl, a)];\n        for (n.push(n[e - 1]); ++t <= e;) r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), Co(c, o, a);\n        return n.pop(), c.push(\"L\", r), c.join(\"\")\n    }\n\n    function ko(n) {\n        if (n.length < 4) return go(n);\n        for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;) t = n[r], i.push(t[0]), o.push(t[1]);\n        for (e.push(No(Cl, i) + \",\" + No(Cl, o)), --r; ++r < u;) t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), Co(e, i, o);\n        return e.join(\"\")\n    }\n\n    function Eo(n) {\n        for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;) e = n[r % u], o.push(e[0]), a.push(e[1]);\n        for (t = [No(Cl, o), \",\", No(Cl, a)], --r; ++r < i;) e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), Co(t, o, a);\n        return t.join(\"\")\n    }\n\n    function Ao(n, t) {\n        var e = n.length - 1;\n        if (e)\n            for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;) r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);\n        return So(n)\n    }\n\n    function No(n, t) {\n        return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]\n    }\n\n    function Co(n, t, e) {\n        n.push(\"C\", No(Al, t), \",\", No(Al, e), \",\", No(Nl, t), \",\", No(Nl, e), \",\", No(Cl, t), \",\", No(Cl, e))\n    }\n\n    function zo(n, t) {\n        return (t[1] - n[1]) / (t[0] - n[0])\n    }\n\n    function qo(n) {\n        for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = zo(u, i); ++t < e;) r[t] = (o + (o = zo(u = i, i = n[t + 1]))) / 2;\n        return r[t] = o, r\n    }\n\n    function Lo(n) {\n        for (var t, e, r, u, i = [], o = qo(n), a = -1, c = n.length - 1; ++a < c;) t = zo(n[a], n[a + 1]), ga(t) < Ca ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));\n        for (a = -1; ++a <= c;) u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);\n        return i\n    }\n\n    function To(n) {\n        return n.length < 3 ? go(n) : n[0] + _o(n, Lo(n))\n    }\n\n    function Ro(n) {\n        for (var t, e, r, u = -1, i = n.length; ++u < i;) t = n[u], e = t[0], r = t[1] - Ra, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);\n        return n\n    }\n\n    function Do(n) {\n        function t(t) {\n            function c() {\n                v.push(\"M\", a(n(m), f), s, l(n(d.reverse()), f), \"Z\")\n            }\n            for (var h, g, p, v = [], d = [], m = [], y = -1, M = t.length, x = Et(e), b = Et(u), _ = e === r ? function() {\n                    return g\n                } : Et(r), w = u === i ? function() {\n                    return p\n                } : Et(i); ++y < M;) o.call(this, h = t[y], y) ? (d.push([g = +x.call(this, h, y), p = +b.call(this, h, y)]), m.push([+_.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);\n            return d.length && c(), v.length ? v.join(\"\") : null\n        }\n        var e = Ar,\n            r = Ar,\n            u = 0,\n            i = Nr,\n            o = Ne,\n            a = go,\n            c = a.key,\n            l = a,\n            s = \"L\",\n            f = .7;\n        return t.x = function(n) {\n            return arguments.length ? (e = r = n, t) : r\n        }, t.x0 = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.x1 = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (u = i = n, t) : i\n        }, t.y0 = function(n) {\n            return arguments.length ? (u = n, t) : u\n        }, t.y1 = function(n) {\n            return arguments.length ? (i = n, t) : i\n        }, t.defined = function(n) {\n            return arguments.length ? (o = n, t) : o\n        }, t.interpolate = function(n) {\n            return arguments.length ? (c = \"function\" == typeof n ? a = n : (a = El.get(n) || go).key, l = a.reverse || a, s = a.closed ? \"M\" : \"L\", t) : c\n        }, t.tension = function(n) {\n            return arguments.length ? (f = n, t) : f\n        }, t\n    }\n\n    function Po(n) {\n        return n.radius\n    }\n\n    function Uo(n) {\n        return [n.x, n.y]\n    }\n\n    function jo(n) {\n        return function() {\n            var t = n.apply(this, arguments),\n                e = t[0],\n                r = t[1] - Ra;\n            return [e * Math.cos(r), e * Math.sin(r)]\n        }\n    }\n\n    function Fo() {\n        return 64\n    }\n\n    function Ho() {\n        return \"circle\"\n    }\n\n    function Oo(n) {\n        var t = Math.sqrt(n / qa);\n        return \"M0,\" + t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + -t + \"A\" + t + \",\" + t + \" 0 1,1 0,\" + t + \"Z\"\n    }\n\n    function Io(n) {\n        return function() {\n            var t, e;\n            (t = this[n]) && (e = t[t.active]) && (--t.count ? delete t[t.active] : delete this[n], t.active += .5, e.event && e.event.interrupt.call(this, this.__data__, e.index))\n        }\n    }\n\n    function Yo(n, t, e) {\n        return ya(n, Pl), n.namespace = t, n.id = e, n\n    }\n\n    function Zo(n, t, e, r) {\n        var u = n.id,\n            i = n.namespace;\n        return Y(n, \"function\" == typeof e ? function(n, o, a) {\n            n[i][u].tween.set(t, r(e.call(n, n.__data__, o, a)))\n        } : (e = r(e), function(n) {\n            n[i][u].tween.set(t, e)\n        }))\n    }\n\n    function Vo(n) {\n        return null == n && (n = \"\"),\n            function() {\n                this.textContent = n\n            }\n    }\n\n    function Xo(n) {\n        return null == n ? \"__transition__\" : \"__transition_\" + n + \"__\"\n    }\n\n    function $o(n, t, e, r, u) {\n        var i = n[e] || (n[e] = {\n                active: 0,\n                count: 0\n            }),\n            o = i[r];\n        if (!o) {\n            var a = u.time;\n            o = i[r] = {\n                tween: new l,\n                time: a,\n                delay: u.delay,\n                duration: u.duration,\n                ease: u.ease,\n                index: t\n            }, u = null, ++i.count, ta.timer(function(u) {\n                function c(e) {\n                    if (i.active > r) return s();\n                    var u = i[i.active];\n                    u && (--i.count, delete i[i.active], u.event && u.event.interrupt.call(n, n.__data__, u.index)), i.active = r, o.event && o.event.start.call(n, n.__data__, t), o.tween.forEach(function(e, r) {\n                        (r = r.call(n, n.__data__, t)) && v.push(r)\n                    }), h = o.ease, f = o.duration, ta.timer(function() {\n                        return p.c = l(e || 1) ? Ne : l, 1\n                    }, 0, a)\n                }\n\n                function l(e) {\n                    if (i.active !== r) return 1;\n                    for (var u = e / f, a = h(u), c = v.length; c > 0;) v[--c].call(n, a);\n                    return u >= 1 ? (o.event && o.event.end.call(n, n.__data__, t), s()) : void 0\n                }\n\n                function s() {\n                    return --i.count ? delete i[r] : delete n[e], 1\n                }\n                var f, h, g = o.delay,\n                    p = ec,\n                    v = [];\n                return p.t = g + a, u >= g ? c(u - g) : void(p.c = c)\n            }, 0, a)\n        }\n    }\n\n    function Bo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(\" + (isFinite(r) ? r : e(n)) + \",0)\"\n        })\n    }\n\n    function Wo(n, t, e) {\n        n.attr(\"transform\", function(n) {\n            var r = t(n);\n            return \"translate(0,\" + (isFinite(r) ? r : e(n)) + \")\"\n        })\n    }\n\n    function Jo(n) {\n        return n.toISOString()\n    }\n\n    function Go(n, t, e) {\n        function r(t) {\n            return n(t)\n        }\n\n        function u(n, e) {\n            var r = n[1] - n[0],\n                u = r / e,\n                i = ta.bisect(Vl, u);\n            return i == Vl.length ? [t.year, Vi(n.map(function(n) {\n                return n / 31536e6\n            }), e)[2]] : i ? t[u / Vl[i - 1] < Vl[i] / u ? i - 1 : i] : [Bl, Vi(n, e)[2]]\n        }\n        return r.invert = function(t) {\n            return Ko(n.invert(t))\n        }, r.domain = function(t) {\n            return arguments.length ? (n.domain(t), r) : n.domain().map(Ko)\n        }, r.nice = function(n, t) {\n            function e(e) {\n                return !isNaN(e) && !n.range(e, Ko(+e + 1), t).length\n            }\n            var i = r.domain(),\n                o = Pi(i),\n                a = null == n ? u(o, 10) : \"number\" == typeof n && u(o, n);\n            return a && (n = a[0], t = a[1]), r.domain(Fi(i, t > 1 ? {\n                floor: function(t) {\n                    for (; e(t = n.floor(t));) t = Ko(t - 1);\n                    return t\n                },\n                ceil: function(t) {\n                    for (; e(t = n.ceil(t));) t = Ko(+t + 1);\n                    return t\n                }\n            } : n))\n        }, r.ticks = function(n, t) {\n            var e = Pi(r.domain()),\n                i = null == n ? u(e, 10) : \"number\" == typeof n ? u(e, n) : !n.range && [{\n                    range: n\n                }, t];\n            return i && (n = i[0], t = i[1]), n.range(e[0], Ko(+e[1] + 1), 1 > t ? 1 : t)\n        }, r.tickFormat = function() {\n            return e\n        }, r.copy = function() {\n            return Go(n.copy(), t, e)\n        }, Yi(r, n)\n    }\n\n    function Ko(n) {\n        return new Date(n)\n    }\n\n    function Qo(n) {\n        return JSON.parse(n.responseText)\n    }\n\n    function na(n) {\n        var t = ua.createRange();\n        return t.selectNode(ua.body), t.createContextualFragment(n.responseText)\n    }\n    var ta = {\n            version: \"3.5.4\"\n        },\n        ea = [].slice,\n        ra = function(n) {\n            return ea.call(n)\n        },\n        ua = this.document;\n    if (ua) try {\n        ra(ua.documentElement.childNodes)[0].nodeType\n    } catch (ia) {\n        ra = function(n) {\n            for (var t = n.length, e = new Array(t); t--;) e[t] = n[t];\n            return e\n        }\n    }\n    if (Date.now || (Date.now = function() {\n            return +new Date\n        }), ua) try {\n        ua.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\")\n    } catch (oa) {\n        var aa = this.Element.prototype,\n            ca = aa.setAttribute,\n            la = aa.setAttributeNS,\n            sa = this.CSSStyleDeclaration.prototype,\n            fa = sa.setProperty;\n        aa.setAttribute = function(n, t) {\n            ca.call(this, n, t + \"\")\n        }, aa.setAttributeNS = function(n, t, e) {\n            la.call(this, n, t, e + \"\")\n        }, sa.setProperty = function(n, t, e) {\n            fa.call(this, n, t + \"\", e)\n        }\n    }\n    ta.ascending = e, ta.descending = function(n, t) {\n        return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0\n    }, ta.min = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && e > r && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && e > r && (e = r)\n        }\n        return e\n    }, ta.max = function(n, t) {\n        var e, r, u = -1,\n            i = n.length;\n        if (1 === arguments.length) {\n            for (; ++u < i;)\n                if (null != (r = n[u]) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = n[u]) && r > e && (e = r)\n        } else {\n            for (; ++u < i;)\n                if (null != (r = t.call(n, n[u], u)) && r >= r) {\n                    e = r;\n                    break\n                } for (; ++u < i;) null != (r = t.call(n, n[u], u)) && r > e && (e = r)\n        }\n        return e\n    }, ta.extent = function(n, t) {\n        var e, r, u, i = -1,\n            o = n.length;\n        if (1 === arguments.length) {\n            for (; ++i < o;)\n                if (null != (r = n[i]) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))\n        } else {\n            for (; ++i < o;)\n                if (null != (r = t.call(n, n[i], i)) && r >= r) {\n                    e = u = r;\n                    break\n                } for (; ++i < o;) null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))\n        }\n        return [e, u]\n    }, ta.sum = function(n, t) {\n        var e, r = 0,\n            i = n.length,\n            o = -1;\n        if (1 === arguments.length)\n            for (; ++o < i;) u(e = +n[o]) && (r += e);\n        else\n            for (; ++o < i;) u(e = +t.call(n, n[o], o)) && (r += e);\n        return r\n    }, ta.mean = function(n, t) {\n        var e, i = 0,\n            o = n.length,\n            a = -1,\n            c = o;\n        if (1 === arguments.length)\n            for (; ++a < o;) u(e = r(n[a])) ? i += e : --c;\n        else\n            for (; ++a < o;) u(e = r(t.call(n, n[a], a))) ? i += e : --c;\n        return c ? i / c : void 0\n    }, ta.quantile = function(n, t) {\n        var e = (n.length - 1) * t + 1,\n            r = Math.floor(e),\n            u = +n[r - 1],\n            i = e - r;\n        return i ? u + i * (n[r] - u) : u\n    }, ta.median = function(n, t) {\n        var i, o = [],\n            a = n.length,\n            c = -1;\n        if (1 === arguments.length)\n            for (; ++c < a;) u(i = r(n[c])) && o.push(i);\n        else\n            for (; ++c < a;) u(i = r(t.call(n, n[c], c))) && o.push(i);\n        return o.length ? ta.quantile(o.sort(e), .5) : void 0\n    }, ta.variance = function(n, t) {\n        var e, i, o = n.length,\n            a = 0,\n            c = 0,\n            l = -1,\n            s = 0;\n        if (1 === arguments.length)\n            for (; ++l < o;) u(e = r(n[l])) && (i = e - a, a += i / ++s, c += i * (e - a));\n        else\n            for (; ++l < o;) u(e = r(t.call(n, n[l], l))) && (i = e - a, a += i / ++s, c += i * (e - a));\n        return s > 1 ? c / (s - 1) : void 0\n    }, ta.deviation = function() {\n        var n = ta.variance.apply(this, arguments);\n        return n ? Math.sqrt(n) : n\n    };\n    var ha = i(e);\n    ta.bisectLeft = ha.left, ta.bisect = ta.bisectRight = ha.right, ta.bisector = function(n) {\n        return i(1 === n.length ? function(t, r) {\n            return e(n(t), r)\n        } : n)\n    }, ta.shuffle = function(n, t, e) {\n        (i = arguments.length) < 3 && (e = n.length, 2 > i && (t = 0));\n        for (var r, u, i = e - t; i;) u = Math.random() * i-- | 0, r = n[i + t], n[i + t] = n[u + t], n[u + t] = r;\n        return n\n    }, ta.permute = function(n, t) {\n        for (var e = t.length, r = new Array(e); e--;) r[e] = n[t[e]];\n        return r\n    }, ta.pairs = function(n) {\n        for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;) i[e] = [t = u, u = n[++e]];\n        return i\n    }, ta.zip = function() {\n        if (!(r = arguments.length)) return [];\n        for (var n = -1, t = ta.min(arguments, o), e = new Array(t); ++n < t;)\n            for (var r, u = -1, i = e[n] = new Array(r); ++u < r;) i[u] = arguments[u][n];\n        return e\n    }, ta.transpose = function(n) {\n        return ta.zip.apply(ta, n)\n    }, ta.keys = function(n) {\n        var t = [];\n        for (var e in n) t.push(e);\n        return t\n    }, ta.values = function(n) {\n        var t = [];\n        for (var e in n) t.push(n[e]);\n        return t\n    }, ta.entries = function(n) {\n        var t = [];\n        for (var e in n) t.push({\n            key: e,\n            value: n[e]\n        });\n        return t\n    }, ta.merge = function(n) {\n        for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;) o += n[i].length;\n        for (e = new Array(o); --u >= 0;)\n            for (r = n[u], t = r.length; --t >= 0;) e[--o] = r[t];\n        return e\n    };\n    var ga = Math.abs;\n    ta.range = function(n, t, e) {\n        if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), (t - n) / e === 1 / 0) throw new Error(\"infinite range\");\n        var r, u = [],\n            i = a(ga(e)),\n            o = -1;\n        if (n *= i, t *= i, e *= i, 0 > e)\n            for (;\n                (r = n + e * ++o) > t;) u.push(r / i);\n        else\n            for (;\n                (r = n + e * ++o) < t;) u.push(r / i);\n        return u\n    }, ta.map = function(n, t) {\n        var e = new l;\n        if (n instanceof l) n.forEach(function(n, t) {\n            e.set(n, t)\n        });\n        else if (Array.isArray(n)) {\n            var r, u = -1,\n                i = n.length;\n            if (1 === arguments.length)\n                for (; ++u < i;) e.set(u, n[u]);\n            else\n                for (; ++u < i;) e.set(t.call(n, r = n[u], u), r)\n        } else\n            for (var o in n) e.set(o, n[o]);\n        return e\n    };\n    var pa = \"__proto__\",\n        va = \"\\x00\";\n    c(l, {\n        has: h,\n        get: function(n) {\n            return this._[s(n)]\n        },\n        set: function(n, t) {\n            return this._[s(n)] = t\n        },\n        remove: g,\n        keys: p,\n        values: function() {\n            var n = [];\n            for (var t in this._) n.push(this._[t]);\n            return n\n        },\n        entries: function() {\n            var n = [];\n            for (var t in this._) n.push({\n                key: f(t),\n                value: this._[t]\n            });\n            return n\n        },\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t), this._[t])\n        }\n    }), ta.nest = function() {\n        function n(t, o, a) {\n            if (a >= i.length) return r ? r.call(u, o) : e ? o.sort(e) : o;\n            for (var c, s, f, h, g = -1, p = o.length, v = i[a++], d = new l; ++g < p;)(h = d.get(c = v(s = o[g]))) ? h.push(s) : d.set(c, [s]);\n            return t ? (s = t(), f = function(e, r) {\n                s.set(e, n(t, r, a))\n            }) : (s = {}, f = function(e, r) {\n                s[e] = n(t, r, a)\n            }), d.forEach(f), s\n        }\n\n        function t(n, e) {\n            if (e >= i.length) return n;\n            var r = [],\n                u = o[e++];\n            return n.forEach(function(n, u) {\n                r.push({\n                    key: n,\n                    values: t(u, e)\n                })\n            }), u ? r.sort(function(n, t) {\n                return u(n.key, t.key)\n            }) : r\n        }\n        var e, r, u = {},\n            i = [],\n            o = [];\n        return u.map = function(t, e) {\n            return n(e, t, 0)\n        }, u.entries = function(e) {\n            return t(n(ta.map, e, 0), 0)\n        }, u.key = function(n) {\n            return i.push(n), u\n        }, u.sortKeys = function(n) {\n            return o[i.length - 1] = n, u\n        }, u.sortValues = function(n) {\n            return e = n, u\n        }, u.rollup = function(n) {\n            return r = n, u\n        }, u\n    }, ta.set = function(n) {\n        var t = new m;\n        if (n)\n            for (var e = 0, r = n.length; r > e; ++e) t.add(n[e]);\n        return t\n    }, c(m, {\n        has: h,\n        add: function(n) {\n            return this._[s(n += \"\")] = !0, n\n        },\n        remove: g,\n        values: p,\n        size: v,\n        empty: d,\n        forEach: function(n) {\n            for (var t in this._) n.call(this, f(t))\n        }\n    }), ta.behavior = {}, ta.rebind = function(n, t) {\n        for (var e, r = 1, u = arguments.length; ++r < u;) n[e = arguments[r]] = M(n, t, t[e]);\n        return n\n    };\n    var da = [\"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\"];\n    ta.dispatch = function() {\n        for (var n = new _, t = -1, e = arguments.length; ++t < e;) n[arguments[t]] = w(n);\n        return n\n    }, _.prototype.on = function(n, t) {\n        var e = n.indexOf(\".\"),\n            r = \"\";\n        if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n) return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);\n        if (2 === arguments.length) {\n            if (null == t)\n                for (n in this) this.hasOwnProperty(n) && this[n].on(r, null);\n            return this\n        }\n    }, ta.event = null, ta.requote = function(n) {\n        return n.replace(ma, \"\\\\$&\")\n    };\n    var ma = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,\n        ya = {}.__proto__ ? function(n, t) {\n            n.__proto__ = t\n        } : function(n, t) {\n            for (var e in t) n[e] = t[e]\n        },\n        Ma = function(n, t) {\n            return t.querySelector(n)\n        },\n        xa = function(n, t) {\n            return t.querySelectorAll(n)\n        },\n        ba = function(n, t) {\n            var e = n.matches || n[x(n, \"matchesSelector\")];\n            return (ba = function(n, t) {\n                return e.call(n, t)\n            })(n, t)\n        };\n    \"function\" == typeof Sizzle && (Ma = function(n, t) {\n        return Sizzle(n, t)[0] || null\n    }, xa = Sizzle, ba = Sizzle.matchesSelector), ta.selection = function() {\n        return ta.select(ua.documentElement)\n    };\n    var _a = ta.selection.prototype = [];\n    _a.select = function(n) {\n        var t, e, r, u, i = [];\n        n = N(n);\n        for (var o = -1, a = this.length; ++o < a;) {\n            i.push(t = []), t.parentNode = (r = this[o]).parentNode;\n            for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && \"__data__\" in u && (e.__data__ = u.__data__)) : t.push(null)\n        }\n        return A(i)\n    }, _a.selectAll = function(n) {\n        var t, e, r = [];\n        n = C(n);\n        for (var u = -1, i = this.length; ++u < i;)\n            for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = ra(n.call(e, e.__data__, a, u))), t.parentNode = e);\n        return A(r)\n    };\n    var wa = {\n        svg: \"http://www.w3.org/2000/svg\",\n        xhtml: \"http://www.w3.org/1999/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    ta.ns = {\n        prefix: wa,\n        qualify: function(n) {\n            var t = n.indexOf(\":\"),\n                e = n;\n            return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), wa.hasOwnProperty(e) ? {\n                space: wa[e],\n                local: n\n            } : n\n        }\n    }, _a.attr = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node();\n                return n = ta.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)\n            }\n            for (t in n) this.each(z(t, n[t]));\n            return this\n        }\n        return this.each(z(n, t))\n    }, _a.classed = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) {\n                var e = this.node(),\n                    r = (n = T(n)).length,\n                    u = -1;\n                if (t = e.classList) {\n                    for (; ++u < r;)\n                        if (!t.contains(n[u])) return !1\n                } else\n                    for (t = e.getAttribute(\"class\"); ++u < r;)\n                        if (!L(n[u]).test(t)) return !1;\n                return !0\n            }\n            for (t in n) this.each(R(t, n[t]));\n            return this\n        }\n        return this.each(R(n, t))\n    }, _a.style = function(n, e, r) {\n        var u = arguments.length;\n        if (3 > u) {\n            if (\"string\" != typeof n) {\n                2 > u && (e = \"\");\n                for (r in n) this.each(P(r, n[r], e));\n                return this\n            }\n            if (2 > u) {\n                var i = this.node();\n                return t(i).getComputedStyle(i, null).getPropertyValue(n)\n            }\n            r = \"\"\n        }\n        return this.each(P(n, e, r))\n    }, _a.property = function(n, t) {\n        if (arguments.length < 2) {\n            if (\"string\" == typeof n) return this.node()[n];\n            for (t in n) this.each(U(t, n[t]));\n            return this\n        }\n        return this.each(U(n, t))\n    }, _a.text = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.textContent = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.textContent = \"\"\n        } : function() {\n            this.textContent = n\n        }) : this.node().textContent\n    }, _a.html = function(n) {\n        return arguments.length ? this.each(\"function\" == typeof n ? function() {\n            var t = n.apply(this, arguments);\n            this.innerHTML = null == t ? \"\" : t\n        } : null == n ? function() {\n            this.innerHTML = \"\"\n        } : function() {\n            this.innerHTML = n\n        }) : this.node().innerHTML\n    }, _a.append = function(n) {\n        return n = j(n), this.select(function() {\n            return this.appendChild(n.apply(this, arguments))\n        })\n    }, _a.insert = function(n, t) {\n        return n = j(n), t = N(t), this.select(function() {\n            return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)\n        })\n    }, _a.remove = function() {\n        return this.each(F)\n    }, _a.data = function(n, t) {\n        function e(n, e) {\n            var r, u, i, o = n.length,\n                f = e.length,\n                h = Math.min(o, f),\n                g = new Array(f),\n                p = new Array(f),\n                v = new Array(o);\n            if (t) {\n                var d, m = new l,\n                    y = new Array(o);\n                for (r = -1; ++r < o;) m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;\n                for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = H(i), m.set(d, !0);\n                for (r = -1; ++r < o;) m.get(y[r]) !== !0 && (v[r] = n[r])\n            } else {\n                for (r = -1; ++r < h;) u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = H(i);\n                for (; f > r; ++r) p[r] = H(e[r]);\n                for (; o > r; ++r) v[r] = n[r]\n            }\n            p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, a.push(p), c.push(g), s.push(v)\n        }\n        var r, u, i = -1,\n            o = this.length;\n        if (!arguments.length) {\n            for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);\n            return n\n        }\n        var a = Z([]),\n            c = A([]),\n            s = A([]);\n        if (\"function\" == typeof n)\n            for (; ++i < o;) e(r = this[i], n.call(r, r.parentNode.__data__, i));\n        else\n            for (; ++i < o;) e(r = this[i], n);\n        return c.enter = function() {\n            return a\n        }, c.exit = function() {\n            return s\n        }, c\n    }, _a.datum = function(n) {\n        return arguments.length ? this.property(\"__data__\", n) : this.property(\"__data__\")\n    }, _a.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []), t.parentNode = (e = this[i]).parentNode;\n            for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return A(u)\n    }, _a.order = function() {\n        for (var n = -1, t = this.length; ++n < t;)\n            for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);\n        return this\n    }, _a.sort = function(n) {\n        n = I.apply(this, arguments);\n        for (var t = -1, e = this.length; ++t < e;) this[t].sort(n);\n        return this.order()\n    }, _a.each = function(n) {\n        return Y(this, function(t, e, r) {\n            n.call(t, t.__data__, e, r)\n        })\n    }, _a.call = function(n) {\n        var t = ra(arguments);\n        return n.apply(t[0] = this, t), this\n    }, _a.empty = function() {\n        return !this.node()\n    }, _a.node = function() {\n        for (var n = 0, t = this.length; t > n; n++)\n            for (var e = this[n], r = 0, u = e.length; u > r; r++) {\n                var i = e[r];\n                if (i) return i\n            }\n        return null\n    }, _a.size = function() {\n        var n = 0;\n        return Y(this, function() {\n            ++n\n        }), n\n    };\n    var Sa = [];\n    ta.selection.enter = Z, ta.selection.enter.prototype = Sa, Sa.append = _a.append, Sa.empty = _a.empty, Sa.node = _a.node, Sa.call = _a.call, Sa.size = _a.size, Sa.select = function(n) {\n        for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {\n            r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;\n            for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)\n        }\n        return A(o)\n    }, Sa.insert = function(n, t) {\n        return arguments.length < 2 && (t = V(this)), _a.insert.call(this, n, t)\n    }, ta.select = function(t) {\n        var e;\n        return \"string\" == typeof t ? (e = [Ma(t, ua)], e.parentNode = ua.documentElement) : (e = [t], e.parentNode = n(t)), A([e])\n    }, ta.selectAll = function(n) {\n        var t;\n        return \"string\" == typeof n ? (t = ra(xa(n, ua)), t.parentNode = ua.documentElement) : (t = n, t.parentNode = null), A([t])\n    }, _a.on = function(n, t, e) {\n        var r = arguments.length;\n        if (3 > r) {\n            if (\"string\" != typeof n) {\n                2 > r && (t = !1);\n                for (e in n) this.each(X(e, n[e], t));\n                return this\n            }\n            if (2 > r) return (r = this.node()[\"__on\" + n]) && r._;\n            e = !1\n        }\n        return this.each(X(n, t, e))\n    };\n    var ka = ta.map({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\"\n    });\n    ua && ka.forEach(function(n) {\n        \"on\" + n in ua && ka.remove(n)\n    });\n    var Ea, Aa = 0;\n    ta.mouse = function(n) {\n        return J(n, k())\n    };\n    var Na = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n    ta.touch = function(n, t, e) {\n        if (arguments.length < 3 && (e = t, t = k().changedTouches), t)\n            for (var r, u = 0, i = t.length; i > u; ++u)\n                if ((r = t[u]).identifier === e) return J(n, r)\n    }, ta.behavior.drag = function() {\n        function n() {\n            this.on(\"mousedown.drag\", i).on(\"touchstart.drag\", o)\n        }\n\n        function e(n, t, e, i, o) {\n            return function() {\n                function a() {\n                    var n, e, r = t(h, v);\n                    r && (n = r[0] - M[0], e = r[1] - M[1], p |= n | e, M = r, g({\n                        type: \"drag\",\n                        x: r[0] + l[0],\n                        y: r[1] + l[1],\n                        dx: n,\n                        dy: e\n                    }))\n                }\n\n                function c() {\n                    t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && ta.event.target === f), g({\n                        type: \"dragend\"\n                    }))\n                }\n                var l, s = this,\n                    f = ta.event.target,\n                    h = s.parentNode,\n                    g = r.of(s, arguments),\n                    p = 0,\n                    v = n(),\n                    d = \".drag\" + (null == v ? \"\" : \"-\" + v),\n                    m = ta.select(e(f)).on(i + d, a).on(o + d, c),\n                    y = W(f),\n                    M = t(h, v);\n                u ? (l = u.apply(s, arguments), l = [l.x - M[0], l.y - M[1]]) : l = [0, 0], g({\n                    type: \"dragstart\"\n                })\n            }\n        }\n        var r = E(n, \"drag\", \"dragstart\", \"dragend\"),\n            u = null,\n            i = e(b, ta.mouse, t, \"mousemove\", \"mouseup\"),\n            o = e(G, ta.touch, y, \"touchmove\", \"touchend\");\n        return n.origin = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, ta.rebind(n, r, \"on\")\n    }, ta.touches = function(n, t) {\n        return arguments.length < 2 && (t = k().touches), t ? ra(t).map(function(t) {\n            var e = J(n, t);\n            return e.identifier = t.identifier, e\n        }) : []\n    };\n    var Ca = 1e-6,\n        za = Ca * Ca,\n        qa = Math.PI,\n        La = 2 * qa,\n        Ta = La - Ca,\n        Ra = qa / 2,\n        Da = qa / 180,\n        Pa = 180 / qa,\n        Ua = Math.SQRT2,\n        ja = 2,\n        Fa = 4;\n    ta.interpolateZoom = function(n, t) {\n        function e(n) {\n            var t = n * y;\n            if (m) {\n                var e = rt(v),\n                    o = i / (ja * h) * (e * ut(Ua * t + v) - et(v));\n                return [r + o * l, u + o * s, i * e / rt(Ua * t + v)]\n            }\n            return [r + n * l, u + n * s, i * Math.exp(Ua * t)]\n        }\n        var r = n[0],\n            u = n[1],\n            i = n[2],\n            o = t[0],\n            a = t[1],\n            c = t[2],\n            l = o - r,\n            s = a - u,\n            f = l * l + s * s,\n            h = Math.sqrt(f),\n            g = (c * c - i * i + Fa * f) / (2 * i * ja * h),\n            p = (c * c - i * i - Fa * f) / (2 * c * ja * h),\n            v = Math.log(Math.sqrt(g * g + 1) - g),\n            d = Math.log(Math.sqrt(p * p + 1) - p),\n            m = d - v,\n            y = (m || Math.log(c / i)) / Ua;\n        return e.duration = 1e3 * y, e\n    }, ta.behavior.zoom = function() {\n        function n(n) {\n            n.on(q, f).on(Oa + \".zoom\", g).on(\"dblclick.zoom\", p).on(R, h)\n        }\n\n        function e(n) {\n            return [(n[0] - k.x) / k.k, (n[1] - k.y) / k.k]\n        }\n\n        function r(n) {\n            return [n[0] * k.k + k.x, n[1] * k.k + k.y]\n        }\n\n        function u(n) {\n            k.k = Math.max(N[0], Math.min(N[1], n))\n        }\n\n        function i(n, t) {\n            t = r(t), k.x += n[0] - t[0], k.y += n[1] - t[1]\n        }\n\n        function o(t, e, r, o) {\n            t.__chart__ = {\n                x: k.x,\n                y: k.y,\n                k: k.k\n            }, u(Math.pow(2, o)), i(d = e, r), t = ta.select(t), C > 0 && (t = t.transition().duration(C)), t.call(n.event)\n        }\n\n        function a() {\n            b && b.domain(x.range().map(function(n) {\n                return (n - k.x) / k.k\n            }).map(x.invert)), w && w.domain(_.range().map(function(n) {\n                return (n - k.y) / k.k\n            }).map(_.invert))\n        }\n\n        function c(n) {\n            z++ || n({\n                type: \"zoomstart\"\n            })\n        }\n\n        function l(n) {\n            a(), n({\n                type: \"zoom\",\n                scale: k.k,\n                translate: [k.x, k.y]\n            })\n        }\n\n        function s(n) {\n            --z || n({\n                type: \"zoomend\"\n            }), d = null\n        }\n\n        function f() {\n            function n() {\n                f = 1, i(ta.mouse(u), g), l(a)\n            }\n\n            function r() {\n                h.on(L, null).on(T, null), p(f && ta.event.target === o), s(a)\n            }\n            var u = this,\n                o = ta.event.target,\n                a = D.of(u, arguments),\n                f = 0,\n                h = ta.select(t(u)).on(L, n).on(T, r),\n                g = e(ta.mouse(u)),\n                p = W(u);\n            Dl.call(u), c(a)\n        }\n\n        function h() {\n            function n() {\n                var n = ta.touches(p);\n                return g = k.k, n.forEach(function(n) {\n                    n.identifier in d && (d[n.identifier] = e(n))\n                }), n\n            }\n\n            function t() {\n                var t = ta.event.target;\n                ta.select(t).on(x, r).on(b, a), _.push(t);\n                for (var e = ta.event.changedTouches, u = 0, i = e.length; i > u; ++u) d[e[u].identifier] = null;\n                var c = n(),\n                    l = Date.now();\n                if (1 === c.length) {\n                    if (500 > l - M) {\n                        var s = c[0];\n                        o(p, s, d[s.identifier], Math.floor(Math.log(k.k) / Math.LN2) + 1), S()\n                    }\n                    M = l\n                } else if (c.length > 1) {\n                    var s = c[0],\n                        f = c[1],\n                        h = s[0] - f[0],\n                        g = s[1] - f[1];\n                    m = h * h + g * g\n                }\n            }\n\n            function r() {\n                var n, t, e, r, o = ta.touches(p);\n                Dl.call(p);\n                for (var a = 0, c = o.length; c > a; ++a, r = null)\n                    if (e = o[a], r = d[e.identifier]) {\n                        if (t) break;\n                        n = e, t = r\n                    } if (r) {\n                    var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s,\n                        f = m && Math.sqrt(s / m);\n                    n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], u(f * g)\n                }\n                M = null, i(n, t), l(v)\n            }\n\n            function a() {\n                if (ta.event.touches.length) {\n                    for (var t = ta.event.changedTouches, e = 0, r = t.length; r > e; ++e) delete d[t[e].identifier];\n                    for (var u in d) return void n()\n                }\n                ta.selectAll(_).on(y, null), w.on(q, f).on(R, h), E(), s(v)\n            }\n            var g, p = this,\n                v = D.of(p, arguments),\n                d = {},\n                m = 0,\n                y = \".zoom-\" + ta.event.changedTouches[0].identifier,\n                x = \"touchmove\" + y,\n                b = \"touchend\" + y,\n                _ = [],\n                w = ta.select(p),\n                E = W(p);\n            t(), c(v), w.on(q, null).on(R, t)\n        }\n\n        function g() {\n            var n = D.of(this, arguments);\n            y ? clearTimeout(y) : (v = e(d = m || ta.mouse(this)), Dl.call(this), c(n)), y = setTimeout(function() {\n                y = null, s(n)\n            }, 50), S(), u(Math.pow(2, .002 * Ha()) * k.k), i(d, v), l(n)\n        }\n\n        function p() {\n            var n = ta.mouse(this),\n                t = Math.log(k.k) / Math.LN2;\n            o(this, n, e(n), ta.event.shiftKey ? Math.ceil(t) - 1 : Math.floor(t) + 1)\n        }\n        var v, d, m, y, M, x, b, _, w, k = {\n                x: 0,\n                y: 0,\n                k: 1\n            },\n            A = [960, 500],\n            N = Ia,\n            C = 250,\n            z = 0,\n            q = \"mousedown.zoom\",\n            L = \"mousemove.zoom\",\n            T = \"mouseup.zoom\",\n            R = \"touchstart.zoom\",\n            D = E(n, \"zoomstart\", \"zoom\", \"zoomend\");\n        return Oa || (Oa = \"onwheel\" in ua ? (Ha = function() {\n            return -ta.event.deltaY * (ta.event.deltaMode ? 120 : 1)\n        }, \"wheel\") : \"onmousewheel\" in ua ? (Ha = function() {\n            return ta.event.wheelDelta\n        }, \"mousewheel\") : (Ha = function() {\n            return -ta.event.detail\n        }, \"MozMousePixelScroll\")), n.event = function(n) {\n            n.each(function() {\n                var n = D.of(this, arguments),\n                    t = k;\n                Tl ? ta.select(this).transition().each(\"start.zoom\", function() {\n                    k = this.__chart__ || {\n                        x: 0,\n                        y: 0,\n                        k: 1\n                    }, c(n)\n                }).tween(\"zoom:zoom\", function() {\n                    var e = A[0],\n                        r = A[1],\n                        u = d ? d[0] : e / 2,\n                        i = d ? d[1] : r / 2,\n                        o = ta.interpolateZoom([(u - k.x) / k.k, (i - k.y) / k.k, e / k.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);\n                    return function(t) {\n                        var r = o(t),\n                            a = e / r[2];\n                        this.__chart__ = k = {\n                            x: u - r[0] * a,\n                            y: i - r[1] * a,\n                            k: a\n                        }, l(n)\n                    }\n                }).each(\"interrupt.zoom\", function() {\n                    s(n)\n                }).each(\"end.zoom\", function() {\n                    s(n)\n                }) : (this.__chart__ = k, c(n), l(n), s(n))\n            })\n        }, n.translate = function(t) {\n            return arguments.length ? (k = {\n                x: +t[0],\n                y: +t[1],\n                k: k.k\n            }, a(), n) : [k.x, k.y]\n        }, n.scale = function(t) {\n            return arguments.length ? (k = {\n                x: k.x,\n                y: k.y,\n                k: +t\n            }, a(), n) : k.k\n        }, n.scaleExtent = function(t) {\n            return arguments.length ? (N = null == t ? Ia : [+t[0], +t[1]], n) : N\n        }, n.center = function(t) {\n            return arguments.length ? (m = t && [+t[0], +t[1]], n) : m\n        }, n.size = function(t) {\n            return arguments.length ? (A = t && [+t[0], +t[1]], n) : A\n        }, n.duration = function(t) {\n            return arguments.length ? (C = +t, n) : C\n        }, n.x = function(t) {\n            return arguments.length ? (b = t, x = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : b\n        }, n.y = function(t) {\n            return arguments.length ? (w = t, _ = t.copy(), k = {\n                x: 0,\n                y: 0,\n                k: 1\n            }, n) : w\n        }, ta.rebind(n, D, \"on\")\n    };\n    var Ha, Oa, Ia = [0, 1 / 0];\n    ta.color = ot, ot.prototype.toString = function() {\n        return this.rgb() + \"\"\n    }, ta.hsl = at;\n    var Ya = at.prototype = new ot;\n    Ya.brighter = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, this.l / n)\n    }, Ya.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new at(this.h, this.s, n * this.l)\n    }, Ya.rgb = function() {\n        return ct(this.h, this.s, this.l)\n    }, ta.hcl = lt;\n    var Za = lt.prototype = new ot;\n    Za.brighter = function(n) {\n        return new lt(this.h, this.c, Math.min(100, this.l + Va * (arguments.length ? n : 1)))\n    }, Za.darker = function(n) {\n        return new lt(this.h, this.c, Math.max(0, this.l - Va * (arguments.length ? n : 1)))\n    }, Za.rgb = function() {\n        return st(this.h, this.c, this.l).rgb()\n    }, ta.lab = ft;\n    var Va = 18,\n        Xa = .95047,\n        $a = 1,\n        Ba = 1.08883,\n        Wa = ft.prototype = new ot;\n    Wa.brighter = function(n) {\n        return new ft(Math.min(100, this.l + Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.darker = function(n) {\n        return new ft(Math.max(0, this.l - Va * (arguments.length ? n : 1)), this.a, this.b)\n    }, Wa.rgb = function() {\n        return ht(this.l, this.a, this.b)\n    }, ta.rgb = mt;\n    var Ja = mt.prototype = new ot;\n    Ja.brighter = function(n) {\n        n = Math.pow(.7, arguments.length ? n : 1);\n        var t = this.r,\n            e = this.g,\n            r = this.b,\n            u = 30;\n        return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new mt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new mt(u, u, u)\n    }, Ja.darker = function(n) {\n        return n = Math.pow(.7, arguments.length ? n : 1), new mt(n * this.r, n * this.g, n * this.b)\n    }, Ja.hsl = function() {\n        return _t(this.r, this.g, this.b)\n    }, Ja.toString = function() {\n        return \"#\" + xt(this.r) + xt(this.g) + xt(this.b)\n    };\n    var Ga = ta.map({\n        aliceblue: 15792383,\n        antiquewhite: 16444375,\n        aqua: 65535,\n        aquamarine: 8388564,\n        azure: 15794175,\n        beige: 16119260,\n        bisque: 16770244,\n        black: 0,\n        blanchedalmond: 16772045,\n        blue: 255,\n        blueviolet: 9055202,\n        brown: 10824234,\n        burlywood: 14596231,\n        cadetblue: 6266528,\n        chartreuse: 8388352,\n        chocolate: 13789470,\n        coral: 16744272,\n        cornflowerblue: 6591981,\n        cornsilk: 16775388,\n        crimson: 14423100,\n        cyan: 65535,\n        darkblue: 139,\n        darkcyan: 35723,\n        darkgoldenrod: 12092939,\n        darkgray: 11119017,\n        darkgreen: 25600,\n        darkgrey: 11119017,\n        darkkhaki: 12433259,\n        darkmagenta: 9109643,\n        darkolivegreen: 5597999,\n        darkorange: 16747520,\n        darkorchid: 10040012,\n        darkred: 9109504,\n        darksalmon: 15308410,\n        darkseagreen: 9419919,\n        darkslateblue: 4734347,\n        darkslategray: 3100495,\n        darkslategrey: 3100495,\n        darkturquoise: 52945,\n        darkviolet: 9699539,\n        deeppink: 16716947,\n        deepskyblue: 49151,\n        dimgray: 6908265,\n        dimgrey: 6908265,\n        dodgerblue: 2003199,\n        firebrick: 11674146,\n        floralwhite: 16775920,\n        forestgreen: 2263842,\n        fuchsia: 16711935,\n        gainsboro: 14474460,\n        ghostwhite: 16316671,\n        gold: 16766720,\n        goldenrod: 14329120,\n        gray: 8421504,\n        green: 32768,\n        greenyellow: 11403055,\n        grey: 8421504,\n        honeydew: 15794160,\n        hotpink: 16738740,\n        indianred: 13458524,\n        indigo: 4915330,\n        ivory: 16777200,\n        khaki: 15787660,\n        lavender: 15132410,\n        lavenderblush: 16773365,\n        lawngreen: 8190976,\n        lemonchiffon: 16775885,\n        lightblue: 11393254,\n        lightcoral: 15761536,\n        lightcyan: 14745599,\n        lightgoldenrodyellow: 16448210,\n        lightgray: 13882323,\n        lightgreen: 9498256,\n        lightgrey: 13882323,\n        lightpink: 16758465,\n        lightsalmon: 16752762,\n        lightseagreen: 2142890,\n        lightskyblue: 8900346,\n        lightslategray: 7833753,\n        lightslategrey: 7833753,\n        lightsteelblue: 11584734,\n        lightyellow: 16777184,\n        lime: 65280,\n        limegreen: 3329330,\n        linen: 16445670,\n        magenta: 16711935,\n        maroon: 8388608,\n        mediumaquamarine: 6737322,\n        mediumblue: 205,\n        mediumorchid: 12211667,\n        mediumpurple: 9662683,\n        mediumseagreen: 3978097,\n        mediumslateblue: 8087790,\n        mediumspringgreen: 64154,\n        mediumturquoise: 4772300,\n        mediumvioletred: 13047173,\n        midnightblue: 1644912,\n        mintcream: 16121850,\n        mistyrose: 16770273,\n        moccasin: 16770229,\n        navajowhite: 16768685,\n        navy: 128,\n        oldlace: 16643558,\n        olive: 8421376,\n        olivedrab: 7048739,\n        orange: 16753920,\n        orangered: 16729344,\n        orchid: 14315734,\n        palegoldenrod: 15657130,\n        palegreen: 10025880,\n        paleturquoise: 11529966,\n        palevioletred: 14381203,\n        papayawhip: 16773077,\n        peachpuff: 16767673,\n        peru: 13468991,\n        pink: 16761035,\n        plum: 14524637,\n        powderblue: 11591910,\n        purple: 8388736,\n        rebeccapurple: 6697881,\n        red: 16711680,\n        rosybrown: 12357519,\n        royalblue: 4286945,\n        saddlebrown: 9127187,\n        salmon: 16416882,\n        sandybrown: 16032864,\n        seagreen: 3050327,\n        seashell: 16774638,\n        sienna: 10506797,\n        silver: 12632256,\n        skyblue: 8900331,\n        slateblue: 6970061,\n        slategray: 7372944,\n        slategrey: 7372944,\n        snow: 16775930,\n        springgreen: 65407,\n        steelblue: 4620980,\n        tan: 13808780,\n        teal: 32896,\n        thistle: 14204888,\n        tomato: 16737095,\n        turquoise: 4251856,\n        violet: 15631086,\n        wheat: 16113331,\n        white: 16777215,\n        whitesmoke: 16119285,\n        yellow: 16776960,\n        yellowgreen: 10145074\n    });\n    Ga.forEach(function(n, t) {\n        Ga.set(n, yt(t))\n    }), ta.functor = Et, ta.xhr = At(y), ta.dsv = function(n, t) {\n        function e(n, e, i) {\n            arguments.length < 3 && (i = e, e = null);\n            var o = Nt(n, t, null == e ? r : u(e), i);\n            return o.row = function(n) {\n                return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e\n            }, o\n        }\n\n        function r(n) {\n            return e.parse(n.responseText)\n        }\n\n        function u(n) {\n            return function(t) {\n                return e.parse(t.responseText, n)\n            }\n        }\n\n        function i(t) {\n            return t.map(o).join(n)\n        }\n\n        function o(n) {\n            return a.test(n) ? '\"' + n.replace(/\\\"/g, '\"\"') + '\"' : n\n        }\n        var a = new RegExp('[\"' + n + \"\\n]\"),\n            c = n.charCodeAt(0);\n        return e.parse = function(n, t) {\n            var r;\n            return e.parseRows(n, function(n, e) {\n                if (r) return r(n, e - 1);\n                var u = new Function(\"d\", \"return {\" + n.map(function(n, t) {\n                    return JSON.stringify(n) + \": d[\" + t + \"]\"\n                }).join(\",\") + \"}\");\n                r = t ? function(n, e) {\n                    return t(u(n), e)\n                } : u\n            })\n        }, e.parseRows = function(n, t) {\n            function e() {\n                if (s >= l) return o;\n                if (u) return u = !1, i;\n                var t = s;\n                if (34 === n.charCodeAt(t)) {\n                    for (var e = t; e++ < l;)\n                        if (34 === n.charCodeAt(e)) {\n                            if (34 !== n.charCodeAt(e + 1)) break;\n                            ++e\n                        } s = e + 2;\n                    var r = n.charCodeAt(e + 1);\n                    return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/\"\"/g, '\"')\n                }\n                for (; l > s;) {\n                    var r = n.charCodeAt(s++),\n                        a = 1;\n                    if (10 === r) u = !0;\n                    else if (13 === r) u = !0, 10 === n.charCodeAt(s) && (++s, ++a);\n                    else if (r !== c) continue;\n                    return n.slice(t, s - a)\n                }\n                return n.slice(t)\n            }\n            for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0;\n                (r = e()) !== o;) {\n                for (var h = []; r !== i && r !== o;) h.push(r), r = e();\n                t && null == (h = t(h, f++)) || a.push(h)\n            }\n            return a\n        }, e.format = function(t) {\n            if (Array.isArray(t[0])) return e.formatRows(t);\n            var r = new m,\n                u = [];\n            return t.forEach(function(n) {\n                for (var t in n) r.has(t) || u.push(r.add(t))\n            }), [u.map(o).join(n)].concat(t.map(function(t) {\n                return u.map(function(n) {\n                    return o(t[n])\n                }).join(n)\n            })).join(\"\\n\")\n        }, e.formatRows = function(n) {\n            return n.map(i).join(\"\\n\")\n        }, e\n    }, ta.csv = ta.dsv(\",\", \"text/csv\"), ta.tsv = ta.dsv(\"\t\", \"text/tab-separated-values\");\n    var Ka, Qa, nc, tc, ec, rc = this[x(this, \"requestAnimationFrame\")] || function(n) {\n        setTimeout(n, 17)\n    };\n    ta.timer = function(n, t, e) {\n        var r = arguments.length;\n        2 > r && (t = 0), 3 > r && (e = Date.now());\n        var u = e + t,\n            i = {\n                c: n,\n                t: u,\n                f: !1,\n                n: null\n            };\n        Qa ? Qa.n = i : Ka = i, Qa = i, nc || (tc = clearTimeout(tc), nc = 1, rc(qt))\n    }, ta.timer.flush = function() {\n        Lt(), Tt()\n    }, ta.round = function(n, t) {\n        return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)\n    };\n    var uc = [\"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"\\xb5\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\"].map(Dt);\n    ta.formatPrefix = function(n, t) {\n        var e = 0;\n        return n && (0 > n && (n *= -1), t && (n = ta.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), uc[8 + e / 3]\n    };\n    var ic = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,\n        oc = ta.map({\n            b: function(n) {\n                return n.toString(2)\n            },\n            c: function(n) {\n                return String.fromCharCode(n)\n            },\n            o: function(n) {\n                return n.toString(8)\n            },\n            x: function(n) {\n                return n.toString(16)\n            },\n            X: function(n) {\n                return n.toString(16).toUpperCase()\n            },\n            g: function(n, t) {\n                return n.toPrecision(t)\n            },\n            e: function(n, t) {\n                return n.toExponential(t)\n            },\n            f: function(n, t) {\n                return n.toFixed(t)\n            },\n            r: function(n, t) {\n                return (n = ta.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))\n            }\n        }),\n        ac = ta.time = {},\n        cc = Date;\n    jt.prototype = {\n        getDate: function() {\n            return this._.getUTCDate()\n        },\n        getDay: function() {\n            return this._.getUTCDay()\n        },\n        getFullYear: function() {\n            return this._.getUTCFullYear()\n        },\n        getHours: function() {\n            return this._.getUTCHours()\n        },\n        getMilliseconds: function() {\n            return this._.getUTCMilliseconds()\n        },\n        getMinutes: function() {\n            return this._.getUTCMinutes()\n        },\n        getMonth: function() {\n            return this._.getUTCMonth()\n        },\n        getSeconds: function() {\n            return this._.getUTCSeconds()\n        },\n        getTime: function() {\n            return this._.getTime()\n        },\n        getTimezoneOffset: function() {\n            return 0\n        },\n        valueOf: function() {\n            return this._.valueOf()\n        },\n        setDate: function() {\n            lc.setUTCDate.apply(this._, arguments)\n        },\n        setDay: function() {\n            lc.setUTCDay.apply(this._, arguments)\n        },\n        setFullYear: function() {\n            lc.setUTCFullYear.apply(this._, arguments)\n        },\n        setHours: function() {\n            lc.setUTCHours.apply(this._, arguments)\n        },\n        setMilliseconds: function() {\n            lc.setUTCMilliseconds.apply(this._, arguments)\n        },\n        setMinutes: function() {\n            lc.setUTCMinutes.apply(this._, arguments)\n        },\n        setMonth: function() {\n            lc.setUTCMonth.apply(this._, arguments)\n        },\n        setSeconds: function() {\n            lc.setUTCSeconds.apply(this._, arguments)\n        },\n        setTime: function() {\n            lc.setTime.apply(this._, arguments)\n        }\n    };\n    var lc = Date.prototype;\n    ac.year = Ft(function(n) {\n        return n = ac.day(n), n.setMonth(0, 1), n\n    }, function(n, t) {\n        n.setFullYear(n.getFullYear() + t)\n    }, function(n) {\n        return n.getFullYear()\n    }), ac.years = ac.year.range, ac.years.utc = ac.year.utc.range, ac.day = Ft(function(n) {\n        var t = new cc(2e3, 0);\n        return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t\n    }, function(n, t) {\n        n.setDate(n.getDate() + t)\n    }, function(n) {\n        return n.getDate() - 1\n    }), ac.days = ac.day.range, ac.days.utc = ac.day.utc.range, ac.dayOfYear = function(n) {\n        var t = ac.year(n);\n        return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)\n    }, [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"].forEach(function(n, t) {\n        t = 7 - t;\n        var e = ac[n] = Ft(function(n) {\n            return (n = ac.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n\n        }, function(n, t) {\n            n.setDate(n.getDate() + 7 * Math.floor(t))\n        }, function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)\n        });\n        ac[n + \"s\"] = e.range, ac[n + \"s\"].utc = e.utc.range, ac[n + \"OfYear\"] = function(n) {\n            var e = ac.year(n).getDay();\n            return Math.floor((ac.dayOfYear(n) + (e + t) % 7) / 7)\n        }\n    }), ac.week = ac.sunday, ac.weeks = ac.sunday.range, ac.weeks.utc = ac.sunday.utc.range, ac.weekOfYear = ac.sundayOfYear;\n    var sc = {\n            \"-\": \"\",\n            _: \" \",\n            0: \"0\"\n        },\n        fc = /^\\s*\\d+/,\n        hc = /^%/;\n    ta.locale = function(n) {\n        return {\n            numberFormat: Pt(n),\n            timeFormat: Ot(n)\n        }\n    };\n    var gc = ta.locale({\n        decimal: \".\",\n        thousands: \",\",\n        grouping: [3],\n        currency: [\"$\", \"\"],\n        dateTime: \"%a %b %e %X %Y\",\n        date: \"%m/%d/%Y\",\n        time: \"%H:%M:%S\",\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    ta.format = gc.numberFormat, ta.geo = {}, ce.prototype = {\n        s: 0,\n        t: 0,\n        add: function(n) {\n            le(n, this.t, pc), le(pc.s, this.s, this), this.s ? this.t += pc.t : this.s = pc.t\n        },\n        reset: function() {\n            this.s = this.t = 0\n        },\n        valueOf: function() {\n            return this.s\n        }\n    };\n    var pc = new ce;\n    ta.geo.stream = function(n, t) {\n        n && vc.hasOwnProperty(n.type) ? vc[n.type](n, t) : se(n, t)\n    };\n    var vc = {\n            Feature: function(n, t) {\n                se(n.geometry, t)\n            },\n            FeatureCollection: function(n, t) {\n                for (var e = n.features, r = -1, u = e.length; ++r < u;) se(e[r].geometry, t)\n            }\n        },\n        dc = {\n            Sphere: function(n, t) {\n                t.sphere()\n            },\n            Point: function(n, t) {\n                n = n.coordinates, t.point(n[0], n[1], n[2])\n            },\n            MultiPoint: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) n = e[r], t.point(n[0], n[1], n[2])\n            },\n            LineString: function(n, t) {\n                fe(n.coordinates, t, 0)\n            },\n            MultiLineString: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) fe(e[r], t, 0)\n            },\n            Polygon: function(n, t) {\n                he(n.coordinates, t)\n            },\n            MultiPolygon: function(n, t) {\n                for (var e = n.coordinates, r = -1, u = e.length; ++r < u;) he(e[r], t)\n            },\n            GeometryCollection: function(n, t) {\n                for (var e = n.geometries, r = -1, u = e.length; ++r < u;) se(e[r], t)\n            }\n        };\n    ta.geo.area = function(n) {\n        return mc = 0, ta.geo.stream(n, Mc), mc\n    };\n    var mc, yc = new ce,\n        Mc = {\n            sphere: function() {\n                mc += 4 * qa\n            },\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                yc.reset(), Mc.lineStart = ge\n            },\n            polygonEnd: function() {\n                var n = 2 * yc;\n                mc += 0 > n ? 4 * qa + n : n, Mc.lineStart = Mc.lineEnd = Mc.point = b\n            }\n        };\n    ta.geo.bounds = function() {\n        function n(n, t) {\n            M.push(x = [s = n, h = n]), f > t && (f = t), t > g && (g = t)\n        }\n\n        function t(t, e) {\n            var r = pe([t * Da, e * Da]);\n            if (m) {\n                var u = de(m, r),\n                    i = [u[1], -u[0], 0],\n                    o = de(i, u);\n                Me(o), o = xe(o);\n                var c = t - p,\n                    l = c > 0 ? 1 : -1,\n                    v = o[0] * Pa * l,\n                    d = ga(c) > 180;\n                if (d ^ (v > l * p && l * t > v)) {\n                    var y = o[1] * Pa;\n                    y > g && (g = y)\n                } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {\n                    var y = -o[1] * Pa;\n                    f > y && (f = y)\n                } else f > e && (f = e), e > g && (g = e);\n                d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)\n            } else n(t, e);\n            m = r, p = t\n        }\n\n        function e() {\n            b.point = t\n        }\n\n        function r() {\n            x[0] = s, x[1] = h, b.point = n, m = null\n        }\n\n        function u(n, e) {\n            if (m) {\n                var r = n - p;\n                y += ga(r) > 180 ? r + (r > 0 ? 360 : -360) : r\n            } else v = n, d = e;\n            Mc.point(n, e), t(n, e)\n        }\n\n        function i() {\n            Mc.lineStart()\n        }\n\n        function o() {\n            u(v, d), Mc.lineEnd(), ga(y) > Ca && (s = -(h = 180)), x[0] = s, x[1] = h, m = null\n        }\n\n        function a(n, t) {\n            return (t -= n) < 0 ? t + 360 : t\n        }\n\n        function c(n, t) {\n            return n[0] - t[0]\n        }\n\n        function l(n, t) {\n            return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n\n        }\n        var s, f, h, g, p, v, d, m, y, M, x, b = {\n            point: n,\n            lineStart: e,\n            lineEnd: r,\n            polygonStart: function() {\n                b.point = u, b.lineStart = i, b.lineEnd = o, y = 0, Mc.polygonStart()\n            },\n            polygonEnd: function() {\n                Mc.polygonEnd(), b.point = n, b.lineStart = e, b.lineEnd = r, 0 > yc ? (s = -(h = 180), f = -(g = 90)) : y > Ca ? g = 90 : -Ca > y && (f = -90), x[0] = s, x[1] = h\n            }\n        };\n        return function(n) {\n            g = h = -(s = f = 1 / 0), M = [], ta.geo.stream(n, b);\n            var t = M.length;\n            if (t) {\n                M.sort(c);\n                for (var e, r = 1, u = M[0], i = [u]; t > r; ++r) e = M[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);\n                for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r) e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])\n            }\n            return M = x = null, 1 / 0 === s || 1 / 0 === f ? [\n                [0 / 0, 0 / 0],\n                [0 / 0, 0 / 0]\n            ] : [\n                [s, f],\n                [h, g]\n            ]\n        }\n    }(), ta.geo.centroid = function(n) {\n        xc = bc = _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, qc);\n        var t = Nc,\n            e = Cc,\n            r = zc,\n            u = t * t + e * e + r * r;\n        return za > u && (t = kc, e = Ec, r = Ac, Ca > bc && (t = _c, e = wc, r = Sc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Pa, tt(r / Math.sqrt(u)) * Pa]\n    };\n    var xc, bc, _c, wc, Sc, kc, Ec, Ac, Nc, Cc, zc, qc = {\n            sphere: b,\n            point: _e,\n            lineStart: Se,\n            lineEnd: ke,\n            polygonStart: function() {\n                qc.lineStart = Ee\n            },\n            polygonEnd: function() {\n                qc.lineStart = Se\n            }\n        },\n        Lc = Le(Ne, Pe, je, [-qa, -qa / 2]),\n        Tc = 1e9;\n    ta.geo.clipExtent = function() {\n        var n, t, e, r, u, i, o = {\n            stream: function(n) {\n                return u && (u.valid = !1), u = i(n), u.valid = !0, u\n            },\n            extent: function(a) {\n                return arguments.length ? (i = Ie(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [\n                    [n, t],\n                    [e, r]\n                ]\n            }\n        };\n        return o.extent([\n            [0, 0],\n            [960, 500]\n        ])\n    }, (ta.geo.conicEqualArea = function() {\n        return Ye(Ze)\n    }).raw = Ze, ta.geo.albers = function() {\n        return ta.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)\n    }, ta.geo.albersUsa = function() {\n        function n(n) {\n            var i = n[0],\n                o = n[1];\n            return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t\n        }\n        var t, e, r, u, i = ta.geo.albers(),\n            o = ta.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]),\n            a = ta.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]),\n            c = {\n                point: function(n, e) {\n                    t = [n, e]\n                }\n            };\n        return n.invert = function(n) {\n            var t = i.scale(),\n                e = i.translate(),\n                r = (n[0] - e[0]) / t,\n                u = (n[1] - e[1]) / t;\n            return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)\n        }, n.stream = function(n) {\n            var t = i.stream(n),\n                e = o.stream(n),\n                r = a.stream(n);\n            return {\n                point: function(n, u) {\n                    t.point(n, u), e.point(n, u), r.point(n, u)\n                },\n                sphere: function() {\n                    t.sphere(), e.sphere(), r.sphere()\n                },\n                lineStart: function() {\n                    t.lineStart(), e.lineStart(), r.lineStart()\n                },\n                lineEnd: function() {\n                    t.lineEnd(), e.lineEnd(), r.lineEnd()\n                },\n                polygonStart: function() {\n                    t.polygonStart(), e.polygonStart(), r.polygonStart()\n                },\n                polygonEnd: function() {\n                    t.polygonEnd(), e.polygonEnd(), r.polygonEnd()\n                }\n            }\n        }, n.precision = function(t) {\n            return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()\n        }, n.scale = function(t) {\n            return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()\n        }, n.translate = function(t) {\n            if (!arguments.length) return i.translate();\n            var l = i.scale(),\n                s = +t[0],\n                f = +t[1];\n            return e = i.translate(t).clipExtent([\n                [s - .455 * l, f - .238 * l],\n                [s + .455 * l, f + .238 * l]\n            ]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([\n                [s - .425 * l + Ca, f + .12 * l + Ca],\n                [s - .214 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([\n                [s - .214 * l + Ca, f + .166 * l + Ca],\n                [s - .115 * l - Ca, f + .234 * l - Ca]\n            ]).stream(c).point, n\n        }, n.scale(1070)\n    };\n    var Rc, Dc, Pc, Uc, jc, Fc, Hc = {\n            point: b,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: function() {\n                Dc = 0, Hc.lineStart = Ve\n            },\n            polygonEnd: function() {\n                Hc.lineStart = Hc.lineEnd = Hc.point = b, Rc += ga(Dc / 2)\n            }\n        },\n        Oc = {\n            point: Xe,\n            lineStart: b,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Ic = {\n            point: We,\n            lineStart: Je,\n            lineEnd: Ge,\n            polygonStart: function() {\n                Ic.lineStart = Ke\n            },\n            polygonEnd: function() {\n                Ic.point = We, Ic.lineStart = Je, Ic.lineEnd = Ge\n            }\n        };\n    ta.geo.path = function() {\n        function n(n) {\n            return n && (\"function\" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), ta.geo.stream(n, o)), i.result()\n        }\n\n        function t() {\n            return o = null, n\n        }\n        var e, r, u, i, o, a = 4.5;\n        return n.area = function(n) {\n            return Rc = 0, ta.geo.stream(n, u(Hc)), Rc\n        }, n.centroid = function(n) {\n            return _c = wc = Sc = kc = Ec = Ac = Nc = Cc = zc = 0, ta.geo.stream(n, u(Ic)), zc ? [Nc / zc, Cc / zc] : Ac ? [kc / Ac, Ec / Ac] : Sc ? [_c / Sc, wc / Sc] : [0 / 0, 0 / 0]\n        }, n.bounds = function(n) {\n            return jc = Fc = -(Pc = Uc = 1 / 0), ta.geo.stream(n, u(Oc)), [\n                [Pc, Uc],\n                [jc, Fc]\n            ]\n        }, n.projection = function(n) {\n            return arguments.length ? (u = (e = n) ? n.stream || tr(n) : y, t()) : e\n        }, n.context = function(n) {\n            return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), \"function\" != typeof a && i.pointRadius(a), t()) : r\n        }, n.pointRadius = function(t) {\n            return arguments.length ? (a = \"function\" == typeof t ? t : (i.pointRadius(+t), +t), n) : a\n        }, n.projection(ta.geo.albersUsa()).context(null)\n    }, ta.geo.transform = function(n) {\n        return {\n            stream: function(t) {\n                var e = new er(t);\n                for (var r in n) e[r] = n[r];\n                return e\n            }\n        }\n    }, er.prototype = {\n        point: function(n, t) {\n            this.stream.point(n, t)\n        },\n        sphere: function() {\n            this.stream.sphere()\n        },\n        lineStart: function() {\n            this.stream.lineStart()\n        },\n        lineEnd: function() {\n            this.stream.lineEnd()\n        },\n        polygonStart: function() {\n            this.stream.polygonStart()\n        },\n        polygonEnd: function() {\n            this.stream.polygonEnd()\n        }\n    }, ta.geo.projection = ur, ta.geo.projectionMutator = ir, (ta.geo.equirectangular = function() {\n        return ur(ar)\n    }).raw = ar.invert = ar, ta.geo.rotation = function(n) {\n        function t(t) {\n            return t = n(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }\n        return n = lr(n[0] % 360 * Da, n[1] * Da, n.length > 2 ? n[2] * Da : 0), t.invert = function(t) {\n            return t = n.invert(t[0] * Da, t[1] * Da), t[0] *= Pa, t[1] *= Pa, t\n        }, t\n    }, cr.invert = ar, ta.geo.circle = function() {\n        function n() {\n            var n = \"function\" == typeof r ? r.apply(this, arguments) : r,\n                t = lr(-n[0] * Da, -n[1] * Da, 0).invert,\n                u = [];\n            return e(null, null, 1, {\n                point: function(n, e) {\n                    u.push(n = t(n, e)), n[0] *= Pa, n[1] *= Pa\n                }\n            }), {\n                type: \"Polygon\",\n                coordinates: [u]\n            }\n        }\n        var t, e, r = [0, 0],\n            u = 6;\n        return n.origin = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.angle = function(r) {\n            return arguments.length ? (e = gr((t = +r) * Da, u * Da), n) : t\n        }, n.precision = function(r) {\n            return arguments.length ? (e = gr(t * Da, (u = +r) * Da), n) : u\n        }, n.angle(90)\n    }, ta.geo.distance = function(n, t) {\n        var e, r = (t[0] - n[0]) * Da,\n            u = n[1] * Da,\n            i = t[1] * Da,\n            o = Math.sin(r),\n            a = Math.cos(r),\n            c = Math.sin(u),\n            l = Math.cos(u),\n            s = Math.sin(i),\n            f = Math.cos(i);\n        return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)\n    }, ta.geo.graticule = function() {\n        function n() {\n            return {\n                type: \"MultiLineString\",\n                coordinates: t()\n            }\n        }\n\n        function t() {\n            return ta.range(Math.ceil(i / d) * d, u, d).map(h).concat(ta.range(Math.ceil(l / m) * m, c, m).map(g)).concat(ta.range(Math.ceil(r / p) * p, e, p).filter(function(n) {\n                return ga(n % d) > Ca\n            }).map(s)).concat(ta.range(Math.ceil(a / v) * v, o, v).filter(function(n) {\n                return ga(n % m) > Ca\n            }).map(f))\n        }\n        var e, r, u, i, o, a, c, l, s, f, h, g, p = 10,\n            v = p,\n            d = 90,\n            m = 360,\n            y = 2.5;\n        return n.lines = function() {\n            return t().map(function(n) {\n                return {\n                    type: \"LineString\",\n                    coordinates: n\n                }\n            })\n        }, n.outline = function() {\n            return {\n                type: \"Polygon\",\n                coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]\n            }\n        }, n.extent = function(t) {\n            return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()\n        }, n.majorExtent = function(t) {\n            return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [\n                [i, l],\n                [u, c]\n            ]\n        }, n.minorExtent = function(t) {\n            return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [\n                [r, a],\n                [e, o]\n            ]\n        }, n.step = function(t) {\n            return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()\n        }, n.majorStep = function(t) {\n            return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]\n        }, n.minorStep = function(t) {\n            return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]\n        }, n.precision = function(t) {\n            return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y\n        }, n.majorExtent([\n            [-180, -90 + Ca],\n            [180, 90 - Ca]\n        ]).minorExtent([\n            [-180, -80 - Ca],\n            [180, 80 + Ca]\n        ])\n    }, ta.geo.greatArc = function() {\n        function n() {\n            return {\n                type: \"LineString\",\n                coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]\n            }\n        }\n        var t, e, r = mr,\n            u = yr;\n        return n.distance = function() {\n            return ta.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))\n        }, n.source = function(e) {\n            return arguments.length ? (r = e, t = \"function\" == typeof e ? null : e, n) : r\n        }, n.target = function(t) {\n            return arguments.length ? (u = t, e = \"function\" == typeof t ? null : t, n) : u\n        }, n.precision = function() {\n            return arguments.length ? n : 0\n        }, n\n    }, ta.geo.interpolate = function(n, t) {\n        return Mr(n[0] * Da, n[1] * Da, t[0] * Da, t[1] * Da)\n    }, ta.geo.length = function(n) {\n        return Yc = 0, ta.geo.stream(n, Zc), Yc\n    };\n    var Yc, Zc = {\n            sphere: b,\n            point: b,\n            lineStart: xr,\n            lineEnd: b,\n            polygonStart: b,\n            polygonEnd: b\n        },\n        Vc = br(function(n) {\n            return Math.sqrt(2 / (1 + n))\n        }, function(n) {\n            return 2 * Math.asin(n / 2)\n        });\n    (ta.geo.azimuthalEqualArea = function() {\n        return ur(Vc)\n    }).raw = Vc;\n    var Xc = br(function(n) {\n        var t = Math.acos(n);\n        return t && t / Math.sin(t)\n    }, y);\n    (ta.geo.azimuthalEquidistant = function() {\n        return ur(Xc)\n    }).raw = Xc, (ta.geo.conicConformal = function() {\n        return Ye(_r)\n    }).raw = _r, (ta.geo.conicEquidistant = function() {\n        return Ye(wr)\n    }).raw = wr;\n    var $c = br(function(n) {\n        return 1 / n\n    }, Math.atan);\n    (ta.geo.gnomonic = function() {\n        return ur($c)\n    }).raw = $c, Sr.invert = function(n, t) {\n        return [n, 2 * Math.atan(Math.exp(t)) - Ra]\n    }, (ta.geo.mercator = function() {\n        return kr(Sr)\n    }).raw = Sr;\n    var Bc = br(function() {\n        return 1\n    }, Math.asin);\n    (ta.geo.orthographic = function() {\n        return ur(Bc)\n    }).raw = Bc;\n    var Wc = br(function(n) {\n        return 1 / (1 + n)\n    }, function(n) {\n        return 2 * Math.atan(n)\n    });\n    (ta.geo.stereographic = function() {\n        return ur(Wc)\n    }).raw = Wc, Er.invert = function(n, t) {\n        return [-t, 2 * Math.atan(Math.exp(n)) - Ra]\n    }, (ta.geo.transverseMercator = function() {\n        var n = kr(Er),\n            t = n.center,\n            e = n.rotate;\n        return n.center = function(n) {\n            return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])\n        }, n.rotate = function(n) {\n            return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])\n        }, e([0, 0, 90])\n    }).raw = Er, ta.geom = {}, ta.geom.hull = function(n) {\n        function t(n) {\n            if (n.length < 3) return [];\n            var t, u = Et(e),\n                i = Et(r),\n                o = n.length,\n                a = [],\n                c = [];\n            for (t = 0; o > t; t++) a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);\n            for (a.sort(zr), t = 0; o > t; t++) c.push([a[t][0], -a[t][1]]);\n            var l = Cr(a),\n                s = Cr(c),\n                f = s[0] === l[0],\n                h = s[s.length - 1] === l[l.length - 1],\n                g = [];\n            for (t = l.length - 1; t >= 0; --t) g.push(n[a[l[t]][2]]);\n            for (t = +f; t < s.length - h; ++t) g.push(n[a[s[t]][2]]);\n            return g\n        }\n        var e = Ar,\n            r = Nr;\n        return arguments.length ? t(n) : (t.x = function(n) {\n            return arguments.length ? (e = n, t) : e\n        }, t.y = function(n) {\n            return arguments.length ? (r = n, t) : r\n        }, t)\n    }, ta.geom.polygon = function(n) {\n        return ya(n, Jc), n\n    };\n    var Jc = ta.geom.polygon.prototype = [];\n    Jc.area = function() {\n        for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;) n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];\n        return .5 * u\n    }, Jc.centroid = function(n) {\n        var t, e, r = -1,\n            u = this.length,\n            i = 0,\n            o = 0,\n            a = this[u - 1];\n        for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;) t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;\n        return [i * n, o * n]\n    }, Jc.clip = function(n) {\n        for (var t, e, r, u, i, o, a = Tr(n), c = -1, l = this.length - Tr(this), s = this[l - 1]; ++c < l;) {\n            for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;) o = t[e], qr(o, s, u) ? (qr(i, s, u) || n.push(Lr(i, o, s, u)), n.push(o)) : qr(i, s, u) && n.push(Lr(i, o, s, u)), i = o;\n            a && n.push(n[0]), s = u\n        }\n        return n\n    };\n    var Gc, Kc, Qc, nl, tl, el = [],\n        rl = [];\n    Or.prototype.prepare = function() {\n        for (var n, t = this.edges, e = t.length; e--;) n = t[e].edge, n.b && n.a || t.splice(e, 1);\n        return t.sort(Yr), t.length\n    }, Qr.prototype = {\n        start: function() {\n            return this.edge.l === this.site ? this.edge.a : this.edge.b\n        },\n        end: function() {\n            return this.edge.l === this.site ? this.edge.b : this.edge.a\n        }\n    }, nu.prototype = {\n        insert: function(n, t) {\n            var e, r, u;\n            if (n) {\n                if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {\n                    for (n = n.R; n.L;) n = n.L;\n                    n.L = t\n                } else n.R = t;\n                e = n\n            } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);\n            for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;) r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;\n            this._.C = !1\n        },\n        remove: function(n) {\n            n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;\n            var t, e, r, u = n.U,\n                i = n.L,\n                o = n.R;\n            if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {\n                if (n && n.C) return void(n.C = !1);\n                do {\n                    if (n === this._) break;\n                    if (n === u.L) {\n                        if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {\n                            t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;\n                            break\n                        }\n                    } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {\n                        t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;\n                        break\n                    }\n                    t.C = !0, n = u, u = u.U\n                } while (!n.C);\n                n && (n.C = !1)\n            }\n        }\n    }, ta.geom.voronoi = function(n) {\n        function t(n) {\n            var t = new Array(n.length),\n                r = a[0][0],\n                u = a[0][1],\n                i = a[1][0],\n                o = a[1][1];\n            return iu(e(n), a).cells.forEach(function(e, a) {\n                var c = e.edges,\n                    l = e.site,\n                    s = t[a] = c.length ? c.map(function(n) {\n                        var t = n.start();\n                        return [t.x, t.y]\n                    }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [\n                        [r, o],\n                        [i, o],\n                        [i, u],\n                        [r, u]\n                    ] : [];\n                s.point = n[a]\n            }), t\n        }\n\n        function e(n) {\n            return n.map(function(n, t) {\n                return {\n                    x: Math.round(i(n, t) / Ca) * Ca,\n                    y: Math.round(o(n, t) / Ca) * Ca,\n                    i: t\n                }\n            })\n        }\n        var r = Ar,\n            u = Nr,\n            i = r,\n            o = u,\n            a = ul;\n        return n ? t(n) : (t.links = function(n) {\n            return iu(e(n)).edges.filter(function(n) {\n                return n.l && n.r\n            }).map(function(t) {\n                return {\n                    source: n[t.l.i],\n                    target: n[t.r.i]\n                }\n            })\n        }, t.triangles = function(n) {\n            var t = [];\n            return iu(e(n)).cells.forEach(function(e, r) {\n                for (var u, i, o = e.site, a = e.edges.sort(Yr), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;) u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])\n            }), t\n        }, t.x = function(n) {\n            return arguments.length ? (i = Et(r = n), t) : r\n        }, t.y = function(n) {\n            return arguments.length ? (o = Et(u = n), t) : u\n        }, t.clipExtent = function(n) {\n            return arguments.length ? (a = null == n ? ul : n, t) : a === ul ? null : a\n        }, t.size = function(n) {\n            return arguments.length ? t.clipExtent(n && [\n                [0, 0], n\n            ]) : a === ul ? null : a && a[1]\n        }, t)\n    };\n    var ul = [\n        [-1e6, -1e6],\n        [1e6, 1e6]\n    ];\n    ta.geom.delaunay = function(n) {\n        return ta.geom.voronoi().triangles(n)\n    }, ta.geom.quadtree = function(n, t, e, r, u) {\n        function i(n) {\n            function i(n, t, e, r, u, i, o, a) {\n                if (!isNaN(e) && !isNaN(r))\n                    if (n.leaf) {\n                        var c = n.x,\n                            s = n.y;\n                        if (null != c)\n                            if (ga(c - e) + ga(s - r) < .01) l(n, t, e, r, u, i, o, a);\n                            else {\n                                var f = n.point;\n                                n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)\n                            }\n                        else n.x = e, n.y = r, n.point = t\n                    } else l(n, t, e, r, u, i, o, a)\n            }\n\n            function l(n, t, e, r, u, o, a, c) {\n                var l = .5 * (u + a),\n                    s = .5 * (o + c),\n                    f = e >= l,\n                    h = r >= s,\n                    g = h << 1 | f;\n                n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)\n            }\n            var s, f, h, g, p, v, d, m, y, M = Et(a),\n                x = Et(c);\n            if (null != t) v = t, d = e, m = r, y = u;\n            else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)\n                for (g = 0; p > g; ++g) s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y);\n            else\n                for (g = 0; p > g; ++g) {\n                    var b = +M(s = n[g], g),\n                        _ = +x(s, g);\n                    v > b && (v = b), d > _ && (d = _), b > m && (m = b), _ > y && (y = _), f.push(b), h.push(_)\n                }\n            var w = m - v,\n                S = y - d;\n            w > S ? y = d + w : m = v + S;\n            var k = su();\n            if (k.add = function(n) {\n                    i(k, n, +M(n, ++g), +x(n, g), v, d, m, y)\n                }, k.visit = function(n) {\n                    fu(n, k, v, d, m, y)\n                }, k.find = function(n) {\n                    return hu(k, n[0], n[1], v, d, m, y)\n                }, g = -1, null == t) {\n                for (; ++g < p;) i(k, n[g], f[g], h[g], v, d, m, y);\n                --g\n            } else n.forEach(k.add);\n            return f = h = n = s = null, k\n        }\n        var o, a = Ar,\n            c = Nr;\n        return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function(n) {\n            return arguments.length ? (a = n, i) : a\n        }, i.y = function(n) {\n            return arguments.length ? (c = n, i) : c\n        }, i.extent = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [\n                [t, e],\n                [r, u]\n            ]\n        }, i.size = function(n) {\n            return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]\n        }, i)\n    }, ta.interpolateRgb = gu, ta.interpolateObject = pu, ta.interpolateNumber = vu, ta.interpolateString = du;\n    var il = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n        ol = new RegExp(il.source, \"g\");\n    ta.interpolate = mu, ta.interpolators = [function(n, t) {\n        var e = typeof t;\n        return (\"string\" === e ? Ga.has(t) || /^(#|rgb\\(|hsl\\()/.test(t) ? gu : du : t instanceof ot ? gu : Array.isArray(t) ? yu : \"object\" === e && isNaN(t) ? pu : vu)(n, t)\n    }], ta.interpolateArray = yu;\n    var al = function() {\n            return y\n        },\n        cl = ta.map({\n            linear: al,\n            poly: ku,\n            quad: function() {\n                return _u\n            },\n            cubic: function() {\n                return wu\n            },\n            sin: function() {\n                return Eu\n            },\n            exp: function() {\n                return Au\n            },\n            circle: function() {\n                return Nu\n            },\n            elastic: Cu,\n            back: zu,\n            bounce: function() {\n                return qu\n            }\n        }),\n        ll = ta.map({\n            \"in\": y,\n            out: xu,\n            \"in-out\": bu,\n            \"out-in\": function(n) {\n                return bu(xu(n))\n            }\n        });\n    ta.ease = function(n) {\n        var t = n.indexOf(\"-\"),\n            e = t >= 0 ? n.slice(0, t) : n,\n            r = t >= 0 ? n.slice(t + 1) : \"in\";\n        return e = cl.get(e) || al, r = ll.get(r) || y, Mu(r(e.apply(null, ea.call(arguments, 1))))\n    }, ta.interpolateHcl = Lu, ta.interpolateHsl = Tu, ta.interpolateLab = Ru, ta.interpolateRound = Du, ta.transform = function(n) {\n        var t = ua.createElementNS(ta.ns.prefix.svg, \"g\");\n        return (ta.transform = function(n) {\n            if (null != n) {\n                t.setAttribute(\"transform\", n);\n                var e = t.transform.baseVal.consolidate()\n            }\n            return new Pu(e ? e.matrix : sl)\n        })(n)\n    }, Pu.prototype.toString = function() {\n        return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\"\n    };\n    var sl = {\n        a: 1,\n        b: 0,\n        c: 0,\n        d: 1,\n        e: 0,\n        f: 0\n    };\n    ta.interpolateTransform = Hu, ta.layout = {}, ta.layout.bundle = function() {\n        return function(n) {\n            for (var t = [], e = -1, r = n.length; ++e < r;) t.push(Yu(n[e]));\n            return t\n        }\n    }, ta.layout.chord = function() {\n        function n() {\n            var n, l, f, h, g, p = {},\n                v = [],\n                d = ta.range(i),\n                m = [];\n            for (e = [], r = [], n = 0, h = -1; ++h < i;) {\n                for (l = 0, g = -1; ++g < i;) l += u[h][g];\n                v.push(l), m.push(ta.range(i)), n += l\n            }\n            for (o && d.sort(function(n, t) {\n                    return o(v[n], v[t])\n                }), a && m.forEach(function(n, t) {\n                    n.sort(function(n, e) {\n                        return a(u[t][n], u[t][e])\n                    })\n                }), n = (La - s * i) / n, l = 0, h = -1; ++h < i;) {\n                for (f = l, g = -1; ++g < i;) {\n                    var y = d[h],\n                        M = m[y][g],\n                        x = u[y][M],\n                        b = l,\n                        _ = l += x * n;\n                    p[y + \"-\" + M] = {\n                        index: y,\n                        subindex: M,\n                        startAngle: b,\n                        endAngle: _,\n                        value: x\n                    }\n                }\n                r[y] = {\n                    index: y,\n                    startAngle: f,\n                    endAngle: l,\n                    value: (l - f) / n\n                }, l += s\n            }\n            for (h = -1; ++h < i;)\n                for (g = h - 1; ++g < i;) {\n                    var w = p[h + \"-\" + g],\n                        S = p[g + \"-\" + h];\n                    (w.value || S.value) && e.push(w.value < S.value ? {\n                        source: S,\n                        target: w\n                    } : {\n                        source: w,\n                        target: S\n                    })\n                }\n            c && t()\n        }\n\n        function t() {\n            e.sort(function(n, t) {\n                return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)\n            })\n        }\n        var e, r, u, i, o, a, c, l = {},\n            s = 0;\n        return l.matrix = function(n) {\n            return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u\n        }, l.padding = function(n) {\n            return arguments.length ? (s = n, e = r = null, l) : s\n        }, l.sortGroups = function(n) {\n            return arguments.length ? (o = n, e = r = null, l) : o\n        }, l.sortSubgroups = function(n) {\n            return arguments.length ? (a = n, e = null, l) : a\n        }, l.sortChords = function(n) {\n            return arguments.length ? (c = n, e && t(), l) : c\n        }, l.chords = function() {\n            return e || n(), e\n        }, l.groups = function() {\n            return r || n(), r\n        }, l\n    }, ta.layout.force = function() {\n        function n(n) {\n            return function(t, e, r, u) {\n                if (t.point !== n) {\n                    var i = t.cx - n.x,\n                        o = t.cy - n.y,\n                        a = u - e,\n                        c = i * i + o * o;\n                    if (c > a * a / d) {\n                        if (p > c) {\n                            var l = t.charge / c;\n                            n.px -= i * l, n.py -= o * l\n                        }\n                        return !0\n                    }\n                    if (t.point && c && p > c) {\n                        var l = t.pointCharge / c;\n                        n.px -= i * l, n.py -= o * l\n                    }\n                }\n                return !t.charge\n            }\n        }\n\n        function t(n) {\n            n.px = ta.event.x, n.py = ta.event.y, a.resume()\n        }\n        var e, r, u, i, o, a = {},\n            c = ta.dispatch(\"start\", \"tick\", \"end\"),\n            l = [1, 1],\n            s = .9,\n            f = fl,\n            h = hl,\n            g = -30,\n            p = gl,\n            v = .1,\n            d = .64,\n            m = [],\n            M = [];\n        return a.tick = function() {\n            if ((r *= .99) < .005) return c.end({\n                type: \"end\",\n                alpha: r = 0\n            }), !0;\n            var t, e, a, f, h, p, d, y, x, b = m.length,\n                _ = M.length;\n            for (e = 0; _ > e; ++e) a = M[e], f = a.source, h = a.target, y = h.x - f.x, x = h.y - f.y, (p = y * y + x * x) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, y *= p, x *= p, h.x -= y * (d = f.weight / (h.weight + f.weight)), h.y -= x * d, f.x += y * (d = 1 - d), f.y += x * d);\n            if ((d = r * v) && (y = l[0] / 2, x = l[1] / 2, e = -1, d))\n                for (; ++e < b;) a = m[e], a.x += (y - a.x) * d, a.y += (x - a.y) * d;\n            if (g)\n                for (Ju(t = ta.geom.quadtree(m), r, o), e = -1; ++e < b;)(a = m[e]).fixed || t.visit(n(a));\n            for (e = -1; ++e < b;) a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);\n            c.tick({\n                type: \"tick\",\n                alpha: r\n            })\n        }, a.nodes = function(n) {\n            return arguments.length ? (m = n, a) : m\n        }, a.links = function(n) {\n            return arguments.length ? (M = n, a) : M\n        }, a.size = function(n) {\n            return arguments.length ? (l = n, a) : l\n        }, a.linkDistance = function(n) {\n            return arguments.length ? (f = \"function\" == typeof n ? n : +n, a) : f\n        }, a.distance = a.linkDistance, a.linkStrength = function(n) {\n            return arguments.length ? (h = \"function\" == typeof n ? n : +n, a) : h\n        }, a.friction = function(n) {\n            return arguments.length ? (s = +n, a) : s\n        }, a.charge = function(n) {\n            return arguments.length ? (g = \"function\" == typeof n ? n : +n, a) : g\n        }, a.chargeDistance = function(n) {\n            return arguments.length ? (p = n * n, a) : Math.sqrt(p)\n        }, a.gravity = function(n) {\n            return arguments.length ? (v = +n, a) : v\n        }, a.theta = function(n) {\n            return arguments.length ? (d = n * n, a) : Math.sqrt(d)\n        }, a.alpha = function(n) {\n            return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({\n                type: \"start\",\n                alpha: r = n\n            }), ta.timer(a.tick)), a) : r\n        }, a.start = function() {\n            function n(n, r) {\n                if (!e) {\n                    for (e = new Array(c), a = 0; c > a; ++a) e[a] = [];\n                    for (a = 0; s > a; ++a) {\n                        var u = M[a];\n                        e[u.source.index].push(u.target), e[u.target.index].push(u.source)\n                    }\n                }\n                for (var i, o = e[t], a = -1, l = o.length; ++a < l;)\n                    if (!isNaN(i = o[a][n])) return i;\n                return Math.random() * r\n            }\n            var t, e, r, c = m.length,\n                s = M.length,\n                p = l[0],\n                v = l[1];\n            for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;\n            for (t = 0; s > t; ++t) r = M[t], \"number\" == typeof r.source && (r.source = m[r.source]), \"number\" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;\n            for (t = 0; c > t; ++t) r = m[t], isNaN(r.x) && (r.x = n(\"x\", p)), isNaN(r.y) && (r.y = n(\"y\", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);\n            if (u = [], \"function\" == typeof f)\n                for (t = 0; s > t; ++t) u[t] = +f.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) u[t] = f;\n            if (i = [], \"function\" == typeof h)\n                for (t = 0; s > t; ++t) i[t] = +h.call(this, M[t], t);\n            else\n                for (t = 0; s > t; ++t) i[t] = h;\n            if (o = [], \"function\" == typeof g)\n                for (t = 0; c > t; ++t) o[t] = +g.call(this, m[t], t);\n            else\n                for (t = 0; c > t; ++t) o[t] = g;\n            return a.resume()\n        }, a.resume = function() {\n            return a.alpha(.1)\n        }, a.stop = function() {\n            return a.alpha(0)\n        }, a.drag = function() {\n            return e || (e = ta.behavior.drag().origin(y).on(\"dragstart.force\", Xu).on(\"drag.force\", t).on(\"dragend.force\", $u)), arguments.length ? void this.on(\"mouseover.force\", Bu).on(\"mouseout.force\", Wu).call(e) : e\n        }, ta.rebind(a, c, \"on\")\n    };\n    var fl = 20,\n        hl = 1,\n        gl = 1 / 0;\n    ta.layout.hierarchy = function() {\n        function n(u) {\n            var i, o = [u],\n                a = [];\n            for (u.depth = 0; null != (i = o.pop());)\n                if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {\n                    for (var c, l, s; --c >= 0;) o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;\n                    r && (i.value = 0), i.children = l\n                } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;\n            return Qu(u, function(n) {\n                var e, u;\n                t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)\n            }), a\n        }\n        var t = ei,\n            e = ni,\n            r = ti;\n        return n.sort = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.children = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.value = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.revalue = function(t) {\n            return r && (Ku(t, function(n) {\n                n.children && (n.value = 0)\n            }), Qu(t, function(t) {\n                var e;\n                t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)\n            })), t\n        }, n\n    }, ta.layout.partition = function() {\n        function n(t, e, r, u) {\n            var i = t.children;\n            if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {\n                var o, a, c, l = -1;\n                for (r = t.value ? r / t.value : 0; ++l < o;) n(a = i[l], e, c = a.value * r, u), e += c\n            }\n        }\n\n        function t(n) {\n            var e = n.children,\n                r = 0;\n            if (e && (u = e.length))\n                for (var u, i = -1; ++i < u;) r = Math.max(r, t(e[i]));\n            return 1 + r\n        }\n\n        function e(e, i) {\n            var o = r.call(this, e, i);\n            return n(o[0], 0, u[0], u[1] / t(o[0])), o\n        }\n        var r = ta.layout.hierarchy(),\n            u = [1, 1];\n        return e.size = function(n) {\n            return arguments.length ? (u = n, e) : u\n        }, Gu(e, r)\n    }, ta.layout.pie = function() {\n        function n(o) {\n            var a, c = o.length,\n                l = o.map(function(e, r) {\n                    return +t.call(n, e, r)\n                }),\n                s = +(\"function\" == typeof r ? r.apply(this, arguments) : r),\n                f = (\"function\" == typeof u ? u.apply(this, arguments) : u) - s,\n                h = Math.min(Math.abs(f) / c, +(\"function\" == typeof i ? i.apply(this, arguments) : i)),\n                g = h * (0 > f ? -1 : 1),\n                p = (f - c * g) / ta.sum(l),\n                v = ta.range(c),\n                d = [];\n            return null != e && v.sort(e === pl ? function(n, t) {\n                return l[t] - l[n]\n            } : function(n, t) {\n                return e(o[n], o[t])\n            }), v.forEach(function(n) {\n                d[n] = {\n                    data: o[n],\n                    value: a = l[n],\n                    startAngle: s,\n                    endAngle: s += a * p + g,\n                    padAngle: h\n                }\n            }), d\n        }\n        var t = Number,\n            e = pl,\n            r = 0,\n            u = La,\n            i = 0;\n        return n.value = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.sort = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.startAngle = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n.endAngle = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.padAngle = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n\n    };\n    var pl = {};\n    ta.layout.stack = function() {\n        function n(a, c) {\n            if (!(h = a.length)) return a;\n            var l = a.map(function(e, r) {\n                    return t.call(n, e, r)\n                }),\n                s = l.map(function(t) {\n                    return t.map(function(t, e) {\n                        return [i.call(n, t, e), o.call(n, t, e)]\n                    })\n                }),\n                f = e.call(n, s, c);\n            l = ta.permute(l, f), s = ta.permute(s, f);\n            var h, g, p, v, d = r.call(n, s, c),\n                m = l[0].length;\n            for (p = 0; m > p; ++p)\n                for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g) u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);\n            return a\n        }\n        var t = y,\n            e = ai,\n            r = ci,\n            u = oi,\n            i = ui,\n            o = ii;\n        return n.values = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.order = function(t) {\n            return arguments.length ? (e = \"function\" == typeof t ? t : vl.get(t) || ai, n) : e\n        }, n.offset = function(t) {\n            return arguments.length ? (r = \"function\" == typeof t ? t : dl.get(t) || ci, n) : r\n        }, n.x = function(t) {\n            return arguments.length ? (i = t, n) : i\n        }, n.y = function(t) {\n            return arguments.length ? (o = t, n) : o\n        }, n.out = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n\n    };\n    var vl = ta.map({\n            \"inside-out\": function(n) {\n                var t, e, r = n.length,\n                    u = n.map(li),\n                    i = n.map(si),\n                    o = ta.range(r).sort(function(n, t) {\n                        return u[n] - u[t]\n                    }),\n                    a = 0,\n                    c = 0,\n                    l = [],\n                    s = [];\n                for (t = 0; r > t; ++t) e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));\n                return s.reverse().concat(l)\n            },\n            reverse: function(n) {\n                return ta.range(n.length).reverse()\n            },\n            \"default\": ai\n        }),\n        dl = ta.map({\n            silhouette: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = [],\n                    a = 0,\n                    c = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    r > a && (a = r), o.push(r)\n                }\n                for (e = 0; i > e; ++e) c[e] = (a - o[e]) / 2;\n                return c\n            },\n            wiggle: function(n) {\n                var t, e, r, u, i, o, a, c, l, s = n.length,\n                    f = n[0],\n                    h = f.length,\n                    g = [];\n                for (g[0] = c = l = 0, e = 1; h > e; ++e) {\n                    for (t = 0, u = 0; s > t; ++t) u += n[t][e][1];\n                    for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {\n                        for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r) o += (n[r][e][1] - n[r][e - 1][1]) / a;\n                        i += o * n[t][e][1]\n                    }\n                    g[e] = c -= u ? i / u * a : 0, l > c && (l = c)\n                }\n                for (e = 0; h > e; ++e) g[e] -= l;\n                return g\n            },\n            expand: function(n) {\n                var t, e, r, u = n.length,\n                    i = n[0].length,\n                    o = 1 / u,\n                    a = [];\n                for (e = 0; i > e; ++e) {\n                    for (t = 0, r = 0; u > t; t++) r += n[t][e][1];\n                    if (r)\n                        for (t = 0; u > t; t++) n[t][e][1] /= r;\n                    else\n                        for (t = 0; u > t; t++) n[t][e][1] = o\n                }\n                for (e = 0; i > e; ++e) a[e] = 0;\n                return a\n            },\n            zero: ci\n        });\n    ta.layout.histogram = function() {\n        function n(n, i) {\n            for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;) o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;\n            if (g > 0)\n                for (i = -1; ++i < h;) a = l[i], a >= s[0] && a <= s[1] && (o = c[ta.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));\n            return c\n        }\n        var t = !0,\n            e = Number,\n            r = pi,\n            u = hi;\n        return n.value = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.range = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.bins = function(t) {\n            return arguments.length ? (u = \"number\" == typeof t ? function(n) {\n                return gi(n, t)\n            } : Et(t), n) : u\n        }, n.frequency = function(e) {\n            return arguments.length ? (t = !!e, n) : t\n        }, n\n    }, ta.layout.pack = function() {\n        function n(n, i) {\n            var o = e.call(this, n, i),\n                a = o[0],\n                c = u[0],\n                l = u[1],\n                s = null == t ? Math.sqrt : \"function\" == typeof t ? t : function() {\n                    return t\n                };\n            if (a.x = a.y = 0, Qu(a, function(n) {\n                    n.r = +s(n.value)\n                }), Qu(a, Mi), r) {\n                var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;\n                Qu(a, function(n) {\n                    n.r += f\n                }), Qu(a, Mi), Qu(a, function(n) {\n                    n.r -= f\n                })\n            }\n            return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o\n        }\n        var t, e = ta.layout.hierarchy().sort(vi),\n            r = 0,\n            u = [1, 1];\n        return n.size = function(t) {\n            return arguments.length ? (u = t, n) : u\n        }, n.radius = function(e) {\n            return arguments.length ? (t = null == e || \"function\" == typeof e ? e : +e, n) : t\n        }, n.padding = function(t) {\n            return arguments.length ? (r = +t, n) : r\n        }, Gu(n, e)\n    }, ta.layout.tree = function() {\n        function n(n, u) {\n            var s = o.call(this, n, u),\n                f = s[0],\n                h = t(f);\n            if (Qu(h, e), h.parent.m = -h.z, Ku(h, r), l) Ku(f, i);\n            else {\n                var g = f,\n                    p = f,\n                    v = f;\n                Ku(f, function(n) {\n                    n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)\n                });\n                var d = a(g, p) / 2 - g.x,\n                    m = c[0] / (p.x + a(p, g) / 2 + d),\n                    y = c[1] / (v.depth || 1);\n                Ku(f, function(n) {\n                    n.x = (n.x + d) * m, n.y = n.depth * y\n                })\n            }\n            return s\n        }\n\n        function t(n) {\n            for (var t, e = {\n                    A: null,\n                    children: [n]\n                }, r = [e]; null != (t = r.pop());)\n                for (var u, i = t.children, o = 0, a = i.length; a > o; ++o) r.push((i[o] = u = {\n                    _: i[o],\n                    parent: t,\n                    children: (u = i[o].children) && u.slice() || [],\n                    A: null,\n                    a: null,\n                    z: 0,\n                    m: 0,\n                    c: 0,\n                    s: 0,\n                    t: null,\n                    i: o\n                }).a = u);\n            return e.children[0]\n        }\n\n        function e(n) {\n            var t = n.children,\n                e = n.parent.children,\n                r = n.i ? e[n.i - 1] : null;\n            if (t.length) {\n                Ni(n);\n                var i = (t[0].z + t[t.length - 1].z) / 2;\n                r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i\n            } else r && (n.z = r.z + a(n._, r._));\n            n.parent.A = u(n, r, n.parent.A || e[0])\n        }\n\n        function r(n) {\n            n._.x = n.z + n.parent.m, n.m += n.parent.m\n        }\n\n        function u(n, t, e) {\n            if (t) {\n                for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = Ei(o), u = ki(u), o && u;) c = ki(c), i = Ei(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ai(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;\n                o && !Ei(i) && (i.t = o, i.m += f - s), u && !ki(c) && (c.t = u, c.m += l - h, e = n)\n            }\n            return e\n        }\n\n        function i(n) {\n            n.x *= c[0], n.y = n.depth * c[1]\n        }\n        var o = ta.layout.hierarchy().sort(null).value(null),\n            a = Si,\n            c = [1, 1],\n            l = null;\n        return n.separation = function(t) {\n            return arguments.length ? (a = t, n) : a\n        }, n.size = function(t) {\n            return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null\n        }, Gu(n, o)\n    }, ta.layout.cluster = function() {\n        function n(n, i) {\n            var o, a = t.call(this, n, i),\n                c = a[0],\n                l = 0;\n            Qu(c, function(n) {\n                var t = n.children;\n                t && t.length ? (n.x = qi(t), n.y = zi(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)\n            });\n            var s = Li(c),\n                f = Ti(c),\n                h = s.x - e(s, f) / 2,\n                g = f.x + e(f, s) / 2;\n            return Qu(c, u ? function(n) {\n                n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]\n            } : function(n) {\n                n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]\n            }), a\n        }\n        var t = ta.layout.hierarchy().sort(null).value(null),\n            e = Si,\n            r = [1, 1],\n            u = !1;\n        return n.separation = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.size = function(t) {\n            return arguments.length ? (u = null == (r = t), n) : u ? null : r\n        }, n.nodeSize = function(t) {\n            return arguments.length ? (u = null != (r = t), n) : u ? r : null\n        }, Gu(n, t)\n    }, ta.layout.treemap = function() {\n        function n(n, t) {\n            for (var e, r, u = -1, i = n.length; ++u < i;) r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r\n        }\n\n        function t(e) {\n            var i = e.children;\n            if (i && i.length) {\n                var o, a, c, l = f(e),\n                    s = [],\n                    h = i.slice(),\n                    p = 1 / 0,\n                    v = \"slice\" === g ? l.dx : \"dice\" === g ? l.dy : \"slice-dice\" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);\n                for (n(h, l.dx * l.dy / e.value), s.area = 0;\n                    (c = h.length) > 0;) s.push(o = h[c - 1]), s.area += o.area, \"squarify\" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);\n                s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)\n            }\n        }\n\n        function e(t) {\n            var r = t.children;\n            if (r && r.length) {\n                var i, o = f(t),\n                    a = r.slice(),\n                    c = [];\n                for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();) c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);\n                r.forEach(e)\n            }\n        }\n\n        function r(n, t) {\n            for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));\n            return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0\n        }\n\n        function u(n, t, e, r) {\n            var u, i = -1,\n                o = n.length,\n                a = e.x,\n                l = e.y,\n                s = t ? c(n.area / t) : 0;\n            if (t == e.dx) {\n                for ((r || s > e.dy) && (s = e.dy); ++i < o;) u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);\n                u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s\n            } else {\n                for ((r || s > e.dx) && (s = e.dx); ++i < o;) u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);\n                u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s\n            }\n        }\n\n        function i(r) {\n            var u = o || a(r),\n                i = u[0];\n            return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u\n        }\n        var o, a = ta.layout.hierarchy(),\n            c = Math.round,\n            l = [1, 1],\n            s = null,\n            f = Ri,\n            h = !1,\n            g = \"squarify\",\n            p = .5 * (1 + Math.sqrt(5));\n        return i.size = function(n) {\n            return arguments.length ? (l = n, i) : l\n        }, i.padding = function(n) {\n            function t(t) {\n                var e = n.call(i, t, t.depth);\n                return null == e ? Ri(t) : Di(t, \"number\" == typeof e ? [e, e, e, e] : e)\n            }\n\n            function e(t) {\n                return Di(t, n)\n            }\n            if (!arguments.length) return s;\n            var r;\n            return f = null == (s = n) ? Ri : \"function\" == (r = typeof n) ? t : \"number\" === r ? (n = [n, n, n, n], e) : e, i\n        }, i.round = function(n) {\n            return arguments.length ? (c = n ? Math.round : Number, i) : c != Number\n        }, i.sticky = function(n) {\n            return arguments.length ? (h = n, o = null, i) : h\n        }, i.ratio = function(n) {\n            return arguments.length ? (p = n, i) : p\n        }, i.mode = function(n) {\n            return arguments.length ? (g = n + \"\", i) : g\n        }, Gu(i, a)\n    }, ta.random = {\n        normal: function(n, t) {\n            var e = arguments.length;\n            return 2 > e && (t = 1), 1 > e && (n = 0),\n                function() {\n                    var e, r, u;\n                    do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);\n                    return n + t * e * Math.sqrt(-2 * Math.log(u) / u)\n                }\n        },\n        logNormal: function() {\n            var n = ta.random.normal.apply(ta, arguments);\n            return function() {\n                return Math.exp(n())\n            }\n        },\n        bates: function(n) {\n            var t = ta.random.irwinHall(n);\n            return function() {\n                return t() / n\n            }\n        },\n        irwinHall: function(n) {\n            return function() {\n                for (var t = 0, e = 0; n > e; e++) t += Math.random();\n                return t\n            }\n        }\n    }, ta.scale = {};\n    var ml = {\n        floor: y,\n        ceil: y\n    };\n    ta.scale.linear = function() {\n        return Ii([0, 1], [0, 1], mu, !1)\n    };\n    var yl = {\n        s: 1,\n        g: 1,\n        p: 1,\n        r: 1,\n        e: 1\n    };\n    ta.scale.log = function() {\n        return Ji(ta.scale.linear().domain([0, 1]), 10, !0, [1, 10])\n    };\n    var Ml = ta.format(\".0e\"),\n        xl = {\n            floor: function(n) {\n                return -Math.ceil(-n)\n            },\n            ceil: function(n) {\n                return -Math.floor(-n)\n            }\n        };\n    ta.scale.pow = function() {\n        return Gi(ta.scale.linear(), 1, [0, 1])\n    }, ta.scale.sqrt = function() {\n        return ta.scale.pow().exponent(.5)\n    }, ta.scale.ordinal = function() {\n        return Qi([], {\n            t: \"range\",\n            a: [\n                []\n            ]\n        })\n    }, ta.scale.category10 = function() {\n        return ta.scale.ordinal().range(bl)\n    }, ta.scale.category20 = function() {\n        return ta.scale.ordinal().range(_l)\n    }, ta.scale.category20b = function() {\n        return ta.scale.ordinal().range(wl)\n    }, ta.scale.category20c = function() {\n        return ta.scale.ordinal().range(Sl)\n    };\n    var bl = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(Mt),\n        _l = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(Mt),\n        wl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(Mt),\n        Sl = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(Mt);\n    ta.scale.quantile = function() {\n        return no([], [])\n    }, ta.scale.quantize = function() {\n        return to(0, 1, [0, 1])\n    }, ta.scale.threshold = function() {\n        return eo([.5], [0, 1])\n    }, ta.scale.identity = function() {\n        return ro([0, 1])\n    }, ta.svg = {}, ta.svg.arc = function() {\n        function n() {\n            var n = Math.max(0, +e.apply(this, arguments)),\n                l = Math.max(0, +r.apply(this, arguments)),\n                s = o.apply(this, arguments) - Ra,\n                f = a.apply(this, arguments) - Ra,\n                h = Math.abs(f - s),\n                g = s > f ? 0 : 1;\n            if (n > l && (p = l, l = n, n = p), h >= Ta) return t(l, g) + (n ? t(n, 1 - g) : \"\") + \"Z\";\n            var p, v, d, m, y, M, x, b, _, w, S, k, E = 0,\n                A = 0,\n                N = [];\n            if ((m = (+c.apply(this, arguments) || 0) / 2) && (d = i === kl ? Math.sqrt(n * n + l * l) : +i.apply(this, arguments), g || (A *= -1), l && (A = tt(d / l * Math.sin(m))), n && (E = tt(d / n * Math.sin(m)))), l) {\n                y = l * Math.cos(s + A), M = l * Math.sin(s + A), x = l * Math.cos(f - A), b = l * Math.sin(f - A);\n                var C = Math.abs(f - s - 2 * A) <= qa ? 0 : 1;\n                if (A && so(y, M, x, b) === g ^ C) {\n                    var z = (s + f) / 2;\n                    y = l * Math.cos(z), M = l * Math.sin(z), x = b = null\n                }\n            } else y = M = 0;\n            if (n) {\n                _ = n * Math.cos(f - E), w = n * Math.sin(f - E), S = n * Math.cos(s + E), k = n * Math.sin(s + E);\n                var q = Math.abs(s - f + 2 * E) <= qa ? 0 : 1;\n                if (E && so(_, w, S, k) === 1 - g ^ q) {\n                    var L = (s + f) / 2;\n                    _ = n * Math.cos(L), w = n * Math.sin(L), S = k = null\n                }\n            } else _ = w = 0;\n            if ((p = Math.min(Math.abs(l - n) / 2, +u.apply(this, arguments))) > .001) {\n                v = l > n ^ g ? 0 : 1;\n                var T = null == S ? [_, w] : null == x ? [y, M] : Lr([y, M], [S, k], [x, b], [_, w]),\n                    R = y - T[0],\n                    D = M - T[1],\n                    P = x - T[0],\n                    U = b - T[1],\n                    j = 1 / Math.sin(Math.acos((R * P + D * U) / (Math.sqrt(R * R + D * D) * Math.sqrt(P * P + U * U))) / 2),\n                    F = Math.sqrt(T[0] * T[0] + T[1] * T[1]);\n                if (null != x) {\n                    var H = Math.min(p, (l - F) / (j + 1)),\n                        O = fo(null == S ? [_, w] : [S, k], [y, M], l, H, g),\n                        I = fo([x, b], [_, w], l, H, g);\n                    p === H ? N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 0,\", v, \" \", O[1], \"A\", l, \",\", l, \" 0 \", 1 - g ^ so(O[1][0], O[1][1], I[1][0], I[1][1]), \",\", g, \" \", I[1], \"A\", H, \",\", H, \" 0 0,\", v, \" \", I[0]) : N.push(\"M\", O[0], \"A\", H, \",\", H, \" 0 1,\", v, \" \", I[0])\n                } else N.push(\"M\", y, \",\", M);\n                if (null != S) {\n                    var Y = Math.min(p, (n - F) / (j - 1)),\n                        Z = fo([y, M], [S, k], n, -Y, g),\n                        V = fo([_, w], null == x ? [y, M] : [x, b], n, -Y, g);\n                    p === Y ? N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", V[1], \"A\", n, \",\", n, \" 0 \", g ^ so(V[1][0], V[1][1], Z[1][0], Z[1][1]), \",\", 1 - g, \" \", Z[1], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0]) : N.push(\"L\", V[0], \"A\", Y, \",\", Y, \" 0 0,\", v, \" \", Z[0])\n                } else N.push(\"L\", _, \",\", w)\n            } else N.push(\"M\", y, \",\", M), null != x && N.push(\"A\", l, \",\", l, \" 0 \", C, \",\", g, \" \", x, \",\", b), N.push(\"L\", _, \",\", w), null != S && N.push(\"A\", n, \",\", n, \" 0 \", q, \",\", 1 - g, \" \", S, \",\", k);\n            return N.push(\"Z\"), N.join(\"\")\n        }\n\n        function t(n, t) {\n            return \"M0,\" + n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + -n + \"A\" + n + \",\" + n + \" 0 1,\" + t + \" 0,\" + n\n        }\n        var e = io,\n            r = oo,\n            u = uo,\n            i = kl,\n            o = ao,\n            a = co,\n            c = lo;\n        return n.innerRadius = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.outerRadius = function(t) {\n            return arguments.length ? (r = Et(t), n) : r\n        }, n.cornerRadius = function(t) {\n            return arguments.length ? (u = Et(t), n) : u\n        }, n.padRadius = function(t) {\n            return arguments.length ? (i = t == kl ? kl : Et(t), n) : i\n        }, n.startAngle = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.endAngle = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.padAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.centroid = function() {\n            var n = (+e.apply(this, arguments) + +r.apply(this, arguments)) / 2,\n                t = (+o.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Ra;\n            return [Math.cos(t) * n, Math.sin(t) * n]\n        }, n\n    };\n    var kl = \"auto\";\n    ta.svg.line = function() {\n        return ho(y)\n    };\n    var El = ta.map({\n        linear: go,\n        \"linear-closed\": po,\n        step: vo,\n        \"step-before\": mo,\n        \"step-after\": yo,\n        basis: So,\n        \"basis-open\": ko,\n        \"basis-closed\": Eo,\n        bundle: Ao,\n        cardinal: bo,\n        \"cardinal-open\": Mo,\n        \"cardinal-closed\": xo,\n        monotone: To\n    });\n    El.forEach(function(n, t) {\n        t.key = n, t.closed = /-closed$/.test(n)\n    });\n    var Al = [0, 2 / 3, 1 / 3, 0],\n        Nl = [0, 1 / 3, 2 / 3, 0],\n        Cl = [0, 1 / 6, 2 / 3, 1 / 6];\n    ta.svg.line.radial = function() {\n        var n = ho(Ro);\n        return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n\n    }, mo.reverse = yo, yo.reverse = mo, ta.svg.area = function() {\n        return Do(y)\n    }, ta.svg.area.radial = function() {\n        var n = Do(Ro);\n        return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n\n    }, ta.svg.chord = function() {\n        function n(n, a) {\n            var c = t(this, i, n, a),\n                l = t(this, o, n, a);\n            return \"M\" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + \"Z\"\n        }\n\n        function t(n, t, e, r) {\n            var u = t.call(n, e, r),\n                i = a.call(n, u, r),\n                o = c.call(n, u, r) - Ra,\n                s = l.call(n, u, r) - Ra;\n            return {\n                r: i,\n                a0: o,\n                a1: s,\n                p0: [i * Math.cos(o), i * Math.sin(o)],\n                p1: [i * Math.cos(s), i * Math.sin(s)]\n            }\n        }\n\n        function e(n, t) {\n            return n.a0 == t.a0 && n.a1 == t.a1\n        }\n\n        function r(n, t, e) {\n            return \"A\" + n + \",\" + n + \" 0 \" + +(e > qa) + \",1 \" + t\n        }\n\n        function u(n, t, e, r) {\n            return \"Q 0,0 \" + r\n        }\n        var i = mr,\n            o = yr,\n            a = Po,\n            c = ao,\n            l = co;\n        return n.radius = function(t) {\n            return arguments.length ? (a = Et(t), n) : a\n        }, n.source = function(t) {\n            return arguments.length ? (i = Et(t), n) : i\n        }, n.target = function(t) {\n            return arguments.length ? (o = Et(t), n) : o\n        }, n.startAngle = function(t) {\n            return arguments.length ? (c = Et(t), n) : c\n        }, n.endAngle = function(t) {\n            return arguments.length ? (l = Et(t), n) : l\n        }, n\n    }, ta.svg.diagonal = function() {\n        function n(n, u) {\n            var i = t.call(this, n, u),\n                o = e.call(this, n, u),\n                a = (i.y + o.y) / 2,\n                c = [i, {\n                    x: i.x,\n                    y: a\n                }, {\n                    x: o.x,\n                    y: a\n                }, o];\n            return c = c.map(r), \"M\" + c[0] + \"C\" + c[1] + \" \" + c[2] + \" \" + c[3]\n        }\n        var t = mr,\n            e = yr,\n            r = Uo;\n        return n.source = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.target = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n.projection = function(t) {\n            return arguments.length ? (r = t, n) : r\n        }, n\n    }, ta.svg.diagonal.radial = function() {\n        var n = ta.svg.diagonal(),\n            t = Uo,\n            e = n.projection;\n        return n.projection = function(n) {\n            return arguments.length ? e(jo(t = n)) : t\n        }, n\n    }, ta.svg.symbol = function() {\n        function n(n, r) {\n            return (zl.get(t.call(this, n, r)) || Oo)(e.call(this, n, r))\n        }\n        var t = Ho,\n            e = Fo;\n        return n.type = function(e) {\n            return arguments.length ? (t = Et(e), n) : t\n        }, n.size = function(t) {\n            return arguments.length ? (e = Et(t), n) : e\n        }, n\n    };\n    var zl = ta.map({\n        circle: Oo,\n        cross: function(n) {\n            var t = Math.sqrt(n / 5) / 2;\n            return \"M\" + -3 * t + \",\" + -t + \"H\" + -t + \"V\" + -3 * t + \"H\" + t + \"V\" + -t + \"H\" + 3 * t + \"V\" + t + \"H\" + t + \"V\" + 3 * t + \"H\" + -t + \"V\" + t + \"H\" + -3 * t + \"Z\"\n        },\n        diamond: function(n) {\n            var t = Math.sqrt(n / (2 * Ll)),\n                e = t * Ll;\n            return \"M0,\" + -t + \"L\" + e + \",0 0,\" + t + \" \" + -e + \",0Z\"\n        },\n        square: function(n) {\n            var t = Math.sqrt(n) / 2;\n            return \"M\" + -t + \",\" + -t + \"L\" + t + \",\" + -t + \" \" + t + \",\" + t + \" \" + -t + \",\" + t + \"Z\"\n        },\n        \"triangle-down\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + e + \"L\" + t + \",\" + -e + \" \" + -t + \",\" + -e + \"Z\"\n        },\n        \"triangle-up\": function(n) {\n            var t = Math.sqrt(n / ql),\n                e = t * ql / 2;\n            return \"M0,\" + -e + \"L\" + t + \",\" + e + \" \" + -t + \",\" + e + \"Z\"\n        }\n    });\n    ta.svg.symbolTypes = zl.keys();\n    var ql = Math.sqrt(3),\n        Ll = Math.tan(30 * Da);\n    _a.transition = function(n) {\n        for (var t, e, r = Tl || ++Ul, u = Xo(n), i = [], o = Rl || {\n                time: Date.now(),\n                ease: Su,\n                delay: 0,\n                duration: 250\n            }, a = -1, c = this.length; ++a < c;) {\n            i.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(e = l[s]) && $o(e, s, u, r, o), t.push(e)\n        }\n        return Yo(i, u, r)\n    }, _a.interrupt = function(n) {\n        return this.each(null == n ? Dl : Io(Xo(n)))\n    };\n    var Tl, Rl, Dl = Io(Xo()),\n        Pl = [],\n        Ul = 0;\n    Pl.call = _a.call, Pl.empty = _a.empty, Pl.node = _a.node, Pl.size = _a.size, ta.transition = function(n, t) {\n        return n && n.transition ? Tl ? n.transition(t) : n : ta.selection().transition(n)\n    }, ta.transition.prototype = Pl, Pl.select = function(n) {\n        var t, e, r, u = this.id,\n            i = this.namespace,\n            o = [];\n        n = N(n);\n        for (var a = -1, c = this.length; ++a < c;) {\n            o.push(t = []);\n            for (var l = this[a], s = -1, f = l.length; ++s < f;)(r = l[s]) && (e = n.call(r, r.__data__, s, a)) ? (\"__data__\" in r && (e.__data__ = r.__data__), $o(e, s, i, u, r[i][u]), t.push(e)) : t.push(null)\n        }\n        return Yo(o, i, u)\n    }, Pl.selectAll = function(n) {\n        var t, e, r, u, i, o = this.id,\n            a = this.namespace,\n            c = [];\n        n = C(n);\n        for (var l = -1, s = this.length; ++l < s;)\n            for (var f = this[l], h = -1, g = f.length; ++h < g;)\n                if (r = f[h]) {\n                    i = r[a][o], e = n.call(r, r.__data__, h, l), c.push(t = []);\n                    for (var p = -1, v = e.length; ++p < v;)(u = e[p]) && $o(u, p, a, o, i), t.push(u)\n                } return Yo(c, a, o)\n    }, Pl.filter = function(n) {\n        var t, e, r, u = [];\n        \"function\" != typeof n && (n = O(n));\n        for (var i = 0, o = this.length; o > i; i++) {\n            u.push(t = []);\n            for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)\n        }\n        return Yo(u, this.namespace, this.id)\n    }, Pl.tween = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        return arguments.length < 2 ? this.node()[r][e].tween.get(n) : Y(this, null == t ? function(t) {\n            t[r][e].tween.remove(n)\n        } : function(u) {\n            u[r][e].tween.set(n, t)\n        })\n    }, Pl.attr = function(n, t) {\n        function e() {\n            this.removeAttribute(a)\n        }\n\n        function r() {\n            this.removeAttributeNS(a.space, a.local)\n        }\n\n        function u(n) {\n            return null == n ? e : (n += \"\", function() {\n                var t, e = this.getAttribute(a);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttribute(a, t(n))\n                })\n            })\n        }\n\n        function i(n) {\n            return null == n ? r : (n += \"\", function() {\n                var t, e = this.getAttributeNS(a.space, a.local);\n                return e !== n && (t = o(e, n), function(n) {\n                    this.setAttributeNS(a.space, a.local, t(n))\n                })\n            })\n        }\n        if (arguments.length < 2) {\n            for (t in n) this.attr(t, n[t]);\n            return this\n        }\n        var o = \"transform\" == n ? Hu : mu,\n            a = ta.ns.qualify(n);\n        return Zo(this, \"attr.\" + n, t, a.local ? i : u)\n    }, Pl.attrTween = function(n, t) {\n        function e(n, e) {\n            var r = t.call(this, n, e, this.getAttribute(u));\n            return r && function(n) {\n                this.setAttribute(u, r(n))\n            }\n        }\n\n        function r(n, e) {\n            var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));\n            return r && function(n) {\n                this.setAttributeNS(u.space, u.local, r(n))\n            }\n        }\n        var u = ta.ns.qualify(n);\n        return this.tween(\"attr.\" + n, u.local ? r : e)\n    }, Pl.style = function(n, e, r) {\n        function u() {\n            this.style.removeProperty(n)\n        }\n\n        function i(e) {\n            return null == e ? u : (e += \"\", function() {\n                var u, i = t(this).getComputedStyle(this, null).getPropertyValue(n);\n                return i !== e && (u = mu(i, e), function(t) {\n                    this.style.setProperty(n, u(t), r)\n                })\n            })\n        }\n        var o = arguments.length;\n        if (3 > o) {\n            if (\"string\" != typeof n) {\n                2 > o && (e = \"\");\n                for (r in n) this.style(r, n[r], e);\n                return this\n            }\n            r = \"\"\n        }\n        return Zo(this, \"style.\" + n, e, i)\n    }, Pl.styleTween = function(n, e, r) {\n        function u(u, i) {\n            var o = e.call(this, u, i, t(this).getComputedStyle(this, null).getPropertyValue(n));\n            return o && function(t) {\n                this.style.setProperty(n, o(t), r)\n            }\n        }\n        return arguments.length < 3 && (r = \"\"), this.tween(\"style.\" + n, u)\n    }, Pl.text = function(n) {\n        return Zo(this, \"text\", n, Vo)\n    }, Pl.remove = function() {\n        var n = this.namespace;\n        return this.each(\"end.transition\", function() {\n            var t;\n            this[n].count < 2 && (t = this.parentNode) && t.removeChild(this)\n        })\n    }, Pl.ease = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].ease : (\"function\" != typeof n && (n = ta.ease.apply(ta, arguments)), Y(this, function(r) {\n            r[e][t].ease = n\n        }))\n    }, Pl.delay = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].delay : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].delay = +n.call(r, r.__data__, u, i)\n        } : (n = +n, function(r) {\n            r[e][t].delay = n\n        }))\n    }, Pl.duration = function(n) {\n        var t = this.id,\n            e = this.namespace;\n        return arguments.length < 1 ? this.node()[e][t].duration : Y(this, \"function\" == typeof n ? function(r, u, i) {\n            r[e][t].duration = Math.max(1, n.call(r, r.__data__, u, i))\n        } : (n = Math.max(1, n), function(r) {\n            r[e][t].duration = n\n        }))\n    }, Pl.each = function(n, t) {\n        var e = this.id,\n            r = this.namespace;\n        if (arguments.length < 2) {\n            var u = Rl,\n                i = Tl;\n            try {\n                Tl = e, Y(this, function(t, u, i) {\n                    Rl = t[r][e], n.call(t, t.__data__, u, i)\n                })\n            } finally {\n                Rl = u, Tl = i\n            }\n        } else Y(this, function(u) {\n            var i = u[r][e];\n            (i.event || (i.event = ta.dispatch(\"start\", \"end\", \"interrupt\"))).on(n, t)\n        });\n        return this\n    }, Pl.transition = function() {\n        for (var n, t, e, r, u = this.id, i = ++Ul, o = this.namespace, a = [], c = 0, l = this.length; l > c; c++) {\n            a.push(n = []);\n            for (var t = this[c], s = 0, f = t.length; f > s; s++)(e = t[s]) && (r = e[o][u], $o(e, s, o, i, {\n                time: r.time,\n                ease: r.ease,\n                delay: r.delay + r.duration,\n                duration: r.duration\n            })), n.push(e)\n        }\n        return Yo(a, o, i)\n    }, ta.svg.axis = function() {\n        function n(n) {\n            n.each(function() {\n                var n, l = ta.select(this),\n                    s = this.__chart__ || e,\n                    f = this.__chart__ = e.copy(),\n                    h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c,\n                    g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : y : t,\n                    p = l.selectAll(\".tick\").data(h, f),\n                    v = p.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", Ca),\n                    d = ta.transition(p.exit()).style(\"opacity\", Ca).remove(),\n                    m = ta.transition(p.order()).style(\"opacity\", 1),\n                    M = Math.max(u, 0) + o,\n                    x = Ui(f),\n                    b = l.selectAll(\".domain\").data([0]),\n                    _ = (b.enter().append(\"path\").attr(\"class\", \"domain\"), ta.transition(b));\n                v.append(\"line\"), v.append(\"text\");\n                var w, S, k, E, A = v.select(\"line\"),\n                    N = m.select(\"line\"),\n                    C = p.select(\"text\").text(g),\n                    z = v.select(\"text\"),\n                    q = m.select(\"text\"),\n                    L = \"top\" === r || \"left\" === r ? -1 : 1;\n                if (\"bottom\" === r || \"top\" === r ? (n = Bo, w = \"x\", k = \"y\", S = \"x2\", E = \"y2\", C.attr(\"dy\", 0 > L ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\"), _.attr(\"d\", \"M\" + x[0] + \",\" + L * i + \"V0H\" + x[1] + \"V\" + L * i)) : (n = Wo, w = \"y\", k = \"x\", S = \"y2\", E = \"x2\", C.attr(\"dy\", \".32em\").style(\"text-anchor\", 0 > L ? \"end\" : \"start\"), _.attr(\"d\", \"M\" + L * i + \",\" + x[0] + \"H0V\" + x[1] + \"H\" + L * i)), A.attr(E, L * u), z.attr(k, L * M), N.attr(S, 0).attr(E, L * u), q.attr(w, 0).attr(k, L * M), f.rangeBand) {\n                    var T = f,\n                        R = T.rangeBand() / 2;\n                    s = f = function(n) {\n                        return T(n) + R\n                    }\n                } else s.rangeBand ? s = f : d.call(n, f, s);\n                v.call(n, s, f), m.call(n, f, f)\n            })\n        }\n        var t, e = ta.scale.linear(),\n            r = jl,\n            u = 6,\n            i = 6,\n            o = 3,\n            a = [10],\n            c = null;\n        return n.scale = function(t) {\n            return arguments.length ? (e = t, n) : e\n        }, n.orient = function(t) {\n            return arguments.length ? (r = t in Fl ? t + \"\" : jl, n) : r\n        }, n.ticks = function() {\n            return arguments.length ? (a = arguments, n) : a\n        }, n.tickValues = function(t) {\n            return arguments.length ? (c = t, n) : c\n        }, n.tickFormat = function(e) {\n            return arguments.length ? (t = e, n) : t\n        }, n.tickSize = function(t) {\n            var e = arguments.length;\n            return e ? (u = +t, i = +arguments[e - 1], n) : u\n        }, n.innerTickSize = function(t) {\n            return arguments.length ? (u = +t, n) : u\n        }, n.outerTickSize = function(t) {\n            return arguments.length ? (i = +t, n) : i\n        }, n.tickPadding = function(t) {\n            return arguments.length ? (o = +t, n) : o\n        }, n.tickSubdivide = function() {\n            return arguments.length && n\n        }, n\n    };\n    var jl = \"bottom\",\n        Fl = {\n            top: 1,\n            right: 1,\n            bottom: 1,\n            left: 1\n        };\n    ta.svg.brush = function() {\n        function n(t) {\n            t.each(function() {\n                var t = ta.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", i).on(\"touchstart.brush\", i),\n                    o = t.selectAll(\".background\").data([0]);\n                o.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\"), t.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n                var a = t.selectAll(\".resize\").data(v, y);\n                a.exit().remove(), a.enter().append(\"g\").attr(\"class\", function(n) {\n                    return \"resize \" + n\n                }).style(\"cursor\", function(n) {\n                    return Hl[n]\n                }).append(\"rect\").attr(\"x\", function(n) {\n                    return /[ew]$/.test(n) ? -3 : null\n                }).attr(\"y\", function(n) {\n                    return /^[ns]/.test(n) ? -3 : null\n                }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\"), a.style(\"display\", n.empty() ? \"none\" : null);\n                var c, f = ta.transition(t),\n                    h = ta.transition(o);\n                l && (c = Ui(l), h.attr(\"x\", c[0]).attr(\"width\", c[1] - c[0]), r(f)), s && (c = Ui(s), h.attr(\"y\", c[0]).attr(\"height\", c[1] - c[0]), u(f)), e(f)\n            })\n        }\n\n        function e(n) {\n            n.selectAll(\".resize\").attr(\"transform\", function(n) {\n                return \"translate(\" + f[+/e$/.test(n)] + \",\" + h[+/^s/.test(n)] + \")\"\n            })\n        }\n\n        function r(n) {\n            n.select(\".extent\").attr(\"x\", f[0]), n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", f[1] - f[0])\n        }\n\n        function u(n) {\n            n.select(\".extent\").attr(\"y\", h[0]), n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", h[1] - h[0])\n        }\n\n        function i() {\n            function i() {\n                32 == ta.event.keyCode && (C || (M = null, q[0] -= f[1], q[1] -= h[1], C = 2), S())\n            }\n\n            function v() {\n                32 == ta.event.keyCode && 2 == C && (q[0] += f[1], q[1] += h[1], C = 0, S())\n            }\n\n            function d() {\n                var n = ta.mouse(b),\n                    t = !1;\n                x && (n[0] += x[0], n[1] += x[1]), C || (ta.event.altKey ? (M || (M = [(f[0] + f[1]) / 2, (h[0] + h[1]) / 2]), q[0] = f[+(n[0] < M[0])], q[1] = h[+(n[1] < M[1])]) : M = null), A && m(n, l, 0) && (r(k), t = !0), N && m(n, s, 1) && (u(k), t = !0), t && (e(k), w({\n                    type: \"brush\",\n                    mode: C ? \"move\" : \"resize\"\n                }))\n            }\n\n            function m(n, t, e) {\n                var r, u, i = Ui(t),\n                    c = i[0],\n                    l = i[1],\n                    s = q[e],\n                    v = e ? h : f,\n                    d = v[1] - v[0];\n                return C && (c -= s, l -= d + s), r = (e ? p : g) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += s) + d : (M && (s = Math.max(c, Math.min(l, 2 * M[e] - r))), r > s ? (u = r, r = s) : u = s), v[0] != r || v[1] != u ? (e ? a = null : o = null, v[0] = r, v[1] = u, !0) : void 0\n            }\n\n            function y() {\n                d(), k.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", n.empty() ? \"none\" : null), ta.select(\"body\").style(\"cursor\", null), L.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null), z(), w({\n                    type: \"brushend\"\n                })\n            }\n            var M, x, b = this,\n                _ = ta.select(ta.event.target),\n                w = c.of(b, arguments),\n                k = ta.select(b),\n                E = _.datum(),\n                A = !/^(n|s)$/.test(E) && l,\n                N = !/^(e|w)$/.test(E) && s,\n                C = _.classed(\"extent\"),\n                z = W(b),\n                q = ta.mouse(b),\n                L = ta.select(t(b)).on(\"keydown.brush\", i).on(\"keyup.brush\", v);\n            if (ta.event.changedTouches ? L.on(\"touchmove.brush\", d).on(\"touchend.brush\", y) : L.on(\"mousemove.brush\", d).on(\"mouseup.brush\", y), k.interrupt().selectAll(\"*\").interrupt(), C) q[0] = f[0] - q[0], q[1] = h[0] - q[1];\n            else if (E) {\n                var T = +/w$/.test(E),\n                    R = +/^n/.test(E);\n                x = [f[1 - T] - q[0], h[1 - R] - q[1]], q[0] = f[T], q[1] = h[R]\n            } else ta.event.altKey && (M = q.slice());\n            k.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null), ta.select(\"body\").style(\"cursor\", _.style(\"cursor\")), w({\n                type: \"brushstart\"\n            }), d()\n        }\n        var o, a, c = E(n, \"brushstart\", \"brush\", \"brushend\"),\n            l = null,\n            s = null,\n            f = [0, 0],\n            h = [0, 0],\n            g = !0,\n            p = !0,\n            v = Ol[0];\n        return n.event = function(n) {\n            n.each(function() {\n                var n = c.of(this, arguments),\n                    t = {\n                        x: f,\n                        y: h,\n                        i: o,\n                        j: a\n                    },\n                    e = this.__chart__ || t;\n                this.__chart__ = t, Tl ? ta.select(this).transition().each(\"start.brush\", function() {\n                    o = e.i, a = e.j, f = e.x, h = e.y, n({\n                        type: \"brushstart\"\n                    })\n                }).tween(\"brush:brush\", function() {\n                    var e = yu(f, t.x),\n                        r = yu(h, t.y);\n                    return o = a = null,\n                        function(u) {\n                            f = t.x = e(u), h = t.y = r(u), n({\n                                type: \"brush\",\n                                mode: \"resize\"\n                            })\n                        }\n                }).each(\"end.brush\", function() {\n                    o = t.i, a = t.j, n({\n                        type: \"brush\",\n                        mode: \"resize\"\n                    }), n({\n                        type: \"brushend\"\n                    })\n                }) : (n({\n                    type: \"brushstart\"\n                }), n({\n                    type: \"brush\",\n                    mode: \"resize\"\n                }), n({\n                    type: \"brushend\"\n                }))\n            })\n        }, n.x = function(t) {\n            return arguments.length ? (l = t, v = Ol[!l << 1 | !s], n) : l\n        }, n.y = function(t) {\n            return arguments.length ? (s = t, v = Ol[!l << 1 | !s], n) : s\n        }, n.clamp = function(t) {\n            return arguments.length ? (l && s ? (g = !!t[0], p = !!t[1]) : l ? g = !!t : s && (p = !!t), n) : l && s ? [g, p] : l ? g : s ? p : null\n        }, n.extent = function(t) {\n            var e, r, u, i, c;\n            return arguments.length ? (l && (e = t[0], r = t[1], s && (e = e[0], r = r[0]), o = [e, r], l.invert && (e = l(e), r = l(r)), e > r && (c = e, e = r, r = c), (e != f[0] || r != f[1]) && (f = [e, r])), s && (u = t[0], i = t[1], l && (u = u[1], i = i[1]), a = [u, i], s.invert && (u = s(u), i = s(i)), u > i && (c = u, u = i, i = c), (u != h[0] || i != h[1]) && (h = [u, i])), n) : (l && (o ? (e = o[0], r = o[1]) : (e = f[0], r = f[1], l.invert && (e = l.invert(e), r = l.invert(r)), e > r && (c = e, e = r, r = c))), s && (a ? (u = a[0], i = a[1]) : (u = h[0], i = h[1], s.invert && (u = s.invert(u), i = s.invert(i)), u > i && (c = u, u = i, i = c))), l && s ? [\n                [e, u],\n                [r, i]\n            ] : l ? [e, r] : s && [u, i])\n        }, n.clear = function() {\n            return n.empty() || (f = [0, 0], h = [0, 0], o = a = null), n\n        }, n.empty = function() {\n            return !!l && f[0] == f[1] || !!s && h[0] == h[1]\n        }, ta.rebind(n, c, \"on\")\n    };\n    var Hl = {\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        Ol = [\n            [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"],\n            [\"e\", \"w\"],\n            [\"n\", \"s\"],\n            []\n        ],\n        Il = ac.format = gc.timeFormat,\n        Yl = Il.utc,\n        Zl = Yl(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n    Il.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? Jo : Zl, Jo.parse = function(n) {\n        var t = new Date(n);\n        return isNaN(t) ? null : t\n    }, Jo.toString = Zl.toString, ac.second = Ft(function(n) {\n        return new cc(1e3 * Math.floor(n / 1e3))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 1e3 * Math.floor(t))\n    }, function(n) {\n        return n.getSeconds()\n    }), ac.seconds = ac.second.range, ac.seconds.utc = ac.second.utc.range, ac.minute = Ft(function(n) {\n        return new cc(6e4 * Math.floor(n / 6e4))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 6e4 * Math.floor(t))\n    }, function(n) {\n        return n.getMinutes()\n    }), ac.minutes = ac.minute.range, ac.minutes.utc = ac.minute.utc.range, ac.hour = Ft(function(n) {\n        var t = n.getTimezoneOffset() / 60;\n        return new cc(36e5 * (Math.floor(n / 36e5 - t) + t))\n    }, function(n, t) {\n        n.setTime(n.getTime() + 36e5 * Math.floor(t))\n    }, function(n) {\n        return n.getHours()\n    }), ac.hours = ac.hour.range, ac.hours.utc = ac.hour.utc.range, ac.month = Ft(function(n) {\n        return n = ac.day(n), n.setDate(1), n\n    }, function(n, t) {\n        n.setMonth(n.getMonth() + t)\n    }, function(n) {\n        return n.getMonth()\n    }), ac.months = ac.month.range, ac.months.utc = ac.month.utc.range;\n    var Vl = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6],\n        Xl = [\n            [ac.second, 1],\n            [ac.second, 5],\n            [ac.second, 15],\n            [ac.second, 30],\n            [ac.minute, 1],\n            [ac.minute, 5],\n            [ac.minute, 15],\n            [ac.minute, 30],\n            [ac.hour, 1],\n            [ac.hour, 3],\n            [ac.hour, 6],\n            [ac.hour, 12],\n            [ac.day, 1],\n            [ac.day, 2],\n            [ac.week, 1],\n            [ac.month, 1],\n            [ac.month, 3],\n            [ac.year, 1]\n        ],\n        $l = Il.multi([\n            [\".%L\", function(n) {\n                return n.getMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getDay() && 1 != n.getDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getMonth()\n            }],\n            [\"%Y\", Ne]\n        ]),\n        Bl = {\n            range: function(n, t, e) {\n                return ta.range(Math.ceil(n / e) * e, +t, e).map(Ko)\n            },\n            floor: y,\n            ceil: y\n        };\n    Xl.year = ac.year, ac.scale = function() {\n        return Go(ta.scale.linear(), Xl, $l)\n    };\n    var Wl = Xl.map(function(n) {\n            return [n[0].utc, n[1]]\n        }),\n        Jl = Yl.multi([\n            [\".%L\", function(n) {\n                return n.getUTCMilliseconds()\n            }],\n            [\":%S\", function(n) {\n                return n.getUTCSeconds()\n            }],\n            [\"%I:%M\", function(n) {\n                return n.getUTCMinutes()\n            }],\n            [\"%I %p\", function(n) {\n                return n.getUTCHours()\n            }],\n            [\"%a %d\", function(n) {\n                return n.getUTCDay() && 1 != n.getUTCDate()\n            }],\n            [\"%b %d\", function(n) {\n                return 1 != n.getUTCDate()\n            }],\n            [\"%B\", function(n) {\n                return n.getUTCMonth()\n            }],\n            [\"%Y\", Ne]\n        ]);\n    Wl.year = ac.year.utc, ac.scale.utc = function() {\n        return Go(ta.scale.linear(), Wl, Jl)\n    }, ta.text = At(function(n) {\n        return n.responseText\n    }), ta.json = function(n, t) {\n        return Nt(n, \"application/json\", Qo, t)\n    }, ta.html = function(n, t) {\n        return Nt(n, \"text/html\", na, t)\n    }, ta.xml = At(function(n) {\n        return n.responseXML\n    }), \"function\" == typeof define && define.amd ? define(ta) : \"object\" == typeof module && module.exports && (module.exports = ta), this.d3 = ta\n}();", "odoo.define('account_reports.activity', function (require) {\n\"use strict\";\n\nvar core = require('web.core');\nvar AccountActivity = require('account.activity');\n\nvar _t = core._t;\n\nAccountActivity.include({\n    events: _.extend({\n        'click .o_open_vat_report': '_onOpenReport',\n    }, AccountActivity.prototype.events),\n\n     _onOpenReport: function(e) {\n        e.stopPropagation();\n        e.preventDefault();\n        var self = this;\n        var id = $(e.target).data('id') || false;\n        if (id) {\n            this._rpc({\n                    model: 'mail.activity',\n                    method: 'action_open_tax_report',\n                    args: [id],\n                }).then(function (action) {\n                    self.do_action(action);\n                });\n        }\n    }\n});\n\n});\n", "odoo.define('account_reports.account_report', function (require) {\n'use strict';\n\nvar core = require('web.core');\nvar Context = require('web.Context');\nvar AbstractAction = require('web.AbstractAction');\nvar Dialog = require('web.Dialog');\nvar datepicker = require('web.datepicker');\nvar session = require('web.session');\nvar field_utils = require('web.field_utils');\nvar RelationalFields = require('web.relational_fields');\nvar StandaloneFieldManagerMixin = require('web.StandaloneFieldManagerMixin');\nvar { WarningDialog } = require(\"@web/legacy/js/_deprecated/crash_manager_warning_dialog\");\nvar Widget = require('web.Widget');\n\nvar QWeb = core.qweb;\nvar _t = core._t;\n\n/*\n *  Clone the table to be able to keep the header in a fixed position.\n *  This is used as a scroll handler.\n */\nfunction moveScroll(){\n    var scroll = $(\".o_content\").offset().top;\n    var anchor_top = $(\".o_account_reports_table\").offset().top;\n    var anchor_bottom = $(\".js_account_report_footnotes\").offset().top;\n    if (scroll > anchor_top && scroll < anchor_bottom) {\n        var clone_table = $(\"#table_header_clone\");\n        if(clone_table.length == 0){\n            clone_table = $(\".o_account_reports_table\").clone();\n            clone_table.attr('id', 'table_header_clone');\n            clone_table.css({\n                top: scroll,\n                width: $(\".o_account_reports_table\").width(),\n            });\n            $(\".table-responsive\").append(clone_table);\n        }\n    } else {\n        $(\"#table_header_clone\").remove();\n    }\n}\nfunction recomputeHeader() {\n    $(\"#table_header_clone\").remove();\n    moveScroll();\n}\n\nvar M2MFilters = Widget.extend(StandaloneFieldManagerMixin, {\n    /**\n     * @constructor\n     * @param {Object} fields\n     */\n    init: function (parent, fields) {\n        this._super.apply(this, arguments);\n        StandaloneFieldManagerMixin.init.call(this);\n        this.fields = fields;\n        this.widgets = {};\n    },\n    /**\n     * @override\n     */\n    willStart: function () {\n        var self = this;\n        var defs = [this._super.apply(this, arguments)];\n        _.each(this.fields, function (field, fieldName) {\n            defs.push(self._makeM2MWidget(field, fieldName));\n        });\n        return Promise.all(defs);\n    },\n    /**\n     * @override\n     */\n    start: function () {\n        var self = this;\n        var $content = $(QWeb.render(\"m2mWidgetTable\", {fields: this.fields}));\n        self.$el.append($content);\n        _.each(this.fields, function (field, fieldName) {\n            self.widgets[fieldName].appendTo($content.find('#'+fieldName+'_field'));\n        });\n        return this._super.apply(this, arguments);\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * This method will be called whenever a field value has changed and has\n     * been confirmed by the model.\n     *\n     * @private\n     * @override\n     * @returns {Promise}\n     */\n    _confirmChange: function () {\n        var self = this;\n        var result = StandaloneFieldManagerMixin._confirmChange.apply(this, arguments);\n        var data = {};\n        _.each(this.fields, function (filter, fieldName) {\n            data[fieldName] = self.widgets[fieldName].value.res_ids;\n        });\n        this.trigger_up('value_changed', data);\n        return result;\n    },\n    /**\n     * This method will create a record and initialize M2M widget.\n     *\n     * @private\n     * @param {Object} fieldInfo\n     * @param {string} fieldName\n     * @returns {Promise}\n     */\n    _makeM2MWidget: function (fieldInfo, fieldName) {\n        var self = this;\n        var options = {};\n        options[fieldName] = {\n            options: {\n                no_create_edit: true,\n                no_create: true,\n            }\n        };\n        return this.model.makeRecord(fieldInfo.modelName, [{\n            fields: [{\n                name: 'id',\n                type: 'integer',\n            }, {\n                name: 'display_name',\n                type: 'char',\n            }],\n            name: fieldName,\n            relation: fieldInfo.modelName,\n            type: 'many2many',\n            value: fieldInfo.value,\n        }], options).then(function (recordID) {\n            self.widgets[fieldName] = new RelationalFields.FieldMany2ManyTags(self,\n                fieldName,\n                self.model.get(recordID),\n                {mode: 'edit',}\n            );\n            self._registerWidget(recordID, fieldName, self.widgets[fieldName]);\n        });\n    },\n});\n\nvar accountReportsWidget = AbstractAction.extend({\n    hasControlPanel: true,\n\n    events: {\n        'input .o_account_reports_filter_input': 'filter_accounts',\n        'click .o_account_reports_summary': 'edit_summary',\n        'click .js_account_report_save_summary': 'save_summary',\n        'click .o_account_reports_footnote_icons': 'delete_footnote',\n        'click .js_account_reports_add_footnote': 'add_edit_footnote',\n        'click .js_account_report_foldable': 'fold_unfold',\n        'click [action]': 'trigger_action',\n        'click .o_account_reports_load_more span': 'load_more',\n        'click .o_account_reports_table thead th': 'selected_column',\n        'click .o_change_expected_date': '_onChangeExpectedDate',\n        'click .o_search_options .dropdown-menu': '_onClickDropDownMenu',\n    },\n\n    custom_events: {\n        'value_changed': function(ev) {\n             var self = this;\n             self.report_options.partner_ids = ev.data.partner_ids;\n             self.report_options.partner_categories = ev.data.partner_categories;\n             self.report_options.analytic_accounts = ev.data.analytic_accounts;\n             self.report_options.analytic_tags = ev.data.analytic_tags;\n             return self.reload().then(function () {\n                 self.$searchview_buttons.find('.account_partner_filter').click();\n                 self.$searchview_buttons.find('.account_analytic_filter').click();\n             });\n         },\n    },\n\n    init: function(parent, action) {\n        this.actionManager = parent;\n        this.report_model = action.context.model;\n        if (this.report_model === undefined) {\n            this.report_model = 'account.report';\n        }\n        this.financial_id = false;\n        if (action.context.id) {\n            this.financial_id = action.context.id;\n        }\n        this.odoo_context = action.context;\n        this.report_options = action.params && action.params.options;\n        this.ignore_session = action.params && action.params.ignore_session;\n        if ((this.ignore_session === 'read' || this.ignore_session === 'both') !== true) {\n            var persist_key = 'report:'+this.report_model+':'+this.financial_id+':'+session.company_id;\n            var company_reload_persist_key = this.get_persist_options_key_for_company_reload(session.user_context['allowed_company_ids']);\n\n            this.report_options = JSON.parse(sessionStorage.getItem(company_reload_persist_key))\n                                  || JSON.parse(sessionStorage.getItem(persist_key))\n                                  || this.report_options;\n\n            // company_reload_persist_key is a one shot; so if it existed (and hence was used),\n            // meaning we are rendering the refreshed report, remove it.\n            sessionStorage.removeItem(company_reload_persist_key);\n        }\n        return this._super.apply(this, arguments);\n    },\n    willStart: async function () {\n        const reportsInfoPromise = this._rpc({\n            model: this.report_model,\n            method: 'get_report_informations',\n            args: [this.financial_id, this.report_options],\n            context: this.odoo_context,\n        }).then(res => this.parse_reports_informations(res));\n        const parentPromise = this._super(...arguments);\n        return Promise.all([reportsInfoPromise, parentPromise]);\n    },\n    start: async function() {\n        this.renderButtons();\n        this.controlPanelProps.cp_content = {\n            $buttons: this.$buttons,\n            $searchview_buttons: this.$searchview_buttons,\n            $pager: this.$pager,\n            $searchview: this.$searchview,\n        };\n        await this._super(...arguments);\n        this.render();\n\n        // A default value has been set for the filter accounts.\n        // Apply the filter to take this value into account.\n        if(\"default_filter_accounts\" in (this.odoo_context || {}))\n            this.$('.o_account_reports_filter_input').val(this.odoo_context.default_filter_accounts).trigger(\"input\");\n    },\n    on_detach_callback: function () {\n        $(window).off('resize', recomputeHeader);\n        this._super.apply(this, arguments);\n    },\n    parse_reports_informations: function(values) {\n        this.report_options = values.options;\n        this.odoo_context = values.context;\n        this.report_manager_id = values.report_manager_id;\n        this.footnotes = values.footnotes;\n        this.buttons = values.buttons;\n\n        this.main_html = values.main_html;\n        this.$searchview_buttons = $(values.searchview_html);\n        this.persist_options();\n    },\n    persist_options: function() {\n        if ((this.ignore_session === 'write' || this.ignore_session === 'both') !== true) {\n            var persist_key = 'report:'+this.report_model+':'+this.financial_id+':'+session.company_id;\n            sessionStorage.setItem(persist_key, JSON.stringify(this.report_options));\n        }\n    },\n    persist_options_for_company_reload: function(company_ids) {\n        /* Stores the current report options in the session, using a key containing company_ids.\n        This is a hack to support tax units properly on the tax report: when selecting a tax\n        unit option, setCompanies is called, and the whole page gets refreshed.\n\n        Due to deep framework implementation magic, setCompanies triggers a willStart before\n        the refresh, then the page is refreshed, then a second willStart is triggered. Each\n        of these willStart calls get_report_informations, and hence recompute the options and lines.\n\n        The refresh makes it so that the tax unit option that just got selected is lost if we don't\n        make it persist in the session. However, doing it with the regular persist_options will cause\n        the first willStart to use it in previous_options while self.env.companies is not yet compatible\n        with it, making the init_filter_multi_company reinitialize it with something inconsistent with\n        what we clicked on, before the second willStart acts using those wrongly reinitialized options\n        as previous_options.\n\n        To circumvent that, we use a specific session key containing company_ids, so that it can be used\n        in willStart to get previous_options if self.env.companies is correct (that is, only in the second willStart,\n        after the refresh). This key is used only once, willStart deletes it after using it.\n        */\n        if ((this.ignore_session === 'write' || this.ignore_session === 'both') !== true) {\n            var persist_key = this.get_persist_options_key_for_company_reload(company_ids);\n            sessionStorage.setItem(persist_key, JSON.stringify(this.report_options));\n        }\n    },\n    get_persist_options_key_for_company_reload: function(company_ids) {\n        company_ids = company_ids ? [...company_ids] : []\n        company_ids.sort((a, b) => a - b);\n        return 'report:reload_company_ids:'+company_ids.toString()+':'+this.report_model+':'+this.financial_id+':'+session.company_id;\n    },\n    // Updates the control panel and render the elements that have yet to be rendered\n    update_cp: function() {\n        this.renderButtons();\n        var status = {\n            cp_content: {\n                $buttons: this.$buttons,\n                $searchview_buttons: this.$searchview_buttons,\n                $pager: this.$pager,\n                $searchview: this.$searchview,\n            },\n        };\n        return this.updateControlPanel(status);\n    },\n    reload: function() {\n        var self = this;\n        return this._rpc({\n                model: this.report_model,\n                method: 'get_report_informations',\n                args: [self.financial_id, self.report_options],\n                context: self.odoo_context,\n            })\n            .then(function(result){\n                self.parse_reports_informations(result);\n                self.render();\n                self.renderButtons();\n                return self.update_cp();\n            });\n    },\n    render: function() {\n        var self = this;\n        this.render_template();\n        this.render_footnotes();\n        this.render_searchview_buttons();\n        this.batch_fold(this.$('.js_account_report_foldable').filter(function() {\n            return !$(this).data('unfolded');\n        }));\n    },\n    render_template: function() {\n        this.$('.o_content').html(this.main_html);\n        this.$('.o_content').scroll(moveScroll);\n        this.$('.o_content').find('.o_account_reports_summary_edit').hide();\n        this.$('[data-toggle=\"tooltip\"]').tooltip();\n        this._add_line_classes();\n    },\n    on_attach_callback: function() {\n        $(window).resize(recomputeHeader);\n        this._super.apply(this, arguments);\n    },\n    _init_line_popups: function(){\n        /*\n            Configure the popover used in the financial reports to display some details about the results given by\n            the report lines like:\n            - the code.\n            - the formula with values.\n            - the domain.\n            - A button to show the account.move.lines.\n        */\n\n        var self = this;\n        _.each(this.$('.o_account_report_popup'), function(popup){\n            $(popup).popover({\n                html: true,\n                template: \"<div class='popover' role='tooltip' style='max-width: 100%; margin-right:80px;'><div class='popover-body'></div></div>\",\n                placement: 'left',\n                trigger: 'focus',\n                container: 'body',\n                delay: {show: 0, hide: 100},\n                content: function(){\n                    var data = JSON.parse(popup.getAttribute('data'));\n\n                    // Render the content.\n                    var $content = $(QWeb.render(popup.getAttribute('template'), data));\n\n                    // Bind the 'view journal items' button with the 'action_view_journal_entries' python method.\n                    $content.find('.js_view_entries').on('click', function(event){\n                        self._rpc({\n                            model: 'account.financial.html.report.line',\n                            method: 'action_view_journal_entries',\n                            args: [$(event.target).data('id'), self.report_options, self.financial_id],\n                            context: self.odoo_context,\n                        })\n                        .then(function(result){\n                            return self.do_action(result);\n                        })\n                    });\n\n                    // Bind the 'Accounts' button with the 'action_view_coa' python method.\n                    $content.find('.js_view_coa').on('click', function(event){\n                        self._rpc({\n                            model: 'account.financial.html.report.line',\n                            method: 'action_view_coa',\n                            args: [$(event.target).data('id'), self.report_options],\n                            context: self.odoo_context,\n                        })\n                        .then(function(result){\n                            return self.do_action(result);\n                        })\n                    });\n\n                    // Bind the 'Report Line Computation' button with the 'action_view_line_computation' python method.\n                    $content.find('.js_view_line_computation').on('click', function(event){\n                        self._rpc({\n                            model: 'account.financial.html.report.line',\n                            method: 'action_view_line_computation',\n                            args: [$(event.target).data('id')],\n                            context: self.odoo_context,\n                        })\n                        .then(function(result){\n                            return self.do_action(result);\n                        })\n                    });\n\n                    // Bind the 'view carryover lines' button with the 'action_view_carryover_lines' python method.\n                    $content.find('.js_view_carryover_lines').on('click', function(event){\n                        self._rpc({\n                            model: 'account.tax.report.line',\n                            method: 'action_view_carryover_lines',\n                            args: [$(event.target).data('id'), self.report_options],\n                            context: self.odoo_context,\n                        })\n                        .then(function(result){\n                            return self.do_action(result);\n                        })\n                    });\n\n                    // Highlight involved codes during formula evaluation.\n                    _.each($content.find('.js_popup_formula'), function(element){\n                        $(element).on(\"mouseenter\", function(event){\n                            $(element).addClass('o_financial_report_hover_popup');\n                            self.$(\"[code='\" + element.textContent + \"']\").addClass('o_financial_report_hover_popup');\n                        });\n                        $(element).on(\"mouseleave\", function(event){\n                            $(element).removeClass('o_financial_report_hover_popup');\n                            self.$(\"[code='\" + element.textContent + \"']\").removeClass('o_financial_report_hover_popup');\n                        });\n                    });\n\n                    // Redirect to another report.\n                    _.each($content.find('.js_popup_open_report'), function(element){\n                        $(element).on(\"click\", function(event){\n                            var $target = $(event.target);\n                            self._rpc({\n                                model: 'account.financial.html.report',\n                                method: 'action_redirect_to_report',\n                                args: [$target.data('id'), self.report_options, $target.data('target')],\n                                context: self.odoo_context,\n                            })\n                            .then(function(result){\n                                return self.do_action(result);\n                            })\n                        });\n                    });\n\n                    return $content;\n                }\n            });\n\n            // Triggered when the popup is closed without mouseleave event.\n            $(popup).on(\"hidden.bs.popover\", function(element){\n                self.$('.js_popup_formula').removeClass('o_financial_report_hover_popup');\n            });\n        });\n    },\n    _add_line_classes: function() {\n        /* Pure JS to improve performance in very cornered case (~200k lines)\n         * Jquery code:\n         *  this.$('.o_account_report_line').filter(function () {\n         *      return $(this).data('unfolded') === 'True';\n         *  }).parent().addClass('o_js_account_report_parent_row_unfolded');\n         */\n        var el = this.$el[0];\n        var report_lines = el.getElementsByClassName('o_account_report_line');\n        for (var l=0; l < report_lines.length; l++) {\n            var line = report_lines[l];\n            var unfolded = line.dataset.unfolded;\n            if (unfolded === 'True') {\n                line.parentNode.classList.add('o_js_account_report_parent_row_unfolded');\n            }\n        }\n        // This selector is not adaptable in pure JS\n        this.$('tr[data-parent-id]').addClass('o_js_account_report_inner_row');\n\n        this._init_line_popups();\n     },\n    filter_accounts: function(e) {\n        var self = this;\n        var query = e.target.value.trim().toLowerCase();\n        this.filterOn = false;\n        this.$('.o_account_searchable_line').each(function(index, el) {\n            var $accountReportLineFoldable = $(el);\n            var line_id = $accountReportLineFoldable.find('.o_account_report_line').data('id');\n            var $childs = self.$('tr[data-parent-id=\"'+$.escapeSelector(String(line_id))+'\"]');\n\n            // Only the direct text node, not text situated in other child nodes\n            const lineContent = $accountReportLineFoldable.find('.account_report_line_name').contents();\n            const lineText = lineContent.length > 0 ? lineContent.get(0).nodeValue.trim() : '';\n\n            // The python does this too\n            var queryFound = lineText.split(' ').some(function (str) {\n                return str.toLowerCase().startsWith(query);\n            });\n\n            $accountReportLineFoldable.toggleClass('o_account_reports_filtered_lines', !queryFound);\n            $childs.toggleClass('o_account_reports_filtered_lines', !queryFound);\n\n            if (!queryFound) {\n                self.filterOn = true;\n            }\n        });\n        if (this.filterOn) {\n            this.$('.o_account_reports_level1.total').hide();\n        }\n        else {\n            this.$('.o_account_reports_level1.total').show();\n        }\n        this.report_options['filter_accounts'] = query;\n        this.render_footnotes();\n    },\n    selected_column: function(e) {\n        var self = this;\n        if (self.report_options.selected_column !== undefined) {\n            var col_number = Array.prototype.indexOf.call(e.currentTarget.parentElement.children, e.currentTarget) + 1; // we can't have negative 0 so lets start index at 1\n            if (self.report_options.selected_column && self.report_options.selected_column == col_number) {\n                self.report_options.selected_column = -col_number;\n            } else {\n                self.report_options.selected_column = col_number;\n            }\n            self.reload()\n        }\n    },\n    _onChangeExpectedDate: function (event) {\n        var self = this;\n        var split_target = $(event.target).attr('data-id').split(\"-\");\n        var targetID = parseInt(split_target[split_target.length - 1]);\n        var split_parent = $(event.target).attr('parent-id').split(\"-\");\n        var parentID = parseInt(split_parent[split_parent.length - 1]);\n        var $content = $(QWeb.render(\"paymentDateForm\", {target_id: targetID}));\n        var paymentDatePicker = new datepicker.DateWidget(this);\n        paymentDatePicker.appendTo($content.find('div.o_account_reports_payment_date_picker'));\n        var save = function () {\n            return this._rpc({\n                model: 'res.partner',\n                method: 'change_expected_date',\n                args: [[parentID], {\n                    move_line_id: parseInt($content.find(\"#target_id\").val()),\n                    expected_pay_date: paymentDatePicker.getValue(),\n                }],\n            }).then(function() {\n                self.reload();\n            });\n        };\n        new Dialog(this, {\n            title: 'Odoo',\n            size: 'medium',\n            $content: $content,\n            buttons: [{\n                text: _t('Save'),\n                classes: 'btn-primary',\n                close: true,\n                click: save\n            },\n            {\n                text: _t('Cancel'),\n                close: true\n            }]\n        }).open();\n    },\n    render_searchview_buttons: function() {\n        var self = this;\n        // bind searchview buttons/filter to the correct actions\n        var $datetimepickers = this.$searchview_buttons.find('.js_account_reports_datetimepicker');\n        var options = { // Set the options for the datetimepickers\n            locale : moment.locale(),\n            format : 'L',\n            icons: {\n                date: \"fa fa-calendar\",\n            },\n        };\n        // attach datepicker\n        $datetimepickers.each(function () {\n            var name = $(this).find('input').attr('name');\n            var defaultValue = $(this).data('default-value');\n            $(this).datetimepicker(options);\n            var dt = new datepicker.DateWidget(options);\n            dt.replace($(this)).then(function () {\n                dt.$el.find('input').attr('name', name);\n                if (defaultValue) { // Set its default value if there is one\n                    dt.setValue(moment(defaultValue));\n                }\n            });\n        });\n        // format date that needs to be show in user lang\n        _.each(this.$searchview_buttons.find('.js_format_date'), function(dt) {\n            var date_value = $(dt).html();\n            $(dt).html((new moment(date_value)).format('ll'));\n        });\n        // fold all menu\n        this.$searchview_buttons.find('.js_foldable_trigger').click(function (event) {\n            $(this).toggleClass('o_closed_menu o_open_menu');\n            self.$searchview_buttons.find('.o_foldable_menu[data-filter=\"'+$(this).data('filter')+'\"]').toggleClass('o_closed_menu');\n        });\n        // render filter (add selected class to the options that are selected)\n        _.each(self.report_options, function(k) {\n            if (k!== null && k.filter !== undefined) {\n                self.$searchview_buttons.find('[data-filter=\"'+k.filter+'\"]').addClass('selected');\n            }\n        });\n        _.each(this.$searchview_buttons.find('.js_account_report_bool_filter'), function(k) {\n            $(k).toggleClass('selected', self.report_options[$(k).data('filter')]);\n        });\n        _.each(this.$searchview_buttons.find('.js_account_report_choice_filter'), function(k) {\n            $(k).toggleClass('selected', (_.filter(self.report_options[$(k).data('filter')], function(el){return ''+el.id == ''+$(k).data('id') && el.selected === true;})).length > 0);\n        });\n        $('.js_account_report_group_choice_filter', this.$searchview_buttons).each(function (i, el) {\n            var $el = $(el);\n            var ids = $el.data('member-ids');\n            $el.toggleClass('selected', _.every(self.report_options[$el.data('filter')], function (member) {\n                // only look for actual ids, discard separators and section titles\n                if(typeof member.id == 'number'){\n                  // true if selected and member or non member and non selected\n                  return member.selected === (ids.indexOf(member.id) > -1);\n                } else {\n                  return true;\n                }\n            }));\n        });\n        _.each(this.$searchview_buttons.find('.js_account_reports_one_choice_filter'), function(k) {\n            $(k).toggleClass('selected', ''+self.report_options[$(k).data('filter')] === ''+$(k).data('id'));\n        });\n        // click events\n        this.$searchview_buttons.find('.js_account_report_date_filter').click(function (event) {\n            self.report_options.date.filter = $(this).data('filter');\n            var error = false;\n            if ($(this).data('filter') === 'custom') {\n                var date_from = self.$searchview_buttons.find('.o_datepicker_input[name=\"date_from\"]');\n                var date_to = self.$searchview_buttons.find('.o_datepicker_input[name=\"date_to\"]');\n                if (date_from.length > 0){\n                    error = date_from.val() === \"\" || date_to.val() === \"\";\n                    self.report_options.date.date_from = field_utils.parse.date(date_from.val());\n                    self.report_options.date.date_to = field_utils.parse.date(date_to.val());\n                }\n                else {\n                    error = date_to.val() === \"\";\n                    self.report_options.date.date_to = field_utils.parse.date(date_to.val());\n                }\n            }\n            if (error) {\n                new WarningDialog(self, {\n                    title: _t(\"Odoo Warning\"),\n                }, {\n                    message: _t(\"Date cannot be empty\")\n                }).open();\n            } else {\n                self.reload();\n            }\n        });\n        this.$searchview_buttons.find('.js_account_report_bool_filter').click(function (event) {\n            var option_value = $(this).data('filter');\n            self.report_options[option_value] = !self.report_options[option_value];\n            if (option_value === 'unfold_all') {\n                self.unfold_all(self.report_options[option_value]);\n            }\n            self.reload();\n        });\n        $('.js_account_report_group_choice_filter', this.$searchview_buttons).click(function () {\n            var option_value = $(this).data('filter');\n            var option_member_ids = $(this).data('member-ids') || [];\n            var is_selected = $(this).hasClass('selected');\n            _.each(self.report_options[option_value], function (el) {\n                // if group was selected, we want to uncheck all\n                el.selected = !is_selected && (option_member_ids.indexOf(Number(el.id)) > -1);\n            });\n            self.reload();\n        });\n        this.$searchview_buttons.find('.js_account_report_choice_filter').click(function (event) {\n            var option_value = $(this).data('filter');\n            var option_id = $(this).data('id');\n            _.filter(self.report_options[option_value], function(el) {\n                if (''+el.id == ''+option_id){\n                    if (el.selected === undefined || el.selected === null){el.selected = false;}\n                    el.selected = !el.selected;\n                } else if (option_value === 'ir_filters') {\n                    el.selected = false;\n                }\n                return el;\n            });\n            self.reload();\n        });\n        var rate_handler = function (event) {\n            var option_value = $(this).data('filter');\n            if (option_value == 'current_currency') {\n                delete self.report_options.currency_rates;\n            } else if (option_value == 'custom_currency') {\n                _.each($('input.js_account_report_custom_currency_input'), function(input) {\n                    self.report_options.currency_rates[input.name].rate = input.value;\n                });\n            }\n            self.reload();\n        }\n        $(document).on('click', '.js_account_report_custom_currency', rate_handler);\n        this.$searchview_buttons.find('.js_account_report_custom_currency').click(rate_handler);\n        this.$searchview_buttons.find('.js_account_reports_one_choice_filter').click(function (event) {\n            var option_value = $(this).data('filter');\n            self.report_options[option_value] = $(this).data('id');\n\n            if (option_value === 'tax_unit') {\n                // Change the currently selected companies depending on the chosen tax_unit option\n                // We need to do that to prevent record rules from accepting records that they shouldn't when generating the report.\n\n                var main_company = session.user_context.allowed_company_ids[0];\n                var companies = [main_company];\n\n                if (self.report_options['tax_unit'] != 'company_only') {\n                    var unit_id = self.report_options['tax_unit'];\n                    var selected_unit = self.report_options['available_tax_units'].filter(unit => unit.id == unit_id)[0];\n                    companies = selected_unit.company_ids;\n                }\n                self.persist_options_for_company_reload(companies); // So that previous_options are kept after the reload performed by setCompanies\n                session.setCompanies(main_company, companies);\n            }\n            else {\n                self.reload();\n            }\n        });\n        this.$searchview_buttons.find('.js_account_report_date_cmp_filter').click(function (event) {\n            self.report_options.comparison.filter = $(this).data('filter');\n            var error = false;\n            var number_period = $(this).parent().find('input[name=\"periods_number\"]');\n            self.report_options.comparison.number_period = (number_period.length > 0) ? parseInt(number_period.val()) : 1;\n            if ($(this).data('filter') === 'custom') {\n                var date_from = self.$searchview_buttons.find('.o_datepicker_input[name=\"date_from_cmp\"]');\n                var date_to = self.$searchview_buttons.find('.o_datepicker_input[name=\"date_to_cmp\"]');\n                if (date_from.length > 0) {\n                    error = date_from.val() === \"\" || date_to.val() === \"\";\n                    self.report_options.comparison.date_from = field_utils.parse.date(date_from.val());\n                    self.report_options.comparison.date_to = field_utils.parse.date(date_to.val());\n                }\n                else {\n                    error = date_to.val() === \"\";\n                    self.report_options.comparison.date_to = field_utils.parse.date(date_to.val());\n                }\n            }\n            if (error) {\n                new WarningDialog(self, {\n                    title: _t(\"Odoo Warning\"),\n                }, {\n                    message: _t(\"Date cannot be empty\")\n                }).open();\n            } else {\n                self.reload();\n            }\n        });\n\n        // partner filter\n        if (this.report_options.partner) {\n            if (!this.M2MFilters) {\n                var fields = {};\n                if ('partner_ids' in this.report_options) {\n                    fields['partner_ids'] = {\n                        label: _t('Partners'),\n                        modelName: 'res.partner',\n                        value: this.report_options.partner_ids.map(Number),\n                    };\n                }\n                if ('partner_categories' in this.report_options) {\n                    fields['partner_categories'] = {\n                        label: _t('Tags'),\n                        modelName: 'res.partner.category',\n                        value: this.report_options.partner_categories.map(Number),\n                    };\n                }\n                if (!_.isEmpty(fields)) {\n                    this.M2MFilters = new M2MFilters(this, fields);\n                    this.M2MFilters.appendTo(this.$searchview_buttons.find('.js_account_partner_m2m'));\n                }\n            } else {\n                this.$searchview_buttons.find('.js_account_partner_m2m').append(this.M2MFilters.$el);\n            }\n        }\n\n        // analytic filter\n        if (this.report_options.analytic) {\n            if (!this.M2MFilters) {\n                var fields = {};\n                if (this.report_options.analytic_accounts) {\n                    fields['analytic_accounts'] = {\n                        label: _t('Accounts'),\n                        modelName: 'account.analytic.account',\n                        value: this.report_options.analytic_accounts.map(Number),\n                    };\n                }\n                if (this.report_options.analytic_tags) {\n                    fields['analytic_tags'] = {\n                        label: _t('Tags'),\n                        modelName: 'account.analytic.tag',\n                        value: this.report_options.analytic_tags.map(Number),\n                    };\n                }\n                if (!_.isEmpty(fields)) {\n                    this.M2MFilters = new M2MFilters(this, fields);\n                    this.M2MFilters.appendTo(this.$searchview_buttons.find('.js_account_analytic_m2m'));\n                }\n            } else {\n                this.$searchview_buttons.find('.js_account_analytic_m2m').append(this.M2MFilters.$el);\n            }\n        }\n    },\n    format_date: function(moment_date) {\n        var date_format = 'YYYY-MM-DD';\n        return moment_date.format(date_format);\n    },\n    renderButtons: function() {\n        var self = this;\n        this.$buttons = $(QWeb.render(\"accountReports.buttons\", {buttons: this.buttons}));\n        // bind actions\n        _.each(this.$buttons.siblings('button'), function(el) {\n            $(el).click(function() {\n                self.$buttons.attr('disabled', true);\n                return self._rpc({\n                        model: self.report_model,\n                        method: $(el).attr('action'),\n                        args: [self.financial_id, self.report_options],\n                        context: self.odoo_context,\n                    })\n                    .then(function(result){\n                        var doActionProm = self.do_action(result);\n                        self.$buttons.attr('disabled', false);\n                        return doActionProm;\n                    })\n                    .guardedCatch(function() {\n                        self.$buttons.attr('disabled', false);\n                    });\n            });\n        });\n        return this.$buttons;\n    },\n    edit_summary: function(e) {\n        var $textarea = $(e.target).parents('.o_account_reports_body').find('textarea[name=\"summary\"]');\n        var height = Math.max($(e.target).parents('.o_account_reports_body').find('.o_account_report_summary').height(), 100); // Compute the height that will be needed\n        // TODO master: remove replacing <br /> (this was kept for existing data)\n        var text = $textarea.val().replace(new RegExp('<br />', 'g'), '\\n'); // Remove unnecessary spaces and line returns\n        $textarea.height(height); // Give it the right height\n        $textarea.val(text);\n        $(e.target).parents('.o_account_reports_body').find('.o_account_reports_summary_edit').show();\n        $(e.target).parents('.o_account_reports_body').find('.o_account_reports_summary').hide();\n        $(e.target).parents('.o_account_reports_body').find('textarea[name=\"summary\"]').focus();\n    },\n    save_summary: function(e) {\n        var self = this;\n        var text = $(e.target).siblings().val().replace(/[ \\t]+/g, ' ');\n        return this._rpc({\n                model: 'account.report.manager',\n                method: 'write',\n                args: [this.report_manager_id, {summary: text}],\n                context: this.odoo_context,\n            })\n            .then(function(result){\n                self.$el.find('.o_account_reports_summary_edit').hide();\n                self.$el.find('.o_account_reports_summary').show();\n                if (!text) {\n                    var $content = $(\"<input type='text' class='o_input' name='summary'/>\");\n                    $content.attr('placeholder', _t('Add a note'));\n                } else {\n                    var $content = $('<span />').text(text).html(function (i, value) {\n                        return value.replace(/\\n/g, '<br>');\n                    });\n                }\n                return $(e.target).parent().siblings('.o_account_reports_summary').find('> .o_account_report_summary').html($content);\n            });\n    },\n    render_footnotes: function() {\n        var self = this;\n        // First assign number based on visible lines\n        var $dom_footnotes = self.$el.find('.js_account_report_line_footnote:not(.folded)');\n        $dom_footnotes.html('');\n        var number = 1;\n        var footnote_to_render = [];\n        _.each($dom_footnotes, function(el) {\n            if ($(el).parents('.o_account_reports_filtered_lines').length > 0) {\n                return;\n            }\n            var line_id = $(el).data('id');\n            var footnote = _.filter(self.footnotes, function(footnote) {return ''+footnote.line === ''+line_id;});\n            if (footnote.length !== 0) {\n                $(el).html('<sup><b class=\"o_account_reports_footnote_sup\"><a href=\"#footnote'+number+'\">'+number+'</a></b></sup>');\n                footnote[0].number = number;\n                number += 1;\n                footnote_to_render.push(footnote[0]);\n            }\n        });\n        // Render footnote template\n        return this._rpc({\n                model: this.report_model,\n                method: 'get_html_footnotes',\n                args: [self.financial_id, footnote_to_render],\n                context: self.odoo_context,\n            })\n            .then(function(result){\n                return self.$el.find('.js_account_report_footnotes').html(result);\n            });\n    },\n    add_edit_footnote: function(e) {\n        // open dialog window with either empty content or the footnote text value\n        var self = this;\n        var line_id = $(e.target).data('id');\n        // check if we already have some footnote for this line\n        var existing_footnote = _.filter(self.footnotes, function(footnote) {\n            return ''+footnote.line === ''+line_id;\n        });\n        var text = '';\n        if (existing_footnote.length !== 0) {\n            text = existing_footnote[0].text;\n        }\n        var $content = $(QWeb.render('accountReports.footnote_dialog', {text: text, line: line_id}));\n        var save = function() {\n            var footnote_text = $('.js_account_reports_footnote_note').val().replace(/[ \\t]+/g, ' ');\n            if (!footnote_text && existing_footnote.length === 0) {return;}\n            if (existing_footnote.length !== 0) {\n                if (!footnote_text) {\n                    return self.$el.find('.footnote[data-id=\"'+existing_footnote[0].id+'\"] .o_account_reports_footnote_icons').click();\n                }\n                // replace text of existing footnote\n                return this._rpc({\n                        model: 'account.report.footnote',\n                        method: 'write',\n                        args: [existing_footnote[0].id, {text: footnote_text}],\n                        context: this.odoo_context,\n                    })\n                    .then(function(result){\n                        _.each(self.footnotes, function(footnote) {\n                            if (footnote.id === existing_footnote[0].id){\n                                footnote.text = footnote_text;\n                            }\n                        });\n                        return self.render_footnotes();\n                    });\n            }\n            else {\n                // new footnote\n                return this._rpc({\n                        model: 'account.report.footnote',\n                        method: 'create',\n                        args: [{line: line_id, text: footnote_text, manager_id: self.report_manager_id}],\n                        context: this.odoo_context,\n                    })\n                    .then(function(result){\n                        self.footnotes.push({id: result, line: line_id, text: footnote_text});\n                        return self.render_footnotes();\n                    });\n            }\n        };\n        new Dialog(this, {title: 'Annotate', size: 'medium', $content: $content, buttons: [{text: 'Save', classes: 'btn-primary', close: true, click: save}, {text: 'Cancel', close: true}]}).open();\n    },\n    delete_footnote: function(e) {\n        var self = this;\n        var footnote_id = $(e.target).parents('.footnote').data('id');\n        return this._rpc({\n                model: 'account.report.footnote',\n                method: 'unlink',\n                args: [footnote_id],\n                context: this.odoo_context,\n            })\n            .then(function(result){\n                // remove footnote from report_information\n                self.footnotes = _.filter(self.footnotes, function(element) {\n                    return element.id !== footnote_id;\n                });\n                return self.render_footnotes();\n            });\n    },\n    fold_unfold: function(e) {\n        var self = this;\n        if ($(e.target).hasClass('caret') || $(e.target).parents('.o_account_reports_footnote_sup').length > 0){return;}\n        e.stopPropagation();\n        e.preventDefault();\n        var line = $(e.target).parents('td');\n        if (line.length === 0) {line = $(e.target);}\n        var method = line[0].dataset.unfolded === 'True' ? this.batch_fold(line) : this.unfold(line);\n        Promise.resolve(method).then(function() {\n            self.render_footnotes();\n            self.persist_options();\n        });\n    },\n    /**\n     * batch implementation of fold.\n     * Useful for 'render' function when\n     * number of lines > 5000.\n     */\n    batch_fold: function(lines) {\n        var parent_ids = new Map();\n        lines.each((it, line) => {\n            let $line = $(line);\n            $line.find('.fa-caret-down').toggleClass('fa-caret-right fa-caret-down');\n            $line.toggleClass('folded');\n            $line.parent('tr').removeClass('o_js_account_report_parent_row_unfolded');\n            parent_ids.set($line.data('id'), $line);\n            var index = this.report_options.unfolded_lines.indexOf($line.data('id'));\n            if (index > -1) {\n                this.report_options.unfolded_lines.splice(index, 1);\n            }\n        });\n        var rows = this.$el.find('tr');\n        var children = rows.map((it, row) => {\n            let $row = $(row);\n            if (parent_ids.has($row.data('parent-id'))) {\n                parent_ids.get($row.data('parent-id'))[0].dataset.unfolded = 'False';\n                $row.find('.js_account_report_line_footnote').addClass('folded');\n                $row.hide();\n                var child = $row.find('[data-id]:first');\n                if (child) {\n                    return child;\n                }\n            }\n        });\n        if (children.length > 0) {\n            this.batch_fold(children);\n        }\n    },\n    /**\n     * \n     * @deprecated \n     * Use batch_fold to fold lines.\n     * To be removed in master.\n     */\n    fold: function(line) {\n        var self = this;\n        var line_id = line.data('id');\n        line.find('.o_account_reports_caret_icon .fa-caret-down').toggleClass('fa-caret-right fa-caret-down');\n        line.toggleClass('folded');\n        $(line).parent('tr').removeClass('o_js_account_report_parent_row_unfolded');\n        var $lines_to_hide = this.$el.find('tr[data-parent-id=\"'+$.escapeSelector(String(line_id))+'\"]');\n        var index = self.report_options.unfolded_lines.indexOf(line_id);\n        if (index > -1) {\n            self.report_options.unfolded_lines.splice(index, 1);\n        }\n        if ($lines_to_hide.length > 0) {\n            line[0].dataset.unfolded = 'False';\n            $lines_to_hide.find('.js_account_report_line_footnote').addClass('folded');\n            $lines_to_hide.hide();\n            _.each($lines_to_hide, function(el){\n                var child = $(el).find('[data-id]:first');\n                if (child) {\n                    self.fold(child);\n                }\n            })\n        }\n        return false;\n    },\n    unfold: function(line) {\n        var self = this;\n        var line_id = line.data('id');\n        line.toggleClass('folded');\n        self.report_options.unfolded_lines.push(line_id);\n        var $lines_in_dom = this.$el.find('tr[data-parent-id=\"'+$.escapeSelector(String(line_id))+'\"]');\n        if ($lines_in_dom.length > 0) {\n            $lines_in_dom.find('.js_account_report_line_footnote').removeClass('folded');\n            $lines_in_dom.show();\n            line.find('.o_account_reports_caret_icon .fa-caret-right').toggleClass('fa-caret-right fa-caret-down');\n            line[0].dataset.unfolded = 'True';\n            this._add_line_classes();\n            return true;\n        }\n        else {\n            return this._rpc({\n                    model: this.report_model,\n                    method: 'get_html',\n                    args: [self.financial_id, self.report_options, line.data('id')],\n                    context: self.odoo_context,\n                })\n                .then(function(result){\n                    $(line).parent('tr').replaceWith(result);\n                    self._add_line_classes();\n                    var displayed_table = $('.o_account_reports_table:not(#table_header_clone)')\n                    displayed_table.find('.js_account_report_foldable').each(function() {\n                        if(!$(this).data('unfolded')) {\n                            self.fold($(this));\n                        }\n                    });\n                });\n        }\n    },\n    load_more: function (ev) {\n        var $line = $(ev.target).parents('td');\n        var id = $line.data('id');\n        var offset = $line.data('offset') || 0;\n        var progress = $line.data('progress') || 0;\n        var remaining = $line.data('remaining') || 0;\n        var options = _.extend({}, this.report_options, {lines_offset: offset, lines_progress: progress, lines_remaining: remaining});\n        var self = this;\n        this._rpc({\n                model: this.report_model,\n                method: 'get_html',\n                args: [this.financial_id, options, id],\n                context: this.odoo_context,\n            })\n            .then(function (result){\n                var $tr = $line.parents('.o_account_reports_load_more');\n                $tr.after(result);\n                $tr.remove();\n                self._add_line_classes();\n            });\n    },\n    unfold_all: function(bool) {\n        var self = this;\n        var lines = this.$el.find('.js_account_report_foldable');\n        self.report_options.unfolded_lines = [];\n        if (bool) {\n            _.each(lines, function(el) {\n                self.report_options.unfolded_lines.push($(el).data('id'));\n            });\n        }\n    },\n    trigger_action: function(e) {\n        e.stopPropagation();\n        var self = this;\n        var action = $(e.target).attr('action');\n        var id = $(e.target).parents('td').data('id');\n        var params = $(e.target).data();\n        var context = new Context(this.odoo_context, params.actionContext || {}, {active_id: id});\n\n        params = _.omit(params, 'actionContext');\n        if (action) {\n            return this._rpc({\n                    model: this.report_model,\n                    method: action,\n                    args: [this.financial_id, this.report_options, params],\n                    context: context.eval(),\n                })\n                .then(function(result){\n                    return self.do_action(result);\n                });\n        }\n    },\n\n    //-------------------------------------------------------------------------\n    // Handlers\n    //-------------------------------------------------------------------------\n\n    /**\n     * When clicking inside a dropdown to modify search options\n     * prevents the bootstrap dropdown to close on itself\n     *\n     * @private\n     * @param {$.Event} ev\n     */\n    _onClickDropDownMenu: function (ev) {\n        ev.stopPropagation();\n    },\n});\n\ncore.action_registry.add('account_report', accountReportsWidget);\n\nreturn accountReportsWidget;\n\n});\n", "/** @odoo-module */\n\nimport { registry } from \"@web/core/registry\";\nimport { download } from \"@web/core/network/download\";\n\nasync function executeAccountReportDownload({ env, action }) {\n    env.services.ui.block();\n    const url = \"/account_reports\";\n    const data = action.data;\n    try {\n      await download({ url, data });\n    } finally {\n      env.services.ui.unblock();\n    }\n}\n\nregistry\n    .category(\"action_handlers\")\n    .add('ir_actions_account_report_download', executeAccountReportDownload);\n", "odoo.define('accountReports.FollowupFormView', function (require) {\n\"use strict\";\n\n/**\n * FollowupFormView\n *\n * The FollowupFormView is a sub-view of FormView. It's used to display\n * the Follow-up reports, and manage the complete flow (send by mail, send\n * letter, ...).\n */\n\nvar FollowupFormController = require('account_followup.FollowupFormController');\nvar FollowupFormModel = require('account_followup.FollowupFormModel');\nvar FollowupFormRenderer = require('account_followup.FollowupFormRenderer');\nvar FormView = require('web.FormView');\nvar viewRegistry = require('web.view_registry');\n\nvar FollowupFormView = FormView.extend({\n    config: _.extend({}, FormView.prototype.config, {\n        Controller: FollowupFormController,\n        Model: FollowupFormModel,\n        Renderer: FollowupFormRenderer,\n    }),\n});\n\nviewRegistry.add('followup_form', FollowupFormView);\n\nreturn FollowupFormView;\n});\n", "odoo.define('account_followup.FollowupFormModel', function (require) {\n\"use strict\";\n\nvar BasicModel = require('web.BasicModel');\nvar field_utils = require('web.field_utils');\nvar session = require('web.session');\nvar time = require('web.time');\n\nvar FollowupFormModel = BasicModel.extend({\n    /**\n     * @override\n     */\n    init: function () {\n        this._super.apply(this, arguments);\n        // Number of Follow-ups DONE\n        this.numberDone = undefined;\n        // Number of Follow-ups REMAINING\n        this.numberTodo = undefined;\n        // Number of Follow-ups SKIPPED\n        this.numberSkipped = undefined;\n        this.currentElementIndex = undefined;\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Set the blocked status of an account.move.line and save in DB.\n     *\n     * @param {Integer} moveLineID id of the account.move.line\n     * @param {boolean} blocked true if the account.move.line is blocked,\n     *                          false otherwise\n     * @return {Promise}\n     */\n    changeBlockedMoveLine: function (moveLineID, blocked) {\n        return this._rpc({\n            model: 'account.move.line',\n            method: 'write_blocked',\n            args: [[moveLineID], blocked]\n        });\n    },\n    /**\n     * Set the payment expected date of an account.move.line and save in DB.\n     *\n     * @param {string} handle Local resource id of a record\n     * @param {Integer} moveLineID id of the account.move.line\n     * @param {Moment} date Expected date\n     * @return {Promise}\n     */\n    changeExpectedDate: function (handle, moveLineID, date) {\n        return this._rpc({\n            model: 'res.partner',\n            method: 'change_expected_date',\n            args: [[this.localData[handle].res_id], {\n                move_line_id: moveLineID,\n                expected_pay_date: date\n            }],\n        });\n    },\n    /**\n     * Change the trust of a partner and save in DB.\n     *\n     * @param {string} handle Local resource id of a record\n     * @param {string} newTrust new trust for the partner (good, normal or bad)\n     * @return {Promise}\n     */\n    changeTrust: function (handle, newTrust) {\n        return this._rpc({\n            model: 'res.partner',\n            method: 'write',\n            args: [[this.localData[handle].res_id], {trust: newTrust}],\n        });\n    },\n    /**\n     * Get the informations about the flow of follow-ups.\n     *\n     * @return {Object} Informations about the progress of the job\n     */\n    getProgressInfos: function () {\n        return {\n            numberDone: this.numberDone,\n            numberTodo: this.numberTodo,\n            currentElementIndex: this.currentElementIndex\n        };\n    },\n    /**\n     *\n     * @return {Integer} number of skipped partners\n     */\n    getSkippedPartners: function () {\n        return this.numberSkipped;\n    },\n    increaseNumberDone: function () {\n        this.numberDone++;\n    },\n    increaseNumberSkipped: function () {\n        this.numberSkipped++;\n    },\n    /**\n     * @return {boolean} true is all followups are done or skipped.\n     */\n    isJobComplete: function () {\n        return this.numberTodo === 0;\n    },\n    /**\n     * @override\n     */\n    __load: function (params) {\n        var self = this;\n        this.modelName = params.modelName;\n        this._computeProgressBar(params.res_id, params.res_ids);\n        return this._super(params).then(function (id){\n            return self._fetch(id);\n        });\n    },\n    /**\n     * @override\n     */\n    __reload: function (handle, params) {\n        if (params.offset !== undefined || params.currentId !== undefined) {\n            this.localData[handle].data.report_manager_id = undefined;\n        }\n        if (params.offset !== undefined) {\n            this.currentElementIndex = params.offset;\n        }\n        if (params.ids !== undefined && params.currentId !== undefined) {\n            this._computeProgressBar(params.currentId, params.ids);\n        }\n        var self = this;\n        return this._super(handle, params).then(function (id){\n            return self._fetch(id);\n        });\n    },\n    /**\n     * Remove the current record from the localData, and return the index of the\n     * next record.\n     *\n     * @param {string} handle Local resource id of a record\n     * @return {integer} index of the next record\n     */\n    removeCurrentRecord: function (handle) {\n        this.numberTodo--;\n        var index = this.localData[handle].res_ids.indexOf(this.localData[handle].res_id);\n        this.localData[handle].res_ids.splice(index, 1);\n        if (this.currentElementIndex >= this.localData[handle].res_ids.length) {\n            this.currentElementIndex = this.localData[handle].res_ids.length-1;\n        }\n        return this.currentElementIndex;\n    },\n    /**\n     * Save the summary, and save it in DB.\n     *\n     * @param {string} handle Local resource id of a record\n     * @param {string} text new summary\n     * @return {Promise}\n     */\n    saveSummary: function (handle, text) {\n        return this._rpc({\n            model: 'account.report.manager',\n            method: 'write',\n            args: [this.localData[handle].data.report_manager_id, {summary: text}],\n        });\n    },\n    /**\n     * Save the email_subject, and save it in DB.\n     *\n     * @param {string} handle Local resource id of a record\n     * @param {string} text new email_subject\n     * @return {Promise}\n     */\n    saveEmailSubject: function (handle, text) {\n        return this._rpc({\n            model: 'account.report.manager',\n            method: 'write',\n            args: [this.localData[handle].data.report_manager_id, {email_subject: text}],\n        });\n    },\n    /**\n     *\n     * @param {string} handle Local resource id of a record\n     * @param {string} date Date of next action\n     */\n    setNextActionDate: function (handle, date) {\n        this.localData[handle].data.next_action_date = date;\n    },\n    /**\n     * Update the date of next action.\n     *\n     * @param {string} handle Local resource id of a record\n     * @return {Promise}\n     */\n    updateNextAction: function (handle, action) {\n        var record = this.localData[handle];\n        var next_action_date = field_utils.parse.date(record.data.next_action_date, {}, {});\n        return this._rpc({\n            model: 'res.partner',\n            method: 'update_next_action',\n            args: [[record.res_id], {\n                next_action_type: record.data.next_action,\n                next_action_date: next_action_date,\n                action: action,\n            }],\n        });\n    },\n    /**\n     * Save the fact that the user has execute a manual action for this record.\n     *\n     * @param {string} handle Local resource id of a record\n     */\n    doManualAction: function (handle) {\n        var level = this.localData[handle].data.followup_level;\n        if (level && level.manual_action) {\n            level.manual_action_done = true;\n        }\n    },\n    /**\n     * Save the fact that the user has print a letter for this record.\n     *\n     * @param {string} handle Local resource id of a record\n     */\n    doPrintLetter: function (handle) {\n        var level = this.localData[handle].data.followup_level;\n        if (level && level.print_letter) {\n            level.print_letter = false;\n        }\n    },\n   /**\n    * Save the fact that the user has send a mail for this record.\n    *\n    * @param {string} handle Local resource id of a record\n    */\n    doSendMail: function (handle) {\n        var level = this.localData[handle].data.followup_level;\n        if (level && level.send_email) {\n            level.send_email = false;\n        }\n    },\n   /**\n    * Save the fact that the user has send an SMS text message for this record.\n    *\n    * @param {string} handle Local resource id of a record\n    */\n    doSendSMS: function (handle) {\n        var level = this.localData[handle].data.followup_level;\n        if (level && level.send_sms) {\n            level.send_sms = false;\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Compute the number of records for the progressBar and the pager.\n     *\n     * @private\n     * @param {string} id id for the local resource\n     * @param {Array} records list of all ids\n     */\n    _computeProgressBar: function (id, records) {\n        records = records || [];\n        this.numberTodo = records.length;\n        this.currentElementIndex = records.indexOf(id);\n        this.numberDone = 0;\n        this.numberSkipped = 0;\n    },\n    /**\n     * Fetch the html of the followup.\n     *\n     * @private\n     * @param {string} id id for the local resource\n     * @returns {Promise<string>} local id of the record\n     */\n    _fetch: function (id) {\n        var self = this;\n        var params = {};\n        if (this.localData[id].data.report_manager_id !== undefined) {\n            params.total_due = this.localData[id].data.total_due\n            params.keep_summary = true;\n        }\n        return this._rpc({\n            model: 'account.followup.report',\n            method: 'get_followup_informations',\n            args: [this.localData[id].res_id, params],\n            kwargs: {context: session.user_context},\n        }).then(function (data) {\n            self.localData[id].data.report_manager_id = data.report_manager_id;\n            self.localData[id].data.followup_html = data.html;\n            self.localData[id].data.total_due = data.total_due;\n            if (!params.keep_summary) {\n                self.localData[id].data.followup_level = data.followup_level || {};\n            }\n            if (data.next_action) {\n                self.localData[id].data.next_action = data.next_action.type;\n                self.localData[id].data.next_action_date = data.next_action.date;\n            }\n            return self.localData[id].id;\n        });\n    },\n});\nreturn FollowupFormModel;\n});\n", "odoo.define('account_followup.FollowupFormRenderer', function (require) {\n\"use strict\";\n\nvar core = require('web.core');\nvar datepicker = require('web.datepicker');\nvar Dialog = require('web.Dialog');\nvar dom = require('web.dom');\nvar FormRenderer = require('web.FormRenderer');\nvar SystrayMenu = require('web.SystrayMenu');\n\nvar QWeb = core.qweb;\nvar _t = core._t;\n\nvar FollowupFormRenderer = FormRenderer.extend({\n    events: _.extend({}, FormRenderer.prototype.events, {\n        'input .o_account_reports_next_action_date_picker input': '_onReminderDate',\n        'change *[name=\"blocked\"]': '_onChangeBlocked',\n        'click .o_change_expected_date': '_onChangeExpectedDate',\n        'click .o_change_trust': '_onChangeTrust',\n        'click .o_account_reports_no_print .o_account_reports_summary': '_onEditSummary',\n        'click .o_account_reports_no_print .o_account_reports_email_subject': '_onEditEmailSubject',\n        'click .js_account_report_save_summary': '_onSaveSummary',\n        'click .js_account_report_save_email_subject': '_onSaveEmailSubject',\n        'click [action]': '_onTriggerAction',\n        'click .o_account_reports_contact_info_call': '_onClickCall',\n    }),\n    /**\n     * @override\n     */\n    init: function () {\n        this._super.apply(this, arguments);\n        this.nextActionDatePicker = new datepicker.DateWidget(this);\n        this.nextActionDatePicker.on('datetime_changed', this, function (){\n            this.trigger_up('next_action_date_changed', {\n                newDate: this.nextActionDatePicker.getValue()\n            });\n        });\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Remove the mail alert above the report.\n     */\n    removeMailAlert: function () {\n        owl.Component.env.services.messaging.get().then(messaging => {\n            const thread = messaging.models['mail.thread'].findFromIdentifyingData({\n                id: this.state.res_id,\n                model: this.state.model,\n            });\n            if (thread) {\n                thread.refresh();\n                thread.refreshActivities();\n                thread.refreshFollowers();\n            }\n        });\n        this.$('div.alert.alert-info.alert-dismissible').remove();\n    },\n    /**\n     * Render the summary in 'edit' mode.\n     */\n    renderEditSummary: function () {\n        dom.autoresize(this.$('textarea[name=\"summary\"]'));\n        this.$('.o_account_reports_summary_edit').show();\n        this.$('.o_account_reports_no_print .o_account_reports_summary').hide();\n        this.$('textarea[name=\"summary\"]').focus();\n    },\n    /**\n     * Render the email subject in 'edit' mode.\n     */\n    renderEditEmailSubject: function () {\n        this.$('.o_account_reports_email_subject_edit').show();\n        this.$('.o_account_reports_no_print .o_account_reports_email_subject').hide();\n        this.$('input[name=\"email_subject\"]').focus();\n    },\n    /**\n     * Render an alert to indicate that an email has been sent.\n     */\n    renderMailAlert: function () {\n        this.$('.o_form_sheet_bg div.o_account_reports_page').prepend(QWeb.render(\"CustomerStatements.send_mail\"));\n    },\n    /**\n     * Render an alert to indicate that an sms has been sent.\n     */\n    renderSMSAlert: function () {\n        this.$('div.o_account_reports_page').prepend(QWeb.render(\"CustomerStatements.send_sms\"));\n    },\n    /**\n     * Render the summary in 'non-edit' mode.\n     *\n     * @param {string} text Summary content\n     */\n    renderSavedSummary: function (text) {\n        this.$('.o_account_reports_summary_edit').hide();\n        this.$('.o_account_reports_no_print .o_account_reports_summary').show();\n        var span_content = this.$('.o_account_report_summary_content');\n        var span_placeholder = this.$('.o_account_report_summary_placeholder');\n        if(text)\n        {\n            span_placeholder.hide();\n            span_content.text(text);\n            span_content.html(span_content.html().replace(/\\n/g, '<br>'))\n            span_content.show();\n        }\n        else\n        {\n            span_placeholder.show();\n            span_content.hide();\n        }\n    },\n    /**\n     * Render the email_subject in 'non-edit' mode.\n     *\n     * @param {string} text Email Subject content\n     */\n    renderSavedEmailSubject: function (text) {\n        this.$('.o_account_reports_email_subject_edit').hide();\n        this.$('.o_account_reports_no_print .o_account_reports_email_subject').show();\n        var span_content = this.$('.o_account_report_email_subject_content');\n        var span_placeholder = this.$('.o_account_report_email_subject_placeholder');\n        if(text)\n        {\n            span_placeholder.hide();\n            span_content.text(text);\n            span_content.show();\n        }\n        else\n        {\n            span_placeholder.show();\n            span_content.hide();\n        }\n    },\n    /**\n     * Render the bullet next to the name of customer according to the trust.\n     *\n     * @param {string} newTrust The new trust to assign to the partner.\n     */\n    renderTrust: function (newTrust) {\n        var colorMap = {\n            good: 'green',\n            normal: 'grey',\n            bad: 'red',\n\n        };\n        var color = colorMap[newTrust];\n        this.$('i.oe-account_followup-trust').attr('style', 'color: ' + color + '; font-size: 0.8em;');\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Create JQueryElement which contains the customer statement.\n     *\n     * @private\n     * @returns {jQueryElement} Element rendered\n     */\n    _renderTagFollowup: function () {\n        var self = this;\n        var $element = $('<div>');\n        $element.html(this.state.data.followup_html);\n        $element.find('.o_account_reports_summary_edit').hide();\n        $element.find('.o_account_reports_email_subject_edit').hide();\n        this.nextActionDatePicker.appendTo($element.find('div.o_account_reports_next_action_date_picker')).then(function() {\n            self.nextActionDatePicker.setValue(new moment(self.state.data.next_action_date));\n        });\n\n        return $element;\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * When a move line is blocked or unblocked, trigger an event to the\n     * controller to write it in DB and reload the HTML to update the total\n     * due and total overdue.\n     *\n     * @private\n     * @param {MouseEvent} event\n     */\n    _onChangeBlocked: function (event) {\n        var checkbox = $(event.target).is(\":checked\");\n        var targetID = $(event.target).parents('tr').find('td[data-id]').data('id');\n        this.trigger_up('on_change_block', {\n            checkbox: checkbox,\n            targetID: targetID\n        });\n    },\n    /**\n     * When the user click on 'Change expected date', it opens a dialog\n     * to allow the user to choose a new date for an account.move.line.\n     *\n     * @private\n     * @param {MouseEvent} event\n     */\n    _onChangeExpectedDate: function (event) {\n        var self = this;\n        var targetID = parseInt($(event.target).attr('data-id'));\n        var $content = $(QWeb.render(\"paymentDateForm\", {target_id: targetID}));\n        var paymentDatePicker = new datepicker.DateWidget(this);\n        paymentDatePicker.appendTo($content.find('div.o_account_reports_payment_date_picker'));\n        var save = function () {\n            self.trigger_up('expected_date_changed', {\n                newDate: paymentDatePicker.getValue(),\n                moveLineID: parseInt($content.find(\"#target_id\").val())\n            });\n        };\n        new Dialog(this, {\n            title: 'Odoo',\n            size: 'medium',\n            $content: $content,\n            buttons: [{\n                text: 'Save',\n                classes: 'btn-primary',\n                close: true,\n                click: save\n            },\n            {\n                text: 'Cancel',\n                close: true\n            }]\n        }).open();\n    },\n    /**\n     * When the trust of a partner is changed, trigger an event to write it in\n     * DB.\n     *\n     * @private\n     * @param {MouseEvent} event\n     */\n    _onChangeTrust: function (event) {\n        var newTrust = $(event.target).data(\"new-trust\");\n        if (!newTrust) {\n            newTrust = $(event.target).parents('a.o_change_trust').data(\"new-trust\");\n        }\n        this.trigger_up('on_change_trust', {\n            newTrust: newTrust\n        });\n    },\n    /**\n     * When the user click on phone, trigger an event to make voip call if voip installed.\n     *\n     * @private\n     * @param {MouseEvent} event\n     */\n    _onClickCall: function (ev) {\n        ev.preventDefault();\n        var $el = $(ev.currentTarget);\n        this.trigger_up('voip_call', {\n            resModel: $el.data('model'),\n            resId: $el.data('id'),\n            number: $el.data('number').toString(),\n        });\n    },\n    /**\n     * When the user click on the summary, he can edit it.\n     *\n     * @private\n     */\n    _onEditSummary: function () {\n        this.renderEditSummary();\n    },\n    /**\n     * When the user click on the email_subject, he can edit it.\n     *\n     * @private\n     */\n    _onEditEmailSubject: function () {\n        this.renderEditEmailSubject();\n    },\n    /**\n     * When changing the reminder date, change it in db\n     *\n     * @private\n     */\n    _onReminderDate: function () {\n        this.trigger_up('on_change_reminder_date');\n    },\n    /**\n     * When the user save the summary, trigger an event to the controller to\n     * save the new summary.\n     *\n     * @private\n     * @param {MouseEvent} event\n     */\n    _onSaveSummary: function (event) {\n        var text = $(event.target).siblings().val().replace(/[ \\t]+/g, ' ');\n        this.trigger_up('on_save_summary', {\n            text: text\n        });\n    },\n    /**\n     * When the user save the email_subject, trigger an event to the controller to\n     * save the new email_subject.\n     *\n     * @private\n     * @param {MouseEvent} event\n     */\n    _onSaveEmailSubject: function (event) {\n        var text = $(event.target).siblings('input[name=\"email_subject\"]').val().replace(/[ \\t]+/g, ' ');\n        this.trigger_up('on_save_email_subject', {\n            text: text\n        });\n    },\n    /**\n     * Trigger an event to the controller to execute an action.\n     *\n     * @private\n     * @param {MouseEvent} event\n     */\n    _onTriggerAction: function (event) {\n        event.stopPropagation();\n        var actionName = $(event.target).attr('action');\n        var resId = parseInt($(event.target).attr('data-id'));\n        var view = parseInt($(event.target).attr('view-id'));\n        this.trigger_up('on_trigger_action', {\n            actionName: actionName,\n            resId: resId,\n            view: view\n        });\n    },\n});\nreturn FollowupFormRenderer;\n});\n", "odoo.define('account_followup.FollowupFormController', function (require) {\n\"use strict\";\n\nvar FormController = require('web.FormController');\nvar core = require('web.core');\nvar QWeb = core.qweb;\nvar _t = core._t;\n\nvar FollowupFormController = FormController.extend({\n    events: _.extend({}, FormController.prototype.events, {\n        'click .o_account_followup_manual_action_button': '_onManualAction',\n        'click .o_account_followup_print_letter_button': '_onPrintLetter',\n        'click .o_account_followup_send_mail_button': '_onSendMail',\n        'click .o_account_followup_send_sms_button': '_onSendSMS',\n        'click .o_account_followup_do_it_later_button': '_onDoItLater',\n        'click .o_account_followup_done_button': '_onDone',\n        'click .o_account_followup_reconcile': '_onReconcile',\n    }),\n    custom_events: _.extend({}, FormController.prototype.custom_events, {\n        expected_date_changed: '_onExpectedDateChanged',\n        next_action_date_changed: '_onChangeReminderDate',\n        on_change_block: '_onChangeBlocked',\n        on_change_trust: '_onChangeTrust',\n        on_save_summary: '_onSaveSummary',\n        on_save_email_subject: '_onSaveEmailSubject',\n        on_trigger_action: '_onTriggerAction'\n    }),\n    /**\n     * @override\n     */\n    init: function () {\n        this._super.apply(this, arguments);\n        // force refresh search view on subsequent navigation\n        delete this.searchView;\n        this.hasActionMenus = false;\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n    /**\n     * @override\n     */\n    renderButtons: function ($node) {\n        this.$buttons = $(QWeb.render(\"CustomerStatements.buttons\", {\n            widget: this\n        }));\n        if ($node) {\n            this.$buttons.appendTo($node);\n        }\n    },\n    /**\n     * Update the buttons according to followup_level.\n     *\n     * @override\n     */\n    updateButtons: function () {\n        let setButtonClass = (button, primary) => {\n            /* Set class 'btn-primary' if parameter `primary` is true\n             * 'btn-secondary' otherwise\n             */\n            let addedClass = primary ? 'btn-primary' : 'btn-secondary'\n            let removedClass = !primary ? 'btn-secondary' : 'btn-primary'\n            this.$buttons.find(`button.${button}`)\n                .removeClass(removedClass).addClass(addedClass);\n        }\n        if (!this.$buttons) {\n            return;\n        }\n        var followupLevel = this.model.localData[this.handle].data.followup_level;\n        setButtonClass('o_account_followup_print_letter_button', followupLevel.print_letter)\n        setButtonClass('o_account_followup_send_mail_button', followupLevel.send_email)\n        setButtonClass('o_account_followup_send_sms_button', followupLevel.send_sms)\n        if (followupLevel.manual_action) {\n            this.$buttons.find('button.o_account_followup_manual_action_button')\n                .html(followupLevel.manual_action_note);\n            setButtonClass('o_account_followup_manual_action_button', !followupLevel.manual_action_done)\n        } else {\n            this.$buttons.find('button.o_account_followup_manual_action_button').hide();\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Check if the follow-up flow is complete (all the follow-up reports are done\n     * or skipped). If the flow is complete, display a rainbow man.\n     *\n     * @private\n     */\n    _checkDone: function () {\n        if (this.model.isJobComplete()){\n            var message = _.str.sprintf(_t('You are done with the follow-ups!<br/>You have skipped %s partner(s).'),\n                this.model.getSkippedPartners());\n            this.trigger_up('show_effect', {\n                type: 'rainbow_man',\n                fadeout: 'no',\n                message: message,\n                messageIsHtml: true,\n            });\n        }\n    },\n    /**\n     * Display the done button in the header and remove any mail alert.\n     *\n     * @private\n     */\n    _displayDone: function () {\n        this.$buttons.find('button.o_account_followup_done_button').show();\n        this.renderer.removeMailAlert();\n    },\n    /**\n     * Display the next follow-up.\n     *\n     * @private\n     */\n    _displayNextFollowup: function () {\n        var currentIndex = this.model.removeCurrentRecord(this.handle);\n        var params = {\n            limit: 1,\n            offset: currentIndex,\n        };\n        this.update(params);\n        this.$buttons.find('button.o_account_followup_done_button').hide();\n        this._checkDone();\n    },\n    _getPartner() {\n        return this.model.get(this.handle, {raw: true}).res_id;\n    },\n    /**\n     * Remove the highlight on Send Email button.\n     *\n     * @private\n     */\n    _removeHighlightEmail: function () {\n        this.$buttons.find('button.o_account_followup_send_mail_button')\n            .removeClass('btn-primary').addClass('btn-secondary');\n    },\n    /**\n     * Remove the highlight on Send SMS button.\n     *\n     * @private\n     */\n    _removeHighlightSMS: function () {\n        this.$buttons.find('button.o_account_followup_send_sms_button')\n            .removeClass('btn-primary').addClass('btn-secondary');\n    },\n    /**\n     * Remove the highlight on Print Letter button.\n     *\n     * @private\n     */\n    _removeHighlightPrint: function () {\n        this.$buttons.find('button.o_account_followup_print_letter_button')\n            .removeClass('btn-primary').addClass('btn-secondary');\n    },\n    /**\n     * Render the custom search view.\n     *\n     * @private\n     */\n    _renderSearchView: function () {\n        var progressInfo = this.model.getProgressInfos();\n        var total = progressInfo.numberDone + progressInfo.numberTodo;\n        this.$searchview = $(QWeb.render(\"CustomerStatements.followupProgressbar\", {\n            current: progressInfo.numberDone,\n            max: progressInfo.numberDone + progressInfo.numberTodo,\n            percent: (progressInfo.numberDone / total * 100),\n        }));\n    },\n    /**\n     * Update the pager with the progress of the follow-ups.\n     *\n     * @private\n     * @override\n     */\n    _updatePaging: function () {\n        const { currentElementIndex, numberTodo } = this.model.getProgressInfos();\n        const state = this.model.get();\n        return this._super(state, {\n            currentMinimum: currentElementIndex + 1,\n            size: numberTodo,\n        });\n    },\n    /**\n     * Replace the search view with a progress bar.\n     *\n     * @override\n     */\n    _updateControlPanelProps: function () {\n        this._super.apply(this, arguments);\n        this._renderSearchView();\n        this.controlPanelProps.cp_content.$searchview = this.$searchview;\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * When a move line is blocked or unblocked, we have to write it in DB\n     * and reload the HTML to update the total due and total overdue.\n     *\n     * @private\n     * @param {OdooEvent} event\n     */\n    _onChangeBlocked: function (event) {\n        var self = this;\n        var checkbox = event.data.checkbox;\n        var targetID = event.data.targetID;\n        this.model.changeBlockedMoveLine(parseInt(targetID), checkbox).then(function () {\n            self.reload();\n        });\n    },\n    /**\n     * When the trust of a partner is changed, we have to write it in DB.\n     *\n     * @private\n     * @param {OdooEvent} event\n     */\n    _onChangeTrust: function (event) {\n        var self = this;\n        var newTrust = event.data.newTrust;\n        this.model.changeTrust(this.handle, newTrust).then(function () {\n            self.renderer.renderTrust(newTrust);\n        });\n    },\n    /**\n     * Update the next reminder date\n     *\n     * @private\n     */\n     _onChangeReminderDate: function(ev) {\n         ev.stopPropagation();\n         this.model.setNextActionDate(this.handle, ev.data.newDate);\n         this.model.updateNextAction(this.handle, 'change_date')\n     },\n    /**\n     * When the user skip the partner, we have to update the next action\n     * date and update the progress and increase the number of\n     * follow-ups SKIPPED.\n     *\n     * @private\n     */\n    _onDoItLater: function () {\n        var self = this;\n        this.model.updateNextAction(this.handle, 'later').then(function () {\n            self.model.increaseNumberSkipped();\n            self._displayNextFollowup();\n        });\n    },\n    /**\n     * When the user mark as done a customer statement, we have to\n     * update the next action date and update the progress,\n     * and increase the number of follow-ups DONE.\n     *\n     * @private\n     */\n    _onDone: function () {\n        var self = this;\n        this.model.updateNextAction(this.handle, 'done').then(function () {\n            self.model.increaseNumberDone();\n            self._displayNextFollowup();\n        });\n    },\n    /**\n     * Change the payment expected date of an account.move.line.\n     *\n     * @private\n     * @param {OdooEvent} event\n     */\n    _onExpectedDateChanged: function (event) {\n        event.stopPropagation();\n        var self = this;\n        this.model.changeExpectedDate(this.handle, event.data.moveLineID, event.data.newDate).then(function () {\n            self.reload();\n        });\n    },\n    /**\n     * When click on 'Reconcile' it will redirect on reconciliation.\n     *\n     * @private\n     */\n    _onReconcile: function () {\n        var context = {\n            'mode': 'customers',\n            'partner_ids': [this._getPartner()],\n            'all_entries': true,\n        }\n        this.do_action({\n            type: 'ir.actions.client',\n            tag: 'manual_reconciliation_view',\n            views: [[false, 'form']],\n            target: 'current',\n            context: context,\n        });\n    },\n    /**\n     * Print the customer statement.\n     *\n     * @private\n     */\n    _onPrintLetter: function () {\n        var self = this;\n        this.model.doPrintLetter(this.handle);\n        var records = {\n            ids: [this._getPartner()],\n        };\n        this._rpc({\n            model: 'account.followup.report',\n            method: 'print_followups',\n            args: [records],\n        })\n        .then(function (result) {\n            self.do_action(result);\n            self._removeHighlightPrint();\n            self._displayDone();\n        });\n    },\n    /**\n     * When the user click on the manual action button, we need to update it\n     * in the backend.\n     *\n     * @private\n     */\n    _onManualAction: function () {\n        var self = this;\n        var partnerID = this.model.localData[this.handle].res_id;\n        var followupLevel = this.model.localData[this.handle].data.followup_level.id;\n        var options = {\n            partner_id: partnerID\n        };\n        this.model.doManualAction(this.handle);\n        if (followupLevel) {\n            options['followup_level'] = followupLevel;\n        }\n        this._rpc({\n            model: 'account.followup.report',\n            method: 'do_manual_action',\n            args: [options]\n        })\n        .then(function () {\n            self._displayDone();\n        });\n    },\n    /**\n     * When the user save the summary, we have to write it in DB.\n     *\n     * @private\n     * @param {OdooEvent} event\n     */\n    _onSaveSummary: function (event) {\n        var self = this;\n        var text = event.data.text;\n        this.model.saveSummary(this.handle, text).then(function (){\n            self.renderer.renderSavedSummary(text);\n        });\n    },\n    /**\n     * When the user save the title, we have to write it in DB.\n     *\n     * @private\n     * @param {OdooEvent} event\n     */\n    _onSaveEmailSubject: function (event) {\n        var self = this;\n        var text = event.data.text;\n        this.model.saveEmailSubject(this.handle, text).then(function (){\n            self.renderer.renderSavedEmailSubject(text);\n        });\n    },\n    /**\n     * Send the mail server-side.\n     *\n     * @private\n     */\n    _onSendMail: function () {\n        var self = this;\n        this.model.doSendMail(this.handle);\n        this.options = {\n            partner_id: this._getPartner(),\n            keep_summary: true,\n        };\n        this._rpc({\n            model: 'account.followup.report',\n            method: 'send_email',\n            args: [this.options],\n        })\n        .then(function () {\n            self._removeHighlightEmail();\n            self._displayDone();\n            self.renderer.renderMailAlert();\n        });\n    },\n    /**\n     * Send the sms server-side.\n     *\n     * @override\n     * @private\n     */\n    async _onSendSMS() {\n        this.model.doSendSMS(this.handle);\n        this.options = {\n            partner_id: this._getPartner()\n        };\n        let action = await this._rpc({\n            model: 'account.followup.report',\n            method: 'send_sms',\n            args: [this.options],\n        })\n        this.do_action(action, {\n            on_close: (infos) => {\n                if (!infos) {\n                    this._removeHighlightSMS()\n                    this._displayDone();\n                    this.renderer.renderSMSAlert();\n                }\n            },\n        })\n    },\n    /**\n     * This method creates an action depending on the name and then executes\n     * this action.\n     *\n     * @private\n     * @param {OdooEvent} event\n     */\n    _onTriggerAction: function (event) {\n        event.stopPropagation();\n        var actionName = event.data.actionName;\n        var action = {\n            type: 'ir.actions.act_window',\n            views: [[false, 'form']],\n            target: 'current',\n        };\n        switch (actionName) {\n            case \"open_partner_form\":\n                _.extend(action, {\n                    res_model: 'res.partner',\n                    res_id: this.model.localData[this.handle].res_id,\n                });\n                break;\n            case \"open_invoice\":\n                _.extend(action, {\n                    res_model: 'account.move',\n                    res_id: event.data.resId,\n                });\n                break;\n            default:\n                action = undefined;\n        }\n        if (action) {\n            this.do_action(action);\n        }\n    },\n});\nreturn FollowupFormController;\n});\n", "odoo.define('account_asset.AssetFormView', function(require) {\n\"use strict\";\n\nvar FormRenderer = require('web.FormRenderer');\nvar FormView = require('web.FormView');\nvar core = require('web.core');\nvar viewRegistry = require('web.view_registry');\n\nvar _t = core._t;\n\nvar AccountAssetFormRenderer = FormRenderer.extend({\n    events: _.extend({}, FormRenderer.prototype.events, {\n        'click .add_original_move_line': '_onAddOriginalMoveLine',\n    }),\n    /*\n     * Open the m2o item selection from another button\n     */\n    _onAddOriginalMoveLine: function(ev) {\n        _.find(this.allFieldWidgets[this.state.id], x => x['name'] == 'original_move_line_ids').onAddRecordOpenDialog();\n    },\n});\n\nvar AssetFormView = FormView.extend({\n    config: _.extend({}, FormView.prototype.config, {\n        Renderer: AccountAssetFormRenderer,\n    }),\n});\n\nviewRegistry.add(\"asset_form\", AssetFormView);\nreturn AssetFormView;\n\n});\n", "odoo.define('account_asset.widget', function(require) {\n\"use strict\";\n\n/**\n * The purpose of this widget is to shows a toggle button on depreciation and\n * installment lines for posted/unposted line. When clicked, it calls the method\n * create_move on the object account.asset.depreciation.line.\n * Note that this widget can only work on the account.asset.depreciation.line\n * model as some of its fields are harcoded.\n */\n\nvar AbstractField = require('web.AbstractField');\nvar core = require('web.core');\nvar registry = require('web.field_registry');\n\nvar _t = core._t;\n\nvar AccountAssetReversedWidget = AbstractField.extend({\n    noLabel: true,\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     */\n    isSet: function () {\n        return true; // it should always be displayed, whatever its value\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     * @private\n     */\n    _render: function () {\n        if (this.recordData.reversal_move_id.res_ids.length) {\n            var $icon = $('<i/>', {\n                title: _t('This move has been reversed')\n            }).addClass('fa fa-exclamation-circle')\n            this.$el.html($icon);\n        }\n    },\n\n});\n\nregistry.add(\"deprec_lines_reversed\", AccountAssetReversedWidget);\n\n});\n", "/** @odoo-module **/\n\nimport { XMLParser } from \"@web/core/utils/xml\";\nimport * as CompileHelpers from \"./dashboard_compiler/compile_helpers\";\n\nconst SUPPORTED_VIEW_TYPES = [\"graph\", \"pivot\", \"cohort\"];\n\nexport class DashboardArchParser extends XMLParser {\n    parse(arch, fields) {\n        const subViewRefs = {};\n        const aggregates = [];\n        const formulae = [];\n        const nodeIdentifier = CompileHelpers.nodeIdentifier();\n\n        this.visitXML(arch, (node) => {\n            if (node.tagName === \"view\") {\n                const type = node.getAttribute(\"type\");\n                if (!SUPPORTED_VIEW_TYPES.includes(type)) {\n                    throw new Error(`Unsupported viewtype \"${type}\" in DashboardView`);\n                }\n                if (type in subViewRefs) {\n                    throw new Error(\n                        `multiple views of the same type is not allowed. Duplicated type: \"${type}\".`\n                    );\n                }\n                subViewRefs[type] = node.getAttribute(\"ref\") || false;\n            }\n            if (node.tagName === \"aggregate\") {\n                const fieldName = node.getAttribute(\"field\");\n                const field = fields[fieldName];\n                let groupOperator = node.getAttribute(\"group_operator\");\n\n                if (!groupOperator && field.group_operator) {\n                    groupOperator = field.group_operator;\n                }\n                // in the dashboard views, many2one fields are fetched with the\n                // group_operator 'count_distinct', which means that the values\n                // manipulated client side for these fields are integers\n\n                //TO DO: Discuss with LPE: on legacy we also change the type of the field : field.type = 'integer';\n                if (field.type === \"many2one\") {\n                    groupOperator = \"count_distinct\";\n                }\n\n                let measure = node.getAttribute(\"measure\");\n                if (measure && measure === \"__count__\") {\n                    measure = \"__count\";\n                }\n                aggregates.push({\n                    name: node.getAttribute(\"name\"),\n                    field: fieldName,\n                    domain: node.getAttribute(\"domain\"),\n                    domainLabel:\n                        node.getAttribute(\"domain_label\") ||\n                        node.getAttribute(\"string\") ||\n                        node.getAttribute(\"name\"),\n                    measure: measure || fieldName,\n                    groupOperator,\n                });\n            }\n            if (node.tagName === \"formula\") {\n                nodeIdentifier(node);\n                formulae.push({\n                    name: node.getAttribute(\"name\") || nodeIdentifier.idFor(),\n                    operation: node.getAttribute(\"value\"),\n                    domain: node.getAttribute(\"domain\"),\n                });\n            }\n        });\n        return { subViewRefs, aggregates, formulae };\n    }\n}\n", "/* @odoo-module */\n\nimport { evaluateExpr } from \"@web/core/py_js/py\";\n\n/**\n * A helper to identify nodes in an arch to allow matching between\n * the parsing of an arch, and the template compilation.\n * Nodes with the same tag will be assigned an incrementing number.\n * Note that, consequently every node of the same tag should be added to produce\n * a reliable ID.\n * @return {Function} An add function to execute on each node of a given tagName\n *  Function.idFor: Produce an Id for the lastNode, or for the given node.\n */\nexport function nodeIdentifier() {\n    const mapping = {};\n    let lastNode;\n\n    function add(node) {\n        const nodeMap = mapping[node.tagName] || {\n            current: null,\n            id: 1,\n        };\n        mapping[node.tagName] = nodeMap;\n\n        if (node !== nodeMap.current) {\n            nodeMap.id++;\n        }\n        nodeMap.current = node;\n        lastNode = node;\n    }\n\n    function idFor(node) {\n        node = node || lastNode;\n        const nodeMap = mapping[node.tagName];\n        return `${node.tagName}_${nodeMap.id}`;\n    }\n\n    return Object.assign(add, {\n        idFor(node) {\n            return idFor(node);\n        },\n    });\n}\n\n/**\n * Helper to add onto a Component node the information of the arch node (e.g. modifiers)\n * This is almost exclusively the support of legacy Widgets.\n * @param {Element} node A node from an arch\n * @param {Element} compiled A node of a pre-compiled template\n */\nexport function addLegacyNodeInfo(node, compiled) {\n    const modifiers = getAllModifiers(node);\n    if (modifiers) {\n        const legacyNode = {\n            attrs: { modifiers },\n        };\n        compiled.setAttribute(\"_legacyNode_\", `\"${encodeObjectForTemplate(legacyNode)}\"`);\n    }\n}\n\n/**\n * Encodes an object into a string usable inside a pre-compiled template\n * @param  {Object}\n * @return {string}\n */\nexport function encodeObjectForTemplate(obj) {\n    return encodeURI(JSON.stringify(obj));\n}\n\n/**\n * Decodes a string within an attribute into an Object\n * @param  {string} str\n * @return {Object}\n */\nexport function decodeObjectForTemplate(str) {\n    return JSON.parse(decodeURI(str));\n}\n\n/**\n * Transforms a string into a valid expression to be injected\n * in a template as a props via setAttribute.\n * Example: myString = `Some weird language quote (\") `;\n *     should become in the template:\n *      <Component label=\"&quot;Some weird language quote (\\\\&quot;)&quot; \" />\n *     which should be interpreted by owl as a JS expression being a string:\n *      `Some weird language quote (\") `\n *\n * @param  {string} str The initial value: a pure string to be interpreted as such\n * @return {string}     the valid string to be injected into a component's node props.\n */\nexport function tranformStringForExpression(str) {\n    const delimiter = `\"`;\n    const newStr = str.replaceAll(delimiter, `\\\\${delimiter}`);\n    return `${delimiter}${newStr}${delimiter}`;\n}\n\n/**\n * Combines the existing value of a node attribute with new given parts. The glue\n * is the string used to join the parts.\n * @param {Element} node\n * @param {string} attr\n * @param {string | string[]} parts\n * @param {string} [glue=\" \"]\n */\nexport const combineAttributes = (node, attr, parts, glue = \" \") => {\n    const allValues = [];\n    if (node.hasAttribute(attr)) {\n        allValues.push(node.getAttribute(attr));\n    }\n    allValues.push(...(Array.isArray(parts) ? parts : [parts]));\n    node.setAttribute(attr, allValues.join(glue));\n};\n/**\n * there is no particular expectation of what should be a boolean\n * according to a view's arch\n * Sometimes it is 0 or one, True or False ; true or false\n * @return {boolean}\n */\nfunction evalIrUiViewModifier(expr) {\n    if (!expr) {\n        return false;\n    }\n    return evaluateExpr(expr, {\n        true: true,\n        false: false,\n    });\n}\n\n/**\n * Gets all the Odoo's dynamic modifiers (invisible, readonly etc...) of a Node coming from an arch.\n * @param  {Element} node An arch's node\n * @return {Object} The modifiers set on the node.\n */\nexport function getAllModifiers(node) {\n    const modifiers = node.getAttribute(\"modifiers\");\n    if (!modifiers) {\n        return null;\n    }\n    const parsed = JSON.parse(modifiers);\n    return parsed;\n}\n\n/**\n * Gets a specific modifier, either static or dynamic, on a Node.\n * A static modifier is set as an attribute and is a boolean.\n * A dynamuic modifier is set in the `modifiers` attribute and id a domain.`\n * @param  {Element} node An arch's Node.\n * @param  {string} modifierName\n * @return {boolean|Array}\n */\nexport function getModifier(node, modifierName) {\n    /** @type {string|boolean|Array} (mod) */\n    let mod = node.getAttribute(modifierName);\n    if (mod === null) {\n        const modifiers = getAllModifiers(node);\n        mod = modifiers && modifierName in modifiers ? modifiers[modifierName] : null;\n    }\n\n    if (!Array.isArray(mod) && !(typeof mod === \"boolean\")) {\n        mod = !!evalIrUiViewModifier(mod);\n    }\n    return mod;\n}\n\n/**\n * Specifically gets the \"invisible\" modifier.\n * @param  {Element} node\n * @return {boolean|Array}\n */\nfunction getInvisible(node) {\n    const invisible = getModifier(node, \"invisible\");\n    return invisible || false;\n}\n\n/**\n * An object containing various information about the current\n * compilation from an Arch to a owl template.\n * @typedef {Object} CompilationContext\n */\n\n/**\n * Determine if a node in an arch will always be invisible. Usually if it is the case,\n * the node will not be compiled at all\n * @param  {Element}  node   An arch's node\n * @param  {CompilationContext}\n * @return {boolean}\n */\nexport function isAlwaysInvisible(node, compilationContext) {\n    const invisibleModifer = getInvisible(node);\n    return (\n        !compilationContext.enableInvisible &&\n        typeof invisibleModifer === \"boolean\" &&\n        invisibleModifer\n    );\n}\n\n/**\n * Appends a child node to a parent node\n * @param  {Element} parent\n * @param  {Element|Element[]} node  The future children nodes\n */\nexport function appendTo(parent, node) {\n    if (!node) {\n        return;\n    }\n    if (Array.isArray(node) && node.length) {\n        parent.append(...node);\n    } else {\n        parent.append(node);\n    }\n}\n\n/**\n * A string representing an abject that will be evaluated by a t-attr\n * eg.: `{ attr1: my_expression ? true : false, attr2: true }`\n * @typedef {string} TAttrString\n */\n\n/**\n * A string that links an attribute to an expression\n * eg.: `my_attribute: my_expression ? true : false`\n * @typedef {string} TAttrStringPart\n */\n\n/**\n * Helper to push in a string representing an object\n * @param  {TAttrString} originalTattr\n * @param  {TAttrStringPart} string        string to add onto the object\n * @return {TAttrString}               The new string.\n */\nfunction appendToStringifiedObject(originalTattr, string) {\n    const re = /{(.*)}/;\n    const oldString = re.exec(originalTattr);\n\n    if (oldString) {\n        string = `${oldString[1]}, ${string}`;\n    }\n    return `{ ${string} }`;\n}\n\n/**\n * Appends a string to an attibute (t-attr)\n * @param  {Element} node\n * @param  {string} attr   The attribute's name\n * @param  {TAttrStringPart} string\n */\nexport function appendAttr(node, attr, string) {\n    const attrKey = `t-att-${attr}`;\n    const attrVal = node.getAttribute(attrKey);\n    node.setAttribute(attrKey, appendToStringifiedObject(attrVal, string));\n}\n\n/**\n * Applies an arch's node invisible modifier onto a pre-compiled node\n * That is, set an t-if on the pre-compiled node, evaluating to the right expression\n * or, if enableInvisible is set in params, put the class o_invisible on the compiled node\n * @param {Object} params\n * @param  {Element} params.node     An arch's node\n * @param  {Element} params.compiled A pre-compiled node\n * @param  {CompilationContext} compilationContext\n * @param  {boolean|Array} [invisible]        A node invisible modifier\n * @return {Element|undefined}                Return the -pre-compiled\n *   Element if it is not always invisible\n */\nexport function applyInvisibleModifier({ node, compiled }, compilationContext, invisible) {\n    if (invisible === undefined && node) {\n        invisible = getInvisible(node);\n    }\n    if (!invisible) {\n        return compiled;\n    }\n    if (typeof invisible === \"boolean\" && !compilationContext.enableInvisible) {\n        return;\n    }\n\n    const notInvisibleExpr = `!model.evalDomain(record,${JSON.stringify(invisible)})`;\n    if (!compilationContext.enableInvisible) {\n        combineAttributes(compiled, \"t-if\", `${notInvisibleExpr}`, \" and \");\n    } else {\n        let expr;\n        if (Array.isArray(invisible)) {\n            expr = `${notInvisibleExpr}`;\n        } else {\n            expr = invisible;\n        }\n        appendAttr(compiled, \"class\", `o_invisible_modifier: ${expr}`);\n    }\n    return compiled;\n}\n", "/** @odoo-module */\n\nimport { XMLParser } from \"@web/core/utils/xml\";\nimport {\n    addLegacyNodeInfo,\n    appendAttr,\n    appendTo,\n    applyInvisibleModifier,\n    encodeObjectForTemplate,\n    getAllModifiers,\n    getModifier,\n    isAlwaysInvisible,\n    nodeIdentifier,\n    tranformStringForExpression,\n} from \"./compile_helpers\";\n\n/**\n * An object containing various information about the current\n * compilation from an Arch to a owl template.\n * @typedef {Object} CompilationContext\n */\n\n/**\n * If a group node has a string, compile a title div for it\n * @param  {Element} node an arch's node\n * @return {Element}\n */\nfunction makeGroupTitleRow(node) {\n    const titleDiv = this.document.createElement(\"div\");\n    titleDiv.classList.add(\"o_horizontal_separator\");\n    titleDiv.textContent = node.getAttribute(\"string\");\n    return titleDiv;\n}\n\n/**\n * Compiles a template node for a `<group>`arch's node. Only for first level\n * @param {Object} config\n * @param  {Document} config.document The document from which we can create elements\n * @param  {Function} config.compileNode   A function to compile children nodes\n * @param  {number} [config.outerGroupCol] the default group column\n * @param {Object} params The execution parameters\n * @param  {Element} params.node An arch's node\n * @param  {CompilationContext} params.compilationContext\n * @return {Element} The compiled group node\n */\nfunction compileGroup({ document, compileNode, outerGroupCol }, { node, compilationContext }) {\n    outerGroupCol = outerGroupCol || 2;\n\n    const group = document.createElement(\"div\");\n    group.setAttribute(\"class\", \"o_group\");\n\n    if (node.hasAttribute(\"string\")) {\n        appendTo(group, makeGroupTitleRow(node));\n    }\n\n    const nbCols =\n        \"col\" in node.attributes ? parseInt(node.getAttribute(\"col\"), 10) : outerGroupCol;\n    const colSize = Math.max(1, Math.round(12 / nbCols));\n\n    compilationContext = Object.create(compilationContext);\n    compilationContext.groupLevel = (compilationContext.groupLevel || 1) + 1;\n    for (let child of node.children) {\n        if (child.tagName === \"newline\") {\n            appendTo(group, this.doc.createElement(\"br\"));\n            continue;\n        }\n        const compiled = compileNode(child, compilationContext);\n        if (!compiled) {\n            continue;\n        }\n        const colspan =\n            \"colspan\" in child.attributes ? parseInt(node.getAttribute(\"colspan\"), 10) : 1;\n\n        compiled.classList.add(`o_group_col_${colSize * colspan}`);\n        appendTo(group, compiled);\n    }\n    return group;\n}\n\n/**\n * Compiles a template node for a `<widget>`arch's node\n * @param {Object} config\n * @param  {Document} config.document The document from which we can create elements\n * @param {Object} params The execution parameters\n * @param  {Element} params.node An arch's node\n * @return {Element} The compiled ViewWidget node\n */\nfunction compileWidget({ document }, { node }) {\n    const viewWidget = document.createElement(\"ViewWidget\");\n    viewWidget.setAttribute(\"model\", \"model\");\n    viewWidget.setAttribute(\"widgetName\", `\"${node.getAttribute(\"name\")}\"`);\n    if (\"title\" in node.attributes) {\n        viewWidget.setAttribute(\"title\", `\"${node.getAttribute(\"title\")}\"`);\n    }\n    addLegacyNodeInfo(node, viewWidget);\n\n    return viewWidget;\n}\n\nfunction setSampleDisable(node) {\n    appendAttr(node, \"class\", \"o_sample_data_disabled: model.useSampleModel\");\n}\n\nexport class DashboardCompiler {\n    constructor() {\n        this.doc = new DOMParser().parseFromString(\"<templates />\", \"text/xml\");\n        this.OUTER_GROUP_COL = 6;\n        this.nodeIdentifier = nodeIdentifier();\n    }\n\n    compileArch(arch) {\n        const node = new XMLParser().parseXML(arch);\n        const compiled = this.compile(node, {});\n        return new XMLSerializer().serializeToString(compiled);\n    }\n\n    compile(node, params = {}) {\n        const newRoot = this.doc.createElement(\"t\");\n        const child = this.compileNode(node, params);\n        appendTo(newRoot, child);\n        return newRoot;\n    }\n\n    compileDashboard(node, params) {\n        const dash = this.doc.createElement(\"t\");\n        for (const child of node.children) {\n            appendTo(dash, this.compileNode(child, params));\n        }\n        return dash;\n    }\n\n    compileNode(node, params) {\n        this.nodeIdentifier(node);\n        if (isAlwaysInvisible(node, params)) {\n            return;\n        }\n        switch (node.tagName) {\n            case \"dashboard\": {\n                return this.compileDashboard(node, params);\n            }\n            case \"group\": {\n                return this.compileGroup(node, params);\n            }\n            case \"aggregate\": {\n                return this.compileStatistic(node, params);\n            }\n            case \"view\": {\n                return this.compileView(node, params);\n            }\n            case \"formula\": {\n                return this.compileStatistic(node, params);\n            }\n            case \"widget\": {\n                return compileWidget({ document: this.doc }, { node });\n            }\n        }\n    }\n\n    compileGroup(node, params) {\n        const group = compileGroup(\n            {\n                compileNode: this.compileNode.bind(this),\n                outerGroupCol: this.OUTER_GROUP_COL,\n                document: this.doc,\n            },\n            { node, compilationContext: params }\n        );\n        if (node.children.length && node.children[0].tagName === \"widget\") {\n            group.classList.add(\"o_has_widget\");\n        }\n        setSampleDisable(group);\n        return group;\n    }\n\n    compileView(node) {\n        const view = this.doc.createElement(\"ViewWrapper\");\n        const type = node.getAttribute(\"type\");\n        view.setAttribute(\"t-props\", `getViewWrapperProps(\"${type}\")`);\n        view.setAttribute(\"t-key\", \"subViewsRenderKey\");\n        view.setAttribute(\"class\", \"o_subview\");\n        return view;\n    }\n\n    compileStatistic(node, params) {\n        const agg = this.doc.createElement(\"DashboardStatistic\");\n        let aggName;\n        if (\"name\" in node.attributes) {\n            aggName = node.getAttribute(\"name\");\n        } else {\n            aggName = this.nodeIdentifier.idFor(node);\n        }\n        const displayName = node.getAttribute(\"string\") || aggName;\n        agg.setAttribute(\"displayName\", tranformStringForExpression(displayName));\n        agg.setAttribute(\"model\", \"model\");\n        agg.setAttribute(\"name\", `\"${aggName}\"`);\n        agg.setAttribute(\"statisticType\", `\"${node.tagName}\"`);\n\n        if (\"value_label\" in node.attributes) {\n            agg.setAttribute(\n                \"valueLabel\",\n                tranformStringForExpression(node.getAttribute(\"value_label\"))\n            );\n        }\n\n        if (\"widget\" in node.attributes) {\n            agg.setAttribute(\"widget\", `\"${node.getAttribute(\"widget\")}\"`);\n        }\n\n        if (\"help\" in node.attributes) {\n            agg.setAttribute(\"help\", tranformStringForExpression(node.getAttribute(\"help\")));\n        }\n\n        const modifiers = getAllModifiers(node);\n        if (modifiers) {\n            agg.setAttribute(\"modifiers\", `\"${encodeObjectForTemplate(modifiers)}\"`);\n        }\n\n        if (node.tagName === \"aggregate\") {\n            let clickable;\n            if (!(\"clickable\" in node.attributes)) {\n                clickable = true;\n            } else {\n                clickable = getModifier(node, \"clickable\");\n            }\n            if (clickable) {\n                agg.setAttribute(\"t-on-change-statistic\", `onStatisticChange(\"${aggName}\")`);\n            }\n            agg.setAttribute(\"clickable\", `model.evalDomain(record, ${clickable})`);\n        }\n        let compiled = agg;\n        if (params.groupLevel) {\n            const div = this.doc.createElement(\"div\");\n            div.setAttribute(\"class\", \"o_aggregate_col\");\n            appendTo(div, agg);\n            compiled = div;\n        }\n        return applyInvisibleModifier({ node, compiled }, params);\n    }\n}\n", "/** @odoo-module */\n\nimport BasicModel from \"web.BasicModel\";\nimport { computeVariation } from \"@web/core/utils/numbers\";\nimport { Domain } from \"@web/core/domain\";\nimport { evaluateExpr } from \"@web/core/py_js/py\";\nimport { KeepLast } from \"@web/core/utils/concurrency\";\nimport { Model } from \"@web/views/helpers/model\";\n\n/**\n * @typedef {import(\"@web/search/search_model\").SearchParams} SearchParams\n */\n\nfunction getPseudoRecords(meta, data) {\n    const records = [];\n    for (let i = 0; i < meta.domains.length; i++) {\n        const record = {};\n        for (const [statName, statInfo] of Object.entries(data)) {\n            const { values } = statInfo;\n            record[statName] = values[i];\n        }\n        records.push(record);\n    }\n    return records;\n}\n\nfunction getVariationAsRecords(data) {\n    const periods = [];\n\n    Object.entries(data).forEach(([fName, { variations }]) => {\n        for (const varIndex in variations) {\n            periods[varIndex] = periods[varIndex] || {};\n            periods[varIndex][fName] = variations[varIndex];\n        }\n    });\n    return periods;\n}\n\nfunction setupBasicModel(resModel, { getFieldsInfo, postProcessRecord }) {\n    const basicModel = new BasicModel();\n    const mkDatapoint = basicModel._makeDataPoint;\n\n    const { viewFieldsInfo, fieldsInfo } = getFieldsInfo();\n\n    let legacyModelParams;\n    basicModel._makeDataPoint = (params) => {\n        params = Object.assign({}, params, legacyModelParams);\n        return mkDatapoint.call(basicModel, params);\n    };\n\n    return {\n        makeRecord: async (params, data) => {\n            legacyModelParams = params;\n            const recId = await basicModel.makeRecord(resModel, viewFieldsInfo, fieldsInfo);\n            const record = basicModel.get(recId);\n            postProcessRecord(record, data);\n            return record;\n        },\n        set isSample(bool) {\n            basicModel.isSample = bool;\n        },\n    };\n}\n\nexport class DashboardModel extends Model {\n    setup(params) {\n        super.setup(...arguments);\n\n        this.keepLast = new KeepLast();\n\n        const { aggregates, fields, formulae, resModel } = params;\n        this.metaData = { fields, formulae, resModel };\n\n        this.metaData.aggregates = [];\n        for (const agg of aggregates) {\n            const enrichedCopy = Object.assign({}, agg);\n\n            const groupOperator = agg.groupOperator || \"sum\";\n            enrichedCopy.measureSpec = `${agg.name}:${groupOperator}(${agg.field})`;\n\n            const field = fields[agg.field];\n            enrichedCopy.fieldType = field.type;\n\n            this.metaData.aggregates.push(enrichedCopy);\n        }\n\n        this.metaData.statistics = this._statisticsAsFields();\n\n        this.basicModel = setupBasicModel(this.metaData.resModel, {\n            getFieldsInfo: () => {\n                const legFieldsInfo = {\n                    dashboard: {},\n                };\n\n                this.metaData.aggregates.forEach((agg) => {\n                    legFieldsInfo.dashboard[agg.name] = Object.assign({}, agg, {\n                        type: agg.fieldType,\n                    });\n                });\n\n                Object.entries(this.metaData.fields).forEach(([fName, f]) => {\n                    legFieldsInfo.dashboard[fName] = Object.assign({}, f);\n                });\n\n                let formulaId = 1;\n                this.metaData.formulae.forEach((formula) => {\n                    const formulaName = formula.name || `formula_${formulaId++}`;\n                    const fakeField = Object.assign({}, formula, {\n                        type: \"float\",\n                        name: formulaName,\n                    });\n                    legFieldsInfo.dashboard[formulaName] = fakeField;\n                    legFieldsInfo.formulas = Object.assign(legFieldsInfo.formulas || {}, {\n                        [formulaName]: fakeField,\n                    });\n                });\n                legFieldsInfo.default = legFieldsInfo.dashboard;\n                return { viewFieldsInfo: legFieldsInfo.dashboard, fieldsInfo: legFieldsInfo };\n            },\n            postProcessRecord: (record, data) => {\n                record.context = this.env.searchModel.context;\n                record.viewType = \"dashboard\";\n\n                const pseudoRecords = getPseudoRecords(this.metaData, data);\n                record.data = pseudoRecords[0];\n\n                if (this.metaData.domains.length > 1) {\n                    const comparison = this.env.searchModel.getFullComparison();\n\n                    record.comparisonData = pseudoRecords[1];\n                    record.comparisonTimeRange = comparison.comparisonRange;\n                    record.timeRange = comparison.range;\n                    record.timeRanges = comparison;\n                    record.variationData = getVariationAsRecords(data)[0];\n                }\n            },\n        });\n    }\n\n    /**\n     * @param {SearchParams} searchParams\n     */\n    async load(searchParams) {\n        const { comparison, domain, context } = searchParams;\n        const metaData = Object.assign({}, this.metaData, { context, domain });\n        if (comparison) {\n            metaData.domains = comparison.domains;\n        } else {\n            metaData.domains = [{ arrayRepr: domain, description: null }];\n        }\n        await this.keepLast.add(this._load(metaData));\n        this.basicModel.isSample = metaData.useSampleModel;\n        this.metaData = metaData;\n\n        const legacyParams = {\n            domain: metaData.domain,\n            compare: metaData.domains.length > 1,\n        };\n        this._legacyRecord_ = await this.keepLast.add(\n            this.basicModel.makeRecord(legacyParams, this.data)\n        );\n    }\n\n    /**\n     * @override\n     */\n    hasData() {\n        return this.count > 0;\n    }\n\n    evalDomain(record, expr) {\n        if (!Array.isArray(expr)) {\n            return !!expr;\n        }\n        const domain = new Domain(expr);\n        return domain.contains(getPseudoRecords(this.metaData, this.data)[0]);\n    }\n\n    /**\n     * @param {strnig} statName\n     * @returns {Object}\n     */\n    getStatisticDescription(statName) {\n        return this.metaData.statistics[statName];\n    }\n\n    //--------------------------------------------------------------------------\n    // Protected\n    //--------------------------------------------------------------------------\n\n    /**\n     * @protected\n     * @param {Object} meta\n     * @param {Object} data\n     */\n    _computeVariations(meta, data) {\n        const n = meta.domains.length - 1;\n        for (const statInfo of Object.values(data)) {\n            const { values } = statInfo;\n            statInfo.variations = new Array(n);\n            for (let i = 0; i < n; i++) {\n                statInfo.variations[i] = computeVariation(values[i], values[i + 1]);\n            }\n        }\n    }\n\n    /**\n     * @protected\n     * @param {Object} meta\n     * @param {Object} data\n     */\n    _evalFormulae(meta, data) {\n        const records = getPseudoRecords(meta, data);\n        for (const formula of meta.formulae) {\n            const { name, operation } = formula;\n            data[name] = {\n                values: new Array(meta.domains.length).fill(NaN),\n            };\n            for (let i = 0; i < meta.domains.length; i++) {\n                try {\n                    const value = evaluateExpr(operation, { record: records[i] });\n                    if (isFinite(value)) {\n                        data[name].values[i] = value;\n                    }\n                } catch (e) {\n                    // pass\n                }\n            }\n        }\n    }\n\n    /**\n     * @protected\n     * @param {Object} meta\n     */\n    async _load(meta) {\n        const domainMapping = {};\n        if (this.useSampleModel) {\n            // force a read_group RPC without domain to determine if there is data to display\n            domainMapping[\"[]\"] = [];\n        }\n        for (const agg of meta.aggregates) {\n            const domain = agg.domain || \"[]\";\n            if (domain in domainMapping) {\n                domainMapping[domain].push(agg);\n            } else {\n                domainMapping[domain] = [agg];\n            }\n        }\n\n        const proms = [];\n        const data = {};\n        let count = 0;\n        for (const [domain, aggregates] of Object.entries(domainMapping)) {\n            for (let i = 0; i < meta.domains.length; i++) {\n                const { arrayRepr } = meta.domains[i];\n                proms.push(\n                    this.orm\n                        .readGroup(\n                            meta.resModel,\n                            Domain.and([domain, arrayRepr]).toList(),\n                            aggregates.map((agg) => agg.measureSpec),\n                            [],\n                            { lazy: true },\n                            meta.context\n                        )\n                        .then((groups) => {\n                            const group = groups[0];\n                            if (domain === \"[]\") {\n                                count += group.__count;\n                            }\n                            for (const agg of aggregates) {\n                                if (!data[agg.name]) {\n                                    data[agg.name] = {\n                                        values: new Array(meta.domains.length),\n                                    };\n                                }\n                                const { type: fieldType } = meta.fields[agg.field];\n                                data[agg.name].values[i] = group[agg.name] || ([\"date\", \"datetime\"].includes(fieldType) ? NaN : 0);\n                            }\n                        })\n                );\n            }\n        }\n        await Promise.all(proms);\n\n        this._evalFormulae(meta, data);\n        this._computeVariations(meta, data);\n\n        this.data = data;\n        this.count = count;\n    }\n\n    /**\n     * @protected\n     */\n    _statisticsAsFields() {\n        const fakeFields = {};\n        for (const agg of this.metaData.aggregates) {\n            fakeFields[agg.name] = agg;\n        }\n        for (const formula of this.metaData.formulae) {\n            fakeFields[formula.name] = Object.assign({}, formula, { fieldType: \"float\" });\n        }\n        return fakeFields;\n    }\n}\n\n// TODO:\n// comparisons beware of legacy record\n// check fakeFields in legacyrecord\n", "/** @odoo-module */\n\nimport { registry } from \"@web/core/registry\";\nimport { useService } from \"@web/core/utils/hooks\";\nimport { session } from \"@web/session\";\nimport { Field } from \"@web/fields/fields\";\n\nexport class DashboardStatistic extends owl.Component {\n    setup() {\n        let currencyId = this.props.currencyId;\n        if (!currencyId) {\n            const company = useService(\"company\");\n            const currentCompanyId = company.currentCompany.id;\n            currencyId = session.companies_currency_id[currentCompanyId];\n        }\n\n        const formatterOptions = {\n            monetary: {\n                // in the dashboard view, all monetary values are displayed in the\n                // currency of the current company of the user\n                currencyId,\n                humanReadable: true,\n            },\n            default: {\n                minDigits: 3,\n                digits: 2,\n            },\n        };\n        const widget = \"widget\" in this.props && this.props.widget;\n        const formatters = registry.category(\"formatters\");\n        let statType;\n        if (!widget || formatters.contains(widget)) {\n            statType = widget;\n            if (!statType) {\n                const stat = this.props.model.getStatisticDescription(this.props.name);\n                statType = stat.fieldType;\n            }\n            // Aggregates for many2one always use group operator \"count_distinct\"\n            // and thus must be considered as integers (@see dashboard arch parser)\n            statType = statType === \"many2one\" ? \"integer\" : statType;\n            this.formatOpts = formatterOptions[statType] || formatterOptions.default;\n            this.formatter = statType && formatters.get(statType);\n        }\n        if (!this.formatter) {\n            this.widgetName = widget;\n        }\n        this.formatterString = statType || this.widgetName;\n    }\n\n    getNodeAttributes() {\n        if (this.env.debug || this.props.help) {\n            return {\n                \"data-tooltip-template\": \"web_dashboard.DashboardStatisticTooltip\",\n                \"data-tooltip-info\": JSON.stringify(this.getTooltipInfo()),\n            };\n        }\n        return null;\n    }\n\n    getTooltipInfo() {\n        const props = this.props;\n        return {\n            displayName: props.displayName,\n            formatter: this.formatterString,\n            help: props.help,\n            modifiers: props.modifiers,\n            name: props.name,\n            statistic: props.model.getStatisticDescription(props.name),\n            statisticType: props.statisticType,\n            valueLabel: props.valueLabel,\n        };\n    }\n\n    get hasComparison() {\n        return this.props.model.data[this.props.name].variations.length;\n    }\n\n    getRawValue(index) {\n        return this.props.model.data[this.props.name].values[index];\n    }\n\n    formatValue(value) {\n        if (isNaN(value)) {\n            return \" - \";\n        }\n        return this.formatter(value, this.formatOpts);\n    }\n\n    getFakeRecord(index) {\n        if (!this.recordId) {\n            this.recordId = 1;\n        } else {\n            this.recordId++;\n        }\n        const fakeData = {};\n        for (const [fName, data] of Object.entries(this.props.model.data)) {\n            fakeData[fName] = data.values[index];\n        }\n        const allFields = Object.assign(\n            {},\n            this.props.model.metaData.fields,\n            this.props.model.metaData.statistics\n        );\n        for (const field of Object.values(allFields)) {\n            field.type = field.fieldType;\n        }\n        return {\n            id: this.recordId,\n            viewtype: \"dashboard\",\n            fields: allFields,\n            fieldsInfo: {\n                dashboard: allFields,\n            },\n            data: fakeData,\n        };\n    }\n\n    // Variation\n    get rawVariation() {\n        return this.props.model.data[this.props.name].variations[0];\n    }\n\n    get variationSign() {\n        if (!isNaN(this.rawVariation)) {\n            return Math.sign(this.rawVariation);\n        }\n        return false;\n    }\n\n    get variation() {\n        if (isNaN(this.rawVariation)) {\n            return false;\n        }\n        const percentage = registry.category(\"formatters\").get(\"percentage\");\n        return percentage(this.rawVariation);\n    }\n\n    // Style\n    getBorderClass() {\n        if (this.hasComparison) {\n            const varSign = this.variationSign;\n            if (varSign === 1) {\n                return { \"border-success\": true };\n            } else if (varSign === -1) {\n                return { \"border-danger\": true };\n            }\n        }\n    }\n\n    getAttClass() {\n        const { statisticType, clickable } = this.props;\n        return Object.assign(\n            {\n                o_aggregate: statisticType === \"aggregate\",\n                o_formula: statisticType === \"formula\",\n                o_clickable: clickable,\n            },\n            this.getBorderClass()\n        );\n    }\n\n    get variationClass() {\n        if (this.hasComparison) {\n            const varSign = this.variationSign;\n            if (varSign === 1) {\n                return { \"o_positive text-success\": true };\n            } else if (varSign === -1) {\n                return { \"o_negative text-danger\": true };\n            } else if (varSign === 0) {\n                return { o_null: true };\n            }\n        }\n    }\n\n    onClicked() {\n        if (this.props.clickable) {\n            this.trigger(\"change-statistic\");\n        }\n    }\n}\nDashboardStatistic.template = \"web_dashboard.DashboardStatistic\";\nDashboardStatistic.components = { Field };\n", "/** @odoo-module **/\n\nimport { registry } from \"@web/core/registry\";\nimport { useEffect, useService } from \"@web/core/utils/hooks\";\nimport { capitalize, sprintf } from \"@web/core/utils/strings\";\nimport { useModel } from \"@web/views/helpers/model\";\nimport { standardViewProps } from \"@web/views/helpers/standard_view_props\";\nimport { useSetupView, useViewArch } from \"@web/views/helpers/view_hook\";\nimport { Layout } from \"@web/views/layout\";\nimport { OnboardingBanner } from \"@web/views/onboarding_banner\";\nimport { CallbackRecorder } from \"@web/webclient/actions/action_hook\";\nimport { DashboardArchParser } from \"./dashboard_arch_parser\";\nimport { DashboardCompiler } from \"./dashboard_compiler/dashboard_compiler\";\nimport { DashboardModel } from \"./dashboard_model\";\nimport { DashboardStatistic } from \"./dashboard_statistic/dashboard_statistic\";\nimport { ViewWidget } from \"./view_widget\";\nimport { ViewWrapper } from \"./view_wrapper/view_wrapper\";\n\nconst { Component } = owl;\n\nconst viewRegistry = registry.category(\"views\");\n\nconst SUB_VIEW_CONTROL_PANEL_DISPLAY = {\n    \"bottom-right\": false,\n    \"top-left\": false,\n    \"top-right\": false, // --> top: false\n    adaptToScroll: false,\n};\n\nconst GRAPH_VIEW_PROPS = {\n    displayGroupByMenu: true,\n    displayScaleLabels: false,\n};\n\nconst VIEW_PROPS = {\n    graph: GRAPH_VIEW_PROPS,\n};\n\nexport class DashboardView extends Component {\n    setup() {\n        this._viewService = useService(\"view\");\n        this.action = useService(\"action\");\n        this.subViewsRenderKey = 1;\n\n        const { resModel, arch, fields } = this.props;\n        const processedArch = useViewArch(arch, {\n            compile: (arch) => new this.constructor.Compiler().compileArch(arch),\n            extract: (arch) => new this.constructor.ArchParser().parse(arch, fields),\n        });\n\n        this.template = processedArch.template;\n        const { subViewRefs, aggregates, formulae } = processedArch.extracted;\n        this.subViews = {};\n        Object.keys(subViewRefs).forEach((viewType) => {\n            this.subViews[viewType] = {\n                ref: subViewRefs[viewType],\n                callbackRecorders: {\n                    __getLocalState__: new CallbackRecorder(),\n                    __getGlobalState__: new CallbackRecorder(),\n                    __getContext__: new CallbackRecorder(),\n                },\n                props: null, // will be generated after the loadViews\n            };\n            if (this.props.state) {\n                this.subViews[viewType].state = this.props.state.subViews[viewType];\n            }\n        });\n        this.aggregates = aggregates;\n        this.formulae = formulae;\n\n        useSetupView({\n            getLocalState: () => {\n                return {\n                    subViews: this.callRecordedCallbacks(\"__getLocalState__\"),\n                };\n            },\n            getContext: () => {\n                return this.callRecordedCallbacks(\"__getContext__\");\n            },\n        });\n\n        this.model = useModel(this.constructor.Model, {\n            resModel,\n            fields,\n            aggregates: this.aggregates,\n            formulae: this.formulae,\n        });\n\n        // Always renew every view\n        useEffect(() => {\n            this.subViewsRenderKey++;\n        });\n    }\n\n    async willStart() {\n        let loadViewProms = [];\n        let additionalMeasures = this.aggregates\n            .filter((a) => {\n                const { type } = this.props.fields[a.field];\n                return type === \"many2one\";\n            })\n            .map((a) => a.field);\n\n        const allViews = Object.entries(this.subViews);\n        if (!allViews.length) {\n            return;\n        }\n        const resModel = this.props.resModel;\n        const loadViewsContext = Object.assign({}, this.props.context);\n        const falseRefs = {\n            context: {},\n            views: [],\n        };\n        const withRefs = {\n            context: {},\n            views: [],\n        };\n\n        // group loadViews: false on the one side, and each ref on its own\n        for (const [type, { ref }] of allViews) {\n            if (!ref) {\n                falseRefs.views.push([false, type]);\n            } else {\n                const viewRef = `${type}_view_ref`;\n                withRefs.views.push([false, type]);\n                withRefs.context[viewRef] = ref;\n            }\n        }\n\n        [falseRefs, withRefs].forEach((params) => {\n            const views = params.views;\n            if (!views.length) {\n                return;\n            }\n            const context = Object.assign(loadViewsContext, params.context);\n            loadViewProms.push(\n                this._viewService\n                    .loadViews({ context, views, resModel }, {})\n                    .then((viewDescriptions) => {\n                        Object.entries(viewDescriptions).forEach(([type, viewInfo]) => {\n                            const subView = this.subViews[type];\n                            if (!subView) {\n                                return;\n                            }\n                            const context = Object.assign(\n                                this.props.context,\n                                this.props.context[type] || {}\n                            );\n                            delete context[type];\n                            const { viewId, arch, fields } = viewInfo;\n                            subView.props = {\n                                viewId,\n                                arch,\n                                fields,\n                                additionalMeasures,\n                                context,\n                                type,\n                            };\n                        });\n                    })\n            );\n        });\n\n        await Promise.all(loadViewProms);\n    }\n\n    async willUpdateProps(nextProps) {\n        if (this.currentMeasure) {\n            const states = this.callRecordedCallbacks(\"__getLocalState__\");\n            Object.entries(this.subViews).forEach(([viewType, subView]) => {\n                subView.state = states[viewType];\n                subView.state.metaData = Object.assign({}, subView.state.metaData);\n                if (viewType === \"graph\" || viewType === \"cohort\") {\n                    subView.state.metaData.measure = this.currentMeasure;\n                } else if (viewType === \"pivot\") {\n                    subView.state.metaData.activeMeasures = [this.currentMeasure];\n                }\n            });\n        }\n\n        const { comparison, domain } = nextProps;\n        for (const [type, subView] of Object.entries(this.subViews)) {\n            const context = Object.assign(nextProps.context, nextProps.context[type] || {});\n            delete context[type];\n            Object.assign(subView.props, { comparison, context, domain });\n        }\n\n        const globalStates = this.callRecordedCallbacks(\"__getGlobalState__\");\n        for (const [type, subView] of Object.entries(this.subViews)) {\n            subView.props = Object.assign({}, subView.props, { globalState: globalStates[type] });\n        }\n    }\n\n    /**\n     * Calls a type of recorded callbacks and aggregates their result.\n     * @param {\"__getContext__\"|\"__getLocalState__\"|\"__getGlobalState__\"} name\n     * @returns {Object}\n     */\n    callRecordedCallbacks(name) {\n        const result = {};\n        for (const [viewType, subView] of Object.entries(this.subViews)) {\n            const callbacks = subView.callbackRecorders[name]._callbacks;\n            if (callbacks.length) {\n                result[viewType] = callbacks.reduce((res, c) => {\n                    return { ...res, ...c.callback() };\n                }, {});\n            }\n        }\n        return result;\n    }\n\n    /**\n     * Returns the props of the ViewWrapper components.\n     * @param {string} viewType\n     * @returns {Object}\n     */\n    getViewWrapperProps(viewType) {\n        return {\n            callbackRecorders: this.subViews[viewType].callbackRecorders,\n            switchView: () => this.openFullscreen(viewType),\n            type: viewType,\n            viewProps: this.getViewProps(viewType),\n        };\n    }\n\n    /**\n     * Returns the props to pass to the sub view of the given type.\n     * @param {string} viewType\n     * @returns {Object}\n     */\n    getViewProps(viewType) {\n        const subView = this.subViews[viewType];\n        return Object.assign(\n            {\n                domain: this.props.domain,\n                comparison: this.props.comparison,\n                resModel: this.props.resModel,\n                context: Object.assign({}, this.props.context),\n                searchViewArch: this.props.info.searchViewArch,\n                searchViewFields: this.props.info.searchViewFields,\n                type: viewType,\n                display: { controlPanel: SUB_VIEW_CONTROL_PANEL_DISPLAY },\n            },\n            VIEW_PROPS[viewType],\n            subView.props,\n            {\n                noContentHelp: this.model.useSampleModel ? false : undefined,\n                useSampleModel: this.model.useSampleModel,\n                state: subView.state,\n            }\n        );\n    }\n\n    /**\n     * Opens the requested view in an other action, so that it is displayed in\n     * full screen.\n     * @param {string} viewType\n     * @returns {Promise}\n     */\n    openFullscreen(viewType) {\n        const action = {\n            domain: this.env.searchModel.globalDomain,\n            context: this.props.context,\n            name: sprintf(this.env._t(\"%s Analysis\"), capitalize(viewType)),\n            res_model: this.model.metaData.resModel,\n            type: \"ir.actions.act_window\",\n            views: [[false, viewType]],\n            useSampleModel: false, // disable sample data when zooming on a sub view\n        };\n\n        return this.action.doAction(action, {\n            props: {\n                state: this.callRecordedCallbacks(\"__getLocalState__\")[viewType],\n                globalState: { searchModel: JSON.stringify(this.env.searchModel.exportState()) },\n            },\n        });\n    }\n\n    /**\n     * Handler executed when the user clicks on a statistic.\n     * @param {string} statName\n     */\n    onStatisticChange(statName) {\n        const stat = this.model.getStatisticDescription(statName);\n        this.currentMeasure = stat.measure;\n\n        if (stat.domain) {\n            this.env.searchModel.setDomainParts({\n                dashboardMeasure: {\n                    domain: stat.domain,\n                    facetLabel: stat.domainLabel,\n                },\n            });\n        } else {\n            this.env.searchModel.setDomainParts({ dashboardMeasure: null });\n        }\n    }\n}\nDashboardView.template = \"web_dashboard.DashboardView\";\nDashboardView.props = standardViewProps;\n\nDashboardView.components = { Layout, DashboardStatistic, ViewWidget, ViewWrapper };\n\nDashboardView.Model = DashboardModel;\nDashboardView.ArchParser = DashboardArchParser;\nDashboardView.Compiler = DashboardCompiler;\nDashboardView.Banner = OnboardingBanner;\n\nDashboardView.type = \"dashboard\";\nDashboardView.display_name = \"dashboard\";\nDashboardView.icon = \"fa-tachometer\";\nDashboardView.multiRecord = true;\n\nDashboardView.searchMenuTypes = [\"filter\", \"comparison\", \"favorite\"];\n\nviewRegistry.add(\"dashboard\", DashboardView);\n", "/* @odoo-module */\n\nimport widgetRegistry from \"web.widget_registry\";\nimport widgetRegistryOwl from \"web.widgetRegistry\";\nimport { registry } from \"@web/core/registry\";\nimport { useEffect } from \"@web/core/utils/hooks\";\nimport { ComponentAdapter } from \"web.OwlCompatibility\";\nimport { decodeObjectForTemplate } from \"./dashboard_compiler/compile_helpers\";\n\n/**\n * A Component that supports rendering `<widget />` tags in a view arch\n * It should have minimum legacy support that is:\n * - getting the legacy widget class from the legacy registry\n * - instanciating a legacy widget\n * - passing to it a \"legacy node\", which is a representation of the arch's node\n * It supports instancing components from the \"view_widgets\" new registry\n */\nexport class ViewWidget extends owl.Component {\n    setup() {\n        this.wowlEnv = this.env;\n        this.renderId = 1;\n        useEffect(() => {\n            this.renderId++;\n        });\n        const widgetName = this.props.widgetName;\n        const Widget = registry.category(\"view_widgets\").get(widgetName, null);\n        if (!Widget) {\n            this.isLegacyOwl = true;\n            this.env = owl.Component.env;\n        }\n        this.Widget = Widget || widgetRegistryOwl.get(widgetName) || widgetRegistry.get(widgetName);\n        this.isLegacy = !(this.Widget instanceof owl.Component);\n    }\n\n    get widgetProps() {\n        if (!this.isLegacyOwl) {\n            return this.props;\n        } else {\n            throw new Error(\"To implement ....\");\n        }\n    }\n\n    get widgetArgs() {\n        const record = this.props.model._legacyRecord_;\n        const node = this.props._legacyNode_\n            ? decodeObjectForTemplate(this.props._legacyNode_)\n            : {};\n        node.name = this.props.widgetName;\n        if (this.props.title) {\n            node.attrs = Object.assign(node.attrs || {}, { title: this.props.title });\n        }\n        return [record, node];\n    }\n}\nViewWidget.template = owl.tags.xml/*xml*/ `<t>\n    <ComponentAdapter t-if=\"isLegacy\" Component=\"Widget\" widgetArgs=\"widgetArgs\" t-key=\"renderId\" class=\"o_widget\" />\n    <t t-else=\"\" t-component=\"Widget\" t-props=\"widgetProps\" class=\"o_widget\" />\n</t>\n`;\nViewWidget.components = { ComponentAdapter };\n", "/** @odoo-module **/\n\nimport { useEffect } from \"@web/core/utils/hooks\";\nimport { View } from \"@web/views/view\";\n\nconst { Component, hooks } = owl;\nconst { useSubEnv } = hooks;\n\n/**\n * This file defines the ViewWrapper component, used to wrap sub views in the\n * dashboard. It allows to define a specific env for each sub view, with their\n * own callback recorders such that the dashboard can get their local and global\n * states, and their context.\n *\n * Moreover, it adds a button to open sub views in fullscreen, and changes some\n * classNames on control panel buttons to slightly change their style.\n */\nexport class ViewWrapper extends Component {\n    setup() {\n        useSubEnv(this.props.callbackRecorders);\n        useEffect(() => {\n            const btns = this.el.querySelectorAll(\".btn-primary, .btn-secondary\");\n            btns.forEach((btn) => {\n                btn.classList.remove(\"btn-primary\", \"btn-secondary\");\n                btn.classList.add(\"btn-outline-secondary\");\n            });\n            if (this.props.type === \"cohort\") {\n                this.el\n                    .querySelectorAll(\"[class*=interval_button]\")\n                    .forEach((el) => el.classList.add(\"text-muted\"));\n            }\n        });\n    }\n}\nViewWrapper.template = \"web_dashboard.ViewWrapper\";\nViewWrapper.components = { View };\n", "/** @odoo-module **/\n\nimport { DashboardView } from \"@web_dashboard/dashboard_view\";\nimport { registry } from \"@web/core/registry\";\n\nconst viewRegistry = registry.category(\"views\");\n\n/**\n * This file defines the WebsiteSaleDashboard view and adds it to the view registry.\n * The only difference with Dashboard View is that it has a control panel with a\n * \"Go to website\" button.\n */\nexport class WebsiteSaleDashboardView extends DashboardView {}\nWebsiteSaleDashboardView.template = \"website_sale_dashboard.WebsiteSaleDashboardView\";\n\nviewRegistry.add('website_sale_dashboard', WebsiteSaleDashboardView);\n", "odoo.define('purchase_stock.purchase_steps', function (require) {\n\"use strict\";\n\nvar core = require('web.core');\n\nvar _t = core._t;\nvar PurchaseAdditionalTourSteps = require('purchase.purchase_steps');\n\nPurchaseAdditionalTourSteps.include({\n\n    init: function() {\n        this._super.apply(this, arguments);\n    },\n\n    _get_purchase_stock_steps: function () {\n        this._super.apply(this, arguments);\n        return [{\n            trigger: \".oe_button_box button[name='action_view_picking']\",\n            extra_trigger: \".oe_button_box button[name='action_view_picking']\",\n            content: _t(\"Receive the ordered products.\"),\n            position: \"bottom\",\n            run: 'click',\n        }, {\n            trigger: \".o_statusbar_buttons button[name='button_validate']\",\n            content: _t(\"Validate the receipt of all ordered products.\"),\n            position: \"bottom\",\n            run: 'click',\n        }, {\n            trigger: \".modal-footer .btn-primary\",\n            extra_trigger: \".modal-dialog\",\n            content: _t(\"Process all the receipt quantities.\"),\n            position: \"bottom\",\n        }, {\n            trigger: \".o_back_button a, .breadcrumb-item:not('.active'):last\",\n            content: _t('Go back to the purchase order to generate the vendor bill.'),\n            position: 'bottom',\n        }, {\n            trigger: \".o_statusbar_buttons button[name='action_create_invoice']\",\n            content: _t(\"Generate the draft vendor bill.\"),\n            position: \"bottom\",\n            run: 'click',\n        }\n        ];\n    }\n});\n\nreturn PurchaseAdditionalTourSteps;\n\n});\n", "odoo.define('account_bank_statement_import.import', function (require) {\n\"use strict\";\n\nvar core = require('web.core');\nvar BaseImport = require('base_import.import');\n\nvar _t = core._t;\n\nBaseImport.DataImport.include({\n    renderImportLink: function() {\n        this._super();\n        if (this.res_model == 'account.bank.statement') {\n            this.$(\".import-link\").prop({\"text\": _t(\" Import Template for Bank Statements\"), \"href\": \"/account_bank_statement_import/static/csv/account.bank.statement.csv\"});\n            this.$(\".template-import\").removeClass('d-none');\n        }\n    },   \n});\n\n});\n", "(function (window) {\n\n  StateMachine = {\n\n    //---------------------------------------------------------------------------\n\n    VERSION: \"2.1.0\",\n\n    //---------------------------------------------------------------------------\n\n    Result: {\n      SUCCEEDED:    1, // the event transitioned successfully from one state to another\n      NOTRANSITION: 2, // the event was successfull but no state transition was necessary\n      CANCELLED:    3, // the event was cancelled by the caller in a beforeEvent callback\n      ASYNC:        4, // the event is asynchronous and the caller is in control of when the transition occurs\n    },\n\n    Error: {\n      INVALID_TRANSITION: 100, // caller tried to fire an event that was innapropriate in the current state\n      PENDING_TRANSITION: 200, // caller tried to fire an event while an async transition was still pending\n      INVALID_CALLBACK:   300, // caller provided callback function threw an exception\n    },\n\n    WILDCARD: '*',\n    ASYNC: 'async',\n\n    //---------------------------------------------------------------------------\n\n    create: function(cfg, target) {\n\n      var initial   = (typeof cfg.initial == 'string') ? { state: cfg.initial } : cfg.initial; // allow for a simple string, or an object with { state: 'foo', event: 'setup', defer: true|false }\n      var fsm       = target || cfg.target  || {};\n      var events    = cfg.events || [];\n      var callbacks = cfg.callbacks || {};\n      var map       = {};\n\n      var add = function(e) {\n        var from = (e.from instanceof Array) ? e.from : (e.from ? [e.from] : [StateMachine.WILDCARD]); // allow 'wildcard' transition if 'from' is not specified\n        map[e.name] = map[e.name] || {};\n        for (var n = 0 ; n < from.length ; n++)\n          map[e.name][from[n]] = e.to || from[n]; // allow no-op transition if 'to' is not specified\n      };\n\n      if (initial) {\n        initial.event = initial.event || 'startup';\n        add({ name: initial.event, from: 'none', to: initial.state });\n      }\n\n      for(var n = 0 ; n < events.length ; n++)\n        add(events[n]);\n\n      for(var name in map) {\n        if (map.hasOwnProperty(name))\n          fsm[name] = StateMachine.buildEvent(name, map[name]);\n      }\n\n      for(var name in callbacks) {\n        if (callbacks.hasOwnProperty(name))\n          fsm[name] = callbacks[name]\n      }\n\n      fsm.current = 'none';\n      fsm.is      = function(state) { return this.current == state; };\n      fsm.can     = function(event) { return !this.transition && (map[event].hasOwnProperty(this.current) || map[event].hasOwnProperty(StateMachine.WILDCARD)); }\n      fsm.cannot  = function(event) { return !this.can(event); };\n      fsm.error   = cfg.error || function(name, from, to, args, error, msg) { throw msg; }; // default behavior when something unexpected happens is to throw an exception, but caller can override this behavior if desired (see github issue #3)\n\n      if (initial && !initial.defer)\n        fsm[initial.event]();\n\n      return fsm;\n\n    },\n\n    //===========================================================================\n\n    doCallback: function(fsm, func, name, from, to, args) {\n      if (func) {\n        try {\n          return func.apply(fsm, [name, from, to].concat(args));\n        }\n        catch(e) {\n          return fsm.error(name, from, to, args, StateMachine.Error.INVALID_CALLBACK, \"an exception occurred in a caller-provided callback function\");\n        }\n      }\n    },\n\n    beforeEvent: function(fsm, name, from, to, args) { return StateMachine.doCallback(fsm, fsm['onbefore' + name],                     name, from, to, args); },\n    afterEvent:  function(fsm, name, from, to, args) { return StateMachine.doCallback(fsm, fsm['onafter'  + name] || fsm['on' + name], name, from, to, args); },\n    leaveState:  function(fsm, name, from, to, args) { return StateMachine.doCallback(fsm, fsm['onleave'  + from],                     name, from, to, args); },\n    enterState:  function(fsm, name, from, to, args) { return StateMachine.doCallback(fsm, fsm['onenter'  + to]   || fsm['on' + to],   name, from, to, args); },\n    changeState: function(fsm, name, from, to, args) { return StateMachine.doCallback(fsm, fsm['onchangestate'],                       name, from, to, args); },\n\n\n    buildEvent: function(name, map) {\n      return function() {\n\n        var from  = this.current;\n        var to    = map[from] || map[StateMachine.WILDCARD] || from;\n        var args  = Array.prototype.slice.call(arguments); // turn arguments into pure array\n\n        if (this.transition)\n          return this.error(name, from, to, args, StateMachine.Error.PENDING_TRANSITION, \"event \" + name + \" inappropriate because previous transition did not complete\");\n\n        if (this.cannot(name))\n          return this.error(name, from, to, args, StateMachine.Error.INVALID_TRANSITION, \"event \" + name + \" inappropriate in current state \" + this.current);\n\n        if (false === StateMachine.beforeEvent(this, name, from, to, args))\n          return StateMachine.CANCELLED;\n\n        if (from === to) {\n          StateMachine.afterEvent(this, name, from, to, args);\n          return StateMachine.NOTRANSITION;\n        }\n\n        // prepare a transition method for use EITHER lower down, or by caller if they want an async transition (indicated by an ASYNC return value from leaveState)\n        var fsm = this;\n        this.transition = function() {\n          fsm.transition = null; // this method should only ever be called once\n          fsm.current = to;\n          StateMachine.enterState( fsm, name, from, to, args);\n          StateMachine.changeState(fsm, name, from, to, args);\n          StateMachine.afterEvent( fsm, name, from, to, args);\n        };\n\n        var leave = StateMachine.leaveState(this, name, from, to, args);\n        if (false === leave) {\n          this.transition = null;\n          return StateMachine.CANCELLED;\n        }\n        else if (\"async\" === leave) {\n          return StateMachine.ASYNC;\n        }\n        else {\n          if (this.transition)\n            this.transition(); // in case user manually called transition() but forgot to return ASYNC\n          return StateMachine.SUCCEEDED;\n        }\n\n      };\n    }\n\n  }; // StateMachine\n\n  //===========================================================================\n\n  if (\"function\" === typeof define) {\n    define(\"statemachine\", [], function() { return StateMachine; });\n  }\n  else {\n    window.StateMachine = StateMachine;\n  }\n\n}(this));\n\n", "/** @odoo-module **/\n\nimport { registry } from \"@web/core/registry\";\nimport { useService } from \"@web/core/utils/hooks\";\n\nconst { Component } = owl;\nconst favoriteMenuRegistry = registry.category(\"favoriteMenu\");\n\n/**\n * 'Import records' menu\n *\n * This component is used to import the records for particular model.\n * @extends Component\n */\nexport class ImportRecords extends Component {\n    setup() {\n        this.action = useService(\"action\");\n    }\n\n    //---------------------------------------------------------------------\n    // Protected\n    //---------------------------------------------------------------------\n\n    importRecords() {\n        const { context, resModel } = this.env.searchModel;\n        this.action.doAction({\n            type: \"ir.actions.client\",\n            tag: \"import\",\n            params: { model: resModel, context }\n        });\n    }\n}\n\nImportRecords.template = \"base_import.ImportRecords\";\n\nconst importRecordsItem = {\n    Component: ImportRecords,\n    groupNumber: 4,\n    isDisplayed: ({ config, isSmall }) =>\n        !isSmall &&\n        config.actionType === \"ir.actions.act_window\" &&\n        [\"kanban\", \"list\"].includes(config.viewType)\n        // TODO: add arch info to searchModel?\n        // !!JSON.parse(env.view.arch.attrs.import || \"1\") &&\n        // !!JSON.parse(env.view.arch.attrs.create || \"1\"),\n};\n\nfavoriteMenuRegistry.add(\"import-menu\", importRecordsItem, { sequence: 1 });\n", "odoo.define('base_import.import', function (require) {\n\"use strict\";\n\nvar AbstractAction = require('web.AbstractAction');\nvar config = require('web.config');\nvar core = require('web.core');\nvar Dialog = require('web.Dialog');\nvar session = require('web.session');\nvar time = require('web.time');\nvar fieldUtils = require('web.field_utils');\n\nvar QWeb = core.qweb;\nvar _t = core._t;\nvar _lt = core._lt;\nvar StateMachine = window.StateMachine;\n\n/**\n * Safari does not deal well at all with raw JSON data being\n * returned. As a result, we're going to cheat by using a\n * pseudo-jsonp: instead of getting JSON data in the iframe, we're\n * getting a ``script`` tag which consists of a function call and\n * the returned data (the json dump).\n *\n * The function is an auto-generated name bound to ``window``,\n * which calls back into the callback provided here.\n *\n * @param {Object} form the form element (DOM or jQuery) to use in the call\n * @param {Object} attributes jquery.form attributes object\n * @param {Function} callback function to call with the returned data\n */\nfunction jsonp(form, attributes, callback) {\n    attributes = attributes || {};\n    var options = {jsonp: _.uniqueId('import_callback_')};\n    window[options.jsonp] = function () {\n        delete window[options.jsonp];\n        callback.apply(null, arguments);\n    };\n    if ('data' in attributes) {\n        _.extend(attributes.data, options);\n    } else {\n        _.extend(attributes, {data: options});\n    }\n    _.extend(attributes, {\n        dataType: 'script',\n    });\n    $(form).ajaxSubmit(attributes);\n}\nfunction _make_option(term) { return {id: term, text: term }; }\nfunction _from_data(data, term) {\n    return _.findWhere(data, {id: term}) || _make_option(term);\n}\n\n/**\n * query returns a list of suggestion select2 objects, this function:\n *\n * * returns data exactly matching query by either id or text if those exist\n * * otherwise it returns a select2 option matching the term and any data\n *   option whose id or text matches (by substring)\n */\nfunction dataFilteredQuery(q) {\n    var suggestions = _.clone(this.data);\n    if (q.term) {\n        var exact = _.filter(suggestions, function (s) {\n            return s.id === q.term || s.text === q.term;\n        });\n        if (exact.length) {\n            suggestions = exact;\n        } else {\n            suggestions = [_make_option(q.term)].concat(_.filter(suggestions, function (s) {\n                return s.id.indexOf(q.term) !== -1 || s.text.indexOf(q.term) !== -1\n            }));\n        }\n    }\n    q.callback({results: suggestions});\n}\n\nvar DataImport = AbstractAction.extend({\n    hasControlPanel: true,\n    contentTemplate: 'ImportView',\n    opts: [\n        {name: 'encoding', label: _lt(\"Encoding:\"), value: ''},\n        {name: 'separator', label: _lt(\"Separator:\"), value: ''},\n        {name: 'quoting', label: _lt(\"Text Delimiter:\"), value: '\"'}\n    ],\n    spreadsheet_opts: [\n        {name: 'sheet', label: _lt(\"Selected Sheet:\"), value: ''},\n    ],\n    parse_opts_formats: [\n        {name: 'date_format', label: _lt(\"Date Format:\"), value: ''},\n        {name: 'datetime_format', label: _lt(\"Datetime Format:\"), value: ''},\n    ],\n    parse_opts_separators: [\n        {name: 'float_thousand_separator', label: _lt(\"Thousands Separator:\"), value: ','},\n        {name: 'float_decimal_separator', label: _lt(\"Decimal Separator:\"), value: '.'}\n    ],\n    events: {\n        'change .oe_import_file': 'loaded_file',\n        'change input.oe_import_has_header, .oe_import_sheet': 'settings_changed',\n        'change input.oe_import_advanced_mode': function (e) {\n            this.do_not_change_match = true;\n            this['settings_changed']();\n        },\n        'click .oe_import_report a.oe_import_report_count': function (e) {\n            e.preventDefault();\n            $(e.target).parent().find('i.arrow').toggleClass('up down');\n            $(e.target).parent().parent().toggleClass('oe_import_report_showmore');\n        },\n        'click .oe_import_report_see_possible_value': function (e) {\n            e.preventDefault();\n            $(e.target).parent().toggleClass('oe_import_report_showmore');\n        },\n        'click .oe_import_moreinfo_action a': function (e) {\n            e.preventDefault();\n            // #data will parse the attribute on its own, we don't like\n            // that sort of things\n            var action = JSON.parse($(e.target).attr('data-action'));\n            // FIXME: when JS-side clean_action\n            action.views = _(action.views).map(function (view) {\n                var id = view[0], type = view[1];\n                return [\n                    id,\n                    type !== 'tree' ? type\n                      : action.view_type === 'form' ? 'list'\n                      : 'tree'\n                ];\n            });\n            this.do_action(_.extend(action, {\n                target: 'new',\n                flags: {\n                    search_view: true,\n                    display_title: true,\n                    pager: true,\n                    list: {selectable: false}\n                }\n            }));\n        },\n    },\n    init: function (parent, action) {\n        this._super.apply(this, arguments);\n        this.action_manager = parent;\n        this.res_model = action.params.model;\n        this.parent_context = action.params.context || {};\n        // import object id\n        this.id = null;\n        this.session = session;\n        this._title = _t('Import a File'); // Displayed in the breadcrumbs\n        this.do_not_change_match = false;\n        this.sheets = [];\n        this.selectionFields = {};  // Used to compute fallback values in backend.\n    },\n    /**\n     * @override\n     */\n    willStart: function () {\n        var self = this;\n        var def = this._rpc({\n            model: this.res_model,\n            method: 'get_import_templates',\n            context: this.parent_context,\n        }).then(function (result) {\n            self.importTemplates = result;\n        });\n        return Promise.all([this._super.apply(this, arguments), def]);\n    },\n    start: function () {\n        var self = this;\n        this.$form = this.$('form');\n        this.setup_encoding_picker();\n        this.setup_separator_picker();\n        this.setup_float_format_picker();\n        this.setup_date_format_picker();\n        this.setup_sheets_picker();\n\n        return this._super().then(function () {\n            return self.create_model().then(function (id) {\n                self.id = id;\n                self.$('input[name=import_id]').val(id);\n\n                self.renderButtons();\n                var status = {\n                    cp_content: {$buttons: self.$buttons},\n                };\n                self.updateControlPanel(status);\n            });\n        });\n    },\n    create_model: function() {\n        return this._rpc({\n                model: 'base_import.import',\n                method: 'create',\n                args: [{res_model: this.res_model}],\n                kwargs: {context: session.user_context},\n            });\n    },\n    renderButtons: function() {\n        var self = this;\n        this.$buttons = $(QWeb.render(\"ImportView.buttons\", this));\n        this.$buttons.filter('.o_import_validate').on('click', this.validate.bind(this));\n        this.$buttons.filter('.o_import_import').on('click', this.import.bind(this));\n        this.$buttons.filter('.oe_import_file').on('click', function () {\n            self.$('.o_content .oe_import_file').click();\n        });\n        this.$buttons.filter('.o_import_cancel').on('click', function(e) {\n            e.preventDefault();\n            self.exit();\n        });\n    },\n    setup_encoding_picker: function () {\n        this.$('input.oe_import_encoding').select2({\n            width: '50%',\n            data: _.map(('utf-8 utf-16 windows-1252 latin1 latin2 big5 gb18030 shift_jis windows-1251 koi8_r').split(/\\s+/), _make_option),\n            query: dataFilteredQuery,\n            minimumResultsForSearch: -1,\n            initSelection: function ($e, c) {\n                return c(_make_option($e.val()));\n            }\n        });\n    },\n    setup_separator_picker: function () {\n        var data = [\n            {id: ',', text: _t(\"Comma\")},\n            {id: ';', text: _t(\"Semicolon\")},\n            {id: '\\t', text: _t(\"Tab\")},\n            {id: ' ', text: _t(\"Space\")}\n        ];\n        this.$('input.oe_import_separator').select2({\n            width: '50%',\n            data: data,\n            query: dataFilteredQuery,\n            minimumResultsForSearch: -1,\n            // this is not provided to initSelection so can't use this.data\n            initSelection: function ($e, c) {\n                c(_from_data(data, $e.val()) || _make_option($e.val()))\n            }\n        });\n    },\n    setup_float_format_picker: function () {\n        var data_decimal = [\n            {id: ',', text: _t(\"Comma\")},\n            {id: '.', text: _t(\"Dot\")},\n        ];\n        var data_digits = data_decimal.concat([{id: '', text: _t(\"No Separator\")}]);\n        this.$('input.oe_import_float_thousand_separator').select2({\n            width: '50%',\n            data: data_digits,\n            query: dataFilteredQuery,\n            minimumResultsForSearch: -1,\n            initSelection: function ($e, c) {\n                c(_from_data(data_digits, $e.val()) || _make_option($e.val()))\n            }\n        });\n        this.$('input.oe_import_float_decimal_separator').select2({\n            width: '50%',\n            data: data_decimal,\n            query: dataFilteredQuery,\n            minimumResultsForSearch: -1,\n            initSelection: function ($e, c) {\n                c(_from_data(data_decimal, $e.val()) || _make_option($e.val()))\n            }\n        });\n    },\n    setup_date_format_picker: function () {\n        var data = _([\n            'YYYY-MM-DD',\n            'DD/MM/YY',\n            'DD/MM/YYYY',\n            'DD-MM-YYYY',\n            'DD-MMM-YY',\n            'DD-MMM-YYYY',\n            'DD.MM.YY',\n            'DD.MM.YYYY',\n            'MM/DD/YY',\n            'MM/DD/YYYY',\n            'MM-DD-YY',\n            'MM-DD-YYYY',\n            'DDMMYY',\n            'DDMMYYYY',\n            'YYMMDD',\n            'YYYYMMDD',\n            'YY/MM/DD',\n            'YYYY/MM/DD',\n            'MMDDYY',\n            'MMDDYYYY',\n        ]).map(_make_option);\n        this.$('input.oe_import_date_format').select2({\n            width: '50%',\n            data: data,\n            query: dataFilteredQuery,\n            minimumResultsForSearch: -1,\n            initSelection: function ($e, c) {\n                c(_from_data(data, $e.val()) || _make_option($e.val()));\n            }\n        })\n    },\n    setup_sheets_picker: function () {\n        var data = this.sheets.map(_make_option);\n        this.$('input.oe_import_sheet').select2({\n            width: '100%',\n            data: data,\n            query: dataFilteredQuery,\n            minimumResultsForSearch: -1,\n            initSelection: function ($e, c) {\n                c(_from_data(data, $e.val()) || _make_option($e.val()))\n            },\n        });\n    },\n\n    import_options: function () {\n        var self = this;\n        var options = {\n            has_headers: this.$('input.oe_import_has_header').prop('checked'),\n            advanced: this.$('input.oe_import_advanced_mode').prop('checked'),\n            keep_matches: this.do_not_change_match,\n            name_create_enabled_fields: {},\n            import_set_empty_fields: [],\n            import_skip_records: [],\n            fallback_values: {},\n            // start at row 1 = skip 0 lines\n            skip: Number(this.$('#oe_import_row_start').val()) - 1 || 0,\n            limit: Number(this.$('#oe_import_batch_limit').val()) || null,\n        };\n        _.each(_.union(this.opts, this.spreadsheet_opts), function (opt) {\n            options[opt.name] =\n                self.$('input.oe_import_' + opt.name).val();\n        });\n        _(this.parse_opts_formats).each(function (opt) {\n            options[opt.name] = time.moment_to_strftime_format(self.$('input.oe_import_' + opt.name).val());\n        });\n        _(this.parse_opts_separators).each(function (opt) {\n            options[opt.name] = self.$('input.oe_import_' + opt.name).val();\n        });\n\n        options['fields'] = [];\n        if (this.do_not_change_match) {\n            options['fields'] = this.$('input.oe_import_match_field').map(function (index, el) {\n                return $(el).select2('val') || false;\n            }).get();\n        }\n        this.do_not_change_match = false;\n        this.$('select.o_import_create_option').each(function () {\n            var field = this.getAttribute('field');\n            var type = this.getAttribute('type');\n            if (field) {\n                if (['boolean', 'many2one', 'many2many', 'selection'].includes(type) && this.value === 'skip_record') {\n                    options.import_skip_records.push(field);\n                } else if (['many2one', \"many2many\", \"selection\"].includes(type)) {\n                    if (this.value === 'set_empty') {\n                        options.import_set_empty_fields.push(field);\n                    } else {\n                        options.name_create_enabled_fields[field] = this.value === 'create';\n                    }\n                // for selection, include also 'skip' that will be interpreted as 'None' in backend.\n                } else if (['boolean','selection'].includes(type) && this.value !== 'prevent') {\n                    options.fallback_values[field] = {\n                        fallback_value: this.value,\n                        field_model: this.getAttribute('model'),\n                        field_type: type\n                    };\n                }\n            }\n        });\n        return options;\n    },\n\n    //- File & settings change section\n    onfile_loaded: function (event, from, to, arg) {\n        // arg is null if reload -> don't reset partial import\n        if (arg != null ) {\n            var savedSkipLines = 0;\n            var isPartialEnabled = this.$('.oe_import').hasClass('o_import_partial_mode');\n            if (isPartialEnabled) {\n                savedSkipLines = this.$('#oe_import_row_start').val();\n            }\n            this.toggle_partial(null);\n            if (isPartialEnabled && savedSkipLines) {\n                // If partial mode was already enabled, we want to keep the 'start at line' parameter\n                // This can help the end user when he has partially imported a file and wants to make\n                // some modifications into it before re-uploading and resuming the upload.\n                this.$('#oe_import_row_start').val(savedSkipLines);\n            }\n        }\n\n        this.$buttons.filter('.o_import_import, .o_import_validate').addClass('d-none');\n        if (!this.$('input.oe_import_file').val()) { return this['settings_changed'](); }\n        this.$('.oe_import_date_format').select2('val', '');\n        this.$('.oe_import_datetime_format').val('');\n        this.$('.oe_import_sheet').val('');\n\n        this.$form.removeClass('oe_import_preview oe_import_error');\n        var import_toggle = false;\n        var file = this.$('input.oe_import_file')[0].files[0];\n        // some platforms send text/csv, application/csv, or other things if Excel is prevent\n        var isCSV = ((file.type && _.last(file.type.split('/')) === \"csv\") || ( _.last(file.name.split('.')) === \"csv\"))\n        this.$form.find('.o_import_formatting').toggleClass('d-none', !isCSV);\n\n        // get file name and extension separately, to apply ellipsis to the name and still keep the extension visible.\n        // E.g. : superLongFileName.csv -> \"superLongFi....csv\" instead of \"superLongFileNa...\"\n        var fileName = file.name.split('.');\n        var fileExtension = fileName.pop();\n        fileName = fileName.join('.');\n        this.$('#oe_imported_file').text(fileName);\n        this.$('#oe_imported_file_extension').text('.' + fileExtension);\n\n        this.$form.find('.oe_import_box').toggle(true);\n        jsonp(this.$form, {\n            url: '/base_import/set_file'\n        }, this.proxy('settings_changed'));\n    },\n    onpreviewing: function () {\n        var self = this;\n        this.$buttons.filter('.o_import_import, .o_import_validate').addClass('d-none');\n        this.$form.addClass('oe_import_with_file');\n        // TODO: test that write // succeeded?\n        this.$form.removeClass('oe_import_preview_error oe_import_error');\n        this.$form.toggleClass(\n            'oe_import_noheaders',\n            !this.$('input.oe_import_has_header').prop('checked'));\n\n        // Clear the input value to allow onchange to be triggered\n        // if the file is the same (for all browsers)\n        this.$('input.oe_import_file').val('');\n        this.$('.oe_import_options_cell,.oe_import_options_header').addClass('d-none');\n\n        this._cleanComments();\n\n        // Block UI during loading file.\n        $.blockUI({message: QWeb.render('Throbber')});\n        $(document.body).addClass('o_ui_blocked');\n        $('.oe_throbber_message').text(_t(\"Loading file...\"));\n\n        this._rpc({\n                model: 'base_import.import',\n                method: 'parse_preview',\n                args: [this.id, this.import_options()],\n                kwargs: {context: session.user_context},\n            }).then(function (result) {\n                var signal = result.error ? 'preview_failed' : 'preview_succeeded';\n                self[signal](result);\n                $(document.body).removeClass('o_ui_blocked');\n                $.unblockUI();\n            });\n    },\n    onpreview_error: function (event, from, to, result) {\n        this.$('.oe_import_options').show();\n        this.$form.addClass('oe_import_preview_error oe_import_error');\n        this.$form.find('.oe_import_box, .oe_import_with_file').removeClass('d-none');\n        this.$form.find('.o_view_nocontent').addClass('d-none');\n        this.$('.oe_import_error_report').html(\n                QWeb.render('ImportView.preview.error', result));\n    },\n    onpreview_success: function (event, from, to, result) {\n        var self = this;\n        this.$buttons.filter('.oe_import_file')\n            .text(_t('Load File'))\n            .removeClass('btn-primary').addClass('btn-secondary')\n            .blur();\n        this.$buttons.filter('.o_import_import, .o_import_validate').removeClass('d-none');\n        this.$form.find('.oe_import_box, .oe_import_with_file').removeClass('d-none');\n        this.$form.find('.o_view_nocontent').addClass('d-none');\n        this.$form.addClass('oe_import_preview');\n        this.$('input.oe_import_advanced_mode').prop('checked', result.advanced_mode);\n        this.$('.oe_import_grid').html(QWeb.render('ImportView.preview', result));\n        this.$('.oe_import_grid .o_import_preview').each((index, element) => {\n            $(element).popover({\n                title: _t(\"Preview\"),\n                trigger: 'hover',\n                html: true,\n                content: QWeb.render('ImportView.preview_popover', { preview: result.preview[index] }),\n            });\n        });\n        // Activate the batch configuration panel only of the file length > 100. (In order to let the user choose\n        // the batch size even for medium size file. Could be useful to reduce the batch size for complex models).\n        this.fileLength = result.file_length;\n        this.$('.o_import_batch').toggleClass('d-none', !(this.fileLength > 100));\n        this.$('.o_import_batch_alert').toggleClass('d-none', !result.batch);\n\n        var messages = [];\n        if (result.headers.length === 1) {\n            messages.push({type: 'warning', message: _t(\"A single column was found in the file, this often means the file separator is incorrect\")});\n        }\n\n        if (!_.isEmpty(messages)) {\n            this.$('.oe_import_options').show();\n            this.onresults(null, null, null, {'messages': messages});\n        }\n\n        if (!_.isEqual(this.sheets, result.options.sheets)) {\n            this.sheets = result.options.sheets || [];\n            this.setup_sheets_picker();\n        }\n        this.$('div.oe_import_has_multiple_sheets').toggle(\n            this.sheets.length > 1\n        );\n\n        // merge option values back in case they were updated/guessed\n        _.each(['encoding', 'separator', 'float_thousand_separator', 'float_decimal_separator', 'sheet'], function (id) {\n            self.$('.oe_import_' + id).select2('val', result.options[id])\n        });\n        this.$('.oe_import_date_format').select2('val', time.strftime_to_moment_format(result.options.date_format));\n        this.$('.oe_import_datetime_format').val(time.strftime_to_moment_format(result.options.datetime_format));\n        // hide all \"true debug\" options when not in debug mode\n        this.$('.oe_import_debug_option').toggleClass('d-none', !result.debug);\n\n        var $fields = this.$('.oe_import_match_field');\n        this.render_fields_matches(result, $fields);\n        var data = this._generate_fields_completion(result);\n        var item_finder = function (id, items) {\n            items = items || data;\n            for (var i=0; i < items.length; ++i) {\n                var item = items[i];\n                if (item.id === id) {\n                    return item;\n                }\n                var val;\n                if (item.children && (val = item_finder(id, item.children))) {\n                    return val;\n                }\n            }\n            return '';\n        };\n        $fields.each(function (k,v) {\n            var $fieldInput = $(v);\n            var filteredData = self._generate_fields_completion(result, k);\n\n            var updateFieldInformation = function (fieldInfo) {\n                // Get the comment cell on the same row in the table.\n                var $commentCell = $fieldInput.closest('tr.oe_import_grid-row').find('.oe_import_comment_cell');\n                var $optionsDiv = $commentCell.find('.oe_import_options_div');\n                var isRelational = fieldInfo.type === 'many2many' || fieldInfo.type === 'many2one';\n                var setEmpty = !fieldInfo.required && (isRelational || fieldInfo.type === 'selection');\n\n                // if relational field is child of one2many then do not display skip record option\n                var isO2MField = false;\n                if (isRelational && fieldInfo.id.includes('/')) {\n                    var fieldName = fieldInfo.id.split('/')[0];\n                    var field = result.fields.find((field) => field.name === fieldName);\n                    if (field && field.type === 'one2many') {\n                        isO2MField = true;\n                    }\n                }\n                var showSkipRecord = setEmpty && !isO2MField || (!fieldInfo.required && fieldInfo.type === 'boolean');\n\n                // get options cell related to that field\n                if (isRelational || fieldInfo.type === 'boolean') {\n                    $optionsDiv.empty();\n                    $optionsDiv.append(\n                        QWeb.render('ImportView.create_record_option', {\n                            data: fieldInfo,\n                            is_relational: isRelational,\n                            set_empty: setEmpty,\n                            show_skip_record: showSkipRecord\n                        })\n                    );\n                } else if (fieldInfo.type === 'selection') {\n                    self._rpc({\n                        model: fieldInfo.comodel_name || fieldInfo.model_name,\n                        method: 'fields_get',\n                    }).then(function (values) {\n                        var selectionField = fieldInfo.id.split('/').pop();\n                        var selectionLabels = values[selectionField][\"selection\"].map(value => value[1]);\n\n                        $optionsDiv.empty();\n                        $optionsDiv.append(\n                            QWeb.render('ImportView.create_record_option', {\n                                data: fieldInfo,\n                                values: selectionLabels,\n                                set_empty: setEmpty,\n                                show_skip_record: showSkipRecord\n                            })\n                        );\n                        self.selectionFields[data.id] = values;\n                    });\n                } else if ($optionsDiv.find('.o_import_create_option').length == 1) {\n                    $optionsDiv.empty();\n                }\n\n                // re-attribute comment cell to the new selected field\n                $commentCell.attr('field', fieldInfo.id || \"\");\n                $commentCell.attr('model', fieldInfo.comodel_name || fieldInfo.model_name || \"\");\n\n                // assign class for field icon\n                var $fieldDropdown = $fieldInput.closest('.oe_import_match_cell').find('.select2-choice');\n                var oldType = $fieldDropdown.getAttributes()['type'];\n                $fieldDropdown.removeClass(`o_import_field_${oldType}`).addClass(`o_import_field_icon o_import_field_${fieldInfo.type}`);\n                $fieldDropdown.attr('type', fieldInfo.type);\n            };\n\n            var default_value = $fieldInput.val();\n            var fieldInfo = item_finder(default_value);\n            if (!fieldInfo) {\n                $fieldInput.val('');\n            }\n\n            $fieldInput.select2({\n                allowClear: true,\n                minimumInputLength: 0,\n                data: filteredData,\n                initSelection: function (element, callback) {\n                    if (!default_value) {\n                        callback('');\n                        return;\n                    }\n\n                    updateFieldInformation(fieldInfo);\n                    callback(fieldInfo);\n                    self._handleMappingComments(v, fieldInfo);\n                },\n                // Format the tooltip.\n                formatSelection: function (object, container) {\n                    var fieldTooltipString = `%(label)s: %(labelValue)s\n%(name)s: %(nameValue)s\n%(type)s: %(typeValue)s\n%(model)s: %(modelValue)s`;\n                    var tooltip = _.str.sprintf(fieldTooltipString, {\n                        'label': _t(\"Label\"), 'labelValue': object.text,\n                        'name': _t(\"Name\"), 'nameValue': object.id,\n                        'type': _t(\"Type\"), 'typeValue': object.type,\n                        'model': _t(\"Model\"), 'modelValue': object.comodel_name || object.model_name,\n                    });\n                    $(container[0]).closest('a').attr('title', tooltip);\n                    return object.text;\n                },\n                // For each choice, if field is required, make it bold in the list\n                formatResultCssClass: function (object) {\n                    if (object.required) { return \"font-weight-bold text-decoration-underline\"; }\n                    return \"\";\n                },\n                placeholder: _t('To import, select a field...'),\n                width: 'resolve',\n                dropdownCssClass: 'oe_import_selector'\n            }).on('change', function (event) {\n                var changedField = event.currentTarget;\n                var fieldRemovedId = event.removed ? event.removed.id : false;\n                self._cleanFieldComments(changedField, fieldRemovedId);\n\n                var fieldInfo = item_finder(changedField.value);\n                updateFieldInformation(fieldInfo);\n                self._handleMappingComments(changedField, fieldInfo);\n\n                if (!event.val) {\n                    var $matchingCell = $(changedField).closest('.oe_import_match_cell')\n                    $matchingCell.find('.o_import_field_icon').removeClass('o_import_field_icon');\n                    $matchingCell.find('a.select2-choice').removeAttr(\"title\");\n                }\n            });\n\n            $fieldInput.closest('.oe_import_match_cell').find('.select2-input').attr('placeholder', _t('Search for a field...'));\n        });\n    },\n\n    /**\n    * This method is called when changing the field to map with a file column, or when removing it.\n    * It will clean the eventual comments, errors and the mapping options related to the previously selected field.\n    *\n    * @private\n    */\n    _cleanFieldComments: function (changedField, fieldRemovedId) {\n        // Check that the column was not mapped to same field than another column\n        if (fieldRemovedId) {\n            var $sameMappedFields = this.$(`.oe_import_comment_cell[field=\\\"${fieldRemovedId}\\\"]`).find('.oe_import_same_mapped_field');\n            if ($sameMappedFields.length == 2) {\n                // remove all same mapped field comments\n                $sameMappedFields.remove();\n            }\n        }\n        // remove all comments for this header-field mapping row\n        var $fieldRow = $(changedField).closest('tr.oe_import_grid-row');\n        $fieldRow.find('.oe_import_comments_div').empty();\n        $fieldRow.find('.oe_import_options_div').addClass(\"d-none\");\n    },\n\n    /**\n    * This method is called when selecting a sheet or a new file to import, but also when running to import or the\n    * import test. It will remove all the general comments and/or field specific warnings and errors\n    *\n    * @private\n    */\n    _cleanComments: function () {\n        this.$('.oe_import_error_report').empty();\n        this.$('.oe_import_comments_div').find('.alert-error,.alert-warning').remove();\n        this.$form.removeClass('oe_import_error');\n    },\n\n    /**\n     * Called at the start of every batch to update the progress bar display.\n     * It also computes an estimated time left based on: starting time of the whole process,\n     * percentage done so far and remaining records.\n     */\n    _onBatchStart: function () {\n        var recordsDone = this.batchSize * (this.currentBatchNumber - 1);\n        var percentage = parseInt(recordsDone / this.totalToImport * 100);\n        $('.o_import_progress_dialog')\n            .find('.progress-bar')\n            .text(percentage + \"%\")\n            .attr('aria-valuenow', percentage)\n            .css('width', percentage + '%');\n        $('.o_import_progress_dialog')\n            .find('.o_import_progress_dialog_batch_count')\n            .text(this.currentBatchNumber);\n        if (percentage !== 0) {\n            // e.g: it took 1 seconds (1000 millis) to import 33%\n            // -> there is (1000) * ((100 - 33) / 33) / 60000 minutes left\n            // -> 1000 * (66 / 33) / 60000 -> 2000 / 60000 -> 0.03 minute left (2 seconds) left\n            var estimatedTimeLeftMinutes = ((Date.now() - this.importStartTime) * ((100 - percentage) / percentage)) / 60000;\n            $('.o_import_progress_dialog_time_left').removeClass('d-none');\n            $('.o_import_progress_dialog_time_left_text')\n                .text(fieldUtils.format.float_time(estimatedTimeLeftMinutes));\n        }\n    },\n\n    /**\n     * Called when the user manually interrupts the import during a batched import.\n     * Sets 'stopImport' to true, which will stop the process when the current batch is done.\n     *\n     * @private\n     * @param {MouseEvent} event\n     */\n    _onStopImport: function (event) {\n        var $currentTarget = $(event.currentTarget);\n        $currentTarget.enable(false);\n        $currentTarget\n            .closest('.o_import_progress_dialog')\n            .find('.o_import_progress_dialog_stop, .o_import_progress_dialog_batch')\n            .toggleClass('d-none');\n        this.stopImport = true;\n    },\n\n   /**\n    * This method is called when selecting a new mapping field, or when changing/removing an already selected mapping\n    * field. It will check if multiple field columns are/were mapped on the same field.\n    * 1. In case the field type is char or text:\n    *   This method will display / remove the comments informing the user that two columns content will be\n    *   concatenated on the field they have chosen.\n    * 2. Else:\n    *  This method will remove the field mapping from the old column, as each field, except for the case 1., can only\n    *  be mapped once.\n    *\n    * @private\n    */\n    _handleMappingComments: function (changedField, fieldInfo) {\n        // check if two columns are mapped on the same fields (for char/text fields)\n        var commentsToAdd = [];\n        var $sameMappedFields = this.$('.oe_import_comment_cell[field=\"' + fieldInfo.id + '\"]');\n\n        if (fieldInfo.type == 'many2many') {\n            commentsToAdd.push(QWeb.render('ImportView.comment_m2m_field'));\n        }\n        if ($sameMappedFields.length >= 2) {\n            if (['char', 'text', \"many2many\"].includes(fieldInfo.type)) {\n                commentsToAdd.push(QWeb.render('ImportView.comment_same_mapped_field', {\n                    field: fieldInfo.text,\n                }));\n            } else {  // if column is mapped on an already mapped field, remove that field from the old column.\n                var $targetMappedFieldId = $(changedField).parent().find('div.oe_import_match_field').getAttributes()['id'];\n                _.each($sameMappedFields, function(fieldComment) {\n                    var $mappingCell = $(fieldComment).parent().find('div.oe_import_match_field');\n                    if ($mappingCell.getAttributes()['id'] !== $targetMappedFieldId) {\n                        $mappingCell.find('.select2-search-choice-close').trigger('mousedown').trigger('click');\n                    }\n                });\n            }\n        }\n\n        var $commentDiv = $sameMappedFields.find(\".oe_import_comments_div\");\n        $commentDiv.empty();\n        _.each($commentDiv, function(fieldComment) {\n            _.each(commentsToAdd, function(comment) {\n                $(fieldComment).append(comment);\n            });\n        });\n    },\n\n    _generate_fields_completion: function (root, index) {\n        var self = this;\n        var basic = [];\n        var regulars = [];\n        var o2m = [];\n        var suggested = [];\n        var header_types = root.header_types;\n        function traverse(field, ancestors, collection, type) {\n            var subfields = field.fields;\n            var advanced_mode = self.$('input.oe_import_advanced_mode').prop('checked');\n            var field_path = ancestors.concat(field);\n            var label = _(field_path).pluck('string').join(' / ');\n            var id = _(field_path).pluck('name').join('/');\n            // If non-relational, m2o or m2m, collection is either suggested if field type is in header_types, either regulars if type does not match\n            if (!collection) {\n                if (field.name === 'id') {\n                    collection = basic;\n                } else if (_.isEmpty(subfields)\n                        || _.isEqual(_.pluck(subfields, 'name'), ['id', '.id'])) {\n                    collection = (type && type.indexOf(field['type']) !== -1) ? suggested : regulars;\n                } else {\n                    collection = o2m;\n                }\n            }\n\n            collection.push({\n                id: id,\n                text: label,\n                required: field.required,\n                type: field.type,\n                default_value: field.default_value,\n                comodel_name: field.comodel_name,\n                model_name: field.model_name,\n            });\n\n            if (advanced_mode){\n                for(var i=0, end=subfields.length; i<end; ++i) {\n                    traverse(subfields[i], field_path, collection, type);\n                }\n            }\n        }\n        _(root.fields).each(function (field) {\n            if (index === undefined) {\n                traverse(field, []);\n            }\n            else {\n                if (self.$('input.oe_import_advanced_mode').prop('checked')){\n                    traverse(field, [], undefined, ['all']);\n                }\n                else {\n                    traverse(field, [], undefined, header_types[index]);\n                }\n            }\n        });\n\n        var cmp = function (field1, field2) {\n            return field1.text.localeCompare(field2.text);\n\n        };\n        suggested.sort(cmp);\n        regulars.sort(cmp);\n        o2m.sort(cmp);\n        if (!_.isEmpty(regulars) && !_.isEmpty(o2m)){\n            if (!_.isEmpty(suggested)) {\n                basic = basic.concat({ text: _t(\"Suggested Fields\"), children: suggested });\n            }\n            return basic.concat([\n                { text: !_.isEmpty(suggested) ? _t(\"Additional Fields\") : _t(\"Standard Fields\"), children: regulars },\n                { text: _t(\"Relation Fields\"), children: o2m },\n            ]);\n        } else {\n            return basic.concat(suggested, regulars, o2m);\n        }\n    },\n    render_fields_matches: function (result, $fields) {\n        if (_(result.matches).isEmpty()) { return; }\n        $fields.each(function (index, input) {\n            var match = result.matches[index];\n            if (!match) { return; }\n\n            var current_field = result;\n            input.value = _(match).chain()\n                .map(function (name) {\n                    // WARNING: does both mapping and folding (over the\n                    //          ``field`` iterator variable)\n                    return current_field = _(current_field.fields).find(function (subfield) {\n                        return subfield.name === name;\n                    });\n                })\n                .pluck('name')\n                .value()\n                .join('/');\n        });\n    },\n\n    //- import itself\n    call_import: function (kwargs) {\n        var fields = this.$('input.oe_import_match_field').map(function (index, el) {\n            return $(el).select2('val') || false;\n        }).get();\n        var columns = this.$('.o_import_header_name').map(function () {\n            return $(this).text().trim().toLowerCase() || false;\n        }).get();\n\n        var tracking_disable = 'tracking_disable' in kwargs ? kwargs.tracking_disable : !this.$('#oe_import_tracking').prop('checked');\n        delete kwargs.tracking_disable;\n        kwargs.context = _.extend(\n            {}, this.parent_context,\n            {tracking_disable: tracking_disable}\n        );\n\n        this.importStartTime = Date.now();\n        this.stopImport = false;\n        this.totalToImport = this.fileLength - parseInt(this.$('#oe_import_row_start').val());\n        this.batchSize = parseInt(this.$('#oe_import_batch_limit').val() || 0);\n        var isBatch = this.batchSize !== 0 && this.totalToImport > this.batchSize;\n        var totalSteps = isBatch ? Math.floor(this.totalToImport / this.batchSize) + 1 : 1;\n        this.currentBatchNumber = 1;\n\n        $.blockUI({\n            message: QWeb.render(\n                'base_import.progressDialog', {\n                    importMode: kwargs.dryrun ? _t('Testing') : _t('Importing'),\n                    isBatch: isBatch,\n                    totalSteps: totalSteps,\n                }\n            )\n        });\n        $(document.body).addClass('o_ui_blocked');\n\n        $('.o_import_progress_dialog')\n            .find('.o_progress_stop_import')\n            .on('click', this._onStopImport.bind(this));\n\n        var opts = this.import_options();\n\n        return this._batchedImport(opts, [this.id, fields, columns], kwargs, {done: 0, prev: 0})\n            .then(null, function (reason) {\n                var error = reason.message;\n                var event = reason.event;\n                // In case of unexpected exception, convert\n                // \"JSON-RPC error\" to an import failure, and\n                // prevent default handling (warning dialog)\n                if (event) { event.preventDefault(); }\n\n                var errordata = error.data || {};\n                const msg = errordata.arguments && (errordata.arguments[1] || errordata.arguments[0])\n                    || error.message || _t(\"An unknown issue occurred during import (possibly lost connection, data limit exceeded or memory limits exceeded). Please retry in case the issue is transient. If the issue still occurs, try to split the file rather than import it at once.\");\n\n                return Promise.resolve({'messages': [{\n                    type: 'error',\n                    record: false,\n                    message: msg,\n                }]});\n            }).finally(function () {\n                $(document.body).removeClass('o_ui_blocked');\n                $.unblockUI();\n            });\n    }, /**\n     *\n     * @param opts import options\n     * @param args positional arguments to pass along (augmented with the options)\n     * @param kwargs keyword arguments to pass along (directly)\n     * @param {Object} rec recursion information record\n     * @param {Number} rec.done how many records have been loaded so far\n     * @param {Number} rec.prev nextrow of the previous call so we can know\n     *                          how many rows the call we're here performing\n     *                          will have consumed, and thus by how much we\n     *                          need to offset the messages of the *next* call\n     * @returns {Promise<{name, ids, messages}>}\n     * @private\n     */\n    _batchedImport: function (opts, args, kwargs, rec) {\n        var self = this;\n        opts.callback && opts.callback(this);\n        this._onBatchStart();\n        this.currentBatchNumber += 1;\n\n        if (this.stopImport) {\n            $(document.body).removeClass('o_ui_blocked');\n            $.unblockUI();\n            return Promise.resolve({});\n        }\n\n        return this._rpc({\n            model: 'base_import.import',\n            method: 'execute_import',\n            args: args.concat([opts]),\n            kwargs: kwargs\n        }, {\n            shadow: true,\n        }).then(function (results) {\n            _.each(results.messages, offset_by(opts.skip));\n            if (!kwargs.dryrun && !results.ids) {\n                // update skip to failed batch\n                self.$('#oe_import_row_start').val(opts.skip + 1);\n                if (opts.skip) {\n                    // there's been an error during a \"proper\" import, stop & warn\n                    // about partial import maybe\n                    results.messages.push({\n                        type: 'info',\n                        priority: true,\n                        message: _.str.sprintf(_t(\"This file has been successfully imported up to line %d.\"), opts.skip)\n                    });\n                }\n                return results;\n            }\n            if (!results.nextrow) {\n                // we're done\n                return results;\n            }\n\n            // do the next batch\n            return self._batchedImport(\n                // avoid modifying opts in-place\n                _.defaults({skip: results.nextrow}, opts),\n                args, kwargs, {\n                    done: rec.done + (results.ids || []).length,\n                    prev: results.nextrow\n                }\n            ).then(function (r2) {\n                return {\n                    name: _.zip(results.name, r2.name).map(function (names) {\n                        return names[0] || names[1];\n                    }),\n                    ids: (results.ids || []).concat(r2.ids || []),\n                    messages: r2.messages ? results.messages.concat(r2.messages) : results.messages,\n                    skip: r2.skip || results.nextrow,\n                    nextrow: r2.nextrow\n                }\n            });\n        });\n    },\n    onvalidate: function () {\n        var prom = this.call_import({ dryrun: true, tracking_disable: true });\n        prom.then(this.proxy('validated'));\n        return prom;\n    },\n    onimport: function () {\n        var self = this;\n        var prom = this.call_import({ dryrun: false });\n        prom.then(function (results) {\n            if (self.stopImport) {\n                var recordsImported = results.ids ? results.ids.length : 0;\n                if (recordsImported) {\n                    self.$('#oe_import_row_start').val((results.skip || 0) + 1);\n                    self.displayNotification({ message: _.str.sprintf(\n                        _t(\"%d records successfully imported\"),\n                        recordsImported\n                    )});\n                }\n                self['import_interrupted'](results);\n            } else if (!_.any(results.messages, function (message) {\n                    return message.type === 'error'; })) {\n                self['import_succeeded'](results);\n                return;\n            }\n            self['import_failed'](results);\n        });\n        return prom;\n    },\n    onimported: function (event, from, to, results) {\n        this.displayNotification({ message: _.str.sprintf(\n            _t(\"%d records successfully imported\"),\n            results.ids.length\n        ) });\n        this.exit();\n    },\n    exit: function () {\n        this.trigger_up('history_back');\n    },\n    onresults: function (event, from, to, results) {\n        var self = this;\n        var fields = this.$('input.oe_import_match_field').map(function (index, el) {\n            return $(el).select2('val') || false;\n        }).get();\n\n        var error_type = \"warning\";\n        var errorMessages = results.messages;\n\n        if (_.isEmpty(errorMessages) && event !== 'import_interrupted') {\n            errorMessages.push({\n                type: 'info',\n                message: _t(\"Everything seems valid.\")\n            });\n            error_type = false;\n        } else if (event === 'import_interrupted' && results.ids) {\n            this.toggle_partial(results);\n            error_type = false;\n        } else if (event === 'import_failed' && results.ids) {\n            // both ids in a failed import -> partial import\n            this.toggle_partial(results);\n        }\n\n        // row indexes come back 0-indexed, spreadsheets\n        // display 1-indexed.\n        var offset = 1;\n        // offset more if header\n        if (this.import_options().has_headers) { offset += 1; }\n\n        // Sort errors by error gravity then by field\n        var errorsSorted = _.sortBy(_(errorMessages).groupBy('message'), function (group) {\n            if (group[0].priority){\n                return -2;\n            }\n\n            // sort by gravity, then, order of field in list\n            var order = 0;\n            switch (group[0].type) {\n            case 'error': order = 0; error_type = 'error'; break;\n            case 'warning': order = fields.length + 1; break;\n            case 'info': order = 2 * (fields.length + 1); break;\n            default: order = 3 * (fields.length + 1); break;\n            }\n            return order + _.indexOf(fields, group[0].field);\n        });\n\n        // regroup errors by field\n        var errorsByFields = this._regroupErrorsByFields(errorsSorted);\n\n        // If no general comments (index \"0\"), add general warning that there are some errors/warnings\n        if (!errorsByFields[0] && error_type) {\n            var message = error_type === \"warning\" ?\n                _t(\"The file contains non-blocking warnings (see below)\") :\n                _t(\"The file contains blocking errors (see below)\");\n            errorsByFields[0] = [{\n                'type': error_type,\n                'message': message,\n            }];\n        }\n\n        // Clean old comments\n        self._cleanComments();\n\n        // Add new comments\n        _.each(errorsByFields, function (errors, field) {\n            var $errorCell = self.$('.oe_import_comment_cell[field=\"'+ field +'\"]');\n            var $errorDiv = $errorCell.find(\".oe_import_comments_div\");\n            var errorTemplate = 'ImportView.fieldError';\n            // If error not linked to a targeted Odoo field, show in global error div\n            if ($errorDiv.length === 0) {\n                $errorDiv = self.$('.oe_import_error_report');\n                self.$form.addClass('oe_import_error');\n                field = 0;\n                errorTemplate = 'ImportView.error';\n            }\n            $errorDiv.append(\n                QWeb.render(errorTemplate, {\n                    errors: errors,\n                    field: field,\n                    result_names: results.name,\n                    offset: offset,\n                })\n            );\n            var mainError = errors[0];\n            if (!mainError.not_matching_error && mainError.type === \"error\") {\n                $errorCell.find(\".oe_import_options_div\").removeClass('d-none');\n            }\n        });\n    },\n\n    /**\n    * This method regroups the errors by their 'field' key.\n    * Errors of same nature encountered on multiple rows for the same field are regrouped into the same unique error\n    * and rows_from and rows_to are adapted accordingly.\n    * The goal is to ease the error attribution by looping through each mapped field and add their corresponding errors\n    * to the comment cell of that mapped field.\n    * Some errors are not linked to a mapped field and will be displayed in the general error container.\n    * Those general errors will be identified with key \"0\".\n    *\n    * @private\n    * @param {Array} errorsSorted: list of errors sorted by error gravity, then by field.\n    *   Each item of the list is a list of error of the same nature and can be therefore composed of 1 or more errors.\n    *   E.g.: [\n    *       [\n    *           {\n    *               'type': 'error',\n    *               'field_path': 'product_id/price',\n    *               'rows': {'from': 1, 'to': 1}, // This error have been encountered between row 1 and row 1 (at row 1)\n    *               'message': {\"Missing Value\"}\n    *           },\n    *           {\n    *               'type': 'error',\n    *               'field_path': 'product_id/price',\n    *               'rows': {'from': 2, 'to': 2}, // This error have been encountered between row 2 and row 2 (at row 2)\n    *               'message': {\"Missing Value\"}\n    *           }\n    *       ],\n    *       [ // this one is a general error, not linked specifically to a mapped field.\n    *           {\n    *               'type': 'error',\n    *               'message': {\"Found more than 10 errors and more than one error per 10 records, interrupted to avoid showing too many errors.\"}\n    *           }\n    *       ],\n    *       [\n    *           {\n    *               'type': 'warning',\n    *               'field': 'quantity',\n    *               'rows': {'from': 2, 'to': 4}, // This error have been encountered between row 2 and row 4 (at 3 different rows)\n    *               'message': {}\n    *           }\n    *       ],\n    *   ]\n    * @returns {Dict} errorsByFields: {fieldName: [error1, error2, ...]}\n    *   E.g.: {\n    *       0: [\n    *           {\n    *               'type': 'error',\n    *               'message': {\"Found more than 10 errors and more than one error per 10 records, interrupted to avoid showing too many errors.\"}\n    *           }\n    *       ],\n    *       'product_id/price': [\n    *           {\n    *               'type': 'error',\n    *               'field_path': 'product_id/price',\n    *               'rows': {'from': 1, 'to': 2}, // This error have been encountered between row 1 and row 2\n    *               'message': {\"Missing Value\"}\n    *           }\n    *       ],\n    *       'quantity': [\n    *           {\n    *               'type': 'warning',\n    *               'field': 'quantity',\n    *               'rows': {'from': 2, 'to': 4}, // This error have been encountered between row 2 and row 4\n    *               'message': {}\n    *           }\n    *       ],\n    *   }\n    */\n    _regroupErrorsByFields: function (errorsSorted) {\n        var errorsByFields = {}\n        _.each(errorsSorted, function (errors) {\n            var mainError = errors[0];\n            var field = mainError.field_path ? mainError.field_path.join('/') : mainError.field || 0;\n\n            // regroup errors for same value at different rows in the same error.\n            if (errors.length > 1 && mainError.rows) {\n                var rowFrom = mainError.rows.from;\n                var rowTo = errors[errors.length - 1].rows.to;\n                errors = mainError;\n                mainError.rows.from = rowFrom;\n                mainError.rows.to = rowTo;\n            } else {\n                errors = mainError;\n            }\n\n            if (!errorsByFields[field]) {\n                errorsByFields[field] = [errors];\n            } else {\n                errorsByFields[field].push(errors);\n            }\n        });\n\n        return errorsByFields;\n    },\n\n    toggle_partial: function (result) {\n        var $form = this.$('.oe_import');\n        var $partial_warning = this.$('.o_import_partial_alert');\n        var $partial_count = this.$('.o_import_partial_count');\n        if (result == null) {\n            $partial_warning.addClass('d-none');\n            $form.add(this.$buttons).removeClass('o_import_partial_mode');\n            var $skip = this.$('#oe_import_row_start');\n            $skip.val($skip.attr('value'));\n            $partial_count.text('');\n            return;\n        }\n\n        this.$('.o_import_batch_alert').addClass('d-none');\n        $partial_warning.removeClass('d-none');\n        $form.add(this.$buttons).addClass('o_import_partial_mode');\n        $partial_count.text((result.skip || 0) + 1);\n    }\n});\ncore.action_registry.add('import', DataImport);\n\n// FSM-ize DataImport\nStateMachine.create({\n    target: DataImport.prototype,\n    events: [\n        { name: 'loaded_file',\n          from: ['none', 'file_loaded', 'preview_error', 'preview_success', 'results', 'imported'],\n          to: 'file_loaded' },\n        { name: 'settings_changed',\n          from: ['file_loaded', 'preview_error', 'preview_success', 'results'],\n          to: 'previewing' },\n        { name: 'preview_failed', from: 'previewing', to: 'preview_error' },\n        { name: 'preview_succeeded', from: 'previewing', to: 'preview_success' },\n        { name: 'validate', from: 'preview_success', to: 'validating' },\n        { name: 'validate', from: 'results', to: 'validating' },\n        { name: 'validated', from: 'validating', to: 'results' },\n        { name: 'import', from: ['preview_success', 'results'], to: 'importing' },\n        { name: 'import_succeeded', from: 'importing', to: 'imported'},\n        { name: 'import_interrupted', from: 'importing', to: 'results' },\n        { name: 'import_failed', from: 'importing', to: 'results' }\n    ],\n});\n\nfunction offset_by(by) {\n    return function offset_message(msg) {\n        if (msg.rows) {\n            msg.rows.from += by;\n            msg.rows.to += by;\n        }\n    }\n}\n\nreturn {\n    DataImport: DataImport,\n};\n\n});\n", "odoo.define('base_import.ImportMenu', function (require) {\n    \"use strict\";\n\n    const FavoriteMenu = require('web.FavoriteMenu');\n    const { useModel } = require('web.Model');\n\n    const { Component } = owl;\n\n    /**\n     * Import Records menu\n     *\n     * This component is used to import the records for particular model.\n     */\n    class ImportMenu extends Component {\n        constructor() {\n            super(...arguments);\n            this.model = useModel('searchModel');\n        }\n\n        //---------------------------------------------------------------------\n        // Handlers\n        //---------------------------------------------------------------------\n\n        /**\n         * @private\n         */\n        importRecords() {\n            const action = {\n                type: 'ir.actions.client',\n                tag: 'import',\n                params: {\n                    model: this.model.config.modelName,\n                    context: this.model.config.context,\n                }\n            };\n            this.trigger('do-action', {action: action});\n        }\n\n        //---------------------------------------------------------------------\n        // Static\n        //---------------------------------------------------------------------\n\n        /**\n         * @param {Object} env\n         * @returns {boolean}\n         */\n        static shouldBeDisplayed(env) {\n            return env.view &&\n                ['kanban', 'list'].includes(env.view.type) &&\n                env.action.type === 'ir.actions.act_window' &&\n                !env.device.isMobile &&\n                !!JSON.parse(env.view.arch.attrs.import || '1') &&\n                !!JSON.parse(env.view.arch.attrs.create || '1');\n        }\n    }\n\n    ImportMenu.props = {};\n    ImportMenu.template = \"base_import.ImportRecords\";\n\n    FavoriteMenu.registry.add('import-menu', ImportMenu, 1);\n\n    return ImportMenu;\n});\n", "odoo.define('bank_stmt_import_csv.import', function (require) {\n\"use strict\";\n\nvar core = require('web.core');\nvar BaseImport = require('base_import.import')\n\nvar QWeb = core.qweb;\nvar _t = core._t;\nvar _lt = core._lt;\n\nvar DataImportStmt = BaseImport.DataImport.extend({\n    init: function (parent, action) {\n        this._super.apply(this, arguments);\n        action.display_name = _t('Import Bank Statement'); // Displayed in the breadcrumbs\n        this.filename = action.params.filename || {};\n        this.first_load = true;\n    },\n    start: function () {\n        var self = this;\n        return this._super().then(function (res) {\n            self.id = self.parent_context.wizard_id;\n            self.$('input[name=import_id]').val(self.id);\n            self['loaded_file']();\n        });\n    },\n    create_model: function() {\n        return Promise.resolve();\n    },\n    import_options: function () {\n        var options = this._super();\n        options['bank_stmt_import'] = true;\n        return options;\n    },\n    onfile_loaded: function () {\n        var self = this;\n        if (this.first_load) {\n            this.$('.oe_import_file_show').val(this.filename);\n            this.$('.oe_import_file_reload').hide();\n            this.first_load = false;\n            self['settings_changed']();\n        }\n        else {\n            this.$('.oe_import_file_reload').show();\n            this._super();\n        }\n    },\n    call_import: function(kwargs) {\n        var self = this;\n        var superProm = self._super.apply(this, arguments);\n        superProm.then(function (message) {\n            if(message.ids){\n                self.statement_line_ids = message.ids\n            }\n            if(message.messages && message.messages.length > 0) {\n                self.statement_id = message.messages[0].statement_id\n            }\n        });\n        return superProm;\n    },\n    exit: function () {\n        if (!this.statement_id) return;\n        this.do_action({\n            type: 'ir.actions.act_window',\n            res_model: 'account.bank.statement',\n            res_id: this.statement_id,\n            views: [[false, 'form']],\n            target: 'current',\n        });\n    },\n\n});\ncore.action_registry.add('import_bank_stmt', DataImportStmt);\n\nreturn {\n    DataImportStmt: DataImportStmt,\n};\n});\n", "/** @odoo-module **/\n\nimport Widget from 'web.Widget';\n\n/**\n * This widget represents a box that has been generated by the OCR. Such a box\n * is inserted on a box layer on a specific location. A box is related to\n * a field, and can be selected by the user and/or chosen by the OCR.\n */\nvar InvoiceExtractBox = Widget.extend({\n    events: {\n        'click': '_onClick'\n    },\n    template: 'account_invoice_extract.Box',\n    /**\n     * @override\n     * @param {web.Class} parent class with EventDispatcherMixin\n     * @param {Object} data\n     * @param {float} data.box_angle angle in degrees for this box.\n     * @param {float} data.box_height height of the box.\n     * @param {float} data.box_midX x-coordinate of the middle point of this\n     *   box.\n     * @param {float} data.box_midY y-coordinate of the middle point of this\n     *   box.\n     * @param {float} data.box_width width of the box.\n     * @param {string} data.feature name of the field that this box is related\n     *   to.\n     * @param {integer} data.id server-side ID of the box.\n     * @param {integer} data.selected_status if not 0, this is chosen by the\n     *   OCR.\n     * @param {boolean} data.user_selected tell whether this box is selected by\n     *   the user or not (server-side information).\n     * @param {$.Element} data.$boxLayer jQuery element linked to the node of\n     *   the box layer. This is used in order to compute the exact position of\n     *   this box on the page.\n     */\n    init: function (parent, data) {\n        this._super.apply(this, arguments);\n\n        this._angle = data.box_angle;\n        this._fieldName = data.feature;\n        this._height = data.box_height;\n        this._id = data.id;\n        this._isOcrChosen = data.selected_status !== 0;\n        this._isSelected = data.user_selected;\n        this._midX = data.box_midX;\n        this._midY = data.box_midY;\n        this._text = data.text;\n        this._width = data.box_width;\n        this._$boxLayer = data.$boxLayer;\n    },\n    /**\n     * Warn the invoice extract field that OCR chosen or selected boxes must be\n     * tracked. This is useful in order to determine which box is selected.\n     *\n     * @override\n     */\n    start: function () {\n        if (this._isSelected) {\n            this.trigger_up('select_invoice_extract_box', {\n                box: this,\n            });\n        }\n        if (this._isOcrChosen) {\n            this.trigger_up('choice_ocr_invoice_extract_box', {\n                box: this,\n            });\n        }\n        return this._super.apply(this, arguments);\n    },\n    /**\n     * Warn the invoice extract field that this box should be untracked. This\n     * is useful in order to keep using the same invoice extract field on\n     * another invoice, which surely contains different boxes.\n     *\n     * @override\n     */\n    destroy: function () {\n        this.trigger_up('destroy_invoice_extract_box', {\n            box: this,\n        });\n        this._super.apply(this, arguments);\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Get the field name of this box.\n     *\n     * @returns {string}\n     */\n    getFieldName: function () {\n        return this._fieldName;\n    },\n    /**\n     * Get the server-side ID of this box.\n     *\n     * @returns {integer}\n     */\n    getID: function () {\n        return this._id;\n    },\n    /**\n     * Get the style of this box, which is useful to represent the box at the\n     * exact position and box size on the box layer.\n     *\n     * @returns {string}\n     */\n    getStyle: function () {\n        return 'left:' + (this._midX * parseInt(this._$boxLayer[0].style.width)) + 'px;' +\n               'top:' + (this._midY * parseInt(this._$boxLayer[0].style.height))  + 'px;' +\n               'width:' + ((this._width) * parseInt(this._$boxLayer[0].style.width)) + 'px;' +\n               'height:' + ((this._height) * parseInt(this._$boxLayer[0].style.height))  + 'px;' +\n               'transform: translate(-50%, -50%) rotate(' + this._angle + 'deg);' +\n               '-ms-transform: translate(-50%, -50%) rotate(' + this._angle + 'deg);' +\n               '-webkit-transform: translate(-50%, -50%) rotate(' + this._angle + 'deg);';\n    },\n    /**\n     * Tells whether the box has been chosen by the OCR or not.\n     *\n     * @returns {boolean}\n     */\n    isOcrChosen: function () {\n        return this._isOcrChosen;\n    },\n    /**\n     * @returns {boolean}\n     */\n    isSelected: function () {\n        return this._isSelected;\n    },\n    /**\n     * Set this box as 'selected'. This is called by the field that is tracking\n     * boxes. Indeed, an OCR box without any user-selected box should be\n     * selected.\n     */\n    setSelected: function () {\n        if (!this._isSelected) {\n            this._isSelected = true;\n            this.$el.addClass('selected');\n        }\n    },\n    /**\n     * Unset this box as 'ocr chosen'. This case occurs when this box is\n     * unselected when no other box is selected. This behaviour matches the\n     * server-side behaviour.\n     */\n    unsetOcrChosen: function () {\n        if (this._isOcrChosen) {\n            this._isOcrChosen = false;\n            this.$el.removeClass('ocr_chosen');\n        }\n    },\n    /**\n     * Unset this box as 'selected'. This is called by the field that is\n     * tracking boxes. Indeed, an OCR box without any user-selected box should\n     * be selected. When another box is selected by the user, the OCR chosen\n     * box should no longer be selected.\n     */\n    unsetSelected: function () {\n        if (this._isSelected) {\n            this._isSelected = false;\n            this.$el.removeClass('selected');\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Called when clicking on this box.\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClick: function (ev) {\n        ev.stopPropagation();\n        this.trigger_up('click_invoice_extract_box', {\n            box: this,\n        });\n    },\n});\n\nexport default InvoiceExtractBox;\n", "/** @odoo-module **/\n\nimport InvoiceExtractBox from '@account_invoice_extract/js/invoice_extract_box';\nimport Widget from 'web.Widget';\n\n/**\n * This widget is layer on top of a page in the attachment preview, in which\n * boxes are inserted. This widget handles boxes of a given page.\n */\nvar InvoiceExtractBoxLayer = Widget.extend({\n    events: {\n        'click': '_onClick',\n    },\n    className: 'boxLayer',\n    /**\n     * @override\n     * @param {Class} parent a class with EventDispatcherMixin\n     * @param {Object} data\n     * @param {Object[]} data.boxesData list of all boxes data. Should filter\n     *   on boxes that are linked to this box layer.\n     * @param {string} data.mode either 'pdf' or 'img'\n     * @param {integer} [data.pageNum=0]\n     * @param {$.Element} [data.$buttons] mandatory in mode 'pdf': container of\n     *   the field buttons, which is useful in adapt the height of box layer\n     *   accordingly.\n     * @param {$.Element} data.$page useful in order to auto resize box layer\n     *   accordingly when attached to the DOM.\n     * @param {$.Element} [data.$textLayer] mandatory in mode 'pdf': useful in\n     *   order to size box layer similarly to text layer.\n     */\n    init: function (parent, data) {\n        var self = this;\n        this._super.apply(this, arguments);\n\n        this._boxes = [];\n        this._boxesData = data.boxesData;\n        this._mode = data.mode;\n        this._pageNum = data.pageNum || 0;\n\n        this._$buttons = data.$buttons;\n        this._$page = data.$page;\n        this._$textLayer = data.$textLayer;\n\n        // filter boxes data on current box layer\n        this._boxesData = _.filter(this._boxesData, function (boxData) {\n            return boxData.page === self._pageNum;\n        });\n    },\n    /**\n     * @override\n     */\n    start: function () {\n        var self = this;\n        // adapt box layer size\n        if (this._isOnPDF()) {\n            this.el.style.width = this._$textLayer[0].style.width;\n            this.el.style.height = this._$textLayer[0].style.height;\n            this._$page[0].style.height = 'calc(100% - ' + this._$buttons.height() + 'px)';\n        } else if (this._isOnImg()) {\n            this.el.style.width = this._$page[0].clientWidth + 'px';\n            this.el.style.height = this._$page[0].clientHeight + 'px';\n            this.el.style.left = this._$page[0].offsetLeft + 'px';\n            this.el.style.top = this._$page[0].offsetTop + 'px';\n        }\n\n        // make boxes (hidden by default)\n        this._boxes = [];\n        _.forEach(this._boxesData, function (boxData) {\n            var box = new InvoiceExtractBox(self, _.extend({}, boxData, {\n                $boxLayer: self.$el,\n            }));\n            box.appendTo(self.$el).then(function () {\n                box.do_hide();\n                self._boxes.push(box);\n            });\n        });\n\n        return this._super.apply(this, arguments);\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Shows the boxes in this box layer, based on the selected field.\n     *\n     * @param {Object} params\n     * @param {string} params.fieldName only show boxes of given field name\n     */\n    displayBoxes: function (params) {\n        var selectedFieldName = params.fieldName;\n        _.each(this._boxes, function (box) {\n            if (box.getFieldName() === selectedFieldName) {\n                box.do_show();\n            } else {\n                box.do_hide();\n            }\n        });\n    },\n\n    /**\n     * Sets the textLayer for this box layer.\n     *\n     * @param {Object} params\n     * @param {$.Element} [params.$textLayer] the new text layer\n     */\n    setTextLayer: function(params) {\n        var $textLayer = params.$textLayer;\n        this._$textLayer = $textLayer;\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @returns {boolean}\n     */\n    _isOnImg: function () {\n        return this._mode === 'img';\n    },\n    /**\n     * @private\n     * @returns {boolean}\n     */\n    _isOnPDF: function () {\n        return this._mode === 'pdf';\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Called when clicking on the box layer.\n     * This function should handle click away from a selected box.\n     * This is ignored if the click on a box.\n     *\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClick: function (ev) {\n        this.trigger_up('click_invoice_extract_box_layer');\n    },\n});\n\nexport default InvoiceExtractBoxLayer;\n", "/** @odoo-module **/\n\nimport InvoiceExtractFieldButton from '@account_invoice_extract/js/invoice_extract_field_button';\n\nimport Class from 'web.Class';\nimport field_utils from 'web.field_utils';\nimport Mixins from 'web.mixins';\n\n/**\n * This class represents a field for the 'invoice extract' OCR feature. This is\n * useful in order to determine whether this feature is active or not, and also\n * to track some important boxes such as 'ocr chosen' and 'user selected' boxes.\n */\nvar InvoiceExtractField = Class.extend(Mixins.EventDispatcherMixin, {\n    custom_events: {\n        click_invoice_extract_field_button: '_onClickInvoiceExtractFieldButton'\n    },\n    /**\n     * @override\n     * @param {Class} parent a class with EventDispatcherMixin\n     * @param {Object} params\n     * @param {string} params.fieldName\n     * @param {string} params.text\n     */\n    init: function (parent, params) {\n        Mixins.EventDispatcherMixin.init.call(this, arguments);\n        this.setParent(parent);\n\n        this._button = undefined;\n        this._isActive = false;\n        this._name = params.fieldName;\n        this._text = params.text;\n\n        this._ocrChosenBox = undefined;\n        this._selectedBox = undefined;\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Get the selected box for this field\n     *\n     * @returns {account_invoice_extract.Box|undefined}\n     */\n    getSelectedBox: function () {\n        return this._selectedBox;\n    },\n    /**\n     * Get the field name\n     *\n     * @returns {string}\n     */\n    getName: function () {\n        return this._name;\n    },\n    /**\n     * Called to compute changes on a field, usually after selecting a new\n     * box. The view should be updated with the new field info.\n     *\n     * @param {Object} params\n     * @param {any} params.fieldChangedInfo\n     * @param {Object} params.state state of the form renderer\n     * @returns {Object}\n     */\n    handleFieldChanged: function (params) {\n        var fieldChangedInfo = params.fieldChangedInfo;\n        var state = params.state;\n        var changes = {};\n        switch (this._name) {\n            case 'date':\n                changes = { invoice_date: field_utils.parse.date(fieldChangedInfo.split(' ')[0]) };\n                break;\n            case 'supplier':\n                if (_.isNumber(fieldChangedInfo)) {\n                    changes = { partner_id: { id: fieldChangedInfo } };\n                }\n                break;\n            case 'VAT_Number':\n                changes = { partner_id: { id: fieldChangedInfo } };\n                break;\n            case 'due_date':\n                changes = { invoice_date_due: field_utils.parse.date(fieldChangedInfo.split(' ')[0]) };\n                break;\n            case 'invoice_id':\n                changes =  ['out_invoice', 'out_refund'].includes(state.context.default_move_type) ? { name: fieldChangedInfo } : { ref: fieldChangedInfo };\n                break;\n            case 'currency':\n                changes = { currency_id: { id: fieldChangedInfo } };\n                break;\n        }\n        return changes;\n    },\n    /**\n     * Tell whether this field is active or not.\n     *\n     * @returns {boolean}\n     */\n    isActive: function () {\n        return this._isActive;\n    },\n    /**\n     * Render the button that is related to this field, so that the user can\n     * select this field by clicking on the button.\n     *\n     * @param {Object} params\n     * @param {$.Element} params.$container jQuery element which contains a\n     *   single node in the DOM. This node is the container of the buttons.\n     * @returns {Promise}\n     */\n    renderButton: function (params) {\n        this._button =  new InvoiceExtractFieldButton(this, {\n            fieldName: this._name,\n            isActive: this._isActive,\n            text: this._text,\n        });\n        return this._button.appendTo(params.$container);\n    },\n    /**\n     * Set this field as active.\n     */\n    setActive: function () {\n        if (!this._isActive) {\n            this._isActive = true;\n            if (this._button) {\n                this._button.setActive();\n            }\n        }\n    },\n    /**\n     * Set this field as inactive.\n     */\n    setInactive: function () {\n        if (this._isActive) {\n            this._isActive = false;\n            if (this._button) {\n                this._button.setInactive();\n            }\n        }\n    },\n    /**\n     * Reset the boxes selected by user and ocr\n     */\n    resetSelection: function () {\n        this._ocrChosenBox = undefined;\n        this._selectedBox = undefined;\n    },\n    /**\n     * Set the provided invoice extract 'box' as chosen by the OCR.\n     *\n     * @param {account_invoice_extract.Box} box\n     */\n    setOcrChosenBox: function (box) {\n        this._ocrChosenBox = box;\n        if (!this._selectedBox) {\n            this._selectedBox = this._ocrChosenBox;\n            this._ocrChosenBox.setSelected();\n        }\n    },\n    /**\n     * Set the provided invoice extract 'box' as selected.\n     *\n     * @param {account_invoice_extract.Box} box\n     */\n    setSelectedBox: function (box) {\n        if (this._selectedBox) {\n            this._selectedBox.unsetSelected();\n        }\n        this._selectedBox = box;\n        if (this._ocrChosenBox && this._selectedBox !== this._ocrChosenBox) {\n            this._ocrChosenBox.unsetSelected();\n        }\n        this._selectedBox.setSelected();\n    },\n    /**\n     * Unselect the selected box. If the box to unselect is not the OCR chosen\n     * box, make the ocr chosen box as selected. If the selected box is the\n     * ocr chosen one, also remove the ocr chosen status of this box.\n     */\n    unselectBox: function () {\n        if (!this._selectedBox) {\n            return;\n        }\n        if (this._ocrChosenBox && this._ocrChosenBox.isSelected()) {\n            this._selectedBox = undefined;\n            this._ocrChosenBox.unsetSelected();\n            this._ocrChosenBox.unsetOcrChosen();\n            this._ocrChosenBox = undefined;\n        } else if (this._ocrChosenBox) {\n            this._selectedBox.unsetSelected();\n            this._selectedBox = this._ocrChosenBox;\n            this._ocrChosenBox.setSelected();\n        } else {\n            this._selectedBox.unsetSelected();\n            this._selectedBox = undefined;\n        }\n    },\n    /**\n     * Remove tracking of this box. This method is called when the\n     * corresponding box is destroyed.\n     *\n     * @param {account_invoice_extract.Box} box\n     */\n    unsetBox: function (box) {\n        if (this._ocrChosenBox === this._selectedBox && this._ocrChosenBox === box) {\n            this._ocrChosenBox = this._selectedBox = undefined;\n        } else if (this._ocrChosenBox === box) {\n            this._ocrChosenBox = undefined;\n        } else {\n            this._selectedBox = this._ocrSelectedBox;\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Called when the button corresponding to this field has been clicked.\n     *\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onClickInvoiceExtractFieldButton: function (ev) {\n        ev.stopPropagation();\n        this.trigger_up('active_invoice_extract_field', {\n            fieldName: this._name,\n        });\n    },\n});\n\nexport default InvoiceExtractField;\n", "/** @odoo-module **/\n\nimport Widget from 'web.Widget';\n\n/**\n * This widget represents a field button on top of the attachment preview,\n * which is used to filter boxes which the selected field.\n */\nvar InvoiceExtractFieldButton = Widget.extend({\n    events: {\n        'click': '_onClick',\n    },\n    template: 'account_invoice_extract.Button',\n    /**\n     * @override\n     * @param {Class} parent a class with EventDispatcherMixin\n     * @param {Object} params\n     * @param {string} params.fieldName\n     * @param {boolean} [params.isActive=false]\n     * @param {string} params.text\n     */\n    init: function (parent, params) {\n        this._super.apply(this, arguments);\n\n        this._fieldName = params.fieldName;\n        this._isActive = params.isActive || false;\n        this._text = params.text;\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Get the field name of the field button\n     *\n     * @returns {string}\n     */\n    getFieldName: function () {\n        return this._fieldName;\n    },\n    /**\n     * Get the text representation of the field button\n     *\n     * @returns {string}\n     */\n    getText: function () {\n        return this._text;\n    },\n    /**\n     * Tell whether this field button is active or not\n     *\n     * @returns {boolean}\n     */\n    isActive: function () {\n        return this._isActive;\n    },\n    /**\n     * Set this field button as active\n     */\n    setActive: function () {\n        this._isActive = true;\n        if (this.$el) {\n            this.$el.addClass('active');\n        }\n    },\n    /**\n     * Set this field button as inactive\n     */\n    setInactive: function () {\n        this._isActive = false;\n        if (this.$el) {\n            this.$el.removeClass('active');\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     * @param {MouseEvent} ev\n     */\n    _onClick: function (ev) {\n        ev.stopPropagation();\n        this.trigger_up('click_invoice_extract_field_button');\n    },\n});\n\nexport default InvoiceExtractFieldButton;\n", "/** @odoo-module **/\n\nimport { _t } from 'web.core';\n\nimport InvoiceExtractField from '@account_invoice_extract/js/invoice_extract_field';\n\nimport Class from 'web.Class';\nimport Mixins from 'web.mixins';\nimport ServicesMixin from 'web.ServicesMixin';\nimport session from 'web.session';\n\n/**\n * This class groups the fields that are supported by the OCR. Also, it manages\n * the 'active' status of the fields, so that there is only one active field at\n * any given time.\n */\nvar InvoiceExtractFields = Class.extend(Mixins.EventDispatcherMixin, ServicesMixin, {\n    custom_events: {\n        active_invoice_extract_field: '_onActiveInvoiceExtractField',\n    },\n    /**\n     * @override\n     * @param {Class} parent a class with EventDispatcherMixin\n     */\n    init: function (parent, is_customer_invoice=false) {\n        var self = this;\n        Mixins.EventDispatcherMixin.init.call(this, arguments);\n        this.setParent(parent);\n\n        var vendor_text = is_customer_invoice ? _t('Customer') : _t('Vendor');\n        var invoice_id_text = is_customer_invoice ? _t('Reference') : _t('Vendor Reference');\n\n        this._fields = [\n            new InvoiceExtractField(this, { text: _t('VAT'), fieldName: 'VAT_Number' }),\n            new InvoiceExtractField(this, { text: vendor_text, fieldName: 'supplier' }),\n            new InvoiceExtractField(this, { text: _t('Date'), fieldName: 'date' }),\n            new InvoiceExtractField(this, { text: _t('Due Date'), fieldName: 'due_date' }),\n            new InvoiceExtractField(this, { text: invoice_id_text, fieldName: 'invoice_id' }),\n        ];\n\n        this._fields[0].setActive();\n        session.user_has_group('base.group_multi_currency').then(function(has_multi_currency) {\n            if (has_multi_currency) {\n                self._fields.push(new InvoiceExtractField(self, { text: _t('Currency'), fieldName: 'currency' }));\n            }\n        });\n    },\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Get the current active field.\n     *\n     * @returns {account_invoice_extract.Field|undefined} returns undefined if\n     *   there is no active field.\n     */\n    getActiveField: function () {\n        return _.find(this._fields, function (field) {\n            return field.isActive();\n        });\n    },\n    /**\n     * Get the field with the given 'name'. If no field name is provided,\n     * gets the active field.\n     *\n     * @param {Object} [params={}]\n     * @param {string} [params.name] the field name\n     * @returns {account_invoice_extract.Field|undefined} returns undefined if\n     *   the provided field name does not exist.\n     */\n    getField: function (params) {\n        params = params || {};\n        if (!params.name) {\n            return this.getActiveField();\n        }\n        return _.find(this._fields, function (field) {\n            return field.getName() === params.name;\n        });\n    },\n    /**\n     * Render the buttons for each fields.\n     *\n     * @param {Object} params\n     * @param {$.Element} params.$container jQuery element with a single node\n     *   in the DOM, which is the container of the field buttons.\n     * @returns {Promise} resolves when all buttons are rendered\n     */\n    renderButtons: function (params) {\n        var proms = [];\n        _.each(this._fields, function (field) {\n            proms.push(field.renderButton(params));\n        });\n        return Promise.all(proms);\n    },\n    /**\n     * Reset the active state of fields, so that the 1st field is active.\n     */\n    resetActive: function () {\n        var oldActiveField = this.getActiveField();\n        if (!oldActiveField) {\n            return;\n        }\n        oldActiveField.setInactive();\n        this._fields[0].setActive();\n    },\n    /**\n     * Reset the active state of fields, so that the 1st field is active.\n     */\n    resetFieldsSelections: function () {\n        _.each(this._fields, function (field) {\n            field.resetSelection();\n        });\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Called when a field is selected (e.g. by clicking on the corresponding\n     * button). This field becomes active, and other fields become inactive.\n     *\n     * @private\n     * @param {OdooEvent} ev\n     * @param {string} ev.data.fieldName\n     */\n    _onActiveInvoiceExtractField: function (ev) {\n        var oldActiveField = this.getActiveField();\n        if (!oldActiveField) {\n            return;\n        }\n        oldActiveField.setInactive();\n        var field = this.getField({ name: ev.data.fieldName });\n        if (!field) {\n            return;\n        }\n        field.setActive();\n    },\n});\n\nexport default InvoiceExtractFields;\n", "/** @odoo-module **/\n\nimport InvoiceExtractBoxLayer from '@account_invoice_extract/js/invoice_extract_box_layer';\nimport InvoiceExtractFields from '@account_invoice_extract/js/invoice_extract_fields';\n\nimport FormRenderer from 'web.FormRenderer';\n\n/**\n * This is the renderer of the subview that adds OCR features on the attachment\n * preview. It displays boxes that have been generated by the OCR, and those\n * boxes are grouped by field name. The OCR automatically selects a box, but\n * the user can manually selects another box. Boxes are only visible in 'edit'\n * mode.\n */\nvar InvoiceExtractFormRenderer = FormRenderer.extend({\n    custom_events: _.extend({}, FormRenderer.prototype.custom_events, {\n        active_invoice_extract_field: '_onActiveInvoiceExtractField',\n        preview_attachment_validation: '_onAttachmentPreviewValidation',\n        choice_ocr_invoice_extract_box: '_onChoiceOcrInvoiceExtractBox',\n        click_invoice_extract_box: '_onClickInvoiceExtractBox',\n        click_invoice_extract_box_layer: '_onClickInvoiceExtractBoxLayer',\n        destroy_invoice_extract_box: '_onDestroyInvoiceExtractBox',\n        select_invoice_extract_box: '_onSelectInvoiceExtractBox',\n    }),\n    /**\n     * @override\n     */\n    init: function () {\n        this._super.apply(this, arguments);\n\n        this._res_id = -1;\n        this._invoiceExtractBoxData = [];\n        this._invoiceExtractBoxLayers = [];\n        var is_customer_invoice = false;\n        if (this.state.context.default_move_type == 'out_invoice' || this.state.context.default_move_type == 'out_refund')\n            is_customer_invoice = true;\n        this._invoiceExtractFields = new InvoiceExtractFields(this, is_customer_invoice);\n        this._$invoiceExtractButtons = [];\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Remove any state related to the invoice extract, such as buttons or\n     * boxes. This method is called when the form is not in 'edit' mode.\n     *\n     * @private\n     */\n    _destroyInvoiceExtract: function () {\n        _.invoke(this._invoiceExtractBoxLayers, 'destroy');\n        this._res_id = -1;\n        this._invoiceExtractBoxData = [];\n        this._invoiceExtractBoxLayers = [];\n        this._invoiceExtractFields.resetActive();\n        if (this._$invoiceExtractButtons.length) {\n            this._$invoiceExtractButtons.remove();\n        }\n        this._$invoiceExtractButtons = [];\n    },\n    /**\n     * Display the invoice extract boxes on the box layers for the active field.\n     *\n     * @private\n     */\n    _displayInvoiceExtractBoxes: function () {\n        var field = this._invoiceExtractFields.getActiveField();\n        if (!field) {\n            return;\n        }\n        _.each(this._invoiceExtractBoxLayers, function (boxLayer) {\n            boxLayer.displayBoxes({ fieldName: field.getName() });\n        });\n    },\n    /**\n     * Called when a box or box layer interaction has been performed by the\n     * user (such as selecting a new box). Usually, a field in the form view\n     * should be updated with the box content after clicking on the box.\n     *\n     * @private\n     * @param {Object} params\n     * @param {any} params.fieldChangedInfo new info on the field, based on\n     *   box or box layer interaction\n     */\n    _handleInvoiceExtractFieldChanged: function (params) {\n        var fieldChangedInfo = params.fieldChangedInfo;\n        var field = this._invoiceExtractFields.getActiveField();\n        if (!field) {\n            return;\n        }\n        var changes = field.handleFieldChanged({\n            fieldChangedInfo: fieldChangedInfo,\n            state: this.state,\n        });\n        if (!_.isEmpty(changes)) {\n            this.trigger_up('field_changed', {\n                dataPointID: this.state.id,\n                changes: changes,\n            });\n        }\n    },\n    /**\n     * Setup data for the invoice extract stuffs. In particular, get box data\n     * and render them. Boxes are displayed on the provided page.\n     *\n     * @private\n     * @param {$.Element} $page jQuery element corresponding to the attachment\n     *   page. This is useful for the rendering of the box layer, which is\n     *   handled differently whether the attachment is an image or a pdf.\n     */\n    _initInvoiceExtract: function ($page) {\n        var self = this;\n        this._res_id = this.state.res_id;\n        this._rpc({\n            model: 'account.move',\n            method: 'get_boxes',\n            args: [this.state.res_id],\n        }).then(function (boxesData) {\n            self._invoiceExtractBoxData = boxesData;\n            self._renderInvoiceExtractBoxLayers({\n                $page: $page,\n            }).then(function () {\n                self._displayInvoiceExtractBoxes();\n            });\n        });\n    },\n    /**\n     * Render the field buttons on top of the attachment page preview, so that\n     * the user can select the boxes to show for the given field.\n     *\n     * @private\n     * @returns {Promise} resolves when all buttons are rendered\n     */\n    _renderInvoiceExtractButtons: function () {\n        return this._invoiceExtractFields.renderButtons({\n            $container: this._$invoiceExtractButtons,\n        });\n    },\n    /**\n     * Render the box layers using fetched box data and the attachment page\n     * preview. Boxes data are used in order to make and render boxes, whereas\n     * the page is used in order to correctly size the box layers. Also, the\n     * setup of the box layers slightly differs with images and pdf, because\n     * the latter uses an iframe.\n     *\n     * Because the iframe is created with the pdf viewer, and there is no odoo\n     * bundle related to it, we cannot simply extend the bundle with SCSS\n     * styles. As a work-around, the style of the boxes and box layers must be\n     * defined in CSS, so that we can dynamically add this file in the header\n     * of the iframe (for the case of PDF viewer).\n     *\n     * @private\n     * @param {Object} params\n     * @param {$.Element} params.$page the attachment page preview container\n     */\n    _renderInvoiceExtractBoxLayers: function (params) {\n        var $page = params.$page;\n        var boxLayer;\n        var proms = [];\n        //in case of img\n        if ($page.hasClass('img-fluid')) {\n            // Delete previous box layer(s)\n            if (this._invoiceExtractBoxLayers.length > 0) {\n                for (const oldBoxLayer of this._invoiceExtractBoxLayers) {\n                    oldBoxLayer.destroy();\n                }\n            }\n            boxLayer = new InvoiceExtractBoxLayer(this, {\n                boxesData: this._invoiceExtractBoxData,\n                mode: 'img',\n                $page: $page,\n            });\n            proms.push(boxLayer.insertAfter($page));\n            this._invoiceExtractBoxLayers = [boxLayer];\n        }\n        //in case of pdf\n        if ($page.is('iframe')) {\n            var $document = $page.contents();\n            // dynamically add css on the pdf viewer\n            $document.find('head').append('<link rel=\"stylesheet\" type=\"text/css\" href=\"/account_invoice_extract/static/src/css/account_invoice_extract_box_layer.css\"></link>');\n            var $textLayers = $document.find('.textLayer');\n            for (var index = 0; index < $textLayers.length; index++) {\n                var $textLayer = $textLayers.eq(index);\n                var pageNum = $textLayer[0].parentElement.dataset['pageNumber'] - 1;\n                var existingBoxLayer = this._invoiceExtractBoxLayers.find(function(bl) {\n                    return bl._pageNum == pageNum;\n                });\n                if (existingBoxLayer) {\n                    existingBoxLayer.setTextLayer({\n                        $textLayer: $textLayer,\n                    });\n                    proms.push(existingBoxLayer.insertAfter($textLayer));\n                }\n                else {\n                    boxLayer = new InvoiceExtractBoxLayer(this, {\n                        boxesData: this._invoiceExtractBoxData,\n                        mode: 'pdf',\n                        pageNum: pageNum,\n                        $buttons: this._$invoiceExtractButtons,\n                        $page: $page,\n                        $textLayer: $textLayer,\n                    });\n                    proms.push(boxLayer.insertAfter($textLayer));\n                    this._invoiceExtractBoxLayers.push(boxLayer);\n                }\n            }\n        }\n        return Promise.all(proms);\n    },\n    /**\n     * @private\n     * @param {$.Element} $attachment\n     */\n    _startInvoiceExtract: function ($attachment) {\n        var $ocrSuccess = this.$('.o_success_ocr');\n        if (\n            $attachment.length !== 0 &&\n            $ocrSuccess.length > 0 &&\n            !$ocrSuccess.hasClass('o_invisible_modifier') &&\n            this.mode === 'edit'\n        ) {\n            // fetch boxes data for this record\n            if (this._res_id != this.state.res_id) {\n                this._destroyInvoiceExtract();\n                this._initInvoiceExtract($attachment);\n            }\n            // render boxes if their data has already been fetched\n            else if (this._invoiceExtractBoxData.length > 0) {\n                var self = this;\n                this._renderInvoiceExtractBoxLayers({\n                    $page: $attachment,\n                }).then(function () {\n                    self._displayInvoiceExtractBoxes();\n                });\n            }\n            // render buttons if they're not already rendered\n            if (this._$invoiceExtractButtons.length == 0) {\n                this._$invoiceExtractButtons = $('<div class=\"o_invoice_extract_buttons\"/>');\n                $attachment.before(this._$invoiceExtractButtons);\n                this._renderInvoiceExtractButtons();\n            }\n        } else {\n            this._destroyInvoiceExtract();\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Called when there is a change on active field. It should display boxes\n     * related to the newly active field.\n     *\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onActiveInvoiceExtractField: function (ev) {\n        ev.stopPropagation();\n        this._displayInvoiceExtractBoxes();\n    },\n    /**\n     * Called when the chatter has rendered the attachment preview. In 'edit'\n     * mode, it should render the invoice extract boxes and buttons.\n     *\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onAttachmentPreviewValidation: function (ev) {\n        ev.stopPropagation();\n        var self = this;\n        if (this.$attachmentPreview === undefined) {\n            return;\n        }\n        // case pdf (iframe)\n        this.$attachmentPreview.find('iframe').on(\"load\", function () { // wait for iframe to load\n            var $iframe = self.$attachmentPreview.find('iframe');\n            var $iframeDoc = self.$attachmentPreview.find('iframe').contents();\n            // To get pagerendered trigger_up from pdf.js, we needed to change pdf.js default option and set\n            // eventBusDispatchToDOM to True\n            $iframeDoc[0].addEventListener('pagerendered', function () {\n                self._startInvoiceExtract($iframe);\n            });\n        });\n        // case img\n        var $documentImg = self.$attachmentPreview.find('.img-fluid');\n        var $attachment = $('#attachment_img');\n        if ($attachment.length && $attachment[0].complete) {\n            this._startInvoiceExtract($documentImg);\n        } else {\n            this.$attachmentPreview.find('.img-fluid').on(\"load\", function () {\n                self._startInvoiceExtract($documentImg);\n            });\n        }\n    },\n    /**\n     * Called when clicking on a box. In this case, the box should be selected,\n     * and the field in the form should be updated accordingly.\n     *\n     * @private\n     * @param {OdooEvent} ev\n     * @param {account_invoice_extract.Box} ev.data.box\n     */\n    _onClickInvoiceExtractBox: function (ev) {\n        ev.stopPropagation();\n        var self = this;\n        var box = ev.data.box;\n        var field = this._invoiceExtractFields.getActiveField();\n        if (!field) {\n            return;\n        }\n        this._rpc({\n            model: 'account.move',\n            method: 'set_user_selected_box',\n            args: [[this.state.res_id], box.getID()],\n        }).then(function (fieldChangedInfo) {\n            field.setSelectedBox(box);\n            self._handleInvoiceExtractFieldChanged({\n                fieldChangedInfo: fieldChangedInfo,\n            });\n        });\n    },\n    /**\n     * Called when clicking on a box layer (excluding clicking on a box inside\n     * the box layer). This unselects the selected box of the active field.\n     *\n     * @private\n     * @param {OdooEvent} ev\n     */\n    _onClickInvoiceExtractBoxLayer: function (ev) {\n        ev.stopPropagation();\n        var self = this;\n        var field = this._invoiceExtractFields.getActiveField();\n        if (!field) {\n            return;\n        }\n        var box = field.getSelectedBox();\n        if (!box) {\n            return;\n        }\n        field.unselectBox();\n        this._rpc({\n            model: 'account.move',\n            method: 'remove_user_selected_box',\n            args: [\n                [this.state.res_id],\n                box.getID()\n            ],\n        }).then(function (fieldChangedInfo) {\n            self._handleInvoiceExtractFieldChanged({\n                fieldChangedInfo: fieldChangedInfo,\n            });\n        });\n    },\n    /**\n     * Called by the box that has been chosen by the OCR. Notify the\n     * corresponding field that tracks selected boxes. This is useful in order\n     * to determine which box should be selected. Indeed, an OCR chosen box\n     * without any user-selected box should be marked as selected.\n     *\n     * @private\n     * @param {OdooEvent} ev\n     * @param {account_invoice_extract.Box} ev.data.box\n     */\n    _onChoiceOcrInvoiceExtractBox: function (ev) {\n        ev.stopPropagation();\n        var box = ev.data.box;\n        var field = this._invoiceExtractFields.getField({\n            name: box.getFieldName(),\n        });\n        if (!field) {\n            return;\n        }\n        field.setOcrChosenBox(box);\n    },\n    /**\n     * Called when a box is destroyed. This occurs in particular when there\n     * is a change of mode from 'edit' to 'readonly', in which box layers and\n     * boxes should not appear on the attachment anymore. In this case, the\n     * fields should untrack the boxes.\n     *\n     * @private\n     * @param {OdooEvent} ev\n     * @param {account_invoice_extract.Box} ev.data.box\n     */\n    _onDestroyInvoiceExtractBox: function (ev) {\n        ev.stopPropagation();\n        var box = ev.data.box;\n        if (!box.isOcrChosen() && !box.isSelected()) {\n            // ignore untracked boxes\n            return;\n        }\n        var field = this._invoiceExtractFields.getField({\n            name: box.getFieldName(),\n        });\n        if (!field) {\n            return;\n        }\n        field.unsetBox(box);\n    },\n    /**\n     * Called by the box that has been selected by the user. Notify the\n     * corresponding field that tracks selected boxes.\n     *\n     * @private\n     * @param {OdooEvent} ev\n     * @param {account_invoice_extract.Box} ev.data.box\n     */\n    _onSelectInvoiceExtractBox: function (ev) {\n        ev.stopPropagation();\n        var box = ev.data.box;\n        var field = this._invoiceExtractFields.getField({\n            name: box.getFieldName(),\n        });\n        if (!field) {\n            return;\n        }\n        field.setSelectedBox(box);\n    },\n});\n\nexport default InvoiceExtractFormRenderer;\n", "/** @odoo-module **/\n\n/**\n * This subview adds features related to OCR on attachments. An attachment\n * in the chatter can be sent to the OCR, which will add boxes per fields on\n * the attachment. Visually, the attachment preview displays boxes that are\n * generated by the OCR, and clicking on the boxes updates the form accordingly.\n * @see account_invoice_extract.FormRenderer\n */\nimport InvoiceExtractFormRenderer from '@account_invoice_extract/js/invoice_extract_form_renderer';\n\nimport FormView from 'web.FormView';\nimport view_registry from 'web.view_registry';\n\nvar InvoiceExtractFormView = FormView.extend({\n    config: _.extend({}, FormView.prototype.config, {\n        Renderer: InvoiceExtractFormRenderer,\n    }),\n});\n\nview_registry.add('account_invoice_extract_preview', InvoiceExtractFormView);\n\nexport default InvoiceExtractFormView;\n", "/** @odoo-module alias=account_online_synchronization.odoo_fin_connector **/\n\"use strict\";\n\nimport { registry } from \"@web/core/registry\";\n\nconst actionRegistry = registry.category('actions');\nconst { loadJS } = owl.utils;\n/* global OdooFin */\n\nfunction OdooFinConnector(parent, action) {\n    const id = action.id;\n    let mode = action.params.mode || 'link';\n    // Ensure that the proxyMode is valid\n    const modeRegexp = /^[a-z0-9-_]+$/i;\n    if (!modeRegexp.test(action.params.proxyMode)) {\n        return;\n    }\n    let url = 'https://' + action.params.proxyMode + '.odoofin.com/proxy/v1/odoofin_link';\n\n    loadJS(url)\n        .then(function () {\n            // Create and open the iframe\n            let params = {\n                data: action.params,\n                proxyMode: action.params.proxyMode,\n                onEvent: function (event, data) {\n                    let rpcUrl = '/web/dataset/call_kw/account.online.link'\n                    switch (event) {\n                        case 'close':\n                            return;\n                        case 'reload':\n                            return parent.services.action.doAction({type: 'ir.actions.client', tag: 'reload'});\n                        case 'notification':\n                            parent.services.notification.add(data.message, data);\n                            break;\n                        case 'exchange_token':\n                            parent.services.rpc(rpcUrl + '/exchange_token', {\n                                model: 'account.online.link',\n                                method: 'exchange_token',\n                                args: [[id], data],\n                                kwargs: {}\n                            })\n                            break;\n                        case 'success':\n                            mode = data.mode || mode;\n                            return parent.services.rpc(rpcUrl + '/success', {\n                                model: 'account.online.link',\n                                method: 'success',\n                                args: [[id], mode, data],\n                                kwargs: {}\n                            })\n                            .then(action => parent.services.action.doAction(action));\n                        default:\n                            return;\n                    }\n                },\n                onAddBank: function () {\n                    // If the user doesn't find his bank\n                    return parent.services.rpc(\"/web/dataset/call_kw/account.online.link/create_new_bank_account_action\", {\n                        model: 'account.online.link',\n                        method: 'create_new_bank_account_action',\n                        args: [],\n                        kwargs: {}\n                    })\n                    .then(action => parent.services.action.doAction(action, {replace_last_action: true}));\n                }\n            }\n            OdooFin.create(params);\n            OdooFin.open();\n        });\n    return;\n}\n\nactionRegistry.add('odoo_fin_connector', OdooFinConnector);\n\nexport default OdooFinConnector;\n", "odoo.define('barcodes_mobile.BarcodeEvents', function (require) {\n\"use strict\";\n\nvar BarcodeEvents = require('barcodes.BarcodeEvents');\n\nconst mobile = require('web_mobile.core');\n\n\nif (!mobile.methods.closeVirtualKeyboard) {\n    return;\n}\nvar barcodeEvents = BarcodeEvents.BarcodeEvents;\n\n// Each time the input has the focus, the mobile virtual keyboard will\n// be opened but we don't control exactly when.\n// In some are cases, the opening is slowly deferred. The keyboard\n// will appear anyway and closeVirtualKeyboard will be executed too early.\nbarcodeEvents.$barcodeInput.on('focus', function () {\n    setTimeout(mobile.methods.closeVirtualKeyboard, 0);\n});\n\n// On mobile app, we can keep the input focused as the virtual keyboard\n// is closed by a specific method.\nbarcodeEvents._blurBarcodeInput = function () {\n    if (this.$barcodeInput) {\n        this.$barcodeInput.val('');\n    }\n}\nbarcodeEvents.__blurBarcodeInput = _.debounce(barcodeEvents._blurBarcodeInput,\n    barcodeEvents.inputTimeOut);\n\n\n});\n", "odoo.define('web_mobile.barcode_mobile_mixin', function (require) {\n\"use strict\";\n\nconst BarcodeScanner = require('@web_enterprise/webclient/barcode/barcode_scanner');\nconst core = require('web.core');\nconst _t = core._t;\n\nreturn {\n    events: {\n        'click .o_mobile_barcode': 'open_mobile_scanner'\n    },\n    async start() {\n        const res = await this._super(...arguments);\n        if (!BarcodeScanner.isBarcodeScannerSupported()) {\n            this.$el.find(\".o_mobile_barcode\").remove();\n        }\n        return res;\n    },\n    async open_mobile_scanner() {\n        let error = null;\n        let barcode = null;\n        try {\n            barcode = await BarcodeScanner.scanBarcode();\n        } catch (err) {\n            error = err.error.message;\n        }\n\n        if (barcode) {\n            this._onBarcodeScanned(barcode);\n            if ('vibrate' in window.navigator) {\n                window.navigator.vibrate(100);\n            }\n        } else {\n            this.displayNotification({\n                type: 'warning',\n                message: error || _t('Please, Scan again !'),\n            });\n        }\n    }\n};\n});\n", "/* @odoo-module */\n\nimport { XMLParser } from \"@web/core/utils/xml\";\nimport { _t } from \"@web/core/l10n/translation\";\nimport { evaluateExpr } from \"@web/core/py_js/py\";\nimport { INTERVALS, MODES, TIMELINES } from \"./cohort_model\";\nimport { sprintf } from \"@web/core/utils/strings\";\n\nexport class CohortArchParser extends XMLParser {\n    parse(arch, fields) {\n        const archInfo = {\n            fieldAttrs: {},\n        };\n        this.visitXML(arch, (node) => {\n            switch (node.tagName) {\n                case \"cohort\": {\n                    const title = node.getAttribute(\"string\");\n                    if (title) {\n                        archInfo.title = title;\n                    }\n                    const dateStart = node.getAttribute(\"date_start\");\n                    if (dateStart) {\n                        archInfo.dateStart = dateStart;\n                        archInfo.dateStartString = fields[dateStart].string;\n                    } else {\n                        throw new Error(_t('Cohort view has not defined \"date_start\" attribute.'));\n                    }\n                    const dateStop = node.getAttribute(\"date_stop\");\n                    if (dateStop) {\n                        archInfo.dateStop = dateStop;\n                        archInfo.dateStopString = fields[dateStop].string;\n                    } else {\n                        throw new Error(_t('Cohort view has not defined \"date_stop\" attribute.'));\n                    }\n                    const mode = node.getAttribute(\"mode\") || \"retention\";\n                    if (mode && MODES.includes(mode)) {\n                        archInfo.mode = mode;\n                    } else {\n                        throw new Error(\n                            sprintf(\n                                \"The argument %s is not a valid mode. Here are the modes: %s\",\n                                mode,\n                                MODES\n                            )\n                        );\n                    }\n                    const timeline = node.getAttribute(\"timeline\") || \"forward\";\n                    if (timeline && TIMELINES.includes(timeline)) {\n                        archInfo.timeline = timeline;\n                    } else {\n                        throw new Error(\n                            sprintf(\n                                \"The argument %s is not a valid timeline. Here are the timelines: %s\",\n                                timeline,\n                                TIMELINES\n                            )\n                        );\n                    }\n                    archInfo.measure = node.getAttribute(\"measure\") || \"__count\";\n                    const interval = node.getAttribute(\"interval\") || \"day\";\n                    if (interval && interval in INTERVALS) {\n                        archInfo.interval = interval;\n                    } else {\n                        throw new Error(\n                            sprintf(\n                                \"The argument %s is not a valid interval. Here are the intervals: %s\",\n                                interval,\n                                INTERVALS\n                            )\n                        );\n                    }\n                    break;\n                }\n                case \"field\": {\n                    let fieldName = node.getAttribute(\"name\"); // exists (rng validation)\n\n                    archInfo.fieldAttrs[fieldName] = {};\n                    if (node.hasAttribute(\"string\")) {\n                        archInfo.fieldAttrs[fieldName].string = node.getAttribute(\"string\");\n                    }\n                    if (node.hasAttribute(\"invisible\")) {\n                        const isInvisible = Boolean(evaluateExpr(node.getAttribute(\"invisible\")));\n                        if (isInvisible) {\n                            archInfo.fieldAttrs[fieldName].isInvisible = true;\n                            break;\n                        }\n                    }\n                }\n            }\n        });\n        return archInfo;\n    }\n}\n", "/* @odoo-module */\n\nimport { _lt } from \"@web/core/l10n/translation\";\nimport { KeepLast, Race } from \"@web/core/utils/concurrency\";\nimport { Model } from \"@web/views/helpers/model\";\nimport { computeReportMeasures, processMeasure } from \"@web/views/helpers/utils\";\n\nexport const MODES = [\"retention\", \"churn\"];\nexport const TIMELINES = [\"forward\", \"backward\"];\nexport const INTERVALS = {\n    day: _lt(\"Day\"),\n    week: _lt(\"Week\"),\n    month: _lt(\"Month\"),\n    year: _lt(\"Year\"),\n};\n\n/**\n * @typedef {import(\"@web/search/search_model\").SearchParams} SearchParams\n */\n\nexport class CohortModel extends Model {\n    /**\n     * @override\n     */\n    setup(params) {\n        // concurrency management\n        this.keepLast = new KeepLast();\n        this.race = new Race();\n        const _load = this._load.bind(this);\n        this._load = (...args) => {\n            return this.race.add(_load(...args));\n        };\n\n        this.metaData = params;\n        this.data = null;\n        this.searchParams = null;\n        this.intervals = INTERVALS;\n    }\n\n    /**\n     * @param {SearchParams} searchParams\n     */\n    load(searchParams) {\n        const { comparison, context, domain } = searchParams;\n        this.searchParams = { context };\n        if (comparison) {\n            this.searchParams.domains = comparison.domains;\n        } else {\n            this.searchParams.domains = [{ arrayRepr: domain, description: null }];\n        }\n        const { cohort_interval, cohort_measure } = searchParams.context;\n        this.metaData.interval = cohort_interval || this.metaData.interval;\n\n        this.metaData.measure = processMeasure(cohort_measure) || this.metaData.measure;\n        this.metaData.measures = computeReportMeasures(\n            this.metaData.fields,\n            this.metaData.fieldAttrs,\n            [this.metaData.measure],\n            this.metaData.additionalMeasures\n        );\n        return this._load(this.metaData);\n    }\n\n    /**\n     * @override\n     */\n    hasData() {\n        return this.data.some((data) => data.rows.length > 0);\n    }\n\n    /**\n     * @param {Object} params\n     */\n    async updateMetaData(params) {\n        Object.assign(this.metaData, params);\n        await this._load(this.metaData);\n        this.notify();\n    }\n\n    //--------------------------------------------------------------------------\n    // Protected\n    //--------------------------------------------------------------------------\n\n    /**\n     * @protected\n     * @param {Object} metaData\n     */\n    async _load(metaData) {\n        this.data = await this.keepLast.add(this._fetchData(metaData));\n        for (const i in this.data) {\n            this.data[i].title = this.searchParams.domains[i].description;\n        }\n    }\n\n    /**\n     * @protected\n     * @param {Object} metaData\n     */\n    async _fetchData(metaData) {\n        return Promise.all(\n            this.searchParams.domains.map(({ arrayRepr: domain }) => {\n                return this.orm.call(metaData.resModel, \"get_cohort_data\", [], {\n                    date_start: metaData.dateStart,\n                    date_stop: metaData.dateStop,\n                    measure: metaData.measure,\n                    interval: metaData.interval,\n                    domain: domain,\n                    mode: metaData.mode,\n                    timeline: metaData.timeline,\n                    context: this.searchParams.context,\n                });\n            })\n        );\n    }\n}\n", "/** @odoo-module **/\n\nimport { formatFloat, formatPercentage } from \"@web/fields/formatters\";\n\nconst { Component } = owl;\n\nexport class CohortRenderer extends Component {\n    setup() {\n        this.model = this.props.model;\n    }\n\n    range(n) {\n        return Array.from({ length: n }, (_, i) => i);\n    }\n\n    formatFloat(value) {\n        return formatFloat(value, { digits: [false, 1] });\n    }\n\n    formatPercentage(value) {\n        return formatPercentage(value, { digits: [false, 1] });\n    }\n}\n\nCohortRenderer.template = \"web_cohort.CohortRenderer\";\nCohortRenderer.props = [\"model\", \"onRowClicked\"];\n", "/* @odoo-module */\n\nimport { download } from \"@web/core/network/download\";\nimport { registry } from \"@web/core/registry\";\nimport { useService } from \"@web/core/utils/hooks\";\nimport { useModel } from \"@web/views/helpers/model\";\nimport { standardViewProps } from \"@web/views/helpers/standard_view_props\";\nimport { useSetupView } from \"@web/views/helpers/view_hook\";\nimport { Layout } from \"@web/views/layout\";\nimport { CohortArchParser } from \"./cohort_arch_parser\";\nimport { CohortModel } from \"./cohort_model\";\nimport { CohortRenderer } from \"./cohort_renderer\";\n\nclass CohortView extends owl.Component {\n    setup() {\n        this.actionService = useService(\"action\");\n\n        let modelParams;\n        if (this.props.state) {\n            modelParams = this.props.state.metaData;\n        } else {\n            const { arch, fields } = this.props;\n            const archInfo = new this.constructor.ArchParser().parse(arch, fields);\n            modelParams = {\n                additionalMeasures: this.props.additionalMeasures,\n                dateStart: archInfo.dateStart,\n                dateStartString: archInfo.dateStartString,\n                dateStop: archInfo.dateStop,\n                dateStopString: archInfo.dateStopString,\n                fieldAttrs: archInfo.fieldAttrs,\n                fields: this.props.fields,\n                interval: archInfo.interval,\n                measure: archInfo.measure,\n                mode: archInfo.mode,\n                resModel: this.props.resModel,\n                timeline: archInfo.timeline,\n                title: archInfo.title,\n            };\n        }\n\n        this.model = useModel(this.constructor.Model, modelParams);\n\n        useSetupView({\n            getLocalState: () => {\n                return { metaData: this.model.metaData };\n            },\n            getContext: () => this.getContext(),\n        });\n    }\n\n    getContext() {\n        const { measure, interval } = this.model.metaData;\n        return { cohort_measure: measure, cohort_interval: interval };\n    }\n\n    /**\n     * @param {Object} row\n     */\n    onRowClicked(row) {\n        if (row.value === undefined) {\n            return;\n        }\n\n        const context = Object.assign({}, this.model.searchParams.context);\n        const domain = row.domain;\n        const views = {};\n        for (const [viewId, viewType] of this.env.config.views || []) {\n            views[viewType] = viewId;\n        }\n        function getView(viewType) {\n            return [context[`${viewType}_view_id`] || views[viewType] || false, viewType];\n        }\n        const actionViews = [getView(\"list\"), getView(\"form\")];\n        this.actionService.doAction({\n            type: \"ir.actions.act_window\",\n            name: this.model.metaData.title,\n            res_model: this.model.metaData.resModel,\n            views: actionViews,\n            view_mode: \"list\",\n            target: \"current\",\n            context: context,\n            domain: domain,\n        });\n    }\n\n    /**\n     * Export cohort data in Excel file\n     */\n    async downloadExcel() {\n        const {\n            title,\n            resModel,\n            interval,\n            measure,\n            measures,\n            dateStartString,\n            dateStopString,\n            timeline,\n        } = this.model.metaData;\n        const { domains } = this.model.searchParams;\n        const data = {\n            title: title,\n            model: resModel,\n            interval_string: this.model.intervals[interval].toString(), // intervals are lazy-translated\n            measure_string: measures[measure].string,\n            date_start_string: dateStartString,\n            date_stop_string: dateStopString,\n            timeline: timeline,\n            rangeDescription: domains[0].description,\n            report: this.model.data[0],\n            comparisonRangeDescription: domains[1] && domains[1].description,\n            comparisonReport: this.model.data[1],\n        };\n        this.env.services.ui.block();\n        try {\n            // FIXME: [SAD/JPP] some data seems to be missing from the export in master. (check the python)\n            await download({\n                url: \"/web/cohort/export\",\n                data: { data: JSON.stringify(data) },\n            });\n        } finally {\n            this.env.services.ui.unblock();\n        }\n    }\n\n    /**\n     * @param {CustomEvent} ev\n     */\n    onDropDownSelected(ev) {\n        this.model.updateMetaData(ev.detail.payload);\n    }\n}\nCohortView.type = \"cohort\";\nCohortView.display_name = \"Cohort\";\nCohortView.icon = \"fa-signal\";\nCohortView.multiRecord = true;\nCohortView.template = \"web_cohort.CohortView\";\nCohortView.buttonTemplate = \"web_cohort.CohortView.Buttons\";\nCohortView.components = { Layout, Renderer: CohortRenderer };\nCohortView.props = {\n    ...standardViewProps,\n    additionalMeasures: { type: Array, elements: String, optional: 1 },\n};\nCohortView.defaultProps = {\n    additionalMeasures: [],\n};\n\nCohortView.searchMenuTypes = [\"filter\", \"comparison\", \"favorite\"];\n\nCohortView.Model = CohortModel;\nCohortView.ArchParser = CohortArchParser;\n\nregistry.category(\"views\").add(\"cohort\", CohortView);\n", "/** @odoo-module */\n\nimport { SampleServer } from \"@web/views/helpers/sample_server\";\nimport { parseDate } from \"@web/core/l10n/dates\";\nimport { registry } from \"@web/core/registry\";\n\n/**\n * This function mocks calls to the 'get_cohort_data' method. It is\n * registered to the SampleServer's mockRegistry, so it is called with a\n * SampleServer instance as \"this\".\n * @private\n * @param {Object} params\n * @param {string} params.model\n * @param {Object} params.kwargs\n * @returns {Object}\n */\nfunction _mockGetCohortData(params) {\n    const { model, date_start, interval, measure, mode, timeline } = params;\n\n    const columns_avg = {};\n    const rows = [];\n    let initialChurnValue = 0;\n\n    const groups = this._mockReadGroup({\n        model,\n        fields: [date_start],\n        groupBy: [date_start + \":\" + interval],\n    });\n    const totalCount = groups.length;\n    let totalValue = 0;\n    for (const group of groups) {\n        const format = SampleServer.FORMATS[interval];\n        const displayFormat = SampleServer.DISPLAY_FORMATS[interval];\n        const date = parseDate(group[date_start + \":\" + interval], { format });\n        const now = luxon.DateTime.local();\n        let colStartDate = date;\n        if (timeline === \"backward\") {\n            colStartDate = colStartDate.plus({ [`${interval}s`]: -15 });\n        }\n\n        let value =\n            measure === \"__count\"\n                ? this._getRandomInt(SampleServer.MAX_INTEGER)\n                : this._generateFieldValue(model, measure);\n        value = value || 25;\n        totalValue += value;\n        let initialValue = value;\n        let max = value;\n\n        const columns = [];\n        for (let column = 0; column <= 15; column++) {\n            if (!columns_avg[column]) {\n                columns_avg[column] = { percentage: 0, count: 0 };\n            }\n            if (colStartDate.plus({ [`${interval}s`]: column }) > now) {\n                columns.push({ value: \"-\", churn_value: \"-\", percentage: \"\" });\n                continue;\n            }\n            let colValue = 0;\n            if (max > 0) {\n                colValue = Math.min(Math.round(Math.random() * max), max);\n                max -= colValue;\n            }\n            if (timeline === \"backward\" && column === 0) {\n                initialValue = Math.min(Math.round(Math.random() * value), value);\n                initialChurnValue = value - initialValue;\n            }\n            const previousValue = column === 0 ? initialValue : columns[column - 1].value;\n            const remainingValue = previousValue - colValue;\n            const previousChurnValue =\n                column === 0 ? initialChurnValue : columns[column - 1].churn_value;\n            const churn_value = colValue + previousChurnValue;\n            let percentage = value ? parseFloat(remainingValue / value) : 0;\n            if (mode === \"churn\") {\n                percentage = 1 - percentage;\n            }\n            percentage = Number((100 * percentage).toFixed(1));\n            columns_avg[column].percentage += percentage;\n            columns_avg[column].count += 1;\n            columns.push({\n                value: remainingValue,\n                churn_value,\n                percentage,\n                period: column, // used as a t-key but we don't care about value itself\n            });\n        }\n        const keepRow = columns.some((c) => c.percentage !== \"\");\n        if (keepRow) {\n            rows.push({ date: date.toFormat(displayFormat), value, columns });\n        }\n    }\n    const avg_value = totalCount ? totalValue / totalCount : 0;\n    const avg = { avg_value, columns_avg };\n    return { rows, avg };\n}\n\nregistry.category(\"sample_server\").add(\"get_cohort_data\", _mockGetCohortData);\n", "/** @odoo-module **/\n\nimport ActivityMenu from '@mail/js/systray/systray_activity_menu';\nimport '@crm/js/systray_activity_menu';\n\nActivityMenu.include({\n    //--------------------------------------------------\n    // Private\n    //--------------------------------------------------\n    /**\n     * @override\n     */\n    _getViewsList(model) {\n        if (model === \"crm.lead\") {\n            return [[false, 'list'], [false, 'kanban'],\n                    [false, 'form'],[false, 'calendar'],\n                    [false, 'pivot'], [false, 'graph'],\n                    [false, 'cohort'], [false, 'dashboard'],\n                    [false, 'map'], [false, 'activity']\n                ];\n        }\n        return this._super(...arguments);\n    },\n});\n", "odoo.define('crm.leads.tree', function (require) {\n\"use strict\";\n    var ListController = require('web.ListController');\n    var ListView = require('web.ListView');\n\n    var KanbanController = require('web.KanbanController');\n    var KanbanView = require('@crm/js/crm_kanban')[Symbol.for(\"default\")].CrmKanbanView;\n\n    var viewRegistry = require('web.view_registry');\n\n    function renderGenerateLeadsButton() {\n        if (this.$buttons) {\n            var self = this;\n            var lead_type = self.initialState.getContext()['default_type'];\n            this.$buttons.on('click', '.o_button_generate_leads', function () {\n                self.do_action({\n                    name: 'Generate Leads',\n                    type: 'ir.actions.act_window',\n                    res_model: 'crm.iap.lead.mining.request',\n                    target: 'new',\n                    views: [[false, 'form']],\n                    context: {'is_modal': true, 'default_lead_type': lead_type},\n                });\n            });\n        }\n    }\n\n    var LeadMiningRequestListController = ListController.extend({\n        willStart: function() {\n            var self = this;\n            var ready = this.getSession().user_has_group('sales_team.group_sale_manager')\n                .then(function (is_sale_manager) {\n                    if (is_sale_manager) {\n                        self.buttons_template = 'LeadMiningRequestListView.buttons';\n                    }\n                });\n            return Promise.all([this._super.apply(this, arguments), ready]);\n        },\n        renderButtons: function () {\n            this._super.apply(this, arguments);\n            renderGenerateLeadsButton.apply(this, arguments);\n        }\n    });\n\n    var LeadMiningRequestListView = ListView.extend({\n        config: _.extend({}, ListView.prototype.config, {\n            Controller: LeadMiningRequestListController,\n        }),\n    });\n\n    var LeadMiningRequestKanbanController = KanbanController.extend({\n        willStart: function() {\n            var self = this;\n            var ready = this.getSession().user_has_group('sales_team.group_sale_manager')\n                .then(function (is_sale_manager) {\n                    if (is_sale_manager) {\n                        self.buttons_template = 'LeadMiningRequestKanbanView.buttons';\n                    }\n                });\n            return Promise.all([this._super.apply(this, arguments), ready]);\n        },\n        renderButtons: function () {\n            this._super.apply(this, arguments);\n            renderGenerateLeadsButton.apply(this, arguments);\n        }\n    });\n\n    var LeadMiningRequestKanbanView = KanbanView.extend({\n        config: _.extend({}, KanbanView.prototype.config, {\n            Controller: LeadMiningRequestKanbanController,\n        }),\n    });\n\n    viewRegistry.add('crm_iap_lead_mining_request_tree', LeadMiningRequestListView);\n    viewRegistry.add('crm_iap_lead_mining_request_kanban', LeadMiningRequestKanbanView);\n});\n", "odoo.define('crm_iap_mine.generate_leads_steps', function (require) {\n\"use strict\";\n\nvar tour = require('web_tour.tour');\nconst {Markup} = require('web.utils');\nvar core = require('web.core');\n\nrequire('@crm/js/tours/crm');\nvar _t = core._t;\n\nvar DragOppToWonStepIndex = _.findIndex(tour.tours.crm_tour.steps, function (step) {\n    return (step.id === 'drag_opportunity_to_won_step');\n});\n\ntour.tours.crm_tour.steps.splice(DragOppToWonStepIndex + 1, 0, {\n    /**\n     * Add some steps between \"Drag your opportunity to <b>Won</b> when you get\n     * the deal. Congrats !\" and \"Let\u2019s have a look at an Opportunity.\" to\n     * include the steps related to the lead generation (crm_iap_mine).\n     * This eases the on boarding for the Lead Generation process.\n     *\n     */\n    trigger: \".o_button_generate_leads\",\n    content: Markup(_t(\"Looking for more opportunities ?<br>Try the <b>Lead Generation</b> tool.\")),\n    position: \"bottom\",\n    run: function (actions) {\n        actions.auto('.o_button_generate_leads');\n    },\n}, {\n    trigger: '.modal-body .o_industry',\n    content: _t(\"Which Industry do you want to target?\"),\n    position: \"right\",\n}, {\n    trigger: '.modal-footer button[name=action_submit]',\n    content: _t(\"Now, just let the magic happen!\"),\n    position: \"bottom\",\n    run: function (actions) {\n        actions.auto('.modal-footer button[special=cancel]');\n}\n});\n\n});\n", "odoo.define('hotel_dashboard_hk.Dashboard', function (require) {\n\"use strict\";\n\nvar AbstractAction = require('web.AbstractAction');\nvar ajax = require('web.ajax');\nvar core = require('web.core');\nvar rpc = require('web.rpc');\nvar session = require('web.session');\nvar web_client = require('web.web_client');\nvar _t = core._t;\nvar QWeb = core.qweb;\n\nvar PosDashboard = AbstractAction.extend({\n    template: 'PosDashboard',\n    events: {\n            'click .hk_dirty_room':'hk_dirty_room',\n            'click .hk_clean_room':'hk_clean_room',\n            'click .hk_occupied_dirty_room':'hk_occupied_dirty_room',\n            'click .hk_occupied_clean_room':'hk_occupied_clean_room',\n            'click .hk_inspect_room':'hk_inspect_room',\n            'click .hk_maintain_room':'hk_maintain_room',\n            'click .hk_oos_room':'hk_oos_room',\n            'click .hk_ooo_room':'hk_ooo_room',\n            'click .hk_occupied_room':'hk_occupied_room',\n            'click .hk_arrival_room':'hk_arrival_room',\n            'click .hk_departure_room':'hk_departure_room',\n            'click .hk_inventory_product':'hk_inventory_product',\n    },\n\n    init: function(parent, context) {\n        this._super(parent, context);\n        this.dashboards_templates = ['PosOrders'];\n        this.total_dirty_room = [];\n        this.total_clean_room = [];\n        this.total_occupied_dirty_room = [];\n        this.total_occupied_clean_room = [];\n        this.total_inspect_room = [];\n        this.total_maintain_room = [];\n        this.total_oos_room = [];\n        this.total_ooo_room = [];\n        this.total_occupied_room = [];\n        this.total_arrival_room = [];\n        this.total_departure_room = [];\n    },\n\n    willStart: function() {\n        var self = this;\n        return $.when(ajax.loadLibs(this), this._super()).then(function() {\n            return self.fetch_data();\n        });\n    },\n\n    start: function() {\n        var self = this;\n        this.set(\"title\", 'Dashboard');\n        return this._super().then(function() {\n            self.render_dashboards();\n            self.$el.parent().addClass('oe_background_grey');\n        });\n    },\n\n    fetch_data: function() {\n        var self = this;\n        var def1 =  this._rpc({\n                model: 'hotel.housekeeping',\n                method: 'get_housekeeping_state'\n        }).then(function(result) {\n           self.total_dirty_room = result['total_dirty_room'],\n           self.total_clean_room = result['total_clean_room']\n           self.total_occupied_dirty_room = result['total_occupied_dirty_room'],\n           self.total_occupied_clean_room = result['total_occupied_clean_room']\n           self.total_inspect_room = result['total_inspect_room']\n           self.total_maintain_room = result['total_maintain_room']\n           self.total_oos_room = result['total_oos_room']\n           self.total_ooo_room = result['total_ooo_room']\n           self.total_occupied_room = result['total_occupied_room']\n           self.total_arrival_room = result['total_arrival_room']\n           self.total_departure_room = result['total_departure_room']\n        });\n     \n        return $.when(def1);\n    },\n\n    render_dashboards: function() {\n        var self = this;\n            _.each(this.dashboards_templates, function(template) {\n                self.$('.o_pos_dashboard').append(QWeb.render(template, {widget: self}));\n            });\n    },\n      \n//      get_emp_image_url: function(employee){\n//        return window.location.origin + '/web/image?model=pos.order&field=image&id='+employee;\n//    },\n\n\n\n\n       hk_dirty_room: function(e){\n        var self = this;\n        e.stopPropagation();\n        e.preventDefault();\n        var options = {\n            on_reverse_breadcrumb: this.on_reverse_breadcrumb,\n        };\n        this.do_action({\n            name: _t(\"Dirty Rooms\"),\n            type: 'ir.actions.act_window',\n            res_model: 'hotel.housekeeping',\n            view_mode: 'kanban,form',\n            views: [[false, 'list'],[false, 'form']],\n            domain: [['state', '=','dirty'],['clean_type', '=','checkout']],\n            target: 'current'\n        }, options)\n\n    },\n\n\n      hk_clean_room: function(e){\n        var self = this;\n        e.stopPropagation();\n        e.preventDefault();\n        var options = {\n            on_reverse_breadcrumb: this.on_reverse_breadcrumb,\n        };\n        this.do_action({\n            name: _t(\"Clean Rooms\"),\n            type: 'ir.actions.act_window',\n            res_model: 'hotel.housekeeping',\n            view_mode: 'tree,form',\n            views: [[false, 'list'],[false, 'form']],\n            domain: [['state', '=','clean'],['clean_type', '=','checkout']],\n            target: 'current'\n        }, options)\n\n    },\n    hk_occupied_dirty_room: function(e){\n        var self = this;\n        e.stopPropagation();\n        e.preventDefault();\n        var options = {\n            on_reverse_breadcrumb: this.on_reverse_breadcrumb,\n        };\n        var today = new Date();\n        var dd = String(today.getDate()).padStart(2, '0');\n        var mm = String(today.getMonth() + 1).padStart(2, '0'); //January is 0!\n        var yyyy = today.getFullYear();\n\n        today = mm + '/' + dd + '/' + yyyy;\n        this.do_action({\n            name: _t(\"Occupied Dirty Rooms\"),\n            type: 'ir.actions.act_window',\n            res_model: 'hotel.housekeeping',\n            view_mode: 'kanban,form',\n            views: [[false, 'list'],[false, 'form']],\n            domain: [['state', '=','dirty' ],['clean_type', '=','occ_dirty'],['current_date', '=',today]],\n            target: 'current'\n        }, options)\n\n    },\n\n\n    hk_occupied_clean_room: function(e){\n        var self = this;\n        e.stopPropagation();\n        e.preventDefault();\n        var options = {\n            on_reverse_breadcrumb: this.on_reverse_breadcrumb,\n        };\n        var today = new Date();\n        var dd = String(today.getDate()).padStart(2, '0');\n        var mm = String(today.getMonth() + 1).padStart(2, '0'); //January is 0!\n        var yyyy = today.getFullYear();\n\n        today = mm + '/' + dd + '/' + yyyy;\n        this.do_action({\n            name: _t(\"Occupied Clean Rooms\"),\n            type: 'ir.actions.act_window',\n            res_model: 'hotel.housekeeping',\n            view_mode: 'tree,form',\n            views: [[false, 'list'],[false, 'form']],\n            domain: [['state', '=','clean'],['clean_type', '=','occ_dirty'],['current_date', '=',today]],\n            target: 'current'\n        }, options)\n\n    },\n\n    hk_inspect_room: function(e){\n        var self = this;\n        e.stopPropagation();\n        e.preventDefault();\n        var options = {\n            on_reverse_breadcrumb: this.on_reverse_breadcrumb,\n        };\n        this.do_action({\n            name: _t(\"Reservation (Dirty) Rooms\"),\n            type: 'ir.actions.act_window',\n            res_model: 'hotel.housekeeping',\n            view_mode: 'tree,kanban,form',\n            views: [[false, 'list'],[false, 'form']],\n            domain: [['state', '=','dirty'],['clean_type', '=','reserve']],\n            target: 'current'\n        }, options)\n\n    },\n\n    hk_maintain_room: function(e){\n        var self = this;\n        e.stopPropagation();\n        e.preventDefault();\n        var options = {\n            on_reverse_breadcrumb: this.on_reverse_breadcrumb,\n        };\n        this.do_action({\n            name: _t(\"Maintain Rooms\"),\n            type: 'ir.actions.act_window',\n            res_model: 'hotel.housekeeping',\n            view_mode: 'tree,kanban,form',\n            views: [[false, 'list'],[false, 'form']],\n            domain: [['state', '=','dirty' ],['quality', '=', 'maintenance']],\n            target: 'current'\n        }, options)\n            \n\n    },\n    hk_oos_room: function(e){\n        var self = this;\n        e.stopPropagation();\n        e.preventDefault();\n        var options = {\n            on_reverse_breadcrumb: this.on_reverse_breadcrumb,\n        };\n        this.do_action({\n            name: _t(\"OOS Rooms\"),\n            type: 'ir.actions.act_window',\n            res_model: 'hotel.housekeeping',\n            view_mode: 'tree,kanban,form',\n            views: [[false, 'list'],[false, 'form']],\n            domain: [['state', '=','dirty' ],['quality', '=', 'oos']],\n            target: 'current'\n        }, options)\n\n    },\n\n    hk_ooo_room: function(e){\n        var self = this;\n        e.stopPropagation();\n        e.preventDefault();\n        var options = {\n            on_reverse_breadcrumb: this.on_reverse_breadcrumb,\n        };\n        this.do_action({\n            name: _t(\"OOO Rooms\"),\n            type: 'ir.actions.act_window',\n            res_model: 'hotel.housekeeping',\n            view_mode: 'tree,kanban,form',\n            views: [[false, 'list'],[false, 'form']],\n            domain: [['state', '=','dirty' ],['quality', '=', 'ooo']],\n            target: 'current'\n        }, options)\n    },\n    hk_occupied_room: function(e){\n        var self = this;\n        e.stopPropagation();\n        e.preventDefault();\n        var options = {\n            on_reverse_breadcrumb: this.on_reverse_breadcrumb,\n        };\n        this.do_action({\n            name: _t(\"In-house Rooms\"),\n            type: 'ir.actions.act_window',\n            res_model: 'hotel.room',\n            view_mode: 'kanban,form',\n            views: [[false, 'list'],[false, 'form']],\n            domain: [['room_status', '=','occupied' ]],\n            target: 'current'\n        }, options)\n\n    },\n    hk_arrival_room: function(e){\n        var self = this;\n        e.stopPropagation();\n        e.preventDefault();\n        var options = {\n            on_reverse_breadcrumb: this.on_reverse_breadcrumb,\n        };\n        var today = new Date();\n        var dd = String(today.getDate()).padStart(2, '0');\n        var mm = String(today.getMonth() + 1).padStart(2, '0'); //January is 0!\n        var yyyy = today.getFullYear();\n\n        today = mm + '/' + dd + '/' + yyyy;\n        this.do_action({\n            name: _t(\"Arrival Rooms\"),\n            type: 'ir.actions.act_window',\n            res_model: 'hotel.room.booking.history',\n            view_mode: 'kanban,form',\n            views: [[false, 'list'],[false, 'form']],\n            domain: [['check_in_date', '=',today]],\n            target: 'current'\n        }, options)\n\n    },\n    hk_departure_room: function(e){\n        var self = this;\n        e.stopPropagation();\n        e.preventDefault();\n        var options = {\n            on_reverse_breadcrumb: this.on_reverse_breadcrumb,\n        };\n        var today = new Date();\n        var dd = String(today.getDate()).padStart(2, '0');\n        var mm = String(today.getMonth() + 1).padStart(2, '0'); //January is 0!\n        var yyyy = today.getFullYear();\n\n        today = mm + '/' + dd + '/' + yyyy;\n        this.do_action({\n            name: _t(\"Departure Rooms\"),\n            type: 'ir.actions.act_window',\n            res_model: 'hotel.room.booking.history',\n            view_mode: 'kanban,form',\n            views: [[false, 'list'],[false, 'form']],\n            domain: [['check_out_date', '=',today]],\n            target: 'current'\n        }, options)\n\n    },\n    hk_inventory_product: function(e){\n        var self = this;\n        e.stopPropagation();\n        e.preventDefault();\n        var options = {\n            on_reverse_breadcrumb: this.on_reverse_breadcrumb,\n        };\n       \n        this.do_action({\n            name: _t(\"HK Inventory\"),\n            type: 'ir.actions.act_window',\n            res_model: 'stock.quant',\n            view_mode: 'kanban,form',\n            views: [[false, 'list'],[false, 'form']],\n            domain: [['location_id.complete_name', '=','HK/Stock']],\n            target: 'current'\n        }, options)\n\n    },\n\n\n});\n\n\ncore.action_registry.add('pos_dashboard', PosDashboard);\n\nreturn PosDashboard;\n\n});\n", "odoo.define('hr_gantt.GanttRenderer', function (require) {\n    'use strict';\n\n    const GanttRenderer = require('web_gantt.GanttRenderer');\n    const HrGanttRow = require('hr_gantt.GanttRow');\n\n    const HrGanttRenderer = GanttRenderer.extend({\n        config: Object.assign({}, GanttRenderer.prototype.config, {\n            GanttRow: HrGanttRow\n        }),\n    });\n\n    return HrGanttRenderer;\n});\n", "odoo.define('hr_gantt.GanttRow', function (require) {\n    'use strict';\n\n    const GanttRow = require('web_gantt.GanttRow');\n    const StandaloneM2OAvatarEmployee = require('@hr/js/standalone_m2o_avatar_employee')[Symbol.for(\"default\")];\n\n    const HrGanttRow = GanttRow.extend({\n        template: 'HrGanttView.Row',\n\n        /**\n         * @override\n         */\n        init(parent, pillsInfo, viewInfo, options) {\n            this._super(...arguments);\n            const isGroupedByEmployee = pillsInfo.groupedByField === 'employee_id';\n            this.showEmployeeAvatar = isGroupedByEmployee && !!pillsInfo.resId;\n        },\n\n        /**\n         * @override\n         */\n        willStart() {\n            const defs = [this._super(...arguments)];\n            if (this.showEmployeeAvatar) {\n                defs.push(this._preloadAvatarWidget());\n            }\n            return Promise.all(defs);\n        },\n\n        /**\n         * @override\n         */\n        start() {\n            if (this.showEmployeeAvatar) {\n                this.avatarWidget.$el.appendTo(this.$('.o_gantt_row_employee_avatar'));\n            }\n            return this._super(...arguments);\n        },\n\n        //--------------------------------------------------------------------------\n        // Private\n        //--------------------------------------------------------------------------\n        _getEmployeeID() {\n            return this.resId;\n        },\n\n        /**\n         * Initialize the avatar widget in virtual DOM.\n         *\n         * @private\n         * @returns {Promise}\n         */\n        async _preloadAvatarWidget() {\n            const employee = [this._getEmployeeID(), this.name];\n            this.avatarWidget = new StandaloneM2OAvatarEmployee(this, employee);\n            return this.avatarWidget.appendTo(document.createDocumentFragment());\n        },\n    });\n\n    return HrGanttRow;\n});\n", "odoo.define('hr_gantt.GanttView', function (require) {\n    'use strict';\n\n    const viewRegistry = require('web.view_registry');\n    const GanttView = require('web_gantt.GanttView');\n    const HrGanttRenderer = require('hr_gantt.GanttRenderer');\n\n    const HrGanttView = GanttView.extend({\n        config: Object.assign({}, GanttView.prototype.config, {\n            Renderer: HrGanttRenderer,\n        }),\n    });\n\n    viewRegistry.add('hr_gantt', HrGanttView);\n    return HrGanttView;\n});\n", "/** @odoo-module **/\n\n    import EmployeeProfileFormView from '@hr/js/language';\n    import { UpdateDeviceAccountControllerMixin } from 'web_mobile.mixins';\n\n    EmployeeProfileFormView.prototype.config.Controller.include(UpdateDeviceAccountControllerMixin);\n", "odoo.define('web.OrgChart', function (require) {\n\"use strict\";\n\nvar AbstractField = require('web.AbstractField');\nvar concurrency = require('web.concurrency');\nvar core = require('web.core');\nvar field_registry = require('web.field_registry');\nvar session = require('web.session');\n\nvar QWeb = core.qweb;\nvar _t = core._t;\n\nvar FieldOrgChart = AbstractField.extend({\n\n    events: {\n        \"click .o_employee_redirect\": \"_onEmployeeRedirect\",\n        \"click .o_employee_sub_redirect\": \"_onEmployeeSubRedirect\",\n        \"click .o_employee_more_managers\": \"_onEmployeeMoreManager\"\n    },\n    /**\n     * @constructor\n     * @override\n     */\n    init: function (parent, options) {\n        this._super.apply(this, arguments);\n        this.dm = new concurrency.DropMisordered();\n        this.employee = null;\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n    /**\n     * Get the chart data through a rpc call.\n     *\n     * @private\n     * @param {integer} employee_id\n     * @returns {Promise}\n     */\n    _getOrgData: function () {\n        var self = this;\n        return this.dm.add(this._rpc({\n            route: '/hr/get_org_chart',\n            params: {\n                employee_id: this.employee,\n                context: session.user_context,\n            },\n        })).then(function (data) {\n            return data;\n        });\n    },\n    /**\n     * Get subordonates of an employee through a rpc call.\n     *\n     * @private\n     * @param {integer} employee_id\n     * @returns {Promise}\n     */\n    _getSubordinatesData: function (employee_id, type) {\n        return this.dm.add(this._rpc({\n            route: '/hr/get_subordinates',\n            params: {\n                employee_id: employee_id,\n                subordinates_type: type,\n                context: session.user_context,\n            },\n        }));\n    },\n    /**\n     * @override\n     * @private\n     */\n    _render: function () {\n        if (!this.recordData.id) {\n            return this.$el.html(QWeb.render(\"hr_org_chart\", {\n                managers: [],\n                children: [],\n            }));\n        }\n        else if (!this.employee) {\n            // the widget is either dispayed in the context of a hr.employee form or a res.users form\n            this.employee = this.recordData.employee_ids !== undefined ? this.recordData.employee_ids.res_ids[0] : this.recordData.id;\n        }\n\n        var self = this;\n        return this._getOrgData().then(function (orgData) {\n            if (_.isEmpty(orgData)) {\n                orgData = {\n                    managers: [],\n                    children: [],\n                }\n            }\n            orgData.view_employee_id = self.recordData.id;\n            self.$el.html(QWeb.render(\"hr_org_chart\", orgData));\n            self.$('[data-toggle=\"popover\"]').each(function () {\n                $(this).popover({\n                    html: true,\n                    title: function () {\n                        var $title = $(QWeb.render('hr_orgchart_emp_popover_title', {\n                            employee: {\n                                name: $(this).data('emp-name'),\n                                id: $(this).data('emp-id'),\n                            },\n                        }));\n                        $title.on('click',\n                            '.o_employee_redirect', _.bind(self._onEmployeeRedirect, self));\n                        return $title;\n                    },\n                    container: this,\n                    placement: 'left',\n                    trigger: 'focus',\n                    content: function () {\n                        var $content = $(QWeb.render('hr_orgchart_emp_popover_content', {\n                            employee: {\n                                id: $(this).data('emp-id'),\n                                name: $(this).data('emp-name'),\n                                direct_sub_count: parseInt($(this).data('emp-dir-subs')),\n                                indirect_sub_count: parseInt($(this).data('emp-ind-subs')),\n                            },\n                        }));\n                        $content.on('click',\n                            '.o_employee_sub_redirect', _.bind(self._onEmployeeSubRedirect, self));\n                        return $content;\n                    },\n                    template: QWeb.render('hr_orgchart_emp_popover', {}),\n                });\n            });\n        });\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    _onEmployeeMoreManager: function(event) {\n        event.preventDefault();\n        this.employee = parseInt($(event.currentTarget).data('employee-id'));\n        this._render();\n    },\n    /**\n     * Redirect to the employee form view.\n     *\n     * @private\n     * @param {MouseEvent} event\n     * @returns {Promise} action loaded\n     */\n    _onEmployeeRedirect: function (event) {\n        var self = this;\n        event.preventDefault();\n        var employee_id = parseInt($(event.currentTarget).data('employee-id'));\n        return this._rpc({\n            model: 'hr.employee',\n            method: 'get_formview_action',\n            args: [employee_id],\n        }).then(function(action) {\n            return self.do_action(action); \n        });\n    },\n    /**\n     * Redirect to the sub employee form view.\n     *\n     * @private\n     * @param {MouseEvent} event\n     * @returns {Promise} action loaded\n     */\n    _onEmployeeSubRedirect: function (event) {\n        event.preventDefault();\n        var employee_id = parseInt($(event.currentTarget).data('employee-id'));\n        var employee_name = $(event.currentTarget).data('employee-name');\n        var type = $(event.currentTarget).data('type') || 'direct';\n        var self = this;\n        if (employee_id) {\n            this._getSubordinatesData(employee_id, type).then(function(data) {\n                var domain = [['id', 'in', data]];\n                return self._rpc({\n                    model: 'hr.employee',\n                    method: 'get_formview_action',\n                    args: [employee_id],\n                }).then(function(action) {\n                    action = _.extend(action, {\n                        'name': _t('Team'),\n                        'view_mode': 'kanban,list,form',\n                        'views':  [[false, 'kanban'], [false, 'list'], [false, 'form']],\n                        'domain': domain,\n                        'context': {\n                            'default_parent_id': employee_id,\n                        }\n                    });\n                    delete action['res_id'];\n                    return self.do_action(action); \n                });\n            });\n        }\n    },\n});\n\nfield_registry.add('hr_org_chart', FieldOrgChart);\n\nreturn FieldOrgChart;\n\n});\n", "/** @odoo-module **/\n\nimport { registerInstancePatchModel } from '@mail/model/model_core';\n\nregisterInstancePatchModel('mail.messaging_initializer', 'mail_bot/static/src/models/messaging_initializer/messaging_initializer.js', {\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     */\n    async _initializeOdooBot() {\n        const data = await this.async(() => this.env.services.rpc({\n            model: 'mail.channel',\n            method: 'init_odoobot',\n        }));\n        if (!data) {\n            return;\n        }\n        this.env.session.odoobot_initialized = true;\n    },\n\n    /**\n     * @override\n     */\n    async start() {\n        await this.async(() => this._super());\n\n        if ('odoobot_initialized' in this.env.session && !this.env.session.odoobot_initialized) {\n            this._initializeOdooBot();\n        }\n    },\n});\n", "odoo.define('mail_mobile.ocn', function (require) {\n\"use strict\";\n\nconst mobile = require('web_mobile.core');\nvar ajax = require('web.ajax');\nconst { session } = require('@web/session');\n\n//Send info only if client is mobile\nif (mobile.methods.getFCMKey) {\n    var registerDevice = function (fcm_project_id) {\n        mobile.methods.getFCMKey({\n            project_id: fcm_project_id,\n            inbox_action: session.inbox_action,\n        }).then(function (response) {\n            if (response.success) {\n                ajax.rpc('/web/dataset/call_kw/res.config.settings/register_device', {\n                    model: 'res.config.settings',\n                    method: 'register_device',\n                    args: [response.data.subscription_id, response.data.device_name],\n                    kwargs: {},\n                }).then(function (ocn_token) {\n                    if (mobile.methods.setOCNToken) {\n                        mobile.methods.setOCNToken({ocn_token: ocn_token});\n                    }\n                });\n            }\n        });\n    };\n    if (session.fcm_project_id) {\n        registerDevice(session.fcm_project_id);\n    } else {\n        ajax.rpc('/web/dataset/call_kw/res.config.settings/get_fcm_project_id', {\n            model: 'res.config.settings',\n            method: 'get_fcm_project_id',\n            args: [],\n            kwargs: {},\n        }).then(function (response) {\n            if (response) {\n                registerDevice(response);\n            }\n        });\n    }\n}\n\n});\n", "/* global checkVATNumber */\nodoo.define('partner.autocomplete.Mixin', function (require) {\n'use strict';\n\nvar concurrency = require('web.concurrency');\n\nvar core = require('web.core');\nvar Qweb = core.qweb;\nvar utils = require('web.utils');\nvar _t = core._t;\n\n/**\n * This mixin only works with classes having EventDispatcherMixin in 'web.mixins'\n */\nvar PartnerAutocompleteMixin = {\n    _dropPreviousOdoo: new concurrency.DropPrevious(),\n    _dropPreviousClearbit: new concurrency.DropPrevious(),\n    _timeout : 1000, // Timeout for Clearbit autocomplete in ms\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Get list of companies via Autocomplete API\n     *\n     * @param {string} value\n     * @returns {Promise}\n     * @private\n     */\n    _autocomplete: function (value) {\n        var self = this;\n        value = value.trim();\n        var isVAT = this._isVAT(value);\n        var odooSuggestions = [];\n        var clearbitSuggestions = [];\n        return new Promise(function (resolve, reject) {\n            var odooPromise = self._getOdooSuggestions(value, isVAT).then(function (suggestions){\n                odooSuggestions = suggestions;\n            });\n\n            // Only get Clearbit suggestions if not a VAT number\n            var clearbitPromise = isVAT ? false : self._getClearbitSuggestions(value).then(function (suggestions){\n                clearbitSuggestions = suggestions;\n            });\n\n            var concatResults = function () {\n                // Add Clearbit result with Odoo result (with unique domain)\n                if (clearbitSuggestions && clearbitSuggestions.length) {\n                    var websites = odooSuggestions.map(function (suggestion) {\n                        return suggestion.website;\n                    });\n                    clearbitSuggestions.forEach(function (suggestion) {\n                        if (websites.indexOf(suggestion.domain) < 0) {\n                            websites.push(suggestion.domain);\n                            odooSuggestions.push(suggestion);\n                        }\n                    });\n                }\n\n                odooSuggestions = _.filter(odooSuggestions, function (suggestion) {\n                    return !suggestion.ignored;\n                });\n                _.each(odooSuggestions, function(suggestion){\n                delete suggestion.ignored;\n                });\n                return resolve(odooSuggestions);\n            };\n\n            self._whenAll([odooPromise, clearbitPromise]).then(concatResults, concatResults);\n        });\n\n    },\n\n    /**\n     * Get enrichment data\n     *\n     * @param {Object} company\n     * @param {string} company.website\n     * @param {string} company.partner_gid\n     * @param {string} company.vat\n     * @returns {Promise}\n     * @private\n     */\n    _enrichCompany: function (company) {\n        return this._rpc({\n            model: 'res.partner',\n            method: 'enrich_company',\n            args: [company.website, company.partner_gid, company.vat],\n        });\n    },\n\n    /**\n     * Get the company logo as Base 64 image from url\n     *\n     * @param {string} url\n     * @returns {Promise}\n     * @private\n     */\n    _getCompanyLogo: function (url) {\n        return this._getBase64Image(url).then(function (base64Image) {\n            // base64Image equals \"data:\" if image not available on given url\n            return base64Image ? base64Image.replace(/^data:image[^;]*;base64,?/, '') : false;\n        }).catch(function () {\n            return false;\n        });\n    },\n\n    /**\n     * Get enriched data + logo before populating partner form\n     *\n     * @param {Object} company\n     * @returns {Promise}\n     */\n    _getCreateData: function (company) {\n        var self = this;\n\n        var removeUselessFields = function (company) {\n            var fields = 'label,description,domain,logo,legal_name,ignored,email'.split(',');\n            fields.forEach(function (field) {\n                delete company[field];\n            });\n\n            var notEmptyFields = \"country_id,state_id\".split(',');\n            notEmptyFields.forEach(function (field) {\n                if (!company[field]) delete company[field];\n            });\n        };\n\n        return new Promise(function (resolve) {\n            // Fetch additional company info via Autocomplete Enrichment API\n            var enrichPromise = self._enrichCompany(company);\n\n            // Get logo\n            var logoPromise = company.logo ? self._getCompanyLogo(company.logo) : false;\n            self._whenAll([enrichPromise, logoPromise]).then(function (result) {\n                var company_data = result[0];\n                var logo_data = result[1];\n\n                // The vat should be returned for free. This is the reason why\n                // we add it into the data of 'company' even if an error such as\n                // an insufficient credit error is raised. \n                if (company_data.error && company_data.vat) {\n                    company.vat = company_data.vat;\n                }\n\n                if (company_data.error) {\n                    if (company_data.error_message === 'Insufficient Credit') {\n                        self._notifyNoCredits();\n                    } else if (company_data.error_message === 'No Account Token') {\n                        self._notifyAccountToken();\n                    } else {\n                        self.displayNotification({ message: company_data.error_message });\n                    }\n                    company_data = company;\n                }\n\n                if (_.isEmpty(company_data)) {\n                    company_data = company;\n                }\n\n                // Delete attribute to avoid \"Field_changed\" errors\n                removeUselessFields(company_data);\n\n                // Assign VAT coming from parent VIES VAT query\n                if (company.vat) {\n                    company_data.vat = company.vat;\n                }\n                resolve({\n                    company: company_data,\n                    logo: logo_data\n                });\n            });\n        });\n    },\n\n    /**\n     * Check connectivity\n     *\n     * @returns {boolean}\n     */\n    _isOnline: function () {\n        return navigator && navigator.onLine;\n    },\n\n    /**\n     * Validate: Not empty and length > 1\n     *\n     * @param {string} search_val\n     * @param {string} onlyVAT : Only valid VAT Number search\n     * @returns {boolean}\n     * @private\n     */\n    _validateSearchTerm: function (search_val, onlyVAT) {\n        if (onlyVAT) return this._isVAT(search_val);\n        else return search_val && search_val.length > 2;\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Returns a promise which will be resolved with the base64 data of the\n     * image fetched from the given url.\n     *\n     * @private\n     * @param {string} url : the url where to find the image to fetch\n     * @returns {Promise}\n     */\n    _getBase64Image: function (url) {\n        return new Promise(function (resolve, reject) {\n            var xhr = new XMLHttpRequest();\n            xhr.onload = function () {\n                utils.getDataURLFromFile(xhr.response).then(resolve);\n            };\n            xhr.open('GET', url);\n            xhr.responseType = 'blob';\n            xhr.onerror = reject;\n            xhr.send();\n        });\n    },\n\n    /**\n     * Use Clearbit Autocomplete API to return suggestions\n     *\n     * @param {string} value\n     * @returns {Promise}\n     * @private\n     */\n    _getClearbitSuggestions: function (value) {\n        var url = 'https://autocomplete.clearbit.com/v1/companies/suggest?query=' + value;\n        var def = $.ajax({\n            url: url,\n            dataType: 'json',\n            timeout: this._timeout,\n            success: function (suggestions) {\n                suggestions.map(function (suggestion) {\n                    suggestion.label = suggestion.name;\n                    suggestion.website = suggestion.domain;\n                    suggestion.description = suggestion.website;\n                    return suggestion;\n                });\n                return suggestions;\n            },\n        });\n\n        return this._dropPreviousClearbit.add(def);\n    },\n\n    /**\n     * Use Odoo Autocomplete API to return suggestions\n     *\n     * @param {string} value\n     * @param {boolean} isVAT\n     * @returns {Promise}\n     * @private\n     */\n    _getOdooSuggestions: function (value, isVAT) {\n        var method = isVAT ? 'read_by_vat' : 'autocomplete';\n\n        var def = this._rpc({\n            model: 'res.partner',\n            method: method,\n            args: [value],\n        }, {\n            shadow: true,\n        }).then(function (suggestions) {\n            suggestions.map(function (suggestion) {\n                suggestion.logo = suggestion.logo || '';\n                suggestion.label = suggestion.legal_name || suggestion.name;\n                if (suggestion.vat) suggestion.description = suggestion.vat;\n                else if (suggestion.website) suggestion.description = suggestion.website;\n\n                if (suggestion.country_id && suggestion.country_id.display_name) {\n                    if (suggestion.description) suggestion.description += _.str.sprintf(' (%s)', suggestion.country_id.display_name);\n                    else suggestion.description += suggestion.country_id.display_name;\n                }\n\n                return suggestion;\n            });\n            return suggestions;\n        });\n\n        return this._dropPreviousOdoo.add(def);\n    },\n    /**\n     * Check if searched value is possibly a VAT : 2 first chars = alpha + min 5 numbers\n     *\n     * @param {string} search_val\n     * @returns {boolean}\n     * @private\n     */\n    _isVAT: function (search_val) {\n        var str = this._sanitizeVAT(search_val);\n        return checkVATNumber(str);\n    },\n\n    /**\n     * Sanitize search value by removing all not alphanumeric\n     *\n     * @param {string} search_value\n     * @returns {string}\n     * @private\n     */\n    _sanitizeVAT: function (search_value) {\n        return search_value ? search_value.replace(/[^A-Za-z0-9]/g, '') : '';\n    },\n\n    /**\n     * Utility to wait for multiple promises\n     * Promise.all will reject all promises whenever a promise is rejected\n     * This utility will continue\n     *\n     * @param {Promise[]} promises\n     * @returns {Promise}\n     * @private\n     */\n    _whenAll: function (promises) {\n        return Promise.all(promises.map(function (p) {\n            return Promise.resolve(p);\n        }));\n    },\n\n    /**\n     * @private\n     * @returns {Promise}\n     */\n    _notifyNoCredits: function () {\n        var self = this;\n        return this._rpc({\n            model: 'iap.account',\n            method: 'get_credits_url',\n            args: ['partner_autocomplete'],\n        }).then(function (url) {\n            var title = _t('Not enough credits for Partner Autocomplete');\n            var content = Qweb.render('partner_autocomplete.insufficient_credit_notification', {\n                credits_url: url\n            });\n            self.displayNotification({\n                title,\n                message: utils.Markup(content),\n                className: 'o_partner_autocomplete_no_credits_notify',\n            });\n        });\n    },\n\n    _notifyAccountToken: function () {\n        var self = this;\n        return this._rpc({\n            model: 'iap.account',\n            method: 'get_config_account_url',\n            args: []\n        }).then(function (url) {\n            var title = _t('IAP Account Token missing');\n            if (url){\n                var content = Qweb.render('partner_autocomplete.account_token', {\n                    account_url: url\n                });\n                self.displayNotification({\n                    title,\n                    message: utils.Markup(content),\n                    className: 'o_partner_autocomplete_no_credits_notify',\n                });\n            }\n            else {\n                self.displayNotification({ title });\n            }\n        });\n    },\n};\n\nreturn PartnerAutocompleteMixin;\n\n});\n", "odoo.define('partner.autocomplete.fieldchar', function (require) {\n'use strict';\n\nvar basic_fields = require('web.basic_fields');\nvar core = require('web.core');\nvar field_registry = require('web.field_registry');\nvar AutocompleteMixin = require('partner.autocomplete.Mixin');\n\nvar QWeb = core.qweb;\n\nvar FieldChar = basic_fields.FieldChar;\n\n/**\n * FieldChar extension to suggest existing companies when changing the company\n * name on a res.partner view (indeed, it is designed to change the \"name\",\n * \"website\" and \"image\" fields of records of this model).\n */\nvar FieldAutocomplete = FieldChar.extend(AutocompleteMixin, {\n    className: 'o_field_partner_autocomplete',\n    debounceSuggestions: 400,\n    resetOnAnyFieldChange: true,\n\n    jsLibs: [\n        '/partner_autocomplete/static/lib/jsvat.js'\n    ],\n\n    events: _.extend({}, FieldChar.prototype.events, {\n        'keyup': '_onKeyup',\n        'mousedown .o_partner_autocomplete_suggestion': '_onMousedown',\n        'focusout': '_onFocusout',\n        'mouseenter .o_partner_autocomplete_suggestion': '_onHoverDropdown',\n        'click .o_partner_autocomplete_suggestion': '_onSuggestionClicked',\n    }),\n\n    /**\n     * @constructor\n     * Prepares the basic rendering of edit mode by setting the root to be a\n     * div.dropdown.open.\n     * @see FieldChar.init\n     */\n    init: function () {\n        this._super.apply(this, arguments);\n\n        // If the autocomplete is applied to vat field, only search valid vat number\n        this.onlyVAT = this.name === 'vat';\n\n        if (this.mode === 'edit') {\n            this.tagName = 'div';\n            this.className += ' dropdown open w-100';\n        }\n\n        if (this.debounceSuggestions > 0) {\n            this._suggestCompanies = _.debounce(this._suggestCompanies.bind(this), this.debounceSuggestions);\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Check if the autocomplete should be active\n     * Active :\n     *  - only when creating new record\n     *  - on model res.partner and is_company=true\n     *  - on model res.company\n     *\n     * @returns {boolean}\n     * @private\n     */\n    _isActive: function () {\n        return this.model === 'res.company' ||\n            (\n                this.model === 'res.partner'\n                && this.record.data.is_company\n                && !(this.record.data && this.record.data.id)\n            );\n    },\n\n    /**\n     *\n     * @private\n     */\n    _removeDropdown: function () {\n        if (this.$dropdown) {\n            this.$dropdown.remove();\n            this.$dropdown = undefined;\n        }\n    },\n\n    /**\n     * Adds the <input/> element and prepares it. Note: the dropdown rendering\n     * is handled outside of the rendering routine (but instead by reacting to\n     * user input).\n     *\n     * @override\n     * @private\n     */\n    _renderEdit: function () {\n        this.$el.empty();\n        // Prepare and add the input\n        this._prepareInput().appendTo(this.$el);\n    },\n\n    /**\n     * Selects the given company suggestions by notifying changes to the view\n     * for the \"name\", \"website\" and \"image\" fields. This is of course intended\n     * to work only with the \"res.partner\" form view.\n     *\n     * @private\n     * @param {Object} company\n     */\n    _selectCompany: function (company) {\n        var self = this;\n        this._getCreateData(company).then(function (data) {\n            if (data.logo) {\n                var logoField = self.model === 'res.partner' ? 'image_1920' : 'logo';\n                data.company[logoField] = data.logo;\n            }\n\n            // Some fields are unnecessary in res.company\n            if (self.model === 'res.company') {\n                var fields = 'comment,child_ids,bank_ids,additional_info'.split(',');\n                fields.forEach(function (field) {\n                    delete data.company[field];\n                });\n            }\n\n            self._setOne2ManyField('bank_ids', data.company.bank_ids);\n            delete data.company.bank_ids;\n\n            self.trigger_up('field_changed', {\n                dataPointID: self.dataPointID,\n                changes: data.company,\n                onSuccess: function () {\n                    // update the input's value directly\n                    if (self.onlyVAT)\n                        self.$input.val(self._formatValue(company.vat));\n                    else\n                        self.$input.val(self._formatValue(company.name));\n                },\n            });\n        });\n        this._removeDropdown();\n    },\n\n    _setOne2ManyField: function (field, list) {\n        var self = this;\n        var viewType = this.record.viewType;\n        if (list && this.record.fieldsInfo[viewType] && this.record.fieldsInfo[viewType][field]) {\n            list.forEach(function (item) {\n                var changes = {};\n                changes[field] = {\n                    operation: 'CREATE',\n                    data: item,\n                };\n\n                self.trigger_up('field_changed', {\n                    dataPointID: self.dataPointID,\n                    changes: changes,\n                });\n            });\n        }\n    },\n\n    /**\n     * Shows the dropdown with the suggestions. If one is\n     * already opened, it removes the old one before rerendering the dropdown.\n     *\n     * @private\n     */\n    _showDropdown: function () {\n        this._removeDropdown();\n        if (this.suggestions.length > 0) {\n            this.$dropdown = $(QWeb.render('partner_autocomplete.dropdown', {\n                suggestions: this.suggestions,\n            }));\n            this.$dropdown.appendTo(this.$el);\n            // We need to make sure that the element containing the dropdown menu doesn't have the\n            // style attribute overflow: hidden, otherwise the dropdown menu will be hidden by it\n            this.$el.removeClass('o_text_overflow');\n            this.$input.addClass('o_text_overflow');\n        }\n    },\n\n    /**\n     * Shows suggestions according to the given value.\n     * Note: this method is debounced (@see init).\n     *\n     * @private\n     * @param {string} value - searched term\n     */\n    _suggestCompanies: function (value) {\n        var self = this;\n        if (this._validateSearchTerm(value, this.onlyVAT) && this._isOnline()) {\n            return this._autocomplete(value).then(function (suggestions) {\n                if (suggestions && suggestions.length) {\n                    self.suggestions = suggestions;\n                    self._showDropdown();\n                } else {\n                    self._removeDropdown();\n                }\n            });\n        } else {\n            this._removeDropdown();\n        }\n    },\n\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Called on focusout -> removes the suggestions dropdown.\n     *\n     * @private\n     */\n    _onFocusout: function () {\n        this._removeDropdown();\n    },\n\n    /**\n     * Called when hovering a suggestion in the dropdown -> sets it as active.\n     *\n     * @private\n     * @param {Event} e\n     */\n    _onHoverDropdown: function (e) {\n        this.$dropdown.find('.active').removeClass('active');\n        $(e.currentTarget).parent().addClass('active');\n    },\n\n    /**\n     * @override of FieldChar (called when the user is typing text)\n     * Checks the <input/> value and shows suggestions according to\n     * this value.\n     *\n     * @private\n     */\n    _onInput: function () {\n        this._super.apply(this, arguments);\n        if (this._isActive()) {\n            this._suggestCompanies(this.$input.val());\n        }\n    },\n\n    /**\n     * @override of FieldChar\n     * Changes the \"up\" and \"down\" key behavior when the dropdown is opened (to\n     * navigate through dropdown suggestions).\n     * Triggered by keydown to execute the navigation multiple times when the\n     * user keeps the \"down\" or \"up\" pressed.\n     *\n     * @private\n     * @param {Event} e\n     */\n    _onKeydown: function (e) {\n        switch (e.which) {\n            case $.ui.keyCode.UP:\n            case $.ui.keyCode.DOWN:\n                if (!this.$dropdown) {\n                    break;\n                }\n                e.preventDefault();\n                var $suggestions = this.$dropdown.children();\n                var $active = $suggestions.filter('.active');\n                var $to;\n                if ($active.length) {\n                    $to = e.which === $.ui.keyCode.DOWN ?\n                        $active.next() :\n                        $active.prev();\n                } else {\n                    $to = $suggestions.first();\n                }\n                if ($to.length) {\n                    $active.removeClass('active');\n                    $to.addClass('active');\n                }\n                return;\n        }\n        this._super.apply(this, arguments);\n    },\n\n    /**\n     * Called on keyup events to:\n     * -> remove the suggestions dropdown when hitting the \"escape\" key\n     * -> select the highlighted suggestion when hitting the \"enter\" key\n     *\n     * @private\n     * @param {Event} e\n     */\n    _onKeyup: function (e) {\n        switch (e.which) {\n            case $.ui.keyCode.ESCAPE:\n                e.preventDefault();\n                this._removeDropdown();\n                break;\n            case $.ui.keyCode.ENTER:\n                if (!this.$dropdown) {\n                    break;\n                }\n                e.preventDefault();\n                var $active = this.$dropdown.find('.o_partner_autocomplete_suggestion.active');\n                if (!$active.length) {\n                    return;\n                }\n                this._selectCompany(this.suggestions[$active.data('index')]);\n                break;\n        }\n    },\n\n    /**\n     * Called on mousedown event on a suggestion -> prevent default\n     * action so that the <input/> element does not lose the focus.\n     *\n     * @private\n     * @param {Event} e\n     */\n    _onMousedown: function (e) {\n        e.preventDefault(); // prevent losing focus on suggestion click\n    },\n\n    /**\n     * Called when a dropdown suggestion is clicked -> trigger_up changes for\n     * some fields in the view (not only this <input/> one) with the associated\n     * data (@see _selectCompany).\n     *\n     * @private\n     * @param {Event} e\n     */\n    _onSuggestionClicked: function (e) {\n        e.preventDefault();\n        this._selectCompany(this.suggestions[$(e.currentTarget).data('index')]);\n    },\n});\n\nfield_registry.add('field_partner_autocomplete', FieldAutocomplete);\n\nreturn FieldAutocomplete;\n});\n", "odoo.define('partner.autocomplete.many2one', function (require) {\n'use strict';\n\nvar FieldMany2One = require('web.relational_fields').FieldMany2One;\nvar core = require('web.core');\nvar AutocompleteMixin = require('partner.autocomplete.Mixin');\nvar field_registry = require('web.field_registry');\n\nvar _t = core._t;\n\nvar PartnerField = FieldMany2One.extend(AutocompleteMixin, {\n    jsLibs: [\n        '/partner_autocomplete/static/lib/jsvat.js'\n    ],\n\n    /**\n     * @override\n     */\n    init: function () {\n        this._super.apply(this, arguments);\n        this._addAutocompleteSource(this._searchSuggestions, {\n            placeholder: _t('Searching Autocomplete...'),\n            order: 20,\n            validation: this._validateSearchTerm,\n        });\n\n        this.additionalContext['show_vat'] = true;\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * Action : create popup form with pre-filled values from Autocomplete\n     *\n     * @param {Object} company\n     * @returns {Promise}\n     * @private\n     */\n    _createPartner: function (company) {\n        var self = this;\n        self.$('input').val('');\n\n        return self._getCreateData(company).then(function (data){\n            var context = {\n                'default_is_company': true\n            };\n            _.each(data.company, function (val, key) {\n                context['default_' + key] = val && val.id ? val.id : val;\n            });\n\n            // if(data.company.street_name && !data.company.street_number) context.default_street_number = '';\n            if (data.logo) context.default_image_1920 = data.logo;\n\n            return self._searchCreatePopup(\"form\", false, context);\n        });\n    },\n\n    /**\n     * Modify autocomplete results rendering\n     * Add logo in the autocomplete results if logo is provided\n     *\n     * @private\n     */\n    _modifyAutompleteRendering: function (){\n        var api = this.$input.data('ui-autocomplete');\n        // FIXME: bugfix to prevent traceback in mobile apps due to override\n        // of Many2one widget with native implementation.\n        if (!api) {\n            return;\n        }\n        api._renderItem = function(ul, item){\n            ul.addClass('o_partner_autocomplete_dropdown');\n            var $a = $('<a/>')[\"html\"](item.label);\n            if (item.logo){\n                var $img = $('<img/>').attr('src', item.logo);\n                $a.append($img);\n            }\n\n            return $(\"<li></li>\")\n                .data(\"item.autocomplete\",item)\n                .append($a)\n                .appendTo(ul)\n                .addClass(item.classname);\n        };\n    },\n\n    /**\n     * @override\n     * @private\n     */\n    _renderEdit: function (){\n        this._super.apply(this, arguments);\n        this._modifyAutompleteRendering();\n    },\n\n    /**\n     * Query Autocomplete and add results to the popup\n     *\n     * @override\n     * @param search_val {string}\n     * @returns {Promise}\n     * @private\n     */\n    _searchSuggestions: function (search_val) {\n        var self = this;\n        return new Promise(function (resolve, reject) {\n            if (self._isOnline()) {\n\n                self._autocomplete(search_val).then(function (suggestions) {\n                    var choices = [];\n                    if (suggestions && suggestions.length) {\n                        _.each(suggestions, function (suggestion) {\n                            var label = '<i class=\"fa fa-magic text-muted\"/> ';\n                            label += _.str.sprintf('%s, <span class=\"text-muted\">%s</span>', suggestion.label, suggestion.description);\n\n                            choices.push({\n                                label: label,\n                                action: function () {\n                                    self._createPartner(suggestion);\n                                },\n                                logo: suggestion.logo,\n                                classname: 'o_partner_autocomplete_dropdown_item',\n                            });\n                        });\n                    }\n\n                    resolve(choices);\n                });\n            } else {\n               resolve([]);\n            }\n        });\n    },\n});\n\nfield_registry.add('res_partner_many2one', PartnerField);\n\nreturn PartnerField;\n});\n", "/** @odoo-module **/\n\nimport { registry } from \"@web/core/registry\";\nimport { session } from \"@web/session\";\n\nexport const companyAutocompleteService = {\n    dependencies: [\"orm\", \"company\"],\n\n    start(env, { orm, company }) {\n        if (session.iap_company_enrich) {\n            const currentCompanyId = company.currentCompany.id;\n            orm.silent.call(\"res.company\", \"iap_enrich_auto\", [currentCompanyId], {});\n        }\n    },\n};\n\nregistry\n    .category(\"services\")\n    .add(\"partner_autocomplete.companyAutocomplete\", companyAutocompleteService);\n", "odoo.define('sale.account_reconciliation', function (require) {\n\"use strict\";\n\nvar ReconciliationRenderers = require('account.ReconciliationRenderer');\nvar ReconciliationAction = require('account.ReconciliationClientAction');\nvar ReconciliationModel = require('account.ReconciliationModel');\nvar LineRenderer = ReconciliationRenderers.LineRenderer;\nvar StatementAction = ReconciliationAction.StatementAction;\nvar core = require('web.core');\nvar _t = core._t;\n\nLineRenderer.include({\n    events: _.extend(\n        {},\n        LineRenderer.prototype.events,\n        {'click .o_notebook .js_open_so': '_onOpenSaleOrder'}\n    ),\n\n    _onOpenSaleOrder: function (event) {\n        event.preventDefault();\n        this.trigger_up('open_sale_orders');\n    },\n\n});\n\nReconciliationModel.StatementModel.include({\n    _getDefaultMode: function(handle) {\n        var line = this.getLine(handle);\n        var ret = this._super(handle)\n        if (ret !== 'inactive' && line.sale_order_ids && line.sale_order_ids.length && line.sale_order_prioritize) {\n            return 'saleorder'\n        } else {\n            return ret;\n        }\n    },\n    _getAvailableModes: function(handle) {\n        var line = this.getLine(handle);\n        var modes = this._super(handle);\n        if (line.sale_order_ids && line.sale_order_ids.length && line.sale_order_prioritize) {\n            modes.push('saleorder')\n        }\n        return modes;\n    },\n});\n\nStatementAction.include({\n    custom_events: _.extend(\n        {},\n        StatementAction.prototype.custom_events,\n        {open_sale_orders: '_onOpenSaleOrders',}\n    ),\n\n    _onOpenSaleOrders: function(event) {\n        var self = this;\n        var handle = event.target.handle;\n        var line = this.model.getLine(handle);\n        if (line.sale_order_ids && line.sale_order_ids.length > 1) {\n            // Open tree view\n            this.do_action({\n                name: _t('Sale Orders'),\n                type: 'ir.actions.act_window',\n                res_model: 'sale.order',\n                views: [[false, 'list'], [false, 'form']],\n                view_mode: \"list\",\n                target: 'current',\n                domain: [['id', 'in', line.sale_order_ids]]\n            },\n            {\n                on_reverse_breadcrumb: function() {self.trigger_up('reload');},\n            });\n        }\n        else if (line.sale_order_ids && line.sale_order_ids.length === 1) {\n            // Open form view\n            this.do_action({\n                name: _t('Sale Order'),\n                type: 'ir.actions.act_window',\n                res_model: 'sale.order',\n                views: [[false, 'form']],\n                target: 'current',\n                res_id: line.sale_order_ids[0],\n            },\n            {\n                on_reverse_breadcrumb: function() {self.trigger_up('reload');},\n            });\n        }\n    },\n});\n\n})\n", "/** @odoo-module **/\n\nimport config from 'web.config';\nimport { patch } from 'web.utils';\nimport ProjectRightPanel from '@project/js/right_panel/project_right_panel';\n\nif (config.device.isMobile) {\n    patch(ProjectRightPanel.prototype, 'sale_timesheet_enterprise.ProjectRightPanel', {\n        setup() {\n            this._super();\n            this.section.profitability = {\n                closed: true,\n            };\n        },\n    });\n}\n", "/** @odoo-module **/\n\nimport { Message } from '@mail/components/message/message';\n\nimport { patch } from 'web.utils';\n\nconst { useState } = owl;\n\npatch(Message.prototype, 'snailmail/static/src/components/message/message.js', {\n    /**\n     * @override\n     */\n    _constructor() {\n        this._super(...arguments);\n        this.snailmailState = useState({\n            // Determine if the error dialog is displayed.\n            hasDialog: false,\n        });\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     */\n    _onClickFailure() {\n        if (this.messageView.message.message_type === 'snailmail') {\n            /**\n             * Messages from snailmail are considered to have at most one\n             * notification. The failure type of the whole message is considered\n             * to be the same as the one from that first notification, and the\n             * click action will depend on it.\n             */\n            switch (this.messageView.message.notifications[0].failure_type) {\n                case 'sn_credit':\n                    // URL only used in this component, not received at init\n                    this.messaging.fetchSnailmailCreditsUrl();\n                    this.snailmailState.hasDialog = true;\n                    break;\n                case 'sn_error':\n                    this.snailmailState.hasDialog = true;\n                    break;\n                case 'sn_fields':\n                    this.messageView.message.openMissingFieldsLetterAction();\n                    break;\n                case 'sn_format':\n                    this.messageView.message.openFormatLetterAction();\n                    break;\n                case 'sn_price':\n                    this.snailmailState.hasDialog = true;\n                    break;\n                case 'sn_trial':\n                    // URL only used in this component, not received at init\n                    this.messaging.fetchSnailmailCreditsUrlTrial();\n                    this.snailmailState.hasDialog = true;\n                    break;\n            }\n        } else {\n            this._super(...arguments);\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     */\n    _onDialogClosedSnailmailError() {\n        this.snailmailState.hasDialog = false;\n    },\n});\n", "/** @odoo-module **/\n\nimport { NotificationGroup } from '@mail/components/notification_group/notification_group';\n\nimport { patch } from 'web.utils';\n\npatch(NotificationGroup.prototype, 'snailmail/static/src/components/notification_group/notification_group.js', {\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     */\n    image() {\n        if (this.group.notification_type === 'snail') {\n            return '/snailmail/static/img/snailmail_failure.png';\n        }\n        return this._super(...arguments);\n    },\n});\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nimport Dialog from 'web.OwlDialog';\n\nconst { Component } = owl;\nconst { useRef } = owl.hooks;\n\nclass SnailmailErrorDialog extends Component {\n\n    /**\n     * @override\n     */\n    constructor(...args) {\n        super(...args);\n        // to manually trigger the dialog close event\n        this._dialogRef = useRef('dialog');\n    }\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @returns {boolean}\n     */\n    get hasCreditsError() {\n        return (\n            this.notification.failure_type === 'sn_credit' ||\n            this.notification.failure_type === 'sn_trial'\n        );\n    }\n\n    /**\n     * @returns {mail.message}\n     */\n    get message() {\n        return this.messaging && this.messaging.models['mail.message'].get(this.props.messageLocalId);\n    }\n\n    /**\n     * @returns {mail.notification}\n     */\n    get notification() {\n        // Messages from snailmail are considered to have at most one notification.\n        return this.message.notifications[0];\n    }\n\n    /**\n     * @returns {string}\n     */\n    get title() {\n        return this.env._t(\"Failed letter\");\n    }\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * @private\n     */\n    _onClickCancelLetter() {\n        this._dialogRef.comp._close();\n        this.message.cancelLetter();\n    }\n\n    /**\n     * @private\n     */\n    _onClickClose() {\n        this._dialogRef.comp._close();\n    }\n\n    /**\n     * @private\n     */\n    _onClickResendLetter() {\n        this._dialogRef.comp._close();\n        this.message.resendLetter();\n    }\n\n}\n\nObject.assign(SnailmailErrorDialog, {\n    components: { Dialog },\n    props: {\n        messageLocalId: String,\n    },\n    template: 'snailmail.SnailmailErrorDialog',\n});\n\nregisterMessagingComponent(SnailmailErrorDialog);\n\nexport default SnailmailErrorDialog;\n", "/** @odoo-module **/\n\nimport { registerMessagingComponent } from '@mail/utils/messaging_component';\n\nconst { Component } = owl;\n\nclass SnailmailNotificationPopover extends Component {\n\n    /**\n     * @returns {string}\n     */\n    get iconClass() {\n        switch (this.notification.notification_status) {\n            case 'sent':\n                return 'fa fa-check';\n            case 'ready':\n                return 'fa fa-clock-o';\n            case 'canceled':\n                return 'fa fa-trash-o';\n            default:\n                return 'fa fa-exclamation text-danger';\n        }\n    }\n\n    /**\n     * @returns {string}\n     */\n    get iconTitle() {\n        switch (this.notification.notification_status) {\n            case 'sent':\n                return this.env._t(\"Sent\");\n            case 'ready':\n                return this.env._t(\"Awaiting Dispatch\");\n            case 'canceled':\n                return this.env._t(\"Canceled\");\n            default:\n                return this.env._t(\"Error\");\n        }\n    }\n\n    /**\n     * @returns {mail.message}\n     */\n    get message() {\n        return this.messaging && this.messaging.models['mail.message'].get(this.props.messageLocalId);\n    }\n\n    /**\n     * @returns {mail.notification}\n     */\n    get notification() {\n        // Messages from snailmail are considered to have at most one notification.\n        return this.message.notifications[0];\n    }\n\n}\n\nObject.assign(SnailmailNotificationPopover, {\n    props: {\n        messageLocalId: String,\n    },\n    template: 'snailmail.SnailmailNotificationPopover',\n});\n\nregisterMessagingComponent(SnailmailNotificationPopover);\n\nexport default SnailmailNotificationPopover;\n", "/** @odoo-module **/\n\nimport { registerInstancePatchModel } from '@mail/model/model_core';\n\nregisterInstancePatchModel('mail.message', 'snailmail/static/src/models/message.message.js', {\n\n    //----------------------------------------------------------------------\n    // Public\n    //----------------------------------------------------------------------\n\n    /**\n     * Cancels the 'snailmail.letter' corresponding to this message.\n     *\n     * @returns {Deferred}\n     */\n    async cancelLetter() {\n        // the result will come from longpolling: message_notification_update\n        await this.async(() => this.env.services.rpc({\n            model: 'mail.message',\n            method: 'cancel_letter',\n            args: [[this.id]],\n        }));\n    },\n    /**\n     * Opens the action about 'snailmail.letter' format error.\n     */\n    openFormatLetterAction() {\n        this.env.bus.trigger('do-action', {\n            action: 'snailmail.snailmail_letter_format_error_action',\n            options: {\n                additional_context: {\n                    message_id: this.id,\n                },\n            },\n        });\n    },\n    /**\n     * Opens the action about 'snailmail.letter' missing fields.\n     */\n    async openMissingFieldsLetterAction() {\n        const letterIds = await this.async(() => this.env.services.rpc({\n            model: 'snailmail.letter',\n            method: 'search',\n            args: [[['message_id', '=', this.id]]],\n        }));\n        this.env.bus.trigger('do-action', {\n            action: 'snailmail.snailmail_letter_missing_required_fields_action',\n            options: {\n                additional_context: {\n                    default_letter_id: letterIds[0],\n                },\n            },\n        });\n    },\n    /**\n     * Retries to send the 'snailmail.letter' corresponding to this message.\n     */\n    async resendLetter() {\n        // the result will come from longpolling: message_notification_update\n        await this.async(() => this.env.services.rpc({\n            model: 'mail.message',\n            method: 'send_letter',\n            args: [[this.id]],\n        }));\n    },\n});\n", "/** @odoo-module **/\n\nimport {\n    registerInstancePatchModel,\n    registerFieldPatchModel,\n} from '@mail/model/model_core';\nimport { attr } from '@mail/model/model_field';\n\nregisterInstancePatchModel('mail.messaging', 'snailmail/static/src/models/messaging/messaging.js', {\n    async fetchSnailmailCreditsUrl() {\n        const snailmail_credits_url = await this.async(() => this.env.services.rpc({\n            model: 'iap.account',\n            method: 'get_credits_url',\n            args: ['snailmail'],\n        }));\n        this.update({\n            snailmail_credits_url,\n        });\n    },\n    async fetchSnailmailCreditsUrlTrial() {\n        const snailmail_credits_url_trial = await this.async(() => this.env.services.rpc({\n            model: 'iap.account',\n            method: 'get_credits_url',\n            args: ['snailmail', '', 0, true],\n        }));\n        this.update({\n            snailmail_credits_url_trial,\n        });\n    },\n});\n\nregisterFieldPatchModel('mail.messaging', 'snailmail/static/src/models/messaging/messaging.js', {\n    snailmail_credits_url: attr(),\n    snailmail_credits_url_trial: attr(),\n});\n", "/** @odoo-module **/\n\nimport {\n    registerInstancePatchModel,\n} from '@mail/model/model_core';\n\nregisterInstancePatchModel('mail.notification_group', 'snailmail/static/src/models/notification_group/notification_group.js', {\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     */\n    openCancelAction() {\n        if (this.notification_type !== 'snail') {\n            return this._super(...arguments);\n        }\n        this.env.bus.trigger('do-action', {\n            action: 'snailmail.snailmail_letter_cancel_action',\n            options: {\n                additional_context: {\n                    default_model: this.res_model,\n                    unread_counter: this.notifications.length,\n                },\n            },\n        });\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     */\n    _openDocuments() {\n        if (this.notification_type !== 'snail') {\n            return this._super(...arguments);\n        }\n        this.env.bus.trigger('do-action', {\n            action: {\n                name: this.env._t(\"Snailmail Failures\"),\n                type: 'ir.actions.act_window',\n                view_mode: 'kanban,list,form',\n                views: [[false, 'kanban'], [false, 'list'], [false, 'form']],\n                target: 'current',\n                res_model: this.res_model,\n                domain: [['message_ids.snailmail_error', '=', true]],\n            },\n        });\n        if (this.messaging.device.isMobile) {\n            // messaging menu has a higher z-index than views so it must\n            // be closed to ensure the visibility of the view\n            this.messaging.messagingMenu.close();\n        }\n    },\n});\n", "odoo.define('snailmail_account.NotificationManager', function (require) {\n\"use strict\";\n\nvar AbstractService = require('web.AbstractService');\nvar core = require(\"web.core\");\n\nvar SnailmailAccountNotificationManager =  AbstractService.extend({\n    dependencies: ['bus_service'],\n\n    /**\n     * @override\n     */\n    start: function () {\n        this._super.apply(this, arguments);\n        this.call('bus_service', 'onNotification', this, this._onNotification);\n    },\n\n    _onNotification: function(notifications) {\n        for (const { payload, type } of notifications) {\n            if (type === \"snailmail_invalid_address\") {\n                this.displayNotification({ title: payload.title, message: payload.message, type: 'danger' });\n            }\n        }\n    }\n\n});\n\ncore.serviceRegistry.add('snailmail_account_notification_service', SnailmailAccountNotificationManager);\n\nreturn SnailmailAccountNotificationManager;\n\n});\n", "odoo.define('snailmail_account_followup.FollowupFormController', function (require) {\n\"use strict\";\n\nvar FollowupFormController = require('account_followup.FollowupFormController');\n\nFollowupFormController.include({\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     */\n    renderButtons: function () {\n        this._super.apply(this, arguments);\n        this.$buttons.on('click', '.o_account_followup_send_letter_button',\n            this._onSendLetter.bind(this));\n    },\n    /**\n     * Update the buttons according to followup_level.\n     *\n     * @override\n     */\n    updateButtons: function () {\n        if (!this.$buttons) {\n            return;\n        }\n        this._super.apply(this, arguments);\n        var followupLevel = this.model.localData[this.handle].data.followup_level;\n        if (followupLevel.send_letter) {\n            this.$buttons.find('button.o_account_followup_send_letter_button')\n            .removeClass('btn-secondary').addClass('btn-primary');\n        } else {\n            this.$buttons.find('button.o_account_followup_send_letter_button')\n            .removeClass('btn-primary').addClass('btn-secondary');\n        }\n    },\n\n    //--------------------------------------------------------------------------\n    // Private\n    //--------------------------------------------------------------------------\n\n    /**\n     * @override\n     * @private\n     */\n    _update: function () {\n        this.updateButtons();\n        return this._super.apply(this, arguments);\n    },\n\n    //--------------------------------------------------------------------------\n    // Handlers\n    //--------------------------------------------------------------------------\n\n    /**\n     * Send the customer statement by Post server-side.\n     *\n     * @private\n     */\n    _onSendLetter: function () {\n        var self = this;\n        this.model.doSendLetter(this.handle);\n        this.updateButtons();\n        var res_id = this.model.get(this.handle, {raw: true}).res_id;\n        this.do_action('snailmail_account_followup.followup_send', {\n            additional_context: { active_ids: [res_id] },\n            on_close: function () {\n                self.trigger_up('reload');\n            }\n        });\n    },\n});\n});\n", "odoo.define('snailmail_account_followup.FollowupFormModel', function (require) {\n\"use strict\";\n\nvar FollowupFormModel = require('account_followup.FollowupFormModel');\n\nFollowupFormModel.include({\n\n    //--------------------------------------------------------------------------\n    // Public\n    //--------------------------------------------------------------------------\n\n    /**\n     * Save the fact that the user has decided to send a letter for this record.\n     *\n     * @param {string} handle Local resource id of a record\n     */\n    doSendLetter: function (handle) {\n        var level = this.localData[handle].data.followup_level;\n        if (level && level.send_letter) {\n            level.send_letter = false;\n        }\n    },\n});\n});\n", "odoo.define('stock_enterprise.ReportGridController', function (require) {\n\"use strict\";\n\nvar GridController = require('web_grid.GridController');\nvar utils = require('web.utils');\nvar core = require('web.core');\nvar _t = core._t;\n\nvar ReportGridController = GridController.extend({\n    /**\n     * @override\n     * @return {Promise} Override magnifying glass click function in order to\n     * excute an action that display the stock.move for the selected grid\n     * cell.\n     *\n     */\n    _onOpenCellInformation: function (ev) {\n        var self = this;\n        var state = this.model.get();\n        var cellPath = ev.data.path.split('.');\n        var rowPath = cellPath.slice(0, -3).concat(['rows'], cellPath.slice(-2, -1));\n        var row = utils.into(state.data, rowPath);\n        var colPath = cellPath.slice(0, -3).concat(['cols'], cellPath.slice(-1));\n        var col = utils.into(state.data, colPath);\n        if (!row.values.product_id) {\n            this.displayNotification({ message: _t(\"Only grouping by product is supported\"), type: 'danger' });\n            return;\n        }\n        return this._rpc({\n            model: 'report.stock.quantity',\n            method: 'action_open_moves',\n            args: [\n                row.values.product_id[0],\n                row.values.state.data,\n                col.values.date[0].split('/')[0],\n            ]\n        }).then(function (action) {\n            return self.do_action(action);\n        });\n    },\n});\n\nreturn ReportGridController;\n\n});\n", "odoo.define('stock_enterprise.ReportGridView', function (require) {\n'use strict';\n\nvar GridView = require('web_grid.GridView');\nvar ReportGridController = require('stock_enterprise.ReportGridController');\nvar viewRegistry = require('web.view_registry');\n\nvar ReportGridView = GridView.extend({\n    config: _.extend({}, GridView.prototype.config, {\n        Controller: ReportGridController,\n    }),\n});\n\nviewRegistry.add('stock_enterprise_report_grid', ReportGridView);\n\nreturn ReportGridView;\n\n});\n"], "file": "/web/assets/4192-77c5fee/web.assets_backend.js", "sourceRoot": "../../../"}